@wong2kim/wmux 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +157 -0
  2. package/assets/icon.ico +0 -0
  3. package/assets/icon.svg +6 -0
  4. package/dist/cli/cli/client.js +102 -0
  5. package/dist/cli/cli/commands/browser.js +137 -0
  6. package/dist/cli/cli/commands/input.js +80 -0
  7. package/dist/cli/cli/commands/notify.js +28 -0
  8. package/dist/cli/cli/commands/pane.js +88 -0
  9. package/dist/cli/cli/commands/surface.js +98 -0
  10. package/dist/cli/cli/commands/system.js +98 -0
  11. package/dist/cli/cli/commands/workspace.js +117 -0
  12. package/dist/cli/cli/index.js +140 -0
  13. package/dist/cli/cli/utils.js +47 -0
  14. package/dist/cli/shared/constants.js +54 -0
  15. package/dist/cli/shared/rpc.js +33 -0
  16. package/dist/cli/shared/types.js +79 -0
  17. package/dist/mcp/mcp/index.js +60 -0
  18. package/dist/mcp/mcp/wmux-client.js +146 -0
  19. package/dist/mcp/shared/constants.js +54 -0
  20. package/dist/mcp/shared/rpc.js +33 -0
  21. package/dist/mcp/shared/types.js +79 -0
  22. package/forge.config.ts +61 -0
  23. package/index.html +12 -0
  24. package/package.json +84 -0
  25. package/postcss.config.js +6 -0
  26. package/src/cli/client.ts +76 -0
  27. package/src/cli/commands/browser.ts +128 -0
  28. package/src/cli/commands/input.ts +72 -0
  29. package/src/cli/commands/notify.ts +29 -0
  30. package/src/cli/commands/pane.ts +90 -0
  31. package/src/cli/commands/surface.ts +102 -0
  32. package/src/cli/commands/system.ts +95 -0
  33. package/src/cli/commands/workspace.ts +116 -0
  34. package/src/cli/index.ts +145 -0
  35. package/src/cli/utils.ts +44 -0
  36. package/src/main/index.ts +86 -0
  37. package/src/main/ipc/handlers/clipboard.handler.ts +20 -0
  38. package/src/main/ipc/handlers/metadata.handler.ts +56 -0
  39. package/src/main/ipc/handlers/pty.handler.ts +69 -0
  40. package/src/main/ipc/handlers/session.handler.ts +17 -0
  41. package/src/main/ipc/handlers/shell.handler.ts +11 -0
  42. package/src/main/ipc/registerHandlers.ts +31 -0
  43. package/src/main/mcp/McpRegistrar.ts +156 -0
  44. package/src/main/metadata/MetadataCollector.ts +58 -0
  45. package/src/main/notification/ToastManager.ts +32 -0
  46. package/src/main/pipe/PipeServer.ts +190 -0
  47. package/src/main/pipe/RpcRouter.ts +46 -0
  48. package/src/main/pipe/handlers/_bridge.ts +40 -0
  49. package/src/main/pipe/handlers/browser.rpc.ts +132 -0
  50. package/src/main/pipe/handlers/input.rpc.ts +120 -0
  51. package/src/main/pipe/handlers/meta.rpc.ts +59 -0
  52. package/src/main/pipe/handlers/notify.rpc.ts +53 -0
  53. package/src/main/pipe/handlers/pane.rpc.ts +39 -0
  54. package/src/main/pipe/handlers/surface.rpc.ts +43 -0
  55. package/src/main/pipe/handlers/system.rpc.ts +36 -0
  56. package/src/main/pipe/handlers/workspace.rpc.ts +52 -0
  57. package/src/main/pty/AgentDetector.ts +247 -0
  58. package/src/main/pty/OscParser.ts +81 -0
  59. package/src/main/pty/PTYBridge.ts +88 -0
  60. package/src/main/pty/PTYManager.ts +104 -0
  61. package/src/main/pty/ShellDetector.ts +63 -0
  62. package/src/main/session/SessionManager.ts +53 -0
  63. package/src/main/updater/AutoUpdater.ts +132 -0
  64. package/src/main/window/createWindow.ts +71 -0
  65. package/src/mcp/README.md +56 -0
  66. package/src/mcp/index.ts +153 -0
  67. package/src/mcp/wmux-client.ts +127 -0
  68. package/src/preload/index.ts +111 -0
  69. package/src/preload/preload.ts +108 -0
  70. package/src/renderer/App.tsx +5 -0
  71. package/src/renderer/components/Browser/BrowserPanel.tsx +219 -0
  72. package/src/renderer/components/Browser/BrowserToolbar.tsx +253 -0
  73. package/src/renderer/components/Company/ApprovalDialog.tsx +3 -0
  74. package/src/renderer/components/Company/CompanyView.tsx +7 -0
  75. package/src/renderer/components/Company/MessageFeedPanel.tsx +3 -0
  76. package/src/renderer/components/Layout/AppLayout.tsx +234 -0
  77. package/src/renderer/components/Notification/NotificationPanel.tsx +129 -0
  78. package/src/renderer/components/Palette/CommandPalette.tsx +409 -0
  79. package/src/renderer/components/Palette/PaletteItem.tsx +55 -0
  80. package/src/renderer/components/Pane/Pane.tsx +122 -0
  81. package/src/renderer/components/Pane/PaneContainer.tsx +41 -0
  82. package/src/renderer/components/Pane/SurfaceTabs.tsx +46 -0
  83. package/src/renderer/components/Settings/SettingsPanel.tsx +886 -0
  84. package/src/renderer/components/Sidebar/MiniSidebar.tsx +67 -0
  85. package/src/renderer/components/Sidebar/Sidebar.tsx +84 -0
  86. package/src/renderer/components/Sidebar/WorkspaceItem.tsx +241 -0
  87. package/src/renderer/components/StatusBar/StatusBar.tsx +93 -0
  88. package/src/renderer/components/Terminal/SearchBar.tsx +126 -0
  89. package/src/renderer/components/Terminal/Terminal.tsx +102 -0
  90. package/src/renderer/components/Terminal/ViCopyMode.tsx +104 -0
  91. package/src/renderer/hooks/useKeyboard.ts +310 -0
  92. package/src/renderer/hooks/useNotificationListener.ts +80 -0
  93. package/src/renderer/hooks/useNotificationSound.ts +75 -0
  94. package/src/renderer/hooks/useRpcBridge.ts +451 -0
  95. package/src/renderer/hooks/useT.ts +11 -0
  96. package/src/renderer/hooks/useTerminal.ts +349 -0
  97. package/src/renderer/hooks/useViCopyMode.ts +320 -0
  98. package/src/renderer/i18n/index.ts +69 -0
  99. package/src/renderer/i18n/locales/en.ts +157 -0
  100. package/src/renderer/i18n/locales/ja.ts +155 -0
  101. package/src/renderer/i18n/locales/ko.ts +155 -0
  102. package/src/renderer/i18n/locales/zh.ts +155 -0
  103. package/src/renderer/index.tsx +6 -0
  104. package/src/renderer/stores/index.ts +19 -0
  105. package/src/renderer/stores/slices/notificationSlice.ts +56 -0
  106. package/src/renderer/stores/slices/paneSlice.ts +141 -0
  107. package/src/renderer/stores/slices/surfaceSlice.ts +122 -0
  108. package/src/renderer/stores/slices/uiSlice.ts +247 -0
  109. package/src/renderer/stores/slices/workspaceSlice.ts +120 -0
  110. package/src/renderer/styles/globals.css +150 -0
  111. package/src/renderer/themes.ts +99 -0
  112. package/src/shared/constants.ts +53 -0
  113. package/src/shared/electron.d.ts +11 -0
  114. package/src/shared/rpc.ts +71 -0
  115. package/src/shared/types.ts +176 -0
  116. package/tailwind.config.js +11 -0
  117. package/tsconfig.cli.json +24 -0
  118. package/tsconfig.json +21 -0
  119. package/tsconfig.mcp.json +25 -0
  120. package/vite.main.config.ts +14 -0
  121. package/vite.preload.config.ts +9 -0
  122. package/vite.renderer.config.ts +6 -0
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Lightweight i18n system — no external library, no React Context.
3
+ * Usage:
4
+ * import { t, setLocale, getLocale } from '../i18n';
5
+ * t('sidebar.workspaces') => "Workspaces"
6
+ * t('terminal.exited', { code: 1 }) => "Process exited with code 1"
7
+ */
8
+
9
+ import { en, type TranslationKey } from './locales/en';
10
+ import { ko } from './locales/ko';
11
+ import { ja } from './locales/ja';
12
+ import { zh } from './locales/zh';
13
+
14
+ export type Locale = 'en' | 'ko' | 'ja' | 'zh';
15
+
16
+ // All translation maps share the same key set defined by the `en` locale.
17
+ // Partial<> lets other locales fall back to `en` for missing keys.
18
+ type TranslationMap = Record<TranslationKey, string>;
19
+
20
+ const translations: Record<Locale, Partial<TranslationMap>> = {
21
+ en: en as TranslationMap,
22
+ ko: ko as Partial<TranslationMap>,
23
+ ja: ja as Partial<TranslationMap>,
24
+ zh: zh as Partial<TranslationMap>,
25
+ };
26
+
27
+ // ─── State ────────────────────────────────────────────────────────────────────
28
+
29
+ let currentLocale: Locale = 'en';
30
+
31
+ // ─── Public API ───────────────────────────────────────────────────────────────
32
+
33
+ export function getLocale(): Locale {
34
+ return currentLocale;
35
+ }
36
+
37
+ export function setLocale(locale: Locale): void {
38
+ if (locale === currentLocale) return;
39
+ currentLocale = locale;
40
+ }
41
+
42
+ /**
43
+ * Translate a key with optional interpolation.
44
+ * Variables in the template are replaced with {varName} syntax.
45
+ *
46
+ * @example
47
+ * t('terminal.exited', { code: 1 }) // "Process exited with code 1"
48
+ */
49
+ export function t(key: TranslationKey | (string & {}), vars?: Record<string, string | number>): string {
50
+ const map = translations[currentLocale];
51
+ const k = key as TranslationKey;
52
+ let str: string = (map[k] ?? translations.en[k] ?? key) as string;
53
+
54
+ if (vars) {
55
+ for (const [k, v] of Object.entries(vars)) {
56
+ str = str.replace(new RegExp(`\\{${k}\\}`, 'g'), String(v));
57
+ }
58
+ }
59
+
60
+ return str;
61
+ }
62
+
63
+ /** All supported locales with display names. */
64
+ export const LOCALE_OPTIONS: Array<{ value: Locale; label: string }> = [
65
+ { value: 'en', label: 'English' },
66
+ { value: 'ko', label: '한국어' },
67
+ { value: 'ja', label: '日本語' },
68
+ { value: 'zh', label: '中文' },
69
+ ];
@@ -0,0 +1,157 @@
1
+ export const en = {
2
+ // Sidebar
3
+ 'sidebar.workspaces': 'Workspaces',
4
+ 'sidebar.newWorkspace': 'New workspace',
5
+ 'sidebar.newWorkspaceTooltip': 'New workspace (Ctrl+N)',
6
+ 'sidebar.hideTooltip': 'Hide sidebar (Ctrl+B)',
7
+ 'sidebar.expandTooltip': 'Expand sidebar (Ctrl+B)',
8
+ 'sidebar.unreadCount': '{count} unread',
9
+
10
+ // Workspace
11
+ 'workspace.agentRunning': 'Agent running',
12
+ 'workspace.agentComplete': 'Agent complete',
13
+ 'workspace.agentError': 'Agent error',
14
+ 'workspace.agentWaiting': 'Agent waiting',
15
+ 'workspace.agentIdle': 'Agent idle',
16
+ 'workspace.close': 'Close workspace',
17
+
18
+ // Pane
19
+ 'pane.empty': 'Empty pane',
20
+ 'pane.splitRight': 'Split right',
21
+ 'pane.splitDown': 'Split down',
22
+
23
+ // Surface
24
+ 'surface.terminal': 'Terminal',
25
+ 'surface.closeTab': 'Close tab',
26
+
27
+ // Search
28
+ 'search.placeholder': 'Search...',
29
+ 'search.prevTooltip': 'Previous result (Shift+Enter)',
30
+ 'search.nextTooltip': 'Next result (Enter)',
31
+ 'search.closeTooltip': 'Close (ESC)',
32
+
33
+ // Notification
34
+ 'notification.title': 'Notifications',
35
+ 'notification.markAllRead': 'Mark all read',
36
+ 'notification.clear': 'Clear',
37
+ 'notification.empty': 'No notifications',
38
+ 'notification.toggle': 'Ctrl+I to toggle',
39
+
40
+ // Command palette
41
+ 'palette.placeholder': 'Type a command...',
42
+ 'palette.noResults': 'No results for',
43
+ 'palette.navigate': 'navigate',
44
+ 'palette.select': 'select',
45
+ 'palette.close': 'close',
46
+ 'palette.cmd.toggleSidebar': 'Toggle Sidebar',
47
+ 'palette.cmd.newWorkspace': 'New Workspace',
48
+ 'palette.cmd.newSurface': 'New Surface',
49
+ 'palette.cmd.splitRight': 'Split Right',
50
+ 'palette.cmd.splitDown': 'Split Down',
51
+ 'palette.cmd.showNotifications': 'Show Notifications',
52
+ 'palette.cmd.openSettings': 'Open Settings',
53
+ 'palette.cmd.openBrowser': 'Open Browser',
54
+ 'palette.catWorkspace': 'Workspace',
55
+ 'palette.catSurface': 'Surface',
56
+ 'palette.catCommand': 'Command',
57
+
58
+ // Terminal
59
+ 'terminal.exited': 'Process exited with code {code}',
60
+ 'terminal.exitedBracket': '[Process exited with code {code}]',
61
+ 'terminal.copied': 'Copied!',
62
+
63
+ // Browser
64
+ 'browser.urlPlaceholder': 'Enter URL...',
65
+ 'browser.back': 'Back',
66
+ 'browser.forward': 'Forward',
67
+ 'browser.reload': 'Reload',
68
+ 'browser.close': 'Close',
69
+ 'browser.devToolsTooltip': 'Open DevTools (F12)',
70
+ 'browser.title': 'Browser',
71
+
72
+ // VI copy mode
73
+ 'viCopy.mode': '-- COPY MODE --',
74
+ 'viCopy.visual': '-- VISUAL --',
75
+
76
+ // StatusBar
77
+ 'statusBar.company': 'COMPANY',
78
+ 'statusBar.session': 'Session: {min}m',
79
+ 'statusBar.settingsTooltip': 'Settings (Ctrl+,)',
80
+
81
+ // Settings
82
+ 'settings.title': 'Settings',
83
+ 'settings.language': 'Language',
84
+ 'settings.sound': 'Notification Sound',
85
+ 'settings.soundOn': 'On',
86
+ 'settings.soundOff': 'Off',
87
+ 'settings.checkUpdate': 'Check for updates',
88
+ 'settings.checking': 'Checking...',
89
+ 'settings.upToDate': 'Up to date',
90
+ 'settings.updateAvailable': 'Update available',
91
+ 'settings.close': 'Close',
92
+ 'settings.shortcuts': 'Keyboard Shortcuts',
93
+ 'settings.tabGeneral': 'General',
94
+ 'settings.tabAppearance': 'Appearance',
95
+ 'settings.tabNotifications': 'Notifications',
96
+ 'settings.tabShortcuts': 'Shortcuts',
97
+ 'settings.tabAbout': 'About',
98
+ 'settings.terminal': 'Terminal',
99
+ 'settings.defaultShell': 'Default shell',
100
+ 'settings.scrollbackLines': 'Scrollback lines',
101
+ 'settings.scrollbackDesc': 'Lines retained in terminal buffer',
102
+ 'settings.updates': 'Updates',
103
+ 'settings.wmuxUpdates': 'wmux updates',
104
+ 'settings.updateFailed': 'Failed to check for updates',
105
+ 'settings.lastCheckedNever': 'Last checked: never',
106
+ 'settings.installUpdate': 'Install update',
107
+ 'settings.retryCheck': 'Retry check',
108
+ 'settings.fontSize': 'Font size',
109
+ 'settings.fontSizeRange': 'range 12~24',
110
+ 'settings.fontFamily': 'Font family',
111
+ 'settings.fontFamilyDesc': 'Monospace font for terminal',
112
+ 'settings.layout': 'Layout',
113
+ 'settings.sidebarPosition': 'Sidebar position',
114
+ 'settings.sidebarPositionDesc': 'Left or right of the terminal area',
115
+ 'settings.sidebarLeft': 'Left',
116
+ 'settings.sidebarRight': 'Right',
117
+ 'settings.updateReady': 'Update ready',
118
+ 'settings.checkFailed': 'Check failed',
119
+ 'settings.unknownError': 'Unknown error',
120
+ 'settings.notificationBehavior': 'Notification behavior',
121
+ 'settings.soundDesc': 'Web Audio API — no external file required',
122
+ 'settings.toast': 'Toast notifications',
123
+ 'settings.toastDesc': 'Show overlay toast when agent completes',
124
+ 'settings.ring': 'Ring animation',
125
+ 'settings.ringDesc': 'Pulse border on panes with unread notifications',
126
+ 'settings.sc.toggleSidebar': 'Toggle sidebar',
127
+ 'settings.sc.splitHorizontal': 'Split pane horizontal',
128
+ 'settings.sc.splitVertical': 'Split pane vertical',
129
+ 'settings.sc.newWorkspace': 'New workspace',
130
+ 'settings.sc.closePane': 'Close pane / workspace',
131
+ 'settings.sc.searchTerminal': 'Search in terminal',
132
+ 'settings.sc.commandPalette': 'Command palette',
133
+ 'settings.sc.toggleNotifications': 'Toggle notification panel',
134
+ 'settings.sc.viCopyMode': 'Vi copy mode',
135
+ 'settings.sc.renameWorkspace': 'Rename workspace',
136
+ 'settings.sc.highlightPane': 'Highlight active pane',
137
+ 'settings.shortcutsNotAvailable': 'Built-in shortcut customization is not yet available.',
138
+ 'settings.aboutTagline': 'Windows native AI agent terminal',
139
+ 'settings.builtWith': 'Built with',
140
+ 'settings.links': 'Links',
141
+ 'settings.githubRepo': 'GitHub Repository',
142
+ 'settings.toggleHint': 'Ctrl+, to toggle',
143
+
144
+ // Custom keybindings
145
+ 'settings.customKeybindings': 'Custom Keybindings',
146
+ 'settings.kb.add': 'Add keybinding',
147
+ 'settings.kb.key': 'Key',
148
+ 'settings.kb.label': 'Label',
149
+ 'settings.kb.command': 'Command',
150
+ 'settings.kb.sendEnter': 'Send Enter',
151
+ 'settings.kb.pressKey': 'Press a key...',
152
+ 'settings.kb.conflict': 'Conflicts with built-in shortcut',
153
+ 'settings.kb.delete': 'Delete',
154
+ 'settings.kb.noBindings': 'No custom keybindings yet',
155
+ } as const;
156
+
157
+ export type TranslationKey = keyof typeof en;
@@ -0,0 +1,155 @@
1
+ export const ja = {
2
+ // Sidebar
3
+ 'sidebar.workspaces': 'ワークスペース',
4
+ 'sidebar.newWorkspace': '新しいワークスペース',
5
+ 'sidebar.newWorkspaceTooltip': '新しいワークスペース (Ctrl+N)',
6
+ 'sidebar.hideTooltip': 'サイドバーを隠す (Ctrl+B)',
7
+ 'sidebar.expandTooltip': 'サイドバーを展開する (Ctrl+B)',
8
+ 'sidebar.unreadCount': '未読 {count}件',
9
+
10
+ // Workspace
11
+ 'workspace.agentRunning': 'エージェント実行中',
12
+ 'workspace.agentComplete': 'エージェント完了',
13
+ 'workspace.agentError': 'エージェントエラー',
14
+ 'workspace.agentWaiting': 'エージェント待機中',
15
+ 'workspace.agentIdle': 'エージェントアイドル',
16
+ 'workspace.close': 'ワークスペースを閉じる',
17
+
18
+ // Pane
19
+ 'pane.empty': '空のペイン',
20
+ 'pane.splitRight': '右に分割',
21
+ 'pane.splitDown': '下に分割',
22
+
23
+ // Surface
24
+ 'surface.terminal': 'ターミナル',
25
+ 'surface.closeTab': 'タブを閉じる',
26
+
27
+ // Search
28
+ 'search.placeholder': '検索...',
29
+ 'search.prevTooltip': '前の結果 (Shift+Enter)',
30
+ 'search.nextTooltip': '次の結果 (Enter)',
31
+ 'search.closeTooltip': '閉じる (ESC)',
32
+
33
+ // Notification
34
+ 'notification.title': '通知',
35
+ 'notification.markAllRead': 'すべて既読',
36
+ 'notification.clear': 'クリア',
37
+ 'notification.empty': '通知なし',
38
+ 'notification.toggle': 'Ctrl+Iで切替',
39
+
40
+ // Command palette
41
+ 'palette.placeholder': 'コマンドを入力...',
42
+ 'palette.noResults': '結果なし:',
43
+ 'palette.navigate': '移動',
44
+ 'palette.select': '選択',
45
+ 'palette.close': '閉じる',
46
+ 'palette.cmd.toggleSidebar': 'サイドバー切替',
47
+ 'palette.cmd.newWorkspace': '新しいワークスペース',
48
+ 'palette.cmd.newSurface': '新しいサーフェス',
49
+ 'palette.cmd.splitRight': '右に分割',
50
+ 'palette.cmd.splitDown': '下に分割',
51
+ 'palette.cmd.showNotifications': '通知を表示',
52
+ 'palette.cmd.openSettings': '設定を開く',
53
+ 'palette.cmd.openBrowser': 'ブラウザを開く',
54
+ 'palette.catWorkspace': 'ワークスペース',
55
+ 'palette.catSurface': 'サーフェス',
56
+ 'palette.catCommand': 'コマンド',
57
+
58
+ // Terminal
59
+ 'terminal.exited': 'プロセスがコード {code} で終了しました',
60
+ 'terminal.exitedBracket': '[プロセスがコード {code} で終了しました]',
61
+ 'terminal.copied': 'コピーしました!',
62
+
63
+ // Browser
64
+ 'browser.urlPlaceholder': 'URLを入力...',
65
+ 'browser.back': '戻る',
66
+ 'browser.forward': '進む',
67
+ 'browser.reload': '再読み込み',
68
+ 'browser.close': '閉じる',
69
+ 'browser.devToolsTooltip': 'DevToolsを開く (F12)',
70
+ 'browser.title': 'ブラウザ',
71
+
72
+ // VI copy mode
73
+ 'viCopy.mode': '-- コピーモード --',
74
+ 'viCopy.visual': '-- ビジュアル --',
75
+
76
+ // StatusBar
77
+ 'statusBar.company': '会社',
78
+ 'statusBar.session': 'セッション: {min}分',
79
+ 'statusBar.settingsTooltip': '設定 (Ctrl+,)',
80
+
81
+ // Settings
82
+ 'settings.title': '設定',
83
+ 'settings.language': '言語',
84
+ 'settings.sound': '通知音',
85
+ 'settings.soundOn': 'オン',
86
+ 'settings.soundOff': 'オフ',
87
+ 'settings.checkUpdate': 'アップデートを確認',
88
+ 'settings.checking': '確認中...',
89
+ 'settings.upToDate': '最新バージョン',
90
+ 'settings.updateAvailable': 'アップデートあり',
91
+ 'settings.close': '閉じる',
92
+ 'settings.shortcuts': 'キーボードショートカット',
93
+ 'settings.tabGeneral': '一般',
94
+ 'settings.tabAppearance': '外観',
95
+ 'settings.tabNotifications': '通知',
96
+ 'settings.tabShortcuts': 'ショートカット',
97
+ 'settings.tabAbout': 'バージョン情報',
98
+ 'settings.terminal': 'ターミナル',
99
+ 'settings.defaultShell': 'デフォルトシェル',
100
+ 'settings.scrollbackLines': 'スクロールバック行数',
101
+ 'settings.scrollbackDesc': 'ターミナルバッファに保持する行数',
102
+ 'settings.updates': 'アップデート',
103
+ 'settings.wmuxUpdates': 'wmux アップデート',
104
+ 'settings.updateFailed': 'アップデート確認に失敗しました',
105
+ 'settings.lastCheckedNever': '最終確認: なし',
106
+ 'settings.installUpdate': 'アップデートをインストール',
107
+ 'settings.retryCheck': '再確認',
108
+ 'settings.fontSize': 'フォントサイズ',
109
+ 'settings.fontSizeRange': '12~24の範囲',
110
+ 'settings.fontFamily': 'フォントファミリー',
111
+ 'settings.fontFamilyDesc': 'ターミナル用等幅フォント',
112
+ 'settings.layout': 'レイアウト',
113
+ 'settings.sidebarPosition': 'サイドバー位置',
114
+ 'settings.sidebarPositionDesc': 'ターミナルエリアの左右',
115
+ 'settings.sidebarLeft': '左',
116
+ 'settings.sidebarRight': '右',
117
+ 'settings.updateReady': 'アップデート準備完了',
118
+ 'settings.checkFailed': '確認に失敗しました',
119
+ 'settings.unknownError': '不明なエラー',
120
+ 'settings.notificationBehavior': '通知の動作',
121
+ 'settings.soundDesc': 'Web Audio API — 外部ファイル不要',
122
+ 'settings.toast': 'トースト通知',
123
+ 'settings.toastDesc': 'エージェント完了時にトーストを表示',
124
+ 'settings.ring': 'リングアニメーション',
125
+ 'settings.ringDesc': '未読通知のあるペインにパルスボーダー',
126
+ 'settings.sc.toggleSidebar': 'サイドバー切替',
127
+ 'settings.sc.splitHorizontal': '水平分割',
128
+ 'settings.sc.splitVertical': '垂直分割',
129
+ 'settings.sc.newWorkspace': '新ワークスペース',
130
+ 'settings.sc.closePane': 'ペイン/ワークスペースを閉じる',
131
+ 'settings.sc.searchTerminal': 'ターミナル内検索',
132
+ 'settings.sc.commandPalette': 'コマンドパレット',
133
+ 'settings.sc.toggleNotifications': '通知パネル切替',
134
+ 'settings.sc.viCopyMode': 'Viコピーモード',
135
+ 'settings.sc.renameWorkspace': 'ワークスペースの名前変更',
136
+ 'settings.sc.highlightPane': 'アクティブペインをハイライト',
137
+ 'settings.shortcutsNotAvailable': 'ショートカットのカスタマイズはまだ利用できません。',
138
+ 'settings.aboutTagline': 'Windows ネイティブ AI エージェントターミナル',
139
+ 'settings.builtWith': '使用技術',
140
+ 'settings.links': 'リンク',
141
+ 'settings.githubRepo': 'GitHubリポジトリ',
142
+ 'settings.toggleHint': 'Ctrl+, で切替',
143
+
144
+ // Custom keybindings
145
+ 'settings.customKeybindings': 'カスタムキーバインド',
146
+ 'settings.kb.add': 'キーバインド追加',
147
+ 'settings.kb.key': 'キー',
148
+ 'settings.kb.label': '名前',
149
+ 'settings.kb.command': 'コマンド',
150
+ 'settings.kb.sendEnter': 'Enter送信',
151
+ 'settings.kb.pressKey': 'キーを押してください...',
152
+ 'settings.kb.conflict': '組み込みショートカットと競合',
153
+ 'settings.kb.delete': '削除',
154
+ 'settings.kb.noBindings': 'カスタムキーバインドなし',
155
+ } as const;
@@ -0,0 +1,155 @@
1
+ export const ko = {
2
+ // Sidebar
3
+ 'sidebar.workspaces': '워크스페이스',
4
+ 'sidebar.newWorkspace': '새 워크스페이스',
5
+ 'sidebar.newWorkspaceTooltip': '새 워크스페이스 (Ctrl+N)',
6
+ 'sidebar.hideTooltip': '사이드바 숨기기 (Ctrl+B)',
7
+ 'sidebar.expandTooltip': '사이드바 펼치기 (Ctrl+B)',
8
+ 'sidebar.unreadCount': '읽지 않음 {count}개',
9
+
10
+ // Workspace
11
+ 'workspace.agentRunning': '에이전트 실행 중',
12
+ 'workspace.agentComplete': '에이전트 완료',
13
+ 'workspace.agentError': '에이전트 오류',
14
+ 'workspace.agentWaiting': '에이전트 대기 중',
15
+ 'workspace.agentIdle': '에이전트 유휴',
16
+ 'workspace.close': '워크스페이스 닫기',
17
+
18
+ // Pane
19
+ 'pane.empty': '빈 창',
20
+ 'pane.splitRight': '오른쪽 분할',
21
+ 'pane.splitDown': '아래 분할',
22
+
23
+ // Surface
24
+ 'surface.terminal': '터미널',
25
+ 'surface.closeTab': '탭 닫기',
26
+
27
+ // Search
28
+ 'search.placeholder': '검색...',
29
+ 'search.prevTooltip': '이전 결과 (Shift+Enter)',
30
+ 'search.nextTooltip': '다음 결과 (Enter)',
31
+ 'search.closeTooltip': '닫기 (ESC)',
32
+
33
+ // Notification
34
+ 'notification.title': '알림',
35
+ 'notification.markAllRead': '모두 읽음',
36
+ 'notification.clear': '지우기',
37
+ 'notification.empty': '알림 없음',
38
+ 'notification.toggle': 'Ctrl+I로 토글',
39
+
40
+ // Command palette
41
+ 'palette.placeholder': '명령어 입력...',
42
+ 'palette.noResults': '검색 결과 없음:',
43
+ 'palette.navigate': '이동',
44
+ 'palette.select': '선택',
45
+ 'palette.close': '닫기',
46
+ 'palette.cmd.toggleSidebar': '사이드바 토글',
47
+ 'palette.cmd.newWorkspace': '새 워크스페이스',
48
+ 'palette.cmd.newSurface': '새 서피스',
49
+ 'palette.cmd.splitRight': '오른쪽 분할',
50
+ 'palette.cmd.splitDown': '아래 분할',
51
+ 'palette.cmd.showNotifications': '알림 보기',
52
+ 'palette.cmd.openSettings': '설정 열기',
53
+ 'palette.cmd.openBrowser': '브라우저 열기',
54
+ 'palette.catWorkspace': '워크스페이스',
55
+ 'palette.catSurface': '서피스',
56
+ 'palette.catCommand': '커맨드',
57
+
58
+ // Terminal
59
+ 'terminal.exited': '프로세스가 코드 {code}로 종료됨',
60
+ 'terminal.exitedBracket': '[프로세스가 코드 {code}로 종료됨]',
61
+ 'terminal.copied': '복사됨!',
62
+
63
+ // Browser
64
+ 'browser.urlPlaceholder': 'URL 입력...',
65
+ 'browser.back': '뒤로',
66
+ 'browser.forward': '앞으로',
67
+ 'browser.reload': '새로 고침',
68
+ 'browser.close': '닫기',
69
+ 'browser.devToolsTooltip': '개발자 도구 열기 (F12)',
70
+ 'browser.title': '브라우저',
71
+
72
+ // VI copy mode
73
+ 'viCopy.mode': '-- 복사 모드 --',
74
+ 'viCopy.visual': '-- 비주얼 --',
75
+
76
+ // StatusBar
77
+ 'statusBar.company': '회사',
78
+ 'statusBar.session': '세션: {min}분',
79
+ 'statusBar.settingsTooltip': '설정 (Ctrl+,)',
80
+
81
+ // Settings
82
+ 'settings.title': '설정',
83
+ 'settings.language': '언어',
84
+ 'settings.sound': '알림 소리',
85
+ 'settings.soundOn': '켜기',
86
+ 'settings.soundOff': '끄기',
87
+ 'settings.checkUpdate': '업데이트 확인',
88
+ 'settings.checking': '확인 중...',
89
+ 'settings.upToDate': '최신 버전',
90
+ 'settings.updateAvailable': '업데이트 있음',
91
+ 'settings.close': '닫기',
92
+ 'settings.shortcuts': '단축키',
93
+ 'settings.tabGeneral': '일반',
94
+ 'settings.tabAppearance': '외관',
95
+ 'settings.tabNotifications': '알림',
96
+ 'settings.tabShortcuts': '단축키',
97
+ 'settings.tabAbout': '정보',
98
+ 'settings.terminal': '터미널',
99
+ 'settings.defaultShell': '기본 셸',
100
+ 'settings.scrollbackLines': '스크롤백 줄 수',
101
+ 'settings.scrollbackDesc': '터미널 버퍼에 보존되는 줄 수',
102
+ 'settings.updates': '업데이트',
103
+ 'settings.wmuxUpdates': 'wmux 업데이트',
104
+ 'settings.updateFailed': '업데이트 확인 실패',
105
+ 'settings.lastCheckedNever': '마지막 확인: 없음',
106
+ 'settings.installUpdate': '업데이트 설치',
107
+ 'settings.retryCheck': '다시 확인',
108
+ 'settings.fontSize': '글꼴 크기',
109
+ 'settings.fontSizeRange': '12~24 범위',
110
+ 'settings.fontFamily': '글꼴 모음',
111
+ 'settings.fontFamilyDesc': '터미널용 고정폭 글꼴',
112
+ 'settings.layout': '레이아웃',
113
+ 'settings.sidebarPosition': '사이드바 위치',
114
+ 'settings.sidebarPositionDesc': '터미널 영역의 좌측 또는 우측',
115
+ 'settings.sidebarLeft': '왼쪽',
116
+ 'settings.sidebarRight': '오른쪽',
117
+ 'settings.updateReady': '업데이트 준비 완료',
118
+ 'settings.checkFailed': '확인 실패',
119
+ 'settings.unknownError': '알 수 없는 오류',
120
+ 'settings.notificationBehavior': '알림 동작',
121
+ 'settings.soundDesc': 'Web Audio API — 외부 파일 불필요',
122
+ 'settings.toast': '토스트 알림',
123
+ 'settings.toastDesc': '에이전트 완료 시 오버레이 토스트 표시',
124
+ 'settings.ring': '링 애니메이션',
125
+ 'settings.ringDesc': '읽지 않은 알림이 있는 창에 테두리 펄스',
126
+ 'settings.sc.toggleSidebar': '사이드바 전환',
127
+ 'settings.sc.splitHorizontal': '가로 분할',
128
+ 'settings.sc.splitVertical': '세로 분할',
129
+ 'settings.sc.newWorkspace': '새 작업공간',
130
+ 'settings.sc.closePane': '창/작업공간 닫기',
131
+ 'settings.sc.searchTerminal': '터미널에서 검색',
132
+ 'settings.sc.commandPalette': '명령 팔레트',
133
+ 'settings.sc.toggleNotifications': '알림 패널 전환',
134
+ 'settings.sc.viCopyMode': 'Vi 복사 모드',
135
+ 'settings.sc.renameWorkspace': '작업공간 이름 변경',
136
+ 'settings.sc.highlightPane': '활성 창 강조',
137
+ 'settings.shortcutsNotAvailable': '내장 단축키 커스터마이즈는 아직 지원되지 않습니다.',
138
+ 'settings.aboutTagline': 'Windows 네이티브 AI 에이전트 터미널',
139
+ 'settings.builtWith': '사용 기술',
140
+ 'settings.links': '링크',
141
+ 'settings.githubRepo': 'GitHub 저장소',
142
+ 'settings.toggleHint': 'Ctrl+, 으로 전환',
143
+
144
+ // Custom keybindings
145
+ 'settings.customKeybindings': '커스텀 키바인딩',
146
+ 'settings.kb.add': '키바인딩 추가',
147
+ 'settings.kb.key': '키',
148
+ 'settings.kb.label': '이름',
149
+ 'settings.kb.command': '명령어',
150
+ 'settings.kb.sendEnter': 'Enter 전송',
151
+ 'settings.kb.pressKey': '키를 누르세요...',
152
+ 'settings.kb.conflict': '내장 단축키와 충돌',
153
+ 'settings.kb.delete': '삭제',
154
+ 'settings.kb.noBindings': '커스텀 키바인딩 없음',
155
+ } as const;