Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions app/i18n.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ const DICT = {
'room.loadFail': ['회의 내용을 불러오지 못했습니다 — 잠시 후 자동으로 다시 시도합니다', "Couldn't load the meeting — retrying automatically"],
'runner.effortLabel': ['추론 강도', 'Reasoning effort'],
'runner.effortDefault': ['강도 기본', 'Default effort'],
'runner.effortAutoHint': ['추론 강도 — Claude·Codex로 실행될 때 적용됩니다(Antigravity는 모델 선택에 강도가 포함 · Gemini·GLM·Kimi·OpenRouter·Grok은 미지원)', 'Reasoning effort — applies on Claude and Codex (Antigravity bakes effort into model choice; not supported on Gemini, GLM, Kimi, OpenRouter, Grok)'],
'runner.effortAutoHint': ['추론 강도 — Claude·Codex·Kiro로 실행될 때 적용됩니다(Antigravity는 모델 선택에 강도가 포함 · Gemini·GLM·Kimi·OpenRouter·Grok은 미지원)', 'Reasoning effort — applies on Claude, Codex and Kiro (Antigravity bakes effort into model choice; not supported on Gemini, GLM, Kimi, OpenRouter, Grok)'],
'runner.effort.low': ['낮음 — 빠름', 'Low — fastest'],
'runner.effort.medium': ['보통', 'Medium'],
'runner.effort.high': ['높음', 'High'],
Expand Down Expand Up @@ -289,7 +289,7 @@ const DICT = {
'settings.workroots.placeholder': ['폴더의 절대 경로', 'Absolute path to a folder'],
'settings.workroots.add': ['추가', 'Add'],
'settings.workroots.remove': ['해제', 'Remove'],
'settings.workroots.runnerNote': ['Claude·GLM·Kimi·Grok 크루는 도구 게이트가 폴더 단위로 적용하고, Argo 앱·자격 폴더는 항상 차단합니다. Codex·Gemini·Antigravity 크루는 프로세스 단위 샌드박스에 같은 폴더 목록이 그대로 전달됩니다 — 넓은 폴더(예: 홈 전체)를 지정하면 그 안의 보호 폴더까지 함께 열릴 수 있으니 필요한 폴더만 좁게 지정하세요. 이 러너들은 지정하지 않은 폴더는 아예 읽지도 쓰지도 못하며, 구버전 Gemini CLI는 벤더 제한으로 지정 폴더 확장이 무시될 수 있습니다.', 'For Claude·GLM·Kimi·Grok crews the tool gate applies per folder and always blocks the Argo app and credential folders. Codex·Gemini·Antigravity crews receive the same folder list in their process-level sandbox — assigning a broad folder (e.g. your whole home) can open protected folders inside it too, so assign only what you need. These runners cannot read or write folders you have not assigned, and older Gemini CLI builds may ignore the expansion entirely (a vendor limit).'],
'settings.workroots.runnerNote': ['Claude·GLM·Kimi·Grok 크루는 도구 게이트가 폴더 단위로 적용하고, Argo 앱·자격 폴더는 항상 차단합니다. Codex·Gemini·Antigravity 크루는 프로세스 단위 샌드박스에 같은 폴더 목록이 그대로 전달됩니다 — 넓은 폴더(예: 홈 전체)를 지정하면 그 안의 보호 폴더까지 함께 열릴 수 있으니 필요한 폴더만 좁게 지정하세요. 이 러너들은 지정하지 않은 폴더는 아예 읽지도 쓰지도 못하며, 구버전 Gemini CLI는 벤더 제한으로 지정 폴더 확장이 무시될 수 있습니다. Kiro 크루는 예외입니다 — 벤더 CLI에 폴더 반경을 강제할 수단이 없어 지정 폴더가 반경으로 적용되지 않습니다. Argo 앱 폴더, 러너 자격 폴더(~/.argo·~/.codex·~/.claude·~/.gemini 등), 다른 회사 데이터, 회사 금고(연결·능력·크루 카드·대화 정본)의 내용은 차단하지만(다만 폴더·파일 이름 목록은 보일 수 있습니다 — 벤더 제한), 그 밖의 이 컴퓨터 파일은 크루가 읽고 쓸 수 있습니다(새 파일·폴더 생성 포함). 또한 Kiro 크루에게는 터미널(셸)·검색 도구를 주지 않습니다 — 그 도구들에는 위 차단이 적용되지 않아 경계를 우회하기 때문입니다(파일 읽기·쓰기로만 일합니다).', 'For Claude·GLM·Kimi·Grok crews the tool gate applies per folder and always blocks the Argo app and credential folders. Codex·Gemini·Antigravity crews receive the same folder list in their process-level sandbox — assigning a broad folder (e.g. your whole home) can open protected folders inside it too, so assign only what you need. These runners cannot read or write folders you have not assigned, and older Gemini CLI builds may ignore the expansion entirely (a vendor limit). Kiro is the exception — its CLI offers no way to enforce a folder radius, so assigned folders are not applied as one. The Argo app folder, runner credential folders (~/.argo, ~/.codex, ~/.claude, ~/.gemini and the like), the contents of other companies’ data and this company’s vault (connections, capabilities, crew cards, chat records) are blocked (their folder and file names can still be listed — a vendor limit), but other files on this computer can be read and written by the crew (including creating new files and folders). Kiro crews are also given no terminal (shell) or search tools — those bypass the blocks above, so they work through file read/write only.'],
'settings.workroots.err.load': ['목록을 불러오지 못했습니다 — 새로고침 후 다시 시도해 주세요', 'Couldn\'t load the list — refresh and try again'],
'settings.workroots.err.invalid': ['경로를 확인해 주세요', 'Please check the path'],
'settings.workroots.err.not-absolute': ['절대 경로로 입력해 주세요 (예: /Users/me/projects, D:\\work)', 'Enter an absolute path (e.g. /Users/me/projects, D:\\work)'],
Expand Down Expand Up @@ -364,7 +364,7 @@ const DICT = {
'settings.update.error': ['업데이트를 확인하지 못했어요. 잠시 후 다시 시도해 주세요.', 'Could not check for updates. Please try again shortly.'],
// ── 러너 연결 관리자 (4러너 × API키/OAuth)
'settings.runners.title': ['러너 연결', 'Runner connections'],
'settings.runners.help': ['크루의 두뇌 엔진을 회사 계정에 연결합니다. 러너마다 API 키·OAuth(구독)로 연결하거나, Codex·Gemini·Antigravity는 "이 컴퓨터 로그인 사용"으로 이 컴퓨터의 CLI 로그인을 연결할 수 있습니다(Antigravity는 자격이 OS 키링에 있어 이 방식이 유일합니다). 연결한 러너만 크루가 사용합니다.', 'Connect each crew brain engine to this company. Add an API key or OAuth (subscription) per runner — for Codex, Gemini and Antigravity you can also link this computer\u2019s CLI login (for Antigravity, whose credentials live in the OS keyring, this is the only path). Crews only use runners you connect.'],
'settings.runners.help': ['크루의 두뇌 엔진을 회사 계정에 연결합니다. 러너마다 API 키·OAuth(구독)로 연결하거나, Codex·Gemini·Antigravity·Kiro는 "이 컴퓨터 로그인 사용"으로 이 컴퓨터의 CLI 로그인을 연결할 수 있습니다(Antigravity·Kiro는 붙여넣을 키가 없어 이 방식이 유일합니다). 연결한 러너만 크루가 사용합니다.', 'Connect each crew brain engine to this company. Add an API key or OAuth (subscription) per runner — for Codex, Gemini, Antigravity and Kiro you can also link this computer\u2019s CLI login (for Antigravity and Kiro, which have no pasteable key, this is the only path). Crews only use runners you connect.'],
'settings.runners.method.apikey': ['API 키', 'API key'],
'settings.runners.method.oauth': ['OAuth', 'OAuth'],
'settings.runners.method.host': ['이 컴퓨터 로그인', 'This computer\u2019s login'],
Expand Down Expand Up @@ -1103,7 +1103,7 @@ const DICT = {
'chat.card.scopeStale': ['설치된 항목이 없는데 사용 범위가 남아 있습니다', 'nothing installed, but a scope is still set'],
'chat.card.scopeReset': ['전체 사용으로 복구', 'Reset to use-all'],
'chat.card.mcpCliWarn': ['이 크루의 러너(CLI)에서는 MCP 도구가 아직 실행되지 않습니다 — SDK 러너로 바꾸면 사용됩니다.', 'MCP tools do not run on this crew\'s (CLI) runner yet — switch to an SDK runner to use them.'],
'market.mcpRunnerNote': ['CLI 러너(Codex·Gemini·Antigravity) 크루는 아직 MCP를 쓸 수 없습니다 — SDK 러너(Claude·GLM·Kimi·OpenRouter·Grok) 크루에서 사용됩니다. 러너 무관 지원이 예정돼 있습니다.', 'Crews on CLI runners (Codex·Gemini·Antigravity) cannot use MCP yet — it runs on SDK-runner crews (Claude·GLM·Kimi·OpenRouter·Grok). Runner-agnostic support is planned.'],
'market.mcpRunnerNote': ['CLI 러너(Codex·Gemini·Antigravity·Kiro) 크루는 아직 MCP를 쓸 수 없습니다 — SDK 러너(Claude·GLM·Kimi·OpenRouter·Grok) 크루에서 사용됩니다. 러너 무관 지원이 예정돼 있습니다.', 'Crews on CLI runners (Codex·Gemini·Antigravity·Kiro) cannot use MCP yet — it runs on SDK-runner crews (Claude·GLM·Kimi·OpenRouter·Grok). Runner-agnostic support is planned.'],
'market.hostHint': ['설정(토큰 포함)이 그대로 복사되고, 기기 간 동기화 시에는 암호화되어 전송됩니다.', 'The config (including tokens) is copied as-is and encrypted when synced across devices.'],
'market.skillsmpSearchPlaceholder': ['수천 개 커뮤니티 스킬 검색 — 예: newsletter, seo, youtube', 'Search thousands of community skills — e.g. newsletter, seo, youtube'],
'market.mcpSearchPlaceholder': ['MCP 서버 검색 — 예: fetch, github, notion, slack', 'Search MCP servers — e.g. fetch, github, notion, slack'],
Expand Down
4 changes: 2 additions & 2 deletions app/runner-connect.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ export { anyRunnerUsable, runnerNeedsReconnect, usableRunnerNames, PICK_ORDER }
/** AI 연결(러너별 BYOK/BYOA) — 4러너(Claude·Codex·Gemini·GLM) 각각을 회사 계정에 연결하는 관문.
러너마다 (a) 상태 칩(회사 연결됨/이 컴퓨터 로그인/미연결) (b) 인증 방식 선택(API키·OAuth)
(c) 방식별 입력·저장·검증·제거 또는 CLI 로그인 안내. 응답엔 마스킹만 실린다(보안 규칙). */
const RUNNER_NAMES = { claude: 'Claude', codex: 'Codex', gemini: 'Gemini', antigravity: 'Antigravity', glm: 'GLM', kimi: 'Kimi', openrouter: 'OpenRouter', grok: 'Grok' };
const RUNNER_NAMES = { claude: 'Claude', codex: 'Codex', gemini: 'Gemini', antigravity: 'Antigravity', kiro: 'Kiro', glm: 'GLM', kimi: 'Kimi', openrouter: 'OpenRouter', grok: 'Grok' };
// 화면에 그릴 순서 — **이 목록에 없으면 카드가 아예 안 뜬다**(러너를 추가하고 여기를 빠뜨리면
// 연결 수단이 UI에서 사라진다. 분리 검수 2026-08-03이 grok 누락으로 실제 적발).
// test/runner-order-sync.test.mjs가 RUNNER_AUTH와의 동기화를 잠근다.
const RUNNER_ORDER = ['claude', 'codex', 'gemini', 'antigravity', 'glm', 'kimi', 'openrouter', 'grok'];
const RUNNER_ORDER = ['claude', 'codex', 'gemini', 'antigravity', 'kiro', 'glm', 'kimi', 'openrouter', 'grok'];

export function AiConnectionCard({ ws, accordion = false }) {
const { t } = useLang();
Expand Down
2 changes: 1 addition & 1 deletion app/runner-usable.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export function runnerNeedsReconnect(runners) {

/** 서버 자동 선택(pickRunner = RUNNER_AUTH 정의 순) 순서 — "자동" 표시가 실제 실행 러너와 어긋나지 않게.
카탈로그(/api/runners = RUNNERS 순)는 kimi·glm 순서가 달라 첫 authed를 그냥 집으면 오표시가 난다. */
export const PICK_ORDER = ['claude', 'codex', 'gemini', 'glm', 'kimi', 'openrouter', 'grok', 'antigravity'];
export const PICK_ORDER = ['claude', 'codex', 'gemini', 'glm', 'kimi', 'openrouter', 'grok', 'kiro', 'antigravity'];

/** 연결(유효)된 러너의 표시 이름 목록 — 명판 '엔진' 표기의 단일 진실.
'Claude Agent SDK' 하드코딩이 Gemini만 연결한 사용자에게 "클로드로 떠 있다" 혼란을 준
Expand Down
Loading