@awiki/dsh-plugin 0.3.7-dsh-test.20260831.2 → 0.3.10

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 (183) hide show
  1. package/README.md +66 -26
  2. package/README.zh.md +57 -23
  3. package/cordis.patch.yml +7 -5
  4. package/lib/builtin-tenants.json +22 -0
  5. package/lib/builtin-tenants.sha256 +1 -0
  6. package/lib/client.js +7123 -1635
  7. package/lib/client.js.map +1 -1
  8. package/lib/index.js +2534 -474
  9. package/lib/model-proxy-contract.js +11 -3
  10. package/lib/provider.js +6 -3
  11. package/lib/{sdk-adapter-FGaOi8It.mjs → sdk-adapter-CYcJH7sM.mjs} +210 -21
  12. package/lib/typert.host.js +1305 -106
  13. package/lib/typert.remote-client.d.ts +25 -1
  14. package/lib/typert.remote-client.d.ts.map +1 -1
  15. package/lib/typert.remote-client.js +1305 -106
  16. package/lib/types/builtin-tenant-config.d.ts +19 -0
  17. package/lib/types/builtin-tenant-config.d.ts.map +1 -0
  18. package/lib/types/builtin-tenant-config.js +57 -0
  19. package/lib/types/builtin-tenant-config.js.map +1 -0
  20. package/lib/types/client/AwikiDeviceJoinReminder.d.ts +15 -0
  21. package/lib/types/client/AwikiDeviceJoinReminder.d.ts.map +1 -0
  22. package/lib/types/client/AwikiDeviceJoinReminder.js +74 -0
  23. package/lib/types/client/AwikiDeviceJoinReminder.js.map +1 -0
  24. package/lib/types/client/AwikiDevices.d.ts +8 -3
  25. package/lib/types/client/AwikiDevices.d.ts.map +1 -1
  26. package/lib/types/client/AwikiDevices.js +64 -8
  27. package/lib/types/client/AwikiDevices.js.map +1 -1
  28. package/lib/types/client/AwikiGroupDetails.d.ts.map +1 -1
  29. package/lib/types/client/AwikiGroupDetails.js +16 -13
  30. package/lib/types/client/AwikiGroupDetails.js.map +1 -1
  31. package/lib/types/client/AwikiIdentityAccess.d.ts +10 -4
  32. package/lib/types/client/AwikiIdentityAccess.d.ts.map +1 -1
  33. package/lib/types/client/AwikiIdentityAccess.js +139 -36
  34. package/lib/types/client/AwikiIdentityAccess.js.map +1 -1
  35. package/lib/types/client/AwikiIntegrationSettings.d.ts +21 -0
  36. package/lib/types/client/AwikiIntegrationSettings.d.ts.map +1 -0
  37. package/lib/types/client/AwikiIntegrationSettings.js +105 -0
  38. package/lib/types/client/AwikiIntegrationSettings.js.map +1 -0
  39. package/lib/types/client/AwikiMail.d.ts.map +1 -1
  40. package/lib/types/client/AwikiMail.js +12 -8
  41. package/lib/types/client/AwikiMail.js.map +1 -1
  42. package/lib/types/client/AwikiOverlay.d.ts +0 -1
  43. package/lib/types/client/AwikiOverlay.d.ts.map +1 -1
  44. package/lib/types/client/AwikiOverlay.js +26 -21
  45. package/lib/types/client/AwikiOverlay.js.map +1 -1
  46. package/lib/types/client/AwikiProfileCard.d.ts.map +1 -1
  47. package/lib/types/client/AwikiProfileCard.js +17 -18
  48. package/lib/types/client/AwikiProfileCard.js.map +1 -1
  49. package/lib/types/client/AwikiRecoveryForm.d.ts +5 -1
  50. package/lib/types/client/AwikiRecoveryForm.d.ts.map +1 -1
  51. package/lib/types/client/AwikiRecoveryForm.js +73 -30
  52. package/lib/types/client/AwikiRecoveryForm.js.map +1 -1
  53. package/lib/types/client/AwikiSettingsSection.d.ts +28 -13
  54. package/lib/types/client/AwikiSettingsSection.d.ts.map +1 -1
  55. package/lib/types/client/AwikiSettingsSection.js +93 -61
  56. package/lib/types/client/AwikiSettingsSection.js.map +1 -1
  57. package/lib/types/client/AwikiUpdates.d.ts +10 -0
  58. package/lib/types/client/AwikiUpdates.d.ts.map +1 -0
  59. package/lib/types/client/AwikiUpdates.js +57 -0
  60. package/lib/types/client/AwikiUpdates.js.map +1 -0
  61. package/lib/types/client/awiki-client-bridge.d.ts +1 -1
  62. package/lib/types/client/awiki-client-bridge.d.ts.map +1 -1
  63. package/lib/types/client/awiki-client-bridge.js +4 -1
  64. package/lib/types/client/awiki-client-bridge.js.map +1 -1
  65. package/lib/types/client/controller.d.ts +65 -11
  66. package/lib/types/client/controller.d.ts.map +1 -1
  67. package/lib/types/client/controller.js +480 -127
  68. package/lib/types/client/controller.js.map +1 -1
  69. package/lib/types/client/drafts.d.ts +31 -0
  70. package/lib/types/client/drafts.d.ts.map +1 -0
  71. package/lib/types/client/drafts.js +94 -0
  72. package/lib/types/client/drafts.js.map +1 -0
  73. package/lib/types/client/image-cache.d.ts +2 -2
  74. package/lib/types/client/image-cache.d.ts.map +1 -1
  75. package/lib/types/client/image-cache.js +15 -2
  76. package/lib/types/client/image-cache.js.map +1 -1
  77. package/lib/types/client/index.d.ts.map +1 -1
  78. package/lib/types/client/index.js +55 -15
  79. package/lib/types/client/index.js.map +1 -1
  80. package/lib/types/client/integration-operation.d.ts +9 -0
  81. package/lib/types/client/integration-operation.d.ts.map +1 -0
  82. package/lib/types/client/integration-operation.js +54 -0
  83. package/lib/types/client/integration-operation.js.map +1 -0
  84. package/lib/types/client/mail-list-cache.d.ts +2 -0
  85. package/lib/types/client/mail-list-cache.d.ts.map +1 -1
  86. package/lib/types/client/mail-list-cache.js +18 -0
  87. package/lib/types/client/mail-list-cache.js.map +1 -1
  88. package/lib/types/client/otp-cooldown.d.ts +6 -0
  89. package/lib/types/client/otp-cooldown.d.ts.map +1 -0
  90. package/lib/types/client/otp-cooldown.js +18 -0
  91. package/lib/types/client/otp-cooldown.js.map +1 -0
  92. package/lib/types/client/settings-controller.d.ts +34 -0
  93. package/lib/types/client/settings-controller.d.ts.map +1 -1
  94. package/lib/types/client/settings-controller.js +182 -2
  95. package/lib/types/client/settings-controller.js.map +1 -1
  96. package/lib/types/client/settings-locales.d.ts +1 -1
  97. package/lib/types/client/settings-locales.d.ts.map +1 -1
  98. package/lib/types/client/settings-locales.js +184 -6
  99. package/lib/types/client/settings-locales.js.map +1 -1
  100. package/lib/types/client/slots.d.ts +11 -1
  101. package/lib/types/client/slots.d.ts.map +1 -1
  102. package/lib/types/client/slots.js +0 -1
  103. package/lib/types/client/slots.js.map +1 -1
  104. package/lib/types/desktop-distribution.d.ts +25 -0
  105. package/lib/types/desktop-distribution.d.ts.map +1 -0
  106. package/lib/types/desktop-distribution.js +57 -0
  107. package/lib/types/desktop-distribution.js.map +1 -0
  108. package/lib/types/domain.d.ts +1 -1
  109. package/lib/types/domain.d.ts.map +1 -1
  110. package/lib/types/domain.js +2 -1
  111. package/lib/types/domain.js.map +1 -1
  112. package/lib/types/index.d.ts +112 -18
  113. package/lib/types/index.d.ts.map +1 -1
  114. package/lib/types/index.js +897 -205
  115. package/lib/types/index.js.map +1 -1
  116. package/lib/types/integration-client.d.ts +17 -0
  117. package/lib/types/integration-client.d.ts.map +1 -0
  118. package/lib/types/integration-client.js +233 -0
  119. package/lib/types/integration-client.js.map +1 -0
  120. package/lib/types/legacy-sent-mail-cache.d.ts +4 -0
  121. package/lib/types/legacy-sent-mail-cache.d.ts.map +1 -0
  122. package/lib/types/legacy-sent-mail-cache.js +29 -0
  123. package/lib/types/legacy-sent-mail-cache.js.map +1 -0
  124. package/lib/types/mail-list-client.d.ts +12 -0
  125. package/lib/types/mail-list-client.d.ts.map +1 -0
  126. package/lib/types/mail-list-client.js +254 -0
  127. package/lib/types/mail-list-client.js.map +1 -0
  128. package/lib/types/mail-recovery-observability.d.ts +8 -0
  129. package/lib/types/mail-recovery-observability.d.ts.map +1 -0
  130. package/lib/types/mail-recovery-observability.js +119 -0
  131. package/lib/types/mail-recovery-observability.js.map +1 -0
  132. package/lib/types/model-proxy-contract.d.ts.map +1 -1
  133. package/lib/types/model-proxy-contract.js +7 -0
  134. package/lib/types/model-proxy-contract.js.map +1 -1
  135. package/lib/types/package-version.generated.d.ts +4 -0
  136. package/lib/types/package-version.generated.d.ts.map +1 -0
  137. package/lib/types/package-version.generated.js +4 -0
  138. package/lib/types/package-version.generated.js.map +1 -0
  139. package/lib/types/profile-state.d.ts +6 -0
  140. package/lib/types/profile-state.d.ts.map +1 -0
  141. package/lib/types/profile-state.js +41 -0
  142. package/lib/types/profile-state.js.map +1 -0
  143. package/lib/types/provider-api.d.ts +36 -9
  144. package/lib/types/provider-api.d.ts.map +1 -1
  145. package/lib/types/provider.d.ts.map +1 -1
  146. package/lib/types/provider.js +5 -2
  147. package/lib/types/provider.js.map +1 -1
  148. package/lib/types/realtime-supervisor.d.ts +6 -0
  149. package/lib/types/realtime-supervisor.d.ts.map +1 -1
  150. package/lib/types/realtime-supervisor.js +14 -1
  151. package/lib/types/realtime-supervisor.js.map +1 -1
  152. package/lib/types/sdk-adapter.d.ts +32 -6
  153. package/lib/types/sdk-adapter.d.ts.map +1 -1
  154. package/lib/types/sdk-adapter.js +127 -24
  155. package/lib/types/sdk-adapter.js.map +1 -1
  156. package/lib/types/settings-rpc-contract.d.ts +58 -0
  157. package/lib/types/settings-rpc-contract.d.ts.map +1 -1
  158. package/lib/types/settings-rpc-contract.js +103 -0
  159. package/lib/types/settings-rpc-contract.js.map +1 -1
  160. package/lib/types/settings-rpc.d.ts +14 -1
  161. package/lib/types/settings-rpc.d.ts.map +1 -1
  162. package/lib/types/settings-rpc.js +130 -1
  163. package/lib/types/settings-rpc.js.map +1 -1
  164. package/lib/types/tenant-registry.d.ts +74 -0
  165. package/lib/types/tenant-registry.d.ts.map +1 -0
  166. package/lib/types/tenant-registry.js +440 -0
  167. package/lib/types/tenant-registry.js.map +1 -0
  168. package/lib/types/types.d.ts +173 -1
  169. package/lib/types/types.d.ts.map +1 -1
  170. package/lib/types/types.js.map +1 -1
  171. package/lib/types/update-policy.d.ts +51 -0
  172. package/lib/types/update-policy.d.ts.map +1 -0
  173. package/lib/types/update-policy.js +379 -0
  174. package/lib/types/update-policy.js.map +1 -0
  175. package/lib/types/version.d.ts +4 -0
  176. package/lib/types/version.d.ts.map +1 -0
  177. package/lib/types/version.js +44 -0
  178. package/lib/types/version.js.map +1 -0
  179. package/package.json +34 -21
  180. package/lib/types/sent-mail-store.d.ts +0 -22
  181. package/lib/types/sent-mail-store.d.ts.map +0 -1
  182. package/lib/types/sent-mail-store.js +0 -246
  183. package/lib/types/sent-mail-store.js.map +0 -1
@@ -0,0 +1,379 @@
1
+ import { assertVersion, compareVersions } from "./version.js";
2
+ export { compareVersions } from "./version.js";
3
+ /** Tenant-scoped DSH AWiki plugin update policy and verified cache. */
4
+ import { createHash } from 'node:crypto';
5
+ import { mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
6
+ import { dirname, join } from 'node:path';
7
+ import { satisfies } from 'semver';
8
+ import { DSH_AWIKI_MODEL_PROXY_PACKAGE_VERSION, DSH_AWIKI_PACKAGE_VERSION, } from "./package-version.generated.js";
9
+ export const DSH_AWIKI_VERSION = DSH_AWIKI_PACKAGE_VERSION;
10
+ export const DSH_AWIKI_MODEL_PROXY_VERSION = DSH_AWIKI_MODEL_PROXY_PACKAGE_VERSION;
11
+ const PRODUCT = 'dsh-awiki';
12
+ const CHANNEL = 'stable';
13
+ const MAX_POLICY_BYTES = 1024 * 1024;
14
+ /** Load only this tenant's verified cache before its business runtime starts. */
15
+ export function readAwikiUpdatePolicyStatus(options) {
16
+ const origin = new URL(options.tenant.backendBaseUrl).origin;
17
+ const base = {
18
+ tenantId: options.tenant.tenantId, policyOrigin: origin, tenantGeneration: options.generation,
19
+ currentPluginVersion: options.currentPluginVersion ?? DSH_AWIKI_VERSION,
20
+ ...options.currentModelProxyVersion === undefined ? {} : { currentModelProxyVersion: options.currentModelProxyVersion },
21
+ };
22
+ const cached = readCache(policyCachePath(options.stateRoot, options.tenant.tenantId, origin), origin);
23
+ return cached === undefined
24
+ ? { ...base, checkState: 'unchecked', offline: false, usedCache: false, policyUnavailable: true, restricted: false, modelProxyRestricted: false }
25
+ : statusFromPolicy(base, cached.policy, cached.checkedAt, false, true);
26
+ }
27
+ export async function checkAwikiUpdatePolicy(options) {
28
+ const origin = new URL(options.tenant.backendBaseUrl).origin;
29
+ assertPolicyOrigin(origin, options.allowInsecureLoopback === true);
30
+ const cachePath = policyCachePath(options.stateRoot, options.tenant.tenantId, origin);
31
+ const cached = readCache(cachePath, origin);
32
+ const currentPluginVersion = options.currentPluginVersion ?? DSH_AWIKI_VERSION;
33
+ const base = {
34
+ tenantId: options.tenant.tenantId,
35
+ policyOrigin: origin,
36
+ tenantGeneration: options.generation,
37
+ currentPluginVersion,
38
+ ...options.currentModelProxyVersion === undefined
39
+ ? {}
40
+ : { currentModelProxyVersion: options.currentModelProxyVersion },
41
+ };
42
+ const timeout = AbortSignal.timeout(options.timeoutMs ?? 15_000);
43
+ const signal = options.signal === undefined ? timeout : AbortSignal.any([options.signal, timeout]);
44
+ const bounded = async (operation) => {
45
+ signal.throwIfAborted();
46
+ let abort;
47
+ const cancelled = new Promise((_, reject) => {
48
+ abort = () => { reject(signal.reason); };
49
+ signal.addEventListener('abort', abort, { once: true });
50
+ });
51
+ try {
52
+ return await Promise.race([operation, cancelled]);
53
+ }
54
+ finally {
55
+ signal.removeEventListener('abort', abort);
56
+ }
57
+ };
58
+ try {
59
+ signal.throwIfAborted();
60
+ const endpoint = new URL('/user-service/v1/server-info', origin);
61
+ endpoint.searchParams.set('client_platform', 'dsh');
62
+ const response = await bounded((options.fetcher ?? fetch)(endpoint, {
63
+ method: 'GET',
64
+ headers: { accept: 'application/json', 'cache-control': 'no-store' },
65
+ cache: 'no-store',
66
+ redirect: 'error',
67
+ signal,
68
+ }));
69
+ signal.throwIfAborted();
70
+ if (response.status === 404 && options.tenant.kind === 'custom') {
71
+ rmSync(cachePath, { force: true });
72
+ return {
73
+ ...base,
74
+ offline: false,
75
+ usedCache: false,
76
+ policyUnavailable: true,
77
+ checkState: 'unavailable',
78
+ restricted: false,
79
+ modelProxyRestricted: false,
80
+ };
81
+ }
82
+ if (response.redirected
83
+ || (response.url !== '' && new URL(response.url).origin !== origin)) {
84
+ throw new Error('update policy response crossed its tenant origin');
85
+ }
86
+ if (!response.ok)
87
+ throw new Error(`policy status ${response.status}`);
88
+ const bytes = await bounded(readPolicyBody(response));
89
+ signal.throwIfAborted();
90
+ if (bytes.byteLength > MAX_POLICY_BYTES)
91
+ throw new Error('policy response exceeds 1 MiB');
92
+ const policy = decodeServerInfoPolicy(JSON.parse(Buffer.from(bytes).toString('utf8')), origin, cached?.policy.policy_revision);
93
+ if (policy === undefined) {
94
+ rmSync(cachePath, { force: true });
95
+ return {
96
+ ...base,
97
+ offline: false,
98
+ usedCache: false,
99
+ policyUnavailable: true,
100
+ checkState: 'unavailable',
101
+ restricted: false,
102
+ modelProxyRestricted: false,
103
+ checkedAt: new Date().toISOString(),
104
+ };
105
+ }
106
+ if (cached !== undefined && policy.policy_revision < cached.policy.policy_revision) {
107
+ throw new Error('policy revision moved backwards');
108
+ }
109
+ const checkedAt = new Date().toISOString();
110
+ try {
111
+ writeCache(cachePath, { checkedAt, policy });
112
+ }
113
+ catch { /* A cache write failure must not discard verified live requirements. */ }
114
+ return statusFromPolicy(base, policy, checkedAt, false, false);
115
+ }
116
+ catch (error) {
117
+ if (options.signal?.aborted === true)
118
+ throw error;
119
+ if (cached !== undefined) {
120
+ return { ...statusFromPolicy(base, cached.policy, cached.checkedAt, true, true), checkState: 'failed' };
121
+ }
122
+ return {
123
+ ...base,
124
+ offline: true,
125
+ usedCache: false,
126
+ policyUnavailable: true,
127
+ checkState: 'failed',
128
+ restricted: false,
129
+ modelProxyRestricted: false,
130
+ };
131
+ }
132
+ }
133
+ async function readPolicyBody(response) {
134
+ const declaredLength = Number(response.headers.get('content-length'));
135
+ if (Number.isFinite(declaredLength) && declaredLength > MAX_POLICY_BYTES)
136
+ throw new Error('policy response exceeds 1 MiB');
137
+ if (response.body === null)
138
+ throw new Error('empty policy response');
139
+ const reader = response.body.getReader();
140
+ const chunks = [];
141
+ let length = 0;
142
+ try {
143
+ while (true) {
144
+ const { value, done } = await reader.read();
145
+ if (done)
146
+ break;
147
+ length += value.byteLength;
148
+ if (length > MAX_POLICY_BYTES) {
149
+ await reader.cancel();
150
+ throw new Error('policy response exceeds 1 MiB');
151
+ }
152
+ chunks.push(value);
153
+ }
154
+ }
155
+ finally {
156
+ reader.releaseLock();
157
+ }
158
+ return Buffer.concat(chunks, length);
159
+ }
160
+ function statusFromPolicy(base, policy, checkedAt, offline, usedCache) {
161
+ const plugin = policy.packages.plugin;
162
+ const modelProxy = policy.packages.model_proxy;
163
+ const updateAvailable = compareVersions(base.currentPluginVersion, plugin.recommended_version) < 0
164
+ || (modelProxy !== undefined && base.currentModelProxyVersion !== undefined
165
+ && compareVersions(base.currentModelProxyVersion, modelProxy.recommended_version) < 0);
166
+ const command = upgradeCommand(base, plugin, modelProxy);
167
+ return {
168
+ ...base,
169
+ checkState: 'ready',
170
+ updateAvailable,
171
+ ...command === undefined ? {} : { upgradeCommand: command },
172
+ policyRevision: policy.policy_revision,
173
+ recommendedPluginVersion: plugin.recommended_version,
174
+ minimumPluginVersion: plugin.min_supported_version,
175
+ ...modelProxy === undefined ? {} : {
176
+ recommendedModelProxyVersion: modelProxy.recommended_version,
177
+ minimumModelProxyVersion: modelProxy.min_supported_version,
178
+ },
179
+ releaseNotesUrl: policy.release_notes_url,
180
+ ...plugin.installable === false ? {} : { pluginTarget: publicTarget(plugin) },
181
+ ...modelProxy === undefined || modelProxy.installable === false ? {} : { modelProxyTarget: publicTarget(modelProxy) },
182
+ offline,
183
+ usedCache,
184
+ policyUnavailable: false,
185
+ restricted: compareVersions(base.currentPluginVersion, plugin.min_supported_version) < 0,
186
+ modelProxyRestricted: modelProxy !== undefined && base.currentModelProxyVersion !== undefined
187
+ && compareVersions(base.currentModelProxyVersion, modelProxy.min_supported_version) < 0,
188
+ checkedAt,
189
+ };
190
+ }
191
+ /** Exact published targets only; never downgrade a newer installed component. */
192
+ function upgradeCommand(current, plugin, proxy) {
193
+ const pluginUpgrade = compareVersions(current.currentPluginVersion, plugin.recommended_version) < 0;
194
+ const proxyUpgrade = proxy !== undefined && current.currentModelProxyVersion !== undefined
195
+ && compareVersions(current.currentModelProxyVersion, proxy.recommended_version) < 0;
196
+ if ((!pluginUpgrade && !proxyUpgrade) || plugin.installable === false
197
+ || (current.currentModelProxyVersion !== undefined && proxy?.installable === false))
198
+ return undefined;
199
+ // A newer installed proxy's dependency range is unknown to this policy; offer
200
+ // the install guide instead of inventing a potentially incompatible pair.
201
+ if (current.currentModelProxyVersion !== undefined && (proxy === undefined
202
+ || compareVersions(current.currentModelProxyVersion, proxy.recommended_version) > 0))
203
+ return undefined;
204
+ const pluginVersion = pluginUpgrade ? plugin.recommended_version : current.currentPluginVersion;
205
+ if (current.currentModelProxyVersion !== undefined && proxy?.requires_plugin !== undefined && !satisfies(pluginVersion, proxy.requires_plugin, { includePrerelease: true }))
206
+ return undefined;
207
+ const targets = [pluginUpgrade ? `@awiki/dsh-plugin@${pluginVersion}` : undefined,
208
+ proxyUpgrade ? `@awiki/dsh-model-proxy@${proxy.recommended_version}` : undefined].filter(Boolean);
209
+ return `dsh plugin add ${targets.join(' ')}`;
210
+ }
211
+ function publicTarget(value) {
212
+ return {
213
+ name: value.name,
214
+ recommendedVersion: value.recommended_version,
215
+ minimumVersion: value.min_supported_version,
216
+ integrity: value.integrity,
217
+ ...value.repository === undefined ? {} : { repository: value.repository },
218
+ ...value.requires_plugin === undefined ? {} : { requiresPlugin: value.requires_plugin },
219
+ };
220
+ }
221
+ function decodePolicy(value, origin) {
222
+ if (!isRecord(value)
223
+ || value.product !== PRODUCT
224
+ || value.channel !== CHANNEL
225
+ || value.policy_origin !== origin
226
+ || !Number.isSafeInteger(value.policy_revision) || value.policy_revision < 1
227
+ || typeof value.published_at !== 'string' || Number.isNaN(Date.parse(value.published_at))
228
+ || typeof value.release_notes_url !== 'string'
229
+ || !isRecord(value.packages))
230
+ throw new Error('invalid update policy');
231
+ const releaseNotes = value.release_notes_url === '' ? undefined : new URL(value.release_notes_url);
232
+ if (releaseNotes !== undefined)
233
+ assertPolicyOrigin(releaseNotes.origin, origin.startsWith('http://'));
234
+ const plugin = decodePackage(value.packages.plugin, '@awiki/dsh-plugin');
235
+ const modelProxy = value.packages.model_proxy === undefined
236
+ ? undefined
237
+ : decodePackage(value.packages.model_proxy, '@awiki/dsh-model-proxy');
238
+ if (compareVersions(plugin.min_supported_version, plugin.recommended_version) > 0
239
+ || (modelProxy !== undefined
240
+ && compareVersions(modelProxy.min_supported_version, modelProxy.recommended_version) > 0)) {
241
+ throw new Error('minimum version exceeds recommended version');
242
+ }
243
+ return {
244
+ product: PRODUCT,
245
+ channel: CHANNEL,
246
+ policy_origin: origin,
247
+ policy_revision: value.policy_revision,
248
+ published_at: value.published_at,
249
+ release_notes_url: releaseNotes?.toString() ?? '',
250
+ packages: { plugin, ...modelProxy === undefined ? {} : { model_proxy: modelProxy } },
251
+ };
252
+ }
253
+ function decodeServerInfoPolicy(value, origin, minimumRevision = 0) {
254
+ if (!isRecord(value) || value.schema_version !== 1)
255
+ throw new Error('invalid server-info');
256
+ const releases = value.client_versions;
257
+ // Absence of a versioned policy cannot authorize removing a cached minimum.
258
+ // Explicit disabled products are validated below; custom 404 is handled by
259
+ // the transport boundary.
260
+ if (!isRecord(releases)
261
+ || releases.schema_version !== 1
262
+ || releases.channel !== CHANNEL
263
+ || releases.policy_origin !== origin
264
+ || !Number.isSafeInteger(releases.policy_revision) || releases.policy_revision < 1
265
+ || typeof releases.published_at !== 'string' || Number.isNaN(Date.parse(releases.published_at))
266
+ || !isRecord(releases.products)
267
+ || !isRecord(releases.products.dsh))
268
+ throw new Error('invalid client version policy');
269
+ // A stale disabled product must not erase a newer cached compatibility gate.
270
+ if (releases.policy_revision < minimumRevision)
271
+ throw new Error('policy revision moved backwards');
272
+ const product = releases.products.dsh;
273
+ if (product.enabled === false) {
274
+ if (product.compatibility === undefined || product.compatibility === null)
275
+ return undefined;
276
+ if (!isRecord(product.compatibility))
277
+ throw new Error('invalid DSH compatibility');
278
+ const component = (value, name) => {
279
+ if (!isRecord(value))
280
+ throw new Error('invalid DSH component compatibility');
281
+ return { name, recommended_version: value.recommended_version,
282
+ min_supported_version: value.minimum_supported_version, installable: false };
283
+ };
284
+ return decodePolicy({ product: PRODUCT, channel: CHANNEL, policy_origin: origin,
285
+ policy_revision: releases.policy_revision, published_at: releases.published_at,
286
+ release_notes_url: product.release_notes_url ?? '', packages: {
287
+ plugin: component(product.compatibility.plugin, '@awiki/dsh-plugin'),
288
+ ...product.compatibility.model_proxy == null ? {} : {
289
+ model_proxy: component(product.compatibility.model_proxy, '@awiki/dsh-model-proxy'),
290
+ },
291
+ } }, origin);
292
+ }
293
+ if (product.enabled !== true
294
+ || typeof product.release_notes_url !== 'string'
295
+ || !isRecord(product.plugin))
296
+ throw new Error('invalid DSH client version policy');
297
+ const plugin = decodeServerPackage(product.plugin, '@awiki/dsh-plugin');
298
+ const modelProxy = isRecord(product.model_proxy) && product.model_proxy.enabled === true
299
+ ? decodeServerPackage(product.model_proxy, '@awiki/dsh-model-proxy')
300
+ : undefined;
301
+ return decodePolicy({
302
+ product: PRODUCT,
303
+ channel: CHANNEL,
304
+ policy_origin: releases.policy_origin,
305
+ policy_revision: releases.policy_revision,
306
+ published_at: releases.published_at,
307
+ release_notes_url: product.release_notes_url,
308
+ packages: {
309
+ plugin,
310
+ ...modelProxy === undefined ? {} : { model_proxy: modelProxy },
311
+ },
312
+ }, origin);
313
+ }
314
+ function decodeServerPackage(value, expectedName) {
315
+ return decodePackage({
316
+ name: value.package_name,
317
+ recommended_version: value.recommended_version,
318
+ min_supported_version: value.minimum_supported_version,
319
+ integrity: value.integrity,
320
+ repository: value.repository === null ? undefined : value.repository,
321
+ requires_plugin: value.requires_plugin === null ? undefined : value.requires_plugin,
322
+ }, expectedName);
323
+ }
324
+ function decodePackage(value, expectedName) {
325
+ if (!isRecord(value)
326
+ || value.name !== expectedName
327
+ || typeof value.recommended_version !== 'string'
328
+ || typeof value.min_supported_version !== 'string'
329
+ || (value.installable !== false && (typeof value.integrity !== 'string' || !/^sha512-[A-Za-z0-9+/]+={0,2}$/u.test(value.integrity)))
330
+ || (value.repository !== undefined && typeof value.repository !== 'string')
331
+ || (value.requires_plugin !== undefined && typeof value.requires_plugin !== 'string')) {
332
+ throw new Error('invalid update package target');
333
+ }
334
+ assertVersion(value.recommended_version);
335
+ assertVersion(value.min_supported_version);
336
+ return {
337
+ name: value.name,
338
+ recommended_version: value.recommended_version,
339
+ min_supported_version: value.min_supported_version,
340
+ ...value.installable === false ? { installable: false } : { integrity: value.integrity },
341
+ ...value.repository === undefined ? {} : { repository: value.repository },
342
+ ...value.requires_plugin === undefined ? {} : { requires_plugin: value.requires_plugin },
343
+ };
344
+ }
345
+ function policyCachePath(stateRoot, tenantId, origin) {
346
+ const key = createHash('sha256')
347
+ .update(`${tenantId}\n${origin}\n${PRODUCT}\n${CHANNEL}`, 'utf8')
348
+ .digest('hex');
349
+ return join(stateRoot, 'update-policy', `${key}.json`);
350
+ }
351
+ function readCache(path, origin) {
352
+ try {
353
+ const value = JSON.parse(readFileSync(path, 'utf8'));
354
+ if (!isRecord(value) || typeof value.checkedAt !== 'string')
355
+ return undefined;
356
+ return { checkedAt: value.checkedAt, policy: decodePolicy(value.policy, origin) };
357
+ }
358
+ catch {
359
+ return undefined;
360
+ }
361
+ }
362
+ function writeCache(path, value) {
363
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
364
+ const temporary = `${path}.tmp-${process.pid}`;
365
+ writeFileSync(temporary, `${JSON.stringify(value, undefined, 2)}\n`, { mode: 0o600 });
366
+ renameSync(temporary, path);
367
+ }
368
+ function assertPolicyOrigin(origin, allowLoopback) {
369
+ const url = new URL(origin);
370
+ if (url.protocol === 'https:')
371
+ return;
372
+ if (allowLoopback && url.protocol === 'http:' && ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname))
373
+ return;
374
+ throw new Error('update policy origin must use HTTPS');
375
+ }
376
+ function isRecord(value) {
377
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
378
+ }
379
+ //# sourceMappingURL=update-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-policy.js","sourceRoot":"","sources":["../../src/update-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** Shared strict version comparison for update presentation and Host gates. */
2
+ export declare function assertVersion(value: string): void;
3
+ export declare function compareVersions(left: string, right: string): number;
4
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAIjD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAgCnE"}
@@ -0,0 +1,44 @@
1
+ /** Shared strict version comparison for update presentation and Host gates. */
2
+ export function assertVersion(value) {
3
+ if (value.length > 256 || !/^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/u.test(value)) {
4
+ throw new Error('invalid semantic version');
5
+ }
6
+ }
7
+ export function compareVersions(left, right) {
8
+ assertVersion(left);
9
+ assertVersion(right);
10
+ const parse = (value) => {
11
+ const withoutBuild = value.split('+', 1)[0];
12
+ const separator = withoutBuild.indexOf('-');
13
+ const core = (separator < 0 ? withoutBuild : withoutBuild.slice(0, separator)).split('.').map(BigInt);
14
+ return separator < 0 ? { core } : { core, prerelease: withoutBuild.slice(separator + 1).split('.') };
15
+ };
16
+ const a = parse(left);
17
+ const b = parse(right);
18
+ for (let index = 0; index < 3; index += 1) {
19
+ const difference = a.core[index] - b.core[index];
20
+ if (difference !== 0n)
21
+ return difference < 0n ? -1 : 1;
22
+ }
23
+ if (a.prerelease === undefined || b.prerelease === undefined) {
24
+ return a.prerelease === b.prerelease ? 0 : a.prerelease === undefined ? 1 : -1;
25
+ }
26
+ for (let index = 0; index < Math.min(a.prerelease.length, b.prerelease.length); index += 1) {
27
+ const leftPart = a.prerelease[index];
28
+ const rightPart = b.prerelease[index];
29
+ if (leftPart === rightPart)
30
+ continue;
31
+ const leftNumeric = /^\d+$/u.test(leftPart);
32
+ const rightNumeric = /^\d+$/u.test(rightPart);
33
+ if (leftNumeric !== rightNumeric)
34
+ return leftNumeric ? -1 : 1;
35
+ if (leftNumeric)
36
+ return BigInt(leftPart) < BigInt(rightPart) ? -1 : 1;
37
+ return leftPart < rightPart ? -1 : 1;
38
+ }
39
+ if (a.prerelease.length !== b.prerelease.length) {
40
+ return a.prerelease.length < b.prerelease.length ? -1 : 1;
41
+ }
42
+ return 0;
43
+ }
44
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awiki/dsh-plugin",
3
- "version": "0.3.7-dsh-test.20260831.2",
3
+ "version": "0.3.10",
4
4
  "description": "AWiki identity and messaging plugin for DeepSeek Harness",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -65,20 +65,6 @@
65
65
  "THIRD_PARTY_NOTICES.md",
66
66
  "LICENSE"
67
67
  ],
68
- "scripts": {
69
- "build:types": "tsc -p tsconfig.host.json && tsc -p tsconfig.client.json",
70
- "build:typert": "node scripts/generate-typert.mjs",
71
- "build:bundle": "pnpm run build:typert && tsdown && node scripts/normalize-built.mjs",
72
- "build": "pnpm run build:types && pnpm run build:bundle",
73
- "typecheck": "tsc -p tsconfig.host.json --noEmit && tsc -p tsconfig.client.json --noEmit",
74
- "test": "vitest run",
75
- "check:generated": "node scripts/check-generated.mjs",
76
- "check:public": "node scripts/check-public.mjs",
77
- "verify": "pnpm run check:public && pnpm run build && pnpm run typecheck && pnpm run check:generated && pnpm run test",
78
- "verify:workspace": "pnpm run verify && pnpm --filter @awiki/dsh-model-proxy run verify",
79
- "verify:candidate": "node scripts/verify-release-candidate.mjs",
80
- "prepack": "pnpm run verify"
81
- },
82
68
  "keywords": [
83
69
  "awiki",
84
70
  "deepseek",
@@ -117,12 +103,13 @@
117
103
  }
118
104
  },
119
105
  "dependencies": {
120
- "@awiki/im-core-node": "0.2.1-dsh-test.20260831.1",
106
+ "@awiki/im-core-node": "0.2.4",
121
107
  "@deepseek-ai/schemastery": "^3.18.1",
108
+ "semver": "7.8.5",
122
109
  "zod": "^4.4.3"
123
110
  },
124
111
  "peerDependencies": {
125
- "@agent-network-protocol/dsh-anp-identity": "0.1.0-dsh-test.20260831.1",
112
+ "@agent-network-protocol/dsh-anp-identity": "^0.1.1",
126
113
  "@deepseek-ai/cordis": "^4.0.1",
127
114
  "@deepseek-ai/dsh-agent": "0.1.1-rc.2",
128
115
  "@deepseek-ai/dsh-agent-default-model": "0.1.1-rc.2",
@@ -150,7 +137,7 @@
150
137
  }
151
138
  },
152
139
  "devDependencies": {
153
- "@agent-network-protocol/dsh-anp-identity": "0.1.0",
140
+ "@agent-network-protocol/dsh-anp-identity": "0.1.1",
154
141
  "@deepseek-ai/cordis": "^4.0.1",
155
142
  "@deepseek-ai/cordis-plugin-include": "^1.0.6",
156
143
  "@deepseek-ai/cordis-plugin-loader": "^1.0.2",
@@ -177,10 +164,12 @@
177
164
  "@deepseek-ai/dsh-typert-protocol": "0.1.1-rc.2",
178
165
  "@deepseek-ai/dsh-user-approval": "0.1.1-rc.2",
179
166
  "@deepseek-ai/dsh-workspace": "0.1.1-rc.2",
167
+ "@playwright/test": "1.62.1",
180
168
  "@testing-library/react": "^16.3.2",
181
169
  "@types/node": "^24.3.0",
182
170
  "@types/react": "^18.3.23",
183
171
  "@types/react-dom": "^18.3.7",
172
+ "@types/semver": "7.7.1",
184
173
  "jsdom": "^26.1.0",
185
174
  "lightningcss": "^1.30.1",
186
175
  "qrcode": "1.5.4",
@@ -189,10 +178,34 @@
189
178
  "tsdown": "^0.22.14",
190
179
  "typescript": "^6.0.3",
191
180
  "vite": "^8.2.1",
192
- "vitest": "^4.1.10"
181
+ "vitest": "^4.1.10",
182
+ "yaml": "2.9.0"
193
183
  },
194
184
  "engines": {
195
185
  "node": "^22.19.0 || >=24.0.0"
196
186
  },
197
- "packageManager": "pnpm@11.22.0"
198
- }
187
+ "scripts": {
188
+ "build:types": "tsc -p tsconfig.host.json && tsc -p tsconfig.client.json",
189
+ "build:typert": "node scripts/generate-typert.mjs",
190
+ "build:bundle": "pnpm run build:typert && tsdown && node scripts/normalize-built.mjs",
191
+ "build": "node scripts/sync-package-versions.mjs && node scripts/build.mjs",
192
+ "build:raw": "pnpm run build:types && pnpm run build:bundle",
193
+ "typecheck": "tsc -p tsconfig.host.json --noEmit && tsc -p tsconfig.client.json --noEmit",
194
+ "typecheck:e2e": "tsc -p tsconfig.e2e.json --noEmit",
195
+ "test": "vitest run",
196
+ "e2e:smoke": "node tests/e2e/support/run-e2e.ts smoke",
197
+ "e2e:smoke:webkit": "node tests/e2e/support/run-e2e.ts smoke-webkit",
198
+ "e2e:live": "node tests/e2e/support/run-e2e.ts live",
199
+ "prepare:test-native": "node scripts/prepare-e2e-native-fixtures.mjs",
200
+ "check:generated": "node scripts/sync-package-versions.mjs --check && node scripts/check-generated.mjs",
201
+ "check:public": "node scripts/check-public.mjs",
202
+ "verify": "pnpm run test:dependencies && pnpm run check:public && pnpm run build && pnpm run typecheck && pnpm run typecheck:e2e && pnpm run check:generated && pnpm run prepare:test-native && pnpm run test",
203
+ "verify:workspace": "pnpm run verify && pnpm --filter @awiki/dsh-model-proxy run verify",
204
+ "verify:candidate": "node scripts/verify-release-candidate.mjs",
205
+ "build:registry": "python3 scripts/dependencies/run.py",
206
+ "build:local": "python3 scripts/dependencies/run.py --deps local --local-config dependencies.local.json",
207
+ "build:release": "python3 scripts/dependencies/run.py --profile release",
208
+ "check:dependencies": "node scripts/check-dependency-sources.mjs",
209
+ "test:dependencies": "python3 -m unittest discover -s scripts/dependencies -p \"test_*.py\" -v && node --test scripts/dependencies/source-lock.test.mjs"
210
+ }
211
+ }
@@ -1,22 +0,0 @@
1
- /** Private, owner-bound persistence for mail successfully sent by this installation. */
2
- import type { AwikiDid, AwikiMailAccount, AwikiMailInboxPage, AwikiMailInboxRequest, AwikiMailMessage, AwikiMailMessageId, AwikiMailSendRequest, AwikiMailSendResult } from './types.ts';
3
- export declare const LOCAL_SENT_MAIL_ID_PREFIX = "awiki-sent-v1:";
4
- export declare function isLocalSentMailId(messageId: AwikiMailMessageId): boolean;
5
- /** Atomic, bounded history of sends accepted by the Mail Service. */
6
- export declare class AwikiSentMailStore {
7
- private readonly hostDirectory;
8
- private readonly directory;
9
- private mutation;
10
- constructor(stateRoot: string);
11
- list(ownerDid: AwikiDid, request: AwikiMailInboxRequest): Promise<AwikiMailInboxPage>;
12
- read(ownerDid: AwikiDid, messageId: AwikiMailMessageId): Promise<AwikiMailMessage | undefined>;
13
- append(ownerDid: AwikiDid, request: AwikiMailSendRequest, result: AwikiMailSendResult, account?: AwikiMailAccount): Promise<void>;
14
- clear(): Promise<void>;
15
- private load;
16
- private write;
17
- private ensureDirectory;
18
- private hasDirectory;
19
- private path;
20
- private key;
21
- }
22
- //# sourceMappingURL=sent-mail-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sent-mail-store.d.ts","sourceRoot":"","sources":["../../src/sent-mail-store.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAMxF,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,YAAY,CAAA;AAOnB,eAAO,MAAM,yBAAyB,mBAAmB,CAAA;AA0GzD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAExE;AAED,qEAAqE;AACrE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAmC;gBAEhC,SAAS,EAAE,MAAM;IAKvB,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAcrF,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAMpG,MAAM,CACX,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC;IAqBH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAerB,IAAI;YA2BJ,KAAK;YAgBL,eAAe;YAWf,YAAY;IAW1B,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,GAAG;CAGZ"}