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.
@@ -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`, "utf8");
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, "utf8");
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, "utf8");
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, "utf8");
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;