viveworker 0.8.5 → 0.8.7
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/package.json +18 -10
- package/scripts/a2a-cli.mjs +21 -4
- package/scripts/share-cli.mjs +322 -41
- package/scripts/viveworker-bridge.mjs +582 -67
- package/scripts/viveworker.mjs +11 -7
- package/web/app.css +195 -0
- package/web/app.js +1027 -239
- package/web/build-id.js +1 -1
- package/web/i18n.js +114 -18
- package/web/remote-pairing/transport.js +15 -3
- package/web/sw.js +4 -0
package/scripts/viveworker.mjs
CHANGED
|
@@ -210,7 +210,7 @@ async function runSetup(cliOptions) {
|
|
|
210
210
|
: null;
|
|
211
211
|
|
|
212
212
|
progress.update("cli.setup.progress.writeConfig");
|
|
213
|
-
await fs.mkdir(path.dirname(envFile), { recursive: true });
|
|
213
|
+
await fs.mkdir(path.dirname(envFile), { recursive: true, mode: 0o700 });
|
|
214
214
|
await fs.mkdir(path.dirname(logFile), { recursive: true });
|
|
215
215
|
|
|
216
216
|
const envLines = [
|
|
@@ -248,7 +248,8 @@ async function runSetup(cliOptions) {
|
|
|
248
248
|
enableNtfy && existing.NTFY_ACCESS_TOKEN ? `NTFY_ACCESS_TOKEN=${existing.NTFY_ACCESS_TOKEN}` : null,
|
|
249
249
|
].filter(Boolean);
|
|
250
250
|
|
|
251
|
-
await fs.writeFile(envFile, `${envLines.join("\n")}\n`,
|
|
251
|
+
await fs.writeFile(envFile, `${envLines.join("\n")}\n`, { mode: 0o600 });
|
|
252
|
+
await fs.chmod(envFile, 0o600).catch(() => {});
|
|
252
253
|
|
|
253
254
|
progress.update("cli.setup.progress.providers");
|
|
254
255
|
const providerSetup = await autoConfigureProvidersDuringSetup({
|
|
@@ -1455,8 +1456,9 @@ async function refreshPairingCredentials(envFile, config = {}, { force = false }
|
|
|
1455
1456
|
PAIRING_TOKEN: nextPairing.pairingToken,
|
|
1456
1457
|
PAIRING_EXPIRES_AT_MS: String(nextPairing.pairingExpiresAtMs),
|
|
1457
1458
|
});
|
|
1458
|
-
await fs.mkdir(path.dirname(envFile), { recursive: true });
|
|
1459
|
-
await fs.writeFile(envFile, nextText,
|
|
1459
|
+
await fs.mkdir(path.dirname(envFile), { recursive: true, mode: 0o700 });
|
|
1460
|
+
await fs.writeFile(envFile, nextText, { mode: 0o600 });
|
|
1461
|
+
await fs.chmod(envFile, 0o600).catch(() => {});
|
|
1460
1462
|
|
|
1461
1463
|
return {
|
|
1462
1464
|
rotated: true,
|
|
@@ -1604,7 +1606,8 @@ async function repairDoctorIssues(cliOptions, { envFile, config, locale, hostnam
|
|
|
1604
1606
|
|
|
1605
1607
|
const currentText = (await fileExists(envFile)) ? await fs.readFile(envFile, "utf8") : "";
|
|
1606
1608
|
const nextText = upsertEnvText(currentText, updates);
|
|
1607
|
-
await fs.writeFile(envFile, nextText,
|
|
1609
|
+
await fs.writeFile(envFile, nextText, { mode: 0o600 });
|
|
1610
|
+
await fs.chmod(envFile, 0o600).catch(() => {});
|
|
1608
1611
|
return changed;
|
|
1609
1612
|
}
|
|
1610
1613
|
|
|
@@ -2059,8 +2062,9 @@ async function maybeRotateStartupPairing(envFile, config = {}) {
|
|
|
2059
2062
|
PAIRING_TOKEN: nextPairing.pairingToken,
|
|
2060
2063
|
PAIRING_EXPIRES_AT_MS: String(nextPairing.pairingExpiresAtMs),
|
|
2061
2064
|
});
|
|
2062
|
-
await fs.mkdir(path.dirname(envFile), { recursive: true });
|
|
2063
|
-
await fs.writeFile(envFile, nextText,
|
|
2065
|
+
await fs.mkdir(path.dirname(envFile), { recursive: true, mode: 0o700 });
|
|
2066
|
+
await fs.writeFile(envFile, nextText, { mode: 0o600 });
|
|
2067
|
+
await fs.chmod(envFile, 0o600).catch(() => {});
|
|
2064
2068
|
|
|
2065
2069
|
return {
|
|
2066
2070
|
rotated: true,
|
package/web/app.css
CHANGED
|
@@ -1061,6 +1061,69 @@ pre code {
|
|
|
1061
1061
|
text-align: left;
|
|
1062
1062
|
}
|
|
1063
1063
|
|
|
1064
|
+
.wallet-agent-defaults-summary-wrap {
|
|
1065
|
+
min-width: 0;
|
|
1066
|
+
max-width: min(100%, 15.5rem);
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
.wallet-agent-defaults-summary-button {
|
|
1070
|
+
max-width: 100%;
|
|
1071
|
+
display: inline-flex;
|
|
1072
|
+
align-items: center;
|
|
1073
|
+
justify-content: flex-end;
|
|
1074
|
+
gap: 0.32rem;
|
|
1075
|
+
min-width: 0;
|
|
1076
|
+
padding: 0;
|
|
1077
|
+
border: 0;
|
|
1078
|
+
background: transparent;
|
|
1079
|
+
color: inherit;
|
|
1080
|
+
cursor: pointer;
|
|
1081
|
+
-webkit-tap-highlight-color: transparent;
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
.wallet-agent-default-pill {
|
|
1085
|
+
min-width: 0;
|
|
1086
|
+
display: inline-flex;
|
|
1087
|
+
align-items: center;
|
|
1088
|
+
min-height: 1.62rem;
|
|
1089
|
+
padding: 0.16rem 0.52rem;
|
|
1090
|
+
border-radius: 999px;
|
|
1091
|
+
border: 1px solid rgba(112, 202, 157, 0.24);
|
|
1092
|
+
background: rgba(112, 202, 157, 0.12);
|
|
1093
|
+
color: rgba(185, 239, 208, 0.96);
|
|
1094
|
+
font-size: 0.74rem;
|
|
1095
|
+
font-weight: 800;
|
|
1096
|
+
letter-spacing: 0.04em;
|
|
1097
|
+
line-height: 1;
|
|
1098
|
+
text-transform: uppercase;
|
|
1099
|
+
overflow: hidden;
|
|
1100
|
+
text-overflow: ellipsis;
|
|
1101
|
+
white-space: nowrap;
|
|
1102
|
+
}
|
|
1103
|
+
|
|
1104
|
+
.wallet-agent-default-more {
|
|
1105
|
+
flex: 0 0 auto;
|
|
1106
|
+
display: inline-flex;
|
|
1107
|
+
align-items: center;
|
|
1108
|
+
justify-content: center;
|
|
1109
|
+
min-height: 1.62rem;
|
|
1110
|
+
padding: 0.16rem 0.46rem;
|
|
1111
|
+
border-radius: 999px;
|
|
1112
|
+
border: 1px solid rgba(121, 196, 255, 0.22);
|
|
1113
|
+
background: rgba(121, 196, 255, 0.1);
|
|
1114
|
+
color: rgba(198, 232, 255, 0.96);
|
|
1115
|
+
font-size: 0.74rem;
|
|
1116
|
+
font-weight: 800;
|
|
1117
|
+
letter-spacing: 0.03em;
|
|
1118
|
+
line-height: 1;
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
.wallet-agent-defaults-summary-button:focus-visible {
|
|
1122
|
+
outline: 2px solid rgba(121, 196, 255, 0.55);
|
|
1123
|
+
outline-offset: 3px;
|
|
1124
|
+
border-radius: 999px;
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1064
1127
|
.settings-info-row__value--mono {
|
|
1065
1128
|
font-family: ui-monospace, SFMono-Regular, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
1066
1129
|
font-size: 0.82rem;
|
|
@@ -1122,6 +1185,17 @@ pre code {
|
|
|
1122
1185
|
color: #79c4ff;
|
|
1123
1186
|
}
|
|
1124
1187
|
|
|
1188
|
+
.settings-choice-row__input {
|
|
1189
|
+
width: 1.05rem;
|
|
1190
|
+
height: 1.05rem;
|
|
1191
|
+
margin: 0;
|
|
1192
|
+
accent-color: #70ca9d;
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
.settings-choice-row--checkbox {
|
|
1196
|
+
cursor: pointer;
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1125
1199
|
.settings-copy-block {
|
|
1126
1200
|
padding: 0.95rem 1rem;
|
|
1127
1201
|
}
|
|
@@ -1451,6 +1525,68 @@ pre code {
|
|
|
1451
1525
|
line-height: 1.5;
|
|
1452
1526
|
}
|
|
1453
1527
|
|
|
1528
|
+
.wallet-agent-draft-notice {
|
|
1529
|
+
border-color: rgba(240, 180, 40, 0.18);
|
|
1530
|
+
background: rgba(42, 34, 22, 0.52);
|
|
1531
|
+
}
|
|
1532
|
+
|
|
1533
|
+
.wallet-agent-draft-notice p {
|
|
1534
|
+
color: rgba(255, 220, 140, 0.9);
|
|
1535
|
+
font-size: 0.84rem;
|
|
1536
|
+
line-height: 1.5;
|
|
1537
|
+
}
|
|
1538
|
+
|
|
1539
|
+
.app-toast {
|
|
1540
|
+
position: fixed;
|
|
1541
|
+
left: 50%;
|
|
1542
|
+
bottom: max(1rem, calc(env(safe-area-inset-bottom, 0px) + 0.9rem));
|
|
1543
|
+
z-index: 80;
|
|
1544
|
+
display: grid;
|
|
1545
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
1546
|
+
align-items: center;
|
|
1547
|
+
gap: 0.68rem;
|
|
1548
|
+
width: min(calc(100vw - 2rem), 28rem);
|
|
1549
|
+
padding: 0.78rem 0.92rem;
|
|
1550
|
+
border: 1px solid rgba(112, 202, 157, 0.3);
|
|
1551
|
+
border-radius: 18px;
|
|
1552
|
+
background: linear-gradient(135deg, rgba(24, 41, 34, 0.98), rgba(18, 27, 31, 0.98));
|
|
1553
|
+
box-shadow: 0 18px 44px rgba(0, 0, 0, 0.36), 0 0 0 1px rgba(255, 255, 255, 0.04) inset;
|
|
1554
|
+
color: #ecfff5;
|
|
1555
|
+
transform: translateX(-50%);
|
|
1556
|
+
}
|
|
1557
|
+
|
|
1558
|
+
.app-toast--error {
|
|
1559
|
+
border-color: rgba(255, 140, 140, 0.28);
|
|
1560
|
+
background: linear-gradient(135deg, rgba(55, 28, 31, 0.98), rgba(22, 28, 33, 0.98));
|
|
1561
|
+
color: #fff0f0;
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
.app-toast__icon {
|
|
1565
|
+
width: 1.4rem;
|
|
1566
|
+
height: 1.4rem;
|
|
1567
|
+
display: inline-flex;
|
|
1568
|
+
align-items: center;
|
|
1569
|
+
justify-content: center;
|
|
1570
|
+
color: #7fe0a8;
|
|
1571
|
+
}
|
|
1572
|
+
|
|
1573
|
+
.app-toast--error .app-toast__icon {
|
|
1574
|
+
color: #ff9e9e;
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
.app-toast__icon svg {
|
|
1578
|
+
width: 100%;
|
|
1579
|
+
height: 100%;
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1582
|
+
.app-toast__message {
|
|
1583
|
+
min-width: 0;
|
|
1584
|
+
font-size: 0.9rem;
|
|
1585
|
+
font-weight: 700;
|
|
1586
|
+
line-height: 1.45;
|
|
1587
|
+
overflow-wrap: anywhere;
|
|
1588
|
+
}
|
|
1589
|
+
|
|
1454
1590
|
.settings-update-notice {
|
|
1455
1591
|
margin-top: 0.85rem;
|
|
1456
1592
|
border-color: rgba(121, 196, 255, 0.22);
|
|
@@ -1503,6 +1639,12 @@ pre code {
|
|
|
1503
1639
|
outline: none;
|
|
1504
1640
|
}
|
|
1505
1641
|
|
|
1642
|
+
.wallet-agent-actions {
|
|
1643
|
+
display: grid;
|
|
1644
|
+
gap: 0.65rem;
|
|
1645
|
+
padding: 0.8rem;
|
|
1646
|
+
}
|
|
1647
|
+
|
|
1506
1648
|
/* Wraps the banner + notice + step list on the wallet settings page.
|
|
1507
1649
|
Pulled out of `renderSettingsGroup`'s `.settings-list` so each child card
|
|
1508
1650
|
renders on the page background instead of nested inside another frame. */
|
|
@@ -1749,6 +1891,22 @@ pre code {
|
|
|
1749
1891
|
box-shadow: 0 0 0 3px rgba(47, 143, 103, 0.22);
|
|
1750
1892
|
}
|
|
1751
1893
|
|
|
1894
|
+
.wallet-step-card__field-input--error {
|
|
1895
|
+
border-color: rgba(255, 140, 140, 0.55);
|
|
1896
|
+
background: rgba(53, 26, 29, 0.42);
|
|
1897
|
+
}
|
|
1898
|
+
|
|
1899
|
+
.wallet-step-card__field-input--error:focus {
|
|
1900
|
+
border-color: rgba(255, 165, 165, 0.78);
|
|
1901
|
+
box-shadow: 0 0 0 3px rgba(255, 92, 92, 0.16);
|
|
1902
|
+
}
|
|
1903
|
+
|
|
1904
|
+
.wallet-step-card__field-error {
|
|
1905
|
+
color: #ffb6b6;
|
|
1906
|
+
font-size: 0.78rem;
|
|
1907
|
+
line-height: 1.4;
|
|
1908
|
+
}
|
|
1909
|
+
|
|
1752
1910
|
.wallet-step-card__field-input--mono {
|
|
1753
1911
|
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
1754
1912
|
letter-spacing: 0.14em;
|
|
@@ -5050,6 +5208,43 @@ button:disabled {
|
|
|
5050
5208
|
gap: 0.9rem;
|
|
5051
5209
|
}
|
|
5052
5210
|
|
|
5211
|
+
.modal-card--wallet-defaults {
|
|
5212
|
+
display: grid;
|
|
5213
|
+
gap: 0.9rem;
|
|
5214
|
+
}
|
|
5215
|
+
|
|
5216
|
+
.wallet-agent-defaults-modal-list {
|
|
5217
|
+
display: grid;
|
|
5218
|
+
overflow: hidden;
|
|
5219
|
+
border: 1px solid rgba(156, 181, 197, 0.1);
|
|
5220
|
+
border-radius: 18px;
|
|
5221
|
+
background: rgba(255, 255, 255, 0.03);
|
|
5222
|
+
}
|
|
5223
|
+
|
|
5224
|
+
.wallet-agent-defaults-modal-row {
|
|
5225
|
+
display: grid;
|
|
5226
|
+
gap: 0.22rem;
|
|
5227
|
+
padding: 0.85rem 0.92rem;
|
|
5228
|
+
}
|
|
5229
|
+
|
|
5230
|
+
.wallet-agent-defaults-modal-row + .wallet-agent-defaults-modal-row {
|
|
5231
|
+
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
|
5232
|
+
}
|
|
5233
|
+
|
|
5234
|
+
.wallet-agent-defaults-modal-title {
|
|
5235
|
+
color: var(--text);
|
|
5236
|
+
font-size: 0.98rem;
|
|
5237
|
+
font-weight: 760;
|
|
5238
|
+
line-height: 1.35;
|
|
5239
|
+
}
|
|
5240
|
+
|
|
5241
|
+
.wallet-agent-defaults-modal-meta {
|
|
5242
|
+
color: var(--muted);
|
|
5243
|
+
font-size: 0.84rem;
|
|
5244
|
+
line-height: 1.35;
|
|
5245
|
+
overflow-wrap: anywhere;
|
|
5246
|
+
}
|
|
5247
|
+
|
|
5053
5248
|
.logout-option {
|
|
5054
5249
|
display: grid;
|
|
5055
5250
|
gap: 0.8rem;
|