@artenx/dshb 0.0.3 → 0.1.0

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 (166) hide show
  1. package/cordis.patch.yml +8 -49
  2. package/lib/auth/credentials.d.ts +30 -0
  3. package/lib/auth/credentials.js +121 -0
  4. package/lib/auth/credentials.js.map +1 -0
  5. package/lib/auth/decorate-webserver.d.ts +7 -0
  6. package/lib/auth/decorate-webserver.js +75 -0
  7. package/lib/auth/decorate-webserver.js.map +1 -0
  8. package/lib/auth/gate.d.ts +14 -0
  9. package/lib/auth/gate.js +45 -0
  10. package/lib/auth/gate.js.map +1 -0
  11. package/lib/auth/index.d.ts +8 -0
  12. package/lib/auth/index.js +51 -0
  13. package/lib/auth/index.js.map +1 -0
  14. package/lib/auth/login-page.d.ts +5 -0
  15. package/lib/auth/login-page.js +87 -0
  16. package/lib/auth/login-page.js.map +1 -0
  17. package/lib/auth/loopback-compat.d.ts +6 -0
  18. package/lib/auth/loopback-compat.js +94 -0
  19. package/lib/auth/loopback-compat.js.map +1 -0
  20. package/lib/auth/loopback.d.ts +7 -0
  21. package/lib/auth/loopback.js +24 -0
  22. package/lib/auth/loopback.js.map +1 -0
  23. package/lib/auth/ratelimit.d.ts +11 -0
  24. package/lib/auth/ratelimit.js +37 -0
  25. package/lib/auth/ratelimit.js.map +1 -0
  26. package/lib/auth/routes.d.ts +8 -0
  27. package/lib/auth/routes.js +224 -0
  28. package/lib/auth/routes.js.map +1 -0
  29. package/lib/auth/session.d.ts +11 -0
  30. package/lib/auth/session.js +52 -0
  31. package/lib/auth/session.js.map +1 -0
  32. package/lib/auth/startup.d.ts +15 -0
  33. package/lib/auth/startup.js +68 -0
  34. package/lib/auth/startup.js.map +1 -0
  35. package/lib/auth/webserver.d.ts +18 -0
  36. package/lib/auth/webserver.js +60 -0
  37. package/lib/auth/webserver.js.map +1 -0
  38. package/lib/client.js +2770 -0
  39. package/lib/client.js.map +1 -0
  40. package/lib/connection-sIX25pkS.d.ts +46 -0
  41. package/lib/core/audit.d.ts +16 -0
  42. package/lib/core/audit.js +38 -0
  43. package/lib/core/audit.js.map +1 -0
  44. package/lib/core/index.d.ts +8 -0
  45. package/lib/core/index.js +77 -0
  46. package/lib/core/index.js.map +1 -0
  47. package/lib/core/known-hosts.d.ts +23 -0
  48. package/lib/core/known-hosts.js +76 -0
  49. package/lib/core/known-hosts.js.map +1 -0
  50. package/lib/core/node-registry.d.ts +108 -0
  51. package/lib/core/node-registry.js +191 -0
  52. package/lib/core/node-registry.js.map +1 -0
  53. package/lib/core/routes.d.ts +9 -0
  54. package/lib/core/routes.js +404 -0
  55. package/lib/core/routes.js.map +1 -0
  56. package/lib/core/ssh-config.d.ts +23 -0
  57. package/lib/core/ssh-config.js +70 -0
  58. package/lib/core/ssh-config.js.map +1 -0
  59. package/lib/core/test.d.ts +43 -0
  60. package/lib/core/test.js +116 -0
  61. package/lib/core/test.js.map +1 -0
  62. package/lib/core/workspace-bindings.d.ts +28 -0
  63. package/lib/core/workspace-bindings.js +86 -0
  64. package/lib/core/workspace-bindings.js.map +1 -0
  65. package/lib/core/workspaces.d.ts +9 -0
  66. package/lib/core/workspaces.js +283 -0
  67. package/lib/core/workspaces.js.map +1 -0
  68. package/lib/exec-docker/daemon-runner.d.ts +21 -0
  69. package/lib/exec-docker/daemon-runner.js +326 -0
  70. package/lib/exec-docker/daemon-runner.js.map +1 -0
  71. package/lib/exec-docker/docker-backend.d.ts +48 -0
  72. package/lib/exec-docker/docker-backend.js +1 -0
  73. package/lib/exec-docker/docker-client.d.ts +46 -0
  74. package/lib/exec-docker/docker-client.js +302 -0
  75. package/lib/exec-docker/docker-client.js.map +1 -0
  76. package/lib/exec-docker/docker-routes.d.ts +6 -0
  77. package/lib/exec-docker/docker-routes.js +215 -0
  78. package/lib/exec-docker/docker-routes.js.map +1 -0
  79. package/lib/exec-docker/fs-provider.d.ts +50 -0
  80. package/lib/exec-docker/fs-provider.js +92 -0
  81. package/lib/exec-docker/fs-provider.js.map +1 -0
  82. package/lib/exec-docker/host-runner.d.ts +29 -0
  83. package/lib/exec-docker/host-runner.js +17 -0
  84. package/lib/exec-docker/host-runner.js.map +1 -0
  85. package/lib/exec-docker/index.d.ts +21 -0
  86. package/lib/exec-docker/index.js +137 -0
  87. package/lib/exec-docker/index.js.map +1 -0
  88. package/lib/exec-docker/process-provider.d.ts +20 -0
  89. package/lib/exec-docker/process-provider.js +75 -0
  90. package/lib/exec-docker/process-provider.js.map +1 -0
  91. package/lib/exec-docker/provision.d.ts +24 -0
  92. package/lib/exec-docker/provision.js +103 -0
  93. package/lib/exec-docker/provision.js.map +1 -0
  94. package/lib/exec-docker/remote-docker-cli.d.ts +52 -0
  95. package/lib/exec-docker/remote-docker-cli.js +155 -0
  96. package/lib/exec-docker/remote-docker-cli.js.map +1 -0
  97. package/lib/exec-docker/world.d.ts +37 -0
  98. package/lib/exec-docker/world.js +62 -0
  99. package/lib/exec-docker/world.js.map +1 -0
  100. package/lib/exec-ssh/connection-pool.d.ts +25 -0
  101. package/lib/exec-ssh/connection-pool.js +54 -0
  102. package/lib/exec-ssh/connection-pool.js.map +1 -0
  103. package/lib/exec-ssh/connection.d.ts +2 -0
  104. package/lib/exec-ssh/connection.js +125 -0
  105. package/lib/exec-ssh/connection.js.map +1 -0
  106. package/lib/exec-ssh/env-scrub.d.ts +7 -0
  107. package/lib/exec-ssh/env-scrub.js +40 -0
  108. package/lib/exec-ssh/env-scrub.js.map +1 -0
  109. package/lib/exec-ssh/executor.d.ts +46 -0
  110. package/lib/exec-ssh/executor.js +212 -0
  111. package/lib/exec-ssh/executor.js.map +1 -0
  112. package/lib/exec-ssh/fs-provider.d.ts +50 -0
  113. package/lib/exec-ssh/fs-provider.js +92 -0
  114. package/lib/exec-ssh/fs-provider.js.map +1 -0
  115. package/lib/exec-ssh/index.d.ts +16 -0
  116. package/lib/exec-ssh/index.js +30 -0
  117. package/lib/exec-ssh/index.js.map +1 -0
  118. package/lib/exec-ssh/process-provider.d.ts +20 -0
  119. package/lib/exec-ssh/process-provider.js +75 -0
  120. package/lib/exec-ssh/process-provider.js.map +1 -0
  121. package/lib/exec-ssh/runner.d.ts +13 -0
  122. package/lib/exec-ssh/runner.js +62 -0
  123. package/lib/exec-ssh/runner.js.map +1 -0
  124. package/lib/exec-ssh/world.d.ts +79 -0
  125. package/lib/exec-ssh/world.js +95 -0
  126. package/lib/exec-ssh/world.js.map +1 -0
  127. package/lib/index.d.ts +2 -0
  128. package/lib/index.js +2 -0
  129. package/lib/router/decorate-fs.d.ts +6 -0
  130. package/lib/router/decorate-fs.js +78 -0
  131. package/lib/router/decorate-fs.js.map +1 -0
  132. package/lib/router/decorate-shell.d.ts +6 -0
  133. package/lib/router/decorate-shell.js +35 -0
  134. package/lib/router/decorate-shell.js.map +1 -0
  135. package/lib/router/decorate-subprocess.d.ts +6 -0
  136. package/lib/router/decorate-subprocess.js +35 -0
  137. package/lib/router/decorate-subprocess.js.map +1 -0
  138. package/lib/router/index.d.ts +10 -0
  139. package/lib/router/index.js +21 -0
  140. package/lib/router/index.js.map +1 -0
  141. package/lib/router/resolve.d.ts +22 -0
  142. package/lib/router/resolve.js +45 -0
  143. package/lib/router/resolve.js.map +1 -0
  144. package/lib/router/router-fs.d.ts +25 -0
  145. package/lib/router/router-fs.js +64 -0
  146. package/lib/router/router-fs.js.map +1 -0
  147. package/lib/router/router-shell.d.ts +14 -0
  148. package/lib/router/router-shell.js +36 -0
  149. package/lib/router/router-shell.js.map +1 -0
  150. package/lib/router/router-subprocess.d.ts +13 -0
  151. package/lib/router/router-subprocess.js +33 -0
  152. package/lib/router/router-subprocess.js.map +1 -0
  153. package/lib/router/types.d.ts +2 -0
  154. package/lib/router/types.js +1 -0
  155. package/lib/types-C0TtEO7z.d.ts +67 -0
  156. package/lib/ui/decorate-picker.d.ts +6 -0
  157. package/lib/ui/decorate-picker.js +58 -0
  158. package/lib/ui/decorate-picker.js.map +1 -0
  159. package/lib/ui/index.d.ts +8 -0
  160. package/lib/ui/index.js +11 -0
  161. package/lib/ui/index.js.map +1 -0
  162. package/lib/ui/picker.d.ts +10 -0
  163. package/lib/ui/picker.js +58 -0
  164. package/lib/ui/picker.js.map +1 -0
  165. package/package.json +158 -9
  166. package/LICENSE +0 -21
@@ -0,0 +1,36 @@
1
+ import { sharedWorldResolver } from "./resolve.js";
2
+ import SandboxBashExecutor from "@deepseek-ai/dsh-bash-sandbox";
3
+ //#region src/router/router-shell.ts
4
+ var RouterShell = class extends SandboxBashExecutor {
5
+ resolver = sharedWorldResolver();
6
+ constructor(ctx, config) {
7
+ super(ctx, config);
8
+ }
9
+ resolve(request) {
10
+ return super.resolve(request);
11
+ }
12
+ async run(spec) {
13
+ const ref = this.resolver.resolve(spec.workdir ?? "");
14
+ if (ref.kind === "local") return super.run(spec);
15
+ if (ref.kind === "unrouted") throw new Error(`node ${ref.nodeId} world not available`);
16
+ await ref.provider.ensureDir(ref.remotePath).catch(() => {});
17
+ return ref.provider.shell.run({
18
+ ...spec,
19
+ workdir: ref.remotePath
20
+ });
21
+ }
22
+ start(spec) {
23
+ const ref = this.resolver.resolve(spec.workdir ?? "");
24
+ if (ref.kind === "local") return super.start(spec);
25
+ if (ref.kind === "unrouted") throw new Error(`node ${ref.nodeId} world not available`);
26
+ ref.provider.ensureDir(ref.remotePath).catch(() => {});
27
+ return ref.provider.shell.start({
28
+ ...spec,
29
+ workdir: ref.remotePath
30
+ });
31
+ }
32
+ };
33
+ //#endregion
34
+ export { RouterShell as default };
35
+
36
+ //# sourceMappingURL=router-shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-shell.js","names":[],"sources":["../../src/router/router-shell.ts"],"sourcesContent":["import SandboxBashExecutor from '@deepseek-ai/dsh-bash-sandbox'\nimport type { Context } from '@deepseek-ai/cordis'\nimport type { ShellExecRequest, ShellExecSpec, ShellProcess, ShellRunResult } from '@deepseek-ai/dsh-shell'\nimport { sharedWorldResolver } from './resolve.js'\n\nexport default class RouterShell extends SandboxBashExecutor {\n private readonly resolver = sharedWorldResolver()\n\n constructor(ctx: Context, config: unknown) {\n super(ctx, config as never)\n }\n\n override resolve(request: ShellExecRequest): ShellExecSpec {\n return super.resolve(request)\n }\n\n override async run(spec: ShellExecSpec): Promise<ShellRunResult> {\n const ref = this.resolver.resolve(spec.workdir ?? '')\n if (ref.kind === 'local') return super.run(spec)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n await ref.provider.ensureDir(ref.remotePath).catch(() => {})\n return ref.provider.shell.run({ ...spec, workdir: ref.remotePath })\n }\n\n override start(spec: ShellExecSpec): ShellProcess {\n const ref = this.resolver.resolve(spec.workdir ?? '')\n if (ref.kind === 'local') return super.start(spec)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n void ref.provider.ensureDir(ref.remotePath).catch(() => {})\n return ref.provider.shell.start({ ...spec, workdir: ref.remotePath })\n }\n}\n"],"mappings":";;;AAKA,IAAqB,cAArB,cAAyC,oBAAoB;CAC3D,WAA4B,oBAAoB;CAEhD,YAAY,KAAc,QAAiB;EACzC,MAAM,KAAK,MAAe;CAC5B;CAEA,QAAiB,SAA0C;EACzD,OAAO,MAAM,QAAQ,OAAO;CAC9B;CAEA,MAAe,IAAI,MAA8C;EAC/D,MAAM,MAAM,KAAK,SAAS,QAAQ,KAAK,WAAW,EAAE;EACpD,IAAI,IAAI,SAAS,SAAS,OAAO,MAAM,IAAI,IAAI;EAC/C,IAAI,IAAI,SAAS,YAAY,MAAM,IAAI,MAAM,QAAQ,IAAI,OAAO,qBAAqB;EACrF,MAAM,IAAI,SAAS,UAAU,IAAI,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;EAC3D,OAAO,IAAI,SAAS,MAAM,IAAI;GAAE,GAAG;GAAM,SAAS,IAAI;EAAW,CAAC;CACpE;CAEA,MAAe,MAAmC;EAChD,MAAM,MAAM,KAAK,SAAS,QAAQ,KAAK,WAAW,EAAE;EACpD,IAAI,IAAI,SAAS,SAAS,OAAO,MAAM,MAAM,IAAI;EACjD,IAAI,IAAI,SAAS,YAAY,MAAM,IAAI,MAAM,QAAQ,IAAI,OAAO,qBAAqB;EACrF,IAAS,SAAS,UAAU,IAAI,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;EAC1D,OAAO,IAAI,SAAS,MAAM,MAAM;GAAE,GAAG;GAAM,SAAS,IAAI;EAAW,CAAC;CACtE;AACF"}
@@ -0,0 +1,13 @@
1
+ import LocalSubprocessRuntime from "@deepseek-ai/dsh-subprocess-local";
2
+ import { Context } from "@deepseek-ai/cordis";
3
+ import { SubprocessHandle, SubprocessSpawnSpec, SubprocessTerminalHandle, SubprocessTerminalSpawnSpec } from "@deepseek-ai/dsh-subprocess";
4
+ //#region src/router/router-subprocess.d.ts
5
+ declare class RouterSubprocess extends LocalSubprocessRuntime {
6
+ private readonly resolver;
7
+ constructor(ctx: Context);
8
+ spawn(spec: SubprocessSpawnSpec): SubprocessHandle;
9
+ spawnTerminal(spec: SubprocessTerminalSpawnSpec): Promise<SubprocessTerminalHandle>;
10
+ }
11
+ //#endregion
12
+ export { RouterSubprocess as default };
13
+ //# sourceMappingURL=router-subprocess.d.ts.map
@@ -0,0 +1,33 @@
1
+ import { sharedWorldResolver } from "./resolve.js";
2
+ import LocalSubprocessRuntime from "@deepseek-ai/dsh-subprocess-local";
3
+ //#region src/router/router-subprocess.ts
4
+ var RouterSubprocess = class extends LocalSubprocessRuntime {
5
+ resolver = sharedWorldResolver();
6
+ constructor(ctx) {
7
+ super(ctx);
8
+ }
9
+ spawn(spec) {
10
+ const ref = this.resolver.resolve(spec.cwd ?? "");
11
+ if (ref.kind === "local") return super.spawn(spec);
12
+ if (ref.kind === "unrouted") throw new Error(`node ${ref.nodeId} world not available`);
13
+ ref.provider.ensureDir(ref.remotePath).catch(() => {});
14
+ return ref.provider.subprocess.spawn({
15
+ ...spec,
16
+ cwd: ref.remotePath
17
+ });
18
+ }
19
+ async spawnTerminal(spec) {
20
+ const ref = this.resolver.resolve(spec.cwd ?? "");
21
+ if (ref.kind === "local") return super.spawnTerminal(spec);
22
+ if (ref.kind === "unrouted") throw new Error(`node ${ref.nodeId} world not available`);
23
+ await ref.provider.ensureDir(ref.remotePath).catch(() => {});
24
+ return ref.provider.subprocess.spawnTerminal({
25
+ ...spec,
26
+ cwd: ref.remotePath
27
+ });
28
+ }
29
+ };
30
+ //#endregion
31
+ export { RouterSubprocess as default };
32
+
33
+ //# sourceMappingURL=router-subprocess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router-subprocess.js","names":[],"sources":["../../src/router/router-subprocess.ts"],"sourcesContent":["import LocalSubprocessRuntime from '@deepseek-ai/dsh-subprocess-local'\nimport type { Context } from '@deepseek-ai/cordis'\nimport type { SubprocessHandle, SubprocessSpawnSpec, SubprocessTerminalHandle, SubprocessTerminalSpawnSpec } from '@deepseek-ai/dsh-subprocess'\nimport { sharedWorldResolver } from './resolve.js'\n\nexport default class RouterSubprocess extends LocalSubprocessRuntime {\n private readonly resolver = sharedWorldResolver()\n\n constructor(ctx: Context) {\n super(ctx)\n }\n\n override spawn(spec: SubprocessSpawnSpec): SubprocessHandle {\n const ref = this.resolver.resolve(spec.cwd ?? '')\n if (ref.kind === 'local') return super.spawn(spec)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n void ref.provider.ensureDir(ref.remotePath).catch(() => {})\n return ref.provider.subprocess.spawn({ ...spec, cwd: ref.remotePath })\n }\n\n override async spawnTerminal(spec: SubprocessTerminalSpawnSpec): Promise<SubprocessTerminalHandle> {\n const ref = this.resolver.resolve(spec.cwd ?? '')\n if (ref.kind === 'local') return super.spawnTerminal(spec)\n if (ref.kind === 'unrouted') throw new Error(`node ${ref.nodeId} world not available`)\n await ref.provider.ensureDir(ref.remotePath).catch(() => {})\n return ref.provider.subprocess.spawnTerminal({ ...spec, cwd: ref.remotePath })\n }\n}\n"],"mappings":";;;AAKA,IAAqB,mBAArB,cAA8C,uBAAuB;CACnE,WAA4B,oBAAoB;CAEhD,YAAY,KAAc;EACxB,MAAM,GAAG;CACX;CAEA,MAAe,MAA6C;EAC1D,MAAM,MAAM,KAAK,SAAS,QAAQ,KAAK,OAAO,EAAE;EAChD,IAAI,IAAI,SAAS,SAAS,OAAO,MAAM,MAAM,IAAI;EACjD,IAAI,IAAI,SAAS,YAAY,MAAM,IAAI,MAAM,QAAQ,IAAI,OAAO,qBAAqB;EACrF,IAAS,SAAS,UAAU,IAAI,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;EAC1D,OAAO,IAAI,SAAS,WAAW,MAAM;GAAE,GAAG;GAAM,KAAK,IAAI;EAAW,CAAC;CACvE;CAEA,MAAe,cAAc,MAAsE;EACjG,MAAM,MAAM,KAAK,SAAS,QAAQ,KAAK,OAAO,EAAE;EAChD,IAAI,IAAI,SAAS,SAAS,OAAO,MAAM,cAAc,IAAI;EACzD,IAAI,IAAI,SAAS,YAAY,MAAM,IAAI,MAAM,QAAQ,IAAI,OAAO,qBAAqB;EACrF,MAAM,IAAI,SAAS,UAAU,IAAI,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;EAC3D,OAAO,IAAI,SAAS,WAAW,cAAc;GAAE,GAAG;GAAM,KAAK,IAAI;EAAW,CAAC;CAC/E;AACF"}
@@ -0,0 +1,2 @@
1
+ import { _ as WorkspaceBindings, a as NodeTestReport, c as ShellExecSpec, d as SubprocessDelegate, f as SubprocessHandle, g as SubprocessTerminalSpawnSpec, h as SubprocessTerminalHandle, i as FsTargetLike, l as ShellProcess, m as SubprocessSpawnSpec, n as FileSystem, o as ShellDelegate, p as SubprocessRuntime, r as FsDelegate, s as ShellExecRequest, t as ExecutionWorldProvider, u as ShellRunResult, v as WorldRef, y as WorldRegistry } from "../types-C0TtEO7z.js";
2
+ export { ExecutionWorldProvider, type FileSystem, FsDelegate, FsTargetLike, NodeTestReport, ShellDelegate, type ShellExecRequest, type ShellExecSpec, type ShellProcess, type ShellRunResult, SubprocessDelegate, type SubprocessHandle, type SubprocessRuntime, type SubprocessSpawnSpec, type SubprocessTerminalHandle, type SubprocessTerminalSpawnSpec, WorkspaceBindings, WorldRef, WorldRegistry };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,67 @@
1
+ import { FileSystem as FileSystem$1 } from "@deepseek-ai/dsh-fs";
2
+ import { SubprocessHandle as SubprocessHandle$1, SubprocessRuntime as SubprocessRuntime$1, SubprocessSpawnSpec as SubprocessSpawnSpec$1, SubprocessTerminalHandle as SubprocessTerminalHandle$1, SubprocessTerminalSpawnSpec as SubprocessTerminalSpawnSpec$1 } from "@deepseek-ai/dsh-subprocess";
3
+ import { ShellExecRequest as ShellExecRequest$1, ShellExecSpec as ShellExecSpec$1, ShellProcess as ShellProcess$1, ShellRunResult as ShellRunResult$1 } from "@deepseek-ai/dsh-shell";
4
+ //#region src/router/types.d.ts
5
+ interface NodeTestReport {
6
+ ok: boolean;
7
+ reachable?: boolean;
8
+ error?: string;
9
+ }
10
+ interface FsDelegate {
11
+ resolve(path: string, opts?: {
12
+ cwd?: string;
13
+ }): Promise<FsTargetLike>;
14
+ processPath(target: FsTargetLike): string;
15
+ fileUrl(target: FsTargetLike): string;
16
+ contains(parent: FsTargetLike, child: FsTargetLike): boolean;
17
+ stat(target: FsTargetLike, signal?: AbortSignal): Promise<unknown>;
18
+ lstat(path: string, opts?: {
19
+ cwd?: string;
20
+ }, signal?: AbortSignal): Promise<unknown>;
21
+ readText(target: FsTargetLike, signal?: AbortSignal): Promise<string>;
22
+ streamText(target: FsTargetLike, signal?: AbortSignal): Promise<AsyncIterable<string>>;
23
+ readBytes(target: FsTargetLike, signal: AbortSignal | undefined, maxBytes: number): Promise<Uint8Array>;
24
+ listDir(target: FsTargetLike, signal?: AbortSignal): Promise<unknown[]>;
25
+ writeText(target: FsTargetLike, content: string, expected?: unknown, signal?: AbortSignal, policy?: unknown): Promise<unknown>;
26
+ editText(target: FsTargetLike, edit: unknown, expected?: unknown, signal?: AbortSignal, policy?: unknown): Promise<unknown>;
27
+ }
28
+ type FsTargetLike = string;
29
+ interface SubprocessDelegate {
30
+ spawn(spec: SubprocessSpawnSpec$1): SubprocessHandle$1;
31
+ spawnTerminal(spec: SubprocessTerminalSpawnSpec$1): Promise<SubprocessTerminalHandle$1>;
32
+ }
33
+ interface ShellDelegate {
34
+ resolve(request: ShellExecRequest$1): ShellExecSpec$1;
35
+ run(spec: ShellExecSpec$1): Promise<ShellRunResult$1>;
36
+ start(spec: ShellExecSpec$1): ShellProcess$1;
37
+ }
38
+ interface ExecutionWorldProvider {
39
+ readonly nodeId: string;
40
+ readonly fs: FsDelegate;
41
+ readonly subprocess: SubprocessDelegate;
42
+ readonly shell: ShellDelegate;
43
+ ensureDir(remotePath: string): Promise<void>;
44
+ testConnection(): Promise<NodeTestReport>;
45
+ }
46
+ interface WorkspaceBindings {
47
+ resolve(mirrorPath: string): {
48
+ nodeId: string;
49
+ remotePath: string;
50
+ } | undefined;
51
+ }
52
+ interface WorldRegistry {
53
+ get(nodeId: string): ExecutionWorldProvider | undefined;
54
+ }
55
+ type WorldRef = {
56
+ kind: 'local';
57
+ } | {
58
+ kind: 'remote';
59
+ provider: ExecutionWorldProvider;
60
+ remotePath: string;
61
+ } | {
62
+ kind: 'unrouted';
63
+ nodeId: string;
64
+ };
65
+ //#endregion
66
+ export { WorkspaceBindings as _, NodeTestReport as a, ShellExecSpec$1 as c, SubprocessDelegate as d, SubprocessHandle$1 as f, SubprocessTerminalSpawnSpec$1 as g, SubprocessTerminalHandle$1 as h, FsTargetLike as i, ShellProcess$1 as l, SubprocessSpawnSpec$1 as m, FileSystem$1 as n, ShellDelegate as o, SubprocessRuntime$1 as p, FsDelegate as r, ShellExecRequest$1 as s, ExecutionWorldProvider as t, ShellRunResult$1 as u, WorldRef as v, WorldRegistry as y };
67
+ //# sourceMappingURL=types-C0TtEO7z.d.ts.map
@@ -0,0 +1,6 @@
1
+ import DirectoryPicker from "@deepseek-ai/dsh-host-directory-picker";
2
+ //#region src/ui/decorate-picker.d.ts
3
+ declare function decorateDirectoryPicker(picker: DirectoryPicker): () => void;
4
+ //#endregion
5
+ export { decorateDirectoryPicker };
6
+ //# sourceMappingURL=decorate-picker.d.ts.map
@@ -0,0 +1,58 @@
1
+ import { homedir } from "node:os";
2
+ import { readdirSync } from "node:fs";
3
+ //#region src/ui/decorate-picker.ts
4
+ function entry(path, hidden) {
5
+ return {
6
+ name: path.split("/").filter(Boolean).pop() ?? "/",
7
+ path,
8
+ hidden
9
+ };
10
+ }
11
+ function decorateDirectoryPicker(picker) {
12
+ const origCapability = picker.capability.bind(picker);
13
+ picker.capability = () => {
14
+ return {
15
+ kind: "browse",
16
+ list: async (path) => {
17
+ const target = path ?? homedir();
18
+ const entries = readdirSync(target, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name).sort().map((name) => entry(`${target.replace(/\/+$/, "")}/${name}`, name.startsWith(".")));
19
+ const crumbs = [];
20
+ const parts = target.split("/").filter(Boolean);
21
+ let acc = "";
22
+ crumbs.push({
23
+ name: "/",
24
+ path: "/",
25
+ hidden: false
26
+ });
27
+ for (const part of parts) {
28
+ acc += `/${part}`;
29
+ crumbs.push({
30
+ name: part,
31
+ path: acc,
32
+ hidden: false
33
+ });
34
+ }
35
+ return {
36
+ path: target,
37
+ home: homedir(),
38
+ crumbs,
39
+ entries,
40
+ truncated: false
41
+ };
42
+ },
43
+ createDirectory: async (path, name) => {
44
+ const { mkdirSync } = await import("node:fs");
45
+ const created = `${path.replace(/\/+$/, "")}/${name}`;
46
+ mkdirSync(created, { recursive: true });
47
+ return created;
48
+ }
49
+ };
50
+ };
51
+ return () => {
52
+ picker.capability = origCapability;
53
+ };
54
+ }
55
+ //#endregion
56
+ export { decorateDirectoryPicker };
57
+
58
+ //# sourceMappingURL=decorate-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorate-picker.js","names":[],"sources":["../../src/ui/decorate-picker.ts"],"sourcesContent":["import { homedir } from 'node:os'\nimport { readdirSync } from 'node:fs'\nimport type { Context } from '@deepseek-ai/cordis'\nimport type DirectoryPicker from '@deepseek-ai/dsh-host-directory-picker'\nimport type { DirectoryListing, DirectoryEntry, DirectoryPickerBrowseCapability } from '@deepseek-ai/dsh-host-directory-picker'\n\nfunction entry(path: string, hidden: boolean): DirectoryEntry {\n return { name: path.split('/').filter(Boolean).pop() ?? '/', path, hidden }\n}\n\nexport function decorateDirectoryPicker(picker: DirectoryPicker): () => void {\n const origCapability = picker.capability.bind(picker)\n\n picker.capability = (): DirectoryPickerBrowseCapability => {\n return {\n kind: 'browse',\n list: async (path?: string): Promise<DirectoryListing> => {\n const target = path ?? homedir()\n const names = readdirSync(target, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n const entries = names.map((name) => entry(`${target.replace(/\\/+$/, '')}/${name}`, name.startsWith('.')))\n const crumbs: DirectoryEntry[] = []\n const parts = target.split('/').filter(Boolean)\n let acc = ''\n crumbs.push({ name: '/', path: '/', hidden: false })\n for (const part of parts) {\n acc += `/${part}`\n crumbs.push({ name: part, path: acc, hidden: false })\n }\n return { path: target, home: homedir(), crumbs, entries, truncated: false }\n },\n createDirectory: async (path: string, name: string): Promise<string> => {\n const { mkdirSync } = await import('node:fs')\n const created = `${path.replace(/\\/+$/, '')}/${name}`\n mkdirSync(created, { recursive: true })\n return created\n },\n }\n }\n\n return () => {\n picker.capability = origCapability\n }\n}\n"],"mappings":";;;AAMA,SAAS,MAAM,MAAc,QAAiC;CAC5D,OAAO;EAAE,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK;EAAK;EAAM;CAAO;AAC5E;AAEA,SAAgB,wBAAwB,QAAqC;CAC3E,MAAM,iBAAiB,OAAO,WAAW,KAAK,MAAM;CAEpD,OAAO,mBAAoD;EACzD,OAAO;GACL,MAAM;GACN,MAAM,OAAO,SAA6C;IACxD,MAAM,SAAS,QAAQ,QAAQ;IAK/B,MAAM,UAJQ,YAAY,QAAQ,EAAE,eAAe,KAAK,CAAC,CAAC,CACvD,QAAQ,MAAM,EAAE,YAAY,CAAC,CAAC,CAC9B,KAAK,MAAM,EAAE,IAAI,CAAC,CAClB,KACiB,CAAC,CAAC,KAAK,SAAS,MAAM,GAAG,OAAO,QAAQ,QAAQ,EAAE,EAAE,GAAG,QAAQ,KAAK,WAAW,GAAG,CAAC,CAAC;IACxG,MAAM,SAA2B,CAAC;IAClC,MAAM,QAAQ,OAAO,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;IAC9C,IAAI,MAAM;IACV,OAAO,KAAK;KAAE,MAAM;KAAK,MAAM;KAAK,QAAQ;IAAM,CAAC;IACnD,KAAK,MAAM,QAAQ,OAAO;KACxB,OAAO,IAAI;KACX,OAAO,KAAK;MAAE,MAAM;MAAM,MAAM;MAAK,QAAQ;KAAM,CAAC;IACtD;IACA,OAAO;KAAE,MAAM;KAAQ,MAAM,QAAQ;KAAG;KAAQ;KAAS,WAAW;IAAM;GAC5E;GACA,iBAAiB,OAAO,MAAc,SAAkC;IACtE,MAAM,EAAE,cAAc,MAAM,OAAO;IACnC,MAAM,UAAU,GAAG,KAAK,QAAQ,QAAQ,EAAE,EAAE,GAAG;IAC/C,UAAU,SAAS,EAAE,WAAW,KAAK,CAAC;IACtC,OAAO;GACT;EACF;CACF;CAEA,aAAa;EACX,OAAO,aAAa;CACtB;AACF"}
@@ -0,0 +1,8 @@
1
+ import { Context } from "@deepseek-ai/cordis";
2
+ //#region src/ui/index.d.ts
3
+ declare const name = "dshb-ui";
4
+ declare const inject: string[];
5
+ declare function apply(ctx: Context): void;
6
+ //#endregion
7
+ export { apply, inject, name };
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,11 @@
1
+ import { decorateDirectoryPicker } from "./decorate-picker.js";
2
+ //#region src/ui/index.ts
3
+ const name = "dshb-ui";
4
+ const inject = ["directoryPicker"];
5
+ function apply(ctx) {
6
+ decorateDirectoryPicker(ctx.directoryPicker);
7
+ }
8
+ //#endregion
9
+ export { apply, inject, name };
10
+
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/ui/index.ts"],"sourcesContent":["import type { Context } from '@deepseek-ai/cordis'\nimport { decorateDirectoryPicker } from './decorate-picker.js'\n\nexport const name = 'dshb-ui'\n\nexport const inject = ['directoryPicker']\n\nexport function apply(ctx: Context): void {\n decorateDirectoryPicker(ctx.directoryPicker)\n}\n"],"mappings":";;AAGA,MAAa,OAAO;AAEpB,MAAa,SAAS,CAAC,iBAAiB;AAExC,SAAgB,MAAM,KAAoB;CACxC,wBAAwB,IAAI,eAAe;AAC7C"}
@@ -0,0 +1,10 @@
1
+ import DirectoryPicker, { DirectoryPickerBrowseCapability } from "@deepseek-ai/dsh-host-directory-picker";
2
+ import { Context } from "@deepseek-ai/cordis";
3
+ //#region src/ui/picker.d.ts
4
+ declare class DshbDirectoryPicker extends DirectoryPicker {
5
+ constructor(ctx: Context);
6
+ capability(): DirectoryPickerBrowseCapability;
7
+ }
8
+ //#endregion
9
+ export { DshbDirectoryPicker as default };
10
+ //# sourceMappingURL=picker.d.ts.map
@@ -0,0 +1,58 @@
1
+ import { homedir } from "node:os";
2
+ import { readdirSync } from "node:fs";
3
+ import DirectoryPicker from "@deepseek-ai/dsh-host-directory-picker";
4
+ //#region src/ui/picker.ts
5
+ function entry(path, hidden) {
6
+ return {
7
+ name: path.split("/").filter(Boolean).pop() ?? "/",
8
+ path,
9
+ hidden
10
+ };
11
+ }
12
+ var DshbDirectoryPicker = class extends DirectoryPicker {
13
+ constructor(ctx) {
14
+ super(ctx);
15
+ }
16
+ capability() {
17
+ return {
18
+ kind: "browse",
19
+ list: async (path) => {
20
+ const target = path ?? homedir();
21
+ const entries = readdirSync(target, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name).sort().map((name) => entry(`${target.replace(/\/+$/, "")}/${name}`, name.startsWith(".")));
22
+ const crumbs = [];
23
+ const parts = target.split("/").filter(Boolean);
24
+ let acc = "";
25
+ crumbs.push({
26
+ name: "/",
27
+ path: "/",
28
+ hidden: false
29
+ });
30
+ for (const part of parts) {
31
+ acc += `/${part}`;
32
+ crumbs.push({
33
+ name: part,
34
+ path: acc,
35
+ hidden: false
36
+ });
37
+ }
38
+ return {
39
+ path: target,
40
+ home: homedir(),
41
+ crumbs,
42
+ entries,
43
+ truncated: false
44
+ };
45
+ },
46
+ createDirectory: async (path, name) => {
47
+ const { mkdirSync } = await import("node:fs");
48
+ const created = `${path.replace(/\/+$/, "")}/${name}`;
49
+ mkdirSync(created, { recursive: true });
50
+ return created;
51
+ }
52
+ };
53
+ }
54
+ };
55
+ //#endregion
56
+ export { DshbDirectoryPicker as default };
57
+
58
+ //# sourceMappingURL=picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker.js","names":[],"sources":["../../src/ui/picker.ts"],"sourcesContent":["import { homedir } from 'node:os'\nimport { readdirSync } from 'node:fs'\nimport type { Context } from '@deepseek-ai/cordis'\nimport DirectoryPicker, { type DirectoryListing, type DirectoryEntry, type DirectoryPickerBrowseCapability } from '@deepseek-ai/dsh-host-directory-picker'\n\nfunction entry(path: string, hidden: boolean): DirectoryEntry {\n return { name: path.split('/').filter(Boolean).pop() ?? '/', path, hidden }\n}\n\nexport default class DshbDirectoryPicker extends DirectoryPicker {\n constructor(ctx: Context) {\n super(ctx)\n }\n\n capability(): DirectoryPickerBrowseCapability {\n return {\n kind: 'browse',\n list: async (path?: string): Promise<DirectoryListing> => {\n const target = path ?? homedir()\n const names = readdirSync(target, { withFileTypes: true })\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n const entries = names.map((name) => entry(`${target.replace(/\\/+$/, '')}/${name}`, name.startsWith('.')))\n const crumbs: DirectoryEntry[] = []\n const parts = target.split('/').filter(Boolean)\n let acc = ''\n crumbs.push({ name: '/', path: '/', hidden: false })\n for (const part of parts) {\n acc += `/${part}`\n crumbs.push({ name: part, path: acc, hidden: false })\n }\n return { path: target, home: homedir(), crumbs, entries, truncated: false }\n },\n createDirectory: async (path: string, name: string): Promise<string> => {\n const { mkdirSync } = await import('node:fs')\n const created = `${path.replace(/\\/+$/, '')}/${name}`\n mkdirSync(created, { recursive: true })\n return created\n },\n }\n }\n}\n"],"mappings":";;;;AAKA,SAAS,MAAM,MAAc,QAAiC;CAC5D,OAAO;EAAE,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK;EAAK;EAAM;CAAO;AAC5E;AAEA,IAAqB,sBAArB,cAAiD,gBAAgB;CAC/D,YAAY,KAAc;EACxB,MAAM,GAAG;CACX;CAEA,aAA8C;EAC5C,OAAO;GACL,MAAM;GACN,MAAM,OAAO,SAA6C;IACxD,MAAM,SAAS,QAAQ,QAAQ;IAK/B,MAAM,UAJQ,YAAY,QAAQ,EAAE,eAAe,KAAK,CAAC,CAAC,CACvD,QAAQ,MAAM,EAAE,YAAY,CAAC,CAAC,CAC9B,KAAK,MAAM,EAAE,IAAI,CAAC,CAClB,KACiB,CAAC,CAAC,KAAK,SAAS,MAAM,GAAG,OAAO,QAAQ,QAAQ,EAAE,EAAE,GAAG,QAAQ,KAAK,WAAW,GAAG,CAAC,CAAC;IACxG,MAAM,SAA2B,CAAC;IAClC,MAAM,QAAQ,OAAO,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;IAC9C,IAAI,MAAM;IACV,OAAO,KAAK;KAAE,MAAM;KAAK,MAAM;KAAK,QAAQ;IAAM,CAAC;IACnD,KAAK,MAAM,QAAQ,OAAO;KACxB,OAAO,IAAI;KACX,OAAO,KAAK;MAAE,MAAM;MAAM,MAAM;MAAK,QAAQ;KAAM,CAAC;IACtD;IACA,OAAO;KAAE,MAAM;KAAQ,MAAM,QAAQ;KAAG;KAAQ;KAAS,WAAW;IAAM;GAC5E;GACA,iBAAiB,OAAO,MAAc,SAAkC;IACtE,MAAM,EAAE,cAAc,MAAM,OAAO;IACnC,MAAM,UAAU,GAAG,KAAK,QAAQ,QAAQ,EAAE,EAAE,GAAG;IAC/C,UAAU,SAAS,EAAE,WAAW,KAAK,CAAC;IACtC,OAAO;GACT;EACF;CACF;AACF"}
package/package.json CHANGED
@@ -1,21 +1,170 @@
1
1
  {
2
2
  "name": "@artenx/dshb",
3
- "version": "0.0.3",
4
- "description": "DSH-HoneyBee 聚合包——一条命令安装全部 DSHB 插件",
3
+ "version": "0.1.0",
4
+ "description": "DSH-HoneyBee — a cloud Agent workbench for DeepSeek Harness: drive multiple hosts and Docker containers from one web entry, with auth gate, node registry, SSH/Docker execution worlds, and a mobile-aware node-management UI.",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "types": "lib/index.d.ts",
8
+ "exports": {
9
+ ".": "./lib/index.js",
10
+ "./auth": "./lib/auth/index.js",
11
+ "./auth/startup": "./lib/auth/startup.js",
12
+ "./auth/decorate-webserver": "./lib/auth/decorate-webserver.js",
13
+ "./auth/loopback": "./lib/auth/loopback.js",
14
+ "./auth/loopback-compat": "./lib/auth/loopback-compat.js",
15
+ "./auth/routes": "./lib/auth/routes.js",
16
+ "./auth/credentials": "./lib/auth/credentials.js",
17
+ "./auth/session": "./lib/auth/session.js",
18
+ "./auth/ratelimit": "./lib/auth/ratelimit.js",
19
+ "./auth/gate": "./lib/auth/gate.js",
20
+ "./auth/login-page": "./lib/auth/login-page.js",
21
+ "./auth/webserver": "./lib/auth/webserver.js",
22
+ "./core": "./lib/core/index.js",
23
+ "./core/node-registry": "./lib/core/node-registry.js",
24
+ "./core/routes": "./lib/core/routes.js",
25
+ "./core/test": "./lib/core/test.js",
26
+ "./core/ssh-config": "./lib/core/ssh-config.js",
27
+ "./core/known-hosts": "./lib/core/known-hosts.js",
28
+ "./core/workspace-bindings": "./lib/core/workspace-bindings.js",
29
+ "./core/workspaces": "./lib/core/workspaces.js",
30
+ "./core/audit": "./lib/core/audit.js",
31
+ "./router": "./lib/router/index.js",
32
+ "./router/resolve": "./lib/router/resolve.js",
33
+ "./router/types": "./lib/router/types.js",
34
+ "./router/decorate-fs": "./lib/router/decorate-fs.js",
35
+ "./router/decorate-subprocess": "./lib/router/decorate-subprocess.js",
36
+ "./router/decorate-shell": "./lib/router/decorate-shell.js",
37
+ "./exec-ssh": "./lib/exec-ssh/index.js",
38
+ "./exec-ssh/connection": "./lib/exec-ssh/connection.js",
39
+ "./exec-ssh/connection-pool": "./lib/exec-ssh/connection-pool.js",
40
+ "./exec-ssh/env-scrub": "./lib/exec-ssh/env-scrub.js",
41
+ "./exec-ssh/runner": "./lib/exec-ssh/runner.js",
42
+ "./exec-ssh/executor": "./lib/exec-ssh/executor.js",
43
+ "./exec-ssh/fs-provider": "./lib/exec-ssh/fs-provider.js",
44
+ "./exec-ssh/process-provider": "./lib/exec-ssh/process-provider.js",
45
+ "./exec-ssh/world": "./lib/exec-ssh/world.js",
46
+ "./exec-docker": "./lib/exec-docker/index.js",
47
+ "./exec-docker/docker-client": "./lib/exec-docker/docker-client.js",
48
+ "./exec-docker/docker-backend": "./lib/exec-docker/docker-backend.js",
49
+ "./exec-docker/remote-docker-cli": "./lib/exec-docker/remote-docker-cli.js",
50
+ "./exec-docker/world": "./lib/exec-docker/world.js",
51
+ "./exec-docker/fs-provider": "./lib/exec-docker/fs-provider.js",
52
+ "./exec-docker/process-provider": "./lib/exec-docker/process-provider.js",
53
+ "./exec-docker/provision": "./lib/exec-docker/provision.js",
54
+ "./exec-docker/docker-routes": "./lib/exec-docker/docker-routes.js",
55
+ "./exec-docker/daemon-runner": "./lib/exec-docker/daemon-runner.js",
56
+ "./exec-docker/host-runner": "./lib/exec-docker/host-runner.js",
57
+ "./ui": "./lib/ui/index.js",
58
+ "./ui/decorate-picker": "./lib/ui/decorate-picker.js",
59
+ "./ui/picker": "./lib/ui/picker.js",
60
+ "./client": "./lib/client.js",
61
+ "./package.json": "./package.json"
62
+ },
5
63
  "files": [
64
+ "lib",
6
65
  "cordis.patch.yml"
7
66
  ],
8
67
  "dsh": {
9
68
  "bundle": {
10
69
  "patch": "./cordis.patch.yml"
70
+ },
71
+ "client": {
72
+ "platform": "web",
73
+ "inject": [
74
+ "@deepseek-ai/dsh-client-ui-settings",
75
+ "@deepseek-ai/dsh-client-ui-slots",
76
+ "@deepseek-ai/dsh-client-ui-conversation",
77
+ "@deepseek-ai/dsh-client-ui-layout"
78
+ ]
79
+ },
80
+ "compatibility": {
81
+ "dshReleases": {
82
+ "0.1.1-rc.2": "compatible",
83
+ "0.1.2-alpha.5": "compatible",
84
+ "0.1.2-rc.1": "compatible",
85
+ "0.1.3-alpha.2": "compatible",
86
+ "0.1.5-alpha.1": "compatible",
87
+ "0.1.5-alpha.2": "compatible",
88
+ "0.1.5-rc.1": "compatible"
89
+ },
90
+ "nodeVersions": ">=22.13"
11
91
  }
12
92
  },
93
+ "scripts": {
94
+ "build": "tsdown",
95
+ "typecheck": "tsc --noEmit"
96
+ },
13
97
  "dependencies": {
14
- "dshb-auth": "0.0.3",
15
- "dshb-core": "0.0.3",
16
- "dshb-router": "0.0.3",
17
- "dshb-exec-ssh": "0.0.3",
18
- "dshb-exec-docker": "0.0.3",
19
- "dshb-ui": "0.0.3"
98
+ "commander": "^15.0.0",
99
+ "ssh2": "^1.16.0"
100
+ },
101
+ "peerDependencies": {
102
+ "@deepseek-ai/cordis": "^4.0.2",
103
+ "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2",
104
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.5-rc.1",
105
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.5-rc.1",
106
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.5-rc.1",
107
+ "@deepseek-ai/dsh-client-ui-layout": "^0.1.5-rc.1",
108
+ "@deepseek-ai/dsh-client-ui-workspace": "^0.1.5-rc.1",
109
+ "@deepseek-ai/dsh-cmdline": "^0.1.5-rc.1",
110
+ "@deepseek-ai/dsh-credentials": "^0.1.5-rc.1",
111
+ "@deepseek-ai/dsh-fs": "^0.1.5-rc.1",
112
+ "@deepseek-ai/dsh-fs-sandbox": "^0.1.5-rc.1",
113
+ "@deepseek-ai/dsh-host-directory-picker": "^0.1.5-rc.1",
114
+ "@deepseek-ai/dsh-host-webserver": "^0.1.5-rc.1",
115
+ "@deepseek-ai/dsh-sandbox": "^0.1.5-rc.1",
116
+ "@deepseek-ai/dsh-shell": "^0.1.5-rc.1",
117
+ "@deepseek-ai/dsh-bash-sandbox": "^0.1.5-rc.1",
118
+ "@deepseek-ai/dsh-subprocess": "^0.1.5-rc.1",
119
+ "@deepseek-ai/dsh-subprocess-local": "^0.1.5-rc.1",
120
+ "react": "^19.0.0"
121
+ },
122
+ "devDependencies": {
123
+ "@deepseek-ai/cordis": "^4.0.2",
124
+ "@deepseek-ai/dsh": "0.1.5-rc.1",
125
+ "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2",
126
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.5-rc.1",
127
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.5-rc.1",
128
+ "@deepseek-ai/dsh-client-ui-workspace": "^0.1.5-rc.1",
129
+ "@deepseek-ai/dsh-cmdline": "^0.1.5-rc.1",
130
+ "@deepseek-ai/dsh-credentials": "^0.1.5-rc.1",
131
+ "@deepseek-ai/dsh-fs": "^0.1.5-rc.1",
132
+ "@deepseek-ai/dsh-fs-sandbox": "^0.1.5-rc.1",
133
+ "@deepseek-ai/dsh-host-directory-picker": "^0.1.5-rc.1",
134
+ "@deepseek-ai/dsh-host-webserver": "^0.1.5-rc.1",
135
+ "@deepseek-ai/dsh-sandbox": "^0.1.5-rc.1",
136
+ "@deepseek-ai/dsh-shell": "^0.1.5-rc.1",
137
+ "@deepseek-ai/dsh-bash-sandbox": "^0.1.5-rc.1",
138
+ "@deepseek-ai/dsh-subprocess": "^0.1.5-rc.1",
139
+ "@deepseek-ai/dsh-subprocess-local": "^0.1.5-rc.1",
140
+ "@types/react": "^19.0.0",
141
+ "@types/ssh2": "^1.15.6",
142
+ "react": "^19.0.0",
143
+ "tsdown": "^0.22.14",
144
+ "typescript": "^5.9.2"
145
+ },
146
+ "engines": {
147
+ "node": ">=22.13"
148
+ },
149
+ "sideEffects": false,
150
+ "keywords": [
151
+ "dsh",
152
+ "dsh-plugin",
153
+ "deepseek-harness",
154
+ "agent",
155
+ "ssh",
156
+ "docker",
157
+ "remote-execution"
158
+ ],
159
+ "license": "MIT",
160
+ "author": "Artenx",
161
+ "repository": {
162
+ "type": "git",
163
+ "url": "git+https://github.com/Artenx/dsh-honeybee.git",
164
+ "directory": "packages/dshb"
165
+ },
166
+ "homepage": "https://github.com/Artenx/dsh-honeybee#readme",
167
+ "bugs": {
168
+ "url": "https://github.com/Artenx/dsh-honeybee/issues"
20
169
  }
21
- }
170
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 DSH-HoneyBee Contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.