viveworker 0.8.1 → 0.8.3

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/web/build-id.js CHANGED
@@ -1 +1 @@
1
- export const APP_BUILD_ID = "20260430-mcp-control-plane";
1
+ export const APP_BUILD_ID = "20260509-remote-lan-relay-guard";
package/web/i18n.js CHANGED
@@ -48,6 +48,7 @@ const translations = {
48
48
  "common.choice": "Choice",
49
49
  "common.completion": "Completed",
50
50
  "common.fileEvent": "Files",
51
+ "common.commandEvent": "Command",
51
52
  "common.task": "Task",
52
53
  "common.approval": "Approval",
53
54
  "common.plan": "Plan",
@@ -144,6 +145,9 @@ const translations = {
144
145
  "detail.selectTitle": "Choose something from the list",
145
146
  "detail.selectCopy": "Pending approvals, plans, choices, and completed results will appear here.",
146
147
  "detail.loadingCopy": "Opening the detail view...",
148
+ "detail.loadFailedTitle": "Could not open the detail view",
149
+ "detail.loadFailedCopy": "The connection took too long or the item changed. You can retry without leaving this screen.",
150
+ "detail.loadRetry": "Retry",
147
151
  "detail.approvalRequested": "Approval requested.",
148
152
  "detail.planReady": "Plan is ready.",
149
153
  "detail.previousMessage": "Previous message",
@@ -186,10 +190,13 @@ const translations = {
186
190
  "detail.diffThread.copy.latest": ({ count }) =>
187
191
  `This thread has ${count} ${count === 1 ? "latest observed file change" : "latest observed file changes"}. Review each file below.`,
188
192
  "detail.fileEvent.read": "{provider} checked these files in this step.",
193
+ "detail.fileEvent.search": "{provider} searched in this step.",
194
+ "detail.fileEvent.command": "{provider} ran this command in this step.",
189
195
  "detail.fileEvent.write": "{provider} updated these files in this step.",
190
196
  "detail.fileEvent.create": "{provider} created these files in this step.",
191
197
  "detail.fileEvent.delete": "{provider} deleted these files in this step.",
192
198
  "detail.fileEvent.rename": "{provider} renamed these files in this step.",
199
+ "detail.commandEvent.copy": "{provider} ran this command in this step.",
193
200
  "detail.turnAbortedNotice": "This task was interrupted.",
194
201
  "detail.macOnlyChoice": "Please answer this type of input on the Mac.",
195
202
  "detail.detailUnavailable": "Detail not available.",
@@ -248,6 +255,7 @@ const translations = {
248
255
  "summary.plan": "Check the proposed plan before {provider} starts implementing it.",
249
256
  "summary.choice": "Pick the option {provider} needs to continue.",
250
257
  "summary.fileEvent": "Review the files {provider} checked or updated in this step.",
258
+ "summary.commandEvent": "Review the command {provider} ran in this step.",
251
259
  "summary.diffThread": "Review the file changes for this thread.",
252
260
  "summary.default": "Open the item to review its details.",
253
261
  "intent.approval": "Approve or reject this request.",
@@ -255,6 +263,7 @@ const translations = {
255
263
  "intent.choice": "Choose an answer so {provider} can continue.",
256
264
  "intent.completed": "Finished. Open to review the result.",
257
265
  "intent.fileEvent": "Review the files involved in this step.",
266
+ "intent.commandEvent": "Review the command that ran in this step.",
258
267
  "intent.diffThread": "Review the file changes for this thread.",
259
268
  "intent.ambientSuggestions": "Review suggested next steps and copy a prompt if you want to try one.",
260
269
  "intent.userMessage": "Open this message again.",
@@ -277,6 +286,7 @@ const translations = {
277
286
  "timeline.kindFilter.messages": "Messages",
278
287
  "timeline.kindFilter.suggestions": "Suggested next steps",
279
288
  "timeline.kindFilter.files": "Files",
289
+ "timeline.kindFilter.commands": "Commands",
280
290
  "timeline.kindFilter.approvals": "Approvals",
281
291
  "timeline.kindFilter.plans": "Plans",
282
292
  "timeline.kindFilter.choices": "Choices",
@@ -289,11 +299,15 @@ const translations = {
289
299
  "timeline.kindFilter.a2aRequests": "Task Requests",
290
300
  "timeline.kindFilter.a2aResults": "Task Results",
291
301
  "fileEvent.read": "Checked files",
302
+ "fileEvent.search": "Searched",
303
+ "fileEvent.command": "Ran command",
292
304
  "fileEvent.write": "Updated files",
293
305
  "fileEvent.create": "Created files",
294
306
  "fileEvent.delete": "Deleted files",
295
307
  "fileEvent.rename": "Renamed files",
296
308
  "fileEvent.timeline.read": ({ count }) => `Checked ${count} ${count === 1 ? "file" : "files"}`,
309
+ "fileEvent.timeline.search": ({ count }) => count > 0 ? `Searched ${count} ${count === 1 ? "path" : "paths"}` : "Searched",
310
+ "fileEvent.timeline.command": "Ran command",
297
311
  "fileEvent.timeline.write": ({ count }) => `Updated ${count} ${count === 1 ? "file" : "files"}`,
298
312
  "fileEvent.timeline.create": ({ count }) => `Created ${count} ${count === 1 ? "file" : "files"}`,
299
313
  "fileEvent.timeline.delete": ({ count }) => `Deleted ${count} ${count === 1 ? "file" : "files"}`,
@@ -449,7 +463,7 @@ const translations = {
449
463
  "settings.row.defaultLanguage": "Setup default",
450
464
  "settings.moltbook.title": "Moltbook",
451
465
  "settings.moltbook.subtitle": "Auto-scout & notifications",
452
- "settings.moltbook.copy": "View your daily auto-scout posting status and quota.",
466
+ "settings.moltbook.copy": "View incoming reply drafts, feed scouting, and today's posting quota.",
453
467
  "settings.moltbook.unavailable": "Moltbook is not configured.",
454
468
  "settings.row.moltbookAccount": "Profile",
455
469
  "settings.row.moltbookQuota": "Replies today",
@@ -470,6 +484,9 @@ const translations = {
470
484
  "moltbook.draft.titleLabel": "Title",
471
485
  "moltbook.draft.approvePost": "Approve & publish",
472
486
  "moltbook.draft.approveReply": "Approve & post",
487
+ "moltbook.draft.deny": "Deny",
488
+ "moltbook.draft.submittingApprove": "Publishing...",
489
+ "moltbook.draft.submittingDeny": "Denying...",
473
490
  "moltbook.draft.editHint": "Edit if needed, then approve to publish or deny to skip.",
474
491
  "moltbook.draft.resolved": "This draft has already been resolved.",
475
492
  "moltbook.draft.greetMorning": "Good morning! Share yesterday's highlights?",
@@ -573,6 +590,14 @@ const translations = {
573
590
  "a2a.task.deny": "Deny",
574
591
  "a2a.task.editHint": "Review the task request, then approve to execute or deny to reject.",
575
592
  "a2a.task.executor": "Execute with",
593
+ "a2a.task.paidDeliverable": "Paid deliverable",
594
+ "a2a.task.requestedTier": "Requested tier",
595
+ "a2a.task.requestedExecutor": "Requested executor",
596
+ "a2a.task.requestedModel": "Requested model",
597
+ "a2a.task.deliverableType": "Deliverable",
598
+ "a2a.task.price": "Price",
599
+ "a2a.task.payTo": "Pay to",
600
+ "a2a.task.unlockUrl": "Unlock URL",
576
601
  "a2a.executor.codex": "Codex",
577
602
  "a2a.executor.claude": "Claude",
578
603
  "settings.a2aExecutor.title": "Task Executor",
@@ -709,6 +734,7 @@ const translations = {
709
734
  "Try reopening the latest HTTPS URL in your browser, then re-add the Home Screen app if needed.",
710
735
  "error.remotePairingNeedsLanRefresh": "Remote connection needs a one-time refresh. Open viveworker once on the same Wi-Fi as your PC, then try off-LAN again.",
711
736
  "error.remotePairingUnavailable": "Remote connection is off or the PC is not reachable. Turn on Remote connection on the same Wi-Fi, then try again.",
737
+ "error.requestTimedOut": "The request took too long. Please try again.",
712
738
  "error.webPushDisabled": "Web Push is not enabled on the server.",
713
739
  "error.notificationsRequireHttps": "Notifications require HTTPS.",
714
740
  "error.pushUnsupported": "This browser does not support Web Push.",
@@ -757,7 +783,9 @@ const translations = {
757
783
  "server.title.userMessage": "User",
758
784
  "server.title.assistantCommentary": "Update",
759
785
  "server.title.assistantFinal": "Final reply",
786
+ "server.title.activityStatus": "Working",
760
787
  "server.title.ambientSuggestions": "Suggested next steps",
788
+ "server.title.threadShare": "Thread Share",
761
789
  "server.action.review": "Review",
762
790
  "server.action.detail": "Detail",
763
791
  "server.action.select": "Choose",
@@ -767,6 +795,7 @@ const translations = {
767
795
  "server.action.implement": "Implement",
768
796
  "server.message.commandApprovalNeeded": "Command approval needed.",
769
797
  "server.message.commandLabel": "Command",
798
+ "server.message.toolLabel": "Tool",
770
799
  "server.message.filesLabel": "Files",
771
800
  "server.message.diffSummaryLabel": "Diff summary:",
772
801
  "server.message.autoPilotTrustedReadApproved": "Auto Pilot approved this trusted read command.",
@@ -789,6 +818,13 @@ const translations = {
789
818
  "server.message.choiceSummarySubmitted": "Selected answers sent.",
790
819
  "server.message.choiceSummaryReceivedTest": "Test answers received.",
791
820
  "server.message.questionAnswered": "Your answer was sent to {provider}.",
821
+ "server.activity.thinking": "Thinking...",
822
+ "server.activity.reading": "Reading files...",
823
+ "server.activity.searching": "Searching...",
824
+ "server.activity.editing": "Editing...",
825
+ "server.activity.runningCommand": "Running command...",
826
+ "server.activity.awaitingApproval": "Waiting for approval...",
827
+ "server.activity.working": "Working...",
792
828
  "claudePlan.title": "Plan from {provider}",
793
829
  "claudePlan.approve": "Approve plan",
794
830
  "claudePlan.reject": "Reject plan",
@@ -809,6 +845,35 @@ const translations = {
809
845
  "server.confirm.reject": "This action will be rejected and {provider} will be told not to continue.",
810
846
  "server.pushTest.title": "viveworker test notification",
811
847
  "server.pushTest.body": "Notifications are working on this device.",
848
+ "server.push.threadShare.title": ({ source, target }) => `Thread Share: ${source} → ${target}`,
849
+ "server.push.threadShareFallback.title": "Thread Share could not reach the target",
850
+ "server.push.threadShareFallback.body": ({ target }) => `Codex thread "${target}" is not connected. The shared content was saved to the inbox.`,
851
+ "server.push.mcpNotify.title": "MCP notification",
852
+ "server.push.mcpQuestion.title": "Question from MCP",
853
+ "server.push.mcpApproval.title": "Approval from MCP",
854
+ "server.push.mcpShareFile.title": "File Share approval",
855
+ "server.push.mcpShareFile.body": ({ path, size }) => `An MCP client wants to upload ${path}${size ? ` (${size})` : ""} to File Share.`,
856
+ "server.push.mcpA2aTask.title": ({ target }) => `Send A2A task to ${target}`,
857
+ "server.push.mcpA2aTask.body": ({ target }) => `An MCP client wants to send a task to ${target}.`,
858
+ "server.push.paymentApproval.title": ({ amount }) => amount ? `Payment approval — ${amount} USDC` : "Payment approval",
859
+ "server.push.hazbasePayment.title": ({ amount }) => amount ? `Wallet payment approval — ${amount} USDC` : "Wallet payment approval",
860
+ "server.push.paymentApproval.body": ({ amount, network, resource }) =>
861
+ [`Amount: ${amount}`, network ? `Network: ${network}` : "", resource ? `Resource: ${resource}` : ""].filter(Boolean).join("\n"),
862
+ "server.push.moltbookReply.title": "Moltbook reply suggestion",
863
+ "server.push.moltbookReply.body": "A reply suggestion is ready in Moltbook.",
864
+ "server.push.moltbookDraft.replyTitle": ({ postTitle }) => postTitle ? `Moltbook reply draft: ${postTitle}` : "Moltbook reply draft",
865
+ "server.push.moltbookDraft.originalTitle": "Moltbook post draft",
866
+ "server.push.moltbookDraft.originalMorning": "Good morning. Share yesterday's highlights?",
867
+ "server.push.moltbookDraft.originalNoon": "Nice progress. Share your morning work?",
868
+ "server.push.moltbookDraft.originalEvening": "Great work today. Share what you built?",
869
+ "server.push.moltbookDraft.failedTitle": "Moltbook post failed",
870
+ "server.push.moltbookDraft.postedTitle": "Posted to Moltbook",
871
+ "server.push.moltbookDraft.postedReplyBody": ({ postTitle }) => `Reply posted${postTitle ? `: ${postTitle}` : ""}`,
872
+ "server.push.moltbookDraft.postedOriginalBody": ({ title }) => `Post published${title ? `: ${title}` : ""}`,
873
+ "server.push.a2aTask.title": "Incoming A2A task request",
874
+ "server.push.a2aRelayTask.title": "A2A task via relay",
875
+ "server.push.a2aResult.completedTitle": ({ instruction }) => `A2A completed: ${instruction}`,
876
+ "server.push.a2aResult.failedTitle": ({ instruction }) => `A2A failed: ${instruction}`,
812
877
  "server.page.notFoundTitle": "Not found",
813
878
  "server.page.notFoundBody": "This approval link does not exist.",
814
879
  "server.page.notFoundHint": "You can close this page safely.",
@@ -1058,6 +1123,7 @@ const translations = {
1058
1123
  "common.choice": "選択",
1059
1124
  "common.completion": "完了",
1060
1125
  "common.fileEvent": "ファイル",
1126
+ "common.commandEvent": "コマンド実行",
1061
1127
  "common.task": "タスク",
1062
1128
  "common.approval": "承認",
1063
1129
  "common.plan": "プラン",
@@ -1153,6 +1219,9 @@ const translations = {
1153
1219
  "detail.selectTitle": "一覧から項目を選んでください",
1154
1220
  "detail.selectCopy": "未対応の承認、プラン、選択、完了結果がここに表示されます。",
1155
1221
  "detail.loadingCopy": "詳細を開いています...",
1222
+ "detail.loadFailedTitle": "詳細を開けませんでした",
1223
+ "detail.loadFailedCopy": "接続に時間がかかっているか、項目の状態が変わりました。この画面のまま再試行できます。",
1224
+ "detail.loadRetry": "再試行",
1156
1225
  "detail.approvalRequested": "承認が必要です。",
1157
1226
  "detail.planReady": "プランの確認が必要です。",
1158
1227
  "detail.previousMessage": "ひとつ前のメッセージ",
@@ -1192,10 +1261,13 @@ const translations = {
1192
1261
  "detail.diffThread.copy.current": ({ count }) => `このスレッドで現在未ステージの変更があるファイルは ${count}件です。下でファイルごとに確認できます。`,
1193
1262
  "detail.diffThread.copy.latest": ({ count }) => `このスレッドで最後に観測した変更があるファイルは ${count}件です。下でファイルごとに確認できます。`,
1194
1263
  "detail.fileEvent.read": "このステップで確認したファイルです。",
1264
+ "detail.fileEvent.search": "このステップで検索した内容です。",
1265
+ "detail.fileEvent.command": "このステップで実行したコマンドです。",
1195
1266
  "detail.fileEvent.write": "このステップで更新したファイルです。",
1196
1267
  "detail.fileEvent.create": "このステップで作成したファイルです。",
1197
1268
  "detail.fileEvent.delete": "このステップで削除したファイルです。",
1198
1269
  "detail.fileEvent.rename": "このステップで名前を変更したファイルです。",
1270
+ "detail.commandEvent.copy": "このステップで実行したコマンドです。",
1199
1271
  "detail.turnAbortedNotice": "タスクを中断しました。",
1200
1272
  "detail.macOnlyChoice": "この種類の入力は Mac で回答してください。",
1201
1273
  "detail.detailUnavailable": "詳細は利用できません。",
@@ -1254,6 +1326,7 @@ const translations = {
1254
1326
  "summary.plan": "{provider} が実装を始める前に、提案されたプランを確認します。",
1255
1327
  "summary.choice": "{provider} が先へ進むために必要な選択肢を選びます。",
1256
1328
  "summary.fileEvent": "このステップで触れたファイルを確認します。",
1329
+ "summary.commandEvent": "このステップで実行したコマンドを確認します。",
1257
1330
  "summary.diffThread": "このスレッドのファイル変更を確認します。",
1258
1331
  "summary.default": "項目を開いて詳細を確認します。",
1259
1332
  "intent.approval": "このリクエストを承認するか拒否します。",
@@ -1261,6 +1334,7 @@ const translations = {
1261
1334
  "intent.choice": "{provider} が続行できるように回答を選びます。",
1262
1335
  "intent.completed": "完了済みです。結果を確認できます。",
1263
1336
  "intent.fileEvent": "このステップで触れたファイルを確認します。",
1337
+ "intent.commandEvent": "このステップで実行したコマンドを確認します。",
1264
1338
  "intent.diffThread": "このスレッドのファイル変更を確認します。",
1265
1339
  "intent.ambientSuggestions": "次にやる候補を確認して、必要なら prompt をコピーします。",
1266
1340
  "intent.userMessage": "このメッセージを開き直します。",
@@ -1283,6 +1357,7 @@ const translations = {
1283
1357
  "timeline.kindFilter.messages": "メッセージ",
1284
1358
  "timeline.kindFilter.suggestions": "候補提案",
1285
1359
  "timeline.kindFilter.files": "ファイル",
1360
+ "timeline.kindFilter.commands": "コマンド",
1286
1361
  "timeline.kindFilter.approvals": "承認",
1287
1362
  "timeline.kindFilter.plans": "プラン",
1288
1363
  "timeline.kindFilter.choices": "選択",
@@ -1301,11 +1376,15 @@ const translations = {
1301
1376
  "boot.status.loadingData": "データを読み込み中...",
1302
1377
  "boot.status.slowHint": "初回のリモート接続は数十秒かかることがあります。",
1303
1378
  "fileEvent.read": "ファイルを確認",
1379
+ "fileEvent.search": "検索",
1380
+ "fileEvent.command": "コマンド実行",
1304
1381
  "fileEvent.write": "ファイルを更新",
1305
1382
  "fileEvent.create": "ファイルを作成",
1306
1383
  "fileEvent.delete": "ファイルを削除",
1307
1384
  "fileEvent.rename": "ファイル名を変更",
1308
1385
  "fileEvent.timeline.read": ({ count }) => `ファイルを確認 ${count}件`,
1386
+ "fileEvent.timeline.search": ({ count }) => count > 0 ? `検索 ${count}件` : "検索",
1387
+ "fileEvent.timeline.command": "コマンド実行",
1309
1388
  "fileEvent.timeline.write": ({ count }) => `ファイルを更新 ${count}件`,
1310
1389
  "fileEvent.timeline.create": ({ count }) => `ファイルを作成 ${count}件`,
1311
1390
  "fileEvent.timeline.delete": ({ count }) => `ファイルを削除 ${count}件`,
@@ -1461,7 +1540,7 @@ const translations = {
1461
1540
  "settings.row.defaultLanguage": "setup 時の既定値",
1462
1541
  "settings.moltbook.title": "Moltbook",
1463
1542
  "settings.moltbook.subtitle": "自動スカウト・通知連携",
1464
- "settings.moltbook.copy": "本日の自動スカウト投稿状況と上限を確認できます。",
1543
+ "settings.moltbook.copy": "自分宛コメントの返信案、フィード巡回、本日の投稿上限を確認できます。",
1465
1544
  "settings.moltbook.unavailable": "Moltbook が設定されていません。",
1466
1545
  "settings.row.moltbookAccount": "プロフィール",
1467
1546
  "settings.row.moltbookQuota": "本日の返信数",
@@ -1482,6 +1561,9 @@ const translations = {
1482
1561
  "moltbook.draft.titleLabel": "タイトル",
1483
1562
  "moltbook.draft.approvePost": "承認して投稿",
1484
1563
  "moltbook.draft.approveReply": "承認して返信",
1564
+ "moltbook.draft.deny": "拒否",
1565
+ "moltbook.draft.submittingApprove": "投稿中…",
1566
+ "moltbook.draft.submittingDeny": "拒否中…",
1485
1567
  "moltbook.draft.editHint": "必要に応じて編集し、承認して投稿するか、拒否してスキップします。",
1486
1568
  "moltbook.draft.resolved": "このドラフトは既に処理済みです。",
1487
1569
  "moltbook.draft.greetMorning": "おはようございます!昨日の成果をシェアしませんか?",
@@ -1585,6 +1667,14 @@ const translations = {
1585
1667
  "a2a.task.deny": "拒否",
1586
1668
  "a2a.task.editHint": "タスクリクエストを確認し、承認して実行するか拒否してください。",
1587
1669
  "a2a.task.executor": "実行ツール",
1670
+ "a2a.task.paidDeliverable": "有料の成果物",
1671
+ "a2a.task.requestedTier": "希望ティア",
1672
+ "a2a.task.requestedExecutor": "希望実行先",
1673
+ "a2a.task.requestedModel": "希望モデル",
1674
+ "a2a.task.deliverableType": "成果物",
1675
+ "a2a.task.price": "価格",
1676
+ "a2a.task.payTo": "支払い先",
1677
+ "a2a.task.unlockUrl": "受け取りURL",
1588
1678
  "a2a.executor.codex": "Codex",
1589
1679
  "a2a.executor.claude": "Claude",
1590
1680
  "settings.a2aExecutor.title": "タスク実行ツール",
@@ -1613,8 +1703,8 @@ const translations = {
1613
1703
  "settings.a2aShare.status.unreachable": "到達不可",
1614
1704
  "settings.a2aShare.error": "上流への問い合わせに失敗しました: {reason}",
1615
1705
  "settings.wallet.title": "ウォレット",
1616
- "settings.wallet.subtitle": "サインイン / Passkey / Base アドレス",
1617
- "settings.wallet.copy": "ウォレットへのサインイン、Passkey、Base 系アドレスの管理を行います。",
1706
+ "settings.wallet.subtitle": "サインイン / パスキー / Base アドレス",
1707
+ "settings.wallet.copy": "ウォレットへのサインイン、パスキー、Base 系アドレスの管理を行います。",
1618
1708
  "settings.wallet.unavailable": "この viveworker では Wallet が設定されていません。",
1619
1709
  "settings.wallet.summary.title": "現在の状態",
1620
1710
  "settings.wallet.flow.title": "おすすめの順番",
@@ -1622,9 +1712,9 @@ const translations = {
1622
1712
  "settings.wallet.flow.copy": "A2A でタスクの報酬をやりとりするには、ウォレットを有効化する必要があります。",
1623
1713
  "settings.wallet.betaNotice": "ウォレット機能はベータテスト中です。この期間はテストネットでのみ支払い・受け取りを利用できます。",
1624
1714
  "settings.wallet.sessionExpired.title": "ウォレットセッションを更新しましょう",
1625
- "settings.wallet.sessionExpired.copy": "ウォレットのセッションが切れています。ワンタイムパスワードで再サインインすれば、Passkey Base Sepolia アドレスはそのまま使えます。",
1715
+ "settings.wallet.sessionExpired.copy": "ウォレットのセッションが切れています。ワンタイムパスワードで再サインインすれば、パスキーと Base Sepolia アドレスはそのまま使えます。",
1626
1716
  "settings.wallet.ready.title": "利用準備ができました",
1627
- "settings.wallet.ready.copy": "メールサインイン、Passkey、Base Sepolia ウォレットの準備ができています。",
1717
+ "settings.wallet.ready.copy": "メールサインイン、パスキー、Base Sepolia ウォレットの準備ができています。",
1628
1718
  "settings.wallet.ready.payoutIntro": "エージェントは下記アドレスを利用します:",
1629
1719
  "settings.wallet.ready.copyAddress": "タップでアドレスをコピー",
1630
1720
  "settings.wallet.advanced.title": "アカウント操作",
@@ -1639,8 +1729,8 @@ const translations = {
1639
1729
  "settings.wallet.step.signIn.copy": "メールにワンタイムパスワードを送り、届いた値を入力してウォレットにサインインします。",
1640
1730
  "settings.wallet.step.refreshSession.title": "セッションを更新",
1641
1731
  "settings.wallet.step.refreshSession.copy": "ウォレット操作を続ける前に、新しいワンタイムパスワードで再サインインします。",
1642
- "settings.wallet.step.passkey.title": "Passkey を登録",
1643
- "settings.wallet.step.passkey.copy": "この端末に Passkey を登録します。ウォレット発行や重要な操作で使います。",
1732
+ "settings.wallet.step.passkey.title": "パスキーを登録",
1733
+ "settings.wallet.step.passkey.copy": "この端末にパスキーを登録します。ウォレット発行や重要な操作で使います。",
1644
1734
  "settings.wallet.step.baseSepolia.title": "Base Sepolia ウォレットを発行",
1645
1735
  "settings.wallet.step.baseSepolia.copy": "現在の beta フローで使うテスト用ウォレットを発行します。まずはこれを用意するのがおすすめです。",
1646
1736
  "settings.wallet.step.base.title": "Base ウォレットを発行",
@@ -1655,7 +1745,7 @@ const translations = {
1655
1745
  "settings.hazbase.status.otpAwaitingVerify": "送信しました。メールを確認して、下のフィールドに入力してください。",
1656
1746
  "settings.hazbase.passkey.ready": "この端末で登録済み",
1657
1747
  "settings.hazbase.passkey.missing": "まだ登録されていません",
1658
- "settings.hazbase.passkey.localHostRequired": ".local ホスト名で viveworker を開くと Passkey を登録できます。",
1748
+ "settings.hazbase.passkey.localHostRequired": ".local ホスト名で viveworker を開くとパスキーを登録できます。",
1659
1749
  "settings.hazbase.wallet.missing": "未発行",
1660
1750
  "settings.hazbase.field.emailLabel": "メールアドレス",
1661
1751
  "settings.hazbase.field.emailPlaceholder": "you@example.com",
@@ -1666,16 +1756,16 @@ const translations = {
1666
1756
  "settings.hazbase.action.resendOtp": "再送信",
1667
1757
  "settings.hazbase.action.verifyOtp": "サインイン",
1668
1758
  "settings.hazbase.action.changeEmail": "メールアドレスを変更",
1669
- "settings.hazbase.action.registerPasskey": "Passkey登録",
1759
+ "settings.hazbase.action.registerPasskey": "パスキーを登録",
1670
1760
  "settings.hazbase.action.bootstrapBaseSepolia": "Base Sepolia発行",
1671
1761
  "settings.hazbase.action.bootstrapBase": "Base発行",
1672
1762
  "settings.hazbase.action.signOut": "ウォレットからログアウト",
1673
1763
  "settings.hazbase.logout.confirm.title": "ウォレットからログアウトしますか?",
1674
- "settings.hazbase.logout.confirm.copy": "再度アクセスするには、ワンタイムパスワードでのサインインが必要になります。ウォレットアドレスと passkey は同じアカウントに紐付いたまま残ります。",
1764
+ "settings.hazbase.logout.confirm.copy": "再度アクセスするには、ワンタイムパスワードでのサインインが必要になります。ウォレットアドレスとパスキーは同じアカウントに紐付いたまま残ります。",
1675
1765
  "settings.hazbase.logout.confirm.confirmLabel": "ログアウトする",
1676
1766
  "settings.hazbase.notice.otpRequested": "ワンタイムパスワードを送信しました。",
1677
1767
  "settings.hazbase.notice.otpVerified": "ウォレットにサインインしました。",
1678
- "settings.hazbase.notice.passkeyRegistered": "Passkeyを登録しました。",
1768
+ "settings.hazbase.notice.passkeyRegistered": "パスキーを登録しました。",
1679
1769
  "settings.hazbase.notice.walletBootstrapped": "chain {chainId} にウォレットを発行しました。",
1680
1770
  "settings.hazbase.notice.signedOut": "ウォレットからログアウトしました。",
1681
1771
  "settings.hazbase.notice.sessionRefreshStarted": "セッション更新を開始しました。ワンタイムパスワードを送信して再サインインしてください。",
@@ -1683,7 +1773,7 @@ const translations = {
1683
1773
  "settings.hazbase.prompt.otp": "ワンタイムパスワード",
1684
1774
  "settings.row.hazbaseStatus": "ウォレット",
1685
1775
  "settings.row.hazbaseEmail": "ウォレットのメール",
1686
- "settings.row.hazbasePasskey": "Passkey",
1776
+ "settings.row.hazbasePasskey": "パスキー",
1687
1777
  "settings.row.hazbaseBaseSepolia": "Base Sepoliaウォレット",
1688
1778
  "settings.row.hazbaseBase": "Baseウォレット",
1689
1779
  "settings.row.a2aShareStatus": "ステータス",
@@ -1721,6 +1811,7 @@ const translations = {
1721
1811
  "最新の HTTPS URL をブラウザで開き直して、必要ならホーム画面アプリを追加し直してください。",
1722
1812
  "error.remotePairingNeedsLanRefresh": "リモート接続の更新が必要です。一度 PC と同じ WiFi で viveworker を開いてから、もう一度 LAN 外で試してください。",
1723
1813
  "error.remotePairingUnavailable": "リモート接続が OFF、または PC に到達できません。同じ WiFi でリモート接続を ON にしてから、もう一度試してください。",
1814
+ "error.requestTimedOut": "リクエストに時間がかかりすぎています。もう一度試してください。",
1724
1815
  "error.webPushDisabled": "サーバー側で Web Push が有効ではありません。",
1725
1816
  "error.notificationsRequireHttps": "通知には HTTPS が必要です。",
1726
1817
  "error.pushUnsupported": "このブラウザは Web Push に対応していません。",
@@ -1756,7 +1847,7 @@ const translations = {
1756
1847
  "error.hazbaseSessionExpired": "ウォレットのセッションが切れています。Wallet 設定を開いて再サインインしてください。",
1757
1848
  "error.hazbaseEmailRequired": "先にメールアドレスを入力してください。",
1758
1849
  "error.hazbaseOtpRequired": "ワンタイムパスワードを入力してください。",
1759
- "error.hazbasePasskeyLocalHostRequired": ".local ホスト名で viveworker を開くと hazBase Passkey を使えます。",
1850
+ "error.hazbasePasskeyLocalHostRequired": ".local ホスト名で viveworker を開くと hazBase パスキーを使えます。",
1760
1851
  "error.hazbaseWalletAccountMissing": "先にこのチェーンのウォレットを発行してください。",
1761
1852
  "error.unsupportedChain": "このチェーンはここではサポートされていません。",
1762
1853
  "server.fallback.codexTask": "{provider} task",
@@ -1769,7 +1860,9 @@ const translations = {
1769
1860
  "server.title.userMessage": "ユーザー",
1770
1861
  "server.title.assistantCommentary": "途中経過",
1771
1862
  "server.title.assistantFinal": "最終回答",
1863
+ "server.title.activityStatus": "作業中",
1772
1864
  "server.title.ambientSuggestions": "次の候補",
1865
+ "server.title.threadShare": "スレッド共有",
1773
1866
  "server.action.review": "判断する",
1774
1867
  "server.action.detail": "詳細",
1775
1868
  "server.action.select": "選ぶ",
@@ -1779,7 +1872,8 @@ const translations = {
1779
1872
  "server.action.implement": "実装する",
1780
1873
  "server.message.commandApprovalNeeded": "コマンド実行の承認が必要です。",
1781
1874
  "server.message.commandLabel": "コマンド",
1782
- "server.message.filesLabel": "Files",
1875
+ "server.message.toolLabel": "ツール",
1876
+ "server.message.filesLabel": "ファイル",
1783
1877
  "server.message.diffSummaryLabel": "差分サマリ:",
1784
1878
  "server.message.autoPilotTrustedReadApproved": "Auto Pilot がこの Trusted Read コマンドを自動承認しました。",
1785
1879
  "server.message.autoPilotTrustedReadSummary": "Auto Pilot が Trusted Read コマンドを自動承認しました。",
@@ -1788,8 +1882,8 @@ const translations = {
1788
1882
  "server.message.autoPilotTrustedWriteSummary": "承認の自動化が低リスクなファイル変更を自動承認しました。",
1789
1883
  "server.message.autoPilotTrustedWriteReason": "viveworker が現在のワークスペース向け低リスク書き込みポリシーに一致したため自動承認しました。",
1790
1884
  "server.message.fileApprovalNeeded": "ファイル変更の承認が必要です。",
1791
- "server.message.commandPrefix": ({ command }) => `Command: ${command}`,
1792
- "server.message.pathPrefix": ({ path }) => `Path: ${path}`,
1885
+ "server.message.commandPrefix": ({ command }) => `コマンド: ${command}`,
1886
+ "server.message.pathPrefix": ({ path }) => `パス: ${path}`,
1793
1887
  "server.message.approveOnMac": "Mac で承認してください: この端末の通知は codex.app の鏡像です。",
1794
1888
  "server.message.approvalNeededInCodex": "{provider} で承認が必要です。",
1795
1889
  "server.message.extraApprovals": ({ count }) => `追加の承認: ${count}`,
@@ -1801,6 +1895,13 @@ const translations = {
1801
1895
  "server.message.choiceSummarySubmitted": "選択内容を送信しました。",
1802
1896
  "server.message.choiceSummaryReceivedTest": "テスト回答を受信しました。",
1803
1897
  "server.message.questionAnswered": "回答を {provider} に送信しました。",
1898
+ "server.activity.thinking": "考え中...",
1899
+ "server.activity.reading": "ファイルを読んでいます...",
1900
+ "server.activity.searching": "検索しています...",
1901
+ "server.activity.editing": "編集中...",
1902
+ "server.activity.runningCommand": "コマンドを実行中...",
1903
+ "server.activity.awaitingApproval": "承認待ち...",
1904
+ "server.activity.working": "作業中...",
1804
1905
  "claudePlan.title": "{provider} からのプラン",
1805
1906
  "claudePlan.approve": "プランを承認",
1806
1907
  "claudePlan.reject": "プランを却下",
@@ -1821,6 +1922,35 @@ const translations = {
1821
1922
  "server.confirm.reject": "この操作を拒否して {provider} に続行しないよう伝えます。",
1822
1923
  "server.pushTest.title": "viveworker テスト通知",
1823
1924
  "server.pushTest.body": "この端末で通知が動作しています。",
1925
+ "server.push.threadShare.title": ({ source, target }) => `スレッド共有: ${source} → ${target}`,
1926
+ "server.push.threadShareFallback.title": "スレッド共有の送信先に接続できません",
1927
+ "server.push.threadShareFallback.body": ({ target }) => `Codex スレッド「${target}」に接続できません。共有内容は inbox に保存しました。`,
1928
+ "server.push.mcpNotify.title": "MCP 通知",
1929
+ "server.push.mcpQuestion.title": "MCP からの質問",
1930
+ "server.push.mcpApproval.title": "MCP からの承認",
1931
+ "server.push.mcpShareFile.title": "ファイル共有の確認",
1932
+ "server.push.mcpShareFile.body": ({ path, size }) => `MCP クライアントが ${path}${size ? ` (${size})` : ""} を File Share にアップロードしようとしています。`,
1933
+ "server.push.mcpA2aTask.title": ({ target }) => `${target} に A2A タスクを送信`,
1934
+ "server.push.mcpA2aTask.body": ({ target }) => `MCP クライアントが ${target} にタスクを送ろうとしています。`,
1935
+ "server.push.paymentApproval.title": ({ amount }) => amount ? `支払いの承認 — ${amount} USDC` : "支払いの承認",
1936
+ "server.push.hazbasePayment.title": ({ amount }) => amount ? `ウォレット支払いの承認 — ${amount} USDC` : "ウォレット支払いの承認",
1937
+ "server.push.paymentApproval.body": ({ amount, network, resource }) =>
1938
+ [`金額: ${amount}`, network ? `ネットワーク: ${network}` : "", resource ? `リソース: ${resource}` : ""].filter(Boolean).join("\n"),
1939
+ "server.push.moltbookReply.title": "Moltbook の返信案",
1940
+ "server.push.moltbookReply.body": "Moltbook に返信案が届いています。",
1941
+ "server.push.moltbookDraft.replyTitle": ({ postTitle }) => postTitle ? `Moltbook の返信案: ${postTitle}` : "Moltbook の返信案",
1942
+ "server.push.moltbookDraft.originalTitle": "Moltbook の投稿案",
1943
+ "server.push.moltbookDraft.originalMorning": "おはようございます。昨日の成果をシェアしませんか?",
1944
+ "server.push.moltbookDraft.originalNoon": "午前中の進捗をシェアしませんか?",
1945
+ "server.push.moltbookDraft.originalEvening": "今日の成果をシェアしませんか?",
1946
+ "server.push.moltbookDraft.failedTitle": "Moltbook への投稿に失敗しました",
1947
+ "server.push.moltbookDraft.postedTitle": "Moltbook に投稿しました",
1948
+ "server.push.moltbookDraft.postedReplyBody": ({ postTitle }) => `返信を投稿しました${postTitle ? `: ${postTitle}` : ""}`,
1949
+ "server.push.moltbookDraft.postedOriginalBody": ({ title }) => `投稿を公開しました${title ? `: ${title}` : ""}`,
1950
+ "server.push.a2aTask.title": "外部エージェントからタスク依頼",
1951
+ "server.push.a2aRelayTask.title": "A2A リレー経由のタスク依頼",
1952
+ "server.push.a2aResult.completedTitle": ({ instruction }) => `A2A 完了: ${instruction}`,
1953
+ "server.push.a2aResult.failedTitle": ({ instruction }) => `A2A 失敗: ${instruction}`,
1824
1954
  "server.page.notFoundTitle": "見つかりません",
1825
1955
  "server.page.notFoundBody": "この承認リンクは存在しません。",
1826
1956
  "server.page.notFoundHint": "このページは閉じて大丈夫です。",
package/web/index.html CHANGED
@@ -7,7 +7,7 @@
7
7
  <link rel="manifest" href="/manifest.webmanifest">
8
8
  <link rel="apple-touch-icon" href="/icons/apple-touch-icon.png">
9
9
  <link rel="icon" type="image/png" sizes="192x192" href="/icons/viveworker-icon-192.png">
10
- <link rel="stylesheet" href="/app.css">
10
+ <link rel="stylesheet" href="/app.css?v=__VIVEWORKER_APP_BUILD_ID__">
11
11
  <style>
12
12
  .boot-splash {
13
13
  position: fixed;