dsh-mobile 0.8.0 → 0.8.2

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 (40) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/CONTRIBUTORS.md +24 -2
  3. package/README.en.md +8 -5
  4. package/README.md +10 -5
  5. package/SECURITY.md +1 -1
  6. package/apps/mobile/README.md +8 -4
  7. package/apps/mobile/README.zh-CN.md +8 -4
  8. package/apps/mobile/release.json +3 -3
  9. package/docs/CLIENT_MODULES.en.md +6 -2
  10. package/docs/CLIENT_MODULES.md +6 -2
  11. package/docs/CONNECTION_DIAGNOSTICS.en.md +50 -0
  12. package/docs/CONNECTION_DIAGNOSTICS.md +50 -0
  13. package/docs/IROH.en.md +6 -0
  14. package/docs/IROH.md +6 -0
  15. package/docs/MOBILE_PLUGIN_ADAPTATION.en.md +18 -0
  16. package/docs/MOBILE_PLUGIN_ADAPTATION.md +18 -0
  17. package/docs/MOBILE_PLUGIN_BASELINE.en.md +117 -0
  18. package/docs/MOBILE_PLUGIN_BASELINE.md +117 -0
  19. package/docs/README.md +2 -0
  20. package/docs/SKIN_COMPATIBILITY.en.md +1 -1
  21. package/docs/SKIN_COMPATIBILITY.md +1 -1
  22. package/docs/SLOW_CONNECTIONS.en.md +3 -1
  23. package/docs/SLOW_CONNECTIONS.md +3 -1
  24. package/lib/cli.js +6 -12
  25. package/lib/cli.js.map +1 -1
  26. package/lib/client.js +428 -126
  27. package/lib/client.js.map +1 -1
  28. package/lib/extension-worker-runtime.mjs +4 -8
  29. package/lib/extension-worker-runtime.mjs.map +1 -1
  30. package/lib/index.d.mts +16 -89
  31. package/lib/index.mjs +519 -253
  32. package/lib/index.mjs.map +1 -1
  33. package/lib/mobile-compat.js +2 -2
  34. package/lib/mobile-compat.js.map +1 -1
  35. package/lib/mobile-layout.js +13 -6
  36. package/lib/mobile-layout.js.map +1 -1
  37. package/package.json +10 -6
  38. package/packages/question-fixes/lib/client.js +1 -2
  39. package/packages/question-fixes/lib/index.mjs +1 -2
  40. package/packages/question-fixes/package.json +1 -1
package/lib/index.d.mts CHANGED
@@ -6,7 +6,6 @@ import { Readable } from "node:stream";
6
6
  import { Context, Service } from "@deepseek-ai/cordis";
7
7
  import "zod";
8
8
  import { WebRoute } from "@deepseek-ai/dsh-host-webserver";
9
- //#region src/storage.d.ts
10
9
  /** Persistent record containing only a digest of the long-lived device credential. */
11
10
  interface StoredDevice {
12
11
  readonly id: string;
@@ -51,8 +50,6 @@ export declare class MemoryDeviceStore implements DeviceStore {
51
50
  /** Return a defensive copy for assertions or administrative export. */
52
51
  inspect(): DeviceSnapshot;
53
52
  }
54
- //#endregion
55
- //#region src/access.d.ts
56
53
  /** Stable error categories converted to deliberately terse HTTP responses. */
57
54
  export declare class AccessError extends Error {
58
55
  readonly status: number;
@@ -216,8 +213,6 @@ export declare class AccessController {
216
213
  rateLimitKeys: number;
217
214
  };
218
215
  }
219
- //#endregion
220
- //#region src/network.d.ts
221
216
  /** A parsed IP network used to authorize directly connected clients. */
222
217
  interface ParsedCidr {
223
218
  readonly bits: 32 | 128;
@@ -262,8 +257,6 @@ export declare class RequestTrustPolicy {
262
257
  /** Return the canonical accepted Origin, otherwise undefined. */
263
258
  canonicalOrigin(header: string | undefined): string | undefined;
264
259
  }
265
- //#endregion
266
- //#region src/extension-worker-config.d.ts
267
260
  /** Operator-owned limits for opt-in local extension worker execution. */
268
261
  interface HostExecutionConfig {
269
262
  readonly mode?: 'in-process' | 'worker';
@@ -293,8 +286,6 @@ interface ResolvedHostExecutionConfig extends Required<Omit<HostExecutionConfig,
293
286
  }
294
287
  /** Resolve configuration once; reject malformed modes, ids and incoherent stream windows. */
295
288
  export declare function resolveHostExecution(raw: unknown): ResolvedHostExecutionConfig;
296
- //#endregion
297
- //#region src/config.d.ts
298
289
  /** Optional compression for exact, already authorized WebSocket paths. */
299
290
  interface WebSocketCompressionConfig {
300
291
  paths?: string[];
@@ -445,8 +436,6 @@ export declare const Config: z<PluginConfig>;
445
436
  export declare function parseControlFile(value: unknown): string;
446
437
  /** Parse configuration and reject unsafe topology, credential, and resource combinations. */
447
438
  export declare function parseGatewayConfig(raw: unknown): ResolvedGatewayConfig;
448
- //#endregion
449
- //#region src/client-module-preferences.d.ts
450
439
  /** Installed client module metadata, without upstream URLs or host paths. */
451
440
  interface ClientModuleEntry {
452
441
  readonly id: string;
@@ -462,6 +451,8 @@ interface ClientModuleEntry {
462
451
  /** Selection returned to the computer administrator or the authenticated device. */
463
452
  interface ClientModulePreferenceView {
464
453
  readonly entries: readonly ClientModuleEntry[];
454
+ /** Canonical fingerprint of this catalog. A write that carries a different one is stale. */
455
+ readonly revision: string;
465
456
  readonly excludedClientModules: readonly string[];
466
457
  readonly defaultExcludedClientModules: readonly string[];
467
458
  readonly source: 'device' | 'computer' | 'plugin';
@@ -498,8 +489,6 @@ export declare class ClientModulePreferenceStore {
498
489
  removeDevices(deviceIds: readonly string[]): Promise<void>;
499
490
  private save;
500
491
  }
501
- //#endregion
502
- //#region src/control.d.ts
503
492
  /** Versioned durable preference for the resident mobile-access runtime. */
504
493
  interface MobileAccessControlState {
505
494
  readonly version: 1;
@@ -542,14 +531,17 @@ export declare class MobileAccessGatewayController {
542
531
  isRunning(): boolean;
543
532
  /** Start or stop the runtime and persist only a successfully committed transition. */
544
533
  setRunning(running: boolean): Promise<void>;
534
+ /** Change configuration with the runtime stopped, without changing its durable enabled preference. */
535
+ reconfigure<T>(change: () => Promise<T>, restore: () => Promise<void>): Promise<{
536
+ value: T;
537
+ running: boolean;
538
+ }>;
545
539
  /** Stop the runtime after earlier transitions without changing the restart preference. */
546
540
  close(): Promise<void>;
547
541
  private enable;
548
542
  private disable;
549
543
  private enqueue;
550
544
  }
551
- //#endregion
552
- //#region src/auth-failure-log.d.ts
553
545
  /** One rejected HTTP request, with presence/count fields instead of credential values. */
554
546
  interface AuthFailureEntry {
555
547
  readonly kind: 'authorize' | 'csrf';
@@ -567,21 +559,24 @@ interface AuthFailureEntry {
567
559
  /** Earlier failures of this kind suppressed since its preceding recorded request. */
568
560
  readonly suppressed?: number;
569
561
  }
570
- //#endregion
571
- //#region src/http-failure-log.d.ts
572
562
  /** Fixed parser details safe to record without Node's raw packet, message or request headers. */
573
- type HttpParserCode = 'ERR_HTTP_REQUEST_TIMEOUT' | 'HPE_HEADER_OVERFLOW' | 'HPE_INVALID_CHUNK_SIZE' | 'HPE_INVALID_CONTENT_LENGTH' | 'HPE_INVALID_EOF_STATE' | 'HPE_INVALID_HEADER_TOKEN' | 'HPE_INVALID_TRANSFER_ENCODING' | 'HPE_UNEXPECTED_CONTENT_LENGTH' | 'other';
563
+ type HttpParserCode = 'ERR_HTTP_REQUEST_TIMEOUT' | 'HPE_HEADER_OVERFLOW' | 'HPE_INVALID_METHOD' | 'HPE_INVALID_CONSTANT' | 'HPE_INVALID_URL' | 'HPE_INVALID_VERSION' | 'HPE_LF_EXPECTED' | 'HPE_PAUSED_H2_UPGRADE' | 'HPE_INVALID_CHUNK_SIZE' | 'HPE_INVALID_CONTENT_LENGTH' | 'HPE_INVALID_EOF_STATE' | 'HPE_INVALID_HEADER_TOKEN' | 'HPE_INVALID_TRANSFER_ENCODING' | 'HPE_UNEXPECTED_CONTENT_LENGTH' | 'other';
574
564
  /** A rejected inbound HTTP message's public response and bounded diagnostic category. */
575
565
  interface HttpParserFailure {
576
566
  readonly status: 400 | 408 | 431;
577
567
  readonly code: 'bad_request' | 'request_timeout' | 'headers_too_large';
578
568
  readonly parserCode: HttpParserCode;
579
569
  }
570
+ /** Socket failures do not establish that an HTTP request was rejected. */
571
+ type HttpTransportCode = 'ECONNRESET' | 'EPIPE' | 'ETIMEDOUT' | 'ERR_STREAM_PREMATURE_CLOSE';
580
572
  /** One sampled rejection. Arbitrary paths, query strings, body data and credentials are excluded. */
581
573
  type HttpFailureEntry = ({
582
574
  readonly kind: 'parser';
583
575
  readonly status: HttpParserFailure['status'];
584
576
  readonly code: HttpParserCode;
577
+ } | {
578
+ readonly kind: 'transport';
579
+ readonly code: HttpTransportCode;
585
580
  } | {
586
581
  readonly kind: 'target';
587
582
  readonly status: 400;
@@ -594,8 +589,6 @@ type HttpFailureEntry = ({
594
589
  }) & {
595
590
  readonly suppressed?: number;
596
591
  };
597
- //#endregion
598
- //#region src/api-latency-log.d.ts
599
592
  /** One sampled API wait; `durationMs` spans the client's request to response close. */
600
593
  type ApiLatencyEntry = {
601
594
  readonly kind: 'api';
@@ -606,8 +599,6 @@ type ApiLatencyEntry = {
606
599
  } & {
607
600
  readonly suppressed?: number;
608
601
  };
609
- //#endregion
610
- //#region src/upstream-auth-log.d.ts
611
602
  /** Fixed outcomes of the Gateway's private DSH launch-token exchange. */
612
603
  type UpstreamAuthOutcome = 'accepted' | 'invalid-target' | 'unexpected-status' | 'invalid-cookie' | 'timeout' | 'transport-error';
613
604
  /** Exchange metadata only: no URL, header, Cookie, Token or raw error is retained. */
@@ -621,8 +612,6 @@ interface UpstreamAuthEntry {
621
612
  /** Earlier exchanges with the same success/failure category omitted by sampling. */
622
613
  readonly suppressed?: number;
623
614
  }
624
- //#endregion
625
- //#region src/http-security.d.ts
626
615
  export declare const DEVICE_COOKIE = "dsh_ma_device";
627
616
  export declare const SESSION_COOKIE = "dsh_ma_session";
628
617
  export declare const CSRF_COOKIE = "dsh_ma_csrf";
@@ -636,8 +625,6 @@ declare class HttpError extends Error {
636
625
  readonly code: string;
637
626
  constructor(status: number, code: string);
638
627
  }
639
- //#endregion
640
- //#region src/websocket-paths.d.ts
641
628
  /** Cap the admin-approved extra WebSocket upgrade paths (exact pathnames). */
642
629
  export declare const MAX_EXTRA_WEBSOCKET_PATHS = 16;
643
630
  export declare const MAX_WEBSOCKET_PATH_LENGTH = 256;
@@ -681,8 +668,6 @@ export declare class WebSocketPathStore {
681
668
  /** Replace the whole list after validating; persists atomically. */
682
669
  replace(paths: readonly string[]): Promise<string[]>;
683
670
  }
684
- //#endregion
685
- //#region src/extension-worker-protocol.d.ts
686
671
  /** Metadata for one action, crossing the boundary without its functions. */
687
672
  interface WorkerActionMetadata {
688
673
  readonly name: string;
@@ -695,8 +680,6 @@ interface WorkerRouteMetadata {
695
680
  readonly kind?: 'exact' | 'prefix';
696
681
  readonly timeoutMs?: number;
697
682
  }
698
- //#endregion
699
- //#region src/extension-worker.d.ts
700
683
  /** JSON bytes serialized and size-checked inside the worker. */
701
684
  declare class PreparedJsonResult {
702
685
  readonly bytes: Buffer;
@@ -792,8 +775,6 @@ declare class ExtensionWorkerHost {
792
775
  private openStream;
793
776
  private cancelStream;
794
777
  }
795
- //#endregion
796
- //#region src/extension-limits.d.ts
797
778
  /** Maximum sizes enforced when reading local extension files. */
798
779
  export declare const EXTENSION_LIMITS: Readonly<{
799
780
  manifest: number;
@@ -804,8 +785,6 @@ export declare const EXTENSION_LIMITS: Readonly<{
804
785
  assetBytes: number;
805
786
  assetDepth: 8;
806
787
  }>;
807
- //#endregion
808
- //#region src/extensions.d.ts
809
788
  /** A controlled business failure returned by an extension action or route. */
810
789
  export declare class MobileExtensionError extends Error {
811
790
  readonly code: string;
@@ -1011,8 +990,6 @@ export declare class MobileAccessService extends Service {
1011
990
  }
1012
991
  /** Construct the service in a Cordis plugin without importing DSH internals. */
1013
992
  export declare function createMobileAccessService(ctx: Context): MobileAccessService;
1014
- //#endregion
1015
- //#region src/mobile-push/contracts.d.ts
1016
993
  type PushCategory = 'question' | 'plan' | 'approval' | 'response' | 'goal' | 'failure' | 'test';
1017
994
  type PushPreferences = Readonly<Record<Exclude<PushCategory, 'test'>, boolean>>;
1018
995
  type PushLocale = 'en' | 'zh-CN' | 'it';
@@ -1069,8 +1046,6 @@ interface PushConfig {
1069
1046
  readonly status: 'disabled' | 'enabled' | 'suspended' | 'repair-required';
1070
1047
  readonly preferences: PushPreferences;
1071
1048
  }
1072
- //#endregion
1073
- //#region src/mobile-push/gateway.d.ts
1074
1049
  /** Trusted per-Gateway binding; authorization is freshly loaded from durable device storage. */
1075
1050
  interface PushGatewayOriginBinding {
1076
1051
  readonly scopeId: string;
@@ -1096,12 +1071,10 @@ interface PushGatewayService {
1096
1071
  test(owner: PushOwner, installationId: string): Promise<void>;
1097
1072
  resolve(owner: PushOwner, reference: string): Promise<PushTarget | undefined>;
1098
1073
  }
1099
- //#endregion
1100
- //#region src/gateway.d.ts
1101
1074
  /** A graph-selection conflict with a bounded diagnostic safe for authenticated callers. */
1102
1075
  export declare class ClientModuleConflictError extends HttpError {
1103
1076
  readonly detail: string;
1104
- constructor(detail: string);
1077
+ constructor(detail: string, code?: string);
1105
1078
  }
1106
1079
  /** Rewrite the dedicated mobile graph; exclusions are opt-in and leave stock DSH unchanged. */
1107
1080
  export declare function rewriteMobileIndex(html: string, excludedClientModules?: readonly string[]): string;
@@ -1259,9 +1232,10 @@ export declare class MobileAccessGateway {
1259
1232
  * @param excluded - Untrusted module IDs to validate against the current boot graph.
1260
1233
  * @param deviceId - Authenticated device identity; omitted for computer defaults.
1261
1234
  * @param callerSignal - Cancels fetching and validation, not an atomic write already started.
1235
+ * @param revision - Catalog fingerprint the selection was computed against; a mismatch is rejected.
1262
1236
  * @returns The catalog and saved selection without reloading clients.
1263
1237
  */
1264
- configureClientModules(excluded: unknown, deviceId?: string, callerSignal?: AbortSignal): Promise<ClientModulePreferenceView>;
1238
+ configureClientModules(excluded: unknown, deviceId?: string, callerSignal?: AbortSignal, revision?: string): Promise<ClientModulePreferenceView>;
1265
1239
  /** Reset one override without reloading connected clients.
1266
1240
  * @param deviceId - Authenticated device identity; omitted to reset computer defaults.
1267
1241
  * @param callerSignal - Cancels fetching and validation, not an atomic write already started.
@@ -1376,8 +1350,6 @@ export declare class MobileAccessGateway {
1376
1350
  readonly failed: number;
1377
1351
  };
1378
1352
  }
1379
- //#endregion
1380
- //#region src/frp-component.d.ts
1381
1353
  interface FrpArtifact {
1382
1354
  readonly platform: NodeJS.Platform;
1383
1355
  readonly arch: string;
@@ -1436,8 +1408,6 @@ export declare class FrpComponentManager {
1436
1408
  purge(): Promise<FrpComponentStatus>;
1437
1409
  private enqueue;
1438
1410
  }
1439
- //#endregion
1440
- //#region src/cpolar-component.d.ts
1441
1411
  /** Pinned cpolar components fetched only after an explicit user action. */
1442
1412
  interface CpolarArtifact {
1443
1413
  readonly version: string;
@@ -1515,8 +1485,6 @@ export declare class CpolarComponentManager {
1515
1485
  purge(): Promise<CpolarComponentStatus>;
1516
1486
  private enqueue;
1517
1487
  }
1518
- //#endregion
1519
- //#region src/frp-template.d.ts
1520
1488
  /** Loopback-only HTTP vhost port used between Caddy and frps. */
1521
1489
  export declare const FRP_VHOST_HTTP_PORT = 7080;
1522
1490
  /** Caddy snippet owned entirely by DSH Mobile; the main Caddyfile only imports it. */
@@ -1562,8 +1530,6 @@ export declare function createCaddySite(publicHost: string, options?: CaddySiteO
1562
1530
  * mode publishes a raw TCP proxy instead of an HTTP vhost.
1563
1531
  */
1564
1532
  export declare function createRestrictedFrpServerTemplate(serverPort: number, token: string, publicOrigin: string, options?: CaddySiteOptions): string;
1565
- //#endregion
1566
- //#region src/frp-config.d.ts
1567
1533
  /** How the restricted FRP channel is provisioned on the VPS. */
1568
1534
  type FrpMode = 'deploy' | 'attach';
1569
1535
  /** Public entry port used by the self-signed TCP passthrough (never 443 by requirement). */
@@ -1734,8 +1700,6 @@ export declare class FrpConfigStore {
1734
1700
  /** Remove only configuration files owned by the FRP provider. */
1735
1701
  purge(): Promise<FrpConfigurationStatus>;
1736
1702
  }
1737
- //#endregion
1738
- //#region src/frp-attach.d.ts
1739
1703
  /** Default proof path used to confirm the public entry answered from this computer. */
1740
1704
  export declare const FRP_ATTACH_DISCOVERY_PATH = "/mobile-access/discovery";
1741
1705
  /** Declaration printed above the VPS half of an attach template. */
@@ -1810,8 +1774,6 @@ export declare function frpAttachVpsParts(settings: FrpSettings, options?: FrpAt
1810
1774
  export declare function createFrpAttachTemplateParts(settings: FrpSettings, options?: FrpAttachOptions): FrpAttachTemplate;
1811
1775
  /** Combined attach artefact, ready for the clipboard. */
1812
1776
  export declare function createFrpAttachTemplate(settings: FrpSettings, options?: FrpAttachOptions): string;
1813
- //#endregion
1814
- //#region src/frp-attach-plan.d.ts
1815
1777
  /** Stable step identifiers; the panel maps each one to a translated title. */
1816
1778
  type FrpAttachStepId = 'write-snippet' | 'add-import' | 'issue-ip-cert' | 'enable-cert-timer' | 'verify-https' | 'open-public-port' | 'verify-frps' | 'verify-entry';
1817
1779
  /** One actionable VPS-side step; `title` is a message key, `label` the copied text. */
@@ -1849,8 +1811,6 @@ interface FrpAttachPlan {
1849
1811
  * configuration is written by the ordinary provider lifecycle.
1850
1812
  */
1851
1813
  export declare function createFrpAttachPlan(settings: FrpSettings, options?: FrpAttachOptions): FrpAttachPlan;
1852
- //#endregion
1853
- //#region src/cert-renewal.d.ts
1854
1814
  /** Days left below which the entry certificate is reported as expiring. */
1855
1815
  export declare const CERT_EXPIRING_DAYS = 2;
1856
1816
  /** Read-only lifetime verdict for one certificate; never mutates or renews anything. */
@@ -1880,8 +1840,6 @@ export declare function readCertificateRenewal(file: string, now?: number): Prom
1880
1840
  * leaf is the expected answer for the passthrough entry.
1881
1841
  */
1882
1842
  export declare function probeOriginCertificate(host: string, port: number, timeoutMs?: number): Promise<CertRenewalStatus>;
1883
- //#endregion
1884
- //#region src/frp-ingress.d.ts
1885
1843
  /** Private files owned by the self-signed FRP ingress. */
1886
1844
  interface FrpIngressPaths {
1887
1845
  readonly directory: string;
@@ -1935,8 +1893,6 @@ export declare function ensureFrpIngressCertificate(settings: FrpSettings, state
1935
1893
  * and the token is never read.
1936
1894
  */
1937
1895
  export declare function frpIngressSelfCheck(settings: FrpSettings, stateFile: string, ownedRoot?: string): Promise<FrpIngressSelfCheck>;
1938
- //#endregion
1939
- //#region src/managed-setup.d.ts
1940
1896
  /** One host a server leaf must be valid for: an IP literal, a DNS name, or both. */
1941
1897
  interface ServerCertificateTarget {
1942
1898
  readonly commonName: string;
@@ -1962,8 +1918,6 @@ interface ServerCertificateAuthority {
1962
1918
  * hosts; the Android client accepts either through its pinned CA.
1963
1919
  */
1964
1920
  export declare function issueServerCertificate(authority: ServerCertificateAuthority, target: ServerCertificateTarget, output: ServerCertificateFiles, lifetimeDays?: number): Promise<void>;
1965
- //#endregion
1966
- //#region src/remote.d.ts
1967
1921
  /** Remote transports supported by the desktop plugin and Android client. */
1968
1922
  type RemoteProvider = 'tailscale' | 'cpolar' | 'cloudflared' | 'frp' | 'origin' | 'iroh';
1969
1923
  /** Common safe status returned by every remote provider controller. */
@@ -2009,8 +1963,6 @@ export declare class JsonRemoteProviderStore {
2009
1963
  }
2010
1964
  /** Resolve the first-run provider without letting environment values bypass validation. */
2011
1965
  export declare function configuredRemoteProvider(environment: NodeJS.ProcessEnv): RemoteProvider;
2012
- //#endregion
2013
- //#region src/frp.d.ts
2014
1966
  /** Product-facing states for the restricted self-hosted FRP transport. */
2015
1967
  type FrpState = 'off' | 'unavailable' | 'starting' | 'connecting' | 'ready' | 'error';
2016
1968
  /** Safe FRP state returned only through the loopback DSH control route. */
@@ -2126,8 +2078,6 @@ export declare class FrpController implements RemoteProviderController {
2126
2078
  private stop;
2127
2079
  private stopProcessAndGateway;
2128
2080
  }
2129
- //#endregion
2130
- //#region src/origin-proxy-config.d.ts
2131
2081
  export declare const DEFAULT_ORIGIN_LISTEN_PORT = 3444;
2132
2082
  /** A private HTTP listener behind a user-managed HTTPS reverse proxy. */
2133
2083
  interface OriginSettings {
@@ -2171,8 +2121,6 @@ export declare class OriginConfigStore {
2171
2121
  configure(value: unknown): Promise<OriginConfigurationStatus>;
2172
2122
  purge(): Promise<OriginConfigurationStatus>;
2173
2123
  }
2174
- //#endregion
2175
- //#region src/origin-proxy.d.ts
2176
2124
  type OriginState = 'off' | 'unavailable' | 'starting' | 'ready' | 'error';
2177
2125
  /** Ready means the private listener is ready, not that public ingress was tested. */
2178
2126
  interface OriginStatus {
@@ -2213,8 +2161,6 @@ export declare class OriginController implements RemoteProviderController {
2213
2161
  private start;
2214
2162
  private stop;
2215
2163
  }
2216
- //#endregion
2217
- //#region src/cloudflared-component.d.ts
2218
2164
  /**
2219
2165
  * Pinned cloudflared components fetched only after an explicit user action.
2220
2166
  *
@@ -2305,8 +2251,6 @@ export declare class CloudflaredComponentManager {
2305
2251
  purge(): Promise<CloudflaredComponentStatus>;
2306
2252
  private enqueue;
2307
2253
  }
2308
- //#endregion
2309
- //#region src/cloudflared-tunnel.d.ts
2310
2254
  /** Which tunnel flavour the cloudflared provider runs. */
2311
2255
  type CloudflaredTunnelMode = 'quick' | 'named';
2312
2256
  /**
@@ -2382,8 +2326,6 @@ export declare class CloudflaredTunnelStore {
2382
2326
  /** Forget a named tunnel and its connector token. */
2383
2327
  purge(): Promise<CloudflaredTunnelStatus>;
2384
2328
  }
2385
- //#endregion
2386
- //#region src/cloudflared.d.ts
2387
2329
  /** Product-facing states for the optional cloudflared remote transport. */
2388
2330
  type CloudflaredState = 'off' | 'unavailable' | 'starting' | 'connecting' | 'ready' | 'error';
2389
2331
  /** Safe cloudflared state returned only through the loopback DSH control route. */
@@ -2489,8 +2431,6 @@ export declare class CloudflaredController implements RemoteProviderController {
2489
2431
  private stop;
2490
2432
  private stopProcessAndGateway;
2491
2433
  }
2492
- //#endregion
2493
- //#region src/iroh-component.d.ts
2494
2434
  export declare const IROH_VERSION = "0.1.0-alpha.1";
2495
2435
  /** A size- and content-pinned sidecar release asset with independent wire and installed-byte checks. */
2496
2436
  interface IrohArtifact {
@@ -2578,8 +2518,6 @@ export declare class IrohComponentManager {
2578
2518
  purge(): Promise<IrohComponentStatus>;
2579
2519
  private refresh;
2580
2520
  }
2581
- //#endregion
2582
- //#region src/iroh-pairing.d.ts
2583
2521
  export declare const PAIRING_DESCRIPTOR_VERSION = 1;
2584
2522
  export declare const PAIRING_DESCRIPTOR_TYPE = "dsh-mobile-iroh-pairing";
2585
2523
  export declare const MAX_PAIRING_DESCRIPTOR_BYTES = 2200;
@@ -2620,8 +2558,6 @@ export declare function decodePairingDescriptor(encoded: string, options?: {
2620
2558
  }): IrohPairingDescriptor;
2621
2559
  /** Phone-side listener port advertised in QR codes minted by this computer. */
2622
2560
  export declare const PAIRING_DESCRIPTOR_LOCAL_PORT = 25443;
2623
- //#endregion
2624
- //#region src/iroh.d.ts
2625
2561
  /** Product-facing states for the experimental iroh transport. */
2626
2562
  type IrohState = 'off' | 'unavailable' | 'starting' | 'connecting' | 'ready' | 'error';
2627
2563
  /** Safe iroh state returned only through the loopback DSH control route. */
@@ -2700,8 +2636,6 @@ export declare class IrohController implements RemoteProviderController {
2700
2636
  private waitForReady;
2701
2637
  private waitForPairingCode;
2702
2638
  }
2703
- //#endregion
2704
- //#region src/iroh-origin.d.ts
2705
2639
  /** Identity-derived browser origins for the raw TLS-over-iroh carrier.
2706
2640
  *
2707
2641
  * Ported from the independent `dsh-mobile-iroh` companion's origin contract.
@@ -2715,8 +2649,6 @@ export declare function irohHostname(endpointId: string): string;
2715
2649
  export declare function irohOrigin(endpointId: string, localPort?: number): string;
2716
2650
  /** Reject an Origin that does not belong to the selected cryptographic host identity. */
2717
2651
  export declare function validateIrohOrigin(value: unknown, endpointId: string, localPort?: number): string;
2718
- //#endregion
2719
- //#region src/iroh-tls.d.ts
2720
2652
  /** Leaf lifetime and renewal headroom, matching the companion's native policy. */
2721
2653
  export declare const IROH_LEAF_VALIDITY_DAYS = 90;
2722
2654
  export declare const IROH_LEAF_RENEW_BEFORE_DAYS = 30;
@@ -2757,8 +2689,6 @@ export declare function ensureIrohTls(endpointId: string, stateFile: string, own
2757
2689
  * the public path is the iroh transport, never a direct bind.
2758
2690
  */
2759
2691
  export declare function irohGatewayConfig(template: ResolvedGatewayConfig, endpointId: string, stateFile: string, tls: Pick<FrpIngressCertificate, 'paths' | 'caFingerprint'>, listenPort?: number): ResolvedGatewayConfig;
2760
- //#endregion
2761
- //#region src/task-events.d.ts
2762
2692
  /**
2763
2693
  * Host-side task-completion fan-out for phone notifications.
2764
2694
  *
@@ -2820,8 +2750,6 @@ export declare class TaskEventHub {
2820
2750
  /** Visible for tests. */
2821
2751
  get size(): number;
2822
2752
  }
2823
- //#endregion
2824
- //#region src/plugin.d.ts
2825
2753
  declare module '@deepseek-ai/dsh-llm' {
2826
2754
  interface MessageSourceMap {
2827
2755
  'plugin:dsh-mobile': {
@@ -2839,6 +2767,5 @@ export declare const inject: string[];
2839
2767
  export declare function originGatewayConfig(template: ResolvedGatewayConfig, settings: OriginSettings, stateFile: string, instanceId: string, listenPort?: number, legacyInstanceId?: string): ResolvedGatewayConfig;
2840
2768
  /** Mount the resident control route and its optional authenticated LAN gateway. */
2841
2769
  export declare function apply(ctx: Context, config: PluginConfig): Promise<void>;
2842
- //#endregion
2843
2770
  export { type AccessControllerOptions, type AuthoritySpec, type BlockedUpgradePathEntry, type CaddySiteOptions, type CertRenewalStatus, type ClientModuleEntry, type ClientModulePreferenceSelection, type ClientModulePreferenceView, type CloudflaredComponentStatus, type CloudflaredControllerOptions, type CloudflaredState, type CloudflaredStatus, type CloudflaredTunnelMode, type CloudflaredTunnelSettings, type CloudflaredTunnelStatus, FRP_VHOST_HTTP_PORT as DEFAULT_VHOST_HTTP_PORT, type DeviceProbeResult, type DeviceSnapshot, type DeviceStore, type DeviceSummary, type DisabledTlsConfig, type FrpAttachOptions, type FrpAttachPlan, type FrpAttachPlanLocal, type FrpAttachPlanStep, type FrpAttachStepId, type FrpAttachTemplate, type FrpAttachVpsParts, type FrpComponentStatus, type FrpConfigurationStatus, type FrpControllerOptions, type FrpEntryTls, type FrpIngressCertificate, type FrpIngressPaths, type FrpIngressSelfCheck, type FrpSettings, type FrpState, type FrpStatus, type HostExecutionConfig, type IrohArtifact, type IrohComponentManagerOptions, type IrohComponentStatus, type IrohControllerOptions, type IrohPairingDescriptor, type IrohState, type IrohStatus, type IrohTlsCertificate, type IrohTlsPaths, type LocalExtensionManifest, type MobileAccessControlState, type MobileAccessControlStore, type MobileAccessService as MobileAccessRegistry, type MobileAccessRuntime, type MobileActionContext, type MobileExtensionClientEntry, type MobileExtensionDefinition, type MobileExtensionManifest, type MobileExtensionStatus, type MobileHostAction, type MobileHostRoute, type MobileRouteRequest, type MobileRouteResponse, type MobileWorkerHostApi, type OriginConfigurationStatus, type OriginControllerOptions, type OriginSettings, type OriginState, type OriginStatus, type PairingDescriptorField, type PairingResult, type ParsedCidr, type PluginConfig, type ProvidedTlsConfig, type RemoteProvider, type RemoteProviderController, type RemoteProviderState, type RemoteProviderStatus, type RenewalResult, type ResolvedGatewayConfig, type ResolvedHostExecutionConfig, type ServerCertificateAuthority, type ServerCertificateFiles, type ServerCertificateTarget, type SessionAuthorization, type SessionEndReason, type StoredDevice, type TaskCompletionEvent, type TaskEventContext, type TaskEventSession, type TaskEventSink, type TaskEventWatcherOptions, type TaskTurnEvent, type TlsConfig };
2844
2771
  //# sourceMappingURL=index.d.mts.map