viveworker 0.1.10 → 0.2.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.
- package/README.md +27 -8
- package/package.json +7 -2
- package/scripts/viveworker-bridge.mjs +1146 -151
- package/scripts/viveworker-claude-hook.mjs +839 -0
- package/scripts/viveworker.mjs +71 -0
- package/web/app.css +171 -0
- package/web/app.js +523 -59
- package/web/i18n.js +115 -71
package/web/i18n.js
CHANGED
|
@@ -4,6 +4,7 @@ export const SUPPORTED_LOCALES = Object.freeze(["en", "ja"]);
|
|
|
4
4
|
const translations = {
|
|
5
5
|
en: {
|
|
6
6
|
"common.codex": "Codex",
|
|
7
|
+
"common.claude": "Claude",
|
|
7
8
|
"common.appName": "viveworker",
|
|
8
9
|
"common.back": "Back",
|
|
9
10
|
"common.next": "Next",
|
|
@@ -65,12 +66,12 @@ const translations = {
|
|
|
65
66
|
"tab.timeline.description": "Conversation updates and operational events across recent threads.",
|
|
66
67
|
"tab.diff.title": "Diff",
|
|
67
68
|
"tab.diff.label": "Diff",
|
|
68
|
-
"tab.diff.eyebrow": "
|
|
69
|
-
"tab.diff.description": "Review
|
|
69
|
+
"tab.diff.eyebrow": "Code changes",
|
|
70
|
+
"tab.diff.description": "Review file changes from your AI desktop session in a mobile-friendly diff view.",
|
|
70
71
|
"tab.code.title": "Code",
|
|
71
72
|
"tab.code.label": "Code",
|
|
72
|
-
"tab.code.eyebrow": "
|
|
73
|
-
"tab.code.description": "Review
|
|
73
|
+
"tab.code.eyebrow": "Code changes",
|
|
74
|
+
"tab.code.description": "Review file changes from your AI desktop session in a mobile-friendly diff view on your device.",
|
|
74
75
|
"tab.completed.title": "Completed",
|
|
75
76
|
"tab.completed.label": "Completed",
|
|
76
77
|
"tab.completed.eyebrow": "History",
|
|
@@ -80,7 +81,7 @@ const translations = {
|
|
|
80
81
|
"tab.settings.eyebrow": "Device",
|
|
81
82
|
"tab.settings.description": "Pairing, installation, and notification controls.",
|
|
82
83
|
"pair.copy":
|
|
83
|
-
"Pair this device with your local
|
|
84
|
+
"Pair this device with your local AI desktop session and keep approvals, plans, choices, and completions within reach.",
|
|
84
85
|
"pair.codeLabel": "Pairing code",
|
|
85
86
|
"pair.codePlaceholder": "Enter the pairing code",
|
|
86
87
|
"pair.connect": "Connect this device",
|
|
@@ -112,7 +113,7 @@ const translations = {
|
|
|
112
113
|
"empty.pending":
|
|
113
114
|
"Nothing needs attention right now. New approvals, plans, and choices will appear here first.",
|
|
114
115
|
"empty.timeline": "No timeline activity is available yet. New conversation updates will show up here.",
|
|
115
|
-
"empty.diff": "No
|
|
116
|
+
"empty.diff": "No file changes are available right now.",
|
|
116
117
|
"empty.completed": "Completed history is empty for now.",
|
|
117
118
|
"empty.default": "Nothing to show right now.",
|
|
118
119
|
"detail.selectTitle": "Choose something from the list",
|
|
@@ -127,21 +128,25 @@ const translations = {
|
|
|
127
128
|
"detail.diffTitle": "Diff",
|
|
128
129
|
"detail.diffUnavailable": "Diff is not available for this change. Showing touched files only.",
|
|
129
130
|
"detail.diffThread.copy": ({ count }) =>
|
|
131
|
+
`This thread has ${count} ${count === 1 ? "changed file" : "changed files"}. Review each file below.`,
|
|
132
|
+
"detail.diffThread.copy.current": ({ count }) =>
|
|
130
133
|
`This thread currently has ${count} ${count === 1 ? "unstaged changed file" : "unstaged changed files"}. Review each file below.`,
|
|
131
|
-
"detail.
|
|
132
|
-
|
|
133
|
-
"detail.fileEvent.
|
|
134
|
-
"detail.fileEvent.
|
|
135
|
-
"detail.fileEvent.
|
|
134
|
+
"detail.diffThread.copy.latest": ({ count }) =>
|
|
135
|
+
`This thread has ${count} ${count === 1 ? "latest observed file change" : "latest observed file changes"}. Review each file below.`,
|
|
136
|
+
"detail.fileEvent.read": "{provider} checked these files in this step.",
|
|
137
|
+
"detail.fileEvent.write": "{provider} updated these files in this step.",
|
|
138
|
+
"detail.fileEvent.create": "{provider} created these files in this step.",
|
|
139
|
+
"detail.fileEvent.delete": "{provider} deleted these files in this step.",
|
|
140
|
+
"detail.fileEvent.rename": "{provider} renamed these files in this step.",
|
|
136
141
|
"detail.turnAbortedNotice": "This task was interrupted.",
|
|
137
142
|
"detail.macOnlyChoice": "Please answer this type of input on the Mac.",
|
|
138
143
|
"detail.detailUnavailable": "Detail not available.",
|
|
139
144
|
"detail.pageProgress": ({ page, totalPages }) => `Page ${page} / ${totalPages}`,
|
|
140
145
|
"reply.eyebrow": "Reply",
|
|
141
146
|
"reply.title": "Send a follow-up",
|
|
142
|
-
"reply.copy": "Send a new message back into this
|
|
147
|
+
"reply.copy": "Send a new message back into this {provider} thread from the latest completed result.",
|
|
143
148
|
"reply.fieldLabel": "Message",
|
|
144
|
-
"reply.placeholder": "Ask
|
|
149
|
+
"reply.placeholder": "Ask {provider} to continue, refine the result, or try a different approach.",
|
|
145
150
|
"reply.imageLabel": "Image",
|
|
146
151
|
"reply.imageAdd": "Add images",
|
|
147
152
|
"reply.imageAddMore": "Add more images",
|
|
@@ -149,7 +154,7 @@ const translations = {
|
|
|
149
154
|
"reply.imageRemove": "Remove",
|
|
150
155
|
"reply.imageHint": "Attach up to {count} images from your device and send them together with your message.",
|
|
151
156
|
"reply.imageAttached": "Attached image",
|
|
152
|
-
"reply.send": "Send to
|
|
157
|
+
"reply.send": "Send to {provider}",
|
|
153
158
|
"reply.sendConfirm": "Send anyway",
|
|
154
159
|
"reply.sendAnother": "Send another message",
|
|
155
160
|
"reply.sendSending": "Sending...",
|
|
@@ -160,8 +165,8 @@ const translations = {
|
|
|
160
165
|
"reply.mode.off": "Off",
|
|
161
166
|
"reply.mode.defaultHint": "Send a normal follow-up message.",
|
|
162
167
|
"reply.mode.planHint": "Start the next turn in Plan mode.",
|
|
163
|
-
"reply.notice.sentDefault": "Your message was sent to
|
|
164
|
-
"reply.notice.sentPlan": "Your message was sent to
|
|
168
|
+
"reply.notice.sentDefault": "Your message was sent to {provider}.",
|
|
169
|
+
"reply.notice.sentPlan": "Your message was sent to {provider} in Plan mode.",
|
|
165
170
|
"reply.sentPreviewLabel": "Sent message",
|
|
166
171
|
"reply.warning.title": "This thread already has newer messages.",
|
|
167
172
|
"reply.warning.copy": "Review the latest thread activity first, or send this message anyway if you still want to continue from here.",
|
|
@@ -176,23 +181,23 @@ const translations = {
|
|
|
176
181
|
"choice.submit": "Submit Answers",
|
|
177
182
|
"summary.completed": "Read the finished result and any final notes.",
|
|
178
183
|
"summary.userMessage": "Open the message again and read it in context.",
|
|
179
|
-
"summary.assistantCommentary": "Read
|
|
180
|
-
"summary.assistantFinal": "Read
|
|
181
|
-
"summary.approval": "Review what
|
|
182
|
-
"summary.plan": "Check the proposed plan before
|
|
183
|
-
"summary.choice": "Pick the option
|
|
184
|
-
"summary.fileEvent": "Review the files
|
|
185
|
-
"summary.diffThread": "Review the
|
|
184
|
+
"summary.assistantCommentary": "Read {provider}'s latest working update.",
|
|
185
|
+
"summary.assistantFinal": "Read {provider}'s final reply for this turn.",
|
|
186
|
+
"summary.approval": "Review what {provider} wants to do and decide whether to allow it.",
|
|
187
|
+
"summary.plan": "Check the proposed plan before {provider} starts implementing it.",
|
|
188
|
+
"summary.choice": "Pick the option {provider} needs to continue.",
|
|
189
|
+
"summary.fileEvent": "Review the files {provider} checked or updated in this step.",
|
|
190
|
+
"summary.diffThread": "Review the file changes for this thread.",
|
|
186
191
|
"summary.default": "Open the item to review its details.",
|
|
187
192
|
"intent.approval": "Approve or reject this request.",
|
|
188
|
-
"intent.plan": "Review this plan before
|
|
189
|
-
"intent.choice": "Choose an answer so
|
|
193
|
+
"intent.plan": "Review this plan before {provider} continues.",
|
|
194
|
+
"intent.choice": "Choose an answer so {provider} can continue.",
|
|
190
195
|
"intent.completed": "Finished. Open to review the result.",
|
|
191
196
|
"intent.fileEvent": "Review the files involved in this step.",
|
|
192
|
-
"intent.diffThread": "Review the
|
|
197
|
+
"intent.diffThread": "Review the file changes for this thread.",
|
|
193
198
|
"intent.userMessage": "Open this message again.",
|
|
194
199
|
"intent.assistantCommentary": "Read the latest working update.",
|
|
195
|
-
"intent.assistantFinal": "Read
|
|
200
|
+
"intent.assistantFinal": "Read {provider}'s final reply for this turn.",
|
|
196
201
|
"timeline.allThreads": "All",
|
|
197
202
|
"timeline.unknownThread": "Unknown thread",
|
|
198
203
|
"inbox.subtab.pending": "Pending",
|
|
@@ -224,7 +229,7 @@ const translations = {
|
|
|
224
229
|
"fileEvent.timeline.rename": ({ count }) => `Renamed ${count} ${count === 1 ? "file" : "files"}`,
|
|
225
230
|
"diff.threadSummary": ({ count }) => `Changed ${count} ${count === 1 ? "file" : "files"}`,
|
|
226
231
|
"diff.latestChange": "Latest change",
|
|
227
|
-
"diff.latestChangeFallback": "
|
|
232
|
+
"diff.latestChangeFallback": "File changes are available in this thread.",
|
|
228
233
|
"settings.intro": "Check pairing, language, install status, and Web Push health for this device.",
|
|
229
234
|
"settings.section.overview": "Quick setup",
|
|
230
235
|
"settings.section.notifications": "Notifications",
|
|
@@ -265,6 +270,13 @@ const translations = {
|
|
|
265
270
|
"settings.status.connected": "Connected",
|
|
266
271
|
"settings.status.info": "Info",
|
|
267
272
|
"settings.notifications.title": "Notifications",
|
|
273
|
+
"settings.claudeAway.title": "Claude",
|
|
274
|
+
"settings.claudeAway.description": "When ON, Claude's plan approvals and questions can be answered from either the paired device or your PC browser (auto-opened on each prompt). The first answer wins. While OFF, the Claude Desktop native dialog handles them as usual and the paired device only sees a read-only notification.",
|
|
275
|
+
"settings.claudeAway.on": "On",
|
|
276
|
+
"settings.claudeAway.off": "Off",
|
|
277
|
+
"settings.awayMode.title": "Sync mode",
|
|
278
|
+
"settings.awayMode.copy": "Let Claude's plan approvals and questions be answered from either your PC browser or any paired device, whichever you reach first.",
|
|
279
|
+
"settings.awayMode.codexNote": "Codex requires no configuration: approvals and prompts can already be handled from either the desktop or any paired device.",
|
|
268
280
|
"settings.notifications.copy":
|
|
269
281
|
"Keep approvals, plans, questions, and completions within reach even when viveworker is in the background.",
|
|
270
282
|
"settings.notifications.serverDisabled": "Web Push is not enabled on the server yet.",
|
|
@@ -304,7 +316,7 @@ const translations = {
|
|
|
304
316
|
"settings.language.title": "Language",
|
|
305
317
|
"settings.language.copy": "Choose how this device should display viveworker.",
|
|
306
318
|
"settings.pairing.title": "Pairing",
|
|
307
|
-
"settings.pairing.copy": "This device is paired with your local
|
|
319
|
+
"settings.pairing.copy": "This device is paired with your local AI desktop session.",
|
|
308
320
|
"settings.pairing.connected": "Paired",
|
|
309
321
|
"settings.technical.title": "Technical details",
|
|
310
322
|
"settings.technical.copy": "Connection and notification diagnostics for this device.",
|
|
@@ -366,7 +378,7 @@ const translations = {
|
|
|
366
378
|
"error.choiceInputReadOnly": "Please answer this type of input on the Mac.",
|
|
367
379
|
"error.choiceInputAlreadyHandled": "This choice request was already handled.",
|
|
368
380
|
"error.mkcertRootCaNotFound": "The mkcert root CA file could not be found.",
|
|
369
|
-
"server.fallback.codexTask": "
|
|
381
|
+
"server.fallback.codexTask": "{provider} task",
|
|
370
382
|
"server.title.approval": "Approval",
|
|
371
383
|
"server.title.complete": "Completed",
|
|
372
384
|
"server.title.plan": "Plan",
|
|
@@ -388,22 +400,32 @@ const translations = {
|
|
|
388
400
|
"server.message.commandPrefix": ({ command }) => `Command: ${command}`,
|
|
389
401
|
"server.message.pathPrefix": ({ path }) => `Path: ${path}`,
|
|
390
402
|
"server.message.approveOnMac": "Approve on Mac only: this device alert mirrors codex.app.",
|
|
391
|
-
"server.message.approvalNeededInCodex": "Approval needed in
|
|
403
|
+
"server.message.approvalNeededInCodex": "Approval needed in {provider}.",
|
|
392
404
|
"server.message.extraApprovals": ({ count }) => `Extra approvals: ${count}`,
|
|
393
405
|
"server.message.taskFinished": "Task finished.",
|
|
394
406
|
"server.message.turnAborted": "This task was interrupted.",
|
|
395
407
|
"server.message.planReady": "Plan is ready.",
|
|
396
|
-
"server.message.choiceSubmitted": "The selected answers were sent to
|
|
408
|
+
"server.message.choiceSubmitted": "The selected answers were sent to {provider}.",
|
|
397
409
|
"server.message.choiceSubmittedTest": "The test answers were received.",
|
|
398
410
|
"server.message.choiceSummarySubmitted": "Selected answers sent.",
|
|
399
411
|
"server.message.choiceSummaryReceivedTest": "Test answers received.",
|
|
400
|
-
"server.message.
|
|
401
|
-
"
|
|
402
|
-
"
|
|
412
|
+
"server.message.questionAnswered": "Your answer was sent to {provider}.",
|
|
413
|
+
"claudePlan.title": "Plan from {provider}",
|
|
414
|
+
"claudePlan.approve": "Approve plan",
|
|
415
|
+
"claudePlan.reject": "Reject plan",
|
|
416
|
+
"claudeQuestion.title": "Question from {provider}",
|
|
417
|
+
"claudeQuestion.send": "Send to {provider}",
|
|
418
|
+
"claudeQuestion.sent": "Answer sent to {provider}.",
|
|
419
|
+
"claudeQuestion.requireAll": "Please answer all questions before sending.",
|
|
420
|
+
"claudeQuestion.notePlaceholder": "Add a note (optional)",
|
|
421
|
+
"claudeAway.notifyOnly.notice": "Sync mode is OFF — please respond on the desktop. {provider} is waiting for input there.",
|
|
422
|
+
"server.message.approvalAccepted": "Approved. {provider} will continue.",
|
|
423
|
+
"server.message.approvalRejected": "Rejected. {provider} was told not to continue this action.",
|
|
424
|
+
"server.message.planImplemented": "{provider} was asked to start implementing from this plan.",
|
|
403
425
|
"server.message.planDismissed": "This plan prompt was closed and future reminders were suppressed.",
|
|
404
426
|
"server.confirm.planImplement": "Implementation will start from this plan.",
|
|
405
|
-
"server.confirm.approve": "This approval will be confirmed and
|
|
406
|
-
"server.confirm.reject": "This action will be rejected and
|
|
427
|
+
"server.confirm.approve": "This approval will be confirmed and {provider} will continue.",
|
|
428
|
+
"server.confirm.reject": "This action will be rejected and {provider} will be told not to continue.",
|
|
407
429
|
"server.pushTest.title": "viveworker test notification",
|
|
408
430
|
"server.pushTest.body": "Notifications are working on this device.",
|
|
409
431
|
"server.page.notFoundTitle": "Not found",
|
|
@@ -447,6 +469,7 @@ const translations = {
|
|
|
447
469
|
"cli.setup.caDownloadIp": "CA download (IP): {url}",
|
|
448
470
|
"cli.setup.webPushEnabled": "Web Push: enabled (HTTPS)",
|
|
449
471
|
"cli.setup.webPushDisabled": "Web Push: disabled",
|
|
472
|
+
"cli.setup.claudeHooksSkipped": "Claude hooks skipped (no ~/.claude directory detected). Install Claude Desktop and re-run `viveworker setup` to enable Claude integration.",
|
|
450
473
|
"cli.setup.completePending": "viveworker setup finished, but health has not responded yet.",
|
|
451
474
|
"cli.setup.caFlow.title": "Before opening viveworker on your device, install and trust the local root certificate if needed:",
|
|
452
475
|
"cli.setup.caFlow.step1": "1. Open the CA download URL or scan the QR code below on your device.",
|
|
@@ -527,6 +550,7 @@ const translations = {
|
|
|
527
550
|
},
|
|
528
551
|
ja: {
|
|
529
552
|
"common.codex": "Codex",
|
|
553
|
+
"common.claude": "Claude",
|
|
530
554
|
"common.appName": "viveworker",
|
|
531
555
|
"common.back": "戻る",
|
|
532
556
|
"common.next": "次へ",
|
|
@@ -588,12 +612,12 @@ const translations = {
|
|
|
588
612
|
"tab.timeline.description": "最近のスレッドにまたがる会話の更新と操作イベントです。",
|
|
589
613
|
"tab.diff.title": "差分",
|
|
590
614
|
"tab.diff.label": "差分",
|
|
591
|
-
"tab.diff.eyebrow": "
|
|
592
|
-
"tab.diff.description": "
|
|
615
|
+
"tab.diff.eyebrow": "コード変更",
|
|
616
|
+
"tab.diff.description": "AI デスクトップアプリのファイル変更を端末で確認します。",
|
|
593
617
|
"tab.code.title": "コード",
|
|
594
618
|
"tab.code.label": "コード",
|
|
595
|
-
"tab.code.eyebrow": "
|
|
596
|
-
"tab.code.description": "
|
|
619
|
+
"tab.code.eyebrow": "コード変更",
|
|
620
|
+
"tab.code.description": "AI デスクトップアプリのファイル変更を端末で確認します。",
|
|
597
621
|
"tab.completed.title": "完了",
|
|
598
622
|
"tab.completed.label": "完了",
|
|
599
623
|
"tab.completed.eyebrow": "履歴",
|
|
@@ -603,7 +627,7 @@ const translations = {
|
|
|
603
627
|
"tab.settings.eyebrow": "端末",
|
|
604
628
|
"tab.settings.description": "ペアリング、インストール、通知の設定です。",
|
|
605
629
|
"pair.copy":
|
|
606
|
-
"この端末をローカルの
|
|
630
|
+
"この端末をローカルの AI デスクトップセッションとペアリングして、承認、プラン、選択、完了をすぐ確認できるようにします。",
|
|
607
631
|
"pair.codeLabel": "ペアリングコード",
|
|
608
632
|
"pair.codePlaceholder": "ペアリングコードを入力",
|
|
609
633
|
"pair.connect": "この端末を接続",
|
|
@@ -634,7 +658,7 @@ const translations = {
|
|
|
634
658
|
"shell.subtitle.detail": "いまの流れを途切れさせずに、項目を確認して操作できます。",
|
|
635
659
|
"empty.pending": "いま対応が必要な項目はありません。新しい承認、プラン、選択がここに表示されます。",
|
|
636
660
|
"empty.timeline": "まだタイムライン項目はありません。新しい会話の更新がここに表示されます。",
|
|
637
|
-
"empty.diff": "
|
|
661
|
+
"empty.diff": "いま確認できるファイル変更はありません。",
|
|
638
662
|
"empty.completed": "完了履歴はまだありません。",
|
|
639
663
|
"empty.default": "いま表示できる項目はありません。",
|
|
640
664
|
"detail.selectTitle": "一覧から項目を選んでください",
|
|
@@ -648,7 +672,9 @@ const translations = {
|
|
|
648
672
|
"detail.filesTitle": "関連ファイル",
|
|
649
673
|
"detail.diffTitle": "差分",
|
|
650
674
|
"detail.diffUnavailable": "この変更の差分はまだ利用できません。対象ファイルのみ表示します。",
|
|
651
|
-
"detail.diffThread.copy": ({ count }) =>
|
|
675
|
+
"detail.diffThread.copy": ({ count }) => `このスレッドで変更があるファイルは ${count}件です。下でファイルごとに確認できます。`,
|
|
676
|
+
"detail.diffThread.copy.current": ({ count }) => `このスレッドで現在未ステージの変更があるファイルは ${count}件です。下でファイルごとに確認できます。`,
|
|
677
|
+
"detail.diffThread.copy.latest": ({ count }) => `このスレッドで最後に観測した変更があるファイルは ${count}件です。下でファイルごとに確認できます。`,
|
|
652
678
|
"detail.fileEvent.read": "このステップで確認したファイルです。",
|
|
653
679
|
"detail.fileEvent.write": "このステップで更新したファイルです。",
|
|
654
680
|
"detail.fileEvent.create": "このステップで作成したファイルです。",
|
|
@@ -659,10 +685,10 @@ const translations = {
|
|
|
659
685
|
"detail.detailUnavailable": "詳細は利用できません。",
|
|
660
686
|
"detail.pageProgress": ({ page, totalPages }) => `${page} / ${totalPages} ページ`,
|
|
661
687
|
"reply.eyebrow": "返信",
|
|
662
|
-
"reply.title": "
|
|
663
|
-
"reply.copy": "この完了結果を見ながら、同じ
|
|
688
|
+
"reply.title": "{provider} に返答する",
|
|
689
|
+
"reply.copy": "この完了結果を見ながら、同じ {provider} スレッドに新しいメッセージを送れます。",
|
|
664
690
|
"reply.fieldLabel": "メッセージ",
|
|
665
|
-
"reply.placeholder": "続きを依頼したり、結果の修正や別案を
|
|
691
|
+
"reply.placeholder": "続きを依頼したり、結果の修正や別案を {provider} に伝えます。",
|
|
666
692
|
"reply.imageLabel": "画像",
|
|
667
693
|
"reply.imageAdd": "画像を追加",
|
|
668
694
|
"reply.imageAddMore": "さらに画像を追加",
|
|
@@ -670,7 +696,7 @@ const translations = {
|
|
|
670
696
|
"reply.imageRemove": "削除",
|
|
671
697
|
"reply.imageHint": "この端末の画像を最大 {count} 枚まで添付して、メッセージと一緒に送れます。",
|
|
672
698
|
"reply.imageAttached": "添付した画像",
|
|
673
|
-
"reply.send": "
|
|
699
|
+
"reply.send": "{provider} に送信",
|
|
674
700
|
"reply.sendConfirm": "それでも送信",
|
|
675
701
|
"reply.sendAnother": "もう一度送る",
|
|
676
702
|
"reply.sendSending": "送信中...",
|
|
@@ -681,8 +707,8 @@ const translations = {
|
|
|
681
707
|
"reply.mode.off": "OFF",
|
|
682
708
|
"reply.mode.defaultHint": "通常のフォローアップとして送信します。",
|
|
683
709
|
"reply.mode.planHint": "次のターンを Plan モードで開始します。",
|
|
684
|
-
"reply.notice.sentDefault": "
|
|
685
|
-
"reply.notice.sentPlan": "
|
|
710
|
+
"reply.notice.sentDefault": "{provider} にメッセージを送信しました。",
|
|
711
|
+
"reply.notice.sentPlan": "{provider} に Plan モードでメッセージを送信しました。",
|
|
686
712
|
"reply.sentPreviewLabel": "送信した内容",
|
|
687
713
|
"reply.warning.title": "このスレッドには、すでに後続メッセージがあります。",
|
|
688
714
|
"reply.warning.copy": "先に最新のやり取りを確認するか、それでもよければこのまま送信してください。",
|
|
@@ -697,23 +723,23 @@ const translations = {
|
|
|
697
723
|
"choice.submit": "回答を送信",
|
|
698
724
|
"summary.completed": "完了結果と最後のメモを確認します。",
|
|
699
725
|
"summary.userMessage": "このメッセージをもう一度開いて文脈付きで確認します。",
|
|
700
|
-
"summary.assistantCommentary": "
|
|
701
|
-
"summary.assistantFinal": "このターンの
|
|
702
|
-
"summary.approval": "
|
|
703
|
-
"summary.plan": "
|
|
704
|
-
"summary.choice": "
|
|
726
|
+
"summary.assistantCommentary": "{provider} の最新の途中経過を確認します。",
|
|
727
|
+
"summary.assistantFinal": "このターンの {provider} の最終回答を確認します。",
|
|
728
|
+
"summary.approval": "{provider} がやろうとしていることを確認して、許可するか決めます。",
|
|
729
|
+
"summary.plan": "{provider} が実装を始める前に、提案されたプランを確認します。",
|
|
730
|
+
"summary.choice": "{provider} が先へ進むために必要な選択肢を選びます。",
|
|
705
731
|
"summary.fileEvent": "このステップで触れたファイルを確認します。",
|
|
706
|
-
"summary.diffThread": "
|
|
732
|
+
"summary.diffThread": "このスレッドのファイル変更を確認します。",
|
|
707
733
|
"summary.default": "項目を開いて詳細を確認します。",
|
|
708
734
|
"intent.approval": "このリクエストを承認するか拒否します。",
|
|
709
|
-
"intent.plan": "
|
|
710
|
-
"intent.choice": "
|
|
735
|
+
"intent.plan": "{provider} が続行する前にこのプランを確認します。",
|
|
736
|
+
"intent.choice": "{provider} が続行できるように回答を選びます。",
|
|
711
737
|
"intent.completed": "完了済みです。結果を確認できます。",
|
|
712
738
|
"intent.fileEvent": "このステップで触れたファイルを確認します。",
|
|
713
|
-
"intent.diffThread": "
|
|
739
|
+
"intent.diffThread": "このスレッドのファイル変更を確認します。",
|
|
714
740
|
"intent.userMessage": "このメッセージを開き直します。",
|
|
715
741
|
"intent.assistantCommentary": "最新の途中経過を確認します。",
|
|
716
|
-
"intent.assistantFinal": "このターンの
|
|
742
|
+
"intent.assistantFinal": "このターンの {provider} の最終回答を確認します。",
|
|
717
743
|
"timeline.allThreads": "すべて",
|
|
718
744
|
"timeline.unknownThread": "不明なスレッド",
|
|
719
745
|
"inbox.subtab.pending": "未対応",
|
|
@@ -745,7 +771,7 @@ const translations = {
|
|
|
745
771
|
"fileEvent.timeline.rename": ({ count }) => `ファイル名を変更 ${count}件`,
|
|
746
772
|
"diff.threadSummary": ({ count }) => `変更ファイル ${count}件`,
|
|
747
773
|
"diff.latestChange": "最終変更",
|
|
748
|
-
"diff.latestChangeFallback": "
|
|
774
|
+
"diff.latestChangeFallback": "このスレッドにファイル変更があります。",
|
|
749
775
|
"settings.intro": "この端末のペアリング、言語、インストール状況、Web Push の状態を確認できます。",
|
|
750
776
|
"settings.section.overview": "クイック確認",
|
|
751
777
|
"settings.section.notifications": "通知",
|
|
@@ -786,6 +812,13 @@ const translations = {
|
|
|
786
812
|
"settings.status.connected": "接続済み",
|
|
787
813
|
"settings.status.info": "情報",
|
|
788
814
|
"settings.notifications.title": "通知",
|
|
815
|
+
"settings.claudeAway.title": "Claude",
|
|
816
|
+
"settings.claudeAway.description": "ON にすると Claude のプラン承認・質問をペアリング端末と PC ブラウザ (プロンプトごとに自動で開きます) の両方から回答でき、先に回答した方が有効になります。OFF の間は Claude Desktop のネイティブ UI が通常通り表示され、ペアリング端末は通知のみになります。",
|
|
817
|
+
"settings.claudeAway.on": "ON",
|
|
818
|
+
"settings.claudeAway.off": "OFF",
|
|
819
|
+
"settings.awayMode.title": "同期モード",
|
|
820
|
+
"settings.awayMode.copy": "Claude のプラン承認・質問を PC ブラウザとペアリング端末の両方から回答できるようにします。先に回答した方が有効です。",
|
|
821
|
+
"settings.awayMode.codexNote": "Codex は設定不要です。承認や質問は PC とペアリング端末のどちらからでも操作できます。",
|
|
789
822
|
"settings.notifications.copy":
|
|
790
823
|
"viveworker がバックグラウンドでも、承認、プラン、質問、完了を確認しやすくします。",
|
|
791
824
|
"settings.notifications.serverDisabled": "サーバー側で Web Push がまだ有効化されていません。",
|
|
@@ -825,7 +858,7 @@ const translations = {
|
|
|
825
858
|
"settings.language.title": "言語",
|
|
826
859
|
"settings.language.copy": "この端末で viveworker を表示する言語を選びます。",
|
|
827
860
|
"settings.pairing.title": "ペアリング",
|
|
828
|
-
"settings.pairing.copy": "この端末はローカルの
|
|
861
|
+
"settings.pairing.copy": "この端末はローカルの AI デスクトップセッションとペアリングされています。",
|
|
829
862
|
"settings.pairing.connected": "ペアリング済み",
|
|
830
863
|
"settings.technical.title": "技術情報",
|
|
831
864
|
"settings.technical.copy": "この端末の接続状態や通知状態を確認できます。",
|
|
@@ -887,7 +920,7 @@ const translations = {
|
|
|
887
920
|
"error.choiceInputReadOnly": "この種類の入力は Mac で回答してください。",
|
|
888
921
|
"error.choiceInputAlreadyHandled": "この選択入力はすでに処理済みです。",
|
|
889
922
|
"error.mkcertRootCaNotFound": "mkcert の root CA ファイルが見つかりません。",
|
|
890
|
-
"server.fallback.codexTask": "
|
|
923
|
+
"server.fallback.codexTask": "{provider} task",
|
|
891
924
|
"server.title.approval": "要承認",
|
|
892
925
|
"server.title.complete": "完了",
|
|
893
926
|
"server.title.plan": "プラン確認",
|
|
@@ -909,22 +942,32 @@ const translations = {
|
|
|
909
942
|
"server.message.commandPrefix": ({ command }) => `Command: ${command}`,
|
|
910
943
|
"server.message.pathPrefix": ({ path }) => `Path: ${path}`,
|
|
911
944
|
"server.message.approveOnMac": "Mac で承認してください: この端末の通知は codex.app の鏡像です。",
|
|
912
|
-
"server.message.approvalNeededInCodex": "
|
|
945
|
+
"server.message.approvalNeededInCodex": "{provider} で承認が必要です。",
|
|
913
946
|
"server.message.extraApprovals": ({ count }) => `追加の承認: ${count}`,
|
|
914
947
|
"server.message.taskFinished": "タスクが完了しました。",
|
|
915
948
|
"server.message.turnAborted": "タスクを中断しました。",
|
|
916
949
|
"server.message.planReady": "プランの確認が必要です。",
|
|
917
|
-
"server.message.choiceSubmitted": "選択内容を
|
|
950
|
+
"server.message.choiceSubmitted": "選択内容を {provider} に送信しました。",
|
|
918
951
|
"server.message.choiceSubmittedTest": "テスト回答を受け取りました。",
|
|
919
952
|
"server.message.choiceSummarySubmitted": "選択内容を送信しました。",
|
|
920
953
|
"server.message.choiceSummaryReceivedTest": "テスト回答を受信しました。",
|
|
921
|
-
"server.message.
|
|
922
|
-
"
|
|
923
|
-
"
|
|
954
|
+
"server.message.questionAnswered": "回答を {provider} に送信しました。",
|
|
955
|
+
"claudePlan.title": "{provider} からのプラン",
|
|
956
|
+
"claudePlan.approve": "プランを承認",
|
|
957
|
+
"claudePlan.reject": "プランを却下",
|
|
958
|
+
"claudeQuestion.title": "{provider} からの質問",
|
|
959
|
+
"claudeQuestion.send": "{provider} に送信",
|
|
960
|
+
"claudeQuestion.sent": "回答を {provider} に送信しました。",
|
|
961
|
+
"claudeQuestion.requireAll": "送信前にすべての質問に回答してください。",
|
|
962
|
+
"claudeQuestion.notePlaceholder": "メモ (任意)",
|
|
963
|
+
"claudeAway.notifyOnly.notice": "同期モードは OFF です。PC で操作してください。{provider} は PC からの入力を待っています。",
|
|
964
|
+
"server.message.approvalAccepted": "承認しました。{provider} を続行します。",
|
|
965
|
+
"server.message.approvalRejected": "拒否しました。{provider} にこの操作を続けないよう伝えました。",
|
|
966
|
+
"server.message.planImplemented": "この plan から実装を開始するよう {provider} に伝えました。",
|
|
924
967
|
"server.message.planDismissed": "この Plan 確認を閉じ、再通知を抑止しました。",
|
|
925
968
|
"server.confirm.planImplement": "この plan から実装を開始します。",
|
|
926
|
-
"server.confirm.approve": "この承認を確定して
|
|
927
|
-
"server.confirm.reject": "この操作を拒否して
|
|
969
|
+
"server.confirm.approve": "この承認を確定して {provider} を続行します。",
|
|
970
|
+
"server.confirm.reject": "この操作を拒否して {provider} に続行しないよう伝えます。",
|
|
928
971
|
"server.pushTest.title": "viveworker テスト通知",
|
|
929
972
|
"server.pushTest.body": "この端末で通知が動作しています。",
|
|
930
973
|
"server.page.notFoundTitle": "見つかりません",
|
|
@@ -968,7 +1011,8 @@ const translations = {
|
|
|
968
1011
|
"cli.setup.caDownloadIp": "CA download (IP): {url}",
|
|
969
1012
|
"cli.setup.webPushEnabled": "Web Push: enabled (HTTPS)",
|
|
970
1013
|
"cli.setup.webPushDisabled": "Web Push: disabled",
|
|
971
|
-
"cli.setup.
|
|
1014
|
+
"cli.setup.claudeHooksSkipped": "Claude hooks はスキップしました(~/.claude ディレクトリが見つかりません)。Claude Desktop をインストール後に `viveworker setup` を再実行すると Claude 連携が有効になります。",
|
|
1015
|
+
"cli.setup.completePending": "viveworker の setup は完了しましたが、まだ health 応答は確認できていません。
|
|
972
1016
|
"cli.setup.caFlow.title": "端末で viveworker を開く前に、必要ならローカルの証明書をインストールしてください:",
|
|
973
1017
|
"cli.setup.caFlow.step1": "1. 下の CA download URL を開くか QR を読み取り、端末で rootCA.pem を取得します。",
|
|
974
1018
|
"cli.setup.caFlow.step2": "2. rootCA.pem をインストールし、必要なら端末側でその証明書を信頼します。",
|