@codexhost/cli-darwin-arm64 0.18.0-beta.1 → 0.18.0-beta.3

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 (58) hide show
  1. package/README.md +1 -1
  2. package/app/codexhost-distribution.json +1 -1
  3. package/app/console-server.mjs +103 -93
  4. package/app/console-web.js +104 -94
  5. package/app/desktop-controller.mjs +103 -109
  6. package/app/host-runtime.mjs +10067 -8374
  7. package/app/plugins/antigravity/plugin.mjs +103 -93
  8. package/app/plugins/claude-code/plugin.mjs +103 -93
  9. package/app/plugins/codebuddy/plugin.mjs +103 -93
  10. package/app/plugins/codex-usage/plugin.mjs +103 -93
  11. package/app/plugins/copilot/plugin.mjs +103 -93
  12. package/app/plugins/cursor-cli/plugin.mjs +103 -93
  13. package/app/plugins/deepseek-harness/plugin.mjs +103 -93
  14. package/app/plugins/devin/plugin.mjs +103 -93
  15. package/app/plugins/enabled.json +0 -1
  16. package/app/plugins/grok/plugin.mjs +103 -93
  17. package/app/plugins/hermes/plugin.mjs +103 -93
  18. package/app/plugins/kimi-code/plugin.mjs +103 -93
  19. package/app/plugins/kiro-cli/plugin.mjs +103 -93
  20. package/app/plugins/omp/plugin.mjs +103 -93
  21. package/app/plugins/opencode/plugin.mjs +103 -93
  22. package/app/plugins/pi/plugin.mjs +103 -93
  23. package/app/plugins/qoder/plugin.mjs +103 -93
  24. package/app/plugins/qoder-cn/plugin.mjs +103 -93
  25. package/app/plugins/qwen-code/plugin.mjs +103 -93
  26. package/app/plugins/workbuddy/plugin.mjs +103 -93
  27. package/app/plugins/zcode/plugin.mjs +103 -93
  28. package/app/renderer-extension.js +122 -149
  29. package/app/web/assets/index-C3lniEH1.css +1 -0
  30. package/app/web/assets/index-aKvkfNJN.js +199 -0
  31. package/app/web/codexhost-settings.js +104 -94
  32. package/app/web/index.html +2 -2
  33. package/app/web/plugins/deepseek-ai__dsh-api-gateway/client.js +1 -1
  34. package/app/web/plugins/deepseek-ai__dsh-api-remotes/client.js +64 -64
  35. package/app/web/plugins/deepseek-ai__dsh-api-session-controller/client.js +69 -69
  36. package/app/web/plugins/deepseek-ai__dsh-client-ui-chat/client.js +2 -2
  37. package/app/web/plugins/deepseek-ai__dsh-client-ui-codexhost/client.js +63 -62
  38. package/app/web/plugins/deepseek-ai__dsh-client-ui-conversation/client.js +85 -85
  39. package/app/web/plugins/deepseek-ai__dsh-client-ui-directory-picker-browse/client.js +10 -10
  40. package/app/web/plugins/deepseek-ai__dsh-client-ui-input-trigger/client.js +1 -1
  41. package/app/web/plugins/deepseek-ai__dsh-client-ui-layout/client.js +3 -3
  42. package/app/web/plugins/deepseek-ai__dsh-client-ui-model-selection/client.js +2 -2
  43. package/app/web/plugins/deepseek-ai__dsh-client-ui-permission-presets/client.js +1 -1
  44. package/app/web/plugins/deepseek-ai__dsh-client-ui-sidebar/client.js +1 -1
  45. package/app/web/plugins/deepseek-ai__dsh-client-ui-sidebar-right/client.js +55 -55
  46. package/app/web/plugins/deepseek-ai__dsh-client-ui-tool/client.js +18 -18
  47. package/app/web/plugins/deepseek-ai__dsh-client-ui-workspace/client.js +8 -8
  48. package/app/web/sw.js +55 -24
  49. package/app/web-modules/server.mjs +1091 -680
  50. package/bin/codexhost +0 -0
  51. package/libexec/codexhost-shim +0 -0
  52. package/libexec/codexhost-updater +0 -0
  53. package/package.json +1 -1
  54. package/app/plugins/codex-cli/manifest.json +0 -16
  55. package/app/plugins/codex-cli/plugin.mjs +0 -20374
  56. package/app/web/assets/index-CIeTchMu.css +0 -1
  57. package/app/web/assets/index-DeAPBQbV.js +0 -199
  58. /package/app/{plugins/codex-cli/assets/icon.png → web/codex.png} +0 -0
@@ -14638,7 +14638,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14638
14638
  var nonBlankTextSchema = external_exports.string().refine((value) => value.trim().length > 0, {
14639
14639
  message: "Value must not be empty or whitespace"
14640
14640
  });
14641
- var harnessPermissionModeIdSchema = nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_ID_MAX_LENGTH).regex(/^[A-Za-z0-9._~-]+$/u, "Permission Mode ID must use transport-safe characters").brand();
14641
+ var harnessPermissionModeIdSchema = nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_ID_MAX_LENGTH).regex(/^[A-Za-z0-9._~:-]+$/u, "Permission Mode ID must use transport-safe characters").brand();
14642
14642
  var harnessPermissionModeSchema = external_exports.object({
14643
14643
  id: harnessPermissionModeIdSchema,
14644
14644
  label: nonBlankTextSchema.max(HARNESS_PERMISSION_MODE_LABEL_MAX_LENGTH),
@@ -15023,7 +15023,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15023
15023
  }).strict();
15024
15024
  var codexThreadInspectionSchema = external_exports.object({
15025
15025
  owner: external_exports.literal("codex"),
15026
- locked: external_exports.literal(true),
15026
+ locked: external_exports.boolean(),
15027
+ effectiveModel: harnessModelRefSchema.optional(),
15028
+ resolvedModelLabel: harnessResolvedModelLabelSchema.optional(),
15029
+ effectiveThinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15030
+ effectivePermissionModeId: harnessPermissionModeIdSchema.optional(),
15031
+ history: harnessHistoryCapabilitiesSchema.optional(),
15027
15032
  supportsThreadReferences: external_exports.literal(true).optional()
15028
15033
  }).strict();
15029
15034
  var externalThreadInspectionSchema = external_exports.object({
@@ -15245,7 +15250,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15245
15250
  thread: external_exports.object({
15246
15251
  id: external_exports.string().min(1),
15247
15252
  cwd: external_exports.string(),
15248
- modelProvider: external_exports.literal("codexhost"),
15253
+ /** External rows use codexhost; native Codex rows retain their official provider. */
15254
+ modelProvider: external_exports.string().min(1),
15249
15255
  createdAt: external_exports.number(),
15250
15256
  updatedAt: external_exports.number(),
15251
15257
  status: external_exports.object({ type: external_exports.string() }).passthrough(),
@@ -15259,6 +15265,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15259
15265
  nextCursor: external_exports.string().nullable()
15260
15266
  }),
15261
15267
  configuration: external_exports.object({
15268
+ /** Native Codex model names are not external Harness transport refs. */
15269
+ native: external_exports.object({
15270
+ model: external_exports.string().min(1).max(1024).optional(),
15271
+ reasoningEffort: external_exports.string().min(1).max(128).optional()
15272
+ }).optional(),
15262
15273
  effectiveModel: harnessModelRefSchema.optional(),
15263
15274
  effectiveThinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15264
15275
  effectivePermissionModeId: harnessPermissionModeIdSchema.optional()
@@ -15285,6 +15296,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15285
15296
  result: record2
15286
15297
  });
15287
15298
 
15299
+ // ../shared-contracts/dist/thread-catalog.js
15300
+ var threadCatalogReadParamsSchema = external_exports.object({ includeArchived: external_exports.boolean().optional() }).strict();
15301
+ var threadCatalogReadResultSchema = external_exports.object({
15302
+ threads: external_exports.array(jsonObjectSchema),
15303
+ ownership: external_exports.array(threadOwnershipSchema),
15304
+ /** Known archived IDs, including visible local external records even when their rows are
15305
+ * excluded. Native archived IDs are complete only when includeArchived is true. */
15306
+ archivedThreadIds: external_exports.array(hostThreadIdSchema)
15307
+ }).strict();
15308
+
15288
15309
  // ../shared-contracts/dist/voice.js
15289
15310
  var VOICE_AUDIO_MAX_BYTES = 10 * 1024 * 1024;
15290
15311
  var voiceAudioMimeTypeSchema = external_exports.string().regex(/^audio\/[a-z0-9.+-]+(?:\s*;[^\r\n]*)?$/i);
@@ -15525,96 +15546,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15525
15546
  timeoutMinutes: 30
15526
15547
  });
15527
15548
 
15528
- // ../shared-contracts/dist/harness-plugins.js
15529
- var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
15530
- var HARNESS_PLUGIN_ICON_MAX_BYTES = 128 * 1024;
15531
- var HARNESS_PLUGIN_LIMIT = 128;
15532
- var HARNESS_PLUGIN_SURFACES = ["desktop", "web"];
15533
- var harnessPluginSurfaceSchema = external_exports.enum(HARNESS_PLUGIN_SURFACES);
15534
- var installedHarnessPluginIdSchema = external_exports.string().min(1).max(128).regex(/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u).pipe(harnessIdSchema);
15535
- var harnessPluginIdSchema = installedHarnessPluginIdSchema.refine((id) => id !== "codex", "The official Codex identity is reserved");
15536
- var relativeResourceSchema = external_exports.string().min(1).max(512).refine((value) => !/[\\\u0000:#?]/u.test(value) && !value.startsWith("/") && !value.split("/").some((part) => part === ".." || part === ""), "Plugin resources must be relative paths inside the plugin");
15537
- var documentationUrlSchema = external_exports.url().refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Plugin documentation links must be credential-free HTTPS URLs");
15538
- var localizedTextSchema = external_exports.object({ en: external_exports.string().max(4096), "zh-CN": external_exports.string().max(4096).optional() }).strict();
15539
- var harnessInstallationGuideSchema = external_exports.object({
15540
- commands: external_exports.array(external_exports.object({ terminal: external_exports.string().max(256), command: external_exports.string().max(4096) }).strict()).max(8),
15541
- before: localizedTextSchema.optional(),
15542
- after: localizedTextSchema.optional(),
15543
- downloads: external_exports.array(external_exports.object({ label: external_exports.string().max(128), url: documentationUrlSchema }).strict()).max(8).optional()
15544
- }).strict();
15545
- var pluginPresentationShape = {
15546
- id: installedHarnessPluginIdSchema,
15547
- name: external_exports.string().trim().min(1).max(128),
15548
- version: external_exports.string().min(1).max(128),
15549
- /** Capability-only plugin; omitted for existing session-capable plugins. */
15550
- kind: external_exports.literal("usage").optional(),
15551
- /** Original image styling or bounded vector paths; never arbitrary CSS/SVG markup. */
15552
- iconStyle: external_exports.object({
15553
- vector: external_exports.object({
15554
- viewBox: external_exports.string().max(128).regex(/^-?\d+(?:\.\d+)?(?: +-?\d+(?:\.\d+)?){3}$/u),
15555
- color: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu),
15556
- paths: external_exports.array(external_exports.object({
15557
- d: external_exports.string().min(1).max(32768).regex(/^[MmLlHhVvCcSsQqTtAaZz\d.,+eE\s-]+$/u),
15558
- fillRule: external_exports.enum(["evenodd", "nonzero"]).optional(),
15559
- fill: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu).optional()
15560
- }).strict()).min(1).max(32)
15561
- }).strict().optional(),
15562
- background: external_exports.string().regex(/^#[a-f0-9]{6}$/iu).optional(),
15563
- borderRadius: external_exports.number().min(0).max(50).optional(),
15564
- paddingRatio: external_exports.number().min(0).max(0.25).optional()
15565
- }).strict().optional(),
15566
- installation: harnessInstallationGuideSchema.optional(),
15567
- notice: localizedTextSchema.optional(),
15568
- /** The factory accepts a persisted local entrypoint through its construction context. */
15569
- launchCommand: external_exports.literal(true).optional(),
15570
- links: external_exports.object({
15571
- website: documentationUrlSchema.optional(),
15572
- documentation: documentationUrlSchema.optional(),
15573
- installation: documentationUrlSchema.optional()
15574
- }).strict().optional()
15575
- };
15576
- var harnessPluginSurfacesSchema = external_exports.array(harnessPluginSurfaceSchema).min(1).max(HARNESS_PLUGIN_SURFACES.length).refine((surfaces) => new Set(surfaces).size === surfaces.length, {
15577
- message: "Plugin surfaces must be unique"
15578
- });
15579
- var harnessPluginManifestSchema = external_exports.object({
15580
- manifestVersion: external_exports.literal(1),
15581
- ...pluginPresentationShape,
15582
- adapterApiVersion: external_exports.number().int().positive(),
15583
- entry: relativeResourceSchema,
15584
- icon: relativeResourceSchema.optional(),
15585
- /** Omitted means the plugin appears in every surface; never inferred from its identity. */
15586
- surfaces: harnessPluginSurfacesSchema.optional()
15587
- }).strict();
15588
- var harnessPluginIconSchema = external_exports.string().max(Math.ceil(HARNESS_PLUGIN_ICON_MAX_BYTES / 3) * 4 + 64).regex(/^data:image\/(?:png|jpeg|webp|svg\+xml);base64,[A-Za-z0-9+/]+={0,2}$/u);
15589
- var harnessPluginDescriptorSchema = external_exports.object({
15590
- ...pluginPresentationShape,
15591
- icon: harnessPluginIconSchema.optional()
15592
- }).strict();
15593
- var harnessPluginListParamsSchema = external_exports.object({}).strict();
15594
- var harnessPluginListResultSchema = external_exports.object({
15595
- plugins: external_exports.array(harnessPluginDescriptorSchema.extend({ id: harnessPluginIdSchema })).max(HARNESS_PLUGIN_LIMIT)
15596
- }).strict();
15597
- var harnessPluginConfigurationSchema = external_exports.object({
15598
- version: external_exports.literal(1),
15599
- enabled: external_exports.array(installedHarnessPluginIdSchema).max(HARNESS_PLUGIN_LIMIT)
15600
- }).strict().refine((value) => new Set(value.enabled).size === value.enabled.length, {
15601
- message: "Enabled plugin IDs must be unique",
15602
- path: ["enabled"]
15603
- });
15604
-
15605
15549
  // ../shared-contracts/dist/harness-preferences.js
15606
15550
  var HARNESS_PREFERENCES_GET_METHOD = "codexhost/harness/preferences/get";
15607
15551
  var HARNESS_PREFERENCES_PATCH_METHOD = "codexhost/harness/preferences/patch";
15608
15552
  var HARNESS_PREFERENCES_CHANGED_METHOD = "codexhost/harness/preferences/changed";
15609
15553
  var harnessPreferenceScopeSchema = external_exports.string().regex(/^external$/u);
15610
- var preferenceHarnessKey = installedHarnessPluginIdSchema.transform((id) => String(id));
15554
+ var preferenceHarnessKey = harnessIdSchema.transform((id) => String(id));
15611
15555
  var harnessDefaultConfigurationSchema = external_exports.strictObject({
15612
15556
  model: harnessModelRefSchema.optional(),
15613
15557
  thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15614
15558
  permissionModeId: harnessPermissionModeIdSchema.optional()
15615
15559
  }).refine((value) => Boolean(value.model || value.thinkingOptionId || value.permissionModeId), "A default configuration must contain a preference");
15616
15560
  var newThreadDefaultsSchema = external_exports.strictObject({
15617
- lastHarness: installedHarnessPluginIdSchema.optional(),
15561
+ lastHarness: harnessIdSchema.optional(),
15618
15562
  byHarness: external_exports.record(preferenceHarnessKey, harnessDefaultConfigurationSchema)
15619
15563
  });
15620
15564
  var modelId = external_exports.string().min(1).max(1024);
@@ -15635,19 +15579,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15635
15579
  external_exports.strictObject({ kind: external_exports.literal("idleRelease"), value: idleReleaseSettingsSchema }),
15636
15580
  external_exports.strictObject({
15637
15581
  kind: external_exports.literal("favorite"),
15638
- harnessId: installedHarnessPluginIdSchema,
15582
+ harnessId: harnessIdSchema,
15639
15583
  modelId,
15640
15584
  enabled: external_exports.boolean()
15641
15585
  }),
15642
15586
  external_exports.strictObject({
15643
15587
  kind: external_exports.literal("favorites"),
15644
- harnessId: installedHarnessPluginIdSchema,
15588
+ harnessId: harnessIdSchema,
15645
15589
  modelIds: external_exports.array(modelId).max(2048)
15646
15590
  }),
15647
15591
  external_exports.strictObject({
15648
15592
  kind: external_exports.literal("newThread"),
15649
- lastHarness: installedHarnessPluginIdSchema.optional(),
15650
- harnessId: installedHarnessPluginIdSchema.optional(),
15593
+ lastHarness: harnessIdSchema.optional(),
15594
+ harnessId: harnessIdSchema.optional(),
15651
15595
  configuration: harnessDefaultConfigurationSchema.optional()
15652
15596
  })
15653
15597
  ]);
@@ -15663,12 +15607,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15663
15607
  code: "custom",
15664
15608
  message: "A default Harness or complete configuration is required"
15665
15609
  });
15666
- const harnessId = "harnessId" in operation ? operation.harnessId : void 0;
15667
- if (harnessId === "codex")
15668
- ctx.addIssue({
15669
- code: "custom",
15670
- message: "Official Codex is not an external Harness"
15671
- });
15672
15610
  }
15673
15611
  });
15674
15612
  var harnessPreferencesDocumentSchema = external_exports.strictObject({
@@ -16064,6 +16002,76 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16064
16002
  accounts: external_exports.array(requireReportedQuota(harnessAccountSnapshotObject.extend(harnessAccountIdentityShape))).max(128)
16065
16003
  }).strict();
16066
16004
 
16005
+ // ../shared-contracts/dist/harness-plugins.js
16006
+ var HARNESS_PLUGIN_MANIFEST_MAX_BYTES = 32 * 1024;
16007
+ var HARNESS_PLUGIN_ICON_MAX_BYTES = 128 * 1024;
16008
+ var HARNESS_PLUGIN_LIMIT = 128;
16009
+ var installedHarnessPluginIdSchema = external_exports.string().min(1).max(128).regex(/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u).pipe(harnessIdSchema);
16010
+ var harnessPluginIdSchema = installedHarnessPluginIdSchema.refine((id) => id !== "codex", "The official Codex identity is reserved");
16011
+ var relativeResourceSchema = external_exports.string().min(1).max(512).refine((value) => !/[\\\u0000:#?]/u.test(value) && !value.startsWith("/") && !value.split("/").some((part) => part === ".." || part === ""), "Plugin resources must be relative paths inside the plugin");
16012
+ var documentationUrlSchema = external_exports.url().refine((value) => /^https:\/\/[^/?#@]+(?:[/?#]|$)/iu.test(value), "Plugin documentation links must be credential-free HTTPS URLs");
16013
+ var localizedTextSchema = external_exports.object({ en: external_exports.string().max(4096), "zh-CN": external_exports.string().max(4096).optional() }).strict();
16014
+ var harnessInstallationGuideSchema = external_exports.object({
16015
+ commands: external_exports.array(external_exports.object({ terminal: external_exports.string().max(256), command: external_exports.string().max(4096) }).strict()).max(8),
16016
+ before: localizedTextSchema.optional(),
16017
+ after: localizedTextSchema.optional(),
16018
+ downloads: external_exports.array(external_exports.object({ label: external_exports.string().max(128), url: documentationUrlSchema }).strict()).max(8).optional()
16019
+ }).strict();
16020
+ var pluginPresentationShape = {
16021
+ id: installedHarnessPluginIdSchema,
16022
+ name: external_exports.string().trim().min(1).max(128),
16023
+ version: external_exports.string().min(1).max(128),
16024
+ /** Capability-only plugin; omitted for existing session-capable plugins. */
16025
+ kind: external_exports.literal("usage").optional(),
16026
+ /** Original image styling or bounded vector paths; never arbitrary CSS/SVG markup. */
16027
+ iconStyle: external_exports.object({
16028
+ vector: external_exports.object({
16029
+ viewBox: external_exports.string().max(128).regex(/^-?\d+(?:\.\d+)?(?: +-?\d+(?:\.\d+)?){3}$/u),
16030
+ color: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu),
16031
+ paths: external_exports.array(external_exports.object({
16032
+ d: external_exports.string().min(1).max(32768).regex(/^[MmLlHhVvCcSsQqTtAaZz\d.,+eE\s-]+$/u),
16033
+ fillRule: external_exports.enum(["evenodd", "nonzero"]).optional(),
16034
+ fill: external_exports.string().regex(/^(?:currentColor|#[a-f0-9]{6})$/iu).optional()
16035
+ }).strict()).min(1).max(32)
16036
+ }).strict().optional(),
16037
+ background: external_exports.string().regex(/^#[a-f0-9]{6}$/iu).optional(),
16038
+ borderRadius: external_exports.number().min(0).max(50).optional(),
16039
+ paddingRatio: external_exports.number().min(0).max(0.25).optional()
16040
+ }).strict().optional(),
16041
+ installation: harnessInstallationGuideSchema.optional(),
16042
+ notice: localizedTextSchema.optional(),
16043
+ /** The factory accepts a persisted local entrypoint through its construction context. */
16044
+ launchCommand: external_exports.literal(true).optional(),
16045
+ links: external_exports.object({
16046
+ website: documentationUrlSchema.optional(),
16047
+ documentation: documentationUrlSchema.optional(),
16048
+ installation: documentationUrlSchema.optional()
16049
+ }).strict().optional()
16050
+ };
16051
+ var harnessPluginManifestSchema = external_exports.object({
16052
+ manifestVersion: external_exports.literal(1),
16053
+ ...pluginPresentationShape,
16054
+ adapterApiVersion: external_exports.number().int().positive(),
16055
+ entry: relativeResourceSchema,
16056
+ icon: relativeResourceSchema.optional()
16057
+ }).strict();
16058
+ var harnessPluginIconSchema = external_exports.string().max(Math.ceil(HARNESS_PLUGIN_ICON_MAX_BYTES / 3) * 4 + 64).regex(/^data:image\/(?:png|jpeg|webp|svg\+xml);base64,[A-Za-z0-9+/]+={0,2}$/u);
16059
+ var harnessPluginDescriptorSchema = external_exports.object({
16060
+ ...pluginPresentationShape,
16061
+ icon: harnessPluginIconSchema.optional()
16062
+ }).strict();
16063
+ var harnessPluginListParamsSchema = external_exports.object({}).strict();
16064
+ var harnessPluginListResultSchema = external_exports.object({
16065
+ plugins: external_exports.array(harnessPluginDescriptorSchema.extend({ id: harnessPluginIdSchema })).max(HARNESS_PLUGIN_LIMIT)
16066
+ }).strict();
16067
+ var harnessPluginConfigurationSchema = external_exports.object({
16068
+ version: external_exports.literal(1),
16069
+ enabled: external_exports.array(installedHarnessPluginIdSchema).max(HARNESS_PLUGIN_LIMIT)
16070
+ }).strict().refine((value) => new Set(value.enabled).size === value.enabled.length, {
16071
+ message: "Enabled plugin IDs must be unique",
16072
+ path: ["enabled"]
16073
+ });
16074
+
16067
16075
  // ../shared-contracts/dist/harness-route.js
16068
16076
  var harnessPluginRouteSchema = external_exports.object({
16069
16077
  harnessId: harnessPluginIdSchema,
@@ -16263,6 +16271,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16263
16271
  }).strict();
16264
16272
  var harnessCommandCatalogSchema = external_exports.object({
16265
16273
  commands: external_exports.array(harnessCommandDescriptorSchema),
16274
+ /** Partial discovery failures; valid commands remain available. */
16275
+ warnings: external_exports.array(external_exports.string().min(1)).optional(),
16266
16276
  /**
16267
16277
  * `live` when the catalog includes what a native Session reports for its
16268
16278
  * workspace (custom commands, skills); `static` for Adapter built-ins only.
@@ -16298,7 +16308,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16298
16308
  }).strict();
16299
16309
  var threadCommandExecuteResultSchema = external_exports.object({
16300
16310
  accepted: external_exports.literal(true),
16301
- turnId: hostTurnIdSchema
16311
+ turnId: hostTurnIdSchema.optional()
16302
16312
  }).strict();
16303
16313
 
16304
16314
  // ../shared-contracts/dist/json-rpc.js
@@ -32504,7 +32514,7 @@ ${messages.harnessVersionLatest}: ${harnessVersionLabel(version2.state, messages
32504
32514
  `;
32505
32515
 
32506
32516
  // src/settings/tailwind.css
32507
- var tailwind_default = '@layer properties, theme, base, components, utilities;\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.top-full{top:100%}.left-0{left:0}.z-20{z-index:20}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:0}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:var(--spacing)}.ml-\\[45px\\]{margin-left:45px}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-8{height:calc(var(--spacing) * 8)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-\\[60px\\]{min-height:60px}.w-9{width:calc(var(--spacing) * 9)}.w-14{width:calc(var(--spacing) * 14)}.w-80{width:calc(var(--spacing) * 80)}.w-full{width:100%}.w-px{width:1px}.max-w-64{max-width:calc(var(--spacing) * 64)}.min-w-0{min-width:0}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-disc{list-style-type:disc}.appearance-none{appearance:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.overflow-x-auto{overflow-x:auto}.rounded-\\[10px\\]{border-radius:10px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-settings-border{border-color:var(--settings-border)}.border-settings-divider{border-color:var(--settings-divider)}.bg-settings-panel{background-color:var(--settings-panel)}.bg-settings-subtle{background-color:var(--settings-subtle)}.bg-settings-surface{background-color:var(--settings-surface)}.bg-settings-surface-hover{background-color:var(--settings-surface-hover)}.bg-transparent{background-color:#0000}.p-0{padding:0}.p-4{padding:calc(var(--spacing) * 4)}.\\!px-0{padding-inline:0!important}.px-1{padding-inline:var(--spacing)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pl-4{padding-left:calc(var(--spacing) * 4)}.\\!text-right{text-align:right!important}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-settings-muted{color:var(--settings-muted)}.text-settings-subtle{color:var(--settings-subtle)}.text-settings-text{color:var(--settings-text)}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\\[0_10px_30px_rgb\\(0_0_0\\/0\\.22\\)\\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000038);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-settings-border{--tw-ring-color:var(--settings-border)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.ring-inset{--tw-ring-inset:inset}.group-focus-within\\:visible:is(:where(.group):focus-within *){visibility:visible}.group-focus-within\\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-data-\\[state\\=failed\\]\\/status\\:bg-settings-danger:is(:where(.group\\/status)[data-state=failed] *){background-color:var(--settings-danger)}.group-data-\\[state\\=unavailable\\]\\/status\\:bg-settings-warning:is(:where(.group\\/status)[data-state=unavailable] *){background-color:var(--settings-warning)}.marker\\:text-settings-subtle ::marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle::marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle ::-webkit-details-marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle::-webkit-details-marker{color:var(--settings-subtle)}.before\\:absolute:before{content:var(--tw-content);position:absolute}.before\\:top-0\\.5:before{content:var(--tw-content);top:calc(var(--spacing) * .5)}.before\\:left-0\\.5:before{content:var(--tw-content);left:calc(var(--spacing) * .5)}.before\\:size-4:before{content:var(--tw-content);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.before\\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\\:bg-white:before{content:var(--tw-content);background-color:#fff}.before\\:shadow-\\[0_1px_2px_rgb\\(0_0_0\\/0\\.3\\)\\]:before{content:var(--tw-content);--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.before\\:transition-transform:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.first\\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.first-of-type\\:mt-0:first-of-type{margin-top:0}.checked\\:bg-settings-focus:checked{background-color:var(--settings-focus)}.checked\\:ring-transparent:checked{--tw-ring-color:transparent}.checked\\:before\\:translate-x-4:checked:before{content:var(--tw-content);--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.focus-within\\:border-settings-focus:focus-within{border-color:var(--settings-focus)}@media (hover:hover){.hover\\:bg-settings-hover:hover{background-color:var(--settings-hover)}.hover\\:text-settings-text:hover{color:var(--settings-text)}}.focus-visible\\:text-settings-text:focus-visible{color:var(--settings-text)}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-settings-focus:focus-visible{outline-color:var(--settings-focus)}.data-\\[invalid\\=true\\]\\:border-settings-danger[data-invalid=true]{border-color:var(--settings-danger)}.data-\\[invalid\\=true\\]\\:text-settings-danger[data-invalid=true],.data-\\[state\\=failed\\]\\:text-settings-danger[data-state=failed]{color:var(--settings-danger)}.data-\\[state\\=unavailable\\]\\:text-settings-warning[data-state=unavailable]{color:var(--settings-warning)}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@layer properties{\n *, ::before, ::after, ::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-alpha:100%;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-width:0;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-drop-shadow-alpha:100%;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}\n';
32517
+ var tailwind_default = '@layer properties, theme, base, components, utilities;\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@layer theme{:root,:host{--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.top-full{top:100%}.left-0{left:0}.z-20{z-index:20}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:0}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:var(--spacing)}.ml-\\[45px\\]{margin-left:45px}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.size-1\\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-8{height:calc(var(--spacing) * 8)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-\\[60px\\]{min-height:60px}.w-9{width:calc(var(--spacing) * 9)}.w-14{width:calc(var(--spacing) * 14)}.w-80{width:calc(var(--spacing) * 80)}.w-full{width:100%}.w-px{width:1px}.max-w-64{max-width:calc(var(--spacing) * 64)}.min-w-0{min-width:0}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-disc{list-style-type:disc}.appearance-none{appearance:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.overflow-x-auto{overflow-x:auto}.rounded-\\[10px\\]{border-radius:10px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-settings-border{border-color:var(--settings-border)}.border-settings-divider{border-color:var(--settings-divider)}.bg-settings-panel{background-color:var(--settings-panel)}.bg-settings-subtle{background-color:var(--settings-subtle)}.bg-settings-surface{background-color:var(--settings-surface)}.bg-settings-surface-hover{background-color:var(--settings-surface-hover)}.bg-transparent{background-color:#0000}.p-0{padding:0}.p-4{padding:calc(var(--spacing) * 4)}.\\!px-0{padding-inline:0!important}.px-1{padding-inline:var(--spacing)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pl-4{padding-left:calc(var(--spacing) * 4)}.\\!text-right{text-align:right!important}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-settings-muted{color:var(--settings-muted)}.text-settings-subtle{color:var(--settings-subtle)}.text-settings-text{color:var(--settings-text)}.lowercase{text-transform:lowercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\\[0_10px_30px_rgb\\(0_0_0\\/0\\.22\\)\\]{--tw-shadow:0 10px 30px var(--tw-shadow-color,#00000038);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-settings-border{--tw-ring-color:var(--settings-border)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.ring-inset{--tw-ring-inset:inset}.group-focus-within\\:visible:is(:where(.group):focus-within *){visibility:visible}.group-focus-within\\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\\:visible:is(:where(.group):hover *){visibility:visible}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.group-data-\\[state\\=failed\\]\\/status\\:bg-settings-danger:is(:where(.group\\/status)[data-state=failed] *){background-color:var(--settings-danger)}.group-data-\\[state\\=unavailable\\]\\/status\\:bg-settings-warning:is(:where(.group\\/status)[data-state=unavailable] *){background-color:var(--settings-warning)}.marker\\:text-settings-subtle ::marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle::marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle ::-webkit-details-marker{color:var(--settings-subtle)}.marker\\:text-settings-subtle::-webkit-details-marker{color:var(--settings-subtle)}.before\\:absolute:before{content:var(--tw-content);position:absolute}.before\\:top-0\\.5:before{content:var(--tw-content);top:calc(var(--spacing) * .5)}.before\\:left-0\\.5:before{content:var(--tw-content);left:calc(var(--spacing) * .5)}.before\\:size-4:before{content:var(--tw-content);width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.before\\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\\:bg-white:before{content:var(--tw-content);background-color:#fff}.before\\:shadow-\\[0_1px_2px_rgb\\(0_0_0\\/0\\.3\\)\\]:before{content:var(--tw-content);--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.before\\:transition-transform:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.first\\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.first-of-type\\:mt-0:first-of-type{margin-top:0}.checked\\:bg-settings-focus:checked{background-color:var(--settings-focus)}.checked\\:ring-transparent:checked{--tw-ring-color:transparent}.checked\\:before\\:translate-x-4:checked:before{content:var(--tw-content);--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.focus-within\\:border-settings-focus:focus-within{border-color:var(--settings-focus)}@media (hover:hover){.hover\\:bg-settings-hover:hover{background-color:var(--settings-hover)}.hover\\:text-settings-text:hover{color:var(--settings-text)}}.focus-visible\\:text-settings-text:focus-visible{color:var(--settings-text)}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-settings-focus:focus-visible{outline-color:var(--settings-focus)}.data-\\[invalid\\=true\\]\\:border-settings-danger[data-invalid=true]{border-color:var(--settings-danger)}.data-\\[invalid\\=true\\]\\:text-settings-danger[data-invalid=true],.data-\\[state\\=failed\\]\\:text-settings-danger[data-state=failed]{color:var(--settings-danger)}.data-\\[state\\=unavailable\\]\\:text-settings-warning[data-state=unavailable]{color:var(--settings-warning)}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@layer properties{\n *, ::before, ::after, ::backdrop{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-alpha:100%;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-width:0;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-drop-shadow-alpha:100%;--tw-content:"";--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}\n';
32508
32518
 
32509
32519
  // src/web-request-manager.ts
32510
32520
  function webRequestManager() {
@@ -26,10 +26,10 @@
26
26
  media="(prefers-color-scheme: light)"
27
27
  />
28
28
  <title>CodexHost</title>
29
- <script type="module" crossorigin src="./assets/index-DeAPBQbV.js"></script>
29
+ <script type="module" crossorigin src="./assets/index-aKvkfNJN.js"></script>
30
30
  <link rel="modulepreload" crossorigin href="./assets/vendor-dSL872WO.js">
31
31
  <link rel="stylesheet" crossorigin href="./assets/vendor-BNsW4eBh.css">
32
- <link rel="stylesheet" crossorigin href="./assets/index-CIeTchMu.css">
32
+ <link rel="stylesheet" crossorigin href="./assets/index-C3lniEH1.css">
33
33
  </head>
34
34
  <body>
35
35
  <div id="root"></div>
@@ -1,4 +1,4 @@
1
- window.__ModuleLoader__.load({id:`@deepseek-ai/dsh-api-gateway`,factory:e=>{var t={exports:{}},n=t.exports;Object.defineProperty(n,Symbol.toStringTag,{value:`Module`});let r=e("@deepseek-ai/cordis");var i=class extends Error{code;details;isDSHRemoteError=!0;constructor(e,t,n,r){super(t,r),this.code=e,this.details=n,this.name=`RemoteError`}};function a(e){if(typeof e==`object`&&e&&e.isDSHRemoteError===!0&&typeof e.code==`string`)return e}let o=Symbol.for(`dsh.typert.owned-value`);function s(e){return typeof e==`object`&&!!e&&o in e&&e[o]===!0}function c(e){return u(e,/* @__PURE__ */ new Set)}function l(e){return e===void 0||c(e)}function u(e,t){if(e===null||typeof e==`string`||typeof e==`boolean`)return!0;if(typeof e==`number`)return Number.isFinite(e)&&!Object.is(e,-0);if(typeof e!=`object`||t.has(e))return!1;t.add(e);try{if(Array.isArray(e)){if(Object.getPrototypeOf(e)!==Array.prototype||Reflect.ownKeys(e).length!==e.length+1)return!1;for(let n=0;n<e.length;n++)if(!Object.hasOwn(e,n)||!u(e[n],t))return!1;return!0}let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)return!1;for(let n of Reflect.ownKeys(e))if(typeof n!=`string`||Object.getOwnPropertyDescriptor(e,n)?.enumerable!==!0||!u(Reflect.get(e,n),t))return!1;return!0}finally{t.delete(e)}}var d=class{send;failed;timer;pending;sequence=0;lastActivity=Date.now();stopped=!1;interval;timeout;restoreTimeout;constructor(e,t,n={}){this.send=e,this.failed=t,this.interval=n.intervalMs??25e3,this.timeout=n.timeoutMs??1e4,this.restoreTimeout=n.restoreTimeoutMs??2e3,this.schedule(this.interval)}received(e){this.stopped||(this.lastActivity=Date.now(),this.pending!==void 0&&e===this.pending&&(this.pending=void 0,this.schedule(this.interval)))}probe(){this.stopped||this.sendProbe(this.restoreTimeout)}stop(){this.stopped=!0,clearTimeout(this.timer),this.pending=void 0}schedule(e){clearTimeout(this.timer),this.timer=setTimeout(()=>this.tick(),e)}tick(){if(this.stopped)return;if(typeof document<`u`&&document.visibilityState===`hidden`){this.pending=void 0,this.lastActivity=Date.now(),this.schedule(this.interval);return}if(this.pending!==void 0){this.stop(),this.failed();return}let e=this.interval-(Date.now()-this.lastActivity);e>0?this.schedule(e):this.sendProbe(this.timeout)}sendProbe(e){this.pending=`heartbeat-${String(++this.sequence)}`,this.schedule(e);try{this.send(this.pending)}catch{this.stop(),this.failed()}}};let f={args:{}};function ee(e){let t=typeof e==`object`&&e?e:void 0,n=v(t,`name`)??`Error`,r=v(t,`message`)??String(e),i=v(t,`code`),a=t===void 0?void 0:Reflect.get(t,`details`);return{name:n,message:r,...i===void 0?{}:{code:i},...a===void 0||!c(a)?{}:{details:a}}}function p(e){return typeof e==`string`&&e.length>0}function te(e){return typeof e==`string`&&e.length>0}function ne(e){return typeof e==`string`&&e.length>0}function re(e){return m(e,e=>{if(e.type===`item`&&(g(e,[`type`,`streamId`])||g(e,[`type`,`streamId`,`value`]))&&_(e.streamId)||(e.type===`end`||e.type===`pong`)&&g(e,[`type`,`streamId`])&&_(e.streamId)||e.type===`error`&&g(e,[`type`,`streamId`,`error`])&&_(e.streamId)&&h(e.error)&&g(e.error,[`code`,`message`,`details`])&&typeof e.error.code==`string`&&typeof e.error.message==`string`&&h(e.error.details))return e;throw Error(`api gateway: invalid Remote stream server message`)})}function m(e,t){let n;try{n=JSON.parse(e)}catch(e){throw Error(`api gateway: Remote stream message is not JSON`,{cause:e})}if(!h(n))throw Error(`api gateway: Remote stream message must be an object`);return t(n)}function h(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function g(e,t){return Reflect.ownKeys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}function _(e){return typeof e==`string`&&e.length>0}function v(e,t){if(e===void 0)return;let n=Reflect.get(e,t);return typeof n==`string`?n:void 0}var y=class{buffer=Array(16);head=0;count=0;get size(){return this.count}pushBack(e){this.ensureCapacity();let t=this.head+this.count;this.buffer[t<this.buffer.length?t:t-this.buffer.length]=e,this.count+=1}pushFront(e){this.ensureCapacity(),this.head=this.head===0?this.buffer.length-1:this.head-1,this.buffer[this.head]=e,this.count+=1}popFront(){if(this.count===0)return;let e=this.buffer[this.head];return this.buffer[this.head]=void 0,this.head+=1,this.head===this.buffer.length&&(this.head=0),--this.count,this.compact(),e}clear(){this.buffer=Array(16),this.head=0,this.count=0}ensureCapacity(){this.count<this.buffer.length||this.resize(this.buffer.length*2)}compact(){this.count===0?this.head=0:this.buffer.length>16&&this.count<=this.buffer.length/4&&this.resize(Math.max(16,this.buffer.length/2))}resize(e){let t=Array(e),n=this.head;for(let e=0;e<this.count;e+=1)t[e]=this.buffer[n],n+=1,n===this.buffer.length&&(n=0);this.buffer=t,this.head=0}};function b(){let e=globalThis.crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16)),t=Array.from(e,(e,t)=>(t===6?e&15|64:t===8?e&63|128:e).toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}var x=class extends Error{constructor(e,t){super(e,t),this.name=`RemoteStreamCarrierError`}};let S={value:void 0,done:!0};var ie=class{heartbeatOptions;socket;cancelCandidate;keepAlive;revision=0;streams=/* @__PURE__ */ new Map;waiters=/* @__PURE__ */ new Set;running=!1;disposed=!1;heartbeat;constructor(e={}){this.heartbeatOptions=e}start(){if(this.disposed||(this.running=!0,this.socket?.readyState===WebSocket.OPEN))return;let e=this.keepAlive;e===void 0?this.maintain():e.then(()=>{this.maintain()})}reconnect(){if(!this.running||this.disposed)return;let e=new x(`api gateway: Remote stream reconnect requested`),t=this.keepAlive;this.disconnect(e),t===void 0?this.maintain():t.then(()=>{this.maintain()})}probe(){return this.socket?.readyState!==WebSocket.OPEN||this.heartbeat===void 0?!1:(this.heartbeat.probe(),!0)}disconnect(e=new x(`api gateway: connection unavailable`)){this.revision++,this.heartbeat?.stop(),this.heartbeat=void 0,this.cancelCandidate?.(e);let t=this.socket;this.socket=void 0,this.failAll(e),t?.close(4e3,`connection unavailable`)}async*open(e,t,n,r){n.throwIfAborted();let a=b(),o=new ae,s={inbox:o,pump:void 0},c,l=!1,u=!1,d=()=>{o.fail(n.reason)};n.addEventListener(`abort`,d,{once:!0});try{let d=await this.waitForSocket(n);for(n.throwIfAborted(),c=d,this.streams.set(a,s),this.send(d,{type:`open`,streamId:a,endpoint:e,payload:t}),l=!0,r!==void 0&&(s.pump=this.pumpUplink(d,a,r,n,o));;){let e=await o.next();if(n.throwIfAborted(),e.type===`item`)yield e.value;else{if(u=!0,e.type===`error`)throw new i(e.error.code,e.error.message,e.error.details);return}}}finally{n.removeEventListener(`abort`,d),this.streams.delete(a),s.pump?.stop(),l&&!u&&c?.readyState===WebSocket.OPEN&&this.send(c,{type:`cancel`,streamId:a}),s.pump!==void 0&&await s.pump.done}}pumpUplink(e,t,n,r,i){let a,o={value:void 0,done:!0},s=n[Symbol.asyncIterator](),c={stopping:!1,exhausted:!1,released:!1},l=()=>{c.released||c.exhausted||(c.released=!0,n instanceof C&&n.close(),Promise.resolve().then(()=>s.return?.()).catch(()=>void 0))};return{done:(async()=>{try{for(;;){if(c.stopping)return;a=Promise.withResolvers();let n=await Promise.race([s.next(),a.promise]);if(a=void 0,c.stopping||n===o||r.aborted||this.socket!==e)return;if(n.done===!0){c.exhausted=!0;break}this.send(e,{type:`item`,streamId:t,value:n.value})}this.send(e,{type:`end`,streamId:t})}catch(e){i.fail(e)}finally{a=void 0,l()}})(),stop:()=>{c.stopping||(c.stopping=!0,a?.resolve(o),l())}}}async close(){if(!this.disposed){this.disposed=!0,this.running=!1,this.heartbeat?.stop(),this.heartbeat=void 0;let e=/* @__PURE__ */ Error(`api gateway: Remote stream client disposed`);this.failAll(e);for(let t of[...this.waiters])t.reject(e);this.cancelCandidate?.(e);let t=this.socket;this.socket=void 0,t?.close(1e3,`disposed`)}await this.keepAlive}connect(){let e=new WebSocket(oe());return new Promise((t,n)=>{let r=!1,i=t=>{r=!0,e.removeEventListener(`open`,a),e.removeEventListener(`error`,o),e.removeEventListener(`message`,c),e.removeEventListener(`close`,s),this.cancelCandidate=void 0,e.close(),n(t)},a=()=>{r=!0,this.cancelCandidate=void 0,this.socket=e,this.heartbeat=new d(t=>this.send(e,{type:`ping`,streamId:t}),()=>{this.lost(e,new x(`api gateway: heartbeat timed out`)),e.close(4e3,`heartbeat timed out`)},this.heartbeatOptions);for(let t of[...this.waiters])t.resolve(e);t(e)},o=()=>{if(!r){i(new x(`api gateway: Remote stream WebSocket failed to open`));return}let t=new x(`api gateway: Remote stream WebSocket failed`);this.lost(e,t),e.close()},s=()=>{r?this.lost(e):i(new x(`api gateway: Remote stream WebSocket closed before opening`))},c=t=>{this.receive(e,t.data)};this.cancelCandidate=i,e.addEventListener(`open`,a,{once:!0}),e.addEventListener(`error`,o,{once:!0}),e.addEventListener(`message`,c),e.addEventListener(`close`,s,{once:!0})})}waitForSocket(e){return e.throwIfAborted(),this.socket?.readyState===WebSocket.OPEN?Promise.resolve(this.socket):this.disposed?Promise.reject(/* @__PURE__ */ Error(`api gateway: Remote stream client disposed`)):this.running?new Promise((t,n)=>{let r=()=>{a.reject(e.reason)},i=()=>{this.waiters.delete(a),e.removeEventListener(`abort`,r)},a={revision:this.revision,resolve:e=>{i(),t(e)},reject:e=>{i(),n(e)}};this.waiters.add(a),e.addEventListener(`abort`,r,{once:!0})}):Promise.reject(/* @__PURE__ */ Error(`api gateway: Remote stream client not started`))}receive(e,t){if(e===this.socket)try{if(typeof t!=`string`)throw Error(`api gateway: Remote stream WebSocket requires text messages`);let e=re(t);if(this.heartbeat?.received(e.type===`pong`?e.streamId:void 0),e.type===`pong`)return;let n=this.streams.get(e.streamId);if(n===void 0)return;n.inbox.push(e),e.type!==`item`&&n.pump?.stop()}catch(t){let n=new x(`api gateway: invalid Remote stream frame`,{cause:t});this.failAll(n),this.lost(e,n),e.close(4002,`invalid Remote stream frame`)}}lost(e,t=new x(`api gateway: Remote stream WebSocket closed`)){this.socket===e&&(this.heartbeat?.stop(),this.heartbeat=void 0,this.socket=void 0,this.failAll(t))}maintain(){if(!this.running||this.disposed||this.socket?.readyState===WebSocket.OPEN||this.keepAlive!==void 0)return;let e=this.revision,t=this.connect().then(()=>void 0,t=>{if(this.running)for(let n of[...this.waiters])n.revision<=e&&n.reject(t)});this.keepAlive=t,t.then(()=>{this.keepAlive=void 0})}failAll(e){for(let t of this.streams.values())t.inbox.fail(e),t.pump?.stop()}send(e,t){e.send(JSON.stringify(t))}},ae=class{frames=new y;wake;failure;push(e){this.failure===void 0&&(this.frames.pushBack(e),this.wake?.(),this.wake=void 0)}fail(e){this.failure===void 0&&(this.failure=e instanceof Error?e:Error(String(e),{cause:e}),this.frames.clear(),this.wake?.(),this.wake=void 0)}async next(){for(;this.frames.size===0;){if(this.failure!==void 0)throw this.failure;await new Promise(e=>{this.wake=e})}return this.frames.popFront()}},C=class{endpoint;items=new y;ended=!1;closed=!1;wake;constructor(e){this.endpoint=e}push(e){if(this.closed)throw Error(`client api: ${this.endpoint} stream has terminated`);if(this.ended)throw Error(`client api: ${this.endpoint} uplink was ended`);this.items.pushBack(e),this.signal()}end(){this.ended||this.closed||(this.ended=!0,this.signal())}close(){this.closed||(this.closed=!0,this.items.clear(),this.signal())}[Symbol.asyncIterator](){return this}async next(){for(;;){if(this.closed)return S;if(this.items.size>0)return{value:this.items.popFront(),done:!1};if(this.ended)return S;if(this.wake!==void 0)throw Error(`client api: ${this.endpoint} uplink has one pending read`);await new Promise(e=>{this.wake=e})}}return(){return this.close(),Promise.resolve(S)}signal(){let e=this.wake;this.wake=void 0,e?.()}};function oe(){let e=new URL(`api/remote.mux`,globalThis.__DSH_TRANSPORT__?.streamBaseUrl??document.baseURI);return e.protocol=e.protocol===`https:`?`wss:`:`ws:`,e.href}let w=Symbol(`api-gateway.remote-event.next`);var se=class{ownerCtx;connection;openStream;eventPrefix=`internal/api-gateway/remote-event/${b()}/`;unregisterGeneration;activeGeneration;constructor(e,t,n){this.ownerCtx=e,this.connection=t,this.openStream=n,this.unregisterGeneration=t.registerGenerationSource(this.runGeneration)}subscribe(e,t,n){let r=A(e).on(this.eventKey(t),n);return()=>{r()}}async dispose(){this.unregisterGeneration(),await Promise.allSettled([this.activeGeneration])}runGeneration=(e,t)=>{let n=this.pumpEvents(e,t).finally(()=>{this.activeGeneration===n&&(this.activeGeneration=void 0)});return this.activeGeneration=n,n};deliver(e){A(this.ownerCtx).parallel(this.eventKey(e.event),...e.args).catch(t=>{this.reportError(e.event,t)})}async pumpEvents(e,t){let n,r=new AbortController,i=AbortSignal.any([e,r.signal]),a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Set,s=this.openStream(`$events`,f,i),c=!1,l;try{for await(let e of s){if(n===void 0){let r=T(e);n=r.clientId,t(r.host);continue}let s=ce(e);if(s.type===`cancel`){a.get(s.eventId)?.abort(/* @__PURE__ */ Error(`client api: Remote event was cancelled by the Host`));continue}if(s.type===`emit`){this.deliver(s);continue}let c=new AbortController;a.set(s.eventId,c);let l=AbortSignal.any([i,c.signal]),u=this.answer(s,n,l).catch(e=>{l.aborted||r.abort(e)}).finally(()=>{a.delete(s.eventId),o.delete(u)});o.add(u)}}catch(e){c=!0,l=e}finally{for(let e of a.values())e.abort(/* @__PURE__ */ Error(`client api: Remote event generation ended`));await Promise.allSettled(o)}if(r.signal.aborted)throw le(r.signal.reason,`client api: Remote event result delivery failed`);if(!e.aborted)throw c?l:Error(`client api: forwarded Remote event stream ended unexpectedly`)}async answer(e,t,n){let r=this.ownerCtx.typert.contexts.getClient(`agent`),i;try{i=r?.resolve(e.agentId)}catch(t){this.reportError(e.event,t)}let a=s(i)?i:void 0;try{let r=s(i)?i.value:i,a={kind:`next`};if(r!==void 0)try{a=await this.dispatchWaterfall(r,e,n)}catch(e){if(n.aborted)return;a={kind:`rejected`,error:ee(e)}}if(n.aborted)return;let o={clientId:t,eventId:e.eventId,outcome:a.kind===`result`&&a.value===void 0?{kind:`result`}:a},c=await this.connection.rpc.call(`/api`,`$events/result`,{args:o},n);if(!c.ok)throw Error(c.error.message)}finally{a?.[Symbol.dispose]()}}async dispatchWaterfall(e,t,n){let r={...t.request,agent:e,signal:n},i=await A(e).waterfall(e,this.eventKey(t.event),r,()=>Promise.resolve(w));if(i!==w&&i!==void 0&&!c(i))throw TypeError(`Remote event listener result is not lossless JSON data`);return i===w?{kind:`next`}:{kind:`result`,value:i}}eventKey(e){return`${this.eventPrefix}${e}`}reportError(e,t){console.error(`client api: Remote event ${JSON.stringify(e)} listener threw:`,t)}};function T(e){if(!E(e)||!D(e,[`type`,`clientId`,`host`])||e.type!==`ready`||!te(e.clientId)||!E(e.host)||!D(e.host,[`home`])||typeof e.host.home!=`string`)throw TypeError(`client api: forwarded Remote event stream did not begin with ready`);return{clientId:e.clientId,host:{home:e.host.home}}}function ce(e){if(E(e)||k(),e.type===`cancel`&&D(e,[`type`,`eventId`])&&p(e.eventId))return{type:`cancel`,eventId:e.eventId};if(e.type===`emit`&&D(e,[`type`,`event`,`args`])&&O(e.event)&&Array.isArray(e.args)&&c(e.args))return{type:`emit`,event:e.event,args:e.args};if(e.type===`waterfall`&&D(e,[`type`,`event`,`eventId`,`agentId`,`request`])&&O(e.event)&&p(e.eventId)&&ne(e.agentId)&&E(e.request)&&!Object.hasOwn(e.request,`agent`)&&!Object.hasOwn(e.request,`signal`)&&c(e.request))return{type:`waterfall`,event:e.event,eventId:e.eventId,agentId:e.agentId,request:e.request};k()}function E(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function D(e,t){return Reflect.ownKeys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}function O(e){return typeof e==`string`&&e.length>0}function k(){throw TypeError(`client api: invalid forwarded Remote event frame`)}function A(e){return e}function le(e,t){return e instanceof Error?e:Error(t,{cause:e})}var j=class{connection;options;lifetime=new AbortController;generationAbort;iterator;closing;revision=0;taken=!1;constructor(e,t){this.connection=e,this.options=t}get signal(){return this.lifetime.signal}restart(){this.lifetime.signal.aborted||(this.revision++,this.generationAbort?.abort(/* @__PURE__ */ Error(`${this.options.name} generation restarted`)))}dispose(){if(this.closing!==void 0)return this.closing;if(!this.lifetime.signal.aborted){let e=/* @__PURE__ */ Error(`${this.options.name} disposed`);this.lifetime.abort(e),this.generationAbort?.abort(e)}let e=this.iterator;if(e===void 0)return Promise.resolve();let t=P(e);return this.closing=t,t}[Symbol.asyncIterator](){if(this.taken)throw Error(`${this.options.name} already has a consumer`);this.taken=!0;let e=this.read();return this.iterator=e,e}async*read(){let e=0,t=0,n=this.revision;try{for(;!N(this.lifetime.signal);){n!==this.revision&&(n=this.revision,e=0);let r=this.revision,i=new AbortController;this.generationAbort=i;let a=AbortSignal.any([this.lifetime.signal,i.signal]),o=++t,s=!1;try{for await(let t of this.options.open(a)){if(N(this.lifetime.signal))return;if(r!==this.revision)break;yield{generation:o,value:t,signal:a,accept:()=>{this.generationAbort===i&&r===this.revision&&(s=!0,e=0)}}}if(N(this.lifetime.signal))return;if(r!==this.revision)continue;throw this.options.ended(s)}catch(t){if(N(this.lifetime.signal))return;if(r!==this.revision)continue;if(!(t instanceof x))throw M(t);if(this.options.carrierFailed?.(t),r!==this.revision)continue;e++;try{await ue(this.connection,e,a)}catch(e){if(N(this.lifetime.signal))return;if(r!==this.revision)continue;throw M(e)}}finally{this.generationAbort=void 0,i.signal.aborted||i.abort(/* @__PURE__ */ Error(`${this.options.name} generation ended`))}}}finally{this.lifetime.signal.aborted||this.lifetime.abort(/* @__PURE__ */ Error(`${this.options.name} consumer closed`)),this.generationAbort?.abort(this.lifetime.signal.reason),this.generationAbort=void 0}}};async function ue(e,t,n){n.throwIfAborted(),e.generation.getSnapshot()===void 0?await new Promise((t,r)=>{let i={finished:!1},a=e=>{i.finished||(i.finished=!0,i.dispose?.(),n.removeEventListener(`abort`,s),e===void 0?t():r(e))},o=()=>{e.generation.getSnapshot()!==void 0&&a()},s=()=>{a(Error(`Remote stream retry aborted`,{cause:n.reason}))},c=e.generation.subscribe(o);i.dispose=c,i.finished&&c(),n.addEventListener(`abort`,s,{once:!0}),n.aborted?s():o()}):await new Promise((e,r)=>{let i=setTimeout(()=>{n.removeEventListener(`abort`,a),e()},Math.min(100*2**Math.min(t-1,5),3e3)),a=()=>{clearTimeout(i),n.removeEventListener(`abort`,a),r(n.reason)};n.addEventListener(`abort`,a,{once:!0}),n.aborted&&a()})}function M(e){return a(e)??new i(`gateway/internal`,e instanceof Error?e.message:String(e),{},{cause:e})}function N(e){return e.aborted}async function P(e){try{await e.return?.()}catch{}}function F(e){return new i(`gateway/internal`,e,{})}var I=class{options;stream;initialRequest;resumeCursor;hasResumeCursor=!1;generation=0;firstCursor;lastCursor;started=!1;opened=!1;disposed=!1;done;closing;pendingNext;constructor(e,t){this.options=t,this.stream=e.$stream({name:t.name,open:e=>this.follow(this.initialRequest,e),ended:e=>e?new x(`${t.name} ended without a terminal result`):F(`${this.hasResumeCursor?`resumed `:``}${t.name} ended before its opening cursor`),...t.carrierFailed===void 0?{}:{carrierFailed:t.carrierFailed}})}get signal(){return this.stream.signal}async open(e){if(this.started)throw Error(`${this.options.name} already opened`);this.started=!0,this.initialRequest=e;let t=this.stream[Symbol.asyncIterator]();try{let e=await this.takeNext(t);if(e.done)throw F(`${this.options.name} ended before its opening cursor`);this.replaceGeneration(e.value,!1),this.opened=!0,this.done=this.consume(t)}catch(e){throw await this.stream.dispose(),e}}async prepend(e){if(!this.opened||this.disposed)throw Error(`${this.options.name} is not open`);let t=await this.readPage(e,this.currentCursor(),this.stream.signal);this.stream.signal.throwIfAborted();let n=this.options.entries(t);this.assertPage(n);let r=this.firstCursor,i=r===void 0?[...n]:n.filter(e=>this.options.compare(this.options.first(e),r)<0),a=i.at(-1);if(a!==void 0&&r!==void 0&&!this.options.follows(this.options.last(a),r))throw this.options.publish({type:`prepend`,page:t,entries:[],hasMore:!1}),F(`${this.options.name} history page is discontinuous`);let o=i[0];o!==void 0&&(this.firstCursor=this.options.first(o)),this.options.publish({type:`prepend`,page:t,entries:i,hasMore:this.options.hasMore(t)})}restart(){this.stream.restart()}dispose(){if(this.closing!==void 0)return this.closing;this.disposed=!0;let e=this.done,t=(async()=>{await this.stream.dispose(),await e})();return this.closing=t,t}async consume(e){try{for(;;){let t=await this.takeNext(e);if(t.done)return;let n=t.value;if(n.generation!==this.generation)this.replaceGeneration(n,!0);else{if(n.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);n.value.type===`notification`?this.publishNotification(n.value.notification):await this.acceptEntry(n.value.entry,n,e)}}}catch(e){this.disposed||this.options.failed(e)}}replaceGeneration(e,t){let n=this.opening(e,t);this.replaceFromOpening(n.page,n.cursor)}opening(e,t){if(e.value.type!==`opened`)throw F(`${t?`resumed `:``}${this.options.name} emitted an entry before its opening cursor`);let n=e.value.cursor;if(t&&e.value.reset!==!0&&this.lastCursor!==void 0&&this.options.compare(n,this.lastCursor)<0)throw F(`${this.options.name} resumed at a cursor behind the last applied entry`);return this.generation=e.generation,e.accept(),{cursor:n,page:e.value.page}}replaceFromOpening(e,t){this.assertPageThrough(e,t);let n=[...this.options.entries(e)];this.assertPage(n);let r=n[0];this.firstCursor=r===void 0?void 0:this.options.first(r),this.lastCursor=t,this.setResumeCursor(t),this.options.publish({type:`replace`,page:e,entries:n,hasMore:this.options.hasMore(e)})}async acceptEntry(e,t,n){let{first:r,last:i}=this.entryRange(e),a=this.lastCursor;if(!(this.options.compare(i,a)<=0)){if(this.options.compare(r,a)<=0)throw F(`${this.options.name} emitted a partially overlapping entry`);if(this.options.follows(a,r))this.firstCursor===void 0&&(this.firstCursor=r),this.lastCursor=i,this.setResumeCursor(i),this.options.publish({type:`append`,entry:e});else{let r=this.repairPageRequest(),a=await this.replaceThrough(r,i,t.generation,t.signal,n,[e],[]);a!==void 0&&this.replaceGeneration(a,!0)}}}async replaceThrough(e,t,n,r,i,a,o){let s=await this.readPageWhileFollowing(e,t,n,r,i,a,o);if(s.type===`superseded`)return s.item;let c=s.page;this.assertPageThrough(c,t);let l=this.mergeReplacement(c,a),u=this.maxCursor(t,a);if(l===void 0||this.options.compare(this.tailCursor(l),u)<0){if(s=await this.readPageWhileFollowing(this.repairPageRequest(),u,n,r,i,a,o),s.type===`superseded`)return s.item;c=s.page,this.assertPageThrough(c,u),l=this.mergeReplacement(c,a),u=this.maxCursor(t,a)}if(l===void 0||this.options.compare(this.tailCursor(l),u)<0)throw F(`${this.options.name} page did not reach its opening cursor`);let d=l[0];this.firstCursor=d===void 0?void 0:this.options.first(d),this.lastCursor=this.tailCursor(l),this.setResumeCursor(this.lastCursor),this.options.publish({type:`replace`,page:c,entries:l,hasMore:this.options.hasMore(c)});for(let e of o)this.publishNotification(e)}async readPageWhileFollowing(e,t,n,r,i,a,o){let s=this.readPage(e,t,r).then(e=>({type:`page`,value:e}),e=>({type:`page-error`,error:e}));for(;;){let e=this.nextResult(i),t=e.then(e=>({type:`next`,value:e}),e=>({type:`next-error`,error:e})),c=await Promise.race([s,t]);if(c.type===`page`)return r.throwIfAborted(),{type:`page`,page:c.value};if(c.type===`page-error`){if(!r.aborted||this.stream.signal.aborted)throw c.error;return this.awaitReplacementGeneration(n,i,e)}if(this.releaseNext(),c.type===`next-error`)throw c.error;if(c.value.done)throw r.throwIfAborted(),F(`${this.options.name} ended while reading its replacement page`);let l=c.value.value;if(l.generation!==n)return{type:`superseded`,item:l};if(l.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);l.value.type===`notification`?o.push(l.value.notification):a.push(l.value.entry)}}async awaitReplacementGeneration(e,t,n){let r=n;for(;;){let n;try{n=await r}finally{this.releaseNext()}if(n.done)throw this.stream.signal.throwIfAborted(),F(`${this.options.name} ended while replacing an aborted page generation`);let i=n.value;if(i.generation!==e)return{type:`superseded`,item:i};if(i.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);r=this.nextResult(t)}}mergeReplacement(e,t){let n=[...this.options.entries(e)];this.assertPage(n);for(let e of t)this.entryRange(e);let r=[...t].sort((e,t)=>this.options.compare(this.options.first(e),this.options.first(t))),i=this.tailCursor(n);for(let e of r){let t=this.options.first(e),r=this.options.last(e);if(!(this.options.compare(r,i)<=0)){if(this.options.compare(t,i)<=0)throw F(`${this.options.name} replacement contains a partially overlapping entry`);if(!this.options.follows(i,t))return;n.push(e),i=r}}return n}maxCursor(e,t){let n=e;for(let e of t){let t=this.options.last(e);this.options.compare(t,n)>0&&(n=t)}return n}nextResult(e){return this.pendingNext??=e.next(),this.pendingNext}async takeNext(e){let t=this.nextResult(e);try{return await t}finally{this.releaseNext()}}releaseNext(){this.pendingNext=void 0}publishNotification(e){this.options.publish({type:`notification`,notification:e})}repairPageRequest(){return this.repairRequest(this.initialRequest)}setResumeCursor(e){this.resumeCursor=e,this.hasResumeCursor=!0}currentCursor(){return this.resumeCursor}tailCursor(e){let t=e.at(-1);return t===void 0?this.options.emptyCursor:this.options.last(t)}assertPage(e){let t=e[Symbol.iterator](),n=t.next();if(n.done)return;let r=this.entryRange(n.value);for(let e of t){let t=this.entryRange(e);if(!this.options.follows(r.last,t.first))throw F(`${this.options.name} page contains discontinuous entries`);r=t}}entryRange(e){let t=this.options.first(e),n=this.options.last(e);if(this.options.compare(t,n)>0)throw F(`${this.options.name} entry has an inverted cursor range`);return{first:t,last:n}}assertPageThrough(e,t){let n=this.tailCursor(this.options.entries(e));if(this.options.compare(n,t)!==0)throw F(`${this.options.name} page did not end at its requested cursor`)}};function L(e){return new i(`gateway/internal`,e,{})}var R=class{stream;options;started=!1;disposed=!1;done;constructor(e,t){this.stream=e,this.options=t}start(){this.started||(this.started=!0,this.done=this.consume())}restart(){this.stream.restart()}async dispose(){this.disposed=!0,await this.stream.dispose(),await this.done}async consume(){let e=0,t=!1;try{for await(let n of this.stream)if(n.generation!==e&&(e=n.generation,t=!1),this.options.isSnapshot(n.value)){if(t)throw L(`${this.options.name} emitted more than one opening snapshot`);this.options.replace(n.value),t=!0,n.accept()}else{if(!t)throw L(`${this.options.name} emitted an update before its opening snapshot`);this.options.update(n.value)}}catch(e){this.disposed||this.options.failed(e)}}};let z=[`typert`,`connection`];function B(e){new V(e)}var V=class extends r.Service{ownerCtx;connection;namespaces=/* @__PURE__ */ new Map;hostFacts;streams=new ie;events;mutations=Promise.resolve();constructor(e){super(e,`remote`),this.ownerCtx=e;let t=e.get(`connection`);this.connection=t,this.events=new se(e,t,(e,t,n)=>this.openRemoteStream(e,t,n)),t.rpc.open===void 0&&this.streams.start();let n=!1,r,i=()=>{n||(t.rpc.open===void 0&&this.streams.start(),r=t.start({onConnected:()=>{this.ownerCtx.emit(`connection/reset`)},onReconnectRequested:()=>{t.rpc.open===void 0&&this.streams.reconnect()},onProbeRequested:()=>t.rpc.open===void 0&&this.streams.probe(),onStateChange:e=>{e!==`connected`&&t.rpc.open===void 0&&this.streams.disconnect()}}))},a=e.get(`loader`);a===void 0?i():a.await().then(i,()=>{}),e.effect(()=>async()=>{n=!0,r?.stop(),await this.events.dispose(),await this.streams.close()},`api-gateway.client.transport`)}$stream(e){return new j(this.connection,e)}get $host(){let e=this.connection.generation.getSnapshot()?.host.home;return(this.hostFacts===void 0||this.hostFacts.home!==e)&&(this.hostFacts={home:e,isLoopback:this.connection.isLoopback}),this.hostFacts}async $mount(e){let t=this.ctx,n=t.effect(async()=>{let n=await this.enqueue(()=>this.mountContribution(t,e));return()=>this.enqueue(n)},`api-gateway.client.$mount(${JSON.stringify(e.package)})`);return await n,async()=>{await n()}}$on(e,t){return this.events.subscribe(this.ctx,e,t)}openRemoteStream(e,t,n,r,i=`client api: ${e} has no active Connection`){let a=this.ownerCtx.get(`connection`);if(a===void 0)throw Error(i);let o=a.rpc.open?.(`/api`,e,t,n,r);return o===void 0?this.streams.open(e,t,n,r):he(o)}enqueue(e){let t=this.mutations.then(e,e);return this.mutations=t.then(()=>void 0,()=>void 0),t}async mountContribution(e,t){this.validateContribution(t);let n=e.typert.remotes.register(t),r=/* @__PURE__ */ new Map;for(let e of t.descriptors){let t=r.get(e.namespace);t===void 0?r.set(e.namespace,[e]):t.push(e)}let i=[];try{for(let[e,t]of r)i.push(await this.installNamespace(e,t))}catch(e){for(let e of i.reverse())await e();throw await n(),e}return async()=>{for(let e of i.reverse())await e();await n()}}validateContribution(e){let t=/* @__PURE__ */ new Map,n=/* @__PURE__ */ new Map,r=(e,t,n)=>{let r=e.get(t.namespace)??/* @__PURE__ */ new Set;if(r.has(t.method))throw Error(`client api: contribution repeats ${n} method ${K(t)}`);if(r.add(t.method),e.set(t.namespace,r),(this.namespaces.get(t.namespace)?.service)?.has(n,t.method)===!0)throw Error(`client api: ${n} method ${K(t)} is already mounted`)};for(let i of e.descriptors)fe(i),i.invocation.kind===`direct`&&r(t,i,`direct`),J(i)!==void 0&&r(n,i,`scoped`);let i=/* @__PURE__ */ new Set([...t.keys(),...n.keys()]);for(let e of i){let r=this.namespaces.get(e)?.service;if(r===void 0){if(e in this)throw Error(`client api: namespace ${JSON.stringify(e)} conflicts with the Remote service`);let t=G(e);if(this.ownerCtx.reflect.props[t]?.type===`accessor`||this.ownerCtx.get(t)!==void 0)throw Error(`client api: namespace ${JSON.stringify(e)} conflicts with an existing Remote namespace`)}for(let i of/* @__PURE__ */ new Set([...t.get(e)??[],...n.get(e)??[]]))r===void 0?U.assertMethodAvailable(e,i):r.assertMethodAvailable(i)}}async installNamespace(e,t){let n=this.namespaces.get(e),r;n===void 0?{namespace:n,installed:r}=await this.createNamespace(e,t):r=W(n.service,t);let i=n;return async()=>{for(let e of[...r].reverse())
1
+ window.__ModuleLoader__.load({id:`@deepseek-ai/dsh-api-gateway`,factory:e=>{var t={exports:{}},n=t.exports;Object.defineProperty(n,Symbol.toStringTag,{value:`Module`});let r=e("@deepseek-ai/cordis");var i=class extends Error{code;details;isDSHRemoteError=!0;constructor(e,t,n,r){super(t,r),this.code=e,this.details=n,this.name=`RemoteError`}};function a(e){if(typeof e==`object`&&e&&e.isDSHRemoteError===!0&&typeof e.code==`string`)return e}let o=Symbol.for(`dsh.typert.owned-value`);function s(e){return typeof e==`object`&&!!e&&o in e&&e[o]===!0}function c(e){return u(e,/* @__PURE__ */ new Set)}function l(e){return e===void 0||c(e)}function u(e,t){if(e===null||typeof e==`string`||typeof e==`boolean`)return!0;if(typeof e==`number`)return Number.isFinite(e)&&!Object.is(e,-0);if(typeof e!=`object`||t.has(e))return!1;t.add(e);try{if(Array.isArray(e)){if(Object.getPrototypeOf(e)!==Array.prototype||Reflect.ownKeys(e).length!==e.length+1)return!1;for(let n=0;n<e.length;n++)if(!Object.hasOwn(e,n)||!u(e[n],t))return!1;return!0}let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)return!1;for(let n of Reflect.ownKeys(e))if(typeof n!=`string`||Object.getOwnPropertyDescriptor(e,n)?.enumerable!==!0||!u(Reflect.get(e,n),t))return!1;return!0}finally{t.delete(e)}}var d=class{send;failed;timer;pending;sequence=0;lastActivity=Date.now();stopped=!1;interval;timeout;restoreTimeout;visibilityChanged=()=>{document.visibilityState===`hidden`&&(clearTimeout(this.timer),this.pending=void 0)};constructor(e,t,n={}){this.send=e,this.failed=t,this.interval=n.intervalMs??25e3,this.timeout=n.timeoutMs??1e4,this.restoreTimeout=n.restoreTimeoutMs??this.timeout,typeof document<`u`&&document.addEventListener(`visibilitychange`,this.visibilityChanged),this.schedule(this.interval)}received(e){this.stopped||(this.lastActivity=Date.now(),this.pending!==void 0&&e===this.pending&&(this.pending=void 0,this.schedule(this.interval)))}probe(){this.stopped||this.sendProbe(this.restoreTimeout)}stop(){this.stopped=!0,typeof document<`u`&&document.removeEventListener(`visibilitychange`,this.visibilityChanged),clearTimeout(this.timer),this.pending=void 0}schedule(e){clearTimeout(this.timer),this.timer=setTimeout(()=>this.tick(),e)}tick(){if(this.stopped)return;if(typeof document<`u`&&document.visibilityState===`hidden`){this.pending=void 0,this.lastActivity=Date.now(),this.schedule(this.interval);return}if(this.pending!==void 0){this.stop(),this.failed();return}let e=this.interval-(Date.now()-this.lastActivity);e>0?this.schedule(e):this.sendProbe(this.timeout)}sendProbe(e){this.pending=`heartbeat-${String(++this.sequence)}`,this.schedule(e);try{this.send(this.pending)}catch{this.stop(),this.failed()}}};let f={args:{}};function ee(e){let t=typeof e==`object`&&e?e:void 0,n=v(t,`name`)??`Error`,r=v(t,`message`)??String(e),i=v(t,`code`),a=t===void 0?void 0:Reflect.get(t,`details`);return{name:n,message:r,...i===void 0?{}:{code:i},...a===void 0||!c(a)?{}:{details:a}}}function p(e){return typeof e==`string`&&e.length>0}function te(e){return typeof e==`string`&&e.length>0}function ne(e){return typeof e==`string`&&e.length>0}function re(e){return m(e,e=>{if(e.type===`item`&&(g(e,[`type`,`streamId`])||g(e,[`type`,`streamId`,`value`]))&&_(e.streamId)||(e.type===`end`||e.type===`pong`)&&g(e,[`type`,`streamId`])&&_(e.streamId)||e.type===`error`&&g(e,[`type`,`streamId`,`error`])&&_(e.streamId)&&h(e.error)&&g(e.error,[`code`,`message`,`details`])&&typeof e.error.code==`string`&&typeof e.error.message==`string`&&h(e.error.details))return e;throw Error(`api gateway: invalid Remote stream server message`)})}function m(e,t){let n;try{n=JSON.parse(e)}catch(e){throw Error(`api gateway: Remote stream message is not JSON`,{cause:e})}if(!h(n))throw Error(`api gateway: Remote stream message must be an object`);return t(n)}function h(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function g(e,t){return Reflect.ownKeys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}function _(e){return typeof e==`string`&&e.length>0}function v(e,t){if(e===void 0)return;let n=Reflect.get(e,t);return typeof n==`string`?n:void 0}var y=class{buffer=Array(16);head=0;count=0;get size(){return this.count}pushBack(e){this.ensureCapacity();let t=this.head+this.count;this.buffer[t<this.buffer.length?t:t-this.buffer.length]=e,this.count+=1}pushFront(e){this.ensureCapacity(),this.head=this.head===0?this.buffer.length-1:this.head-1,this.buffer[this.head]=e,this.count+=1}popFront(){if(this.count===0)return;let e=this.buffer[this.head];return this.buffer[this.head]=void 0,this.head+=1,this.head===this.buffer.length&&(this.head=0),--this.count,this.compact(),e}clear(){this.buffer=Array(16),this.head=0,this.count=0}ensureCapacity(){this.count<this.buffer.length||this.resize(this.buffer.length*2)}compact(){this.count===0?this.head=0:this.buffer.length>16&&this.count<=this.buffer.length/4&&this.resize(Math.max(16,this.buffer.length/2))}resize(e){let t=Array(e),n=this.head;for(let e=0;e<this.count;e+=1)t[e]=this.buffer[n],n+=1,n===this.buffer.length&&(n=0);this.buffer=t,this.head=0}};function b(){let e=globalThis.crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16)),t=Array.from(e,(e,t)=>(t===6?e&15|64:t===8?e&63|128:e).toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}var x=class extends Error{constructor(e,t){super(e,t),this.name=`RemoteStreamCarrierError`}};let S={value:void 0,done:!0};var ie=class{heartbeatOptions;socket;cancelCandidate;keepAlive;revision=0;streams=/* @__PURE__ */ new Map;waiters=/* @__PURE__ */ new Set;running=!1;disposed=!1;heartbeat;constructor(e={}){this.heartbeatOptions=e}start(){if(this.disposed||(this.running=!0,this.socket?.readyState===WebSocket.OPEN))return;let e=this.keepAlive;e===void 0?this.maintain():e.then(()=>{this.maintain()})}reconnect(){if(!this.running||this.disposed)return;let e=new x(`api gateway: Remote stream reconnect requested`),t=this.keepAlive;this.disconnect(e),t===void 0?this.maintain():t.then(()=>{this.maintain()})}probe(){return this.socket?.readyState!==WebSocket.OPEN||this.heartbeat===void 0?!1:(this.heartbeat.probe(),!0)}disconnect(e=new x(`api gateway: connection unavailable`)){this.revision++,this.heartbeat?.stop(),this.heartbeat=void 0,this.cancelCandidate?.(e);let t=this.socket;this.socket=void 0,this.failAll(e),t?.close(4e3,`connection unavailable`)}async*open(e,t,n,r){n.throwIfAborted();let a=b(),o=new ae,s={inbox:o,pump:void 0},c,l=!1,u=!1,d=()=>{o.fail(n.reason)};n.addEventListener(`abort`,d,{once:!0});try{let d=await this.waitForSocket(n);for(n.throwIfAborted(),c=d,this.streams.set(a,s),this.send(d,{type:`open`,streamId:a,endpoint:e,payload:t}),l=!0,r!==void 0&&(s.pump=this.pumpUplink(d,a,r,n,o));;){let e=await o.next();if(n.throwIfAborted(),e.type===`item`)yield e.value;else{if(u=!0,e.type===`error`)throw new i(e.error.code,e.error.message,e.error.details);return}}}finally{n.removeEventListener(`abort`,d),this.streams.delete(a),s.pump?.stop(),l&&!u&&c?.readyState===WebSocket.OPEN&&this.send(c,{type:`cancel`,streamId:a}),s.pump!==void 0&&await s.pump.done}}pumpUplink(e,t,n,r,i){let a,o={value:void 0,done:!0},s=n[Symbol.asyncIterator](),c={stopping:!1,exhausted:!1,released:!1},l=()=>{c.released||c.exhausted||(c.released=!0,n instanceof C&&n.close(),Promise.resolve().then(()=>s.return?.()).catch(()=>void 0))};return{done:(async()=>{try{for(;;){if(c.stopping)return;a=Promise.withResolvers();let n=await Promise.race([s.next(),a.promise]);if(a=void 0,c.stopping||n===o||r.aborted||this.socket!==e)return;if(n.done===!0){c.exhausted=!0;break}this.send(e,{type:`item`,streamId:t,value:n.value})}this.send(e,{type:`end`,streamId:t})}catch(e){i.fail(e)}finally{a=void 0,l()}})(),stop:()=>{c.stopping||(c.stopping=!0,a?.resolve(o),l())}}}async close(){if(!this.disposed){this.disposed=!0,this.running=!1,this.heartbeat?.stop(),this.heartbeat=void 0;let e=/* @__PURE__ */ Error(`api gateway: Remote stream client disposed`);this.failAll(e);for(let t of[...this.waiters])t.reject(e);this.cancelCandidate?.(e);let t=this.socket;this.socket=void 0,t?.close(1e3,`disposed`)}await this.keepAlive}connect(){let e=new WebSocket(oe());return new Promise((t,n)=>{let r=!1,i=t=>{r=!0,e.removeEventListener(`open`,a),e.removeEventListener(`error`,o),e.removeEventListener(`message`,c),e.removeEventListener(`close`,s),this.cancelCandidate=void 0,e.close(),n(t)},a=()=>{r=!0,this.cancelCandidate=void 0,this.socket=e,this.heartbeat=new d(t=>this.send(e,{type:`ping`,streamId:t}),()=>{this.lost(e,new x(`api gateway: heartbeat timed out`)),e.close(4e3,`heartbeat timed out`)},this.heartbeatOptions);for(let t of[...this.waiters])t.resolve(e);t(e)},o=()=>{if(!r){i(new x(`api gateway: Remote stream WebSocket failed to open`));return}let t=new x(`api gateway: Remote stream WebSocket failed`);this.lost(e,t),e.close()},s=()=>{r?this.lost(e):i(new x(`api gateway: Remote stream WebSocket closed before opening`))},c=t=>{this.receive(e,t.data)};this.cancelCandidate=i,e.addEventListener(`open`,a,{once:!0}),e.addEventListener(`error`,o,{once:!0}),e.addEventListener(`message`,c),e.addEventListener(`close`,s,{once:!0})})}waitForSocket(e){return e.throwIfAborted(),this.socket?.readyState===WebSocket.OPEN?Promise.resolve(this.socket):this.disposed?Promise.reject(/* @__PURE__ */ Error(`api gateway: Remote stream client disposed`)):this.running?new Promise((t,n)=>{let r=()=>{a.reject(e.reason)},i=()=>{this.waiters.delete(a),e.removeEventListener(`abort`,r)},a={revision:this.revision,resolve:e=>{i(),t(e)},reject:e=>{i(),n(e)}};this.waiters.add(a),e.addEventListener(`abort`,r,{once:!0})}):Promise.reject(/* @__PURE__ */ Error(`api gateway: Remote stream client not started`))}receive(e,t){if(e===this.socket)try{if(typeof t!=`string`)throw Error(`api gateway: Remote stream WebSocket requires text messages`);let e=re(t);if(this.heartbeat?.received(e.type===`pong`?e.streamId:void 0),e.type===`pong`)return;let n=this.streams.get(e.streamId);if(n===void 0)return;n.inbox.push(e),e.type!==`item`&&n.pump?.stop()}catch(t){let n=new x(`api gateway: invalid Remote stream frame`,{cause:t});this.failAll(n),this.lost(e,n),e.close(4002,`invalid Remote stream frame`)}}lost(e,t=new x(`api gateway: Remote stream WebSocket closed`)){this.socket===e&&(this.heartbeat?.stop(),this.heartbeat=void 0,this.socket=void 0,this.failAll(t))}maintain(){if(!this.running||this.disposed||this.socket?.readyState===WebSocket.OPEN||this.keepAlive!==void 0)return;let e=this.revision,t=this.connect().then(()=>void 0,t=>{if(this.running)for(let n of[...this.waiters])n.revision<=e&&n.reject(t)});this.keepAlive=t,t.then(()=>{this.keepAlive=void 0})}failAll(e){for(let t of this.streams.values())t.inbox.fail(e),t.pump?.stop()}send(e,t){e.send(JSON.stringify(t))}},ae=class{frames=new y;wake;failure;push(e){this.failure===void 0&&(this.frames.pushBack(e),this.wake?.(),this.wake=void 0)}fail(e){this.failure===void 0&&(this.failure=e instanceof Error?e:Error(String(e),{cause:e}),this.frames.clear(),this.wake?.(),this.wake=void 0)}async next(){for(;this.frames.size===0;){if(this.failure!==void 0)throw this.failure;await new Promise(e=>{this.wake=e})}return this.frames.popFront()}},C=class{endpoint;items=new y;ended=!1;closed=!1;wake;constructor(e){this.endpoint=e}push(e){if(this.closed)throw Error(`client api: ${this.endpoint} stream has terminated`);if(this.ended)throw Error(`client api: ${this.endpoint} uplink was ended`);this.items.pushBack(e),this.signal()}end(){this.ended||this.closed||(this.ended=!0,this.signal())}close(){this.closed||(this.closed=!0,this.items.clear(),this.signal())}[Symbol.asyncIterator](){return this}async next(){for(;;){if(this.closed)return S;if(this.items.size>0)return{value:this.items.popFront(),done:!1};if(this.ended)return S;if(this.wake!==void 0)throw Error(`client api: ${this.endpoint} uplink has one pending read`);await new Promise(e=>{this.wake=e})}}return(){return this.close(),Promise.resolve(S)}signal(){let e=this.wake;this.wake=void 0,e?.()}};function oe(){let e=new URL(`api/remote.mux`,globalThis.__DSH_TRANSPORT__?.streamBaseUrl??document.baseURI);return e.protocol=e.protocol===`https:`?`wss:`:`ws:`,e.href}let w=Symbol(`api-gateway.remote-event.next`);var se=class{ownerCtx;connection;openStream;eventPrefix=`internal/api-gateway/remote-event/${b()}/`;unregisterGeneration;activeGeneration;constructor(e,t,n){this.ownerCtx=e,this.connection=t,this.openStream=n,this.unregisterGeneration=t.registerGenerationSource(this.runGeneration)}subscribe(e,t,n){let r=A(e).on(this.eventKey(t),n);return()=>{r()}}async dispose(){this.unregisterGeneration(),await Promise.allSettled([this.activeGeneration])}runGeneration=(e,t)=>{let n=this.pumpEvents(e,t).finally(()=>{this.activeGeneration===n&&(this.activeGeneration=void 0)});return this.activeGeneration=n,n};deliver(e){A(this.ownerCtx).parallel(this.eventKey(e.event),...e.args).catch(t=>{this.reportError(e.event,t)})}async pumpEvents(e,t){let n,r=new AbortController,i=AbortSignal.any([e,r.signal]),a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Set,s=this.openStream(`$events`,f,i),c=!1,l;try{for await(let e of s){if(n===void 0){let r=T(e);n=r.clientId,t(r.host);continue}let s=ce(e);if(s.type===`cancel`){a.get(s.eventId)?.abort(/* @__PURE__ */ Error(`client api: Remote event was cancelled by the Host`));continue}if(s.type===`emit`){this.deliver(s);continue}let c=new AbortController;a.set(s.eventId,c);let l=AbortSignal.any([i,c.signal]),u=this.answer(s,n,l).catch(e=>{l.aborted||r.abort(e)}).finally(()=>{a.delete(s.eventId),o.delete(u)});o.add(u)}}catch(e){c=!0,l=e}finally{for(let e of a.values())e.abort(/* @__PURE__ */ Error(`client api: Remote event generation ended`));await Promise.allSettled(o)}if(r.signal.aborted)throw le(r.signal.reason,`client api: Remote event result delivery failed`);if(!e.aborted)throw c?l:Error(`client api: forwarded Remote event stream ended unexpectedly`)}async answer(e,t,n){let r=this.ownerCtx.typert.contexts.getClient(`agent`),i;try{i=r?.resolve(e.agentId)}catch(t){this.reportError(e.event,t)}let a=s(i)?i:void 0;try{let r=s(i)?i.value:i,a={kind:`next`};if(r!==void 0)try{a=await this.dispatchWaterfall(r,e,n)}catch(e){if(n.aborted)return;a={kind:`rejected`,error:ee(e)}}if(n.aborted)return;let o={clientId:t,eventId:e.eventId,outcome:a.kind===`result`&&a.value===void 0?{kind:`result`}:a},c=await this.connection.rpc.call(`/api`,`$events/result`,{args:o},n);if(!c.ok)throw Error(c.error.message)}finally{a?.[Symbol.dispose]()}}async dispatchWaterfall(e,t,n){let r={...t.request,agent:e,signal:n},i=await A(e).waterfall(e,this.eventKey(t.event),r,()=>Promise.resolve(w));if(i!==w&&i!==void 0&&!c(i))throw TypeError(`Remote event listener result is not lossless JSON data`);return i===w?{kind:`next`}:{kind:`result`,value:i}}eventKey(e){return`${this.eventPrefix}${e}`}reportError(e,t){console.error(`client api: Remote event ${JSON.stringify(e)} listener threw:`,t)}};function T(e){if(!E(e)||!D(e,[`type`,`clientId`,`host`])||e.type!==`ready`||!te(e.clientId)||!E(e.host)||!D(e.host,[`home`])||typeof e.host.home!=`string`)throw TypeError(`client api: forwarded Remote event stream did not begin with ready`);return{clientId:e.clientId,host:{home:e.host.home}}}function ce(e){if(E(e)||k(),e.type===`cancel`&&D(e,[`type`,`eventId`])&&p(e.eventId))return{type:`cancel`,eventId:e.eventId};if(e.type===`emit`&&D(e,[`type`,`event`,`args`])&&O(e.event)&&Array.isArray(e.args)&&c(e.args))return{type:`emit`,event:e.event,args:e.args};if(e.type===`waterfall`&&D(e,[`type`,`event`,`eventId`,`agentId`,`request`])&&O(e.event)&&p(e.eventId)&&ne(e.agentId)&&E(e.request)&&!Object.hasOwn(e.request,`agent`)&&!Object.hasOwn(e.request,`signal`)&&c(e.request))return{type:`waterfall`,event:e.event,eventId:e.eventId,agentId:e.agentId,request:e.request};k()}function E(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function D(e,t){return Reflect.ownKeys(e).length===t.length&&t.every(t=>Object.hasOwn(e,t))}function O(e){return typeof e==`string`&&e.length>0}function k(){throw TypeError(`client api: invalid forwarded Remote event frame`)}function A(e){return e}function le(e,t){return e instanceof Error?e:Error(t,{cause:e})}var j=class{connection;options;lifetime=new AbortController;generationAbort;iterator;closing;revision=0;taken=!1;constructor(e,t){this.connection=e,this.options=t}get signal(){return this.lifetime.signal}restart(){this.lifetime.signal.aborted||(this.revision++,this.generationAbort?.abort(/* @__PURE__ */ Error(`${this.options.name} generation restarted`)))}dispose(){if(this.closing!==void 0)return this.closing;if(!this.lifetime.signal.aborted){let e=/* @__PURE__ */ Error(`${this.options.name} disposed`);this.lifetime.abort(e),this.generationAbort?.abort(e)}let e=this.iterator;if(e===void 0)return Promise.resolve();let t=P(e);return this.closing=t,t}[Symbol.asyncIterator](){if(this.taken)throw Error(`${this.options.name} already has a consumer`);this.taken=!0;let e=this.read();return this.iterator=e,e}async*read(){let e=0,t=0,n=this.revision;try{for(;!N(this.lifetime.signal);){n!==this.revision&&(n=this.revision,e=0);let r=this.revision,i=new AbortController;this.generationAbort=i;let a=AbortSignal.any([this.lifetime.signal,i.signal]),o=++t,s=!1;try{for await(let t of this.options.open(a)){if(N(this.lifetime.signal))return;if(r!==this.revision)break;yield{generation:o,value:t,signal:a,accept:()=>{this.generationAbort===i&&r===this.revision&&(s=!0,e=0)}}}if(N(this.lifetime.signal))return;if(r!==this.revision)continue;throw this.options.ended(s)}catch(t){if(N(this.lifetime.signal))return;if(r!==this.revision)continue;if(!(t instanceof x))throw M(t);if(this.options.carrierFailed?.(t),r!==this.revision)continue;e++;try{await ue(this.connection,e,a)}catch(e){if(N(this.lifetime.signal))return;if(r!==this.revision)continue;throw M(e)}}finally{this.generationAbort=void 0,i.signal.aborted||i.abort(/* @__PURE__ */ Error(`${this.options.name} generation ended`))}}}finally{this.lifetime.signal.aborted||this.lifetime.abort(/* @__PURE__ */ Error(`${this.options.name} consumer closed`)),this.generationAbort?.abort(this.lifetime.signal.reason),this.generationAbort=void 0}}};async function ue(e,t,n){n.throwIfAborted(),e.generation.getSnapshot()===void 0?await new Promise((t,r)=>{let i={finished:!1},a=e=>{i.finished||(i.finished=!0,i.dispose?.(),n.removeEventListener(`abort`,s),e===void 0?t():r(e))},o=()=>{e.generation.getSnapshot()!==void 0&&a()},s=()=>{a(Error(`Remote stream retry aborted`,{cause:n.reason}))},c=e.generation.subscribe(o);i.dispose=c,i.finished&&c(),n.addEventListener(`abort`,s,{once:!0}),n.aborted?s():o()}):await new Promise((e,r)=>{let i=setTimeout(()=>{n.removeEventListener(`abort`,a),e()},Math.min(100*2**Math.min(t-1,5),3e3)),a=()=>{clearTimeout(i),n.removeEventListener(`abort`,a),r(n.reason)};n.addEventListener(`abort`,a,{once:!0}),n.aborted&&a()})}function M(e){return a(e)??new i(`gateway/internal`,e instanceof Error?e.message:String(e),{},{cause:e})}function N(e){return e.aborted}async function P(e){try{await e.return?.()}catch{}}function F(e){return new i(`gateway/internal`,e,{})}var I=class{options;stream;initialRequest;resumeCursor;hasResumeCursor=!1;generation=0;firstCursor;lastCursor;started=!1;opened=!1;disposed=!1;done;closing;pendingNext;constructor(e,t){this.options=t,this.stream=e.$stream({name:t.name,open:e=>this.follow(this.initialRequest,e),ended:e=>e?new x(`${t.name} ended without a terminal result`):F(`${this.hasResumeCursor?`resumed `:``}${t.name} ended before its opening cursor`),...t.carrierFailed===void 0?{}:{carrierFailed:t.carrierFailed}})}get signal(){return this.stream.signal}async open(e){if(this.started)throw Error(`${this.options.name} already opened`);this.started=!0,this.initialRequest=e;let t=this.stream[Symbol.asyncIterator]();try{let e=await this.takeNext(t);if(e.done)throw F(`${this.options.name} ended before its opening cursor`);this.replaceGeneration(e.value,!1),this.opened=!0,this.done=this.consume(t)}catch(e){throw await this.stream.dispose(),e}}async prepend(e){if(!this.opened||this.disposed)throw Error(`${this.options.name} is not open`);let t=await this.readPage(e,this.currentCursor(),this.stream.signal);this.stream.signal.throwIfAborted();let n=this.options.entries(t);this.assertPage(n);let r=this.firstCursor,i=r===void 0?[...n]:n.filter(e=>this.options.compare(this.options.first(e),r)<0),a=i.at(-1);if(a!==void 0&&r!==void 0&&!this.options.follows(this.options.last(a),r))throw this.options.publish({type:`prepend`,page:t,entries:[],hasMore:!1}),F(`${this.options.name} history page is discontinuous`);let o=i[0];o!==void 0&&(this.firstCursor=this.options.first(o)),this.options.publish({type:`prepend`,page:t,entries:i,hasMore:this.options.hasMore(t)})}restart(){this.stream.restart()}dispose(){if(this.closing!==void 0)return this.closing;this.disposed=!0;let e=this.done,t=(async()=>{await this.stream.dispose(),await e})();return this.closing=t,t}async consume(e){try{for(;;){let t=await this.takeNext(e);if(t.done)return;let n=t.value;if(n.generation!==this.generation)this.replaceGeneration(n,!0);else{if(n.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);n.value.type===`notification`?this.publishNotification(n.value.notification):await this.acceptEntry(n.value.entry,n,e)}}}catch(e){this.disposed||this.options.failed(e)}}replaceGeneration(e,t){let n=this.opening(e,t);this.replaceFromOpening(n.page,n.cursor)}opening(e,t){if(e.value.type!==`opened`)throw F(`${t?`resumed `:``}${this.options.name} emitted an entry before its opening cursor`);let n=e.value.cursor;if(t&&e.value.reset!==!0&&this.lastCursor!==void 0&&this.options.compare(n,this.lastCursor)<0)throw F(`${this.options.name} resumed at a cursor behind the last applied entry`);return this.generation=e.generation,e.accept(),{cursor:n,page:e.value.page}}replaceFromOpening(e,t){this.assertPageThrough(e,t);let n=[...this.options.entries(e)];this.assertPage(n);let r=n[0];this.firstCursor=r===void 0?void 0:this.options.first(r),this.lastCursor=t,this.setResumeCursor(t),this.options.publish({type:`replace`,page:e,entries:n,hasMore:this.options.hasMore(e)})}async acceptEntry(e,t,n){let{first:r,last:i}=this.entryRange(e),a=this.lastCursor;if(!(this.options.compare(i,a)<=0)){if(this.options.compare(r,a)<=0)throw F(`${this.options.name} emitted a partially overlapping entry`);if(this.options.follows(a,r))this.firstCursor===void 0&&(this.firstCursor=r),this.lastCursor=i,this.setResumeCursor(i),this.options.publish({type:`append`,entry:e});else{let r=this.repairPageRequest(),a=await this.replaceThrough(r,i,t.generation,t.signal,n,[e],[]);a!==void 0&&this.replaceGeneration(a,!0)}}}async replaceThrough(e,t,n,r,i,a,o){let s=await this.readPageWhileFollowing(e,t,n,r,i,a,o);if(s.type===`superseded`)return s.item;let c=s.page;this.assertPageThrough(c,t);let l=this.mergeReplacement(c,a),u=this.maxCursor(t,a);if(l===void 0||this.options.compare(this.tailCursor(l),u)<0){if(s=await this.readPageWhileFollowing(this.repairPageRequest(),u,n,r,i,a,o),s.type===`superseded`)return s.item;c=s.page,this.assertPageThrough(c,u),l=this.mergeReplacement(c,a),u=this.maxCursor(t,a)}if(l===void 0||this.options.compare(this.tailCursor(l),u)<0)throw F(`${this.options.name} page did not reach its opening cursor`);let d=l[0];this.firstCursor=d===void 0?void 0:this.options.first(d),this.lastCursor=this.tailCursor(l),this.setResumeCursor(this.lastCursor),this.options.publish({type:`replace`,page:c,entries:l,hasMore:this.options.hasMore(c)});for(let e of o)this.publishNotification(e)}async readPageWhileFollowing(e,t,n,r,i,a,o){let s=this.readPage(e,t,r).then(e=>({type:`page`,value:e}),e=>({type:`page-error`,error:e}));for(;;){let e=this.nextResult(i),t=e.then(e=>({type:`next`,value:e}),e=>({type:`next-error`,error:e})),c=await Promise.race([s,t]);if(c.type===`page`)return r.throwIfAborted(),{type:`page`,page:c.value};if(c.type===`page-error`){if(!r.aborted||this.stream.signal.aborted)throw c.error;return this.awaitReplacementGeneration(n,i,e)}if(this.releaseNext(),c.type===`next-error`)throw c.error;if(c.value.done)throw r.throwIfAborted(),F(`${this.options.name} ended while reading its replacement page`);let l=c.value.value;if(l.generation!==n)return{type:`superseded`,item:l};if(l.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);l.value.type===`notification`?o.push(l.value.notification):a.push(l.value.entry)}}async awaitReplacementGeneration(e,t,n){let r=n;for(;;){let n;try{n=await r}finally{this.releaseNext()}if(n.done)throw this.stream.signal.throwIfAborted(),F(`${this.options.name} ended while replacing an aborted page generation`);let i=n.value;if(i.generation!==e)return{type:`superseded`,item:i};if(i.value.type===`opened`)throw F(`${this.options.name} emitted more than one opening cursor`);r=this.nextResult(t)}}mergeReplacement(e,t){let n=[...this.options.entries(e)];this.assertPage(n);for(let e of t)this.entryRange(e);let r=[...t].sort((e,t)=>this.options.compare(this.options.first(e),this.options.first(t))),i=this.tailCursor(n);for(let e of r){let t=this.options.first(e),r=this.options.last(e);if(!(this.options.compare(r,i)<=0)){if(this.options.compare(t,i)<=0)throw F(`${this.options.name} replacement contains a partially overlapping entry`);if(!this.options.follows(i,t))return;n.push(e),i=r}}return n}maxCursor(e,t){let n=e;for(let e of t){let t=this.options.last(e);this.options.compare(t,n)>0&&(n=t)}return n}nextResult(e){return this.pendingNext??=e.next(),this.pendingNext}async takeNext(e){let t=this.nextResult(e);try{return await t}finally{this.releaseNext()}}releaseNext(){this.pendingNext=void 0}publishNotification(e){this.options.publish({type:`notification`,notification:e})}repairPageRequest(){return this.repairRequest(this.initialRequest)}setResumeCursor(e){this.resumeCursor=e,this.hasResumeCursor=!0}currentCursor(){return this.resumeCursor}tailCursor(e){let t=e.at(-1);return t===void 0?this.options.emptyCursor:this.options.last(t)}assertPage(e){let t=e[Symbol.iterator](),n=t.next();if(n.done)return;let r=this.entryRange(n.value);for(let e of t){let t=this.entryRange(e);if(!this.options.follows(r.last,t.first))throw F(`${this.options.name} page contains discontinuous entries`);r=t}}entryRange(e){let t=this.options.first(e),n=this.options.last(e);if(this.options.compare(t,n)>0)throw F(`${this.options.name} entry has an inverted cursor range`);return{first:t,last:n}}assertPageThrough(e,t){let n=this.tailCursor(this.options.entries(e));if(this.options.compare(n,t)!==0)throw F(`${this.options.name} page did not end at its requested cursor`)}};function L(e){return new i(`gateway/internal`,e,{})}var R=class{stream;options;started=!1;disposed=!1;done;constructor(e,t){this.stream=e,this.options=t}start(){this.started||(this.started=!0,this.done=this.consume())}restart(){this.stream.restart()}async dispose(){this.disposed=!0,await this.stream.dispose(),await this.done}async consume(){let e=0,t=!1;try{for await(let n of this.stream)if(n.generation!==e&&(e=n.generation,t=!1),this.options.isSnapshot(n.value)){if(t)throw L(`${this.options.name} emitted more than one opening snapshot`);this.options.replace(n.value),t=!0,n.accept()}else{if(!t)throw L(`${this.options.name} emitted an update before its opening snapshot`);this.options.update(n.value)}}catch(e){this.disposed||this.options.failed(e)}}};let z=[`typert`,`connection`];function B(e){new V(e)}var V=class extends r.Service{ownerCtx;connection;namespaces=/* @__PURE__ */ new Map;hostFacts;streams=new ie;events;mutations=Promise.resolve();constructor(e){super(e,`remote`),this.ownerCtx=e;let t=e.get(`connection`);this.connection=t,this.events=new se(e,t,(e,t,n)=>this.openRemoteStream(e,t,n)),t.rpc.open===void 0&&this.streams.start();let n=!1,r,i=()=>{n||(t.rpc.open===void 0&&this.streams.start(),r=t.start({onConnected:()=>{this.ownerCtx.emit(`connection/reset`)},onReconnectRequested:()=>{t.rpc.open===void 0&&this.streams.reconnect()},onProbeRequested:()=>t.rpc.open===void 0&&this.streams.probe(),onStateChange:e=>{e!==`connected`&&t.rpc.open===void 0&&this.streams.disconnect()}}))},a=e.get(`loader`);a===void 0?i():a.await().then(i,()=>{}),e.effect(()=>async()=>{n=!0,r?.stop(),await this.events.dispose(),await this.streams.close()},`api-gateway.client.transport`)}$stream(e){return new j(this.connection,e)}get $host(){let e=this.connection.generation.getSnapshot()?.host.home;return(this.hostFacts===void 0||this.hostFacts.home!==e)&&(this.hostFacts={home:e,isLoopback:this.connection.isLoopback}),this.hostFacts}async $mount(e){let t=this.ctx,n=t.effect(async()=>{let n=await this.enqueue(()=>this.mountContribution(t,e));return()=>this.enqueue(n)},`api-gateway.client.$mount(${JSON.stringify(e.package)})`);return await n,async()=>{await n()}}$on(e,t){return this.events.subscribe(this.ctx,e,t)}openRemoteStream(e,t,n,r,i=`client api: ${e} has no active Connection`){let a=this.ownerCtx.get(`connection`);if(a===void 0)throw Error(i);let o=a.rpc.open?.(`/api`,e,t,n,r);return o===void 0?this.streams.open(e,t,n,r):he(o)}enqueue(e){let t=this.mutations.then(e,e);return this.mutations=t.then(()=>void 0,()=>void 0),t}async mountContribution(e,t){this.validateContribution(t);let n=e.typert.remotes.register(t),r=/* @__PURE__ */ new Map;for(let e of t.descriptors){let t=r.get(e.namespace);t===void 0?r.set(e.namespace,[e]):t.push(e)}let i=[];try{for(let[e,t]of r)i.push(await this.installNamespace(e,t))}catch(e){for(let e of i.reverse())await e();throw await n(),e}return async()=>{for(let e of i.reverse())await e();await n()}}validateContribution(e){let t=/* @__PURE__ */ new Map,n=/* @__PURE__ */ new Map,r=(e,t,n)=>{let r=e.get(t.namespace)??/* @__PURE__ */ new Set;if(r.has(t.method))throw Error(`client api: contribution repeats ${n} method ${K(t)}`);if(r.add(t.method),e.set(t.namespace,r),(this.namespaces.get(t.namespace)?.service)?.has(n,t.method)===!0)throw Error(`client api: ${n} method ${K(t)} is already mounted`)};for(let i of e.descriptors)fe(i),i.invocation.kind===`direct`&&r(t,i,`direct`),J(i)!==void 0&&r(n,i,`scoped`);let i=/* @__PURE__ */ new Set([...t.keys(),...n.keys()]);for(let e of i){let r=this.namespaces.get(e)?.service;if(r===void 0){if(e in this)throw Error(`client api: namespace ${JSON.stringify(e)} conflicts with the Remote service`);let t=G(e);if(this.ownerCtx.reflect.props[t]?.type===`accessor`||this.ownerCtx.get(t)!==void 0)throw Error(`client api: namespace ${JSON.stringify(e)} conflicts with an existing Remote namespace`)}for(let i of/* @__PURE__ */ new Set([...t.get(e)??[],...n.get(e)??[]]))r===void 0?U.assertMethodAvailable(e,i):r.assertMethodAvailable(i)}}async installNamespace(e,t){let n=this.namespaces.get(e),r;n===void 0?{namespace:n,installed:r}=await this.createNamespace(e,t):r=W(n.service,t);let i=n;return async()=>{for(let e of[...r].reverse())
2
2
  /* v8 ignore next -- Cordis effect disposers are idempotent and invoke this cleanup at most once. */
3
3
  e.token.active&&(e.token.active=!1,e.token.abort.abort(),e.scoped&&i.service.remove(`scoped`,e.descriptor.method,e.token),e.direct&&i.service.remove(`direct`,e.descriptor.method,e.token));await this.disposeNamespace(e,i)}}async createNamespace(e,t){let n,r,i=this.ownerCtx.plugin({name:G(e),apply:i=>{n=new U(i,e,(e,t,n,r)=>this.invokeMethod(e,t,n,r)),r=W(n,t)}});try{await i}catch(e){throw await i.dispose(),e}
4
4
  /* v8 ignore next 3 -- a settled namespace fiber synchronously constructs its Service and installs the group. */