viveworker 0.1.11 → 0.2.1
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 +794 -43
- 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 +95 -57
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",
|
|
@@ -66,11 +67,11 @@ const translations = {
|
|
|
66
67
|
"tab.diff.title": "Diff",
|
|
67
68
|
"tab.diff.label": "Diff",
|
|
68
69
|
"tab.diff.eyebrow": "Code changes",
|
|
69
|
-
"tab.diff.description": "Review file changes from
|
|
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
73
|
"tab.code.eyebrow": "Code changes",
|
|
73
|
-
"tab.code.description": "Review file changes from
|
|
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",
|
|
@@ -132,20 +133,20 @@ const translations = {
|
|
|
132
133
|
`This thread currently has ${count} ${count === 1 ? "unstaged changed file" : "unstaged changed files"}. Review each file below.`,
|
|
133
134
|
"detail.diffThread.copy.latest": ({ count }) =>
|
|
134
135
|
`This thread has ${count} ${count === 1 ? "latest observed file change" : "latest observed file changes"}. Review each file below.`,
|
|
135
|
-
"detail.fileEvent.read": "
|
|
136
|
-
"detail.fileEvent.write": "
|
|
137
|
-
"detail.fileEvent.create": "
|
|
138
|
-
"detail.fileEvent.delete": "
|
|
139
|
-
"detail.fileEvent.rename": "
|
|
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.",
|
|
140
141
|
"detail.turnAbortedNotice": "This task was interrupted.",
|
|
141
142
|
"detail.macOnlyChoice": "Please answer this type of input on the Mac.",
|
|
142
143
|
"detail.detailUnavailable": "Detail not available.",
|
|
143
144
|
"detail.pageProgress": ({ page, totalPages }) => `Page ${page} / ${totalPages}`,
|
|
144
145
|
"reply.eyebrow": "Reply",
|
|
145
146
|
"reply.title": "Send a follow-up",
|
|
146
|
-
"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.",
|
|
147
148
|
"reply.fieldLabel": "Message",
|
|
148
|
-
"reply.placeholder": "Ask
|
|
149
|
+
"reply.placeholder": "Ask {provider} to continue, refine the result, or try a different approach.",
|
|
149
150
|
"reply.imageLabel": "Image",
|
|
150
151
|
"reply.imageAdd": "Add images",
|
|
151
152
|
"reply.imageAddMore": "Add more images",
|
|
@@ -153,7 +154,7 @@ const translations = {
|
|
|
153
154
|
"reply.imageRemove": "Remove",
|
|
154
155
|
"reply.imageHint": "Attach up to {count} images from your device and send them together with your message.",
|
|
155
156
|
"reply.imageAttached": "Attached image",
|
|
156
|
-
"reply.send": "Send to
|
|
157
|
+
"reply.send": "Send to {provider}",
|
|
157
158
|
"reply.sendConfirm": "Send anyway",
|
|
158
159
|
"reply.sendAnother": "Send another message",
|
|
159
160
|
"reply.sendSending": "Sending...",
|
|
@@ -164,8 +165,8 @@ const translations = {
|
|
|
164
165
|
"reply.mode.off": "Off",
|
|
165
166
|
"reply.mode.defaultHint": "Send a normal follow-up message.",
|
|
166
167
|
"reply.mode.planHint": "Start the next turn in Plan mode.",
|
|
167
|
-
"reply.notice.sentDefault": "Your message was sent to
|
|
168
|
-
"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.",
|
|
169
170
|
"reply.sentPreviewLabel": "Sent message",
|
|
170
171
|
"reply.warning.title": "This thread already has newer messages.",
|
|
171
172
|
"reply.warning.copy": "Review the latest thread activity first, or send this message anyway if you still want to continue from here.",
|
|
@@ -180,23 +181,23 @@ const translations = {
|
|
|
180
181
|
"choice.submit": "Submit Answers",
|
|
181
182
|
"summary.completed": "Read the finished result and any final notes.",
|
|
182
183
|
"summary.userMessage": "Open the message again and read it in context.",
|
|
183
|
-
"summary.assistantCommentary": "Read
|
|
184
|
-
"summary.assistantFinal": "Read
|
|
185
|
-
"summary.approval": "Review what
|
|
186
|
-
"summary.plan": "Check the proposed plan before
|
|
187
|
-
"summary.choice": "Pick the option
|
|
188
|
-
"summary.fileEvent": "Review the files
|
|
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.",
|
|
189
190
|
"summary.diffThread": "Review the file changes for this thread.",
|
|
190
191
|
"summary.default": "Open the item to review its details.",
|
|
191
192
|
"intent.approval": "Approve or reject this request.",
|
|
192
|
-
"intent.plan": "Review this plan before
|
|
193
|
-
"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.",
|
|
194
195
|
"intent.completed": "Finished. Open to review the result.",
|
|
195
196
|
"intent.fileEvent": "Review the files involved in this step.",
|
|
196
197
|
"intent.diffThread": "Review the file changes for this thread.",
|
|
197
198
|
"intent.userMessage": "Open this message again.",
|
|
198
199
|
"intent.assistantCommentary": "Read the latest working update.",
|
|
199
|
-
"intent.assistantFinal": "Read
|
|
200
|
+
"intent.assistantFinal": "Read {provider}'s final reply for this turn.",
|
|
200
201
|
"timeline.allThreads": "All",
|
|
201
202
|
"timeline.unknownThread": "Unknown thread",
|
|
202
203
|
"inbox.subtab.pending": "Pending",
|
|
@@ -269,6 +270,13 @@ const translations = {
|
|
|
269
270
|
"settings.status.connected": "Connected",
|
|
270
271
|
"settings.status.info": "Info",
|
|
271
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.",
|
|
272
280
|
"settings.notifications.copy":
|
|
273
281
|
"Keep approvals, plans, questions, and completions within reach even when viveworker is in the background.",
|
|
274
282
|
"settings.notifications.serverDisabled": "Web Push is not enabled on the server yet.",
|
|
@@ -308,7 +316,7 @@ const translations = {
|
|
|
308
316
|
"settings.language.title": "Language",
|
|
309
317
|
"settings.language.copy": "Choose how this device should display viveworker.",
|
|
310
318
|
"settings.pairing.title": "Pairing",
|
|
311
|
-
"settings.pairing.copy": "This device is paired with your local
|
|
319
|
+
"settings.pairing.copy": "This device is paired with your local AI desktop session.",
|
|
312
320
|
"settings.pairing.connected": "Paired",
|
|
313
321
|
"settings.technical.title": "Technical details",
|
|
314
322
|
"settings.technical.copy": "Connection and notification diagnostics for this device.",
|
|
@@ -370,7 +378,7 @@ const translations = {
|
|
|
370
378
|
"error.choiceInputReadOnly": "Please answer this type of input on the Mac.",
|
|
371
379
|
"error.choiceInputAlreadyHandled": "This choice request was already handled.",
|
|
372
380
|
"error.mkcertRootCaNotFound": "The mkcert root CA file could not be found.",
|
|
373
|
-
"server.fallback.codexTask": "
|
|
381
|
+
"server.fallback.codexTask": "{provider} task",
|
|
374
382
|
"server.title.approval": "Approval",
|
|
375
383
|
"server.title.complete": "Completed",
|
|
376
384
|
"server.title.plan": "Plan",
|
|
@@ -392,22 +400,32 @@ const translations = {
|
|
|
392
400
|
"server.message.commandPrefix": ({ command }) => `Command: ${command}`,
|
|
393
401
|
"server.message.pathPrefix": ({ path }) => `Path: ${path}`,
|
|
394
402
|
"server.message.approveOnMac": "Approve on Mac only: this device alert mirrors codex.app.",
|
|
395
|
-
"server.message.approvalNeededInCodex": "Approval needed in
|
|
403
|
+
"server.message.approvalNeededInCodex": "Approval needed in {provider}.",
|
|
396
404
|
"server.message.extraApprovals": ({ count }) => `Extra approvals: ${count}`,
|
|
397
405
|
"server.message.taskFinished": "Task finished.",
|
|
398
406
|
"server.message.turnAborted": "This task was interrupted.",
|
|
399
407
|
"server.message.planReady": "Plan is ready.",
|
|
400
|
-
"server.message.choiceSubmitted": "The selected answers were sent to
|
|
408
|
+
"server.message.choiceSubmitted": "The selected answers were sent to {provider}.",
|
|
401
409
|
"server.message.choiceSubmittedTest": "The test answers were received.",
|
|
402
410
|
"server.message.choiceSummarySubmitted": "Selected answers sent.",
|
|
403
411
|
"server.message.choiceSummaryReceivedTest": "Test answers received.",
|
|
404
|
-
"server.message.
|
|
405
|
-
"
|
|
406
|
-
"
|
|
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.",
|
|
407
425
|
"server.message.planDismissed": "This plan prompt was closed and future reminders were suppressed.",
|
|
408
426
|
"server.confirm.planImplement": "Implementation will start from this plan.",
|
|
409
|
-
"server.confirm.approve": "This approval will be confirmed and
|
|
410
|
-
"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.",
|
|
411
429
|
"server.pushTest.title": "viveworker test notification",
|
|
412
430
|
"server.pushTest.body": "Notifications are working on this device.",
|
|
413
431
|
"server.page.notFoundTitle": "Not found",
|
|
@@ -451,6 +469,7 @@ const translations = {
|
|
|
451
469
|
"cli.setup.caDownloadIp": "CA download (IP): {url}",
|
|
452
470
|
"cli.setup.webPushEnabled": "Web Push: enabled (HTTPS)",
|
|
453
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.",
|
|
454
473
|
"cli.setup.completePending": "viveworker setup finished, but health has not responded yet.",
|
|
455
474
|
"cli.setup.caFlow.title": "Before opening viveworker on your device, install and trust the local root certificate if needed:",
|
|
456
475
|
"cli.setup.caFlow.step1": "1. Open the CA download URL or scan the QR code below on your device.",
|
|
@@ -531,6 +550,7 @@ const translations = {
|
|
|
531
550
|
},
|
|
532
551
|
ja: {
|
|
533
552
|
"common.codex": "Codex",
|
|
553
|
+
"common.claude": "Claude",
|
|
534
554
|
"common.appName": "viveworker",
|
|
535
555
|
"common.back": "戻る",
|
|
536
556
|
"common.next": "次へ",
|
|
@@ -593,11 +613,11 @@ const translations = {
|
|
|
593
613
|
"tab.diff.title": "差分",
|
|
594
614
|
"tab.diff.label": "差分",
|
|
595
615
|
"tab.diff.eyebrow": "コード変更",
|
|
596
|
-
"tab.diff.description": "
|
|
616
|
+
"tab.diff.description": "AI デスクトップアプリのファイル変更を端末で確認します。",
|
|
597
617
|
"tab.code.title": "コード",
|
|
598
618
|
"tab.code.label": "コード",
|
|
599
619
|
"tab.code.eyebrow": "コード変更",
|
|
600
|
-
"tab.code.description": "
|
|
620
|
+
"tab.code.description": "AI デスクトップアプリのファイル変更を端末で確認します。",
|
|
601
621
|
"tab.completed.title": "完了",
|
|
602
622
|
"tab.completed.label": "完了",
|
|
603
623
|
"tab.completed.eyebrow": "履歴",
|
|
@@ -607,7 +627,7 @@ const translations = {
|
|
|
607
627
|
"tab.settings.eyebrow": "端末",
|
|
608
628
|
"tab.settings.description": "ペアリング、インストール、通知の設定です。",
|
|
609
629
|
"pair.copy":
|
|
610
|
-
"この端末をローカルの
|
|
630
|
+
"この端末をローカルの AI デスクトップセッションとペアリングして、承認、プラン、選択、完了をすぐ確認できるようにします。",
|
|
611
631
|
"pair.codeLabel": "ペアリングコード",
|
|
612
632
|
"pair.codePlaceholder": "ペアリングコードを入力",
|
|
613
633
|
"pair.connect": "この端末を接続",
|
|
@@ -665,10 +685,10 @@ const translations = {
|
|
|
665
685
|
"detail.detailUnavailable": "詳細は利用できません。",
|
|
666
686
|
"detail.pageProgress": ({ page, totalPages }) => `${page} / ${totalPages} ページ`,
|
|
667
687
|
"reply.eyebrow": "返信",
|
|
668
|
-
"reply.title": "
|
|
669
|
-
"reply.copy": "この完了結果を見ながら、同じ
|
|
688
|
+
"reply.title": "{provider} に返答する",
|
|
689
|
+
"reply.copy": "この完了結果を見ながら、同じ {provider} スレッドに新しいメッセージを送れます。",
|
|
670
690
|
"reply.fieldLabel": "メッセージ",
|
|
671
|
-
"reply.placeholder": "続きを依頼したり、結果の修正や別案を
|
|
691
|
+
"reply.placeholder": "続きを依頼したり、結果の修正や別案を {provider} に伝えます。",
|
|
672
692
|
"reply.imageLabel": "画像",
|
|
673
693
|
"reply.imageAdd": "画像を追加",
|
|
674
694
|
"reply.imageAddMore": "さらに画像を追加",
|
|
@@ -676,7 +696,7 @@ const translations = {
|
|
|
676
696
|
"reply.imageRemove": "削除",
|
|
677
697
|
"reply.imageHint": "この端末の画像を最大 {count} 枚まで添付して、メッセージと一緒に送れます。",
|
|
678
698
|
"reply.imageAttached": "添付した画像",
|
|
679
|
-
"reply.send": "
|
|
699
|
+
"reply.send": "{provider} に送信",
|
|
680
700
|
"reply.sendConfirm": "それでも送信",
|
|
681
701
|
"reply.sendAnother": "もう一度送る",
|
|
682
702
|
"reply.sendSending": "送信中...",
|
|
@@ -687,8 +707,8 @@ const translations = {
|
|
|
687
707
|
"reply.mode.off": "OFF",
|
|
688
708
|
"reply.mode.defaultHint": "通常のフォローアップとして送信します。",
|
|
689
709
|
"reply.mode.planHint": "次のターンを Plan モードで開始します。",
|
|
690
|
-
"reply.notice.sentDefault": "
|
|
691
|
-
"reply.notice.sentPlan": "
|
|
710
|
+
"reply.notice.sentDefault": "{provider} にメッセージを送信しました。",
|
|
711
|
+
"reply.notice.sentPlan": "{provider} に Plan モードでメッセージを送信しました。",
|
|
692
712
|
"reply.sentPreviewLabel": "送信した内容",
|
|
693
713
|
"reply.warning.title": "このスレッドには、すでに後続メッセージがあります。",
|
|
694
714
|
"reply.warning.copy": "先に最新のやり取りを確認するか、それでもよければこのまま送信してください。",
|
|
@@ -703,23 +723,23 @@ const translations = {
|
|
|
703
723
|
"choice.submit": "回答を送信",
|
|
704
724
|
"summary.completed": "完了結果と最後のメモを確認します。",
|
|
705
725
|
"summary.userMessage": "このメッセージをもう一度開いて文脈付きで確認します。",
|
|
706
|
-
"summary.assistantCommentary": "
|
|
707
|
-
"summary.assistantFinal": "このターンの
|
|
708
|
-
"summary.approval": "
|
|
709
|
-
"summary.plan": "
|
|
710
|
-
"summary.choice": "
|
|
726
|
+
"summary.assistantCommentary": "{provider} の最新の途中経過を確認します。",
|
|
727
|
+
"summary.assistantFinal": "このターンの {provider} の最終回答を確認します。",
|
|
728
|
+
"summary.approval": "{provider} がやろうとしていることを確認して、許可するか決めます。",
|
|
729
|
+
"summary.plan": "{provider} が実装を始める前に、提案されたプランを確認します。",
|
|
730
|
+
"summary.choice": "{provider} が先へ進むために必要な選択肢を選びます。",
|
|
711
731
|
"summary.fileEvent": "このステップで触れたファイルを確認します。",
|
|
712
732
|
"summary.diffThread": "このスレッドのファイル変更を確認します。",
|
|
713
733
|
"summary.default": "項目を開いて詳細を確認します。",
|
|
714
734
|
"intent.approval": "このリクエストを承認するか拒否します。",
|
|
715
|
-
"intent.plan": "
|
|
716
|
-
"intent.choice": "
|
|
735
|
+
"intent.plan": "{provider} が続行する前にこのプランを確認します。",
|
|
736
|
+
"intent.choice": "{provider} が続行できるように回答を選びます。",
|
|
717
737
|
"intent.completed": "完了済みです。結果を確認できます。",
|
|
718
738
|
"intent.fileEvent": "このステップで触れたファイルを確認します。",
|
|
719
739
|
"intent.diffThread": "このスレッドのファイル変更を確認します。",
|
|
720
740
|
"intent.userMessage": "このメッセージを開き直します。",
|
|
721
741
|
"intent.assistantCommentary": "最新の途中経過を確認します。",
|
|
722
|
-
"intent.assistantFinal": "このターンの
|
|
742
|
+
"intent.assistantFinal": "このターンの {provider} の最終回答を確認します。",
|
|
723
743
|
"timeline.allThreads": "すべて",
|
|
724
744
|
"timeline.unknownThread": "不明なスレッド",
|
|
725
745
|
"inbox.subtab.pending": "未対応",
|
|
@@ -792,6 +812,13 @@ const translations = {
|
|
|
792
812
|
"settings.status.connected": "接続済み",
|
|
793
813
|
"settings.status.info": "情報",
|
|
794
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 とペアリング端末のどちらからでも操作できます。",
|
|
795
822
|
"settings.notifications.copy":
|
|
796
823
|
"viveworker がバックグラウンドでも、承認、プラン、質問、完了を確認しやすくします。",
|
|
797
824
|
"settings.notifications.serverDisabled": "サーバー側で Web Push がまだ有効化されていません。",
|
|
@@ -831,7 +858,7 @@ const translations = {
|
|
|
831
858
|
"settings.language.title": "言語",
|
|
832
859
|
"settings.language.copy": "この端末で viveworker を表示する言語を選びます。",
|
|
833
860
|
"settings.pairing.title": "ペアリング",
|
|
834
|
-
"settings.pairing.copy": "この端末はローカルの
|
|
861
|
+
"settings.pairing.copy": "この端末はローカルの AI デスクトップセッションとペアリングされています。",
|
|
835
862
|
"settings.pairing.connected": "ペアリング済み",
|
|
836
863
|
"settings.technical.title": "技術情報",
|
|
837
864
|
"settings.technical.copy": "この端末の接続状態や通知状態を確認できます。",
|
|
@@ -893,7 +920,7 @@ const translations = {
|
|
|
893
920
|
"error.choiceInputReadOnly": "この種類の入力は Mac で回答してください。",
|
|
894
921
|
"error.choiceInputAlreadyHandled": "この選択入力はすでに処理済みです。",
|
|
895
922
|
"error.mkcertRootCaNotFound": "mkcert の root CA ファイルが見つかりません。",
|
|
896
|
-
"server.fallback.codexTask": "
|
|
923
|
+
"server.fallback.codexTask": "{provider} task",
|
|
897
924
|
"server.title.approval": "要承認",
|
|
898
925
|
"server.title.complete": "完了",
|
|
899
926
|
"server.title.plan": "プラン確認",
|
|
@@ -915,22 +942,32 @@ const translations = {
|
|
|
915
942
|
"server.message.commandPrefix": ({ command }) => `Command: ${command}`,
|
|
916
943
|
"server.message.pathPrefix": ({ path }) => `Path: ${path}`,
|
|
917
944
|
"server.message.approveOnMac": "Mac で承認してください: この端末の通知は codex.app の鏡像です。",
|
|
918
|
-
"server.message.approvalNeededInCodex": "
|
|
945
|
+
"server.message.approvalNeededInCodex": "{provider} で承認が必要です。",
|
|
919
946
|
"server.message.extraApprovals": ({ count }) => `追加の承認: ${count}`,
|
|
920
947
|
"server.message.taskFinished": "タスクが完了しました。",
|
|
921
948
|
"server.message.turnAborted": "タスクを中断しました。",
|
|
922
949
|
"server.message.planReady": "プランの確認が必要です。",
|
|
923
|
-
"server.message.choiceSubmitted": "選択内容を
|
|
950
|
+
"server.message.choiceSubmitted": "選択内容を {provider} に送信しました。",
|
|
924
951
|
"server.message.choiceSubmittedTest": "テスト回答を受け取りました。",
|
|
925
952
|
"server.message.choiceSummarySubmitted": "選択内容を送信しました。",
|
|
926
953
|
"server.message.choiceSummaryReceivedTest": "テスト回答を受信しました。",
|
|
927
|
-
"server.message.
|
|
928
|
-
"
|
|
929
|
-
"
|
|
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} に伝えました。",
|
|
930
967
|
"server.message.planDismissed": "この Plan 確認を閉じ、再通知を抑止しました。",
|
|
931
968
|
"server.confirm.planImplement": "この plan から実装を開始します。",
|
|
932
|
-
"server.confirm.approve": "この承認を確定して
|
|
933
|
-
"server.confirm.reject": "この操作を拒否して
|
|
969
|
+
"server.confirm.approve": "この承認を確定して {provider} を続行します。",
|
|
970
|
+
"server.confirm.reject": "この操作を拒否して {provider} に続行しないよう伝えます。",
|
|
934
971
|
"server.pushTest.title": "viveworker テスト通知",
|
|
935
972
|
"server.pushTest.body": "この端末で通知が動作しています。",
|
|
936
973
|
"server.page.notFoundTitle": "見つかりません",
|
|
@@ -974,6 +1011,7 @@ const translations = {
|
|
|
974
1011
|
"cli.setup.caDownloadIp": "CA download (IP): {url}",
|
|
975
1012
|
"cli.setup.webPushEnabled": "Web Push: enabled (HTTPS)",
|
|
976
1013
|
"cli.setup.webPushDisabled": "Web Push: disabled",
|
|
1014
|
+
"cli.setup.claudeHooksSkipped": "Claude hooks はスキップしました(~/.claude ディレクトリが見つかりません)。Claude Desktop をインストール後に `viveworker setup` を再実行すると Claude 連携が有効になります。",
|
|
977
1015
|
"cli.setup.completePending": "viveworker の setup は完了しましたが、まだ health 応答は確認できていません。",
|
|
978
1016
|
"cli.setup.caFlow.title": "端末で viveworker を開く前に、必要ならローカルの証明書をインストールしてください:",
|
|
979
1017
|
"cli.setup.caFlow.step1": "1. 下の CA download URL を開くか QR を読み取り、端末で rootCA.pem を取得します。",
|