linkshell-cli 0.10.46 → 0.10.48

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 (115) hide show
  1. package/dist/cli/src/auth.d.ts +6 -2
  2. package/dist/cli/src/auth.js +9 -5
  3. package/dist/cli/src/auth.js.map +1 -1
  4. package/dist/cli/src/commands/desktop-update.d.ts +2 -0
  5. package/dist/cli/src/commands/desktop-update.js +11 -0
  6. package/dist/cli/src/commands/desktop-update.js.map +1 -1
  7. package/dist/cli/src/commands/desktop-workspace-state.d.ts +19 -0
  8. package/dist/cli/src/commands/desktop-workspace-state.js +92 -0
  9. package/dist/cli/src/commands/desktop-workspace-state.js.map +1 -0
  10. package/dist/cli/src/commands/desktop-workspace.d.ts +12 -0
  11. package/dist/cli/src/commands/desktop-workspace.js +415 -0
  12. package/dist/cli/src/commands/desktop-workspace.js.map +1 -0
  13. package/dist/cli/src/commands/desktop.d.ts +8 -0
  14. package/dist/cli/src/commands/desktop.js +29 -6
  15. package/dist/cli/src/commands/desktop.js.map +1 -1
  16. package/dist/cli/src/commands/host.js +13 -0
  17. package/dist/cli/src/commands/host.js.map +1 -1
  18. package/dist/cli/src/commands/login.d.ts +3 -1
  19. package/dist/cli/src/commands/login.js +40 -17
  20. package/dist/cli/src/commands/login.js.map +1 -1
  21. package/dist/cli/src/commands/screen.js +7 -1
  22. package/dist/cli/src/commands/screen.js.map +1 -1
  23. package/dist/cli/src/commands/upgrade.js +4 -0
  24. package/dist/cli/src/commands/upgrade.js.map +1 -1
  25. package/dist/cli/src/index.js +18 -3
  26. package/dist/cli/src/index.js.map +1 -1
  27. package/dist/cli/src/utils/daemon.js +18 -5
  28. package/dist/cli/src/utils/daemon.js.map +1 -1
  29. package/dist/cli/src/utils/standalone.js +8 -1
  30. package/dist/cli/src/utils/standalone.js.map +1 -1
  31. package/dist/cli/tsconfig.tsbuildinfo +1 -1
  32. package/dist/client-core/src/pro-membership.d.ts +1 -0
  33. package/dist/client-core/src/pro-membership.js +3 -1
  34. package/dist/client-core/src/pro-membership.js.map +1 -1
  35. package/dist/host/src/drivers/acp/connection.js +2 -7
  36. package/dist/host/src/drivers/acp/connection.js.map +1 -1
  37. package/dist/host/src/drivers/acp/driver.js +2 -4
  38. package/dist/host/src/drivers/acp/driver.js.map +1 -1
  39. package/dist/host/src/drivers/auth.js +1 -3
  40. package/dist/host/src/drivers/auth.js.map +1 -1
  41. package/dist/host/src/drivers/claude/driver.js +23 -11
  42. package/dist/host/src/drivers/claude/driver.js.map +1 -1
  43. package/dist/host/src/drivers/codex/app-server.d.ts +6 -0
  44. package/dist/host/src/drivers/codex/app-server.js +44 -21
  45. package/dist/host/src/drivers/codex/app-server.js.map +1 -1
  46. package/dist/host/src/drivers/codex/driver.d.ts +1 -0
  47. package/dist/host/src/drivers/codex/driver.js +11 -7
  48. package/dist/host/src/drivers/codex/driver.js.map +1 -1
  49. package/dist/host/src/drivers/codex/installation.d.ts +2 -0
  50. package/dist/host/src/drivers/codex/installation.js +29 -0
  51. package/dist/host/src/drivers/codex/installation.js.map +1 -0
  52. package/dist/host/src/fs.d.ts +13 -0
  53. package/dist/host/src/fs.js +29 -2
  54. package/dist/host/src/fs.js.map +1 -1
  55. package/dist/host/src/host.d.ts +1 -0
  56. package/dist/host/src/host.js +6 -4
  57. package/dist/host/src/host.js.map +1 -1
  58. package/dist/host/src/input.d.ts +29 -2
  59. package/dist/host/src/input.js +113 -5
  60. package/dist/host/src/input.js.map +1 -1
  61. package/dist/host/src/local-transport.d.ts +5 -0
  62. package/dist/host/src/local-transport.js +22 -0
  63. package/dist/host/src/local-transport.js.map +1 -0
  64. package/dist/host/src/ports.js +10 -1
  65. package/dist/host/src/ports.js.map +1 -1
  66. package/dist/host/src/process.d.ts +12 -0
  67. package/dist/host/src/process.js +59 -0
  68. package/dist/host/src/process.js.map +1 -0
  69. package/dist/host/src/rpc/client.js +2 -3
  70. package/dist/host/src/rpc/client.js.map +1 -1
  71. package/dist/host/src/rpc/server.d.ts +1 -0
  72. package/dist/host/src/rpc/server.js +12 -3
  73. package/dist/host/src/rpc/server.js.map +1 -1
  74. package/dist/host/src/screen-h264.d.ts +15 -0
  75. package/dist/host/src/screen-h264.js +88 -0
  76. package/dist/host/src/screen-h264.js.map +1 -0
  77. package/dist/host/src/screen-pacer.d.ts +7 -1
  78. package/dist/host/src/screen-pacer.js +11 -5
  79. package/dist/host/src/screen-pacer.js.map +1 -1
  80. package/dist/host/src/screen-session.d.ts +35 -0
  81. package/dist/host/src/screen-session.js +26 -0
  82. package/dist/host/src/screen-session.js.map +1 -0
  83. package/dist/host/src/screen-viewer.d.ts +1 -1
  84. package/dist/host/src/screen-viewer.js +373 -42
  85. package/dist/host/src/screen-viewer.js.map +1 -1
  86. package/dist/host/src/screen.d.ts +3 -1
  87. package/dist/host/src/screen.js +560 -165
  88. package/dist/host/src/screen.js.map +1 -1
  89. package/dist/host/src/terminals.js +6 -3
  90. package/dist/host/src/terminals.js.map +1 -1
  91. package/dist/host/src/windows-screen.d.ts +38 -0
  92. package/dist/host/src/windows-screen.js +80 -0
  93. package/dist/host/src/windows-screen.js.map +1 -0
  94. package/dist/host/src/windows-video.d.ts +78 -0
  95. package/dist/host/src/windows-video.js +368 -0
  96. package/dist/host/src/windows-video.js.map +1 -0
  97. package/dist/host/src/worktrees.js +2 -2
  98. package/dist/host/src/worktrees.js.map +1 -1
  99. package/dist/wire/src/rpc.d.ts +49 -0
  100. package/dist/wire/src/rpc.js +18 -0
  101. package/dist/wire/src/rpc.js.map +1 -1
  102. package/dist/wire/src/watch.d.ts +6 -6
  103. package/package.json +7 -5
  104. package/src/auth.ts +7 -5
  105. package/src/commands/desktop-update.ts +11 -0
  106. package/src/commands/desktop-workspace-state.ts +87 -0
  107. package/src/commands/desktop-workspace.ts +353 -0
  108. package/src/commands/desktop.ts +23 -6
  109. package/src/commands/host.ts +8 -0
  110. package/src/commands/login.ts +30 -18
  111. package/src/commands/screen.ts +6 -1
  112. package/src/commands/upgrade.ts +4 -0
  113. package/src/index.ts +19 -3
  114. package/src/utils/daemon.ts +12 -4
  115. package/src/utils/standalone.ts +7 -1
@@ -16,8 +16,12 @@ export { SUPABASE_URL, SUPABASE_ANON_KEY };
16
16
  * Refresh the access token using the refresh token.
17
17
  * Returns updated tokens or null if refresh failed.
18
18
  */
19
- export declare function refreshAccessToken(): Promise<AuthTokens | null>;
19
+ export declare function refreshAccessToken(options?: {
20
+ signal?: AbortSignal;
21
+ }): Promise<AuthTokens | null>;
20
22
  /**
21
23
  * Get a valid access token, refreshing if needed.
22
24
  */
23
- export declare function getValidToken(): Promise<string | null>;
25
+ export declare function getValidToken(options?: {
26
+ signal?: AbortSignal;
27
+ }): Promise<string | null>;
@@ -43,7 +43,9 @@ let inflightRefresh = null;
43
43
  * Refresh the access token using the refresh token.
44
44
  * Returns updated tokens or null if refresh failed.
45
45
  */
46
- export async function refreshAccessToken() {
46
+ export async function refreshAccessToken(options = {}) {
47
+ if (options.signal?.aborted)
48
+ return null;
47
49
  if (inflightRefresh)
48
50
  return inflightRefresh;
49
51
  inflightRefresh = (async () => {
@@ -60,7 +62,7 @@ export async function refreshAccessToken() {
60
62
  apikey: SUPABASE_ANON_KEY,
61
63
  },
62
64
  body: JSON.stringify({ refresh_token: auth.refreshToken }),
63
- signal: AbortSignal.timeout(30_000),
65
+ signal: options.signal ? AbortSignal.any([options.signal, AbortSignal.timeout(30_000)]) : AbortSignal.timeout(30_000),
64
66
  });
65
67
  if (!res.ok)
66
68
  return null;
@@ -74,7 +76,7 @@ export async function refreshAccessToken() {
74
76
  };
75
77
  // A login or logout may finish while the refresh is in flight.
76
78
  const current = loadAuth();
77
- if (tokens.userId !== auth.userId || current?.userId !== auth.userId || current.refreshToken !== auth.refreshToken)
79
+ if (options.signal?.aborted || tokens.userId !== auth.userId || current?.userId !== auth.userId || current.refreshToken !== auth.refreshToken)
78
80
  return null;
79
81
  saveAuth(tokens);
80
82
  return tokens;
@@ -90,13 +92,15 @@ export async function refreshAccessToken() {
90
92
  /**
91
93
  * Get a valid access token, refreshing if needed.
92
94
  */
93
- export async function getValidToken() {
95
+ export async function getValidToken(options = {}) {
96
+ if (options.signal?.aborted)
97
+ return null;
94
98
  const auth = loadAuth();
95
99
  if (!auth)
96
100
  return null;
97
101
  // If token expires in less than 120s, refresh
98
102
  if (auth.expiresAt - Date.now() < 120_000) {
99
- const refreshed = await refreshAccessToken();
103
+ const refreshed = await refreshAccessToken(options);
100
104
  return refreshed?.accessToken ?? null;
101
105
  }
102
106
  return auth.accessToken;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/auth.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ /** A failed Windows update must release the new executable before moving the old bundle back. */
2
+ export declare function stopDesktopUpdateHost(): Promise<void>;
1
3
  /** Called only after the desktop's explicit install confirmation. External hosts are left alone. */
2
4
  export declare function prepareDesktopUpdate(): Promise<void>;
3
5
  /** New app and canceled update both run this, using their own bundled runtime and preserved settings. */
@@ -4,6 +4,17 @@ import { ensureHostRunning, withRunningHost } from "./host.js";
4
4
  import { linkshellDir, readHostLaunch, readHostOwner, readPid, stopDaemonAndWait } from "../utils/daemon.js";
5
5
  import { standaloneBundle } from "../utils/standalone.js";
6
6
  const markerPath = () => join(linkshellDir(), "desktop-update.json");
7
+ /** A failed Windows update must release the new executable before moving the old bundle back. */
8
+ export async function stopDesktopUpdateHost() {
9
+ if (!existsSync(markerPath()))
10
+ return;
11
+ const app = standaloneBundle();
12
+ const marker = JSON.parse(readFileSync(markerPath(), "utf8"));
13
+ const pid = readPid("host");
14
+ if (app && marker.schema === 1 && marker.app === app && pid && readHostOwner(pid) === app) {
15
+ await stopDaemonAndWait("host", 30_000, pid);
16
+ }
17
+ }
7
18
  /** Called only after the desktop's explicit install confirmation. External hosts are left alone. */
8
19
  export async function prepareDesktopUpdate() {
9
20
  const app = standaloneBundle();
@@ -1 +1 @@
1
- {"version":3,"file":"desktop-update.js","sourceRoot":"","sources":["../../../../src/commands/desktop-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC7G,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAU1D,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,qBAAqB,CAAC,CAAC;AAErE,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,GAAG;QAAE,OAAO;IAC/C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACtD,OAAO,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC;QACpD,OAAO,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC;KACvD,CAAC,CAAC,CAAC;IACJ,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACpD,MAAM,MAAM,GAAW,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;IACrM,SAAS,CAAC,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,GAAG,UAAU,EAAE,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IACvD,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;IACpC,mGAAmG;IACnG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,yGAAyG;AACzG,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAe;IACxD,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAAE,OAAO;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAW,CAAC;IACxE,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG;QAAE,OAAO;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC1F,MAAM,iBAAiB,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtF,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACrD,OAAO,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC;QACpD,OAAO,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC;KACvD,CAAC,CAAC,CAAC;IACJ,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAChG,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;QACvN,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"desktop-update.js","sourceRoot":"","sources":["../../../../src/commands/desktop-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type Identity } from "@linkshell/wire";
2
+ interface DesktopState {
3
+ schema: 1;
4
+ identity: Identity;
5
+ storage: Record<string, unknown>;
6
+ }
7
+ export declare function validStorageKey(key: unknown): key is string;
8
+ /** The browser origin changes on every launch; paired identity and drafts must not. */
9
+ export declare class DesktopClientState {
10
+ private readonly file;
11
+ private value;
12
+ private writes;
13
+ private constructor();
14
+ static open(home: string): Promise<DesktopClientState>;
15
+ snapshot(): Pick<DesktopState, "identity" | "storage">;
16
+ set(key: string, value: unknown): Promise<void>;
17
+ flush(): Promise<void>;
18
+ }
19
+ export {};
@@ -0,0 +1,92 @@
1
+ import { chmod, mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { randomBytes } from "node:crypto";
4
+ import { createIdentity, idOf, sign, verifySignature } from "@linkshell/wire";
5
+ const MAX_STATE_BYTES = 8 * 1024 * 1024;
6
+ const MAX_KEYS = 2048;
7
+ export function validStorageKey(key) {
8
+ return typeof key === "string" && key.length > 0 && key.length <= 1024 &&
9
+ [...key].every((character) => character.charCodeAt(0) >= 32 && character.charCodeAt(0) !== 127) &&
10
+ !["__proto__", "prototype", "constructor"].includes(key);
11
+ }
12
+ function validIdentity(value) {
13
+ if (!value || typeof value !== "object")
14
+ return false;
15
+ const identity = value;
16
+ if (![identity.id, identity.signKey, identity.boxKey, identity.signSecret, identity.boxSecret]
17
+ .every((part) => typeof part === "string" && /^[A-Za-z0-9_-]{16,128}$/.test(part)))
18
+ return false;
19
+ try {
20
+ return idOf(identity.signKey) === identity.id &&
21
+ verifySignature(identity.signKey, "linkshell-desktop-identity", sign(identity, "linkshell-desktop-identity"));
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ /** The browser origin changes on every launch; paired identity and drafts must not. */
28
+ export class DesktopClientState {
29
+ file;
30
+ value;
31
+ writes = Promise.resolve();
32
+ constructor(file, value) {
33
+ this.file = file;
34
+ this.value = value;
35
+ }
36
+ static async open(home) {
37
+ await mkdir(home, { recursive: true, mode: 0o700 });
38
+ const file = join(home, "desktop-client.json");
39
+ try {
40
+ const initial = { schema: 1, identity: createIdentity(), storage: {} };
41
+ await writeFile(file, JSON.stringify(initial), { flag: "wx", mode: 0o600 });
42
+ }
43
+ catch (error) {
44
+ if (error.code !== "EEXIST")
45
+ throw error;
46
+ }
47
+ if ((await stat(file)).size > MAX_STATE_BYTES)
48
+ throw new Error("桌面偏好文件过大,请检查本地存储");
49
+ const value = JSON.parse(await readFile(file, "utf8"));
50
+ if (value.schema !== 1 || !validIdentity(value.identity) || !value.storage || typeof value.storage !== "object" ||
51
+ Array.isArray(value.storage) || Object.keys(value.storage).some((key) => !validStorageKey(key))) {
52
+ // Replacing a damaged identity would silently lose every existing pairing.
53
+ throw new Error("桌面设备身份文件无法读取,请保留此文件并检查本地存储");
54
+ }
55
+ await chmod(file, 0o600);
56
+ return new DesktopClientState(file, value);
57
+ }
58
+ snapshot() {
59
+ return { identity: this.value.identity, storage: this.value.storage };
60
+ }
61
+ set(key, value) {
62
+ if (!validStorageKey(key))
63
+ return Promise.reject(new Error("无效的偏好名称"));
64
+ const write = this.writes.then(async () => {
65
+ const storage = { ...this.value.storage };
66
+ if (value === null)
67
+ delete storage[key];
68
+ else
69
+ storage[key] = value;
70
+ if (Object.keys(storage).length > MAX_KEYS)
71
+ throw new Error("桌面偏好条目过多");
72
+ const next = { ...this.value, storage };
73
+ const text = JSON.stringify(next);
74
+ if (Buffer.byteLength(text) > MAX_STATE_BYTES)
75
+ throw new Error("桌面偏好存储空间已满");
76
+ const temporary = `${this.file}.${randomBytes(12).toString("hex")}.tmp`;
77
+ try {
78
+ await writeFile(temporary, text, { flag: "wx", mode: 0o600 });
79
+ await rename(temporary, this.file);
80
+ this.value = next;
81
+ }
82
+ finally {
83
+ await rm(temporary, { force: true });
84
+ }
85
+ });
86
+ // A rejected write must not prevent later, smaller preferences from saving.
87
+ this.writes = write.catch(() => { });
88
+ return write;
89
+ }
90
+ async flush() { await this.writes; }
91
+ }
92
+ //# sourceMappingURL=desktop-workspace-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-workspace-state.js","sourceRoot":"","sources":["../../../../src/commands/desktop-workspace-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Readable } from "node:stream";
2
+ export interface DesktopWorkspace {
3
+ url: string;
4
+ stop(): Promise<void>;
5
+ }
6
+ /** A capability-protected UI server owned by the native application's lifetime. */
7
+ export declare function startDesktopWorkspace(options: {
8
+ assets: string;
9
+ home?: string;
10
+ hostSocket?: string;
11
+ }): Promise<DesktopWorkspace>;
12
+ export declare function runDesktopWorkspace(assets: string, input?: Readable): Promise<void>;