@awiki/dsh-plugin 0.3.7 → 0.3.11-rc.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.
Files changed (227) hide show
  1. package/README.md +112 -73
  2. package/README.zh.md +91 -62
  3. package/THIRD_PARTY_NOTICES.md +1 -1
  4. package/cordis.patch.yml +6 -5
  5. package/lib/builtin-tenants.json +22 -0
  6. package/lib/builtin-tenants.sha256 +1 -0
  7. package/lib/client.js +9281 -2379
  8. package/lib/client.js.map +1 -1
  9. package/lib/index.js +3553 -1138
  10. package/lib/model-proxy-contract.js +19 -11
  11. package/lib/provider.js +73 -17
  12. package/lib/{sdk-adapter--trNlr-T.mjs → sdk-adapter-CYcJH7sM.mjs} +374 -101
  13. package/lib/typert.host.js +1595 -168
  14. package/lib/typert.remote-client.d.ts +43 -7
  15. package/lib/typert.remote-client.d.ts.map +1 -1
  16. package/lib/typert.remote-client.js +1595 -168
  17. package/lib/types/builtin-tenant-config.d.ts +19 -0
  18. package/lib/types/builtin-tenant-config.d.ts.map +1 -0
  19. package/lib/types/builtin-tenant-config.js +57 -0
  20. package/lib/types/builtin-tenant-config.js.map +1 -0
  21. package/lib/types/client/AwikiDeviceJoinReminder.d.ts +15 -0
  22. package/lib/types/client/AwikiDeviceJoinReminder.d.ts.map +1 -0
  23. package/lib/types/client/AwikiDeviceJoinReminder.js +74 -0
  24. package/lib/types/client/AwikiDeviceJoinReminder.js.map +1 -0
  25. package/lib/types/client/AwikiDevices.d.ts +33 -0
  26. package/lib/types/client/AwikiDevices.d.ts.map +1 -0
  27. package/lib/types/client/AwikiDevices.js +141 -0
  28. package/lib/types/client/AwikiDevices.js.map +1 -0
  29. package/lib/types/client/AwikiGroupDetails.d.ts.map +1 -1
  30. package/lib/types/client/AwikiGroupDetails.js +16 -13
  31. package/lib/types/client/AwikiGroupDetails.js.map +1 -1
  32. package/lib/types/client/AwikiIdentityAccess.d.ts +17 -8
  33. package/lib/types/client/AwikiIdentityAccess.d.ts.map +1 -1
  34. package/lib/types/client/AwikiIdentityAccess.js +269 -37
  35. package/lib/types/client/AwikiIdentityAccess.js.map +1 -1
  36. package/lib/types/client/AwikiIntegrationSettings.d.ts +21 -0
  37. package/lib/types/client/AwikiIntegrationSettings.d.ts.map +1 -0
  38. package/lib/types/client/AwikiIntegrationSettings.js +105 -0
  39. package/lib/types/client/AwikiIntegrationSettings.js.map +1 -0
  40. package/lib/types/client/AwikiMail.d.ts +1 -1
  41. package/lib/types/client/AwikiMail.d.ts.map +1 -1
  42. package/lib/types/client/AwikiMail.js +17 -137
  43. package/lib/types/client/AwikiMail.js.map +1 -1
  44. package/lib/types/client/AwikiOverlay.d.ts +0 -1
  45. package/lib/types/client/AwikiOverlay.d.ts.map +1 -1
  46. package/lib/types/client/AwikiOverlay.js +26 -28
  47. package/lib/types/client/AwikiOverlay.js.map +1 -1
  48. package/lib/types/client/AwikiProfileCard.d.ts.map +1 -1
  49. package/lib/types/client/AwikiProfileCard.js +17 -18
  50. package/lib/types/client/AwikiProfileCard.js.map +1 -1
  51. package/lib/types/client/AwikiRecoveryForm.d.ts +6 -1
  52. package/lib/types/client/AwikiRecoveryForm.d.ts.map +1 -1
  53. package/lib/types/client/AwikiRecoveryForm.js +74 -30
  54. package/lib/types/client/AwikiRecoveryForm.js.map +1 -1
  55. package/lib/types/client/AwikiSettingsSection.d.ts +28 -13
  56. package/lib/types/client/AwikiSettingsSection.d.ts.map +1 -1
  57. package/lib/types/client/AwikiSettingsSection.js +93 -61
  58. package/lib/types/client/AwikiSettingsSection.js.map +1 -1
  59. package/lib/types/client/AwikiUpdates.d.ts +10 -0
  60. package/lib/types/client/AwikiUpdates.d.ts.map +1 -0
  61. package/lib/types/client/AwikiUpdates.js +57 -0
  62. package/lib/types/client/AwikiUpdates.js.map +1 -0
  63. package/lib/types/client/awiki-client-bridge.d.ts +2 -2
  64. package/lib/types/client/awiki-client-bridge.d.ts.map +1 -1
  65. package/lib/types/client/awiki-client-bridge.js +4 -1
  66. package/lib/types/client/awiki-client-bridge.js.map +1 -1
  67. package/lib/types/client/controller.d.ts +92 -44
  68. package/lib/types/client/controller.d.ts.map +1 -1
  69. package/lib/types/client/controller.js +761 -334
  70. package/lib/types/client/controller.js.map +1 -1
  71. package/lib/types/client/drafts.d.ts +31 -0
  72. package/lib/types/client/drafts.d.ts.map +1 -0
  73. package/lib/types/client/drafts.js +94 -0
  74. package/lib/types/client/drafts.js.map +1 -0
  75. package/lib/types/client/image-cache.d.ts +2 -2
  76. package/lib/types/client/image-cache.d.ts.map +1 -1
  77. package/lib/types/client/image-cache.js +15 -2
  78. package/lib/types/client/image-cache.js.map +1 -1
  79. package/lib/types/client/index.d.ts +1 -1
  80. package/lib/types/client/index.d.ts.map +1 -1
  81. package/lib/types/client/index.js +64 -19
  82. package/lib/types/client/index.js.map +1 -1
  83. package/lib/types/client/integration-operation.d.ts +9 -0
  84. package/lib/types/client/integration-operation.d.ts.map +1 -0
  85. package/lib/types/client/integration-operation.js +54 -0
  86. package/lib/types/client/integration-operation.js.map +1 -0
  87. package/lib/types/client/mail-list-cache.d.ts +2 -0
  88. package/lib/types/client/mail-list-cache.d.ts.map +1 -1
  89. package/lib/types/client/mail-list-cache.js +18 -0
  90. package/lib/types/client/mail-list-cache.js.map +1 -1
  91. package/lib/types/client/otp-cooldown.d.ts +7 -0
  92. package/lib/types/client/otp-cooldown.d.ts.map +1 -0
  93. package/lib/types/client/otp-cooldown.js +29 -0
  94. package/lib/types/client/otp-cooldown.js.map +1 -0
  95. package/lib/types/client/settings-controller.d.ts +38 -2
  96. package/lib/types/client/settings-controller.d.ts.map +1 -1
  97. package/lib/types/client/settings-controller.js +206 -10
  98. package/lib/types/client/settings-controller.js.map +1 -1
  99. package/lib/types/client/settings-locales.d.ts +1 -1
  100. package/lib/types/client/settings-locales.d.ts.map +1 -1
  101. package/lib/types/client/settings-locales.js +192 -14
  102. package/lib/types/client/settings-locales.js.map +1 -1
  103. package/lib/types/client/slots.d.ts +21 -10
  104. package/lib/types/client/slots.d.ts.map +1 -1
  105. package/lib/types/client/slots.js +0 -1
  106. package/lib/types/client/slots.js.map +1 -1
  107. package/lib/types/client/store.d.ts +1 -1
  108. package/lib/types/client/store.d.ts.map +1 -1
  109. package/lib/types/client/store.js +1 -1
  110. package/lib/types/client/store.js.map +1 -1
  111. package/lib/types/conversation-preferences.d.ts.map +1 -1
  112. package/lib/types/conversation-preferences.js +0 -17
  113. package/lib/types/conversation-preferences.js.map +1 -1
  114. package/lib/types/desktop-distribution.d.ts +25 -0
  115. package/lib/types/desktop-distribution.d.ts.map +1 -0
  116. package/lib/types/desktop-distribution.js +57 -0
  117. package/lib/types/desktop-distribution.js.map +1 -0
  118. package/lib/types/domain.d.ts +1 -1
  119. package/lib/types/domain.d.ts.map +1 -1
  120. package/lib/types/domain.js +2 -1
  121. package/lib/types/domain.js.map +1 -1
  122. package/lib/types/index.d.ts +165 -41
  123. package/lib/types/index.d.ts.map +1 -1
  124. package/lib/types/index.js +1594 -535
  125. package/lib/types/index.js.map +1 -1
  126. package/lib/types/integration-client.d.ts +17 -0
  127. package/lib/types/integration-client.d.ts.map +1 -0
  128. package/lib/types/integration-client.js +233 -0
  129. package/lib/types/integration-client.js.map +1 -0
  130. package/lib/types/legacy-sent-mail-cache.d.ts +4 -0
  131. package/lib/types/legacy-sent-mail-cache.d.ts.map +1 -0
  132. package/lib/types/legacy-sent-mail-cache.js +29 -0
  133. package/lib/types/legacy-sent-mail-cache.js.map +1 -0
  134. package/lib/types/listener-state.d.ts +5 -3
  135. package/lib/types/listener-state.d.ts.map +1 -1
  136. package/lib/types/listener-state.js +28 -13
  137. package/lib/types/listener-state.js.map +1 -1
  138. package/lib/types/listener.d.ts +9 -32
  139. package/lib/types/listener.d.ts.map +1 -1
  140. package/lib/types/listener.js +13 -128
  141. package/lib/types/listener.js.map +1 -1
  142. package/lib/types/mail-list-client.d.ts +12 -0
  143. package/lib/types/mail-list-client.d.ts.map +1 -0
  144. package/lib/types/mail-list-client.js +254 -0
  145. package/lib/types/mail-list-client.js.map +1 -0
  146. package/lib/types/mail-recovery-observability.d.ts +8 -0
  147. package/lib/types/mail-recovery-observability.d.ts.map +1 -0
  148. package/lib/types/mail-recovery-observability.js +119 -0
  149. package/lib/types/mail-recovery-observability.js.map +1 -0
  150. package/lib/types/mail.d.ts +2 -28
  151. package/lib/types/mail.d.ts.map +1 -1
  152. package/lib/types/mail.js +2 -79
  153. package/lib/types/mail.js.map +1 -1
  154. package/lib/types/model-proxy-contract.d.ts +8 -8
  155. package/lib/types/model-proxy-contract.d.ts.map +1 -1
  156. package/lib/types/model-proxy-contract.js +15 -8
  157. package/lib/types/model-proxy-contract.js.map +1 -1
  158. package/lib/types/package-version.generated.d.ts +4 -0
  159. package/lib/types/package-version.generated.d.ts.map +1 -0
  160. package/lib/types/package-version.generated.js +4 -0
  161. package/lib/types/package-version.generated.js.map +1 -0
  162. package/lib/types/profile-state.d.ts +2 -13
  163. package/lib/types/profile-state.d.ts.map +1 -1
  164. package/lib/types/profile-state.js +3 -20
  165. package/lib/types/profile-state.js.map +1 -1
  166. package/lib/types/provider-api.d.ts +134 -43
  167. package/lib/types/provider-api.d.ts.map +1 -1
  168. package/lib/types/provider.d.ts +8 -2
  169. package/lib/types/provider.d.ts.map +1 -1
  170. package/lib/types/provider.js +76 -16
  171. package/lib/types/provider.js.map +1 -1
  172. package/lib/types/realtime-supervisor.d.ts +60 -0
  173. package/lib/types/realtime-supervisor.d.ts.map +1 -0
  174. package/lib/types/realtime-supervisor.js +255 -0
  175. package/lib/types/realtime-supervisor.js.map +1 -0
  176. package/lib/types/registration-policy.d.ts +7 -0
  177. package/lib/types/registration-policy.d.ts.map +1 -0
  178. package/lib/types/registration-policy.js +21 -0
  179. package/lib/types/registration-policy.js.map +1 -0
  180. package/lib/types/sdk-adapter.d.ts +62 -11
  181. package/lib/types/sdk-adapter.d.ts.map +1 -1
  182. package/lib/types/sdk-adapter.js +285 -123
  183. package/lib/types/sdk-adapter.js.map +1 -1
  184. package/lib/types/settings-rpc-contract.d.ts +63 -5
  185. package/lib/types/settings-rpc-contract.d.ts.map +1 -1
  186. package/lib/types/settings-rpc-contract.js +108 -5
  187. package/lib/types/settings-rpc-contract.js.map +1 -1
  188. package/lib/types/settings-rpc.d.ts +14 -1
  189. package/lib/types/settings-rpc.d.ts.map +1 -1
  190. package/lib/types/settings-rpc.js +132 -3
  191. package/lib/types/settings-rpc.js.map +1 -1
  192. package/lib/types/settings-transport.d.ts +7 -0
  193. package/lib/types/settings-transport.d.ts.map +1 -0
  194. package/lib/types/settings-transport.js +52 -0
  195. package/lib/types/settings-transport.js.map +1 -0
  196. package/lib/types/tenant-registry.d.ts +74 -0
  197. package/lib/types/tenant-registry.d.ts.map +1 -0
  198. package/lib/types/tenant-registry.js +440 -0
  199. package/lib/types/tenant-registry.js.map +1 -0
  200. package/lib/types/tools.d.ts +1 -1
  201. package/lib/types/tools.d.ts.map +1 -1
  202. package/lib/types/tools.js +4 -20
  203. package/lib/types/tools.js.map +1 -1
  204. package/lib/types/types.d.ts +249 -66
  205. package/lib/types/types.d.ts.map +1 -1
  206. package/lib/types/types.js.map +1 -1
  207. package/lib/types/update-policy.d.ts +51 -0
  208. package/lib/types/update-policy.d.ts.map +1 -0
  209. package/lib/types/update-policy.js +379 -0
  210. package/lib/types/update-policy.js.map +1 -0
  211. package/lib/types/version.d.ts +4 -0
  212. package/lib/types/version.d.ts.map +1 -0
  213. package/lib/types/version.js +44 -0
  214. package/lib/types/version.js.map +1 -0
  215. package/package.json +88 -61
  216. package/lib/types/base64.d.ts +0 -4
  217. package/lib/types/base64.d.ts.map +0 -1
  218. package/lib/types/base64.js +0 -28
  219. package/lib/types/base64.js.map +0 -1
  220. package/lib/types/client/mail-attachment.d.ts +0 -40
  221. package/lib/types/client/mail-attachment.d.ts.map +0 -1
  222. package/lib/types/client/mail-attachment.js +0 -187
  223. package/lib/types/client/mail-attachment.js.map +0 -1
  224. package/lib/types/sent-mail-store.d.ts +0 -27
  225. package/lib/types/sent-mail-store.d.ts.map +0 -1
  226. package/lib/types/sent-mail-store.js +0 -348
  227. package/lib/types/sent-mail-store.js.map +0 -1
@@ -1,6 +1,6 @@
1
- /** Reactive browser mirror for AWiki's loopback-only settings channel. */
1
+ import { decodeDesktopDistribution } from "../desktop-distribution.js";
2
2
  import { AWIKI_DOMAIN_FIELD, normalizeAwikiDomain } from "../domain.js";
3
- import { AWIKI_SETTINGS_RPC_CHANNEL, AWIKI_SETTINGS_RPC_ENDPOINTS, decodeAwikiSettingsRpcView, } from "../settings-rpc-contract.js";
3
+ import { AWIKI_SETTINGS_RPC_CHANNEL, AWIKI_SETTINGS_RPC_ENDPOINTS, decodeAwikiSettingsRpcView, decodeAwikiTenantRpcView, decodeAwikiUpdatePolicyRpcView, } from "../settings-rpc-contract.js";
4
4
  const INITIAL_HOST_SNAPSHOT = {
5
5
  status: 'loading',
6
6
  value: undefined,
@@ -15,21 +15,40 @@ const REMOTE_SNAPSHOT = {
15
15
  status: 'unavailable',
16
16
  mode: 'memory',
17
17
  };
18
+ const INITIAL_TENANTS = {
19
+ schemaVersion: 1,
20
+ officialCatalogVersion: 1,
21
+ generation: 0,
22
+ activeTenantId: '',
23
+ tenants: [],
24
+ switching: false,
25
+ };
18
26
  /** Plugin-owned SettingsScope implementation independent of the core settings allowlist. */
19
27
  export class AwikiSettingsController {
20
28
  connection;
21
29
  snapshot;
22
30
  listeners = new Set();
31
+ tenantSnapshot;
32
+ tenantListeners = new Set();
23
33
  abort = new AbortController();
24
- disposeHostDescription;
34
+ disposeGeneration;
25
35
  writeTail = Promise.resolve();
26
36
  requestVersion = 0;
27
37
  disposed = false;
38
+ updateRequestVersion = 0;
39
+ desktopRequestVersion = 0;
40
+ tenantRequestVersion = 0;
41
+ updatePolling;
28
42
  constructor(connection) {
29
43
  this.connection = connection;
30
44
  this.snapshot = connection.isLoopback ? INITIAL_HOST_SNAPSHOT : REMOTE_SNAPSHOT;
31
- this.disposeHostDescription = connection.isLoopback
32
- ? connection.hostDescription.subscribe(() => { void this.load(); })
45
+ this.tenantSnapshot = {
46
+ status: connection.isLoopback ? 'loading' : 'unavailable',
47
+ value: INITIAL_TENANTS,
48
+ updateStatus: connection.isLoopback ? 'loading' : 'unavailable',
49
+ };
50
+ this.disposeGeneration = connection.isLoopback
51
+ ? connection.generation.subscribe(() => { void this.load(); })
33
52
  : () => { };
34
53
  }
35
54
  getSnapshot() {
@@ -41,10 +60,39 @@ export class AwikiSettingsController {
41
60
  this.listeners.add(listener);
42
61
  return () => { this.listeners.delete(listener); };
43
62
  }
63
+ getTenantSnapshot() {
64
+ return this.tenantSnapshot;
65
+ }
66
+ subscribeTenants(listener) {
67
+ if (this.disposed)
68
+ return () => { };
69
+ this.tenantListeners.add(listener);
70
+ return () => { this.tenantListeners.delete(listener); };
71
+ }
72
+ tenantScope = {
73
+ getSnapshot: () => this.getTenantSnapshot(),
74
+ subscribe: listener => this.subscribeTenants(listener),
75
+ };
44
76
  /** Load or reload the Host view; transport failures become a disabled UI state. */
45
77
  async load() {
46
78
  if (!this.connection.isLoopback || this.disposed)
47
79
  return;
80
+ await Promise.all([this.loadSettings(), this.loadDesktopUpdate(), (async () => {
81
+ await this.loadTenants();
82
+ await this.loadUpdatePolicy();
83
+ })()]);
84
+ // Version discovery must not delay mounting the launcher or settings UI.
85
+ void this.loadUpdatePolicy(true);
86
+ if (!this.disposed && this.updatePolling === undefined) {
87
+ this.updatePolling = setInterval(() => {
88
+ if (this.tenantSnapshot.updateStatus !== 'loading')
89
+ void this.loadUpdatePolicy();
90
+ if (this.tenantSnapshot.desktopStatus !== 'loading')
91
+ void this.loadDesktopUpdate();
92
+ }, 30_000);
93
+ }
94
+ }
95
+ async loadSettings() {
48
96
  const version = ++this.requestVersion;
49
97
  try {
50
98
  const result = await this.connection.rpc.call(AWIKI_SETTINGS_RPC_CHANNEL, AWIKI_SETTINGS_RPC_ENDPOINTS.describe, {}, this.abort.signal);
@@ -69,6 +117,92 @@ export class AwikiSettingsController {
69
117
  this.publish({ ...this.snapshot, status: 'unavailable', writable: false, mode: 'host' });
70
118
  }
71
119
  }
120
+ async loadTenants() {
121
+ if (!this.connection.isLoopback || this.disposed)
122
+ return;
123
+ const request = ++this.tenantRequestVersion;
124
+ try {
125
+ const result = await this.connection.rpc.call(AWIKI_SETTINGS_RPC_CHANNEL, AWIKI_SETTINGS_RPC_ENDPOINTS.describeTenants, {}, this.abort.signal);
126
+ if (this.disposed || request !== this.tenantRequestVersion)
127
+ return;
128
+ const value = result.ok ? decodeAwikiTenantRpcView(result.value) : undefined;
129
+ if (value === undefined)
130
+ throw new Error('AWiki tenant catalog is unavailable');
131
+ const changed = value.activeTenantId !== this.tenantSnapshot.value.activeTenantId
132
+ || value.generation !== this.tenantSnapshot.value.generation;
133
+ if (changed)
134
+ this.updateRequestVersion++;
135
+ this.publishTenants({ ...this.tenantSnapshot, status: 'ready', value,
136
+ ...changed ? { update: undefined, updateStatus: 'loading' } : {} });
137
+ }
138
+ catch {
139
+ if (!this.disposed && request === this.tenantRequestVersion)
140
+ this.publishTenants({ ...this.tenantSnapshot, status: 'unavailable' });
141
+ }
142
+ }
143
+ async loadUpdatePolicy(refresh = false) {
144
+ if (!this.connection.isLoopback || this.disposed || this.tenantSnapshot.value.switching)
145
+ return;
146
+ const tenantId = this.tenantSnapshot.value.activeTenantId;
147
+ if (tenantId === '')
148
+ return;
149
+ const request = ++this.updateRequestVersion;
150
+ if (refresh)
151
+ this.publishTenants({ ...this.tenantSnapshot, updateStatus: 'loading' });
152
+ try {
153
+ const result = await this.connection.rpc.call(AWIKI_SETTINGS_RPC_CHANNEL, refresh ? AWIKI_SETTINGS_RPC_ENDPOINTS.refreshUpdatePolicy : AWIKI_SETTINGS_RPC_ENDPOINTS.describeUpdatePolicy, {}, this.abort.signal);
154
+ if (this.disposed || request !== this.updateRequestVersion || this.tenantSnapshot.value.activeTenantId !== tenantId)
155
+ return;
156
+ const update = result.ok ? decodeAwikiUpdatePolicyRpcView(result.value) : undefined;
157
+ const tenant = this.tenantSnapshot.value.tenants.find(value => value.tenantId === tenantId);
158
+ if (update === undefined || update.tenantId !== tenantId
159
+ || (tenant !== undefined && update.policyOrigin !== new URL(tenant.backendBaseUrl).origin))
160
+ throw new Error('AWiki update scope mismatch');
161
+ this.publishTenants({ ...this.tenantSnapshot, updateStatus: 'ready', update });
162
+ }
163
+ catch {
164
+ if (!this.disposed && request === this.updateRequestVersion) {
165
+ this.publishTenants({ ...this.tenantSnapshot, updateStatus: 'unavailable' });
166
+ }
167
+ }
168
+ }
169
+ async loadDesktopUpdate(refresh = false) {
170
+ if (!this.connection.isLoopback || this.disposed)
171
+ return;
172
+ const request = ++this.desktopRequestVersion;
173
+ if (refresh)
174
+ this.publishTenants({ ...this.tenantSnapshot, desktopStatus: 'loading' });
175
+ try {
176
+ const result = await this.connection.rpc.call(AWIKI_SETTINGS_RPC_CHANNEL, refresh ? AWIKI_SETTINGS_RPC_ENDPOINTS.refreshDesktopUpdate : AWIKI_SETTINGS_RPC_ENDPOINTS.describeDesktopUpdate, {}, this.abort.signal);
177
+ if (this.disposed || request !== this.desktopRequestVersion)
178
+ return;
179
+ if (!result.ok)
180
+ throw new Error('Desktop update service unavailable');
181
+ const desktop = result.value === null ? undefined : decodeDesktopDistribution(result.value);
182
+ if (result.value !== null && desktop === undefined)
183
+ throw new Error('Invalid Desktop update response');
184
+ this.publishTenants({ ...this.tenantSnapshot, desktopStatus: 'ready', desktop });
185
+ }
186
+ catch {
187
+ if (!this.disposed && request === this.desktopRequestVersion)
188
+ this.publishTenants({ ...this.tenantSnapshot, desktopStatus: 'unavailable' });
189
+ }
190
+ }
191
+ async refreshUpdatePolicy() {
192
+ await Promise.all([this.loadUpdatePolicy(true), this.loadDesktopUpdate(true)]);
193
+ }
194
+ createTenant(displayName, domain) {
195
+ return this.writeTenant(AWIKI_SETTINGS_RPC_ENDPOINTS.createTenant, { displayName, domain });
196
+ }
197
+ renameTenant(tenantId, displayName) {
198
+ return this.writeTenant(AWIKI_SETTINGS_RPC_ENDPOINTS.renameTenant, { tenantId, displayName });
199
+ }
200
+ switchTenant(tenantId) {
201
+ return this.writeTenant(AWIKI_SETTINGS_RPC_ENDPOINTS.switchTenant, { tenantId });
202
+ }
203
+ archiveTenant(tenantId) {
204
+ return this.writeTenant(AWIKI_SETTINGS_RPC_ENDPOINTS.archiveTenant, { tenantId });
205
+ }
72
206
  set(field, value) {
73
207
  if (field !== AWIKI_DOMAIN_FIELD || typeof value !== 'string') {
74
208
  return Promise.reject(new TypeError('AWiki settings only supports a string domain field'));
@@ -82,23 +216,42 @@ export class AwikiSettingsController {
82
216
  }
83
217
  return this.enqueue(AWIKI_SETTINGS_RPC_ENDPOINTS.resetDomain, {});
84
218
  }
219
+ /** Apply domain edits atomically through the existing revision-fenced Host operation. */
220
+ mutate(ops, expectedRevision) {
221
+ if (ops.length === 0)
222
+ return Promise.resolve();
223
+ for (const operation of ops) {
224
+ if (operation.path.length !== 1 || operation.path[0] !== AWIKI_DOMAIN_FIELD
225
+ || (operation.op !== 'set' && operation.op !== 'unset')
226
+ || (operation.op === 'set' && typeof operation.value !== 'string')) {
227
+ return Promise.reject(new TypeError('AWiki settings only supports domain mutations'));
228
+ }
229
+ }
230
+ const last = ops[ops.length - 1];
231
+ const endpoint = last.op === 'set' ? AWIKI_SETTINGS_RPC_ENDPOINTS.setDomain : AWIKI_SETTINGS_RPC_ENDPOINTS.resetDomain;
232
+ const payload = last.op === 'set' ? { domain: normalizeAwikiDomain(last.value) } : {};
233
+ return this.enqueue(endpoint, payload, expectedRevision);
234
+ }
85
235
  /** Stop reconnect reads and cancel outstanding transport calls. */
86
236
  dispose() {
87
237
  if (this.disposed)
88
238
  return;
89
239
  this.disposed = true;
240
+ if (this.updatePolling !== undefined)
241
+ clearInterval(this.updatePolling);
90
242
  this.requestVersion += 1;
91
243
  this.abort.abort();
92
- this.disposeHostDescription();
244
+ this.disposeGeneration();
93
245
  this.listeners.clear();
246
+ this.tenantListeners.clear();
94
247
  }
95
- enqueue(endpoint, payload) {
96
- const run = this.writeTail.catch(() => undefined).then(() => this.write(endpoint, payload));
248
+ enqueue(endpoint, payload, expectedRevision) {
249
+ const run = this.writeTail.catch(() => undefined).then(() => this.write(endpoint, payload, expectedRevision));
97
250
  this.writeTail = run;
98
251
  return run;
99
252
  }
100
- async write(endpoint, payload) {
101
- const revision = this.snapshot.revision;
253
+ async write(endpoint, payload, expectedRevision) {
254
+ const revision = expectedRevision ?? this.snapshot.revision;
102
255
  if (this.disposed
103
256
  || !this.connection.isLoopback
104
257
  || this.snapshot.status !== 'ready'
@@ -135,5 +288,48 @@ export class AwikiSettingsController {
135
288
  for (const listener of [...this.listeners])
136
289
  listener();
137
290
  }
291
+ async writeTenant(endpoint, payload) {
292
+ if (this.disposed || !this.connection.isLoopback || this.tenantSnapshot.status !== 'ready') {
293
+ throw new Error('AWiki tenant catalog is unavailable');
294
+ }
295
+ if (this.tenantSnapshot.value.switching)
296
+ throw new Error('AWiki tenant switch is already in progress');
297
+ const switching = endpoint === AWIKI_SETTINGS_RPC_ENDPOINTS.switchTenant;
298
+ if (switching) {
299
+ this.updateRequestVersion++;
300
+ this.tenantRequestVersion++;
301
+ }
302
+ this.publishTenants({ ...this.tenantSnapshot, ...switching ? { update: undefined, updateStatus: 'loading' } : {}, value: { ...this.tenantSnapshot.value, switching: endpoint === AWIKI_SETTINGS_RPC_ENDPOINTS.switchTenant } });
303
+ try {
304
+ const result = await this.connection.rpc.call(AWIKI_SETTINGS_RPC_CHANNEL, endpoint, payload, this.abort.signal);
305
+ const value = result.ok ? decodeAwikiTenantRpcView(result.value) : undefined;
306
+ if (value === undefined) {
307
+ const message = result.ok ? undefined : result.error.message;
308
+ throw new Error(typeof message === 'string' ? message : 'AWiki tenant change was rejected');
309
+ }
310
+ if (!this.disposed)
311
+ this.publishTenants({ ...this.tenantSnapshot, status: 'ready', value });
312
+ if (switching) {
313
+ // Apply the target's cached gate immediately, then await a bounded refresh.
314
+ await this.loadUpdatePolicy();
315
+ await this.loadUpdatePolicy(true);
316
+ }
317
+ }
318
+ catch (error) {
319
+ if (!this.disposed) {
320
+ await this.loadTenants();
321
+ if (switching) {
322
+ await this.loadUpdatePolicy();
323
+ void this.loadUpdatePolicy(true);
324
+ }
325
+ }
326
+ throw error;
327
+ }
328
+ }
329
+ publishTenants(next) {
330
+ this.tenantSnapshot = next;
331
+ for (const listener of [...this.tenantListeners])
332
+ listener();
333
+ }
138
334
  }
139
335
  //# sourceMappingURL=settings-controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-controller.js","sourceRoot":"","sources":["../../../src/client/settings-controller.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAI1E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEvE,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,6BAA6B,CAAA;AAEpC,MAAM,qBAAqB,GAAyC;IAClE,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,MAAM;CACb,CAAA;AAED,MAAM,eAAe,GAAyC;IAC5D,GAAG,qBAAqB;IACxB,MAAM,EAAE,aAAa;IACrB,IAAI,EAAE,QAAQ;CACf,CAAA;AAED,4FAA4F;AAC5F,MAAM,OAAO,uBAAuB;IASL;IARrB,QAAQ,CAAsC;IACrC,SAAS,GAAG,IAAI,GAAG,EAAc,CAAA;IACjC,KAAK,GAAG,IAAI,eAAe,EAAE,CAAA;IAC7B,sBAAsB,CAAY;IAC3C,SAAS,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAA;IAC5C,cAAc,GAAG,CAAC,CAAA;IAClB,QAAQ,GAAG,KAAK,CAAA;IAExB,YAA6B,UAA4B;QAA5B,eAAU,GAAV,UAAU,CAAkB;QACvD,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,eAAe,CAAA;QAC/E,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC,UAAU;YACjD,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAA,CAAC,CAAC,CAAC;YAClE,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAA;IACd,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,SAAS,CAAC,QAAoB;QAC5B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;QAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5B,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,CAAA;IAClD,CAAC;IAED,mFAAmF;IACnF,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAM;QACxD,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC,cAAc,CAAA;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAC3C,0BAA0B,EAC1B,4BAA4B,CAAC,QAAQ,EACrC,EAAE,EACF,IAAI,CAAC,KAAK,CAAC,MAAM,CAClB,CAAA;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC7E,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;YAC7E,IAAI,OAAO,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAM;YAC5D,IAAI,CAAC,OAAO,CAAC;gBACX,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,MAAM;aACb,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,OAAO,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAM;YAC5D,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAC1F,CAAC;IACH,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,KAAc;QAC/B,IAAI,KAAK,KAAK,kBAAkB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9D,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC,CAAA;QAC5F,CAAC;QACD,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,IAAI,KAAK,KAAK,kBAAkB,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC,CAAA;QACvF,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,mEAAmE;IACnE,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAM;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,IAAI,CAAC,cAAc,IAAI,CAAC,CAAA;QACxB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAClB,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;IAEO,OAAO,CAAC,QAAgB,EAAE,OAAgC;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;QAC3F,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;QACpB,OAAO,GAAG,CAAA;IACZ,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,OAAgC;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAA;QACvC,IAAI,IAAI,CAAC,QAAQ;eACZ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU;eAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,OAAO;eAChC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ;eACvB,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACpD,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC,cAAc,CAAA;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAC3C,0BAA0B,EAC1B,QAAQ,EACR,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,CAClB,CAAA;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC7E,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;YAC7E,IAAI,OAAO,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAM;YAC5D,IAAI,CAAC,OAAO,CAAC;gBACX,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,MAAM;aACb,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;YACrC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,IAA0C;QACxD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAAE,QAAQ,EAAE,CAAA;IACxD,CAAC;CACF"}
1
+ {"version":3,"file":"settings-controller.js","sourceRoot":"","sources":["../../../src/client/settings-controller.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /** Bilingual copy for the AWiki identity and installation settings page. */
2
- export type AwikiSettingsKey = 'nav' | 'intro' | 'domainLabel' | 'domainDescription' | 'defaultValue' | 'save' | 'saving' | 'reset' | 'saved' | 'restartNotice' | 'identityNotice' | 'invalidDomain' | 'saveFailed' | 'loading' | 'unavailable' | 'readOnly' | 'dangerTitle' | 'dangerDescription' | 'clearLocalData' | 'clearDialogTitle' | 'clearDialogDescription' | 'clearScope' | 'clearRemoteNotice' | 'clearConfirmationLabel' | 'clearConfirmationPhrase' | 'clearConfirm' | 'clearing' | 'clearSucceeded' | 'clearFailed' | 'cancel';
2
+ export type AwikiSettingsKey = 'nav' | 'intro' | 'tabsLabel' | 'basicTab' | 'devicesTab' | 'integrationTab' | 'devicesUnavailable' | 'devicesLoading' | 'domainLabel' | 'domainDescription' | 'defaultValue' | 'save' | 'saving' | 'reset' | 'saved' | 'restartNotice' | 'identityNotice' | 'invalidDomain' | 'saveFailed' | 'loading' | 'unavailable' | 'readOnly' | 'dangerTitle' | 'dangerDescription' | 'clearLocalData' | 'clearDialogTitle' | 'clearDialogDescription' | 'clearScope' | 'clearRemoteNotice' | 'clearConfirmationLabel' | 'clearConfirmationPhrase' | 'clearConfirm' | 'clearing' | 'clearSucceeded' | 'clearFailed' | 'cancel' | 'tenantTab' | 'localDataTab' | 'tenantLoading' | 'tenantUnavailable' | 'tenantDiagnostic' | 'tenantAdd' | 'tenantName' | 'tenantDomain' | 'tenantDomainHelp' | 'tenantCreate' | 'tenantCreated' | 'tenantOfficial' | 'tenantCustom' | 'tenantCurrent' | 'tenantSwitch' | 'tenantSwitching' | 'tenantSwitched' | 'tenantRenamed' | 'tenantArchive' | 'tenantArchived' | 'tenantChangeFailed' | 'updatesTab' | 'updateCurrent' | 'updateModelCurrent' | 'updateTenant' | 'updateUnchecked' | 'updateFailed' | 'updateCached' | 'updateLatest' | 'updateRecommended' | 'updateModelRecommended' | 'desktopNoRelease' | 'updateAvailable' | 'updateRequired' | 'updateNoCommand' | 'updateCopied' | 'updateCopyFailed' | 'updateGuide' | 'pluginInstallHelp' | 'desktopPluginCommandHelp' | 'desktopUpdateTitle' | 'desktopDownloadPage' | 'desktopInstallHelp' | 'desktopPluginHelp' | 'desktopResolvesPlugin' | 'updateModelRestricted' | 'updateTitle' | 'updateLoading' | 'updateUnavailable' | 'updateNoPolicy' | 'updateVersions' | 'updateRestricted' | 'updateRestart' | 'updateCheck' | 'updateCopy' | 'localDataNotice' | 'integrationTitle' | 'integrationDescription' | 'integrationLoading' | 'integrationGuide' | 'integrationName' | 'integrationNamePlaceholder' | 'integrationIntroduction' | 'integrationIntroductionPlaceholder' | 'integrationContactDeveloper' | 'integrationContactIntroduction' | 'integrationContactIntroductionPlaceholder' | 'integrationGroups' | 'integrationGroupIntroduction' | 'integrationGroupIntroductionPlaceholder' | 'integrationAddGroup' | 'integrationNoOwnedGroups' | 'integrationGroupsUnavailable' | 'integrationRemove' | 'integrationCopy' | 'integrationCreate' | 'integrationRotate' | 'integrationRotateConfirm' | 'integrationClose' | 'integrationCloseConfirm' | 'integrationClosed' | 'integrationClosedDescription' | 'integrationReopen';
3
3
  export declare const zh: Record<AwikiSettingsKey, string>;
4
4
  export declare const en: Record<AwikiSettingsKey, string>;
5
5
  declare module '@deepseek-ai/dsh-client-ui-slots' {
@@ -1 +1 @@
1
- {"version":3,"file":"settings-locales.d.ts","sourceRoot":"","sources":["../../../src/client/settings-locales.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,MAAM,MAAM,gBAAgB,GACxB,KAAK,GACL,OAAO,GACP,aAAa,GACb,mBAAmB,GACnB,cAAc,GACd,MAAM,GACN,QAAQ,GACR,OAAO,GACP,OAAO,GACP,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,SAAS,GACT,aAAa,GACb,UAAU,GACV,aAAa,GACb,mBAAmB,GACnB,gBAAgB,GAChB,kBAAkB,GAClB,wBAAwB,GACxB,YAAY,GACZ,mBAAmB,GACnB,wBAAwB,GACxB,yBAAyB,GACzB,cAAc,GACd,UAAU,GACV,gBAAgB,GAChB,aAAa,GACb,QAAQ,CAAA;AAEZ,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CA+B/C,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CA+B/C,CAAA;AAED,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,gBAAgB,EAAE,gBAAgB,CAAA;KACnC;CACF"}
1
+ {"version":3,"file":"settings-locales.d.ts","sourceRoot":"","sources":["../../../src/client/settings-locales.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,MAAM,MAAM,gBAAgB,GACxB,KAAK,GACL,OAAO,GACP,WAAW,GACX,UAAU,GACV,YAAY,GACZ,gBAAgB,GAChB,oBAAoB,GACpB,gBAAgB,GAChB,aAAa,GACb,mBAAmB,GACnB,cAAc,GACd,MAAM,GACN,QAAQ,GACR,OAAO,GACP,OAAO,GACP,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,SAAS,GACT,aAAa,GACb,UAAU,GACV,aAAa,GACb,mBAAmB,GACnB,gBAAgB,GAChB,kBAAkB,GAClB,wBAAwB,GACxB,YAAY,GACZ,mBAAmB,GACnB,wBAAwB,GACxB,yBAAyB,GACzB,cAAc,GACd,UAAU,GACV,gBAAgB,GAChB,aAAa,GACb,QAAQ,GACR,WAAW,GACX,cAAc,GACd,eAAe,GACf,mBAAmB,GACnB,kBAAkB,GAClB,WAAW,GACX,YAAY,GACZ,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,cAAc,GACd,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,oBAAoB,GACpB,YAAY,GACZ,eAAe,GACf,oBAAoB,GACpB,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,cAAc,GACd,cAAc,GACd,mBAAmB,GACnB,wBAAwB,GACxB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,GACd,kBAAkB,GAClB,aAAa,GACb,mBAAmB,GACnB,0BAA0B,GAC1B,oBAAoB,GACpB,qBAAqB,GACrB,oBAAoB,GACpB,mBAAmB,GACnB,uBAAuB,GACvB,uBAAuB,GACvB,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,eAAe,GACf,aAAa,GACb,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,GAClB,wBAAwB,GACxB,oBAAoB,GACpB,kBAAkB,GAClB,iBAAiB,GACjB,4BAA4B,GAC5B,yBAAyB,GACzB,oCAAoC,GACpC,6BAA6B,GAC7B,gCAAgC,GAChC,2CAA2C,GAC3C,mBAAmB,GACnB,8BAA8B,GAC9B,yCAAyC,GACzC,qBAAqB,GACrB,0BAA0B,GAC1B,8BAA8B,GAC9B,mBAAmB,GACnB,iBAAiB,GACjB,mBAAmB,GACnB,mBAAmB,GACnB,0BAA0B,GAC1B,kBAAkB,GAClB,yBAAyB,GACzB,mBAAmB,GACnB,8BAA8B,GAC9B,mBAAmB,CAAA;AAEvB,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAwH/C,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAwH/C,CAAA;AAED,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,gBAAgB,EAAE,gBAAgB,CAAA;KACnC;CACF"}
@@ -1,27 +1,32 @@
1
1
  /** Bilingual copy for the AWiki identity and installation settings page. */
2
2
  export const zh = {
3
3
  nav: 'AWiki',
4
- intro: '管理 AWiki 租户、身份与本地数据设置。',
5
- domainLabel: '租户域名',
6
- domainDescription: '输入纯域名;重启后 User、Message、Mail 与附件服务都会切换到该域名。',
4
+ intro: '管理 AWiki 身份、域名与本地数据设置。',
5
+ tabsLabel: 'AWiki 设置',
6
+ basicTab: '基础设置',
7
+ devicesTab: '设备',
8
+ devicesUnavailable: '登录 AWiki 后才能管理此安装关联的设备。',
9
+ devicesLoading: '正在读取 AWiki 设备状态…',
10
+ domainLabel: '默认域名',
11
+ domainDescription: '输入纯域名,不要包含协议、路径或端口。',
7
12
  defaultValue: '默认值:{domain}',
8
13
  save: '保存',
9
14
  saving: '保存中…',
10
15
  reset: '恢复默认值',
11
16
  saved: '已保存。',
12
17
  restartNotice: '重启 DeepSeek Harness 后生效。',
13
- identityNotice: '不同域名使用相互隔离的本地身份、消息与身份恢复进度。切回原域名时会恢复该域名原有的本地状态。',
14
- invalidDomain: '请输入有效的域名,例如 awiki.ai。',
18
+ identityNotice: '此设置仅影响后续注册和短 Handle 的域名补全,不会改写已经注册的 DID 或 Handle。',
19
+ invalidDomain: '请输入有效的域名,例如 tenant.example。',
15
20
  saveFailed: '未能保存设置,请刷新后重试。',
16
21
  loading: '正在读取 AWiki 设置…',
17
22
  unavailable: '当前连接无法修改 Host 设置。请在运行 DeepSeek Harness 的本机打开此页面。',
18
23
  readOnly: '当前设置文件为只读。',
19
24
  dangerTitle: '危险区域',
20
- dangerDescription: '永久清除此安装中的 AWiki 凭证与消息数据。清除后需要重新验证绑定手机号才能恢复原身份。',
25
+ dangerDescription: '仅清除当前租户在本机的 AWiki 凭证与消息数据,其他租户保留。清除后需要重新验证绑定手机号才能恢复身份。',
21
26
  clearLocalData: '清空本地 AWiki 数据',
22
27
  clearDialogTitle: '确认清空本地 AWiki 数据',
23
28
  clearDialogDescription: '这是不可恢复的危险操作。请确认你了解以下影响后再继续。',
24
- clearScope: '本地 DID、私钥、访问令牌、注册草稿、会话记录和附件索引都会被永久删除。',
29
+ clearScope: '当前租户在本机拥有的 DID 凭证、私钥、访问令牌、注册草稿、会话记录和附件索引将被永久删除;其他租户的数据不会被清除。',
25
30
  clearRemoteNotice: '服务端 AWiki 账号与 Handle 不会被删除;之后可在 AWiki 面板使用完整 Handle、绑定手机号和验证码恢复原身份,但已清除的本地消息与附件索引不会恢复。',
26
31
  clearConfirmationLabel: '请输入“{phrase}”以确认:',
27
32
  clearConfirmationPhrase: '永久清空',
@@ -30,30 +35,119 @@ export const zh = {
30
35
  clearSucceeded: '本地 AWiki 数据已清空。原身份可通过 Handle 和绑定手机号恢复,已清除的本地数据无法恢复。',
31
36
  clearFailed: '未能清空本地 AWiki 数据,未完成删除。请重试。',
32
37
  cancel: '取消',
38
+ tenantTab: '租户',
39
+ localDataTab: '本地数据',
40
+ integrationTab: '临时消息集成',
41
+ tenantLoading: '正在读取租户目录…',
42
+ tenantUnavailable: '租户目录当前不可用。请在运行 DeepSeek Harness 的本机重试。',
43
+ tenantDiagnostic: '历史租户目录无法安全判定,当前保持原运行环境且已写入本地诊断。',
44
+ tenantAdd: '添加自定义租户',
45
+ tenantName: '租户名称',
46
+ tenantDomain: '租户域名',
47
+ tenantDomainHelp: '只填写纯域名。创建后端点与数据 Scope 将固定,不会随名称改变。',
48
+ tenantCreate: '创建租户',
49
+ tenantCreated: '租户已创建。',
50
+ tenantOfficial: '官方',
51
+ tenantCustom: '自定义',
52
+ tenantCurrent: '当前',
53
+ tenantSwitch: '切换',
54
+ tenantSwitching: '正在切换租户并隔离旧运行时…',
55
+ tenantSwitched: '租户切换完成。',
56
+ tenantRenamed: '租户已重命名。',
57
+ tenantArchive: '归档',
58
+ tenantArchived: '租户已归档;本地数据仍保留。',
59
+ tenantChangeFailed: '租户操作失败;如发生切换,Host 已尝试恢复原租户。',
60
+ updatesTab: "版本与更新",
61
+ updateCurrent: "当前版本:{version}",
62
+ updateModelCurrent: "模型组件:{version}",
63
+ updateTenant: "当前服务:{tenant}",
64
+ updateUnchecked: "尚未检查更新。",
65
+ updateFailed: "检查失败,请稍后重试。",
66
+ updateCached: "当前显示上次成功检查的结果。",
67
+ updateLatest: "当前版本无需升级。",
68
+ updateRecommended: "推荐版本:{version}",
69
+ updateModelRecommended: "模型插件推荐版本:{version}",
70
+ desktopNoRelease: "暂未发布适用于当前发行通道的更新。",
71
+ updateAvailable: "有可用更新。",
72
+ updateRequired: "当前组件版本不满足服务要求,请升级或切换服务。",
73
+ updateNoCommand: "该服务暂未提供可用的独立插件升级命令。",
74
+ updateCopied: "已复制升级命令。",
75
+ updateCopyFailed: "复制失败,请选中上方命令手动复制。",
76
+ updateGuide: "查看发布与安装说明",
77
+ pluginInstallHelp: "将 YOUR_PROFILE 替换为启动 DSH 时使用的配置名(通常为 web),在终端执行,完成后重启 DSH。",
78
+ desktopPluginCommandHelp: "从托盘打开“DSH 终端”,执行命令,完成后重启桌面版。",
79
+ desktopUpdateTitle: "DSH Desktop · AWiki",
80
+ desktopDownloadPage: "前往桌面版下载页面",
81
+ desktopInstallHelp: "选择适合电脑的完整安装包,完成安装后重新打开应用。",
82
+ desktopPluginHelp: "桌面用户可前往上方下载页面查看完整桌面版;插件兼容要求由当前服务决定。",
83
+ desktopResolvesPlugin: "此桌面更新包含满足当前服务推荐版本要求的插件组件。",
84
+ updateModelRestricted: "当前模型组件低于最低支持版本 {minimum},AWiki 模型服务暂不可用。",
85
+ updateTitle: '插件更新',
86
+ updateLoading: '正在检查更新…',
87
+ updateUnavailable: '暂时无法读取更新状态;不会使用其他租户的策略。',
88
+ updateNoPolicy: '当前服务暂未提供更新信息。',
89
+ updateVersions: '当前版本 {current},推荐版本 {recommended},最低支持版本 {minimum}。',
90
+ updateRestricted: '当前版本 {current} 低于「{tenant}」要求的最低版本 {minimum},请升级后重启,或切换服务。',
91
+ updateRestart: '升级完成后请重启 DeepSeek Harness。',
92
+ updateCheck: '检查更新',
93
+ updateCopy: '复制升级命令',
94
+ localDataNotice: '这里只管理当前租户的独立本地数据。归档租户不会删除其身份、消息或密钥。',
95
+ integrationTitle: '临时消息集成',
96
+ integrationDescription: '为你的产品创建一个可公开使用的 AWiki 联系入口。',
97
+ integrationLoading: '正在读取临时消息集成…',
98
+ integrationGuide: '查看集成指南',
99
+ integrationName: '产品或插件名称',
100
+ integrationNamePlaceholder: '请输入产品或插件名称',
101
+ integrationIntroduction: '总体介绍',
102
+ integrationIntroductionPlaceholder: '请输入产品、插件或开发者的总体介绍',
103
+ integrationContactDeveloper: '允许访客联系当前开发者身份',
104
+ integrationContactIntroduction: '开发者私聊介绍',
105
+ integrationContactIntroductionPlaceholder: '请输入访客联系开发者时看到的介绍',
106
+ integrationGroups: '可联系社群',
107
+ integrationGroupIntroduction: '社群介绍',
108
+ integrationGroupIntroductionPlaceholder: '请输入访客加入这个社群前看到的介绍',
109
+ integrationAddGroup: '添加我创建的社群…',
110
+ integrationNoOwnedGroups: '当前没有可添加的自有社群。',
111
+ integrationGroupsUnavailable: '暂时无法读取你创建的社群,请稍后重试。',
112
+ integrationRemove: '移除',
113
+ integrationCopy: '复制链接',
114
+ integrationCreate: '创建 Integration',
115
+ integrationRotate: '换发链接',
116
+ integrationRotateConfirm: '换发后旧链接将立即失效,是否继续?',
117
+ integrationClose: '关闭 Integration',
118
+ integrationCloseConfirm: '关闭后当前公开链接将永久失效。以后重新开放时会生成新链接,旧链接不会恢复。是否继续?',
119
+ integrationClosed: '公开入口已关闭',
120
+ integrationClosedDescription: '旧链接不会恢复。你可以调整下方配置并创建一个全新的公开链接。',
121
+ integrationReopen: '创建新的公开入口',
33
122
  };
34
123
  export const en = {
35
124
  nav: 'AWiki',
36
- intro: 'Manage the AWiki tenant, identity, and local data settings.',
37
- domainLabel: 'Tenant domain',
38
- domainDescription: 'Enter a bare domain. After restart, User, Message, Mail, and attachment services all switch to it.',
125
+ intro: 'Manage AWiki identity, domain, and local data settings.',
126
+ tabsLabel: 'AWiki settings',
127
+ basicTab: 'Basics',
128
+ devicesTab: 'Devices',
129
+ devicesUnavailable: 'Sign in to AWiki to manage devices associated with this installation.',
130
+ devicesLoading: 'Loading AWiki device status…',
131
+ domainLabel: 'Default domain',
132
+ domainDescription: 'Enter a bare domain without a protocol, path, or port.',
39
133
  defaultValue: 'Default: {domain}',
40
134
  save: 'Save',
41
135
  saving: 'Saving…',
42
136
  reset: 'Restore default',
43
137
  saved: 'Saved.',
44
138
  restartNotice: 'Restart DeepSeek Harness for the change to take effect.',
45
- identityNotice: 'Each domain uses isolated local identity, message, and identity-recovery state. Switching back restores that domain’s previous local state.',
46
- invalidDomain: 'Enter a valid domain, such as awiki.ai.',
139
+ identityNotice: 'This affects future registrations and short-Handle completion. It does not rewrite an existing DID or Handle.',
140
+ invalidDomain: 'Enter a valid domain, such as tenant.example.',
47
141
  saveFailed: 'The setting could not be saved. Refresh and try again.',
48
142
  loading: 'Loading AWiki settings…',
49
143
  unavailable: 'This connection cannot edit Host settings. Open this page on the machine running DeepSeek Harness.',
50
144
  readOnly: 'The settings document is read-only.',
51
145
  dangerTitle: 'Danger zone',
52
- dangerDescription: 'Permanently clear the AWiki credentials and message data stored by this installation. Restoring the identity will require phone verification.',
146
+ dangerDescription: 'Clear only the current tenant’s local AWiki credentials and messages. Other tenants are preserved. Restoring this identity requires phone verification.',
53
147
  clearLocalData: 'Clear local AWiki data',
54
148
  clearDialogTitle: 'Clear local AWiki data?',
55
149
  clearDialogDescription: 'This is an irreversible operation. Confirm that you understand the impact before continuing.',
56
- clearScope: 'The local DID, private keys, access token, registration draft, conversations, and attachment index will be permanently deleted.',
150
+ clearScope: 'Only the current tenant’s locally owned DID credentials, private keys, access tokens, registration drafts, conversations, and attachment index will be deleted. Other tenants are preserved.',
57
151
  clearRemoteNotice: 'The server-side AWiki account and Handle are not deleted. You can restore the original identity from the AWiki panel with its full Handle, bound phone number, and verification code, but cleared local messages and attachment indexes cannot be restored.',
58
152
  clearConfirmationLabel: 'Type “{phrase}” to confirm:',
59
153
  clearConfirmationPhrase: 'PERMANENTLY CLEAR',
@@ -62,5 +156,89 @@ export const en = {
62
156
  clearSucceeded: 'Local AWiki data was cleared. The identity can be restored with its Handle and bound phone number, but the cleared local data cannot be recovered.',
63
157
  clearFailed: 'Local AWiki data could not be cleared. Deletion did not complete. Try again.',
64
158
  cancel: 'Cancel',
159
+ tenantTab: 'Tenant',
160
+ localDataTab: 'Local data',
161
+ integrationTab: 'Guest integration',
162
+ tenantLoading: 'Loading the tenant catalog…',
163
+ tenantUnavailable: 'The tenant catalog is unavailable. Retry on the machine running DeepSeek Harness.',
164
+ tenantDiagnostic: 'The historical tenant layout could not be determined safely. The previous runtime is preserved and a local diagnostic was written.',
165
+ tenantAdd: 'Add custom tenant',
166
+ tenantName: 'Tenant name',
167
+ tenantDomain: 'Tenant domain',
168
+ tenantDomainHelp: 'Enter a bare domain. Its endpoint and storage scope become immutable after creation; renaming does not change either.',
169
+ tenantCreate: 'Create tenant',
170
+ tenantCreated: 'Tenant created.',
171
+ tenantOfficial: 'Official',
172
+ tenantCustom: 'Custom',
173
+ tenantCurrent: 'Current',
174
+ tenantSwitch: 'Switch',
175
+ tenantSwitching: 'Switching tenant and fencing the previous runtime…',
176
+ tenantSwitched: 'Tenant switch completed.',
177
+ tenantRenamed: 'Tenant renamed.',
178
+ tenantArchive: 'Archive',
179
+ tenantArchived: 'Tenant archived; its local data was retained.',
180
+ tenantChangeFailed: 'The tenant operation failed. If this was a switch, the Host attempted to restore the previous tenant.',
181
+ updatesTab: "Versions & Updates",
182
+ updateCurrent: "Installed version: {version}",
183
+ updateModelCurrent: "Model component: {version}",
184
+ updateTenant: "Current service: {tenant}",
185
+ updateUnchecked: "Updates have not been checked yet.",
186
+ updateFailed: "Unable to check. Please retry.",
187
+ updateCached: "Showing the last successful check.",
188
+ updateLatest: "Your version is up to date.",
189
+ updateRecommended: "Recommended version: {version}",
190
+ updateModelRecommended: "Recommended model plugin: {version}",
191
+ desktopNoRelease: "No release is currently available for this channel.",
192
+ updateAvailable: "An update is available.",
193
+ updateRequired: "Your component version is unsupported. Update or switch services.",
194
+ updateNoCommand: "This service has not provided an independent plugin upgrade command.",
195
+ updateCopied: "Upgrade command copied.",
196
+ updateCopyFailed: "Copy failed. Select the command above and copy it manually.",
197
+ updateGuide: "Release and installation guide",
198
+ pluginInstallHelp: "Replace YOUR_PROFILE with the profile used to launch DSH (usually web), run in your terminal, then restart DSH.",
199
+ desktopPluginCommandHelp: "Open DSH Terminal from the tray, run the command, then restart Desktop.",
200
+ desktopUpdateTitle: "DSH Desktop · AWiki",
201
+ desktopDownloadPage: "Visit Desktop Download Page",
202
+ desktopInstallHelp: "Choose the full installer for your computer, install it, then reopen the app.",
203
+ desktopPluginHelp: "Desktop users can visit the download page above. Plugin requirements belong to the current service.",
204
+ desktopResolvesPlugin: "This Desktop update includes components meeting the current service’s recommended versions.",
205
+ updateModelRestricted: "The model component is below the minimum version {minimum}; the AWiki model service is unavailable.",
206
+ updateTitle: 'Plugin updates',
207
+ updateLoading: 'Loading the active tenant’s update policy…',
208
+ updateUnavailable: 'Update status is unavailable. No other tenant’s policy will be used.',
209
+ updateNoPolicy: 'This service has not provided update information.',
210
+ updateVersions: 'Current {current}; recommended {recommended}; minimum supported {minimum}.',
211
+ updateRestricted: 'Plugin {current} is below this tenant’s minimum {minimum}. Upgrade and restart DSH.',
212
+ updateRestart: 'Restart DeepSeek Harness after upgrading.',
213
+ updateCheck: 'Check for updates',
214
+ updateCopy: 'Copy upgrade command',
215
+ localDataNotice: 'This area manages only the current tenant’s isolated local data. Archiving a tenant does not delete its identity, messages, or keys.',
216
+ integrationTitle: 'Guest messaging integration',
217
+ integrationDescription: 'Create a public AWiki contact entry for your product.',
218
+ integrationLoading: 'Loading the guest messaging integration…',
219
+ integrationGuide: 'View integration guide',
220
+ integrationName: 'Product or plugin name',
221
+ integrationNamePlaceholder: 'Enter the product or plugin name',
222
+ integrationIntroduction: 'Introduction',
223
+ integrationIntroductionPlaceholder: 'Describe the product, plugin, or developer',
224
+ integrationContactDeveloper: 'Allow guests to contact this developer identity',
225
+ integrationContactIntroduction: 'Developer contact introduction',
226
+ integrationContactIntroductionPlaceholder: 'Describe what guests see before contacting the developer',
227
+ integrationGroups: 'Contactable communities',
228
+ integrationGroupIntroduction: 'Community introduction',
229
+ integrationGroupIntroductionPlaceholder: 'Describe what guests see before joining this community',
230
+ integrationAddGroup: 'Add one of my communities…',
231
+ integrationNoOwnedGroups: 'There are no owned communities available to add.',
232
+ integrationGroupsUnavailable: 'Your owned communities cannot be loaded right now. Please try again later.',
233
+ integrationRemove: 'Remove',
234
+ integrationCopy: 'Copy link',
235
+ integrationCreate: 'Create Integration',
236
+ integrationRotate: 'Rotate link',
237
+ integrationRotateConfirm: 'The old link will stop working immediately. Continue?',
238
+ integrationClose: 'Close Integration',
239
+ integrationCloseConfirm: 'The current public link will be revoked permanently. Reopening later creates a new link; the old one will not return. Continue?',
240
+ integrationClosed: 'Public entry closed',
241
+ integrationClosedDescription: 'The old link will not return. Adjust the settings below, then create a new public link.',
242
+ integrationReopen: 'Create new public entry',
65
243
  };
66
244
  //# sourceMappingURL=settings-locales.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-locales.js","sourceRoot":"","sources":["../../../src/client/settings-locales.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAkC5E,MAAM,CAAC,MAAM,EAAE,GAAqC;IAClD,GAAG,EAAE,OAAO;IACZ,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EAAE,MAAM;IACnB,iBAAiB,EAAE,4CAA4C;IAC/D,YAAY,EAAE,cAAc;IAC5B,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,MAAM;IACb,aAAa,EAAE,0BAA0B;IACzC,cAAc,EAAE,gDAAgD;IAChE,aAAa,EAAE,uBAAuB;IACtC,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,gBAAgB;IACzB,WAAW,EAAE,kDAAkD;IAC/D,QAAQ,EAAE,YAAY;IACtB,WAAW,EAAE,MAAM;IACnB,iBAAiB,EAAE,gDAAgD;IACnE,cAAc,EAAE,eAAe;IAC/B,gBAAgB,EAAE,iBAAiB;IACnC,sBAAsB,EAAE,6BAA6B;IACrD,UAAU,EAAE,uCAAuC;IACnD,iBAAiB,EAAE,wFAAwF;IAC3G,sBAAsB,EAAE,mBAAmB;IAC3C,uBAAuB,EAAE,MAAM;IAC/B,YAAY,EAAE,MAAM;IACpB,QAAQ,EAAE,OAAO;IACjB,cAAc,EAAE,qDAAqD;IACrE,WAAW,EAAE,4BAA4B;IACzC,MAAM,EAAE,IAAI;CACb,CAAA;AAED,MAAM,CAAC,MAAM,EAAE,GAAqC;IAClD,GAAG,EAAE,OAAO;IACZ,KAAK,EAAE,6DAA6D;IACpE,WAAW,EAAE,eAAe;IAC5B,iBAAiB,EAAE,oGAAoG;IACvH,YAAY,EAAE,mBAAmB;IACjC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,QAAQ;IACf,aAAa,EAAE,yDAAyD;IACxE,cAAc,EAAE,6IAA6I;IAC7J,aAAa,EAAE,yCAAyC;IACxD,UAAU,EAAE,wDAAwD;IACpE,OAAO,EAAE,yBAAyB;IAClC,WAAW,EAAE,oGAAoG;IACjH,QAAQ,EAAE,qCAAqC;IAC/C,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,+IAA+I;IAClK,cAAc,EAAE,wBAAwB;IACxC,gBAAgB,EAAE,yBAAyB;IAC3C,sBAAsB,EAAE,8FAA8F;IACtH,UAAU,EAAE,iIAAiI;IAC7I,iBAAiB,EAAE,6PAA6P;IAChR,sBAAsB,EAAE,6BAA6B;IACrD,uBAAuB,EAAE,mBAAmB;IAC5C,YAAY,EAAE,mBAAmB;IACjC,QAAQ,EAAE,WAAW;IACrB,cAAc,EAAE,oJAAoJ;IACpK,WAAW,EAAE,8EAA8E;IAC3F,MAAM,EAAE,QAAQ;CACjB,CAAA"}
1
+ {"version":3,"file":"settings-locales.js","sourceRoot":"","sources":["../../../src/client/settings-locales.ts"],"names":[],"mappings":"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"}