codexmate 0.0.44 → 0.0.47
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.
- package/README.md +20 -7
- package/README.zh.md +20 -7
- package/cli.js +473 -3
- package/package.json +2 -1
- package/web-ui/app.js +42 -5
- package/web-ui/index.html +2 -0
- package/web-ui/modules/app.computed.index.mjs +3 -1
- package/web-ui/modules/app.computed.main-tabs.mjs +3 -0
- package/web-ui/modules/app.computed.prompts.mjs +28 -0
- package/web-ui/modules/app.computed.session.mjs +23 -1
- package/web-ui/modules/app.constants.mjs +13 -0
- package/web-ui/modules/app.methods.agents.mjs +50 -4
- package/web-ui/modules/app.methods.index.mjs +6 -0
- package/web-ui/modules/app.methods.navigation.mjs +2 -1
- package/web-ui/modules/app.methods.opencode-config.mjs +228 -0
- package/web-ui/modules/app.methods.session-actions.mjs +10 -0
- package/web-ui/modules/app.methods.startup-claude.mjs +3 -1
- package/web-ui/modules/app.methods.tool-config-permissions.mjs +3 -2
- package/web-ui/modules/config-mode.computed.mjs +17 -1
- package/web-ui/modules/i18n/locales/en.mjs +66 -5
- package/web-ui/modules/i18n/locales/ja.mjs +66 -5
- package/web-ui/modules/i18n/locales/vi.mjs +74 -0
- package/web-ui/modules/i18n/locales/zh-tw.mjs +1269 -0
- package/web-ui/modules/i18n/locales/zh.mjs +66 -5
- package/web-ui/modules/i18n.dict.mjs +2 -0
- package/web-ui/modules/i18n.mjs +3 -2
- package/web-ui/partials/index/layout-footer.html +1 -1
- package/web-ui/partials/index/layout-header.html +70 -2
- package/web-ui/partials/index/modal-config-template-agents.html +12 -13
- package/web-ui/partials/index/panel-config-claude.html +6 -12
- package/web-ui/partials/index/panel-config-codex.html +6 -11
- package/web-ui/partials/index/panel-config-opencode.html +166 -0
- package/web-ui/partials/index/panel-prompts.html +100 -0
- package/web-ui/partials/index/panel-sessions.html +30 -10
- package/web-ui/partials/index/panel-usage.html +34 -18
- package/web-ui/res/web-ui-render.precompiled.js +932 -183
- package/web-ui/styles/controls-forms.css +62 -4
- package/web-ui/styles/modals-core.css +162 -0
- package/web-ui/styles/responsive.css +65 -5
- package/web-ui/styles/sessions-toolbar-trash.css +45 -10
- package/web-ui/styles/sessions-usage.css +31 -2
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const en = Object.freeze({
|
|
2
2
|
// Global
|
|
3
3
|
'lang.zh': '中文',
|
|
4
|
+
'lang.zh-tw': '繁體中文',
|
|
4
5
|
'lang.en': 'English',
|
|
5
6
|
'lang.vi': 'Vietnamese',
|
|
6
7
|
'lang.label': 'Language',
|
|
@@ -49,6 +50,8 @@ const en = Object.freeze({
|
|
|
49
50
|
'common.apply': 'Apply',
|
|
50
51
|
'common.applying': 'Applying...',
|
|
51
52
|
'common.confirming': 'Confirming...',
|
|
53
|
+
'common.preview': 'Preview',
|
|
54
|
+
'common.previewing': 'Previewing...',
|
|
52
55
|
'common.refreshFromText': 'Refresh from text',
|
|
53
56
|
'common.backToEdit': 'Back to edit',
|
|
54
57
|
'common.selectAll': 'Select all',
|
|
@@ -63,6 +66,8 @@ const en = Object.freeze({
|
|
|
63
66
|
'common.none': 'None',
|
|
64
67
|
'common.configured': 'Configured',
|
|
65
68
|
'common.notConfigured': 'Not configured',
|
|
69
|
+
'common.enabled': 'Enabled',
|
|
70
|
+
'common.disabled': 'Disabled',
|
|
66
71
|
'cli.missing.title': '{name} CLI not installed',
|
|
67
72
|
'cli.missing.subtitle': 'Install {name} CLI before using this page.',
|
|
68
73
|
'cli.missing.openDocs': 'Open install guide',
|
|
@@ -123,18 +128,21 @@ const en = Object.freeze({
|
|
|
123
128
|
'tab.config.codex': 'Codex',
|
|
124
129
|
'tab.config.claude': 'Claude',
|
|
125
130
|
'tab.config.openclaw': 'OpenClaw',
|
|
131
|
+
'tab.config.opencode': 'OpenCode',
|
|
126
132
|
'tab.sessions': 'Sessions',
|
|
127
133
|
'tab.usage': 'Usage',
|
|
128
134
|
'tab.orchestration': 'Tasks',
|
|
129
135
|
'tab.market': 'Skills',
|
|
130
136
|
'tab.plugins': 'Plugins',
|
|
131
137
|
'tab.settings': 'Settings',
|
|
138
|
+
'tab.prompts': 'Prompts',
|
|
132
139
|
|
|
133
140
|
// Side rail section titles
|
|
134
141
|
'side.overview': 'Overview',
|
|
135
142
|
'side.docs': 'Docs',
|
|
136
143
|
'side.config': 'Config',
|
|
137
144
|
'side.sessions': 'Sessions',
|
|
145
|
+
'side.prompts': 'Prompts',
|
|
138
146
|
'side.plugins': 'Plugins',
|
|
139
147
|
'side.system': 'System',
|
|
140
148
|
'side.orchestration': 'Tasks',
|
|
@@ -162,8 +170,14 @@ const en = Object.freeze({
|
|
|
162
170
|
'side.config.claude.meta': 'Claude Settings',
|
|
163
171
|
'side.config.openclaw': 'OpenClaw',
|
|
164
172
|
'side.config.openclaw.meta': 'JSON5 / AGENTS',
|
|
173
|
+
'side.config.opencode': 'OpenCode',
|
|
174
|
+
'side.config.opencode.meta': 'Config / Provider',
|
|
165
175
|
'side.sessions.browser': 'Session Browser',
|
|
166
176
|
'side.sessions.browser.meta': 'Browse / Export / Cleanup',
|
|
177
|
+
'side.prompts.agents': 'AGENTS.md',
|
|
178
|
+
'side.prompts.agents.meta': 'Codex prompt file',
|
|
179
|
+
'side.prompts.claude': 'CLAUDE.md',
|
|
180
|
+
'side.prompts.claude.meta': 'Claude prompt file',
|
|
167
181
|
'side.plugins.tools': 'Prompt Tools',
|
|
168
182
|
'side.plugins.tools.meta': 'Templates / Variables',
|
|
169
183
|
'side.plugins.templatesCount': '{count} templates',
|
|
@@ -182,6 +196,7 @@ const en = Object.freeze({
|
|
|
182
196
|
'kicker.docs': 'Docs',
|
|
183
197
|
'kicker.trash': 'Trash',
|
|
184
198
|
'kicker.settings': 'Settings',
|
|
199
|
+
'kicker.prompts': 'Prompts',
|
|
185
200
|
|
|
186
201
|
'title.dashboard': 'Dashboard / Doctor',
|
|
187
202
|
'title.config': 'Local Configuration Console',
|
|
@@ -192,6 +207,7 @@ const en = Object.freeze({
|
|
|
192
207
|
'title.plugins': 'Plugins & Templates',
|
|
193
208
|
'title.docs': 'CLI Install & Docs',
|
|
194
209
|
'title.settings': 'System & Data Settings',
|
|
210
|
+
'title.prompts': 'Prompt Files Editor',
|
|
195
211
|
|
|
196
212
|
'subtitle.dashboard': 'Aggregate status and diagnostics.',
|
|
197
213
|
'subtitle.config': 'Manage local configs and models.',
|
|
@@ -202,6 +218,9 @@ const en = Object.freeze({
|
|
|
202
218
|
'subtitle.plugins': 'Manage reusable prompt templates and plugins.',
|
|
203
219
|
'subtitle.docs': 'CLI install commands and troubleshooting.',
|
|
204
220
|
'subtitle.settings': 'Manage downloads, directories, and trash.',
|
|
221
|
+
'subtitle.prompts': 'Edit AGENTS.md and CLAUDE.md.',
|
|
222
|
+
'prompts.subTab.codex': 'AGENTS.md (Codex)',
|
|
223
|
+
'prompts.subTab.claude': 'CLAUDE.md (Claude)',
|
|
205
224
|
'dashboard.doctor.title': 'Doctor',
|
|
206
225
|
'dashboard.doctor.runChecks': 'Run checks',
|
|
207
226
|
'dashboard.doctor.checking': 'Checking...',
|
|
@@ -378,8 +397,13 @@ const en = Object.freeze({
|
|
|
378
397
|
'toast.copy.empty': 'Nothing to copy',
|
|
379
398
|
'toast.copy.ok': 'Copied',
|
|
380
399
|
'toast.copy.fail': 'Copy failed',
|
|
400
|
+
'toast.link.fail': 'Failed to generate link',
|
|
381
401
|
'toast.save.ok': 'Saved',
|
|
382
402
|
'toast.save.fail': 'Save failed',
|
|
403
|
+
'toast.agents.saved.agents': 'AGENTS.md saved',
|
|
404
|
+
'toast.agents.saved.claudeMd': 'CLAUDE.md saved',
|
|
405
|
+
'toast.agents.saved.openclaw': 'OpenClaw AGENTS.md saved',
|
|
406
|
+
'toast.agents.saved.workspace': 'Workspace file saved: {name}',
|
|
383
407
|
'toast.delete.ok': 'Deleted',
|
|
384
408
|
'toast.delete.fail': 'Delete failed',
|
|
385
409
|
'toast.export.empty': 'Nothing to export',
|
|
@@ -468,7 +492,7 @@ const en = Object.freeze({
|
|
|
468
492
|
'diff.hint.busy': 'Generating diff or applying. Actions are temporarily disabled.',
|
|
469
493
|
'diff.hint.failedBack': 'Diff preview failed. Go back to edit and retry.',
|
|
470
494
|
'diff.hint.noChangesBack': 'No changes detected. Go back to edit or cancel.',
|
|
471
|
-
'diff.hint.previewMode': 'Preview mode. Click “
|
|
495
|
+
'diff.hint.previewMode': 'Preview mode. Click “Save” to write or “Back to edit” to continue.',
|
|
472
496
|
|
|
473
497
|
'modal.agents.export': 'Export',
|
|
474
498
|
'modal.agents.copy': 'Copy',
|
|
@@ -477,13 +501,13 @@ const en = Object.freeze({
|
|
|
477
501
|
'modal.agents.targetFile': 'Target file',
|
|
478
502
|
'modal.agents.contentLabel': 'AGENTS.md content',
|
|
479
503
|
'modal.agents.placeholder': 'Edit AGENTS.md here',
|
|
480
|
-
'modal.agents.unsaved.previewModeHint': 'Preview mode: changes are not saved until you click “
|
|
504
|
+
'modal.agents.unsaved.previewModeHint': 'Preview mode: changes are not saved until you click “Save”.',
|
|
481
505
|
'modal.agents.unsaved.detectedHint': 'Unsaved changes detected: save before closing or applying.',
|
|
482
506
|
'modal.agents.hint.shortcuts': 'Shortcut: Esc (back to edit in preview, close in edit).',
|
|
483
|
-
'modal.agents.hint.twoStepSave': 'Two-step save: “
|
|
507
|
+
'modal.agents.hint.twoStepSave': 'Two-step save: “Preview” to review diff, then “Save” to write.',
|
|
484
508
|
'diff.tooLargeSkip': 'Content too large. Line diff preview skipped.',
|
|
485
|
-
'diff.viewHint.preview': 'Preview mode. Click “
|
|
486
|
-
'diff.viewHint.truncated': 'Preview skipped due to size. Click “
|
|
509
|
+
'diff.viewHint.preview': 'Preview mode. Click “Save” to write or “Back to edit” to continue.',
|
|
510
|
+
'diff.viewHint.truncated': 'Preview skipped due to size. Click “Save” to write or “Back to edit” to continue.',
|
|
487
511
|
|
|
488
512
|
// Skills modal
|
|
489
513
|
'modal.skills.title': 'Skills manager',
|
|
@@ -624,6 +648,7 @@ const en = Object.freeze({
|
|
|
624
648
|
'sessions.preview.importNative.failedWithReason': 'Import to native failed: {reason}',
|
|
625
649
|
'sessions.preview.copyLink': 'Copy link',
|
|
626
650
|
'sessions.preview.copyPath': 'Copy path',
|
|
651
|
+
'sessions.preview.openLink': 'Open link',
|
|
627
652
|
'sessions.preview.loadingBody': 'Loading session content...',
|
|
628
653
|
'sessions.preview.emptyMsgs': 'No messages to display',
|
|
629
654
|
'sessions.preview.rendering': 'Rendering session content...',
|
|
@@ -786,6 +811,39 @@ const en = Object.freeze({
|
|
|
786
811
|
'toolConfig.claude.lockedTitle': 'Claude providers are read-only',
|
|
787
812
|
'toolConfig.claude.lockedDesc': 'Claude config will not be modified. Enable writes in this tab to add, apply, edit, or delete providers.',
|
|
788
813
|
'toolConfig.claude.confirmMessage': 'After enabling this, apply actions in the Claude tab may write ~/.claude/settings.json and related Claude config.',
|
|
814
|
+
'toolConfig.opencode.title': 'OpenCode config writes',
|
|
815
|
+
'toolConfig.opencode.desc': 'Read-only by default; enable to write OpenCode config.',
|
|
816
|
+
'toolConfig.opencode.lockedTitle': 'Read-only',
|
|
817
|
+
'toolConfig.opencode.lockedDesc': 'Enable write access to save, import, or apply config.',
|
|
818
|
+
'toolConfig.opencode.confirmMessage': 'After enabling this, actions in the OpenCode tab may write the XDG OpenCode config file (for example ~/.config/opencode/opencode.jsonc) or the file specified by OPENCODE_CONFIG.',
|
|
819
|
+
'opencode.providerModel.title': 'OpenCode provider / model',
|
|
820
|
+
'opencode.writeAria': 'OpenCode write access',
|
|
821
|
+
'opencode.applySelection': 'Apply to OpenCode',
|
|
822
|
+
'opencode.targetFile': 'Active OpenCode config: {path} · {status}',
|
|
823
|
+
'opencode.providerStoreFile': 'Provider draft store: {path} (written to OpenCode on apply)',
|
|
824
|
+
'opencode.field.agent': 'Agent',
|
|
825
|
+
'opencode.field.apiKeyKeep': 'API key (leave blank to keep current key)',
|
|
826
|
+
'opencode.field.maxTokens': 'maxTokens (optional)',
|
|
827
|
+
'opencode.field.reasoningEffort': 'reasoningEffort (optional)',
|
|
828
|
+
'opencode.option.keepUnchanged': 'Keep unchanged',
|
|
829
|
+
'opencode.option.reasoningLow': 'low',
|
|
830
|
+
'opencode.option.reasoningMedium': 'medium',
|
|
831
|
+
'opencode.option.reasoningHigh': 'high',
|
|
832
|
+
'opencode.applyToCoreAgents': 'Apply to all core agents',
|
|
833
|
+
'opencode.enableAutoCompaction': 'Enable compaction.auto',
|
|
834
|
+
'opencode.disableProvider': 'Disable this provider',
|
|
835
|
+
'opencode.configFile.title': 'OpenCode config file',
|
|
836
|
+
'opencode.importParse': 'Import / parse file',
|
|
837
|
+
'opencode.saveConfig': 'Save config',
|
|
838
|
+
'opencode.parsedFile': 'Parsed: {file}',
|
|
839
|
+
'opencode.textarea.placeholder': 'Edit OpenCode config',
|
|
840
|
+
'opencode.configFile.hint': 'Active config preview; drafts stored in separate Provider store.',
|
|
841
|
+
'opencode.summary.title': 'Parsed summary',
|
|
842
|
+
'opencode.summary.noApiKey': 'No API key configured',
|
|
843
|
+
'opencode.summary.noModel': 'No model set',
|
|
844
|
+
'opencode.summary.agentType': 'agent',
|
|
845
|
+
'opencode.summary.sourceCodexMate': 'CodexMate store',
|
|
846
|
+
'opencode.summary.sourceOpenCode': 'Active OpenCode',
|
|
789
847
|
'config.providerTemplate.title': 'Provider presets',
|
|
790
848
|
'config.models': 'Model',
|
|
791
849
|
'config.modelLoading': 'Loading...',
|
|
@@ -1007,6 +1065,9 @@ const en = Object.freeze({
|
|
|
1007
1065
|
'status.claudeConfig': 'Claude config',
|
|
1008
1066
|
'status.claudeModel': 'Claude model',
|
|
1009
1067
|
'status.openclawConfig': 'OpenClaw config',
|
|
1068
|
+
'status.opencodeProvider': 'OpenCode provider',
|
|
1069
|
+
'status.opencodeModel': 'OpenCode model',
|
|
1070
|
+
'status.opencodeConfig': 'OpenCode config',
|
|
1010
1071
|
'status.workspaceFile': 'Workspace file',
|
|
1011
1072
|
'status.configMode': 'Config mode',
|
|
1012
1073
|
'status.currentProvider': 'Current provider',
|
|
@@ -2,6 +2,7 @@ const ja = Object.freeze({
|
|
|
2
2
|
|
|
3
3
|
// Global
|
|
4
4
|
'lang.zh': '中国語',
|
|
5
|
+
'lang.zh-tw': '繁體中文',
|
|
5
6
|
'lang.en': 'English',
|
|
6
7
|
'lang.vi': 'ベトナム語',
|
|
7
8
|
'lang.label': '言語',
|
|
@@ -50,6 +51,8 @@ const ja = Object.freeze({
|
|
|
50
51
|
'common.apply': '適用',
|
|
51
52
|
'common.applying': '適用中...',
|
|
52
53
|
'common.confirming': '確認中...',
|
|
54
|
+
'common.preview': 'プレビュー',
|
|
55
|
+
'common.previewing': 'プレビュー中...',
|
|
53
56
|
'common.refreshFromText': 'テキストから更新',
|
|
54
57
|
'common.backToEdit': '編集に戻る',
|
|
55
58
|
'common.selectAll': 'すべて選択',
|
|
@@ -64,6 +67,8 @@ const ja = Object.freeze({
|
|
|
64
67
|
'common.none': 'なし',
|
|
65
68
|
'common.configured': '設定済み',
|
|
66
69
|
'common.notConfigured': '未設定',
|
|
70
|
+
'common.enabled': '有効',
|
|
71
|
+
'common.disabled': '無効',
|
|
67
72
|
'cli.missing.title': '{name} CLI がインストールされていません',
|
|
68
73
|
'cli.missing.subtitle': '{name} CLI をインストールしてからこのページをご利用ください。',
|
|
69
74
|
'cli.missing.openDocs': 'インストールガイドを開く',
|
|
@@ -124,18 +129,21 @@ const ja = Object.freeze({
|
|
|
124
129
|
'tab.config.codex': 'Codex',
|
|
125
130
|
'tab.config.claude': 'Claude',
|
|
126
131
|
'tab.config.openclaw': 'OpenClaw',
|
|
132
|
+
'tab.config.opencode': 'OpenCode',
|
|
127
133
|
'tab.sessions': 'セッション',
|
|
128
134
|
'tab.usage': '使用量',
|
|
129
135
|
'tab.orchestration': 'タスク',
|
|
130
136
|
'tab.market': 'Skills',
|
|
131
137
|
'tab.plugins': 'プラグイン',
|
|
132
138
|
'tab.settings': '設定',
|
|
139
|
+
'tab.prompts': 'Prompts',
|
|
133
140
|
|
|
134
141
|
// Side rail section titles
|
|
135
142
|
'side.overview': '概要',
|
|
136
143
|
'side.docs': 'ドキュメント',
|
|
137
144
|
'side.config': '設定',
|
|
138
145
|
'side.sessions': 'セッション',
|
|
146
|
+
'side.prompts': 'Prompts',
|
|
139
147
|
'side.plugins': 'プラグイン',
|
|
140
148
|
'side.system': 'システム',
|
|
141
149
|
'side.orchestration': 'タスク',
|
|
@@ -163,8 +171,14 @@ const ja = Object.freeze({
|
|
|
163
171
|
'side.config.claude.meta': 'Claude Settings',
|
|
164
172
|
'side.config.openclaw': 'OpenClaw',
|
|
165
173
|
'side.config.openclaw.meta': 'JSON5 / AGENTS',
|
|
174
|
+
'side.config.opencode': 'OpenCode',
|
|
175
|
+
'side.config.opencode.meta': 'Config / Provider',
|
|
166
176
|
'side.sessions.browser': 'セッション閲覧',
|
|
167
177
|
'side.sessions.browser.meta': '閲覧 / エクスポート / クリーンアップ',
|
|
178
|
+
'side.prompts.agents': 'AGENTS.md',
|
|
179
|
+
'side.prompts.agents.meta': 'Codex プロンプトファイル',
|
|
180
|
+
'side.prompts.claude': 'CLAUDE.md',
|
|
181
|
+
'side.prompts.claude.meta': 'Claude プロンプトファイル',
|
|
168
182
|
'side.plugins.tools': 'プロンプトツール',
|
|
169
183
|
'side.plugins.tools.meta': 'テンプレート / 変数',
|
|
170
184
|
'side.plugins.templatesCount': '{count} 件のテンプレート',
|
|
@@ -183,6 +197,7 @@ const ja = Object.freeze({
|
|
|
183
197
|
'kicker.docs': 'Docs',
|
|
184
198
|
'kicker.trash': 'ゴミ箱',
|
|
185
199
|
'kicker.settings': 'Settings',
|
|
200
|
+
'kicker.prompts': 'Prompts',
|
|
186
201
|
|
|
187
202
|
'title.dashboard': 'Dashboard / Doctor',
|
|
188
203
|
'title.config': 'ローカル設定コンソール',
|
|
@@ -193,6 +208,7 @@ const ja = Object.freeze({
|
|
|
193
208
|
'title.plugins': 'プラグインとテンプレート',
|
|
194
209
|
'title.docs': 'CLI インストールとドキュメント',
|
|
195
210
|
'title.settings': 'システムとデータ設定',
|
|
211
|
+
'title.prompts': 'プロンプトファイルエディタ',
|
|
196
212
|
|
|
197
213
|
'subtitle.dashboard': '集約状態と診断エントリ。',
|
|
198
214
|
'subtitle.config': 'ローカル設定とモデルの管理。',
|
|
@@ -203,6 +219,9 @@ const ja = Object.freeze({
|
|
|
203
219
|
'subtitle.plugins': 'テンプレート化されたプロンプトと再利用可能なプラグインの管理。',
|
|
204
220
|
'subtitle.docs': 'CLI インストールコマンドとトラブルシューティング。',
|
|
205
221
|
'subtitle.settings': 'ダウンロード・ディレクトリ・ゴミ箱の管理。',
|
|
222
|
+
'subtitle.prompts': 'AGENTS.md と CLAUDE.md を編集。',
|
|
223
|
+
'prompts.subTab.codex': 'AGENTS.md (Codex)',
|
|
224
|
+
'prompts.subTab.claude': 'CLAUDE.md (Claude)',
|
|
206
225
|
|
|
207
226
|
'dashboard.doctor.title': 'Doctor',
|
|
208
227
|
'dashboard.doctor.runChecks': 'チェックを実行',
|
|
@@ -380,8 +399,13 @@ const ja = Object.freeze({
|
|
|
380
399
|
'toast.copy.empty': 'コピーする内容がありません',
|
|
381
400
|
'toast.copy.ok': 'コピーしました',
|
|
382
401
|
'toast.copy.fail': 'コピーに失敗しました',
|
|
402
|
+
'toast.link.fail': 'リンクの生成に失敗しました',
|
|
383
403
|
'toast.save.ok': '保存しました',
|
|
384
404
|
'toast.save.fail': '保存に失敗しました',
|
|
405
|
+
'toast.agents.saved.agents': 'AGENTS.md 保存しました',
|
|
406
|
+
'toast.agents.saved.claudeMd': 'CLAUDE.md 保存しました',
|
|
407
|
+
'toast.agents.saved.openclaw': 'OpenClaw AGENTS.md 保存しました',
|
|
408
|
+
'toast.agents.saved.workspace': 'ワークスペースファイル保存済み: {name}',
|
|
385
409
|
'toast.delete.ok': '削除しました',
|
|
386
410
|
'toast.delete.fail': '削除に失敗しました',
|
|
387
411
|
'toast.export.empty': 'エクスポートする内容がありません',
|
|
@@ -470,7 +494,7 @@ const ja = Object.freeze({
|
|
|
470
494
|
'diff.hint.busy': '差分生成中または適用中のため、操作は一時的に利用できません。',
|
|
471
495
|
'diff.hint.failedBack': '差分プレビューに失敗しました。編集に戻って再試行してください。',
|
|
472
496
|
'diff.hint.noChangesBack': '変更が検出されませんでした。編集に戻って修正を続けるか、キャンセルして終了してください。',
|
|
473
|
-
'diff.hint.previewMode': '
|
|
497
|
+
'diff.hint.previewMode': '現在プレビューモードです。「保存」をクリックして書き込むか、「編集に戻る」で修正を続けてください。',
|
|
474
498
|
|
|
475
499
|
'modal.agents.export': 'エクスポート',
|
|
476
500
|
'modal.agents.copy': 'コピー',
|
|
@@ -479,13 +503,13 @@ const ja = Object.freeze({
|
|
|
479
503
|
'modal.agents.targetFile': '対象ファイル',
|
|
480
504
|
'modal.agents.contentLabel': 'AGENTS.md 内容',
|
|
481
505
|
'modal.agents.placeholder': 'ここに AGENTS.md の内容を編集してください',
|
|
482
|
-
'modal.agents.unsaved.previewModeHint': '
|
|
506
|
+
'modal.agents.unsaved.previewModeHint': 'プレビューモード:現在の変更はまだ保存されていません。「保存」をクリックするとファイルに書き込まれます。',
|
|
483
507
|
'modal.agents.unsaved.detectedHint': '未保存の変更が検出されました:ページを閉じるか適用する前に保存してください。',
|
|
484
508
|
'modal.agents.hint.shortcuts': 'ショートカット:Esc(差分プレビュー時は編集に戻る、編集時はウィンドウを閉じる)。',
|
|
485
|
-
'modal.agents.hint.twoStepSave': '保存は2
|
|
509
|
+
'modal.agents.hint.twoStepSave': '保存は2段階:「プレビュー」で差分を確認し、「保存」で書き込みます。',
|
|
486
510
|
'diff.tooLargeSkip': '内容が大きすぎるため、行単位の差分プレビューをスキップしました',
|
|
487
|
-
'diff.viewHint.preview': '
|
|
488
|
-
'diff.viewHint.truncated': '
|
|
511
|
+
'diff.viewHint.preview': '現在プレビューモードです。「保存」で書き込むか、「編集に戻る」で修正を続けてください。',
|
|
512
|
+
'diff.viewHint.truncated': '内容が大きすぎるためプレビューをスキップしました。「保存」で書き込むか、「編集に戻る」で修正を続けてください。',
|
|
489
513
|
|
|
490
514
|
// Skills modal
|
|
491
515
|
'modal.skills.title': 'Skills 管理',
|
|
@@ -613,6 +637,7 @@ const ja = Object.freeze({
|
|
|
613
637
|
'sessions.preview.openStandalone': 'スタンドアロンで開く',
|
|
614
638
|
'sessions.preview.copyLink': 'リンクをコピー',
|
|
615
639
|
'sessions.preview.copyPath': 'パスをコピー',
|
|
640
|
+
'sessions.preview.openLink': 'リンクを開く',
|
|
616
641
|
'sessions.preview.loadingBody': 'メッセージ読み込み中...',
|
|
617
642
|
'sessions.preview.emptyMsgs': 'メッセージがありません',
|
|
618
643
|
'sessions.preview.rendering': 'レンダリング中...',
|
|
@@ -775,6 +800,39 @@ const ja = Object.freeze({
|
|
|
775
800
|
'toolConfig.claude.lockedTitle': 'Claude プロバイダーは読み取り専用です',
|
|
776
801
|
'toolConfig.claude.lockedDesc': 'Claude 設定には書き込みません。追加・適用・編集・削除するには、このタブの書き込みを有効化してください。',
|
|
777
802
|
'toolConfig.claude.confirmMessage': '有効化すると、Claude タブ内の適用操作が ~/.claude/settings.json などの Claude 設定を書き込みます。',
|
|
803
|
+
'toolConfig.opencode.title': 'OpenCode 設定の書き込み',
|
|
804
|
+
'toolConfig.opencode.desc': 'デフォルトは読み取り専用。有効化すると OpenCode 設定ファイルに書き込みます。',
|
|
805
|
+
'toolConfig.opencode.lockedTitle': '読み取り専用',
|
|
806
|
+
'toolConfig.opencode.lockedDesc': '書き込み権限を有効化すると、保存・インポート・設定の適用ができます。',
|
|
807
|
+
'toolConfig.opencode.confirmMessage': '有効化すると、OpenCode タブ内の操作が XDG OpenCode 設定ファイル(例: ~/.config/opencode/opencode.jsonc)または OPENCODE_CONFIG 指定ファイルを書き込みます。',
|
|
808
|
+
'opencode.providerModel.title': 'OpenCode provider / model',
|
|
809
|
+
'opencode.writeAria': 'OpenCode 書き込み',
|
|
810
|
+
'opencode.applySelection': 'OpenCode に適用',
|
|
811
|
+
'opencode.targetFile': '有効な OpenCode 設定: {path} · {status}',
|
|
812
|
+
'opencode.providerStoreFile': 'プロバイダ下書きストア:{path}(適用時に OpenCode へ書き込み)',
|
|
813
|
+
'opencode.field.agent': 'Agent',
|
|
814
|
+
'opencode.field.apiKeyKeep': 'API Key(空なら既存 key を保持)',
|
|
815
|
+
'opencode.field.maxTokens': 'maxTokens(任意)',
|
|
816
|
+
'opencode.field.reasoningEffort': 'reasoningEffort(任意)',
|
|
817
|
+
'opencode.option.keepUnchanged': '変更しない',
|
|
818
|
+
'opencode.option.reasoningLow': 'low',
|
|
819
|
+
'opencode.option.reasoningMedium': 'medium',
|
|
820
|
+
'opencode.option.reasoningHigh': 'high',
|
|
821
|
+
'opencode.applyToCoreAgents': 'すべてのコア agent に適用',
|
|
822
|
+
'opencode.enableAutoCompaction': 'compaction.auto を有効化',
|
|
823
|
+
'opencode.disableProvider': 'この provider を無効化',
|
|
824
|
+
'opencode.configFile.title': 'OpenCode 設定ファイル',
|
|
825
|
+
'opencode.importParse': 'ファイルをインポート/解析',
|
|
826
|
+
'opencode.saveConfig': '設定を保存',
|
|
827
|
+
'opencode.parsedFile': '解析済み: {file}',
|
|
828
|
+
'opencode.textarea.placeholder': 'OpenCode 設定を編集',
|
|
829
|
+
'opencode.configFile.hint': '有効設定のプレビュー。下書きは個別のプロバイダストアに保存されます。',
|
|
830
|
+
'opencode.summary.title': '解析サマリー',
|
|
831
|
+
'opencode.summary.noApiKey': 'API Key 未設定',
|
|
832
|
+
'opencode.summary.noModel': 'model 未設定',
|
|
833
|
+
'opencode.summary.agentType': 'agent',
|
|
834
|
+
'opencode.summary.sourceCodexMate': 'CodexMate store',
|
|
835
|
+
'opencode.summary.sourceOpenCode': 'Active OpenCode',
|
|
778
836
|
'config.providerTemplate.title': 'プリセットプロバイダー',
|
|
779
837
|
'config.models': 'モデル',
|
|
780
838
|
'config.modelLoading': '読み込み中...',
|
|
@@ -996,6 +1054,9 @@ const ja = Object.freeze({
|
|
|
996
1054
|
'status.claudeConfig': 'Claude 設定',
|
|
997
1055
|
'status.claudeModel': 'Claude モデル',
|
|
998
1056
|
'status.openclawConfig': 'OpenClaw 設定',
|
|
1057
|
+
'status.opencodeProvider': 'OpenCode Provider',
|
|
1058
|
+
'status.opencodeModel': 'OpenCode モデル',
|
|
1059
|
+
'status.opencodeConfig': 'OpenCode 設定',
|
|
999
1060
|
'status.workspaceFile': 'ワークスペースファイル',
|
|
1000
1061
|
'status.configMode': '設定モード',
|
|
1001
1062
|
'status.currentProvider': '現在の Provider',
|
|
@@ -10,6 +10,7 @@ const vi = Object.freeze({
|
|
|
10
10
|
'plugins.builtin.ruleAck.line1': 'Hãy làm theo【{{rule}}】, nhận được thì phản hồi',
|
|
11
11
|
// Global
|
|
12
12
|
'lang.zh': 'Tiếng Trung',
|
|
13
|
+
'lang.zh-tw': 'Tiếng Trung (Phồn thể)',
|
|
13
14
|
'lang.en': 'Tiếng Anh',
|
|
14
15
|
'lang.vi': 'Tiếng Việt',
|
|
15
16
|
'lang.label': 'Ngôn ngữ',
|
|
@@ -58,6 +59,8 @@ const vi = Object.freeze({
|
|
|
58
59
|
'common.apply': 'Áp dụng',
|
|
59
60
|
'common.applying': 'Đang áp dụng...',
|
|
60
61
|
'common.confirming': 'Đang xác nhận...',
|
|
62
|
+
'common.preview': 'Xem trước',
|
|
63
|
+
'common.previewing': 'Đang xem trước...',
|
|
61
64
|
'common.writeToEditor': 'Ghi vào trình soạn thảo',
|
|
62
65
|
'common.refreshFromText': 'Làm mới từ văn bản',
|
|
63
66
|
'common.backToEdit': 'Quay lại chỉnh sửa',
|
|
@@ -73,6 +76,8 @@ const vi = Object.freeze({
|
|
|
73
76
|
'common.none': 'Không có',
|
|
74
77
|
'common.configured': 'Đã cấu hình',
|
|
75
78
|
'common.notConfigured': 'Chưa cấu hình',
|
|
79
|
+
'common.enabled': 'Đã bật',
|
|
80
|
+
'common.disabled': 'Đã tắt',
|
|
76
81
|
'common.notSelected': 'Chưa chọn',
|
|
77
82
|
|
|
78
83
|
// Roles / labels
|
|
@@ -84,18 +89,21 @@ const vi = Object.freeze({
|
|
|
84
89
|
'tab.dashboard': 'Tổng quan',
|
|
85
90
|
'tab.docs': 'Tài liệu',
|
|
86
91
|
'tab.config': 'Cấu hình',
|
|
92
|
+
'tab.config.opencode': 'OpenCode',
|
|
87
93
|
'tab.sessions': 'Phiên',
|
|
88
94
|
'tab.usage': 'Sử dụng',
|
|
89
95
|
'tab.orchestration': 'Tác vụ',
|
|
90
96
|
'tab.market': 'Skills',
|
|
91
97
|
'tab.plugins': 'Plugin',
|
|
92
98
|
'tab.settings': 'Cài đặt',
|
|
99
|
+
'tab.prompts': 'Prompts',
|
|
93
100
|
|
|
94
101
|
// Side rail section titles
|
|
95
102
|
'side.overview': 'Tổng quan',
|
|
96
103
|
'side.docs': 'Tài liệu',
|
|
97
104
|
'side.config': 'Cấu hình',
|
|
98
105
|
'side.sessions': 'Phiên',
|
|
106
|
+
'side.prompts': 'Prompts',
|
|
99
107
|
'side.plugins': 'Plugin',
|
|
100
108
|
'side.system': 'Hệ thống',
|
|
101
109
|
'side.orchestration': 'Tác vụ',
|
|
@@ -123,8 +131,14 @@ const vi = Object.freeze({
|
|
|
123
131
|
'side.config.claude.meta': 'Cài đặt Claude',
|
|
124
132
|
'side.config.openclaw': 'OpenClaw',
|
|
125
133
|
'side.config.openclaw.meta': 'JSON5 / AGENTS',
|
|
134
|
+
'side.config.opencode': 'OpenCode',
|
|
135
|
+
'side.config.opencode.meta': 'Config / Provider',
|
|
126
136
|
'side.sessions.browser': 'Trình duyệt phiên',
|
|
127
137
|
'side.sessions.browser.meta': 'Duyệt / Xuất / Dọn dẹp',
|
|
138
|
+
'side.prompts.agents': 'AGENTS.md',
|
|
139
|
+
'side.prompts.agents.meta': 'Tệp lệnh Codex',
|
|
140
|
+
'side.prompts.claude': 'CLAUDE.md',
|
|
141
|
+
'side.prompts.claude.meta': 'Tệp lệnh Claude',
|
|
128
142
|
'side.plugins.tools': 'Công cụ prompt',
|
|
129
143
|
'side.plugins.tools.meta': 'Mẫu / Biến',
|
|
130
144
|
'side.system.settings': 'Cài đặt runtime',
|
|
@@ -149,6 +163,39 @@ const vi = Object.freeze({
|
|
|
149
163
|
'toolConfig.claude.lockedTitle': 'Provider Claude đang chỉ đọc',
|
|
150
164
|
'toolConfig.claude.lockedDesc': 'Cấu hình Claude sẽ không bị sửa. Hãy bật ghi trong tab này để thêm, áp dụng, sửa hoặc xóa provider.',
|
|
151
165
|
'toolConfig.claude.confirmMessage': 'Sau khi bật, thao tác áp dụng trong tab Claude có thể ghi ~/.claude/settings.json và cấu hình Claude liên quan.',
|
|
166
|
+
'toolConfig.opencode.title': 'Ghi cấu hình OpenCode',
|
|
167
|
+
'toolConfig.opencode.desc': 'Mặc định chỉ đọc; bật để ghi cấu hình OpenCode.',
|
|
168
|
+
'toolConfig.opencode.lockedTitle': 'Chỉ đọc',
|
|
169
|
+
'toolConfig.opencode.lockedDesc': 'Bật quyền ghi để lưu, nhập hoặc áp dụng cấu hình.',
|
|
170
|
+
'toolConfig.opencode.confirmMessage': 'Sau khi bật, thao tác trong tab OpenCode có thể ghi file cấu hình XDG OpenCode (ví dụ ~/.config/opencode/opencode.jsonc) hoặc file do OPENCODE_CONFIG chỉ định.',
|
|
171
|
+
'opencode.providerModel.title': 'Provider / model OpenCode',
|
|
172
|
+
'opencode.writeAria': 'Quyền ghi OpenCode',
|
|
173
|
+
'opencode.applySelection': 'Áp dụng vào OpenCode',
|
|
174
|
+
'opencode.targetFile': 'Cấu hình OpenCode đang có hiệu lực: {path} · {status}',
|
|
175
|
+
'opencode.providerStoreFile': 'Kho nháp provider: {path} (ghi vào OpenCode khi áp dụng)',
|
|
176
|
+
'opencode.field.agent': 'Agent',
|
|
177
|
+
'opencode.field.apiKeyKeep': 'API Key (để trống để giữ key hiện tại)',
|
|
178
|
+
'opencode.field.maxTokens': 'maxTokens (tùy chọn)',
|
|
179
|
+
'opencode.field.reasoningEffort': 'reasoningEffort (tùy chọn)',
|
|
180
|
+
'opencode.option.keepUnchanged': 'Giữ nguyên',
|
|
181
|
+
'opencode.option.reasoningLow': 'low',
|
|
182
|
+
'opencode.option.reasoningMedium': 'medium',
|
|
183
|
+
'opencode.option.reasoningHigh': 'high',
|
|
184
|
+
'opencode.applyToCoreAgents': 'Áp dụng cho tất cả agent cốt lõi',
|
|
185
|
+
'opencode.enableAutoCompaction': 'Bật compaction.auto',
|
|
186
|
+
'opencode.disableProvider': 'Tắt provider này',
|
|
187
|
+
'opencode.configFile.title': 'File cấu hình OpenCode',
|
|
188
|
+
'opencode.importParse': 'Nhập / phân tích file',
|
|
189
|
+
'opencode.saveConfig': 'Lưu cấu hình',
|
|
190
|
+
'opencode.parsedFile': 'Đã phân tích: {file}',
|
|
191
|
+
'opencode.textarea.placeholder': 'Chỉnh sửa cấu hình OpenCode',
|
|
192
|
+
'opencode.configFile.hint': 'Xem trước cấu hình đang hoạt động; bản nháp lưu trong kho Provider riêng.',
|
|
193
|
+
'opencode.summary.title': 'Tóm tắt đã phân tích',
|
|
194
|
+
'opencode.summary.noApiKey': 'Chưa cấu hình API Key',
|
|
195
|
+
'opencode.summary.noModel': 'Chưa đặt model',
|
|
196
|
+
'opencode.summary.agentType': 'agent',
|
|
197
|
+
'opencode.summary.sourceCodexMate': 'CodexMate store',
|
|
198
|
+
'opencode.summary.sourceOpenCode': 'Active OpenCode',
|
|
152
199
|
'side.usage.meta': 'Thống kê / Xu hướng',
|
|
153
200
|
'side.orchestration.meta': 'Kế hoạch / Hàng đợi / Runs',
|
|
154
201
|
|
|
@@ -162,6 +209,7 @@ const vi = Object.freeze({
|
|
|
162
209
|
'kicker.plugins': 'Plugin',
|
|
163
210
|
'kicker.docs': 'Tài liệu',
|
|
164
211
|
'kicker.settings': 'Cài đặt',
|
|
212
|
+
'kicker.prompts': 'Prompts',
|
|
165
213
|
'kicker.trash': 'Thùng rác',
|
|
166
214
|
|
|
167
215
|
'title.dashboard': 'Dashboard / Doctor',
|
|
@@ -173,6 +221,7 @@ const vi = Object.freeze({
|
|
|
173
221
|
'title.plugins': 'Plugin & Mẫu',
|
|
174
222
|
'title.docs': 'Cài CLI & Tài liệu',
|
|
175
223
|
'title.settings': 'Hệ thống & Dữ liệu',
|
|
224
|
+
'title.prompts': 'Trình chỉnh sửa tệp lệnh',
|
|
176
225
|
|
|
177
226
|
'subtitle.dashboard': 'Tổng hợp trạng thái và chẩn đoán.',
|
|
178
227
|
'subtitle.config': 'Quản lý cấu hình và mô hình cục bộ.',
|
|
@@ -183,6 +232,9 @@ const vi = Object.freeze({
|
|
|
183
232
|
'subtitle.plugins': 'Quản lý plugin và mẫu tái sử dụng.',
|
|
184
233
|
'subtitle.docs': 'Lệnh cài CLI và hướng dẫn.',
|
|
185
234
|
'subtitle.settings': 'Quản lý tải xuống, thư mục và dữ liệu.',
|
|
235
|
+
'subtitle.prompts': 'Chỉnh sửa AGENTS.md và CLAUDE.md.',
|
|
236
|
+
'prompts.subTab.codex': 'AGENTS.md (Codex)',
|
|
237
|
+
'prompts.subTab.claude': 'CLAUDE.md (Claude)',
|
|
186
238
|
|
|
187
239
|
|
|
188
240
|
// Task orchestration readiness
|
|
@@ -261,8 +313,13 @@ const vi = Object.freeze({
|
|
|
261
313
|
'toast.copy.empty': 'Không có gì để sao chép',
|
|
262
314
|
'toast.copy.ok': 'Đã sao chép',
|
|
263
315
|
'toast.copy.fail': 'Sao chép thất bại',
|
|
316
|
+
'toast.link.fail': 'Không thể tạo liên kết',
|
|
264
317
|
'toast.save.ok': 'Đã lưu',
|
|
265
318
|
'toast.save.fail': 'Lưu thất bại',
|
|
319
|
+
'toast.agents.saved.agents': 'AGENTS.md đã lưu',
|
|
320
|
+
'toast.agents.saved.claudeMd': 'CLAUDE.md đã lưu',
|
|
321
|
+
'toast.agents.saved.openclaw': 'OpenClaw AGENTS.md đã lưu',
|
|
322
|
+
'toast.agents.saved.workspace': 'Tệp workspace đã lưu: {name}',
|
|
266
323
|
'toast.delete.ok': 'Đã xóa',
|
|
267
324
|
'toast.delete.fail': 'Xóa thất bại',
|
|
268
325
|
'toast.operation.success': 'Thao tác thành công',
|
|
@@ -309,6 +366,23 @@ const vi = Object.freeze({
|
|
|
309
366
|
'modal.claudeDelete.message': 'Xóa cấu hình "{name}"?',
|
|
310
367
|
'modal.claudeDelete.confirm': 'Xóa',
|
|
311
368
|
'modal.claudeDelete.cancel': 'Hủy',
|
|
369
|
+
|
|
370
|
+
'status.opencodeProvider': 'Provider OpenCode',
|
|
371
|
+
'status.opencodeModel': 'Model OpenCode',
|
|
372
|
+
'status.opencodeConfig': 'Cấu hình OpenCode',
|
|
373
|
+
|
|
374
|
+
// Sessions
|
|
375
|
+
'sessions.preview.openLink': 'Mở liên kết',
|
|
376
|
+
|
|
377
|
+
// Diff / Agents hints
|
|
378
|
+
'diff.hint.busy': 'Đang tạo diff hoặc áp dụng. Thao tác tạm thời bị vô hiệu hóa.',
|
|
379
|
+
'diff.hint.failedBack': 'Xem trước diff thất bại. Hãy quay lại chỉnh sửa và thử lại.',
|
|
380
|
+
'diff.hint.noChangesBack': 'Không phát hiện thay đổi. Quay lại chỉnh sửa hoặc hủy.',
|
|
381
|
+
'diff.hint.previewMode': 'Đang xem trước. Nhấp "Lưu" để ghi hoặc "Quay lại chỉnh sửa" để tiếp tục.',
|
|
382
|
+
'modal.agents.unsaved.detectedHint': 'Phát hiện thay đổi chưa lưu: lưu trước khi đóng hoặc áp dụng.',
|
|
383
|
+
'modal.agents.hint.twoStepSave': 'Lưu hai bước: "Xem trước" để kiểm tra diff, rồi "Lưu" để ghi.',
|
|
384
|
+
'diff.viewHint.preview': 'Đang xem trước. Nhấp "Lưu" để ghi hoặc "Quay lại chỉnh sửa" để tiếp tục.',
|
|
385
|
+
'diff.viewHint.truncated': 'Bỏ qua xem trước do nội dung quá lớn. Nhấp "Lưu" để ghi hoặc "Quay lại chỉnh sửa" để tiếp tục.',
|
|
312
386
|
});
|
|
313
387
|
|
|
314
388
|
export { vi };
|