@awiki/dsh-plugin 0.3.11-rc.3 → 0.3.12

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 (59) hide show
  1. package/lib/client.js +118 -50
  2. package/lib/client.js.map +1 -1
  3. package/lib/index.js +162 -36
  4. package/lib/provider.js +2 -2
  5. package/lib/{sdk-adapter-DpqT2en9.mjs → sdk-adapter-DFDY7Hih.mjs} +19 -2
  6. package/lib/typert.host.js +10 -0
  7. package/lib/typert.remote-client.js +10 -0
  8. package/lib/types/client/AwikiUpdates.d.ts.map +1 -1
  9. package/lib/types/client/AwikiUpdates.js +21 -10
  10. package/lib/types/client/AwikiUpdates.js.map +1 -1
  11. package/lib/types/client/controller.js +1 -1
  12. package/lib/types/client/controller.js.map +1 -1
  13. package/lib/types/client/settings-controller.d.ts +1 -0
  14. package/lib/types/client/settings-controller.d.ts.map +1 -1
  15. package/lib/types/client/settings-controller.js +24 -10
  16. package/lib/types/client/settings-controller.js.map +1 -1
  17. package/lib/types/client/settings-locales.d.ts +1 -1
  18. package/lib/types/client/settings-locales.d.ts.map +1 -1
  19. package/lib/types/client/settings-locales.js +10 -4
  20. package/lib/types/client/settings-locales.js.map +1 -1
  21. package/lib/types/desktop-distribution.d.ts +7 -3
  22. package/lib/types/desktop-distribution.d.ts.map +1 -1
  23. package/lib/types/desktop-distribution.js +27 -8
  24. package/lib/types/desktop-distribution.js.map +1 -1
  25. package/lib/types/index.d.ts +1 -1
  26. package/lib/types/index.d.ts.map +1 -1
  27. package/lib/types/index.js +20 -13
  28. package/lib/types/index.js.map +1 -1
  29. package/lib/types/listener.js +1 -1
  30. package/lib/types/listener.js.map +1 -1
  31. package/lib/types/message-target.d.ts +4 -0
  32. package/lib/types/message-target.d.ts.map +1 -0
  33. package/lib/types/message-target.js +14 -0
  34. package/lib/types/message-target.js.map +1 -0
  35. package/lib/types/package-version.generated.d.ts +2 -2
  36. package/lib/types/package-version.generated.d.ts.map +1 -1
  37. package/lib/types/package-version.generated.js +2 -2
  38. package/lib/types/package-version.generated.js.map +1 -1
  39. package/lib/types/provider.js +1 -1
  40. package/lib/types/provider.js.map +1 -1
  41. package/lib/types/sdk-adapter.d.ts.map +1 -1
  42. package/lib/types/sdk-adapter.js +7 -1
  43. package/lib/types/sdk-adapter.js.map +1 -1
  44. package/lib/types/settings-rpc-contract.d.ts +1 -0
  45. package/lib/types/settings-rpc-contract.d.ts.map +1 -1
  46. package/lib/types/settings-rpc-contract.js +2 -0
  47. package/lib/types/settings-rpc-contract.js.map +1 -1
  48. package/lib/types/types.d.ts +8 -1
  49. package/lib/types/types.d.ts.map +1 -1
  50. package/lib/types/types.js.map +1 -1
  51. package/lib/types/update-installation.d.ts +18 -0
  52. package/lib/types/update-installation.d.ts.map +1 -0
  53. package/lib/types/update-installation.js +101 -0
  54. package/lib/types/update-installation.js.map +1 -0
  55. package/lib/types/update-policy.d.ts +5 -2
  56. package/lib/types/update-policy.d.ts.map +1 -1
  57. package/lib/types/update-policy.js +14 -8
  58. package/lib/types/update-policy.js.map +1 -1
  59. package/package.json +74 -77
package/lib/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as fencedMailRecoveryObservability, i as failedMailRecoveryObservability, o as successfulMailRecoveryObservability, r as downloadedAttachment, t as AwikiSdkError } from "./sdk-adapter-DpqT2en9.mjs";
1
+ import { a as fencedMailRecoveryObservability, i as failedMailRecoveryObservability, o as successfulMailRecoveryObservability, r as downloadedAttachment, s as isMessageTarget, t as AwikiSdkError } from "./sdk-adapter-DFDY7Hih.mjs";
2
2
  import "@deepseek-ai/cordis";
3
3
  import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
4
4
  import { homedir } from "node:os";
@@ -13,14 +13,14 @@ import { installModelSelection } from "@deepseek-ai/dsh-agent";
13
13
  import { createUserMessage } from "@deepseek-ai/dsh-llm";
14
14
  import { fileURLToPath } from "node:url";
15
15
  import { copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
16
- import { satisfies } from "semver";
16
+ import { satisfies, validRange } from "semver";
17
17
  //#region lib/types/builtin-tenant-config.js
18
18
  /** Build-injected two-slot tenant catalog with a source-tree default for tests. */
19
- function record$1(value) {
19
+ function record$2(value) {
20
20
  return typeof value === "object" && value !== null && !Array.isArray(value);
21
21
  }
22
22
  function definition(value) {
23
- if (!record$1(value) || !record$1(value.display_name) || typeof value.display_name["zh-CN"] !== "string" || value.display_name["zh-CN"].trim() === "" || typeof value.display_name.en !== "string" || value.display_name.en.trim() === "" || typeof value.backend_origin !== "string" || typeof value.did_host !== "string") throw new Error("awiki: invalid built-in tenant definition");
23
+ if (!record$2(value) || !record$2(value.display_name) || typeof value.display_name["zh-CN"] !== "string" || value.display_name["zh-CN"].trim() === "" || typeof value.display_name.en !== "string" || value.display_name.en.trim() === "" || typeof value.backend_origin !== "string" || typeof value.did_host !== "string") throw new Error("awiki: invalid built-in tenant definition");
24
24
  const origin = new URL(value.backend_origin);
25
25
  const loopback = origin.protocol === "http:" && [
26
26
  "localhost",
@@ -40,7 +40,7 @@ function definition(value) {
40
40
  };
41
41
  }
42
42
  function decodeBuiltinTenantConfig(value) {
43
- if (!record$1(value) || value.schema_version !== 1 || value.default_slot !== "primary" && value.default_slot !== "secondary" || !record$1(value.tenants) || Object.keys(value.tenants).sort().join(",") !== "primary,secondary") throw new Error("awiki: invalid built-in tenant config");
43
+ if (!record$2(value) || value.schema_version !== 1 || value.default_slot !== "primary" && value.default_slot !== "secondary" || !record$2(value.tenants) || Object.keys(value.tenants).sort().join(",") !== "primary,secondary") throw new Error("awiki: invalid built-in tenant config");
44
44
  const primary = definition(value.tenants.primary);
45
45
  const secondary = definition(value.tenants.secondary);
46
46
  if (primary.backendOrigin === secondary.backendOrigin || primary.didHost === secondary.didHost) throw new Error("awiki: built-in tenant slots must use distinct endpoints");
@@ -184,18 +184,34 @@ function compareVersions(left, right) {
184
184
  function decodeDesktopDistribution(value) {
185
185
  if (typeof value !== "object" || value === null) return void 0;
186
186
  const view = value;
187
- if (view.schemaVersion !== 1 || view.distributionId !== "awiki-dsh-desktop" || typeof view.currentVersion !== "string" || view.channel !== "stable" && view.channel !== "prerelease" || typeof view.downloadPageUrl !== "string" || ![
187
+ if (view.schemaVersion !== 1 && view.schemaVersion !== 2 || view.distributionId !== "awiki-dsh-desktop" || typeof view.currentVersion !== "string" || view.channel !== "stable" && view.channel !== "prerelease" || view.downloadPageUrl !== void 0 && typeof view.downloadPageUrl !== "string" || ![
188
188
  "unchecked",
189
189
  "checking",
190
190
  "ready",
191
- "failed"
191
+ "failed",
192
+ "unavailable"
192
193
  ].includes(String(view.state)) || typeof view.updateAvailable !== "boolean" || typeof view.usedCache !== "boolean" || view.latestVersion !== void 0 && typeof view.latestVersion !== "string" || view.checkedAt !== void 0 && typeof view.checkedAt !== "string" || view.noRelease !== void 0 && typeof view.noRelease !== "boolean") return void 0;
193
194
  try {
194
195
  assertVersion(view.currentVersion);
196
+ if (view.schemaVersion === 1) return {
197
+ schemaVersion: 1,
198
+ distributionId: "awiki-dsh-desktop",
199
+ currentVersion: view.currentVersion,
200
+ channel: view.channel,
201
+ state: "unavailable",
202
+ updateAvailable: false,
203
+ usedCache: false
204
+ };
205
+ const hasTenant = view.tenantId !== void 0 || view.policyOrigin !== void 0 || view.tenantGeneration !== void 0;
206
+ if (hasTenant && (typeof view.tenantId !== "string" || view.tenantId.length === 0 || typeof view.policyOrigin !== "string" || new URL(view.policyOrigin).origin !== view.policyOrigin || new URL(view.policyOrigin).protocol !== "https:" || !Number.isSafeInteger(view.tenantGeneration) || view.tenantGeneration < 0)) return void 0;
207
+ if (!hasTenant && view.state !== "unavailable") return void 0;
208
+ if (view.policyRevision !== void 0 && (!Number.isSafeInteger(view.policyRevision) || view.policyRevision < 1)) return void 0;
195
209
  if (view.latestVersion !== void 0) assertVersion(view.latestVersion);
196
210
  if (view.checkedAt !== void 0 && !Number.isFinite(Date.parse(view.checkedAt))) return void 0;
197
- const url = new URL(view.downloadPageUrl);
198
- if (url.protocol !== "https:" || url.username !== "" || url.password !== "") return void 0;
211
+ if (typeof view.downloadPageUrl === "string") {
212
+ const url = new URL(view.downloadPageUrl);
213
+ if (url.protocol !== "https:" || url.username !== "" || url.password !== "" || url.origin !== view.policyOrigin) return void 0;
214
+ }
199
215
  } catch {
200
216
  return;
201
217
  }
@@ -216,11 +232,17 @@ function decodeDesktopDistribution(value) {
216
232
  };
217
233
  }
218
234
  return {
219
- schemaVersion: 1,
235
+ schemaVersion: 2,
220
236
  distributionId: "awiki-dsh-desktop",
221
237
  currentVersion: view.currentVersion,
222
238
  channel: view.channel,
223
- downloadPageUrl: view.downloadPageUrl,
239
+ ...typeof view.downloadPageUrl === "string" ? { downloadPageUrl: view.downloadPageUrl } : {},
240
+ ...typeof view.tenantId === "string" ? {
241
+ tenantId: view.tenantId,
242
+ policyOrigin: view.policyOrigin,
243
+ tenantGeneration: view.tenantGeneration
244
+ } : {},
245
+ ...typeof view.policyRevision === "number" ? { policyRevision: view.policyRevision } : {},
224
246
  state: view.state,
225
247
  updateAvailable: view.updateAvailable,
226
248
  usedCache: view.usedCache,
@@ -1046,7 +1068,7 @@ const TIMEOUT_MS = 3e4;
1046
1068
  function invalid() {
1047
1069
  throw new AwikiSdkError("remote");
1048
1070
  }
1049
- function record(value) {
1071
+ function record$1(value) {
1050
1072
  if (typeof value !== "object" || value === null || Array.isArray(value)) invalid();
1051
1073
  return value;
1052
1074
  }
@@ -1189,10 +1211,10 @@ var AwikiMailAttachmentClient = class {
1189
1211
  });
1190
1212
  }, { allowAuthRetry });
1191
1213
  if (!response.ok) serviceFailure(response.status);
1192
- const envelope = record(JSON.parse(await response.text()));
1214
+ const envelope = record$1(JSON.parse(await response.text()));
1193
1215
  if (envelope.jsonrpc !== "2.0" || envelope.id !== 1) invalid();
1194
- if (envelope.error != null) serviceFailure(integer(record(envelope.error).code));
1195
- return record(envelope.result);
1216
+ if (envelope.error != null) serviceFailure(integer(record$1(envelope.error).code));
1217
+ return record$1(envelope.result);
1196
1218
  } catch (error) {
1197
1219
  if (error instanceof AwikiSdkError) throw error;
1198
1220
  if (error instanceof AwikiExternalHttpAuthError) {
@@ -2789,7 +2811,7 @@ var AwikiAgentListener = class {
2789
2811
  for (const [index, part] of parts.entries()) await this.awiki.sendText({
2790
2812
  target: {
2791
2813
  kind: "direct",
2792
- peer: conversation.peerDid
2814
+ conversationId: conversation.id
2793
2815
  },
2794
2816
  text: part,
2795
2817
  idempotencyKey: replyKey(messageId, index)
@@ -3469,10 +3491,88 @@ function legacyDocument(seed, usePreRegistryDefault) {
3469
3491
  });
3470
3492
  }
3471
3493
  //#endregion
3494
+ //#region lib/types/update-installation.js
3495
+ /** Host-only compatibility evidence for exact, tenant-recommended npm targets. */
3496
+ const IDENTITY_PACKAGE = "@agent-network-protocol/dsh-anp-identity";
3497
+ const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3498
+ function decodeInstallation(value) {
3499
+ if (value === void 0 || value === null) return void 0;
3500
+ if (!record(value) || !record(value.runtime_packages) || !record(value.identity) || value.identity.package_name !== "@agent-network-protocol/dsh-anp-identity" || typeof value.identity.version !== "string" || typeof value.identity.integrity !== "string" || !/^sha512-[A-Za-z0-9+/]+={0,2}$/u.test(value.identity.integrity) || typeof value.requires_identity !== "string" || value.requires_identity.length > 256 || validRange(value.requires_identity) === null) throw new Error("invalid installation requirements");
3501
+ const optional = value.optional_runtime_packages === void 0 ? {} : value.optional_runtime_packages;
3502
+ if (!record(optional)) throw new Error("invalid optional Host requirements");
3503
+ const requiredEntries = Object.entries(value.runtime_packages);
3504
+ const entries = [...requiredEntries, ...Object.entries(optional)];
3505
+ if (requiredEntries.length === 0 || entries.length > 128) throw new Error("invalid Host requirement count");
3506
+ if (Object.keys(optional).some((name) => Object.hasOwn(value.runtime_packages, name))) throw new Error("overlapping Host requirements");
3507
+ for (const [name, version] of entries) {
3508
+ if (!/^@deepseek-ai\/dsh-[a-z0-9-]+$/u.test(name) || typeof version !== "string") throw new Error("invalid Host requirement");
3509
+ assertVersion(version);
3510
+ }
3511
+ assertVersion(value.identity.version);
3512
+ if (!satisfies(value.identity.version, value.requires_identity)) throw new Error("incompatible Identity release target");
3513
+ return {
3514
+ runtime_packages: value.runtime_packages,
3515
+ requires_identity: value.requires_identity,
3516
+ ...value.optional_runtime_packages === void 0 ? {} : { optional_runtime_packages: optional },
3517
+ identity: {
3518
+ package_name: IDENTITY_PACKAGE,
3519
+ version: value.identity.version,
3520
+ integrity: value.identity.integrity
3521
+ }
3522
+ };
3523
+ }
3524
+ /** Only package manifests are read; paths and native objects never enter the public view. */
3525
+ function installedVersion(name) {
3526
+ try {
3527
+ let directory = dirname(fileURLToPath(import.meta.resolve(name)));
3528
+ for (let depth = 0; depth < 12; depth++) {
3529
+ try {
3530
+ const manifest = JSON.parse(readFileSync(join(directory, "package.json"), "utf8"));
3531
+ if (record(manifest) && manifest.name === name && typeof manifest.version === "string") {
3532
+ assertVersion(manifest.version);
3533
+ return manifest.version;
3534
+ }
3535
+ } catch {}
3536
+ const parent = dirname(directory);
3537
+ if (parent === directory) break;
3538
+ directory = parent;
3539
+ }
3540
+ } catch {}
3541
+ }
3542
+ function checkInstallation(requirements, installed) {
3543
+ if (requirements === void 0) return { blockedReason: "installation-unverified" };
3544
+ const versionOf = (name) => installed === void 0 ? installedVersion(name) : installed[name];
3545
+ for (const [name, required] of Object.entries(requirements.runtime_packages)) {
3546
+ const actual = versionOf(name);
3547
+ try {
3548
+ if (actual === void 0 || compareVersions(actual, required) !== 0) return { blockedReason: "host-incompatible" };
3549
+ } catch {
3550
+ return { blockedReason: "host-incompatible" };
3551
+ }
3552
+ }
3553
+ for (const [name, required] of Object.entries(requirements.optional_runtime_packages ?? {})) {
3554
+ const actual = versionOf(name);
3555
+ if (actual === void 0) continue;
3556
+ try {
3557
+ if (compareVersions(actual, required) !== 0) return { blockedReason: "host-incompatible" };
3558
+ } catch {
3559
+ return { blockedReason: "host-incompatible" };
3560
+ }
3561
+ }
3562
+ const identity = versionOf(IDENTITY_PACKAGE);
3563
+ try {
3564
+ if (identity === void 0 || compareVersions(identity, requirements.identity.version) < 0) return { identityTarget: `${IDENTITY_PACKAGE}@${requirements.identity.version}` };
3565
+ if (!satisfies(identity, requirements.requires_identity)) return { blockedReason: "identity-incompatible" };
3566
+ } catch {
3567
+ return { blockedReason: "identity-incompatible" };
3568
+ }
3569
+ return {};
3570
+ }
3571
+ //#endregion
3472
3572
  //#region lib/types/package-version.generated.js
3473
3573
  /** Generated from package.json by scripts/sync-package-versions.mjs. */
3474
- const DSH_AWIKI_PACKAGE_VERSION = "0.3.11-rc.3";
3475
- const DSH_AWIKI_MODEL_PROXY_PACKAGE_VERSION = "0.1.7-rc.1";
3574
+ const DSH_AWIKI_PACKAGE_VERSION = "0.3.12";
3575
+ const DSH_AWIKI_MODEL_PROXY_PACKAGE_VERSION = "0.1.7";
3476
3576
  //#endregion
3477
3577
  //#region lib/types/update-policy.js
3478
3578
  /** Tenant-scoped DSH AWiki plugin update policy and verified cache. */
@@ -3500,7 +3600,7 @@ function readAwikiUpdatePolicyStatus(options) {
3500
3600
  policyUnavailable: true,
3501
3601
  restricted: false,
3502
3602
  modelProxyRestricted: false
3503
- } : statusFromPolicy(base, cached.policy, cached.checkedAt, false, true);
3603
+ } : statusFromPolicy(base, cached.policy, cached.checkedAt, false, true, options.installedRuntime);
3504
3604
  }
3505
3605
  async function checkAwikiUpdatePolicy(options) {
3506
3606
  const origin = new URL(options.tenant.backendBaseUrl).origin;
@@ -3586,11 +3686,11 @@ async function checkAwikiUpdatePolicy(options) {
3586
3686
  policy
3587
3687
  });
3588
3688
  } catch {}
3589
- return statusFromPolicy(base, policy, checkedAt, false, false);
3689
+ return statusFromPolicy(base, policy, checkedAt, false, false, options.installedRuntime);
3590
3690
  } catch (error) {
3591
3691
  if (options.signal?.aborted === true) throw error;
3592
3692
  if (cached !== void 0) return {
3593
- ...statusFromPolicy(base, cached.policy, cached.checkedAt, true, true),
3693
+ ...statusFromPolicy(base, cached.policy, cached.checkedAt, true, true, options.installedRuntime),
3594
3694
  checkState: "failed"
3595
3695
  };
3596
3696
  return {
@@ -3627,16 +3727,18 @@ async function readPolicyBody(response) {
3627
3727
  }
3628
3728
  return Buffer.concat(chunks, length);
3629
3729
  }
3630
- function statusFromPolicy(base, policy, checkedAt, offline, usedCache) {
3730
+ function statusFromPolicy(base, policy, checkedAt, offline, usedCache, installedRuntime) {
3631
3731
  const plugin = policy.packages.plugin;
3632
3732
  const modelProxy = policy.packages.model_proxy;
3633
3733
  const updateAvailable = compareVersions(base.currentPluginVersion, plugin.recommended_version) < 0 || modelProxy !== void 0 && base.currentModelProxyVersion !== void 0 && compareVersions(base.currentModelProxyVersion, modelProxy.recommended_version) < 0;
3634
- const command = upgradeCommand(base, plugin, modelProxy);
3734
+ const installation = checkInstallation(policy.installation, installedRuntime);
3735
+ const command = installation.blockedReason === void 0 ? upgradeCommand(base, plugin, modelProxy, installation.identityTarget) : void 0;
3635
3736
  return {
3636
3737
  ...base,
3637
3738
  checkState: "ready",
3638
3739
  updateAvailable,
3639
3740
  ...command === void 0 ? {} : { upgradeCommand: command },
3741
+ ...!updateAvailable || installation.blockedReason === void 0 ? {} : { upgradeBlockedReason: installation.blockedReason },
3640
3742
  policyRevision: policy.policy_revision,
3641
3743
  recommendedPluginVersion: plugin.recommended_version,
3642
3744
  minimumPluginVersion: plugin.min_supported_version,
@@ -3656,14 +3758,18 @@ function statusFromPolicy(base, policy, checkedAt, offline, usedCache) {
3656
3758
  };
3657
3759
  }
3658
3760
  /** Exact published targets only; never downgrade a newer installed component. */
3659
- function upgradeCommand(current, plugin, proxy) {
3761
+ function upgradeCommand(current, plugin, proxy, identityTarget) {
3660
3762
  const pluginUpgrade = compareVersions(current.currentPluginVersion, plugin.recommended_version) < 0;
3661
3763
  const proxyUpgrade = proxy !== void 0 && current.currentModelProxyVersion !== void 0 && compareVersions(current.currentModelProxyVersion, proxy.recommended_version) < 0;
3662
3764
  if (!pluginUpgrade && !proxyUpgrade || plugin.installable === false || current.currentModelProxyVersion !== void 0 && proxy?.installable === false) return void 0;
3663
3765
  if (current.currentModelProxyVersion !== void 0 && (proxy === void 0 || compareVersions(current.currentModelProxyVersion, proxy.recommended_version) > 0)) return void 0;
3664
3766
  const pluginVersion = pluginUpgrade ? plugin.recommended_version : current.currentPluginVersion;
3665
- if (current.currentModelProxyVersion !== void 0 && proxy?.requires_plugin !== void 0 && !satisfies(pluginVersion, proxy.requires_plugin, { includePrerelease: true })) return void 0;
3666
- return `dsh plugin add ${[pluginUpgrade ? `@awiki/dsh-plugin@${pluginVersion}` : void 0, proxyUpgrade ? `@awiki/dsh-model-proxy@${proxy.recommended_version}` : void 0].filter(Boolean).join(" ")}`;
3767
+ if (current.currentModelProxyVersion !== void 0 && proxy?.requires_plugin !== void 0 && !satisfies(pluginVersion, proxy.requires_plugin)) return void 0;
3768
+ return `dsh plugin add ${[
3769
+ identityTarget,
3770
+ pluginUpgrade ? `@awiki/dsh-plugin@${pluginVersion}` : void 0,
3771
+ proxyUpgrade ? `@awiki/dsh-model-proxy@${proxy.recommended_version}` : void 0
3772
+ ].filter(Boolean).join(" ")}`;
3667
3773
  }
3668
3774
  function publicTarget(value) {
3669
3775
  return {
@@ -3680,6 +3786,7 @@ function decodePolicy(value, origin) {
3680
3786
  const releaseNotes = value.release_notes_url === "" ? void 0 : new URL(value.release_notes_url);
3681
3787
  if (releaseNotes !== void 0) assertPolicyOrigin(releaseNotes.origin, origin.startsWith("http://"));
3682
3788
  const plugin = decodePackage(value.packages.plugin, "@awiki/dsh-plugin");
3789
+ const installation = decodeInstallation(value.installation);
3683
3790
  const modelProxy = value.packages.model_proxy === void 0 ? void 0 : decodePackage(value.packages.model_proxy, "@awiki/dsh-model-proxy");
3684
3791
  if (compareVersions(plugin.min_supported_version, plugin.recommended_version) > 0 || modelProxy !== void 0 && compareVersions(modelProxy.min_supported_version, modelProxy.recommended_version) > 0) throw new Error("minimum version exceeds recommended version");
3685
3792
  return {
@@ -3689,6 +3796,7 @@ function decodePolicy(value, origin) {
3689
3796
  policy_revision: value.policy_revision,
3690
3797
  published_at: value.published_at,
3691
3798
  release_notes_url: releaseNotes?.toString() ?? "",
3799
+ ...installation === void 0 ? {} : { installation },
3692
3800
  packages: {
3693
3801
  plugin,
3694
3802
  ...modelProxy === void 0 ? {} : { model_proxy: modelProxy }
@@ -3736,6 +3844,7 @@ function decodeServerInfoPolicy(value, origin, minimumRevision = 0) {
3736
3844
  policy_revision: releases.policy_revision,
3737
3845
  published_at: releases.published_at,
3738
3846
  release_notes_url: product.release_notes_url,
3847
+ installation: product.installation,
3739
3848
  packages: {
3740
3849
  plugin,
3741
3850
  ...modelProxy === void 0 ? {} : { model_proxy: modelProxy }
@@ -4279,15 +4388,13 @@ function identityAccessTarget(request, configuredDomain) {
4279
4388
  };
4280
4389
  }
4281
4390
  function normalizeSendTextRequest(request) {
4282
- if (typeof request?.text !== "string" || typeof request.idempotencyKey !== "string" || typeof request.target !== "object" || request.target === null) return void 0;
4391
+ if (typeof request?.text !== "string" || typeof request.idempotencyKey !== "string" || !isMessageTarget(request.target)) return void 0;
4283
4392
  const text = request.text;
4284
4393
  const codePoints = Array.from(text);
4285
4394
  if (text.trim().length === 0 || codePoints.length > MAX_MESSAGE_CHARACTERS || request.idempotencyKey.length === 0 || request.idempotencyKey.length > 512) return void 0;
4286
4395
  if (request.target.kind === "direct") {
4287
- if (typeof request.target.peer !== "string" || request.mentions !== void 0) return void 0;
4288
- } else if (request.target.kind === "group") {
4289
- if (typeof request.target.group !== "string") return void 0;
4290
- } else return void 0;
4396
+ if (request.mentions !== void 0) return void 0;
4397
+ }
4291
4398
  if (request.mentions === void 0) return request;
4292
4399
  if (!Array.isArray(request.mentions) || request.mentions.length === 0 || request.mentions.length > 100) return void 0;
4293
4400
  const ids = /* @__PURE__ */ new Set();
@@ -5477,7 +5584,10 @@ let AwikiService = (() => {
5477
5584
  }
5478
5585
  /** Read the Host-owned catalog for trusted loopback settings surfaces. */
5479
5586
  getTenantRegistryView() {
5480
- return this.ensureTenantRegistry().snapshot(this.tenantSwitching);
5587
+ return {
5588
+ ...this.ensureTenantRegistry().snapshot(this.tenantSwitching),
5589
+ generation: this.runtimeGeneration
5590
+ };
5481
5591
  }
5482
5592
  /** Browser-safe, same-process update state for Desktop and loopback settings. */
5483
5593
  getUpdatePolicyStatus() {
@@ -5491,15 +5601,27 @@ let AwikiService = (() => {
5491
5601
  ...modelProxyVersion === void 0 ? {} : { currentModelProxyVersion: modelProxyVersion }
5492
5602
  });
5493
5603
  }
5494
- /** Only the Desktop provider owns its release source; tenants cannot override it. */
5604
+ /** Project only the active tenant's Desktop state; retain legacy detection without its fixed source. */
5495
5605
  getDesktopUpdate() {
5496
- return decodeDesktopDistribution(this.desktopDistribution?.getSnapshot());
5606
+ const view = decodeDesktopDistribution(this.desktopDistribution?.getSnapshot());
5607
+ if (view === void 0 || view.schemaVersion === 1) return view;
5608
+ const tenant = this.activeTenant ?? this.ensureTenantRegistry().active();
5609
+ if (this.tenantSwitching || view.tenantId !== tenant.tenantId || view.policyOrigin !== new URL(tenant.backendBaseUrl).origin || view.tenantGeneration !== this.runtimeGeneration) return {
5610
+ schemaVersion: 2,
5611
+ distributionId: "awiki-dsh-desktop",
5612
+ currentVersion: view.currentVersion,
5613
+ channel: view.channel,
5614
+ state: "unavailable",
5615
+ updateAvailable: false,
5616
+ usedCache: false
5617
+ };
5618
+ return view;
5497
5619
  }
5498
5620
  async refreshDesktopUpdate() {
5499
5621
  const provider = this.desktopDistribution;
5500
5622
  if (provider === void 0) return void 0;
5501
- const value = await provider.check();
5502
- return provider === this.desktopDistribution ? decodeDesktopDistribution(value) : this.getDesktopUpdate();
5623
+ await provider.check();
5624
+ return this.getDesktopUpdate();
5503
5625
  }
5504
5626
  /** Refresh only the active generation; late results from old tenants are discarded. */
5505
5627
  refreshUpdatePolicy() {
@@ -6710,6 +6832,10 @@ let AwikiService = (() => {
6710
6832
  * @returns The accepted attachment message or a closed failure.
6711
6833
  */
6712
6834
  async sendAttachment(request) {
6835
+ if (!isMessageTarget(request?.target)) return {
6836
+ ok: false,
6837
+ error: failure("invalid-request")
6838
+ };
6713
6839
  const decoded = decodeAttachment(request.bytesBase64, this.resolved.attachmentMaxBytes);
6714
6840
  if (!decoded.ok) return decoded;
6715
6841
  return this.run(async (client) => {
package/lib/provider.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as RustSdkAdapter } from "./sdk-adapter-DpqT2en9.mjs";
1
+ import { n as RustSdkAdapter } from "./sdk-adapter-DFDY7Hih.mjs";
2
2
  import { setTimeout } from "node:timers/promises";
3
3
  import { openImCoreNodeClient } from "@awiki/im-core-node";
4
4
  import { AnpIdentityPluginError } from "@agent-network-protocol/dsh-anp-identity";
@@ -62,7 +62,7 @@ async function apply(ctx) {
62
62
  userServiceEndpoint: options.userServiceUrl,
63
63
  messageServiceEndpoint: options.messageServiceUrl,
64
64
  mailServiceEndpoint: options.mailServiceUrl,
65
- anpServiceEndpoint: options.messageServiceUrl,
65
+ anpServiceEndpoint: new URL("/anp-im/rpc", options.messageServicePublicUrl).href,
66
66
  anpServiceDid: options.messageServiceDid,
67
67
  clientVersionInfo: {
68
68
  product: "awiki-daemon",
@@ -1,3 +1,16 @@
1
+ //#region lib/types/message-target.js
2
+ /** Validate the public target shape; Core alone validates conversation ownership and routing. */
3
+ function isMessageTarget(value) {
4
+ if (typeof value !== "object" || value === null) return false;
5
+ const target = value;
6
+ const nonempty = (field) => typeof field === "string" && field.trim() !== "";
7
+ if (target.kind === "direct") {
8
+ if ("conversationId" in target) return !("peer" in target) && nonempty(target.conversationId);
9
+ return nonempty(target.peer);
10
+ }
11
+ return target.kind === "group" && nonempty(target.group);
12
+ }
13
+ //#endregion
1
14
  //#region lib/types/mail-recovery-observability.js
2
15
  const MAIL_INGRESS_CLASSIFICATIONS = /* @__PURE__ */ new Set([
3
16
  "reached",
@@ -750,7 +763,11 @@ var RustSdkAdapter = class {
750
763
  });
751
764
  }
752
765
  async conversationId(client, target) {
753
- if (target.kind === "direct") return required((await client.resolvePeer(target.peer)).conversationId);
766
+ if (!isMessageTarget(target)) fail("invalid-request");
767
+ if (target.kind === "direct") {
768
+ if ("conversationId" in target) return target.conversationId;
769
+ return required((await client.resolvePeer(target.peer)).conversationId);
770
+ }
754
771
  let cursor;
755
772
  for (let index = 0; index < MAX_GROUP_LOOKUP_PAGES; index += 1) {
756
773
  const result = await client.listConversations({
@@ -1234,4 +1251,4 @@ function downloadedAttachment(value) {
1234
1251
  };
1235
1252
  }
1236
1253
  //#endregion
1237
- export { fencedMailRecoveryObservability as a, failedMailRecoveryObservability as i, RustSdkAdapter as n, successfulMailRecoveryObservability as o, downloadedAttachment as r, AwikiSdkError as t };
1254
+ export { fencedMailRecoveryObservability as a, failedMailRecoveryObservability as i, RustSdkAdapter as n, successfulMailRecoveryObservability as o, downloadedAttachment as r, isMessageTarget as s, AwikiSdkError as t };
@@ -1743,6 +1743,11 @@ const _awiki_dsh_plugin_awiki_sendAttachment_parameter_0$schema = z.object({
1743
1743
  'target': z.union([z.object({
1744
1744
  'kind': z.literal("direct").readonly(),
1745
1745
  'peer': z.string().readonly(),
1746
+ 'conversationId': z.never().readonly().optional(),
1747
+ }), z.object({
1748
+ 'kind': z.literal("direct").readonly(),
1749
+ 'conversationId': z.intersection(z.string(), z.unknown()).readonly(),
1750
+ 'peer': z.never().readonly().optional(),
1746
1751
  }), z.object({
1747
1752
  'kind': z.literal("group").readonly(),
1748
1753
  'group': z.string().readonly(),
@@ -1895,6 +1900,11 @@ const _awiki_dsh_plugin_awiki_sendText_parameter_0$schema = z.object({
1895
1900
  'target': z.union([z.object({
1896
1901
  'kind': z.literal("direct").readonly(),
1897
1902
  'peer': z.string().readonly(),
1903
+ 'conversationId': z.never().readonly().optional(),
1904
+ }), z.object({
1905
+ 'kind': z.literal("direct").readonly(),
1906
+ 'conversationId': z.intersection(z.string(), z.unknown()).readonly(),
1907
+ 'peer': z.never().readonly().optional(),
1898
1908
  }), z.object({
1899
1909
  'kind': z.literal("group").readonly(),
1900
1910
  'group': z.string().readonly(),
@@ -1743,6 +1743,11 @@ const _awiki_dsh_plugin_awiki_sendAttachment_parameter_0$schema = z.object({
1743
1743
  'target': z.union([z.object({
1744
1744
  'kind': z.literal("direct").readonly(),
1745
1745
  'peer': z.string().readonly(),
1746
+ 'conversationId': z.never().readonly().optional(),
1747
+ }), z.object({
1748
+ 'kind': z.literal("direct").readonly(),
1749
+ 'conversationId': z.intersection(z.string(), z.unknown()).readonly(),
1750
+ 'peer': z.never().readonly().optional(),
1746
1751
  }), z.object({
1747
1752
  'kind': z.literal("group").readonly(),
1748
1753
  'group': z.string().readonly(),
@@ -1895,6 +1900,11 @@ const _awiki_dsh_plugin_awiki_sendText_parameter_0$schema = z.object({
1895
1900
  'target': z.union([z.object({
1896
1901
  'kind': z.literal("direct").readonly(),
1897
1902
  'peer': z.string().readonly(),
1903
+ 'conversationId': z.never().readonly().optional(),
1904
+ }), z.object({
1905
+ 'kind': z.literal("direct").readonly(),
1906
+ 'conversationId': z.intersection(z.string(), z.unknown()).readonly(),
1907
+ 'peer': z.never().readonly().optional(),
1898
1908
  }), z.object({
1899
1909
  'kind': z.literal("group").readonly(),
1900
1910
  'group': z.string().readonly(),
@@ -1 +1 @@
1
- {"version":3,"file":"AwikiUpdates.d.ts","sourceRoot":"","sources":["../../../src/client/AwikiUpdates.tsx"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIhD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAGxE,KAAK,KAAK,GAAG,IAAI,CAAC,yBAAyB,EAAE,GAAG,GAAG,qBAAqB,CAAC,GAAG;IAAE,QAAQ,EAAE,wBAAwB,CAAA;CAAE,CAAA;AAElH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAsBpD"}
1
+ {"version":3,"file":"AwikiUpdates.d.ts","sourceRoot":"","sources":["../../../src/client/AwikiUpdates.tsx"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAIhD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAC3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAGxE,KAAK,KAAK,GAAG,IAAI,CAAC,yBAAyB,EAAE,GAAG,GAAG,qBAAqB,CAAC,GAAG;IAAE,QAAQ,EAAE,wBAAwB,CAAA;CAAE,CAAA;AAElH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CA8BpD"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /** One settings surface; tenant compatibility and Desktop release discovery retain separate owners. */
3
3
  import { useState } from 'react';
4
4
  import { Button, writeClipboard } from '@deepseek-ai/dsh-client-ui-primitives';
@@ -8,27 +8,37 @@ import css from './AwikiSettingsSection.module.css';
8
8
  export function AwikiUpdates(props) {
9
9
  const { snapshot, t } = props;
10
10
  const desktop = snapshot.desktop;
11
+ const scopedDesktop = desktop?.schemaVersion === 2 && !snapshot.value.switching
12
+ && desktop.tenantId === snapshot.value.activeTenantId && desktop.tenantGeneration === snapshot.value.generation
13
+ && desktop.policyOrigin === snapshot.value.tenants.find(tenant => tenant.tenantId === snapshot.value.activeTenantId)?.backendBaseUrl;
11
14
  const busy = snapshot.updateStatus === 'loading' || snapshot.desktopStatus === 'loading';
12
- return _jsxs("div", { className: css.panel, children: [_jsx("div", { className: css.actions, children: _jsx(Button, { type: "button", variant: "outline", disabled: busy || snapshot.value.switching, onClick: () => { void props.refreshUpdatePolicy(); }, children: busy ? t('updateLoading') : t('updateCheck') }) }), desktop !== undefined && _jsxs("section", { className: css.card, "aria-label": t('desktopUpdateTitle'), children: [_jsx("h3", { className: css.cardTitle, children: t('desktopUpdateTitle') }), _jsx("p", { className: css.description, children: t('updateCurrent', { version: desktop.currentVersion }) }), _jsx("p", { className: css.description, role: "status", children: t(snapshot.desktopStatus === 'unavailable' || desktop.state === 'failed' ? 'updateFailed'
13
- : desktop.state === 'checking' || snapshot.desktopStatus === 'loading' ? 'updateLoading'
14
- : desktop.state === 'unchecked' ? 'updateUnchecked' : desktop.noRelease ? 'desktopNoRelease'
15
- : desktop.updateAvailable ? 'updateAvailable' : 'updateLatest', { version: desktop.latestVersion }) }), desktop.latestVersion !== undefined && !desktop.noRelease && _jsx("p", { className: css.description, children: t('updateRecommended', { version: desktop.latestVersion }) }), desktop.usedCache && _jsx("p", { className: css.description, children: t('updateCached') }), _jsx("p", { className: css.description, children: t('desktopInstallHelp') }), _jsx("a", { href: desktop.downloadPageUrl, target: "_blank", rel: "noopener noreferrer", children: t('desktopDownloadPage') }), _jsx("code", { className: css.updateCommand, children: desktop.downloadPageUrl })] }), _jsx(PluginUpdate, { ...props }, `${snapshot.value.activeTenantId}:${snapshot.value.generation}:${snapshot.update?.upgradeCommand ?? ''}:${desktop?.distributionId ?? ''}`)] });
15
+ return _jsxs("div", { className: css.panel, children: [_jsx("div", { className: css.actions, children: _jsx(Button, { type: "button", variant: "outline", disabled: busy || snapshot.value.switching, onClick: () => { void props.refreshUpdatePolicy(); }, children: busy ? t('updateLoading') : t('updateCheck') }) }), desktop !== undefined && _jsxs("section", { className: css.card, "aria-label": t('desktopUpdateTitle'), children: [_jsx("h3", { className: css.cardTitle, children: t('desktopUpdateTitle') }), _jsx("p", { className: css.description, children: t('updateCurrent', { version: desktop.currentVersion }) }), _jsx("p", { className: css.description, role: "status", children: t(desktop.schemaVersion === 1 ? 'desktopLegacyUpdate'
16
+ : snapshot.value.switching ? 'tenantSwitching'
17
+ : desktop.state === 'unavailable' ? 'updateNoPolicy'
18
+ : snapshot.desktopStatus === 'unavailable' || desktop.state === 'failed' ? 'updateFailed'
19
+ : desktop.state === 'checking' || snapshot.desktopStatus === 'loading' ? 'updateLoading'
20
+ : desktop.state === 'unchecked' ? 'updateUnchecked' : desktop.noRelease ? 'desktopNoRelease'
21
+ : desktop.updateAvailable ? 'updateAvailable' : 'updateLatest', { version: desktop.latestVersion }) }), scopedDesktop && desktop.updateAvailable && desktop.latestVersion !== undefined && !desktop.noRelease && _jsx("p", { className: css.description, children: t('updateRecommended', { version: desktop.latestVersion }) }), desktop.usedCache && _jsx("p", { className: css.description, children: t('updateCached') }), _jsx("p", { className: css.description, children: t('desktopInstallHelp') }), scopedDesktop && desktop.downloadPageUrl !== undefined && _jsxs(_Fragment, { children: [_jsx("a", { href: desktop.downloadPageUrl, target: "_blank", rel: "noopener noreferrer", children: t('desktopDownloadPage') }), _jsx("code", { className: css.updateCommand, children: desktop.downloadPageUrl })] })] }), _jsx(PluginUpdate, { ...props }, `${snapshot.value.activeTenantId}:${snapshot.value.generation}:${snapshot.update?.upgradeCommand ?? ''}:${desktop?.distributionId ?? ''}`)] });
16
22
  }
17
23
  function PluginUpdate({ snapshot, t }) {
18
24
  const [copyState, setCopyState] = useState('idle');
19
25
  const tenant = snapshot.value.tenants.find(value => value.tenantId === snapshot.value.activeTenantId);
20
- const update = snapshot.update?.tenantId === snapshot.value.activeTenantId ? snapshot.update : undefined;
26
+ const update = snapshot.update?.tenantId === snapshot.value.activeTenantId
27
+ && snapshot.update.tenantGeneration === snapshot.value.generation ? snapshot.update : undefined;
21
28
  const desktop = snapshot.desktop;
22
29
  // The ordinary DSH CLI requires an explicit profile; only Desktop's terminal shim supplies it.
23
- const command = desktop === undefined
30
+ const isDesktop = desktop !== undefined || snapshot.desktopPresent === true;
31
+ const command = !isDesktop && snapshot.desktopStatus === 'ready'
24
32
  ? update?.upgradeCommand?.replace(/^dsh plugin add /u, 'dsh plugin --profile YOUR_PROFILE add ')
25
- : update?.upgradeCommand;
33
+ : undefined;
26
34
  const switching = snapshot.value.switching;
27
35
  const state = update?.checkState ?? (update === undefined ? 'unchecked' : update.offline ? 'failed' : update.policyUnavailable ? 'unavailable' : 'ready');
28
36
  let desktopResolves = false;
29
37
  try {
30
38
  const bundled = desktop?.bundledVersions;
31
- desktopResolves = desktop?.updateAvailable === true && bundled !== undefined
39
+ desktopResolves = !switching && desktop?.schemaVersion === 2 && desktop.tenantId === snapshot.value.activeTenantId
40
+ && desktop.tenantGeneration === snapshot.value.generation && desktop.policyOrigin === tenant?.backendBaseUrl
41
+ && desktop.updateAvailable === true && bundled !== undefined
32
42
  && update?.recommendedPluginVersion !== undefined
33
43
  && compareVersions(bundled.plugin, update.recommendedPluginVersion) >= 0
34
44
  && (update.currentModelProxyVersion === undefined || (update.recommendedModelProxyVersion !== undefined
@@ -52,6 +62,7 @@ function PluginUpdate({ snapshot, t }) {
52
62
  : update?.restricted || update?.modelProxyRestricted ? 'updateRequired'
53
63
  : update?.updateAvailable ? 'updateAvailable' : 'updateLatest', { version: update?.recommendedPluginVersion }) }), update?.recommendedPluginVersion !== undefined && _jsx("p", { className: css.description, children: t('updateRecommended', { version: update.recommendedPluginVersion }) }), update?.currentModelProxyVersion !== undefined && update.recommendedModelProxyVersion !== undefined && _jsx("p", { className: css.description, children: t('updateModelRecommended', { version: update.recommendedModelProxyVersion }) }), update?.restricted && _jsx("p", { className: `${css.description} ${css.error}`, role: "alert", children: t('updateRestricted', {
54
64
  current: update.currentPluginVersion, minimum: update.minimumPluginVersion, tenant: tenant?.displayName,
55
- }) }), update?.modelProxyRestricted && _jsx("p", { className: `${css.description} ${css.error}`, role: "alert", children: t('updateModelRestricted', { minimum: update.minimumModelProxyVersion }) }), update?.usedCache && _jsx("p", { className: css.description, children: t('updateCached') }), desktop !== undefined && _jsx("p", { className: css.description, children: t(desktopResolves ? 'desktopResolvesPlugin' : 'desktopPluginHelp') }), state === 'ready' && update?.updateAvailable && command === undefined && _jsx("p", { className: css.description, children: t('updateNoCommand') }), command !== undefined && !switching && _jsxs(_Fragment, { children: [_jsx("code", { className: css.updateCommand, tabIndex: 0, children: command }), _jsx("p", { className: css.description, children: t(desktop === undefined ? 'pluginInstallHelp' : 'desktopPluginCommandHelp') }), _jsx("div", { className: css.actions, children: _jsx(Button, { type: "button", variant: "outline", onClick: () => { void copy(); }, children: t('updateCopy') }) }), _jsx("p", { className: css.description, role: "status", children: copyState === 'idle' ? '' : t(copyState === 'copied' ? 'updateCopied' : 'updateCopyFailed') })] }), _jsx("a", { href: update?.releaseNotesUrl || 'https://github.com/AgentConnect/dsh-awiki#install', target: "_blank", rel: "noopener noreferrer", children: t('updateGuide') })] });
65
+ }) }), update?.modelProxyRestricted && _jsx("p", { className: `${css.description} ${css.error}`, role: "alert", children: t('updateModelRestricted', { minimum: update.minimumModelProxyVersion }) }), update?.usedCache && _jsx("p", { className: css.description, children: t('updateCached') }), isDesktop && _jsx("p", { className: css.description, children: t(desktopResolves ? 'desktopResolvesPlugin' : 'desktopPluginHelp') }), !isDesktop && state === 'ready' && update?.updateAvailable && command === undefined && _jsx("p", { className: css.description, children: t(update.upgradeBlockedReason === 'host-incompatible' ? 'updateHostRequired'
66
+ : update.upgradeBlockedReason === 'identity-incompatible' ? 'updateIdentityIncompatible' : 'updateNoCommand') }), command !== undefined && !switching && _jsxs(_Fragment, { children: [_jsx("code", { className: css.updateCommand, tabIndex: 0, children: command }), _jsx("p", { className: css.description, children: t(desktop === undefined ? 'pluginInstallHelp' : 'desktopPluginCommandHelp') }), _jsx("div", { className: css.actions, children: _jsx(Button, { type: "button", variant: "outline", onClick: () => { void copy(); }, children: t('updateCopy') }) }), _jsx("p", { className: css.description, role: "status", children: copyState === 'idle' ? '' : t(copyState === 'copied' ? 'updateCopied' : 'updateCopyFailed') })] }), _jsx("a", { href: update?.releaseNotesUrl || 'https://github.com/AgentConnect/dsh-awiki#install', target: "_blank", rel: "noopener noreferrer", children: t('updateGuide') })] });
56
67
  }
57
68
  //# sourceMappingURL=AwikiUpdates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AwikiUpdates.js","sourceRoot":"","sources":["../../../src/client/AwikiUpdates.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AwikiUpdates.js","sourceRoot":"","sources":["../../../src/client/AwikiUpdates.tsx"],"names":[],"mappings":"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"}
@@ -516,7 +516,7 @@ function hasDisplayableDirectTitle(conversation) {
516
516
  /** Resolve one listed conversation into the send target accepted by AWiki. */
517
517
  function targetOf(conversation) {
518
518
  return conversation.kind === 'direct'
519
- ? { kind: 'direct', peer: conversation.peerDid }
519
+ ? { kind: 'direct', conversationId: conversation.id }
520
520
  : { kind: 'group', group: conversation.groupDid };
521
521
  }
522
522
  /** Browser object layer for identity, conversations, history, and polling. */