viveworker 0.1.9 → 0.1.11
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 +13 -13
- package/ntfy/server.yml.example +2 -2
- package/package.json +4 -3
- package/scripts/viveworker-bridge.mjs +470 -118
- package/scripts/viveworker.mjs +18 -4
- package/viveworker.env.example +3 -3
- package/web/i18n.js +107 -89
package/scripts/viveworker.mjs
CHANGED
|
@@ -1336,10 +1336,24 @@ async function installMkcertForMac(progress, locale) {
|
|
|
1336
1336
|
}
|
|
1337
1337
|
|
|
1338
1338
|
progress?.update("cli.setup.progress.installMkcert");
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1339
|
+
try {
|
|
1340
|
+
await execCommand([brewPath, "install", "mkcert"], {
|
|
1341
|
+
streamOutput: true,
|
|
1342
|
+
beforeStreamOutput: () => progress?.clear(),
|
|
1343
|
+
});
|
|
1344
|
+
} catch (error) {
|
|
1345
|
+
const rawMessage = String(error?.message || error || "");
|
|
1346
|
+
const permissionIssue =
|
|
1347
|
+
/not writable/iu.test(rawMessage) &&
|
|
1348
|
+
(/homebrew/iu.test(rawMessage) || /\/opt\/homebrew/iu.test(rawMessage) || /\/usr\/local/iu.test(rawMessage));
|
|
1349
|
+
throw new Error(
|
|
1350
|
+
[
|
|
1351
|
+
t(locale, permissionIssue ? "cli.setup.error.mkcertInstallPermission" : "cli.setup.error.mkcertInstallFailed"),
|
|
1352
|
+
t(locale, "cli.setup.error.mkcertInstallNext"),
|
|
1353
|
+
t(locale, "cli.setup.error.mkcertInstallExample"),
|
|
1354
|
+
].join("\n")
|
|
1355
|
+
);
|
|
1356
|
+
}
|
|
1343
1357
|
const mkcertPath = await findExecutable("mkcert");
|
|
1344
1358
|
if (!mkcertPath) {
|
|
1345
1359
|
throw new Error("mkcert installation finished, but the mkcert executable is still not available.");
|
package/viveworker.env.example
CHANGED
|
@@ -74,15 +74,15 @@ NOTIFY_PLANS=1
|
|
|
74
74
|
NATIVE_APPROVALS=1
|
|
75
75
|
ENABLE_NTFY=0
|
|
76
76
|
|
|
77
|
-
# Native codex.app approval pages for
|
|
77
|
+
# Native codex.app approval pages for mobile devices.
|
|
78
78
|
# Use HTTPS for LAN access whenever possible. Plain HTTP over LAN requires
|
|
79
79
|
# ALLOW_INSECURE_LAN_HTTP=1 and is not recommended.
|
|
80
|
-
# Use a public LAN URL the
|
|
80
|
+
# Use a public LAN URL the device can reach. This can be different from NTFY_PUBLISH_BASE_URL.
|
|
81
81
|
NATIVE_APPROVAL_SERVER_PUBLIC_BASE_URL=
|
|
82
82
|
NATIVE_APPROVAL_SERVER_HOST=127.0.0.1
|
|
83
83
|
NATIVE_APPROVAL_SERVER_PORT=8810
|
|
84
84
|
|
|
85
|
-
# App-server runner settings for interactive
|
|
85
|
+
# App-server runner settings for interactive mobile approvals.
|
|
86
86
|
# If empty, the runner derives the host from NTFY_BASE_URL.
|
|
87
87
|
APPROVAL_SERVER_PUBLIC_BASE_URL=
|
|
88
88
|
APPROVAL_SERVER_HOST=0.0.0.0
|
package/web/i18n.js
CHANGED
|
@@ -65,12 +65,12 @@ const translations = {
|
|
|
65
65
|
"tab.timeline.description": "Conversation updates and operational events across recent threads.",
|
|
66
66
|
"tab.diff.title": "Diff",
|
|
67
67
|
"tab.diff.label": "Diff",
|
|
68
|
-
"tab.diff.eyebrow": "
|
|
69
|
-
"tab.diff.description": "Review
|
|
68
|
+
"tab.diff.eyebrow": "Code changes",
|
|
69
|
+
"tab.diff.description": "Review file changes from Codex in a mobile-friendly diff view.",
|
|
70
70
|
"tab.code.title": "Code",
|
|
71
71
|
"tab.code.label": "Code",
|
|
72
|
-
"tab.code.eyebrow": "
|
|
73
|
-
"tab.code.description": "Review
|
|
72
|
+
"tab.code.eyebrow": "Code changes",
|
|
73
|
+
"tab.code.description": "Review file changes from Codex in a mobile-friendly diff view on your device.",
|
|
74
74
|
"tab.completed.title": "Completed",
|
|
75
75
|
"tab.completed.label": "Completed",
|
|
76
76
|
"tab.completed.eyebrow": "History",
|
|
@@ -80,39 +80,39 @@ const translations = {
|
|
|
80
80
|
"tab.settings.eyebrow": "Device",
|
|
81
81
|
"tab.settings.description": "Pairing, installation, and notification controls.",
|
|
82
82
|
"pair.copy":
|
|
83
|
-
"Pair this
|
|
83
|
+
"Pair this device with your local Codex desktop session and keep approvals, plans, choices, and completions within reach.",
|
|
84
84
|
"pair.codeLabel": "Pairing code",
|
|
85
85
|
"pair.codePlaceholder": "Enter the pairing code",
|
|
86
|
-
"pair.connect": "Connect this
|
|
86
|
+
"pair.connect": "Connect this device",
|
|
87
87
|
"pair.installFromHomeScreen":
|
|
88
88
|
"This pairing link is being kept for the Home Screen app. Add viveworker to your Home Screen from Safari, then open the new icon to finish pairing there.",
|
|
89
89
|
"pair.helperTitle": "Add to Home Screen",
|
|
90
90
|
"pair.helperCopy": "Install viveworker for the best mobile layout and Web Push support.",
|
|
91
91
|
"banner.install.title": "Add viveworker to your Home Screen",
|
|
92
92
|
"banner.install.copy.safari":
|
|
93
|
-
"Install it from Safari for a cleaner
|
|
93
|
+
"Install it from Safari for a cleaner mobile layout and background notifications.",
|
|
94
94
|
"banner.install.copy.other": "Open this page in Safari to install viveworker to your Home Screen.",
|
|
95
95
|
"banner.push.title": "Push notifications can help",
|
|
96
96
|
"banner.push.copy.https": "Open viveworker over HTTPS to turn on push notifications.",
|
|
97
|
-
"banner.push.copy.standalone": "Add viveworker to your Home Screen to receive push notifications on
|
|
97
|
+
"banner.push.copy.standalone": "Add viveworker to your Home Screen to receive push notifications on this device.",
|
|
98
98
|
"banner.push.copy.denied":
|
|
99
|
-
"Notifications are currently blocked for this app. You can re-enable them later from
|
|
99
|
+
"Notifications are currently blocked for this app. You can re-enable them later from your device settings.",
|
|
100
100
|
"banner.push.copy.default":
|
|
101
101
|
"Enable push notifications to catch approvals, plans, questions, and completions even when the app is in the background.",
|
|
102
102
|
"install.guide.title": "Add to Home Screen",
|
|
103
103
|
"install.guide.intro.safari":
|
|
104
|
-
"
|
|
105
|
-
"install.guide.intro.other": "
|
|
104
|
+
"This browser does not let websites trigger this directly, but you can add viveworker in a few taps.",
|
|
105
|
+
"install.guide.intro.other": "If Home Screen installation is unavailable here, try opening this page in Safari or another supported mobile browser.",
|
|
106
106
|
"install.guide.step.openSafari": "Open this same URL in Safari.",
|
|
107
107
|
"install.guide.step.tapShare": "Tap the Share button.",
|
|
108
108
|
"install.guide.step.chooseAdd": "Choose Add to Home Screen.",
|
|
109
109
|
"install.guide.step.tapAdd": "Tap Add, then open the new icon.",
|
|
110
|
-
"shell.subtitle.settings": "Pairing, notifications, and installation for this
|
|
110
|
+
"shell.subtitle.settings": "Pairing, notifications, and installation for this device.",
|
|
111
111
|
"shell.subtitle.detail": "Review the selected item and act without leaving your current flow.",
|
|
112
112
|
"empty.pending":
|
|
113
113
|
"Nothing needs attention right now. New approvals, plans, and choices will appear here first.",
|
|
114
114
|
"empty.timeline": "No timeline activity is available yet. New conversation updates will show up here.",
|
|
115
|
-
"empty.diff": "No
|
|
115
|
+
"empty.diff": "No file changes are available right now.",
|
|
116
116
|
"empty.completed": "Completed history is empty for now.",
|
|
117
117
|
"empty.default": "Nothing to show right now.",
|
|
118
118
|
"detail.selectTitle": "Choose something from the list",
|
|
@@ -127,7 +127,11 @@ const translations = {
|
|
|
127
127
|
"detail.diffTitle": "Diff",
|
|
128
128
|
"detail.diffUnavailable": "Diff is not available for this change. Showing touched files only.",
|
|
129
129
|
"detail.diffThread.copy": ({ count }) =>
|
|
130
|
+
`This thread has ${count} ${count === 1 ? "changed file" : "changed files"}. Review each file below.`,
|
|
131
|
+
"detail.diffThread.copy.current": ({ count }) =>
|
|
130
132
|
`This thread currently has ${count} ${count === 1 ? "unstaged changed file" : "unstaged changed files"}. Review each file below.`,
|
|
133
|
+
"detail.diffThread.copy.latest": ({ count }) =>
|
|
134
|
+
`This thread has ${count} ${count === 1 ? "latest observed file change" : "latest observed file changes"}. Review each file below.`,
|
|
131
135
|
"detail.fileEvent.read": "Codex checked these files in this step.",
|
|
132
136
|
"detail.fileEvent.write": "Codex updated these files in this step.",
|
|
133
137
|
"detail.fileEvent.create": "Codex created these files in this step.",
|
|
@@ -147,7 +151,7 @@ const translations = {
|
|
|
147
151
|
"reply.imageAddMore": "Add more images",
|
|
148
152
|
"reply.imageReplace": "Replace image",
|
|
149
153
|
"reply.imageRemove": "Remove",
|
|
150
|
-
"reply.imageHint": "Attach up to {count} images from your
|
|
154
|
+
"reply.imageHint": "Attach up to {count} images from your device and send them together with your message.",
|
|
151
155
|
"reply.imageAttached": "Attached image",
|
|
152
156
|
"reply.send": "Send to Codex",
|
|
153
157
|
"reply.sendConfirm": "Send anyway",
|
|
@@ -182,14 +186,14 @@ const translations = {
|
|
|
182
186
|
"summary.plan": "Check the proposed plan before Codex starts implementing it.",
|
|
183
187
|
"summary.choice": "Pick the option Codex needs to continue.",
|
|
184
188
|
"summary.fileEvent": "Review the files Codex checked or updated in this step.",
|
|
185
|
-
"summary.diffThread": "Review the
|
|
189
|
+
"summary.diffThread": "Review the file changes for this thread.",
|
|
186
190
|
"summary.default": "Open the item to review its details.",
|
|
187
191
|
"intent.approval": "Approve or reject this request.",
|
|
188
192
|
"intent.plan": "Review this plan before Codex continues.",
|
|
189
193
|
"intent.choice": "Choose an answer so Codex can continue.",
|
|
190
194
|
"intent.completed": "Finished. Open to review the result.",
|
|
191
195
|
"intent.fileEvent": "Review the files involved in this step.",
|
|
192
|
-
"intent.diffThread": "Review the
|
|
196
|
+
"intent.diffThread": "Review the file changes for this thread.",
|
|
193
197
|
"intent.userMessage": "Open this message again.",
|
|
194
198
|
"intent.assistantCommentary": "Read the latest working update.",
|
|
195
199
|
"intent.assistantFinal": "Read Codex's final reply for this turn.",
|
|
@@ -224,35 +228,35 @@ const translations = {
|
|
|
224
228
|
"fileEvent.timeline.rename": ({ count }) => `Renamed ${count} ${count === 1 ? "file" : "files"}`,
|
|
225
229
|
"diff.threadSummary": ({ count }) => `Changed ${count} ${count === 1 ? "file" : "files"}`,
|
|
226
230
|
"diff.latestChange": "Latest change",
|
|
227
|
-
"diff.latestChangeFallback": "
|
|
228
|
-
"settings.intro": "Check pairing, language, install status, and Web Push health for this
|
|
231
|
+
"diff.latestChangeFallback": "File changes are available in this thread.",
|
|
232
|
+
"settings.intro": "Check pairing, language, install status, and Web Push health for this device.",
|
|
229
233
|
"settings.section.overview": "Quick setup",
|
|
230
234
|
"settings.section.notifications": "Notifications",
|
|
231
235
|
"settings.section.install": "Install",
|
|
232
|
-
"settings.section.device": "This
|
|
236
|
+
"settings.section.device": "This device",
|
|
233
237
|
"settings.group.general": "General",
|
|
234
|
-
"settings.group.device": "This
|
|
238
|
+
"settings.group.device": "This device",
|
|
235
239
|
"settings.group.values": "Current settings",
|
|
236
240
|
"settings.group.advanced": "Advanced",
|
|
237
241
|
"settings.group.actions": "Actions",
|
|
238
242
|
"settings.overview.title": "At a glance",
|
|
239
|
-
"settings.overview.copy": "See what is ready, what still needs setup, and what to do next on this
|
|
243
|
+
"settings.overview.copy": "See what is ready, what still needs setup, and what to do next on this device.",
|
|
240
244
|
"settings.summary.notifications": "Notifications",
|
|
241
245
|
"settings.summary.install": "Home Screen",
|
|
242
246
|
"settings.summary.pairing": "Pairing",
|
|
243
247
|
"settings.nextStep.eyebrow": "Next step",
|
|
244
248
|
"settings.nextStep.enableNotifications.title": "Turn on notifications",
|
|
245
|
-
"settings.nextStep.enableNotifications.copy": "Enable Web Push on this
|
|
249
|
+
"settings.nextStep.enableNotifications.copy": "Enable Web Push on this device so approvals, plans, and questions can reach you in the background.",
|
|
246
250
|
"settings.nextStep.serverDisabled.title": "Server setup is still missing",
|
|
247
|
-
"settings.nextStep.serverDisabled.copy": "Web Push is not enabled on this viveworker server yet, so this
|
|
251
|
+
"settings.nextStep.serverDisabled.copy": "Web Push is not enabled on this viveworker server yet, so this device cannot subscribe yet.",
|
|
248
252
|
"settings.nextStep.openHttps.title": "Open the HTTPS version",
|
|
249
|
-
"settings.nextStep.openHttps.copy": "This page must be opened over HTTPS before
|
|
253
|
+
"settings.nextStep.openHttps.copy": "This page must be opened over HTTPS before this device can enable notifications.",
|
|
250
254
|
"settings.nextStep.install.title": "Add viveworker to Home Screen",
|
|
251
|
-
"settings.nextStep.install.copy": "
|
|
255
|
+
"settings.nextStep.install.copy": "Add the app to your Home Screen, then reopen the installed app before enabling notifications.",
|
|
252
256
|
"settings.nextStep.permissionBlocked.title": "Notifications are blocked",
|
|
253
|
-
"settings.nextStep.permissionBlocked.copy": "Re-enable notifications in
|
|
257
|
+
"settings.nextStep.permissionBlocked.copy": "Re-enable notifications in your device settings, then return here to test again.",
|
|
254
258
|
"settings.nextStep.test.title": "Everything is ready",
|
|
255
|
-
"settings.nextStep.test.copy": "Send a test notification to confirm this
|
|
259
|
+
"settings.nextStep.test.copy": "Send a test notification to confirm this device can receive pushes from viveworker.",
|
|
256
260
|
"settings.status.notAvailable": "Not available",
|
|
257
261
|
"settings.status.unsupported": "Not supported",
|
|
258
262
|
"settings.status.needsHttps": "Needs HTTPS",
|
|
@@ -270,7 +274,7 @@ const translations = {
|
|
|
270
274
|
"settings.notifications.serverDisabled": "Web Push is not enabled on the server yet.",
|
|
271
275
|
"settings.notifications.openHttps": "Open viveworker over HTTPS before enabling notifications.",
|
|
272
276
|
"settings.notifications.openHomeScreen":
|
|
273
|
-
"Open the Home Screen app before enabling notifications on
|
|
277
|
+
"Open the installed Home Screen app before enabling notifications on this device.",
|
|
274
278
|
"settings.action.enableNotifications": "Enable Notifications",
|
|
275
279
|
"settings.action.disableNotifications": "Disable Notifications",
|
|
276
280
|
"settings.action.sendTest": "Send Test Notification",
|
|
@@ -279,9 +283,9 @@ const translations = {
|
|
|
279
283
|
"settings.action.removeThisDevice": "Remove this device",
|
|
280
284
|
"settings.install.title": "Install to Home Screen",
|
|
281
285
|
"settings.install.copy":
|
|
282
|
-
"For the best
|
|
286
|
+
"For the best mobile experience, add viveworker to your Home Screen and open the installed app.",
|
|
283
287
|
"settings.device.title": "Devices",
|
|
284
|
-
"settings.device.copy": "Manage trusted
|
|
288
|
+
"settings.device.copy": "Manage trusted devices and browsers that can open this LAN viveworker app.",
|
|
285
289
|
"settings.device.count": ({ count }) => `${count} ${count === 1 ? "device" : "devices"}`,
|
|
286
290
|
"settings.device.section.current": "This device",
|
|
287
291
|
"settings.device.section.other": "Other trusted devices",
|
|
@@ -289,7 +293,7 @@ const translations = {
|
|
|
289
293
|
"settings.device.emptyCurrent": "This device is not listed right now.",
|
|
290
294
|
"settings.device.emptyOther": "No other trusted devices are active.",
|
|
291
295
|
"settings.device.addAnother.title": "Add another device",
|
|
292
|
-
"settings.device.addAnother.heading": "Add a new
|
|
296
|
+
"settings.device.addAnother.heading": "Add a new device or browser",
|
|
293
297
|
"settings.device.addAnother.copy":
|
|
294
298
|
"Run this on your Mac only when you want to add another trusted device. Your main app URL stays the same.",
|
|
295
299
|
"settings.device.addAnother.commandLabel": "Run on your Mac",
|
|
@@ -302,12 +306,12 @@ const translations = {
|
|
|
302
306
|
"settings.device.mode.standalone": "Home Screen app",
|
|
303
307
|
"settings.device.mode.browser": "Browser tab",
|
|
304
308
|
"settings.language.title": "Language",
|
|
305
|
-
"settings.language.copy": "Choose how this
|
|
309
|
+
"settings.language.copy": "Choose how this device should display viveworker.",
|
|
306
310
|
"settings.pairing.title": "Pairing",
|
|
307
|
-
"settings.pairing.copy": "This
|
|
311
|
+
"settings.pairing.copy": "This device is paired with your local Codex desktop session.",
|
|
308
312
|
"settings.pairing.connected": "Paired",
|
|
309
313
|
"settings.technical.title": "Technical details",
|
|
310
|
-
"settings.technical.copy": "Connection and notification diagnostics for this
|
|
314
|
+
"settings.technical.copy": "Connection and notification diagnostics for this device.",
|
|
311
315
|
"settings.technical.copyShort": "Connection and notification diagnostics.",
|
|
312
316
|
"settings.row.deviceId": "Device ID",
|
|
313
317
|
"settings.row.pairedAt": "Paired",
|
|
@@ -334,11 +338,11 @@ const translations = {
|
|
|
334
338
|
"notice.loggedOutKeepTrusted": "Logged out. This device stays trusted, so you can come back without pairing again.",
|
|
335
339
|
"notice.loggedOutDeviceRemoved": "Logged out and removed this device. Pair again before using viveworker here.",
|
|
336
340
|
"error.networkHint":
|
|
337
|
-
"Try reopening the latest HTTPS URL in
|
|
341
|
+
"Try reopening the latest HTTPS URL in your browser, then re-add the Home Screen app if needed.",
|
|
338
342
|
"error.webPushDisabled": "Web Push is not enabled on the server.",
|
|
339
343
|
"error.notificationsRequireHttps": "Notifications require HTTPS.",
|
|
340
344
|
"error.pushUnsupported": "This browser does not support Web Push.",
|
|
341
|
-
"error.openHomeScreen": "
|
|
345
|
+
"error.openHomeScreen": "Open viveworker from the Home Screen before enabling notifications on this device.",
|
|
342
346
|
"error.notificationPermission": ({ status }) => `Notification permission is ${status}.`,
|
|
343
347
|
"error.pushServerNotReady": "The server is not ready for Web Push.",
|
|
344
348
|
"error.serviceWorkerUnavailable": "Service Worker is not available.",
|
|
@@ -387,7 +391,7 @@ const translations = {
|
|
|
387
391
|
"server.message.fileApprovalNeeded": "File changes need approval.",
|
|
388
392
|
"server.message.commandPrefix": ({ command }) => `Command: ${command}`,
|
|
389
393
|
"server.message.pathPrefix": ({ path }) => `Path: ${path}`,
|
|
390
|
-
"server.message.approveOnMac": "Approve on Mac only: this
|
|
394
|
+
"server.message.approveOnMac": "Approve on Mac only: this device alert mirrors codex.app.",
|
|
391
395
|
"server.message.approvalNeededInCodex": "Approval needed in Codex.",
|
|
392
396
|
"server.message.extraApprovals": ({ count }) => `Extra approvals: ${count}`,
|
|
393
397
|
"server.message.taskFinished": "Task finished.",
|
|
@@ -405,7 +409,7 @@ const translations = {
|
|
|
405
409
|
"server.confirm.approve": "This approval will be confirmed and Codex will continue.",
|
|
406
410
|
"server.confirm.reject": "This action will be rejected and Codex will be told not to continue.",
|
|
407
411
|
"server.pushTest.title": "viveworker test notification",
|
|
408
|
-
"server.pushTest.body": "Notifications are working on this
|
|
412
|
+
"server.pushTest.body": "Notifications are working on this device.",
|
|
409
413
|
"server.page.notFoundTitle": "Not found",
|
|
410
414
|
"server.page.notFoundBody": "This approval link does not exist.",
|
|
411
415
|
"server.page.notFoundHint": "You can close this page safely.",
|
|
@@ -448,16 +452,16 @@ const translations = {
|
|
|
448
452
|
"cli.setup.webPushEnabled": "Web Push: enabled (HTTPS)",
|
|
449
453
|
"cli.setup.webPushDisabled": "Web Push: disabled",
|
|
450
454
|
"cli.setup.completePending": "viveworker setup finished, but health has not responded yet.",
|
|
451
|
-
"cli.setup.caFlow.title": "Before opening viveworker on
|
|
452
|
-
"cli.setup.caFlow.step1": "1. Open the CA download URL or scan the QR code below on your
|
|
453
|
-
"cli.setup.caFlow.step2": "2. Install the rootCA.pem profile, then enable trust for it
|
|
455
|
+
"cli.setup.caFlow.title": "Before opening viveworker on your device, install and trust the local root certificate if needed:",
|
|
456
|
+
"cli.setup.caFlow.step1": "1. Open the CA download URL or scan the QR code below on your device.",
|
|
457
|
+
"cli.setup.caFlow.step2": "2. Install the rootCA.pem profile, then enable trust for it if your device requires local CA trust.",
|
|
454
458
|
"cli.setup.caFlow.step3": "3. After that, press Enter here to show the viveworker app URL and pairing QR.",
|
|
455
459
|
"cli.setup.instructions.https":
|
|
456
|
-
"Open the HTTPS URL in
|
|
460
|
+
"Open the HTTPS URL in your mobile browser, trust your local CA if needed, then add the app to the Home Screen to enable notifications.",
|
|
457
461
|
"cli.setup.instructions.afterCa":
|
|
458
|
-
"Now open the pairing URL
|
|
462
|
+
"Now open the pairing URL on your device, pair it if needed, then add viveworker to the Home Screen.",
|
|
459
463
|
"cli.setup.instructions.insecureHttpLan":
|
|
460
|
-
"Open the HTTP URL in
|
|
464
|
+
"Open the HTTP URL in a mobile browser only if you intentionally allowed insecure LAN access. This mode is not recommended on shared Wi-Fi.",
|
|
461
465
|
"cli.setup.instructions.localOnlyHttp":
|
|
462
466
|
"This setup is loopback-only HTTP for local development. Use the default HTTPS setup or --allow-insecure-http-lan if you explicitly need LAN access.",
|
|
463
467
|
"logout.confirm.title": "Choose how to log out",
|
|
@@ -475,6 +479,12 @@ const translations = {
|
|
|
475
479
|
"cli.setup.qrPairing": "Pairing QR:",
|
|
476
480
|
"cli.setup.qrCaDownload": "rootCA.pem download QR (IP):",
|
|
477
481
|
"cli.setup.prompt.continueToApp": "Press Enter to continue to the viveworker app URL.",
|
|
482
|
+
"cli.setup.error.mkcertInstallFailed": "viveworker could not install mkcert with Homebrew.",
|
|
483
|
+
"cli.setup.error.mkcertInstallPermission":
|
|
484
|
+
"Homebrew is installed, but its prefix is not writable by your current user, so viveworker could not auto-install mkcert.",
|
|
485
|
+
"cli.setup.error.mkcertInstallNext":
|
|
486
|
+
"Fix your Homebrew permissions, then rerun `npx viveworker setup --install-mkcert`, or install mkcert manually first.",
|
|
487
|
+
"cli.setup.error.mkcertInstallExample": "Example: brew install mkcert && mkcert -install",
|
|
478
488
|
"cli.start.progress.prepare": "Loading saved viveworker config...",
|
|
479
489
|
"cli.start.progress.refreshPairing": "Refreshing expired pairing credentials...",
|
|
480
490
|
"cli.start.progress.launchd": "Starting the launchd service...",
|
|
@@ -582,12 +592,12 @@ const translations = {
|
|
|
582
592
|
"tab.timeline.description": "最近のスレッドにまたがる会話の更新と操作イベントです。",
|
|
583
593
|
"tab.diff.title": "差分",
|
|
584
594
|
"tab.diff.label": "差分",
|
|
585
|
-
"tab.diff.eyebrow": "
|
|
586
|
-
"tab.diff.description": "Codex
|
|
595
|
+
"tab.diff.eyebrow": "コード変更",
|
|
596
|
+
"tab.diff.description": "Codex のファイル変更を端末で確認します。",
|
|
587
597
|
"tab.code.title": "コード",
|
|
588
598
|
"tab.code.label": "コード",
|
|
589
|
-
"tab.code.eyebrow": "
|
|
590
|
-
"tab.code.description": "Codex
|
|
599
|
+
"tab.code.eyebrow": "コード変更",
|
|
600
|
+
"tab.code.description": "Codex のファイル変更を端末で確認します。",
|
|
591
601
|
"tab.completed.title": "完了",
|
|
592
602
|
"tab.completed.label": "完了",
|
|
593
603
|
"tab.completed.eyebrow": "履歴",
|
|
@@ -597,38 +607,38 @@ const translations = {
|
|
|
597
607
|
"tab.settings.eyebrow": "端末",
|
|
598
608
|
"tab.settings.description": "ペアリング、インストール、通知の設定です。",
|
|
599
609
|
"pair.copy":
|
|
600
|
-
"
|
|
610
|
+
"この端末をローカルの Codex desktop session とペアリングして、承認、プラン、選択、完了をすぐ確認できるようにします。",
|
|
601
611
|
"pair.codeLabel": "ペアリングコード",
|
|
602
612
|
"pair.codePlaceholder": "ペアリングコードを入力",
|
|
603
|
-
"pair.connect": "
|
|
613
|
+
"pair.connect": "この端末を接続",
|
|
604
614
|
"pair.installFromHomeScreen":
|
|
605
615
|
"この pairing link はホーム画面アプリ用に温存されています。Safari から viveworker をホーム画面に追加し、新しいアイコンを開いてそこで pairing を完了してください。",
|
|
606
616
|
"pair.helperTitle": "ホーム画面に追加",
|
|
607
617
|
"pair.helperCopy": "モバイル表示と Web Push を最適に使うには viveworker をインストールしてください。",
|
|
608
618
|
"banner.install.title": "viveworker をホーム画面に追加",
|
|
609
619
|
"banner.install.copy.safari":
|
|
610
|
-
"Safari
|
|
620
|
+
"Safari からインストールすると、モバイル向け表示とバックグラウンド通知が使いやすくなります。",
|
|
611
621
|
"banner.install.copy.other": "Safari でこのページを開いて、viveworker をホーム画面に追加してください。",
|
|
612
622
|
"banner.push.title": "プッシュ通知を有効にすると便利です",
|
|
613
623
|
"banner.push.copy.https": "プッシュ通知を使うには HTTPS の viveworker を開いてください。",
|
|
614
|
-
"banner.push.copy.standalone": "
|
|
624
|
+
"banner.push.copy.standalone": "この端末でプッシュ通知を受けるには、viveworker をホーム画面に追加してください。",
|
|
615
625
|
"banner.push.copy.denied":
|
|
616
|
-
"
|
|
626
|
+
"このアプリの通知は現在ブロックされています。あとで端末の設定から再度有効にできます。",
|
|
617
627
|
"banner.push.copy.default":
|
|
618
628
|
"バックグラウンドでも承認、プラン、質問、完了に気づけるよう、プッシュ通知を有効にしてください。",
|
|
619
629
|
"install.guide.title": "ホーム画面に追加",
|
|
620
630
|
"install.guide.intro.safari":
|
|
621
|
-
"
|
|
622
|
-
"install.guide.intro.other": "
|
|
631
|
+
"このブラウザではサイト側から直接追加できませんが、数タップでホーム画面に追加できます。",
|
|
632
|
+
"install.guide.intro.other": "ここでホーム画面に追加できない場合は、Safari など対応ブラウザでこのページを開いてください。",
|
|
623
633
|
"install.guide.step.openSafari": "この URL を Safari で開きます。",
|
|
624
634
|
"install.guide.step.tapShare": "共有ボタンをタップします。",
|
|
625
635
|
"install.guide.step.chooseAdd": "「ホーム画面に追加」を選びます。",
|
|
626
636
|
"install.guide.step.tapAdd": "「追加」を押して、新しいアイコンを開きます。",
|
|
627
|
-
"shell.subtitle.settings": "
|
|
637
|
+
"shell.subtitle.settings": "この端末のペアリング、通知、インストール設定です。",
|
|
628
638
|
"shell.subtitle.detail": "いまの流れを途切れさせずに、項目を確認して操作できます。",
|
|
629
639
|
"empty.pending": "いま対応が必要な項目はありません。新しい承認、プラン、選択がここに表示されます。",
|
|
630
640
|
"empty.timeline": "まだタイムライン項目はありません。新しい会話の更新がここに表示されます。",
|
|
631
|
-
"empty.diff": "
|
|
641
|
+
"empty.diff": "いま確認できるファイル変更はありません。",
|
|
632
642
|
"empty.completed": "完了履歴はまだありません。",
|
|
633
643
|
"empty.default": "いま表示できる項目はありません。",
|
|
634
644
|
"detail.selectTitle": "一覧から項目を選んでください",
|
|
@@ -642,7 +652,9 @@ const translations = {
|
|
|
642
652
|
"detail.filesTitle": "関連ファイル",
|
|
643
653
|
"detail.diffTitle": "差分",
|
|
644
654
|
"detail.diffUnavailable": "この変更の差分はまだ利用できません。対象ファイルのみ表示します。",
|
|
645
|
-
"detail.diffThread.copy": ({ count }) =>
|
|
655
|
+
"detail.diffThread.copy": ({ count }) => `このスレッドで変更があるファイルは ${count}件です。下でファイルごとに確認できます。`,
|
|
656
|
+
"detail.diffThread.copy.current": ({ count }) => `このスレッドで現在未ステージの変更があるファイルは ${count}件です。下でファイルごとに確認できます。`,
|
|
657
|
+
"detail.diffThread.copy.latest": ({ count }) => `このスレッドで最後に観測した変更があるファイルは ${count}件です。下でファイルごとに確認できます。`,
|
|
646
658
|
"detail.fileEvent.read": "このステップで確認したファイルです。",
|
|
647
659
|
"detail.fileEvent.write": "このステップで更新したファイルです。",
|
|
648
660
|
"detail.fileEvent.create": "このステップで作成したファイルです。",
|
|
@@ -662,7 +674,7 @@ const translations = {
|
|
|
662
674
|
"reply.imageAddMore": "さらに画像を追加",
|
|
663
675
|
"reply.imageReplace": "画像を差し替え",
|
|
664
676
|
"reply.imageRemove": "削除",
|
|
665
|
-
"reply.imageHint": "
|
|
677
|
+
"reply.imageHint": "この端末の画像を最大 {count} 枚まで添付して、メッセージと一緒に送れます。",
|
|
666
678
|
"reply.imageAttached": "添付した画像",
|
|
667
679
|
"reply.send": "Codex に送信",
|
|
668
680
|
"reply.sendConfirm": "それでも送信",
|
|
@@ -697,14 +709,14 @@ const translations = {
|
|
|
697
709
|
"summary.plan": "Codex が実装を始める前に、提案されたプランを確認します。",
|
|
698
710
|
"summary.choice": "Codex が先へ進むために必要な選択肢を選びます。",
|
|
699
711
|
"summary.fileEvent": "このステップで触れたファイルを確認します。",
|
|
700
|
-
"summary.diffThread": "
|
|
712
|
+
"summary.diffThread": "このスレッドのファイル変更を確認します。",
|
|
701
713
|
"summary.default": "項目を開いて詳細を確認します。",
|
|
702
714
|
"intent.approval": "このリクエストを承認するか拒否します。",
|
|
703
715
|
"intent.plan": "Codex が続行する前にこのプランを確認します。",
|
|
704
716
|
"intent.choice": "Codex が続行できるように回答を選びます。",
|
|
705
717
|
"intent.completed": "完了済みです。結果を確認できます。",
|
|
706
718
|
"intent.fileEvent": "このステップで触れたファイルを確認します。",
|
|
707
|
-
"intent.diffThread": "
|
|
719
|
+
"intent.diffThread": "このスレッドのファイル変更を確認します。",
|
|
708
720
|
"intent.userMessage": "このメッセージを開き直します。",
|
|
709
721
|
"intent.assistantCommentary": "最新の途中経過を確認します。",
|
|
710
722
|
"intent.assistantFinal": "このターンの Codex の最終回答を確認します。",
|
|
@@ -739,35 +751,35 @@ const translations = {
|
|
|
739
751
|
"fileEvent.timeline.rename": ({ count }) => `ファイル名を変更 ${count}件`,
|
|
740
752
|
"diff.threadSummary": ({ count }) => `変更ファイル ${count}件`,
|
|
741
753
|
"diff.latestChange": "最終変更",
|
|
742
|
-
"diff.latestChangeFallback": "
|
|
743
|
-
"settings.intro": "
|
|
754
|
+
"diff.latestChangeFallback": "このスレッドにファイル変更があります。",
|
|
755
|
+
"settings.intro": "この端末のペアリング、言語、インストール状況、Web Push の状態を確認できます。",
|
|
744
756
|
"settings.section.overview": "クイック確認",
|
|
745
757
|
"settings.section.notifications": "通知",
|
|
746
758
|
"settings.section.install": "インストール",
|
|
747
|
-
"settings.section.device": "
|
|
759
|
+
"settings.section.device": "この端末",
|
|
748
760
|
"settings.group.general": "一般",
|
|
749
|
-
"settings.group.device": "
|
|
761
|
+
"settings.group.device": "この端末",
|
|
750
762
|
"settings.group.values": "設定値",
|
|
751
763
|
"settings.group.advanced": "詳細設定",
|
|
752
764
|
"settings.group.actions": "操作",
|
|
753
765
|
"settings.overview.title": "ひと目で確認",
|
|
754
|
-
"settings.overview.copy": "
|
|
766
|
+
"settings.overview.copy": "この端末で準備できていること、まだ必要な設定、次にやることをまとめて確認できます。",
|
|
755
767
|
"settings.summary.notifications": "通知",
|
|
756
768
|
"settings.summary.install": "ホーム画面",
|
|
757
769
|
"settings.summary.pairing": "ペアリング",
|
|
758
770
|
"settings.nextStep.eyebrow": "次の一手",
|
|
759
771
|
"settings.nextStep.enableNotifications.title": "通知を有効にする",
|
|
760
|
-
"settings.nextStep.enableNotifications.copy": "
|
|
772
|
+
"settings.nextStep.enableNotifications.copy": "この端末で Web Push を有効にすると、承認や質問をバックグラウンドでも受け取れます。",
|
|
761
773
|
"settings.nextStep.serverDisabled.title": "サーバー側の設定がまだ必要です",
|
|
762
|
-
"settings.nextStep.serverDisabled.copy": "この viveworker サーバーでは Web Push
|
|
774
|
+
"settings.nextStep.serverDisabled.copy": "この viveworker サーバーでは Web Push がまだ有効ではないため、この端末からは購読できません。",
|
|
763
775
|
"settings.nextStep.openHttps.title": "HTTPS 版を開く",
|
|
764
|
-
"settings.nextStep.openHttps.copy": "
|
|
776
|
+
"settings.nextStep.openHttps.copy": "この端末で通知を有効にするには、このページを HTTPS で開く必要があります。",
|
|
765
777
|
"settings.nextStep.install.title": "ホーム画面に追加する",
|
|
766
|
-
"settings.nextStep.install.copy": "
|
|
778
|
+
"settings.nextStep.install.copy": "アプリをホーム画面に追加し、インストール版を開き直してから通知を有効にしてください。",
|
|
767
779
|
"settings.nextStep.permissionBlocked.title": "通知がブロックされています",
|
|
768
|
-
"settings.nextStep.permissionBlocked.copy": "
|
|
780
|
+
"settings.nextStep.permissionBlocked.copy": "端末の設定で通知を再許可してから、ここへ戻ってもう一度確認してください。",
|
|
769
781
|
"settings.nextStep.test.title": "準備は完了です",
|
|
770
|
-
"settings.nextStep.test.copy": "
|
|
782
|
+
"settings.nextStep.test.copy": "テスト通知を送って、この端末が viveworker の push を受け取れるか確認できます。",
|
|
771
783
|
"settings.status.notAvailable": "未対応",
|
|
772
784
|
"settings.status.unsupported": "非対応",
|
|
773
785
|
"settings.status.needsHttps": "HTTPS が必要",
|
|
@@ -785,7 +797,7 @@ const translations = {
|
|
|
785
797
|
"settings.notifications.serverDisabled": "サーバー側で Web Push がまだ有効化されていません。",
|
|
786
798
|
"settings.notifications.openHttps": "通知を有効にする前に、HTTPS の viveworker を開いてください。",
|
|
787
799
|
"settings.notifications.openHomeScreen":
|
|
788
|
-
"
|
|
800
|
+
"この端末で通知を有効にする前に、ホーム画面に追加したアプリを開いてください。",
|
|
789
801
|
"settings.action.enableNotifications": "通知を有効化",
|
|
790
802
|
"settings.action.disableNotifications": "通知を無効化",
|
|
791
803
|
"settings.action.sendTest": "テスト通知を送信",
|
|
@@ -794,7 +806,7 @@ const translations = {
|
|
|
794
806
|
"settings.action.removeThisDevice": "この端末を削除",
|
|
795
807
|
"settings.install.title": "ホーム画面に追加",
|
|
796
808
|
"settings.install.copy":
|
|
797
|
-
"
|
|
809
|
+
"いちばん使いやすい体験にするには、viveworker をホーム画面に追加して、インストール版を開いてください。",
|
|
798
810
|
"settings.device.title": "Devices",
|
|
799
811
|
"settings.device.copy": "この LAN 上で viveworker を開ける信頼済み端末を管理します。",
|
|
800
812
|
"settings.device.count": ({ count }) => `${count} 台の端末`,
|
|
@@ -804,7 +816,7 @@ const translations = {
|
|
|
804
816
|
"settings.device.emptyCurrent": "この端末の情報はまだ表示できません。",
|
|
805
817
|
"settings.device.emptyOther": "他に有効な信頼済み端末はありません。",
|
|
806
818
|
"settings.device.addAnother.title": "端末を追加する",
|
|
807
|
-
"settings.device.addAnother.heading": "
|
|
819
|
+
"settings.device.addAnother.heading": "新しい端末 / ブラウザを追加",
|
|
808
820
|
"settings.device.addAnother.copy":
|
|
809
821
|
"別の端末を追加したいときだけ、Mac で次のコマンドを実行します。通常の app URL は変わりません。",
|
|
810
822
|
"settings.device.addAnother.commandLabel": "Mac で実行",
|
|
@@ -817,12 +829,12 @@ const translations = {
|
|
|
817
829
|
"settings.device.mode.standalone": "ホーム画面アプリ",
|
|
818
830
|
"settings.device.mode.browser": "ブラウザ",
|
|
819
831
|
"settings.language.title": "言語",
|
|
820
|
-
"settings.language.copy": "
|
|
832
|
+
"settings.language.copy": "この端末で viveworker を表示する言語を選びます。",
|
|
821
833
|
"settings.pairing.title": "ペアリング",
|
|
822
|
-
"settings.pairing.copy": "
|
|
834
|
+
"settings.pairing.copy": "この端末はローカルの Codex desktop session とペアリングされています。",
|
|
823
835
|
"settings.pairing.connected": "ペアリング済み",
|
|
824
836
|
"settings.technical.title": "技術情報",
|
|
825
|
-
"settings.technical.copy": "
|
|
837
|
+
"settings.technical.copy": "この端末の接続状態や通知状態を確認できます。",
|
|
826
838
|
"settings.technical.copyShort": "接続や通知の診断情報です。",
|
|
827
839
|
"settings.row.deviceId": "Device ID",
|
|
828
840
|
"settings.row.pairedAt": "初回ペアリング",
|
|
@@ -849,11 +861,11 @@ const translations = {
|
|
|
849
861
|
"notice.loggedOutKeepTrusted": "ログアウトしました。この端末の信頼は維持されるので、次回は再 pairing なしで戻れます。",
|
|
850
862
|
"notice.loggedOutDeviceRemoved": "ログアウトし、この端末の信頼も削除しました。次回は再 pairing が必要です。",
|
|
851
863
|
"error.networkHint":
|
|
852
|
-
"最新の HTTPS URL
|
|
864
|
+
"最新の HTTPS URL をブラウザで開き直して、必要ならホーム画面アプリを追加し直してください。",
|
|
853
865
|
"error.webPushDisabled": "サーバー側で Web Push が有効ではありません。",
|
|
854
866
|
"error.notificationsRequireHttps": "通知には HTTPS が必要です。",
|
|
855
867
|
"error.pushUnsupported": "このブラウザは Web Push に対応していません。",
|
|
856
|
-
"error.openHomeScreen": "
|
|
868
|
+
"error.openHomeScreen": "この端末で通知を有効にする前に、ホーム画面の viveworker を開いてください。",
|
|
857
869
|
"error.notificationPermission": ({ status }) => `通知権限は ${status} です。`,
|
|
858
870
|
"error.pushServerNotReady": "サーバー側で Web Push の準備ができていません。",
|
|
859
871
|
"error.serviceWorkerUnavailable": "Service Worker は利用できません。",
|
|
@@ -902,7 +914,7 @@ const translations = {
|
|
|
902
914
|
"server.message.fileApprovalNeeded": "ファイル変更の承認が必要です。",
|
|
903
915
|
"server.message.commandPrefix": ({ command }) => `Command: ${command}`,
|
|
904
916
|
"server.message.pathPrefix": ({ path }) => `Path: ${path}`,
|
|
905
|
-
"server.message.approveOnMac": "Mac で承認してください:
|
|
917
|
+
"server.message.approveOnMac": "Mac で承認してください: この端末の通知は codex.app の鏡像です。",
|
|
906
918
|
"server.message.approvalNeededInCodex": "Codex で承認が必要です。",
|
|
907
919
|
"server.message.extraApprovals": ({ count }) => `追加の承認: ${count}`,
|
|
908
920
|
"server.message.taskFinished": "タスクが完了しました。",
|
|
@@ -920,7 +932,7 @@ const translations = {
|
|
|
920
932
|
"server.confirm.approve": "この承認を確定して Codex を続行します。",
|
|
921
933
|
"server.confirm.reject": "この操作を拒否して Codex に続行しないよう伝えます。",
|
|
922
934
|
"server.pushTest.title": "viveworker テスト通知",
|
|
923
|
-
"server.pushTest.body": "
|
|
935
|
+
"server.pushTest.body": "この端末で通知が動作しています。",
|
|
924
936
|
"server.page.notFoundTitle": "見つかりません",
|
|
925
937
|
"server.page.notFoundBody": "この承認リンクは存在しません。",
|
|
926
938
|
"server.page.notFoundHint": "このページは閉じて大丈夫です。",
|
|
@@ -963,18 +975,18 @@ const translations = {
|
|
|
963
975
|
"cli.setup.webPushEnabled": "Web Push: enabled (HTTPS)",
|
|
964
976
|
"cli.setup.webPushDisabled": "Web Push: disabled",
|
|
965
977
|
"cli.setup.completePending": "viveworker の setup は完了しましたが、まだ health 応答は確認できていません。",
|
|
966
|
-
"cli.setup.caFlow.title": "
|
|
967
|
-
"cli.setup.caFlow.step1": "1. 下の CA download URL を開くか QR
|
|
968
|
-
"cli.setup.caFlow.step2": "2. rootCA.pem
|
|
978
|
+
"cli.setup.caFlow.title": "端末で viveworker を開く前に、必要ならローカルの証明書をインストールしてください:",
|
|
979
|
+
"cli.setup.caFlow.step1": "1. 下の CA download URL を開くか QR を読み取り、端末で rootCA.pem を取得します。",
|
|
980
|
+
"cli.setup.caFlow.step2": "2. rootCA.pem をインストールし、必要なら端末側でその証明書を信頼します。",
|
|
969
981
|
"cli.setup.caFlow.step3": "3. そのあと、このターミナルで Enter を押すと viveworker の接続先 URL と Pairing QR を表示します。",
|
|
970
982
|
"cli.setup.instructions.https":
|
|
971
|
-
"
|
|
983
|
+
"ブラウザで HTTPS URL を開き、必要ならローカル CA を信頼してから、ホーム画面に追加して通知を有効にしてください。",
|
|
972
984
|
"cli.setup.instructions.afterCa":
|
|
973
|
-
"
|
|
985
|
+
"次に端末のブラウザで Pairing URL を開き、必要ならペアリングしてから、viveworker をホーム画面に追加してください。",
|
|
974
986
|
"cli.setup.instructions.insecureHttpLan":
|
|
975
|
-
"HTTP URL は、LAN
|
|
987
|
+
"HTTP URL は、LAN 上の平文アクセスを明示的に許可した場合だけブラウザで開いてください。共有 Wi-Fi では非推奨です。",
|
|
976
988
|
"cli.setup.instructions.localOnlyHttp":
|
|
977
|
-
"この setup はローカル開発用の loopback-only HTTP
|
|
989
|
+
"この setup はローカル開発用の loopback-only HTTP です。別の端末から使うなら既定の HTTPS setup か --allow-insecure-http-lan を使ってください。",
|
|
978
990
|
"logout.confirm.title": "ログアウト方法を選んでください",
|
|
979
991
|
"logout.confirm.copy": "session だけ終えることも、この端末の信頼ごと削除して次回 pairing 必須にすることもできます。",
|
|
980
992
|
"logout.confirm.keepTrustedTitle": "ログアウトのみ",
|
|
@@ -990,6 +1002,12 @@ const translations = {
|
|
|
990
1002
|
"cli.setup.qrPairing": "Pairing QR:",
|
|
991
1003
|
"cli.setup.qrCaDownload": "rootCA.pem download QR (IP):",
|
|
992
1004
|
"cli.setup.prompt.continueToApp": "viveworker の接続先 URL を表示するには Enter を押してください。",
|
|
1005
|
+
"cli.setup.error.mkcertInstallFailed": "Homebrew で mkcert をインストールできませんでした。",
|
|
1006
|
+
"cli.setup.error.mkcertInstallPermission":
|
|
1007
|
+
"Homebrew は見つかりましたが、その prefix に現在のユーザーの書き込み権限がないため、viveworker が mkcert を自動インストールできませんでした。",
|
|
1008
|
+
"cli.setup.error.mkcertInstallNext":
|
|
1009
|
+
"`npx viveworker setup --install-mkcert` をやり直す前に Homebrew の権限を直すか、先に mkcert を手動でインストールしてください。",
|
|
1010
|
+
"cli.setup.error.mkcertInstallExample": "例: brew install mkcert && mkcert -install",
|
|
993
1011
|
"cli.start.progress.prepare": "保存済みの viveworker 設定を読み込んでいます...",
|
|
994
1012
|
"cli.start.progress.refreshPairing": "期限切れの pairing 情報を更新しています...",
|
|
995
1013
|
"cli.start.progress.launchd": "launchd サービスを起動しています...",
|