@artenx/dshb 0.1.18 → 0.1.19

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 (101) hide show
  1. package/lib/client.js +2157 -567
  2. package/lib/client.js.map +1 -1
  3. package/lib/core/index.js +72 -4
  4. package/lib/core/index.js.map +1 -1
  5. package/lib/core/node-registry.d.ts +2 -108
  6. package/lib/core/node-registry.js +43 -2
  7. package/lib/core/node-registry.js.map +1 -1
  8. package/lib/core/routes.d.ts +4 -3
  9. package/lib/core/routes.js +67 -23
  10. package/lib/core/routes.js.map +1 -1
  11. package/lib/core/sync/coordinator.d.ts +48 -0
  12. package/lib/core/sync/coordinator.js +247 -0
  13. package/lib/core/sync/coordinator.js.map +1 -0
  14. package/lib/core/sync/host-key.d.ts +2 -0
  15. package/lib/core/sync/host-key.js +71 -0
  16. package/lib/core/sync/host-key.js.map +1 -0
  17. package/lib/core/sync/internal-routes.d.ts +9 -0
  18. package/lib/core/sync/internal-routes.js +236 -0
  19. package/lib/core/sync/internal-routes.js.map +1 -0
  20. package/lib/core/sync/model.d.ts +2 -0
  21. package/lib/core/sync/model.js +106 -0
  22. package/lib/core/sync/model.js.map +1 -0
  23. package/lib/core/sync/node-sync.d.ts +2 -0
  24. package/lib/core/sync/node-sync.js +660 -0
  25. package/lib/core/sync/node-sync.js.map +1 -0
  26. package/lib/core/sync/offline-archive.d.ts +55 -0
  27. package/lib/core/sync/offline-archive.js +673 -0
  28. package/lib/core/sync/offline-archive.js.map +1 -0
  29. package/lib/core/sync/offline-journal.d.ts +22 -0
  30. package/lib/core/sync/offline-journal.js +74 -0
  31. package/lib/core/sync/offline-journal.js.map +1 -0
  32. package/lib/core/sync/offline-routes.d.ts +7 -0
  33. package/lib/core/sync/offline-routes.js +192 -0
  34. package/lib/core/sync/offline-routes.js.map +1 -0
  35. package/lib/core/sync/peer-manager.d.ts +56 -0
  36. package/lib/core/sync/peer-manager.js +258 -0
  37. package/lib/core/sync/peer-manager.js.map +1 -0
  38. package/lib/core/sync/protocol.d.ts +2 -0
  39. package/lib/core/sync/protocol.js +124 -0
  40. package/lib/core/sync/protocol.js.map +1 -0
  41. package/lib/core/sync/remote-helper.d.ts +5 -0
  42. package/lib/core/sync/remote-helper.js +160 -0
  43. package/lib/core/sync/remote-helper.js.map +1 -0
  44. package/lib/core/sync/revision.d.ts +2 -0
  45. package/lib/core/sync/revision.js +77 -0
  46. package/lib/core/sync/revision.js.map +1 -0
  47. package/lib/core/sync/routes.d.ts +9 -0
  48. package/lib/core/sync/routes.js +339 -0
  49. package/lib/core/sync/routes.js.map +1 -0
  50. package/lib/core/sync/scheduler.d.ts +14 -0
  51. package/lib/core/sync/scheduler.js +81 -0
  52. package/lib/core/sync/scheduler.js.map +1 -0
  53. package/lib/core/sync/session-journal.d.ts +2 -0
  54. package/lib/core/sync/session-journal.js +191 -0
  55. package/lib/core/sync/session-journal.js.map +1 -0
  56. package/lib/core/sync/session-routes.d.ts +7 -0
  57. package/lib/core/sync/session-routes.js +67 -0
  58. package/lib/core/sync/session-routes.js.map +1 -0
  59. package/lib/core/sync/session-sync.d.ts +2 -0
  60. package/lib/core/sync/session-sync.js +2 -0
  61. package/lib/core/sync/ssh-transport.d.ts +2 -0
  62. package/lib/core/sync/ssh-transport.js +408 -0
  63. package/lib/core/sync/ssh-transport.js.map +1 -0
  64. package/lib/core/sync/stores.d.ts +3 -0
  65. package/lib/core/sync/stores.js +385 -0
  66. package/lib/core/sync/stores.js.map +1 -0
  67. package/lib/core/test.d.ts +1 -1
  68. package/lib/core/workspace-bindings.d.ts +2 -28
  69. package/lib/core/workspace-bindings.js +14 -14
  70. package/lib/core/workspace-bindings.js.map +1 -1
  71. package/lib/core/workspace-instruction-context.d.ts +3 -2260
  72. package/lib/core/workspace-instruction-context.js +104 -2
  73. package/lib/core/workspace-instruction-context.js.map +1 -0
  74. package/lib/core/workspace-instruction-routes.d.ts +1 -1
  75. package/lib/core/workspace-instructions.d.ts +2 -68
  76. package/lib/core/workspace-instructions.js +13 -0
  77. package/lib/core/workspace-instructions.js.map +1 -1
  78. package/lib/core/workspaces.d.ts +4 -3
  79. package/lib/core/workspaces.js +17 -1
  80. package/lib/core/workspaces.js.map +1 -1
  81. package/lib/host-key-C5afhAUd.d.ts +30 -0
  82. package/lib/index-VF8bcBeX.d.ts +2293 -0
  83. package/lib/{workspace-instruction-context-DytAmaPY.js → lib-gdtU_WKT.js} +159 -102
  84. package/lib/lib-gdtU_WKT.js.map +1 -0
  85. package/lib/model-BP7Gw1yk.d.ts +104 -0
  86. package/lib/node-registry-BTnnM5-k.d.ts +112 -0
  87. package/lib/node-sync-3Z9QLz2n.d.ts +89 -0
  88. package/lib/protocol-CV7LGE44.d.ts +35 -0
  89. package/lib/revision-C9sOlDZ6.d.ts +25 -0
  90. package/lib/router/router-fs.d.ts +12 -3
  91. package/lib/router/router-fs.js.map +1 -1
  92. package/lib/session-journal-pgPqcWn9.d.ts +40 -0
  93. package/lib/session-sync-EdfwUON5.js +2177 -0
  94. package/lib/session-sync-EdfwUON5.js.map +1 -0
  95. package/lib/session-sync-g6qKZzjV.d.ts +1252 -0
  96. package/lib/ssh-transport-BcIiLxsX.d.ts +55 -0
  97. package/lib/stores-CKyEt0yk.d.ts +31 -0
  98. package/lib/workspace-bindings-CsB0TIJB.d.ts +28 -0
  99. package/lib/workspace-instructions-DirYYiku.d.ts +69 -0
  100. package/package.json +20 -1
  101. package/lib/workspace-instruction-context-DytAmaPY.js.map +0 -1
@@ -0,0 +1,104 @@
1
+ import { r as SyncRevision } from "./revision-C9sOlDZ6.js";
2
+ //#region src/core/sync/model.d.ts
3
+ type SyncDirection = 'pull' | 'bidirectional';
4
+ type SyncSchedule = 'manual' | 'every-5m';
5
+ type SyncEntityKind = 'node' | 'session';
6
+ type SyncImportMethod = 'peer' | 'offline';
7
+ interface SyncPeer {
8
+ id: string;
9
+ name: string;
10
+ host: string;
11
+ port: number;
12
+ username: string;
13
+ authKind: 'password' | 'key';
14
+ remoteDshHome?: string;
15
+ remoteProfile?: string;
16
+ remoteWebPort?: number;
17
+ direction: SyncDirection;
18
+ schedule: SyncSchedule;
19
+ syncSessions: boolean;
20
+ enabled: boolean;
21
+ hostKeyFingerprint?: string;
22
+ }
23
+ type SyncPeerDraft = Omit<SyncPeer, 'id' | 'hostKeyFingerprint'>;
24
+ interface SyncOrigin {
25
+ originInstanceId: string;
26
+ originEntityId: string;
27
+ }
28
+ interface SyncProvenance extends SyncOrigin {
29
+ localEntityId: string;
30
+ importedVia?: SyncImportMethod;
31
+ sourceName?: string;
32
+ }
33
+ interface SyncRecordMetadata extends SyncProvenance {
34
+ kind: SyncEntityKind;
35
+ revision: SyncRevision;
36
+ contentDigest: string;
37
+ stateDigest?: string;
38
+ workspaceOrigin?: SyncOrigin;
39
+ deleted?: boolean;
40
+ pendingRemoval?: boolean;
41
+ credentialsRequired?: boolean;
42
+ }
43
+ interface SyncPeerProgress {
44
+ lastRunAt?: string;
45
+ lastRunStatus?: 'running' | 'succeeded' | 'failed';
46
+ lastSuccessAt?: string;
47
+ lastManifestDigest?: string;
48
+ watermark?: string;
49
+ lastErrorCode?: string;
50
+ lastErrorMessage?: string;
51
+ lastResult?: {
52
+ imported: number;
53
+ exported: number;
54
+ skipped: number;
55
+ pendingRemoval: number;
56
+ importedSessions: number;
57
+ exportedSessions: number;
58
+ skippedSessions: number;
59
+ };
60
+ }
61
+ interface SyncWorkspaceMapping {
62
+ originInstanceId: string;
63
+ originWorkspaceId: string;
64
+ localWorkspaceId: string;
65
+ localPath: string;
66
+ localNodeId: string;
67
+ remotePath: string;
68
+ title: string;
69
+ revision: SyncRevision;
70
+ contentDigest: string;
71
+ }
72
+ interface SyncSessionArchive {
73
+ branchId: string;
74
+ originInstanceId: string;
75
+ originSessionId: string;
76
+ localSessionId: string;
77
+ revision: SyncRevision;
78
+ contentDigest: string;
79
+ stateDigest: string;
80
+ workspacePosition: number;
81
+ workspaceId?: string;
82
+ workspaceOrigin?: SyncOrigin;
83
+ archivedAt: string;
84
+ }
85
+ interface SyncState {
86
+ version: 1;
87
+ clock: {
88
+ physicalTimeMs: number;
89
+ logicalCounter: number;
90
+ };
91
+ peers: Record<string, SyncPeerProgress>;
92
+ records: Record<string, SyncRecordMetadata>;
93
+ workspaces: Record<string, SyncWorkspaceMapping>;
94
+ archives: Record<string, SyncSessionArchive>;
95
+ }
96
+ declare function parseSyncPeer(value: unknown): SyncPeer;
97
+ declare function parseSyncPeerDraft(value: unknown): SyncPeerDraft;
98
+ declare function syncRecordKey(kind: SyncEntityKind, origin: SyncOrigin): string;
99
+ declare function syncWorkspaceKey(originInstanceId: string, originWorkspaceId: string, remotePath: string): string;
100
+ declare function isRecord(value: unknown): value is Record<string, unknown>;
101
+ declare function isNonNegativeSafeInteger(value: unknown): value is number;
102
+ //#endregion
103
+ export { parseSyncPeerDraft as _, SyncPeer as a, SyncProvenance as c, SyncSessionArchive as d, SyncState as f, parseSyncPeer as g, isRecord as h, SyncOrigin as i, SyncRecordMetadata as l, isNonNegativeSafeInteger as m, SyncEntityKind as n, SyncPeerDraft as o, SyncWorkspaceMapping as p, SyncImportMethod as r, SyncPeerProgress as s, SyncDirection as t, SyncSchedule as u, syncRecordKey as v, syncWorkspaceKey as y };
104
+ //# sourceMappingURL=model-BP7Gw1yk.d.ts.map
@@ -0,0 +1,112 @@
1
+ import { CredentialKey } from "@deepseek-ai/dsh-credentials";
2
+ import { Context } from "@deepseek-ai/cordis";
3
+ //#region src/core/node-registry.d.ts
4
+ type NodeType = 'local-host' | 'local-docker' | 'remote-ssh' | 'remote-docker';
5
+ interface NodeSshAuth {
6
+ kind: 'password' | 'key' | 'agent';
7
+ keyPath?: string;
8
+ }
9
+ interface NodeJumpHop {
10
+ host: string;
11
+ port?: number;
12
+ username?: string;
13
+ keyPath?: string;
14
+ }
15
+ interface NodeSsh {
16
+ host: string;
17
+ port: number;
18
+ username: string;
19
+ auth: NodeSshAuth;
20
+ jump?: NodeJumpHop[];
21
+ hostKeyFingerprint?: string;
22
+ }
23
+ interface NodeDocker {
24
+ mode: 'existing' | 'managed';
25
+ containerId?: string;
26
+ image?: string;
27
+ resources?: {
28
+ cpus?: number;
29
+ memoryMB?: number;
30
+ };
31
+ }
32
+ interface NodeProfile {
33
+ id: string;
34
+ name: string;
35
+ type: NodeType;
36
+ ssh?: NodeSsh;
37
+ docker?: NodeDocker;
38
+ createdAt: string;
39
+ updatedAt: string;
40
+ }
41
+ interface NodeSecrets {
42
+ password?: string;
43
+ privateKey?: string;
44
+ passphrase?: string;
45
+ }
46
+ interface NodeStatus {
47
+ reachable?: boolean;
48
+ lastCheckedAt?: string;
49
+ error?: string;
50
+ }
51
+ interface NodeTestReport {
52
+ ok: boolean;
53
+ reachable?: boolean;
54
+ error?: string;
55
+ category?: string;
56
+ }
57
+ interface NodeCreateInput {
58
+ name: string;
59
+ type: NodeType;
60
+ ssh?: Omit<NodeSsh, 'hostKeyFingerprint'> & {
61
+ hostKeyFingerprint?: string;
62
+ };
63
+ docker?: NodeDocker;
64
+ secrets?: NodeSecrets;
65
+ }
66
+ interface NodeUpdateInput {
67
+ name?: string;
68
+ ssh?: Partial<Omit<NodeSsh, 'hostKeyFingerprint'>>;
69
+ docker?: Partial<NodeDocker>;
70
+ secrets?: NodeSecrets;
71
+ }
72
+ interface CredentialLike {
73
+ readRecord(key: CredentialKey): Promise<unknown>;
74
+ modifyRecord(key: CredentialKey, mutate: (current: unknown) => Promise<unknown>): Promise<unknown>;
75
+ deleteRecord(key: CredentialKey): Promise<void>;
76
+ }
77
+ declare function slugifyName(name: string): string;
78
+ declare function dshHome(): string;
79
+ declare class NodeRegistry {
80
+ private readonly ctx;
81
+ private profiles;
82
+ private loaded;
83
+ private readonly statuses;
84
+ constructor(ctx: Context);
85
+ private get creds();
86
+ private file;
87
+ private load;
88
+ private ensureLocalHost;
89
+ private save;
90
+ list(): NodeProfile[];
91
+ get(id: string): NodeProfile | undefined;
92
+ hasSecret(id: string): Promise<{
93
+ hasPassword: boolean;
94
+ hasKey: boolean;
95
+ hasPassphrase: boolean;
96
+ }>;
97
+ getSecrets(id: string): Promise<NodeSecrets | undefined>;
98
+ create(input: NodeCreateInput): Promise<NodeProfile>;
99
+ createImported(input: NodeCreateInput, preferredId?: string): Promise<NodeProfile>;
100
+ private createProfile;
101
+ updateImported(id: string, input: NodeCreateInput): Promise<NodeProfile>;
102
+ update(id: string, input: NodeUpdateInput): Promise<NodeProfile>;
103
+ remove(id: string): Promise<void>;
104
+ removeImported(id: string): Promise<void>;
105
+ status(id: string): NodeStatus;
106
+ setStatus(id: string, status: NodeStatus): void;
107
+ private credKey;
108
+ private writeSecrets;
109
+ }
110
+ //#endregion
111
+ export { NodeProfile as a, NodeSsh as c, NodeTestReport as d, NodeType as f, slugifyName as h, NodeJumpHop as i, NodeSshAuth as l, dshHome as m, NodeCreateInput as n, NodeRegistry as o, NodeUpdateInput as p, NodeDocker as r, NodeSecrets as s, CredentialLike as t, NodeStatus as u };
112
+ //# sourceMappingURL=node-registry-BTnnM5-k.d.ts.map
@@ -0,0 +1,89 @@
1
+ import { c as NodeSsh, o as NodeRegistry, r as NodeDocker, s as NodeSecrets } from "./node-registry-BTnnM5-k.js";
2
+ import { r as WorkspaceBindingsStore } from "./workspace-bindings-CsB0TIJB.js";
3
+ import { l as SyncRecordMetadata, r as SyncImportMethod } from "./model-BP7Gw1yk.js";
4
+ import { n as SyncStateStore } from "./stores-CKyEt0yk.js";
5
+ //#region src/core/sync/node-sync.d.ts
6
+ interface SyncNodeProfile {
7
+ name: string;
8
+ type: 'remote-ssh' | 'remote-docker';
9
+ ssh: NodeSsh;
10
+ docker?: NodeDocker;
11
+ }
12
+ interface SyncNodeEntry {
13
+ metadata: SyncRecordMetadata;
14
+ profile?: SyncNodeProfile;
15
+ secrets?: NodeSecrets;
16
+ }
17
+ interface SyncNodeManifest {
18
+ protocolVersion: 1;
19
+ instanceId: string;
20
+ records: SyncNodeEntry[];
21
+ }
22
+ interface SyncNodeApplyResult {
23
+ created: number;
24
+ updated: number;
25
+ deleted: number;
26
+ pendingRemoval: number;
27
+ skipped: number;
28
+ }
29
+ interface SyncNodeView {
30
+ importedVia?: 'peer' | 'offline';
31
+ sourceName?: string;
32
+ pendingRemoval: boolean;
33
+ credentialsRequired?: boolean;
34
+ }
35
+ declare class SyncNodeManifestError extends Error {
36
+ constructor(message?: string);
37
+ }
38
+ declare class SyncNodeInUseError extends Error {
39
+ readonly workspaces: string[];
40
+ constructor(workspaces: string[]);
41
+ }
42
+ interface WorkspaceRegistryLike {
43
+ list(): Array<{
44
+ path: string;
45
+ title: string;
46
+ }>;
47
+ }
48
+ declare class SyncNodeService {
49
+ private readonly registry;
50
+ private readonly bindings;
51
+ private readonly state;
52
+ private readonly getWorkspaceRegistry?;
53
+ private readonly disposeWorld?;
54
+ private mutationTail;
55
+ constructor(registry: NodeRegistry, bindings: WorkspaceBindingsStore, state: SyncStateStore, getWorkspaceRegistry?: (() => WorkspaceRegistryLike | undefined) | undefined, disposeWorld?: ((nodeId: string) => void) | undefined);
56
+ exportManifest(): Promise<SyncNodeManifest>;
57
+ private exportManifestNow;
58
+ validateManifest(value: unknown): SyncNodeEntry[];
59
+ preflightManifest(value: unknown): Promise<void>;
60
+ applyManifest(value: unknown, sourceName: string, importedVia?: SyncImportMethod): Promise<SyncNodeApplyResult>;
61
+ private applyManifestNow;
62
+ removeLocalNode(nodeId: string, remove: () => Promise<void>): Promise<void>;
63
+ private removeLocalNodeNow;
64
+ view(nodeId: string): SyncNodeView | undefined;
65
+ views(nodeIds: readonly string[]): Map<string, SyncNodeView>;
66
+ isPendingRemoval(nodeId: string): boolean;
67
+ originForLocalNode(nodeId: string): {
68
+ originInstanceId: string;
69
+ originEntityId: string;
70
+ } | undefined;
71
+ localNodeIdForOrigin(origin: {
72
+ originInstanceId: string;
73
+ originEntityId: string;
74
+ }): string | undefined;
75
+ withAvailableRemoteNode<T>(origin: {
76
+ originInstanceId: string;
77
+ originEntityId: string;
78
+ }, operation: (nodeId: string) => Promise<T>): Promise<T | undefined>;
79
+ reconcilePendingRemovals(): Promise<void>;
80
+ private reconcilePendingRemovalsNow;
81
+ private hasActiveBinding;
82
+ private activeBindings;
83
+ private removeNodeAndStaleBindings;
84
+ private saveRecord;
85
+ private serializeMutation;
86
+ }
87
+ //#endregion
88
+ export { SyncNodeManifestError as a, SyncNodeView as c, SyncNodeManifest as i, SyncNodeEntry as n, SyncNodeProfile as o, SyncNodeInUseError as r, SyncNodeService as s, SyncNodeApplyResult as t };
89
+ //# sourceMappingURL=node-sync-3Z9QLz2n.d.ts.map
@@ -0,0 +1,35 @@
1
+ //#region src/core/sync/protocol.d.ts
2
+ declare const SYNC_PROTOCOL_VERSION = 1;
3
+ declare const MAX_SYNC_CONTROL_FRAME_BYTES: number;
4
+ declare const MAX_SYNC_DATA_CHUNK_BYTES: number;
5
+ declare const MAX_SYNC_TRANSFER_BYTES: number;
6
+ type SyncFrame = {
7
+ kind: 'control';
8
+ value: Record<string, unknown>;
9
+ } | {
10
+ kind: 'data';
11
+ sequence: number;
12
+ digest: string;
13
+ data: Buffer;
14
+ };
15
+ declare class SyncProtocolError extends Error {
16
+ constructor(message: string);
17
+ }
18
+ declare function encodeSyncControlFrame(value: Record<string, unknown>): Buffer;
19
+ declare function encodeSyncDataFrame(sequence: number, data: Buffer): Buffer;
20
+ declare class SyncFrameDecoder {
21
+ private readonly header;
22
+ private headerOffset;
23
+ private frameType;
24
+ private payload;
25
+ private payloadOffset;
26
+ private nextDataSequence;
27
+ private ended;
28
+ push(chunk: Buffer): SyncFrame[];
29
+ finish(): void;
30
+ private decodeFrame;
31
+ private resetFrame;
32
+ }
33
+ //#endregion
34
+ export { SyncFrame as a, encodeSyncControlFrame as c, SYNC_PROTOCOL_VERSION as i, encodeSyncDataFrame as l, MAX_SYNC_DATA_CHUNK_BYTES as n, SyncFrameDecoder as o, MAX_SYNC_TRANSFER_BYTES as r, SyncProtocolError as s, MAX_SYNC_CONTROL_FRAME_BYTES as t };
35
+ //# sourceMappingURL=protocol-CV7LGE44.d.ts.map
@@ -0,0 +1,25 @@
1
+ //#region src/core/sync/revision.d.ts
2
+ interface SyncRevision {
3
+ physicalTimeMs: number;
4
+ logicalCounter: number;
5
+ writerInstanceId: string;
6
+ }
7
+ interface HlcSnapshot {
8
+ physicalTimeMs: number;
9
+ logicalCounter: number;
10
+ }
11
+ declare function compareSyncRevision(a: SyncRevision, b: SyncRevision): number;
12
+ declare class HybridLogicalClock {
13
+ private readonly writerInstanceId;
14
+ private physicalTimeMs;
15
+ private logicalCounter;
16
+ constructor(writerInstanceId: string, snapshot?: HlcSnapshot);
17
+ tick(now?: number): SyncRevision;
18
+ observe(remote: SyncRevision, now?: number): SyncRevision;
19
+ snapshot(): HlcSnapshot;
20
+ private incrementCounter;
21
+ private current;
22
+ }
23
+ //#endregion
24
+ export { compareSyncRevision as i, HybridLogicalClock as n, SyncRevision as r, HlcSnapshot as t };
25
+ //# sourceMappingURL=revision-C9sOlDZ6.d.ts.map
@@ -1,8 +1,17 @@
1
1
  import { Context } from "@deepseek-ai/cordis";
2
- import { FsDirEntry, FsEditOutcome, FsEditRequest, FsInfo, FsPathInfo, FsTarget, FsVersion, FsWriteIntent, FsWriteOutcome } from "@deepseek-ai/dsh-fs";
3
2
  import SandboxedFileSystem from "@deepseek-ai/dsh-fs-sandbox";
4
3
  import { SandboxExecutionPolicy } from "@deepseek-ai/dsh-sandbox";
5
4
  //#region src/router/router-fs.d.ts
5
+ type FsTarget = Parameters<SandboxedFileSystem['stat']>[0];
6
+ type FsMutationTarget = Parameters<SandboxedFileSystem['writeText']>[0];
7
+ type FsInfo = NonNullable<Awaited<ReturnType<SandboxedFileSystem['stat']>>>;
8
+ type FsPathInfo = NonNullable<Awaited<ReturnType<SandboxedFileSystem['lstat']>>>;
9
+ type FsDirEntry = NonNullable<Awaited<ReturnType<SandboxedFileSystem['listDir']>>>[number];
10
+ type FsWriteIntent = NonNullable<Parameters<SandboxedFileSystem['writeText']>[2]>;
11
+ type FsWriteOutcome = Awaited<ReturnType<SandboxedFileSystem['writeText']>>;
12
+ type FsEditRequest = Parameters<SandboxedFileSystem['editText']>[1];
13
+ type FsEditOutcome = Awaited<ReturnType<SandboxedFileSystem['editText']>>;
14
+ type FsVersion = NonNullable<Parameters<SandboxedFileSystem['editText']>[2]>['version'];
6
15
  declare class RouterFileSystem extends SandboxedFileSystem {
7
16
  private readonly resolver;
8
17
  constructor(ctx: Context, config: unknown);
@@ -19,8 +28,8 @@ declare class RouterFileSystem extends SandboxedFileSystem {
19
28
  length: number;
20
29
  }, signal?: AbortSignal): Promise<Uint8Array>;
21
30
  listDir(target: FsTarget, signal?: AbortSignal): Promise<FsDirEntry[]>;
22
- writeText(target: FsTarget, content: string, expected?: FsWriteIntent, signal?: AbortSignal, sandboxPolicy?: SandboxExecutionPolicy): Promise<FsWriteOutcome>;
23
- editText(target: FsTarget, edit: FsEditRequest, expected?: {
31
+ writeText(target: FsMutationTarget, content: string, expected?: FsWriteIntent, signal?: AbortSignal, sandboxPolicy?: SandboxExecutionPolicy): Promise<FsWriteOutcome>;
32
+ editText(target: FsMutationTarget, edit: FsEditRequest, expected?: {
24
33
  version: FsVersion;
25
34
  }, signal?: AbortSignal, sandboxPolicy?: SandboxExecutionPolicy): Promise<FsEditOutcome>;
26
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"router-fs.js","names":[],"sources":["../../src/router/router-fs.ts"],"sourcesContent":["import SandboxedFileSystem from '@deepseek-ai/dsh-fs-sandbox'\nimport type { Context } from '@deepseek-ai/cordis'\nimport type { FsEditOutcome, FsEditRequest, FsTarget, FsVersion, FsWriteIntent, FsWriteOutcome, FsDirEntry, FsInfo, FsPathInfo } from '@deepseek-ai/dsh-fs'\nimport type { SandboxExecutionPolicy } from '@deepseek-ai/dsh-sandbox'\nimport type { FsDelegate } from './types.js'\nimport { sharedWorldResolver } from './resolve.js'\n\nexport default class RouterFileSystem extends SandboxedFileSystem {\n private readonly resolver = sharedWorldResolver()\n\n constructor(ctx: Context, config: unknown) {\n super(ctx, config as never)\n }\n\n private targetPath(target: FsTarget): string {\n return this.processPath(target)\n }\n\n override async stat(target: FsTarget, signal?: AbortSignal): Promise<FsInfo | undefined> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.stat(target, signal)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.stat(ref.remotePath, signal) as Promise<FsInfo | undefined>\n }\n\n override async lstat(path: string, opts?: { cwd?: string }, signal?: AbortSignal): Promise<FsPathInfo | undefined> {\n const resolved = await super.resolve(path, { cwd: opts?.cwd, signal })\n const ref = this.resolver.resolve(super.processPath(resolved))\n if (ref.kind === 'local') return super.lstat(path, opts, signal)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.lstat(ref.remotePath, opts, signal) as Promise<FsPathInfo | undefined>\n }\n\n override async readText(target: FsTarget, signal?: AbortSignal): Promise<string> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.readText(target, signal)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.readText(ref.remotePath, signal)\n }\n\n override async streamText(target: FsTarget, signal?: AbortSignal): Promise<AsyncIterable<string>> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.streamText(target, signal)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.streamText(ref.remotePath, signal)\n }\n\n override async readBytes(target: FsTarget, signal: AbortSignal | undefined, maxBytes: number): Promise<Uint8Array> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.readBytes(target, signal, maxBytes)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.readBytes(ref.remotePath, signal, maxBytes)\n }\n\n override async readByteRange(target: FsTarget, range: { offset: number; length: number }, signal?: AbortSignal): Promise<Uint8Array> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') {\n const end = range.offset + range.length\n const bytes = await super.readBytes(target, signal, end)\n return bytes.subarray(range.offset, end)\n }\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.readByteRange(ref.remotePath, range, signal)\n }\n\n override async listDir(target: FsTarget, signal?: AbortSignal): Promise<FsDirEntry[]> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.listDir(target, signal)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.listDir(ref.remotePath, signal) as Promise<FsDirEntry[]>\n }\n\n override async writeText(target: FsTarget, content: string, expected?: FsWriteIntent, signal?: AbortSignal, sandboxPolicy?: SandboxExecutionPolicy): Promise<FsWriteOutcome> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.writeText(target, content, expected, signal, sandboxPolicy)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.writeText(ref.remotePath, content, expected, signal, sandboxPolicy) as Promise<FsWriteOutcome>\n }\n\n override async editText(target: FsTarget, edit: FsEditRequest, expected?: { version: FsVersion }, signal?: AbortSignal, sandboxPolicy?: SandboxExecutionPolicy): Promise<FsEditOutcome> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.editText(target, edit, expected, signal, sandboxPolicy)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.editText(ref.remotePath, edit, expected, signal, sandboxPolicy) as Promise<FsEditOutcome>\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"router-fs.js","names":[],"sources":["../../src/router/router-fs.ts"],"sourcesContent":["import SandboxedFileSystem from '@deepseek-ai/dsh-fs-sandbox'\nimport type { Context } from '@deepseek-ai/cordis'\nimport type { SandboxExecutionPolicy } from '@deepseek-ai/dsh-sandbox'\nimport type { FsDelegate } from './types.js'\nimport { sharedWorldResolver } from './resolve.js'\n\n// Derive from the base method groups because pnpm can install separate branded dsh-fs peer instances.\ntype FsTarget = Parameters<SandboxedFileSystem['stat']>[0]\ntype FsMutationTarget = Parameters<SandboxedFileSystem['writeText']>[0]\ntype FsInfo = NonNullable<Awaited<ReturnType<SandboxedFileSystem['stat']>>>\ntype FsPathInfo = NonNullable<Awaited<ReturnType<SandboxedFileSystem['lstat']>>>\ntype FsDirEntry = NonNullable<Awaited<ReturnType<SandboxedFileSystem['listDir']>>>[number]\ntype FsWriteIntent = NonNullable<Parameters<SandboxedFileSystem['writeText']>[2]>\ntype FsWriteOutcome = Awaited<ReturnType<SandboxedFileSystem['writeText']>>\ntype FsEditRequest = Parameters<SandboxedFileSystem['editText']>[1]\ntype FsEditOutcome = Awaited<ReturnType<SandboxedFileSystem['editText']>>\ntype FsVersion = NonNullable<Parameters<SandboxedFileSystem['editText']>[2]>['version']\n\nexport default class RouterFileSystem extends SandboxedFileSystem {\n private readonly resolver = sharedWorldResolver()\n\n constructor(ctx: Context, config: unknown) {\n super(ctx, config as never)\n }\n\n private targetPath(target: FsTarget | FsMutationTarget): string {\n return this.processPath(target as FsTarget)\n }\n\n override async stat(target: FsTarget, signal?: AbortSignal): Promise<FsInfo | undefined> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.stat(target, signal)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.stat(ref.remotePath, signal) as Promise<FsInfo | undefined>\n }\n\n override async lstat(path: string, opts?: { cwd?: string }, signal?: AbortSignal): Promise<FsPathInfo | undefined> {\n const resolved = await super.resolve(path, { cwd: opts?.cwd, signal })\n const ref = this.resolver.resolve(super.processPath(resolved))\n if (ref.kind === 'local') return super.lstat(path, opts, signal)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.lstat(ref.remotePath, opts, signal) as Promise<FsPathInfo | undefined>\n }\n\n override async readText(target: FsTarget, signal?: AbortSignal): Promise<string> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.readText(target, signal)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.readText(ref.remotePath, signal)\n }\n\n override async streamText(target: FsTarget, signal?: AbortSignal): Promise<AsyncIterable<string>> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.streamText(target, signal)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.streamText(ref.remotePath, signal)\n }\n\n override async readBytes(target: FsTarget, signal: AbortSignal | undefined, maxBytes: number): Promise<Uint8Array> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.readBytes(target, signal, maxBytes)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.readBytes(ref.remotePath, signal, maxBytes)\n }\n\n override async readByteRange(target: FsTarget, range: { offset: number; length: number }, signal?: AbortSignal): Promise<Uint8Array> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') {\n const end = range.offset + range.length\n const bytes = await super.readBytes(target, signal, end)\n return bytes.subarray(range.offset, end)\n }\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.readByteRange(ref.remotePath, range, signal)\n }\n\n override async listDir(target: FsTarget, signal?: AbortSignal): Promise<FsDirEntry[]> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.listDir(target, signal)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.listDir(ref.remotePath, signal) as Promise<FsDirEntry[]>\n }\n\n override async writeText(target: FsMutationTarget, content: string, expected?: FsWriteIntent, signal?: AbortSignal, sandboxPolicy?: SandboxExecutionPolicy): Promise<FsWriteOutcome> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.writeText(target, content, expected, signal, sandboxPolicy)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.writeText(ref.remotePath, content, expected, signal, sandboxPolicy) as Promise<FsWriteOutcome>\n }\n\n override async editText(target: FsMutationTarget, edit: FsEditRequest, expected?: { version: FsVersion }, signal?: AbortSignal, sandboxPolicy?: SandboxExecutionPolicy): Promise<FsEditOutcome> {\n const ref = this.resolver.resolve(this.targetPath(target))\n if (ref.kind === 'local') return super.editText(target, edit, expected, signal, sandboxPolicy)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n return ref.provider.fs.editText(ref.remotePath, edit, expected, signal, sandboxPolicy) as Promise<FsEditOutcome>\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { r as SyncImportMethod } from "./model-BP7Gw1yk.js";
2
+ //#region src/core/sync/session-journal.d.ts
3
+ declare class SyncSessionJournalStore {
4
+ private readonly home;
5
+ private readonly filePath;
6
+ private data;
7
+ constructor(home?: string);
8
+ begin(peerId: string, sourceName: string, bundleDigest: string, recordKeys: readonly string[], startedAt?: string, importedVia?: SyncImportMethod, allowSameInstance?: boolean): string;
9
+ beginWithBundle(peerId: string, sourceName: string, bundleDigest: string, recordKeys: readonly string[], bundle: unknown, startedAt?: string, importedVia?: SyncImportMethod, allowSameInstance?: boolean): string;
10
+ pendingPeerIds(): string[];
11
+ pendingBatches(): Array<{
12
+ batchId: string;
13
+ peerId: string;
14
+ sourceName: string;
15
+ bundleDigest: string;
16
+ importedVia: SyncImportMethod;
17
+ allowSameInstance: boolean;
18
+ }>;
19
+ findBatch(peerId: string, bundleDigest: string): {
20
+ batchId: string;
21
+ peerId: string;
22
+ sourceName: string;
23
+ bundleDigest: string;
24
+ importedVia: SyncImportMethod;
25
+ allowSameInstance: boolean;
26
+ } | undefined;
27
+ writeBundle(batchId: string, value: unknown): void;
28
+ readBundle(batchId: string): unknown | undefined;
29
+ writePrepared(batchId: string, recordKey: string, value: unknown): void;
30
+ readPrepared(batchId: string, recordKey: string): unknown | undefined;
31
+ complete(batchId: string): void;
32
+ cleanupOrphanedStaging(): void;
33
+ private preparedPath;
34
+ private bundlePath;
35
+ private load;
36
+ private save;
37
+ }
38
+ //#endregion
39
+ export { SyncSessionJournalStore as t };
40
+ //# sourceMappingURL=session-journal-pgPqcWn9.d.ts.map