mirror of
https://github.com/multica-ai/multica.git
synced 2026-07-26 12:35:35 +02:00
* fix(issues): render thread replies in chronological order (#3691)
collectThreadReplies walked the parent_id tree depth-first, so an agent
reply forced to nest under its trigger comment rendered before earlier
sibling replies (A-D-B-C instead of A-B-C-D) whenever the agent returned
late. Sort the collected subtree by created_at (id tie-break) so the
thread reads in arrival order — the same order the server already feeds
agents via `comment list --thread` (ListThreadCommentsForIssue).
All other consumers of the array (resolution derivation, fold bars,
counts, deep-link) are order-independent.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(skills): rebuild skills list on shared Linear-style list grid
- new ListGrid primitives (subgrid: single source of truth for column tracks)
- skills list: sortable columns, used-by avatar stack, source/creator columns,
row kebab + batch toolbar with add-to-agent and delete
- skill view store in core; addAgentSkills client method; HoverCheck extracted
to views/common (issues header now imports the shared copy)
- locale keys for list actions/filters and the reworked detail page
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(skills): rework detail page into overview/files tabs
- tabs directly under the breadcrumb header: overview (default) and files
- overview: identity block + rendered SKILL.md as the main column, right
rail with metadata card (source/creator/updated, inline name+description
edit toggle) and used-by panel with bind/unbind
- files: file tree + viewer/editor unchanged; SKILL.md "edit" jumps here
- header kebab menu (copy skill ID, delete); page-level save bar shared by
both tabs; tab state persisted in ?tab=
- file tree: ARIA tree roles + roving-tabindex keyboard navigation
- drop the old right sidebar (metadata dl, permissions paragraph)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* revert(skills): restore detail page to main, keep branch list-only
Drop the overview/files tabs rework from this branch so the PR scope is
the list rebuild only. skill-detail-page.tsx and file-tree.tsx are back
to the main versions; the locale detail/file_tree sections are restored
to match. The detail rework is preserved on stash/skills-detail-tabs
for a follow-up PR.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(skills): drop description column from skills list
Description is agent-facing routing metadata, not a scannable list
property — Linear's display options expose no description column for
the same reason. Removes the cell, column key, display toggle, lg grid
track, skeleton cells, and the now-dead table.description /
table.no_description locale keys.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(skills): drive list column hiding by container width, drop by priority
Replace viewport sm:/lg: breakpoints with Tailwind v4 container query
variants (@2xl/@4xl) on the list wrapper, so an open sidebar or split
pane narrows the column set instead of squashing tracks. Remove the
min-w-fit + overflow-x-auto horizontal-scroll fallback: when space runs
out, low-priority columns (created/source/creator, then updated) drop
and return as the container widens; name and usedBy never drop. ListGrid
conventions comment updated — this is the template for all list pages.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(skills): virtualize list rows with @tanstack/react-virtual
Linear-style headless virtualization: the virtualizer computes the
visible index range and offsets; offsets land as padding on the
scrolling ListGridBody so mounted rows stay direct subgrid children and
column alignment is untouched. Fixed 48px rows skip per-row measurement.
Hideable column tracks move from max-content to deterministic widths
(CSS vars) — with only the visible slice mounted, content-driven tracks
would resize during scroll. A user-hidden column zeroes its var so the
track still collapses; per-cell max-w caps move into the tracks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(skills): list tiers must fit their container trigger width
The @4xl tier's track sum (~1080px with gaps) exceeded its 896px
trigger; with the horizontal-scroll fallback gone, the right-side
columns were clipped unreachably between 896-1080px. Move tier 3 to
@5xl (1024px), trim usedBy/source/creator tracks, and document the
fit invariant with its arithmetic next to the template and in the
ListGrid conventions.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(skills): show description as subtext under the skill name
Lives in the name track as a second truncated line (max-w 36rem,
title attr for the full text) — no track, no header, no slot in the
responsive arithmetic. Both lines fit the fixed 48px row, so the
virtualizer contract is untouched; rows without a description center
the name.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Revert "feat(skills): show description as subtext under the skill name"
This reverts commit f39721301b.
* fix(skills): anchor batch toolbar to the page, not the viewport
fixed bottom-6 left-1/2 centered the bar on the window; with the
sidebar open the list's visual center sits ~120px right of the window
center, so the bar looked off-center (worse with desktop split panes).
Page root becomes the positioning context (relative) and the bar uses
absolute — same rule applies to future list pages.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(skills): show matching count next to search while list is narrowed
"n / total" appears right of the search box only when search or
filters are active — idle state would duplicate the total already in
the page header.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(autopilots): derive trigger kinds, next run, last run status in list
The list endpoint only selected the autopilot table, so the list UI
could not answer "is this automation working" without N+1 detail
calls. Each list row now carries trigger_kinds + next_run_at (enabled
triggers only — the columns describe how it fires today) and
last_run_status (most recent run). Fields are omitempty and absent
from detail/create/update responses; clients must treat them as
optional per the API compatibility rules.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(autopilots): list schema, parsed client, and view store in core
- listAutopilots now runs through parseWithFallback with a zod schema
(this endpoint was a bare fetch — overdue per the API compatibility
rules); malformed bodies degrade to an empty list, old-server rows
without assignee_type or the new derived fields parse cleanly, and
enum drift passes through as plain strings
- Autopilot type gains the three optional list-only derived fields
- New autopilots view store (scope/sort/columns/filters, persisted per
workspace): status is the promoted scope dimension so it does NOT
appear in filters — one dimension lives in exactly one place
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(autopilots): rebuild list on shared ListGrid with scope buttons
Same skeleton as the skills list (container-query tiers, deterministic
var-width tracks with documented fit arithmetic, virtualized 48px rows,
sortable headers, filter + display toolbar, page-anchored batch
toolbar), plus the autopilots-specific pieces:
- Status is the promoted SCOPE dimension: 全部/运行中/已暂停/已归档
segmented buttons with full-set counts; "all" = active+paused
(archived gets its own visible home, Linear archive semantics);
status is therefore absent from the filter dropdown
- Columns: name (paused marker inline), assignee (agent/squad),
trigger kind badges, last run (outcome dot + time, enum-drift safe
default), next run; mode/creator/created opt-in hidden
- Filters: assignee, trigger kind, mode, creator (composite type:id
values for polymorphic actors); sort name/lastRun/nextRun/created
with lastRun desc default
- Row kebab (pause/resume/archive/unarchive/delete) and batch toolbar
share one delete dialog; status changes ride useUpdateAutopilot's
optimistic cache
- Fix noUncheckedIndexedAccess errors the branch had never typechecked
(skills virtual rows, UsedByCell, added_toast)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(autopilots): scope buttons follow the issues header pattern
Replace the bespoke segmented-pill control with the existing scope
button convention from the issues page: outline buttons with bg-accent
active state on md+, collapsing to a radio dropdown below md. Counts
stay (stage inventories from the full set).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(skills,autopilots): toolbar small-screen treatment follows issues header
Below md: the search box (and its result count) disappear entirely,
and the filter/display controls collapse to square icon-only buttons
(labels and the clear-X are md+), matching the issues header's
responsive pattern.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(skills,autopilots): two-zone columns — WYSIWYG with scroll escape valve
Static width tiers silently hid user-enabled columns (toggle on,
nothing appears — autopilots' mode/creator/created sat behind a 1280px
container gate no laptop reaches; skills' source/created behind
1024px). Tiers can't know how many columns are enabled, so the
mechanism is replaced, not retuned:
- ≥@2xl container: every enabled column renders; the grid carries
min-width = Σ(enabled tracks + gaps) (pure constants, no
measurement) and the wrapper scrolls horizontally only when the
enabled set outgrows the container
- <@2xl: static core set (skills: name+usedBy; autopilots:
name+assignee), no scroll, toggles don't apply
Per-tier templates and the hand-maintained fit arithmetic retire;
ListGrid conventions updated accordingly.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(skills,autopilots): widen name column minimums (120px base, 200px wide)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(autopilots): drop the archived scope and the list search box
Archiving never existed as a UI flow (the DB status value is only
reachable via direct API; the detail page disables its switch when
archived), so the list stops inventing it: no archived scope, no
archive/unarchive row or batch actions. API-archived rows are excluded
everywhere; a persisted retired scope value falls back to "all".
The search box goes too — scope buttons already partition the small
set, search is redundant (product call). Skills keeps its search (no
scope there).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(skills,autopilots): quiet outline create buttons in page headers
Page-header chrome shouldn't carry the loudest element on the page:
the create button becomes outline with text on md+ and collapses to a
square plus icon below md (same responsive treatment as the toolbar
controls). Primary stays reserved for empty-state CTAs. Agents follows
when its list migrates to ListGrid.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(agents): rebuild list on shared ListGrid with identity rows
Same skeleton as the skills/autopilots lists (two-zone container
responsiveness, deterministic var tracks + min-width scroll escape
valve, virtualized fixed-height rows, issues-style scope buttons,
page-anchored batch toolbar, quiet outline create button), plus the
agents-specific decisions:
- Identity rows: the documented exception to the single-line rule —
avatar + name + description two-line cells, 64px rows (agents are
few, identity-rich entities); the italic "no description"
placeholder is gone, empty descriptions just center the name
- Scope: Mine (historical default) | All | Archived with full-set
counts; archived ignores the ownership lens; no search box
- The 7d sparkline column is replaced by a sortable "Last active"
column derived from the same 30-day activity buckets (zero API
change) — per-row-normalized mini bars can't be compared across
rows, and the default sort finally has a visible anchor; the
detailed histogram stays on the hover card / detail page
- Workload folds into the status cell ("Online · 2 tasks") — a 0-2
integer doesn't earn a column
- Columns: status, runtime, last active, runs (30d); model/created
opt-in hidden; filters: availability, runtime
- Operations unchanged: row kebab reuses AgentRowActions
(cancel-tasks/duplicate/archive/restore with permissions); batch
archive (confirmed) + restore; no delete — the API has none
- View store extended (scope incl. archived, sort, columns, filters);
agent-columns.tsx (DataTable columns) deleted
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(agents): trim status track to its real worst case (160 -> 144px)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(runtimes): machine detail's runtime table on the shared ListGrid
The master-detail console keeps its shape (machines are few and
strongly categorized; left list, charts, update section untouched) —
only the right pane's runtimes table moves from TanStack DataTable to
the ListGrid family, taking the paradigm pieces that earn their keep
at 1-5 rows: subgrid template + var tracks, two-zone container
responsiveness (the pane is squeezed by the machine list, so the
core-set collapse below @2xl matters more here than on full-width
pages), min-width scroll escape valve, shared header/row/hover visual
language. Deliberately NOT taken: virtualization, sorting, filters,
column toggles, and batch selection — dead weight at this row count,
and batch-deleting runtimes (a cascade-confirm operation) is unsafe
by design.
Workload folds into the health cell ("Online · Working 2") like the
agents status cell; the owner column keeps its only-when-multiple-
owners rule via a zeroed track var. runtime-columns.tsx is deleted;
the row-menu/CLI tests render the exported cells directly.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(runtimes): collapse the kebab track when no row has actions
On a healthy local machine every row's only action (delete) is hidden
by the self-healing rule, leaving a permanent ~64px dead zone after
the CLI column. The action track now follows the owner column's
conditional-var mechanism: zeroed unless at least one row will show
the menu.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(runtimes): drop doubled header border, align create button with convention
PageHeader already carries border-b; the content wrappers' border-t
stacked a second line right under it (the only list page doing this).
"Add a computer" follows the chrome-button convention: outline with
text on md+, square plus icon below md — primary stays reserved for
the empty state CTA.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(runtimes): health cell load suffix matches the agents status cell
"Healthy · 2 tasks" instead of the old workload vocabulary
("Working 2 +1q") — the count is unit-bearing and both surfaces now
speak one language. The queued-anomaly distinction the old words
hinted at belongs to the health layer if it ever earns surfacing.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(lists): pin overflow-y-hidden on the horizontal-scroll wrappers
CSS coerces overflow-x:auto into overflow:auto on both axes, which
silently armed the list wrappers with a vertical scrollbar they were
never meant to have. Combined with the h-full grid's percentage
resolution across scrollbar-induced reflows, the wrapper's vertical
bar and horizontal bar fed each other in a non-converging layout loop
(visible as two stacked, flickering scrollbars on the agents list —
the same latent loop exists in all four wrappers; agents' wider
min-width and 64px rows just hit the trigger zone first). Vertical
scrolling belongs solely to ListGridBody; declare overflow-y-hidden
explicitly to break the loop.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(agents): single scroll container for the list (trial before rollout)
Both scroll axes move to the outer wrapper; the grid drops h-full and
the rows wrapper drops its own overflow. Kills the percentage-height
bridge between the two scroll elements that fed the flickering double
scrollbars and clipped the last row under the horizontal scrollbar.
Sticky header pins inside the scroller; vertical scrollbar now spans
the full pane (Linear's structure). Skills/autopilots follow after
visual confirmation.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(lists): roll single scroll container out to skills/autopilots, add bottom clearance
ListGridBody retires its own scrolling entirely (the agents trial
confirmed the structure): both axes live on the single outer wrapper,
grids drop the h-full percentage bridge, virtualizers point at the
wrapper. The rows wrapper gains LIST_GRID_BOTTOM_CLEARANCE (64px)
appended to the virtualization padding so the last row scrolls clear
of the chat FAB (~48px at bottom-right) and the batch toolbar (~62px).
Runtimes' machine table is untouched: content-height at the top of a
tall pane, no bridge and no practical FAB overlap.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(squads): rebuild list on shared ListGrid (identity rows, minimal)
The last list joins the family. Squads are the fewest entity (1-5 rows),
so this is the agents identity-row shell on the runtime-list minimal
skeleton: ListGrid subgrid + var tracks + two-zone responsiveness +
single scroll container, but NO virtualization, checkbox, or batch.
- Identity two-line rows (squad avatar + name + description, 64px) like
agents; columns: name / leader / members (polymorphic ActorAvatar
stack from member_preview), creator + created opt-in hidden
- Scope Mine/All (creator-based, issues-header styling, <md dropdown);
no archived scope (list API hard-filters archived + no restore
endpoint), no search (scope-bearing), no filters (set too small)
- Sort name (default) / members / created
- Row kebab = Archive (= the delete endpoint, which archives + transfers
issues/autopilots to the leader); workspace owner/admin only, so the
kebab track collapses for non-admins. Reuses the existing
archive_dialog copy. No batch.
- View store extended (scope + sort + columns); zero API change — pure
frontend (member_preview/count already in the list payload)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(agents,squads): owner/created-by columns + owner filter
Surface ownership as a real column on both lists, named by what the
field actually means in each permission model:
- Agents: "Owner" — owner_id is the creator (set at creation, never
transferred) and carries management rights. Promoted to a default-
visible column (avatar + name); the half-baked inline owner avatar in
the name cell is removed ("You" badge stays).
- Squads: "Created by" (NOT Owner) — creator_id holds no rights
(archiving is workspace-admin only), so Owner would mislead. Now a
default-visible column with avatar + name.
Agents also gains an Owner filter, kept orthogonal to the Mine scope by
the single-axis rule: "Mine" is the clean no-filter personal view, so
applying any filter (owner or otherwise) leaves Mine for All, and
clicking Mine clears all filters. Owner and Mine therefore never
coexist — no "mine + owner=someone-else = empty" contradiction. Squads
keep the plain Mine/All toggle (too few rows for a creator filter).
Both lists keep a Created (date) column, opt-in hidden.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(agents): backfill new filter dimensions on rehydrate (owners crash)
A view payload persisted before the owners filter existed overwrote the
default filters wholesale on rehydrate, dropping filters.owners to
undefined and crashing the list's filter predicate (.length on
undefined). The store merge now deep-merges filters over
EMPTY_AGENT_FILTERS so newly-added dimensions always get their default.
Regression test added.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(skills,autopilots): deep-merge filters on rehydrate too
Same latent crash the agents store just hit: the copied view-store
merge spread persisted.filters wholesale, so adding a new filter
dimension later would drop it to undefined for users with older
persisted state. Harden skills and autopilots the same way (merge over
their EMPTY_*_FILTERS) before that bug can ship.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(projects): rebuild table view on ListGrid + filters + pin/delete kebab
Projects is the dual-view list: the compact table moves onto the shared
ListGrid (subgrid tracks, two-zone responsiveness, single scroll
container, FAB bottom clearance) while the comfortable card grid stays
as the alternate view, toggled by a restyled view switch (Table/Cards
outline buttons, active = bg-accent). Inline editing is preserved —
rows are NOT whole-row links; the name navigates and status/priority/
lead stay click-to-edit (matching prior behaviour, no navigate-vs-edit
conflict).
- View store extended: viewMode + sort (name/priority/status/progress/
created) + hidden columns + filters (status/priority/lead); merge
deep-merges filters (migration-safe). No scope (lead optional/often
an agent; status is a 5-value lifecycle → filter, not scope).
- Toolbar: search (kept — scopeless list) + result count + Filter
(status/priority/lead) + Display (sort+columns, table view only).
- Row kebab: Pin/Unpin (any member, reuses the existing project pin
API — zero new endpoints) + Delete (workspace admin). Pin is the
flexible per-user favourite the list previously lacked.
- Zero API change; status/priority filtering is client-side like the
other lists.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(projects): GRID_COLS must be a literal string (Tailwind can't see interpolation)
The table view's grid-cols template interpolated ${STATUS_WIDTH}px, so
Tailwind never generated the arbitrary-value class — the grid collapsed
to one column and every cell stacked vertically. Inline the literal
116px. This is the documented ListGrid rule (keep the class literal so
Tailwind scans it).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(projects): single view-toggle button, decouple Display from view mode
Two fixes from the same principle — view mode is pure presentation and
must not couple to anything:
- The view switch is now ONE button that flips table ⇄ cards (shows the
current view's icon+label, tooltip names the target), instead of two
side-by-side buttons.
- The Display (sort/columns) control no longer disappears when you
switch to cards — it was gated on isCompact, so flipping the view
made it vanish (the "filter gone after switching" weirdness). It's
always present now; only the columns *section* inside the popover is
table-only (cards have no columns). Sort applies to both views.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(projects,squads): projects multi-select + squads FAB clearance/toast
Cross-list consistency audit fixes:
- projects: add multi-select (checkbox column + select-all header +
page-anchored batch toolbar) — it's a dozens-scale full-page list
like skills/autopilots/agents but was the only one missing it. Batch
ops: Pin all (any member) + Delete (workspace admin). Table view
only (cards have no checkboxes). GRID template + min-width updated
for the checkbox track.
- squads: add the FAB bottom clearance the other full-page lists have
(last row/kebab was sliding under the chat FAB).
- squads: archive success toast was showing the dialog's question
title ("Archive this squad?"); use a proper "Squad archived" key.
Intentional and left as-is (documented): squads/runtimes have no
multi-select/virtualization (1-5 rows); projects table isn't
virtualized yet (dual-view + card grid; tracked as low-risk debt).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* feat(agents,squads): close the filter/column consistency gaps
Apply the principle "every categorical column is filterable" where it
was missing:
- agents: add a Model filter (model was a categorical column with no
filter). Distinct non-empty models from the in-scope rows.
- squads: add filters entirely (it had leader/creator columns + a
column-toggle panel but no Filter button — the only such outlier).
Leader (agent) + Creator (member) filters, with the result count and
the same Filter dropdown shape as the other lists. Store gains
SquadListFilters + toggleFilter/clearFilters + migration-safe
filters deep-merge.
autopilots creator stays default-hidden per product call (not every
"who made it" must be visible). Filter stores' partialize tests
updated.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(autopilots): match list-page root to flex-1 convention
skills/agents/projects roots use `relative flex flex-1 min-h-0 flex-col`;
autopilots used `h-full`. Both anchor the batch toolbar correctly, but
align the flex sizing for consistency across the six list surfaces.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
504 lines
26 KiB
JSON
504 lines
26 KiB
JSON
{
|
|
"page": {
|
|
"title": "에이전트",
|
|
"tagline": "이슈를 맡고, 댓글을 남기고, 상태를 업데이트하는 AI 팀원입니다.",
|
|
"learn_more": "자세히 보기 →",
|
|
"new_agent": "새 에이전트",
|
|
"search_placeholder": "에이전트 검색...",
|
|
"show_archived": "보관된 에이전트 보기 ({{count}}) →",
|
|
"of_total": "{{total}}개 중 {{visible}}개",
|
|
"list_load_failed": "에이전트 목록을 불러오지 못했습니다",
|
|
"list_load_failed_default": "에이전트 목록을 가져오는 중 문제가 발생했습니다.",
|
|
"try_again": "다시 시도"
|
|
},
|
|
"scope": {
|
|
"mine": "내 것",
|
|
"all": "전체",
|
|
"archived": "보관됨"
|
|
},
|
|
"sort": {
|
|
"label_recent": "최근 활동",
|
|
"label_name": "이름",
|
|
"label_runs": "실행 많은 순",
|
|
"label_created": "최근 생성"
|
|
},
|
|
"availability": {
|
|
"all": "전체",
|
|
"online": "온라인",
|
|
"unstable": "불안정",
|
|
"offline": "오프라인",
|
|
"archived": "보관됨"
|
|
},
|
|
"workload": {
|
|
"working": "작업 중",
|
|
"queued": "대기 중",
|
|
"idle": "유휴"
|
|
},
|
|
"archived": {
|
|
"active_link": "활성 에이전트",
|
|
"title": "보관된 에이전트"
|
|
},
|
|
"empty": {
|
|
"title": "아직 에이전트가 없습니다",
|
|
"description": "팀원에게 하듯 에이전트를 만들고 이슈를 할당하세요. 로컬 에이전트는 내 기기에서, 클라우드 에이전트는 Multica 런타임에서 실행됩니다."
|
|
},
|
|
"no_matches": {
|
|
"title": "일치하는 결과 없음",
|
|
"search_archived": "\"{{query}}\"와 일치하는 보관된 에이전트가 없습니다.",
|
|
"no_archived": "아직 보관된 에이전트가 없습니다.",
|
|
"search_active": "\"{{query}}\"와 일치하는 에이전트가 없습니다.",
|
|
"search_active_filtered": "이 필터에서 \"{{query}}\"와 일치하는 에이전트가 없습니다.",
|
|
"no_filter_match": "이 필터와 일치하는 에이전트가 없습니다.",
|
|
"search_runtime_filtered": "\"{{machine}}\"에서 \"{{query}}\"와 일치하는 에이전트가 없습니다.",
|
|
"runtime_filtered": "\"{{machine}}\"에 에이전트가 없습니다."
|
|
},
|
|
"runtime_filter": {
|
|
"all": "모든 런타임",
|
|
"section_local": "로컬",
|
|
"section_remote": "원격",
|
|
"section_cloud": "클라우드",
|
|
"agent_count_one": "에이전트 {{count}}개",
|
|
"agent_count_other": "에이전트 {{count}}개",
|
|
"empty": "아직 기기가 없습니다"
|
|
},
|
|
"columns": {
|
|
"agent": "에이전트",
|
|
"status": "상태",
|
|
"workload": "작업량",
|
|
"runtime": "런타임",
|
|
"activity_7d": "활동(7일)",
|
|
"runs": "실행",
|
|
"last_active": "최근 활동",
|
|
"model": "모델",
|
|
"created": "생성일",
|
|
"owner": "소유자"
|
|
},
|
|
"row": {
|
|
"you": "나",
|
|
"archived": "보관됨",
|
|
"no_description": "설명 없음",
|
|
"fallback_runtime_cloud": "클라우드",
|
|
"fallback_runtime_local": "로컬",
|
|
"actions_aria": "행 작업",
|
|
"task_count_one": "태스크 {{count}}개",
|
|
"task_count_other": "태스크 {{count}}개"
|
|
},
|
|
"activity_tooltip": {
|
|
"created_today": "오늘 생성됨",
|
|
"created_days_ago_one": "{{count}}일 전에 생성됨",
|
|
"created_days_ago_other": "{{count}}일 전에 생성됨",
|
|
"last_7_days": "최근 7일",
|
|
"no_activity": "활동 없음",
|
|
"runs_one": "실행 {{count}}회",
|
|
"runs_other": "실행 {{count}}회",
|
|
"failed_suffix": " · 실패 {{count}}회({{percent}}%)"
|
|
},
|
|
"row_actions": {
|
|
"cancel_all_tasks": "모든 작업 취소",
|
|
"duplicate": "복제",
|
|
"restore": "복원",
|
|
"archive": "보관",
|
|
"agent_archived_toast": "에이전트를 보관했습니다",
|
|
"archive_failed_toast": "에이전트를 보관하지 못했습니다",
|
|
"agent_restored_toast": "에이전트를 복원했습니다",
|
|
"restore_failed_toast": "에이전트를 복원하지 못했습니다",
|
|
"no_tasks_to_cancel_toast": "취소할 활성 작업이 없습니다",
|
|
"cancelled_tasks_toast_one": "작업 {{count}}개를 취소했습니다",
|
|
"cancelled_tasks_toast_other": "작업 {{count}}개를 취소했습니다",
|
|
"cancel_failed_toast": "작업을 취소하지 못했습니다",
|
|
"cancel_dialog_title": "\"{{name}}\"의 모든 작업을 취소할까요?",
|
|
"cancel_dialog_no_tasks": "취소할 활성 작업이 없습니다.",
|
|
"cancel_dialog_running_one": "실행 중 {{count}}개",
|
|
"cancel_dialog_queued_one": "대기 중 {{count}}개",
|
|
"cancel_dialog_impact_one": "{{summary}} 작업이 취소됩니다.",
|
|
"cancel_dialog_impact_other": "{{summary}} 작업이 취소됩니다.",
|
|
"cancel_dialog_running_note": " 실행 중인 작업이 완전히 멈추기까지 최대 5초가 걸릴 수 있습니다.",
|
|
"cancel_dialog_irreversible": " 취소한 작업은 재개할 수 없습니다.",
|
|
"cancel_dialog_keep": "계속 실행",
|
|
"cancel_dialog_confirm": "모든 작업 취소",
|
|
"archive_dialog_title": "\"{{name}}\"을(를) 보관할까요?",
|
|
"archive_dialog_description": "이 에이전트는 할당하거나 멘션할 수 없고, 활성 작업은 모두 취소됩니다. 기록은 유지되며 나중에 복원할 수 있습니다.",
|
|
"archive_dialog_cancel": "취소",
|
|
"archive_dialog_confirm": "보관"
|
|
},
|
|
"detail": {
|
|
"back_to_agents": "에이전트",
|
|
"back_to_agents_full": "에이전트로 돌아가기",
|
|
"not_found_title": "에이전트를 찾을 수 없습니다",
|
|
"not_found_default": "이 에이전트가 보관되었거나 삭제되었을 수 있습니다.",
|
|
"no_access_title": "이 에이전트에 접근할 수 없습니다",
|
|
"no_access_hint": "비공개 에이전트는 에이전트 소유자 또는 워크스페이스 관리자만 볼 수 있습니다.",
|
|
"try_again": "다시 시도",
|
|
"archived_banner": "보관된 에이전트입니다. 할당하거나 멘션할 수 없습니다.",
|
|
"restore": "복원",
|
|
"archive_dialog_title": "에이전트를 보관할까요?",
|
|
"archive_dialog_description": "\"{{name}}\"이(가) 보관됩니다. 할당하거나 멘션할 수 없지만 기록은 유지됩니다. 나중에 복원할 수 있습니다.",
|
|
"archive_dialog_cancel": "취소",
|
|
"archive_dialog_confirm": "보관",
|
|
"more_archive": "에이전트 보관",
|
|
"agent_updated_toast": "에이전트를 업데이트했습니다",
|
|
"update_failed_toast": "에이전트를 업데이트하지 못했습니다",
|
|
"agent_archived_toast": "에이전트를 보관했습니다",
|
|
"archive_failed_toast": "에이전트를 보관하지 못했습니다",
|
|
"agent_restored_toast": "에이전트를 복원했습니다",
|
|
"restore_failed_toast": "에이전트를 복원하지 못했습니다"
|
|
},
|
|
"inspector": {
|
|
"section_properties": "속성",
|
|
"section_details": "세부 정보",
|
|
"section_skills": "스킬",
|
|
"section_integrations": "연동",
|
|
"prop_runtime": "런타임",
|
|
"prop_model": "모델",
|
|
"prop_thinking": "추론",
|
|
"prop_visibility": "공개 범위",
|
|
"prop_concurrency": "동시 실행",
|
|
"prop_owner": "소유자",
|
|
"prop_created": "생성일",
|
|
"prop_updated": "수정일",
|
|
"no_description_placeholder": "설명 없음",
|
|
"change_avatar_aria": "아바타 변경",
|
|
"avatar_updated_toast": "아바타를 업데이트했습니다",
|
|
"avatar_upload_failed_toast": "아바타를 업로드하지 못했습니다",
|
|
"rename_title": "에이전트 이름 변경",
|
|
"rename_placeholder": "에이전트 이름",
|
|
"rename_required": "이름은 필수입니다",
|
|
"edit_description_title": "설명 수정",
|
|
"description_placeholder": "이 에이전트는 무엇을 하나요?",
|
|
"save": "저장",
|
|
"cancel": "취소"
|
|
},
|
|
"skill_attach": {
|
|
"trigger_aria": "워크스페이스 스킬 연결",
|
|
"trigger_label": "연결"
|
|
},
|
|
"pickers": {
|
|
"concurrency_tooltip": "동시 실행 · 최대 {{value}}개 작업",
|
|
"concurrency_range": "최대 동시 작업 수({{min}}-{{max}})",
|
|
"runtime_none": "런타임 없음",
|
|
"runtime_tooltip": "런타임 · {{name}} · {{status}}",
|
|
"runtime_tooltip_none": "런타임 · 선택 안 됨",
|
|
"runtime_online": "온라인",
|
|
"runtime_offline": "오프라인",
|
|
"runtime_owned_by": "{{name}} 소유",
|
|
"runtime_empty": "런타임 없음",
|
|
"model_default": "기본값",
|
|
"model_tooltip": "모델 · {{value}}",
|
|
"model_managed_by_runtime": "런타임에서 관리",
|
|
"model_search_placeholder": "모델 ID 검색 또는 입력",
|
|
"model_discovering": "모델 찾는 중...",
|
|
"model_empty": "사용 가능한 모델이 없습니다",
|
|
"model_empty_with_dot": "사용 가능한 모델이 없습니다.",
|
|
"model_custom_tooltip": "\"{{value}}\"을(를) 사용자 지정 모델 ID로 사용",
|
|
"model_custom_use": "\"{{value}}\" 사용",
|
|
"model_clear": "지우기(제공자 기본값 사용)",
|
|
"model_clear_title": "선택을 지우고 런타임 제공자의 기본값으로 돌아갑니다",
|
|
"thinking_default": "CLI 설정 따르기",
|
|
"thinking_tooltip": "추론 · {{value}}",
|
|
"thinking_clear": "CLI 설정 따르기",
|
|
"thinking_clear_title": "재정의를 지우고 추론 수준을 로컬 CLI 설정(claude/codex)에 맡깁니다"
|
|
},
|
|
"model_dropdown": {
|
|
"label": "모델",
|
|
"select_runtime_first": "먼저 런타임을 선택하세요",
|
|
"default_provider": "기본값(제공자)",
|
|
"runtime_offline_manual": "런타임 오프라인 - 직접 입력",
|
|
"managed_by_runtime_title": "이 런타임에서 모델 선택을 관리합니다.",
|
|
"managed_by_runtime_hint": "런타임 호스트에서 모델을 설정하세요. 예: Hermes는 자체 설정 파일에서 읽습니다.",
|
|
"discovery_failed": "검색 실패",
|
|
"clear_full": "선택 지우기(제공자 기본값 사용)"
|
|
},
|
|
"tabs": {
|
|
"activity": "활동",
|
|
"tasks": "작업",
|
|
"instructions": "지침",
|
|
"skills": "스킬",
|
|
"environment": "환경",
|
|
"custom_args": "사용자 지정 인자",
|
|
"mcp_config": "MCP",
|
|
"integrations": "연동",
|
|
"runtime_config": "라우팅",
|
|
"discard_dialog_title": "저장하지 않은 변경사항을 버릴까요?",
|
|
"discard_dialog_description": "이 탭에 저장하지 않은 변경사항이 있습니다. 지금 나가면 변경사항이 사라집니다.",
|
|
"discard_keep": "계속 편집",
|
|
"discard_confirm": "변경사항 버리기"
|
|
},
|
|
"create_dialog": {
|
|
"title_create": "에이전트 만들기",
|
|
"title_duplicate": "에이전트 복제",
|
|
"description_create": "워크스페이스에 새 AI 에이전트를 만듭니다.",
|
|
"description_duplicate": "\"{{name}}\"을(를) 바탕으로 새 에이전트를 만듭니다. 지침, 환경 변수, 스킬이 복사됩니다.",
|
|
"name_label": "이름",
|
|
"name_placeholder": "예: 심층 리서치 에이전트",
|
|
"description_label": "설명",
|
|
"description_placeholder": "이 에이전트는 무엇을 하나요?",
|
|
"visibility_label": "공개 범위",
|
|
"runtime_label": "런타임",
|
|
"runtime_filter_mine": "내 것",
|
|
"runtime_filter_all": "전체",
|
|
"runtime_loading": "런타임 불러오는 중...",
|
|
"runtime_none": "사용 가능한 런타임이 없습니다",
|
|
"runtime_cloud_badge": "클라우드",
|
|
"runtime_private_badge": "비공개",
|
|
"runtime_private_locked_tooltip": "비공개 런타임입니다. 소유자 또는 워크스페이스 관리자만 이 런타임에 에이전트를 만들 수 있습니다. 공유하려면 소유자에게 공개로 전환해 달라고 요청하세요.",
|
|
"duplicate_copy_suffix": " (사본)",
|
|
"create": "만들기",
|
|
"creating": "만드는 중...",
|
|
"cancel": "취소",
|
|
"create_failed_toast": "에이전트를 만들지 못했습니다",
|
|
"skill_attach_failed_toast": "에이전트는 만들었지만 스킬을 연결하지 못했습니다: {{error}}",
|
|
"squad_join_failed_toast": "에이전트 \"{{name}}\"은(는) 만들었지만 스쿼드에 참가하지 못했습니다: {{error}}. 멤버에서 직접 추가할 수 있습니다.",
|
|
"instructions": {
|
|
"label": "지침",
|
|
"placeholder_blank": "클릭해서 지침 작성...",
|
|
"placeholder_duplicate": "클릭해서 복제된 지침 보기 또는 수정",
|
|
"collapse": "접기",
|
|
"editor_placeholder": "이 에이전트가 무엇을 해야 하는지, 무엇에 집중해야 하는지, 무엇을 피해야 하는지 작성하세요..."
|
|
},
|
|
"skills_section": {
|
|
"label": "스킬",
|
|
"placeholder": "워크스페이스에서 스킬 추가",
|
|
"selected_one": "{{count}}개 선택됨 - 클릭해서 수정",
|
|
"selected_other": "{{count}}개 선택됨 - 클릭해서 수정",
|
|
"collapse": "접기",
|
|
"list_empty_multi": "아직 이 워크스페이스에 스킬이 없습니다. 먼저 만들거나 가져오세요.",
|
|
"list_loading": "불러오는 중...",
|
|
"list_empty_default": "사용 가능한 스킬이 없습니다.",
|
|
"list_no_match": "일치하는 스킬이 없습니다.",
|
|
"search_placeholder": "스킬 검색..."
|
|
},
|
|
"avatar": {
|
|
"change_aria": "아바타 변경",
|
|
"upload_aria": "아바타 업로드",
|
|
"remove_aria": "아바타 제거",
|
|
"select_image_toast": "이미지 파일을 선택하세요.",
|
|
"upload_failed_toast": "아바타 업로드 실패"
|
|
}
|
|
},
|
|
"tab_body": {
|
|
"common": {
|
|
"save": "저장",
|
|
"add": "추가",
|
|
"unsaved_changes": "저장하지 않은 변경사항"
|
|
},
|
|
"instructions": {
|
|
"intro": "이 에이전트의 정체성과 작업 방식을 정의하세요. 모든 작업에서 에이전트 컨텍스트에 포함됩니다. Markdown을 지원합니다.",
|
|
"placeholder": "이 에이전트의 역할, 전문성, 작업 방식을 정의하세요.\n\n# 예시\n당신은 React와 TypeScript에 특화된 프런트엔드 엔지니어입니다.\n\n## 작업 방식\n- 작고 집중된 PR을 작성합니다. 논리적 변경 단위마다 커밋 하나를 사용합니다\n- 상속보다 조합을 선호합니다\n- 새 컴포넌트에는 항상 단위 테스트를 추가합니다\n\n## 제약\n- 명시적인 승인 없이 shared/ 타입을 수정하지 않습니다\n- features/의 기존 컴포넌트 패턴을 따릅니다"
|
|
},
|
|
"env": {
|
|
"intro_readonly": "에이전트 프로세스가 시작될 때 주입됩니다. 워크스페이스 소유자와 관리자만 값을 읽거나 수정할 수 있으며, 모든 공개와 수정은 워크스페이스 감사 로그에 기록됩니다.",
|
|
"empty_readonly": "설정된 환경 변수가 없습니다.",
|
|
"intro_prefix": "에이전트 프로세스가 시작될 때 주입됩니다(예: ",
|
|
"intro_separator": ", ",
|
|
"intro_suffix": ").",
|
|
"key_placeholder": "KEY",
|
|
"value_placeholder": "value",
|
|
"show_value_aria": "값 표시",
|
|
"hide_value_aria": "값 숨기기",
|
|
"remove_aria": "변수 제거",
|
|
"duplicate_keys_toast": "중복된 환경 변수 키가 있습니다",
|
|
"saved_toast": "환경 변수를 저장했습니다",
|
|
"save_failed_toast": "환경 변수를 저장하지 못했습니다",
|
|
"not_revealed_title_one": "변수 {{count}}개 설정됨",
|
|
"not_revealed_title_other": "변수 {{count}}개 설정됨",
|
|
"not_revealed_empty": "설정된 환경 변수가 없습니다.",
|
|
"not_revealed_hint": "값은 공개하기 전까지 마스킹됩니다. 모든 공개와 수정은 워크스페이스 감사 로그에 기록됩니다.",
|
|
"reveal_action": "공개하고 수정",
|
|
"revealing": "공개하는 중...",
|
|
"reveal_failed_toast": "환경 변수 값을 불러오지 못했습니다",
|
|
"empty_editable": "설정된 환경 변수가 없습니다. 시작 시 에이전트에 주입할 변수를 추가하세요."
|
|
},
|
|
"custom_args": {
|
|
"intro": "에이전트 명령을 시작할 때 뒤에 붙는 추가 CLI 인자입니다. 여러 토큰으로 된 플래그는 한 행에 둘 수 있으며, CLI에 전달되기 전에 공백 기준으로 나뉩니다.",
|
|
"launch_mode_prefix": "시작 모드: ",
|
|
"launch_mode_args_placeholder": "<인자>",
|
|
"input_placeholder": "--flag value",
|
|
"remove_aria": "인자 제거",
|
|
"saved_toast": "사용자 지정 인자를 저장했습니다",
|
|
"save_failed_toast": "사용자 지정 인자를 저장하지 못했습니다"
|
|
},
|
|
"mcp_config": {
|
|
"intro": "런타임 CLI로 전달되는 MCP server configuration입니다(Claude는 --mcp-config, Codex는 $CODEX_HOME/config.toml, Hermes/Kimi/Kiro는 ACP mcpServers, OpenCode는 OPENCODE_CONFIG_CONTENT, OpenClaw는 task별 config wrapper). 그대로 저장되며 secret이 포함될 수 있으므로 에이전트 소유자와 워크스페이스 관리자만 읽을 수 있습니다. 비워두면 CLI 자체 기본값을 사용합니다. OpenClaw HTTP/SSE 항목은 Claude의 \"type\" 대신 OpenClaw의 필드명(예: \"transport\": \"streamable-http\")을 사용하세요.",
|
|
"placeholder": "{\n \"mcpServers\": {\n \"fetch\": {\n \"command\": \"uvx\",\n \"args\": [\"mcp-server-fetch\"]\n }\n }\n}",
|
|
"editor_aria": "MCP config JSON editor",
|
|
"clear_action": "지우기",
|
|
"invalid_json": "잘못된 JSON: {{error}}",
|
|
"invalid_not_object": "MCP config는 JSON object여야 합니다(예: {\"mcpServers\": …}).",
|
|
"saved_toast": "MCP config를 저장했습니다",
|
|
"save_failed_toast": "MCP config를 저장하지 못했습니다",
|
|
"redacted_title": "설정됨 - 현재 보기에서는 숨김",
|
|
"redacted_hint": "에이전트 소유자 또는 워크스페이스 관리자만 이 config를 읽을 수 있습니다."
|
|
},
|
|
"runtime_config": {
|
|
"intro": "OpenClaw 런타임이 이 에이전트의 각 턴을 어떻게 실행할지 선택하세요. Local 모드는 에이전트를 daemon 프로세스 내부에서 실행합니다. Gateway 모드는 각 턴을 OpenClaw Gateway로 전달합니다 — daemon 호스트가 가벼운 조율기 역할을 하고 실제 작업은 더 강력한 머신에서 돌리고 싶을 때 유용합니다.",
|
|
"mode_label": "라우팅 모드",
|
|
"mode_local": "Local",
|
|
"mode_gateway": "Gateway",
|
|
"mode_local_hint": "기본값. daemon이 `openclaw agent --local …`을 실행하고 에이전트 루프가 이 호스트에서 동작합니다.",
|
|
"mode_gateway_hint": "daemon이 OpenClaw Gateway에 다이얼합니다. 엔드포인트 필드를 비워두면 daemon 호스트의 `~/.openclaw/openclaw.json`에서 상속받습니다.",
|
|
"gateway_legend": "Gateway 엔드포인트",
|
|
"host_label": "Host",
|
|
"host_placeholder": "gw.internal",
|
|
"port_label": "포트",
|
|
"port_invalid": "포트는 양의 정수여야 합니다.",
|
|
"token_label": "인증 토큰",
|
|
"token_placeholder": "Gateway가 발급한 bearer 토큰",
|
|
"token_masked_placeholder": "저장됨 — 회전하려면 새 값을 입력. 비워두면 유지됩니다",
|
|
"tls_label": "TLS 사용",
|
|
"tls_hint": "http:// 대신 https://로 다이얼",
|
|
"saved_toast": "라우팅 설정이 저장되었습니다",
|
|
"save_failed_toast": "라우팅 설정 저장 실패"
|
|
},
|
|
"skills": {
|
|
"intro": "이 에이전트에 할당된 워크스페이스 스킬입니다. 로컬 런타임 스킬은 항상 자동으로 사용할 수 있습니다.",
|
|
"add_action": "스킬 추가",
|
|
"empty_title": "할당된 스킬이 없습니다",
|
|
"empty_hint": "워크스페이스 스킬을 추가해 이 에이전트와 팀 지식을 공유하세요.",
|
|
"remove_failed_toast": "스킬을 제거하지 못했습니다",
|
|
"add_dialog_title": "스킬 추가",
|
|
"add_dialog_description": "이 에이전트에 할당할 워크스페이스 스킬을 선택하세요.",
|
|
"add_dialog_search_placeholder": "스킬 검색",
|
|
"add_dialog_empty": "모든 워크스페이스 스킬이 이미 할당되어 있습니다.",
|
|
"add_dialog_no_match": "검색 결과와 일치하는 스킬이 없습니다.",
|
|
"add_dialog_empty_partial": "더 추가할 스킬이 없습니다. 이 에이전트에 모든 스킬이 이미 할당되어 있습니다.",
|
|
"add_dialog_saving": "추가하는 중...",
|
|
"add_dialog_confirm_default": "추가",
|
|
"add_dialog_confirm_one": "스킬 {{count}}개 추가",
|
|
"add_dialog_confirm_other": "스킬 {{count}}개 추가",
|
|
"add_dialog_cancel": "취소",
|
|
"add_failed_toast": "스킬을 추가하지 못했습니다"
|
|
},
|
|
"integrations": {
|
|
"intro": "이 에이전트를 외부 채팅 플랫폼에 연결해 팀원이 평소 사용하는 도구에서 바로 함께 작업할 수 있도록 합니다.",
|
|
"members_note": "에이전트에 Lark 봇을 연결할 수 있는 사람은 워크스페이스 소유자와 관리자뿐입니다. 연결된 봇은 설정 → 연동에서 확인할 수 있습니다."
|
|
},
|
|
"activity": {
|
|
"section_now": "현재",
|
|
"section_last_30d": "최근 30일",
|
|
"section_recent": "최근 작업",
|
|
"subtitle_no_active": "활성 작업 없음",
|
|
"subtitle_active_one": "활성 작업 {{count}}개",
|
|
"subtitle_active_other": "활성 작업 {{count}}개",
|
|
"subtitle_performance": "성과",
|
|
"subtitle_no_recent": "아직 완료된 작업 없음",
|
|
"subtitle_recent_progress": "{{total}}개 중 {{shown}}개",
|
|
"subtitle_recent_latest": "최근 {{count}}개",
|
|
"empty_now": "이 에이전트는 지금 실행 중인 작업이 없습니다.",
|
|
"empty_30d": "최근 30일 동안 완료된 작업이 없습니다.",
|
|
"empty_recent": "이 에이전트는 아직 완료한 작업이 없습니다.",
|
|
"show_more": "더 보기 →",
|
|
"runs_one": "회 실행",
|
|
"runs_other": "회 실행",
|
|
"success_pct": "성공률 {{percent}}%",
|
|
"avg_duration": "평균 {{value}}",
|
|
"failed_count": "{{count}}회 실패",
|
|
"source_issue": "이슈",
|
|
"source_chat": "채팅",
|
|
"source_autopilot": "오토파일럿",
|
|
"source_untracked": "추적 안 됨",
|
|
"source_quick_create": "빠른 생성",
|
|
"source_creating_issue": "이슈 생성 중",
|
|
"source_chat_session": "채팅 세션",
|
|
"source_autopilot_run": "오토파일럿 실행",
|
|
"issue_short_fallback": "이슈 {{prefix}}...",
|
|
"triggered_by": "트리거한 사람",
|
|
"open_issue_aria": "이슈 열기",
|
|
"open_issue_tooltip": "이슈 열기",
|
|
"transcript_tooltip": "트랜스크립트 보기",
|
|
"cancel_task_aria": "작업 취소",
|
|
"cancel_task_tooltip": "작업 취소",
|
|
"cancelling_tooltip": "취소하는 중...",
|
|
"cancel_failed_toast": "작업을 취소하지 못했습니다",
|
|
"started_prefix": "{{when}} 시작됨",
|
|
"dispatched_prefix": "{{when}} 디스패치됨",
|
|
"queued_prefix": "{{when}} 대기 시작"
|
|
}
|
|
},
|
|
"char_counter": {
|
|
"over_limit": " · 제한 초과 {{count}}자"
|
|
},
|
|
"presence": {
|
|
"queue_badge": "+{{count}} 대기 중"
|
|
},
|
|
"visibility": {
|
|
"private": {
|
|
"label": "개인",
|
|
"tooltip": "개인 · 본인과 워크스페이스 관리자만 이 에이전트를 사용할 수 있습니다"
|
|
},
|
|
"workspace": {
|
|
"label": "워크스페이스",
|
|
"tooltip": "워크스페이스 · 이 워크스페이스의 모든 사람이 이 에이전트를 사용할 수 있습니다"
|
|
}
|
|
},
|
|
"profile_card": {
|
|
"unavailable": "에이전트를 사용할 수 없습니다",
|
|
"detail_link": "자세히 →",
|
|
"runtime_label": "런타임",
|
|
"skills_label": "스킬",
|
|
"owner_label": "소유자",
|
|
"unknown_runtime": "알 수 없는 런타임"
|
|
},
|
|
"live_peek": {
|
|
"current_issue_label": "현재 작업",
|
|
"no_current_issue": "작업 없음",
|
|
"last_activity_label": "마지막 접속",
|
|
"no_recent_activity": "최근 활동 없음",
|
|
"failed_indicator": "실패"
|
|
},
|
|
"transcript": {
|
|
"dialog_title": "에이전트 실행 트랜스크립트",
|
|
"status_running": "실행 중",
|
|
"status_completed": "완료됨",
|
|
"status_failed": "실패함",
|
|
"filter": "필터",
|
|
"clear_filters": "필터 지우기",
|
|
"tool_calls_one": "도구 호출 {{count}}회",
|
|
"tool_calls_other": "도구 호출 {{count}}회",
|
|
"events_one": "이벤트 {{count}}개",
|
|
"events_other": "이벤트 {{count}}개",
|
|
"events_filtered": "이벤트 {{total}}개 중 {{shown}}개",
|
|
"copy_all": "전체 복사",
|
|
"copy_filtered": "필터 결과 복사",
|
|
"copied": "복사했습니다",
|
|
"waiting_events": "이벤트를 기다리는 중...",
|
|
"no_data": "기록된 실행 데이터가 없습니다.",
|
|
"sort_label": "정렬",
|
|
"sort_chronological": "오래된 순",
|
|
"sort_newest_first": "최신 순"
|
|
},
|
|
"task_failure": {
|
|
"agent_error": "에이전트 실행 오류",
|
|
"timeout": "작업 시간 초과",
|
|
"runtime_offline": "데몬 오프라인",
|
|
"runtime_recovery": "데몬 재시작됨",
|
|
"manual": "사용자가 취소함"
|
|
},
|
|
"last_active": {
|
|
"today": "오늘",
|
|
"days_ago_one": "{{count}}일 전",
|
|
"days_ago_other": "{{count}}일 전",
|
|
"none": "30일간 활동 없음"
|
|
},
|
|
"toolbar": {
|
|
"result_count_title": "일치하는 에이전트 / 범위 내 전체",
|
|
"filter_label": "필터",
|
|
"filter_active_count_one": "필터 {{count}}개",
|
|
"filter_active_count_other": "필터 {{count}}개",
|
|
"clear_filters": "필터 지우기",
|
|
"section_availability": "가용성",
|
|
"section_runtime": "런타임",
|
|
"display": "표시",
|
|
"sort_by": "정렬",
|
|
"direction_asc": "오름차순",
|
|
"direction_desc": "내림차순",
|
|
"section_columns": "열",
|
|
"section_owner": "소유자",
|
|
"section_model": "모델"
|
|
},
|
|
"actions": {
|
|
"selected_one": "{{count}}개 선택됨",
|
|
"selected_other": "{{count}}개 선택됨",
|
|
"clear_selection": "선택 해제"
|
|
}
|
|
}
|