very-happy-cli 0.2.120 → 0.2.122

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 (35) hide show
  1. package/dist/{AcpBackend-tou8FQXI.cjs → AcpBackend-YPVwACkW.cjs} +1 -1
  2. package/dist/{AcpBackend-DiIJaJWG.mjs → AcpBackend-pgDnK76l.mjs} +1 -1
  3. package/dist/{AcpSessionManager-fF_HFB98.cjs → AcpSessionManager-6rypahwH.cjs} +51 -11
  4. package/dist/{AcpSessionManager-CZ0Az0GG.mjs → AcpSessionManager-Bq5Tiky1.mjs} +51 -11
  5. package/dist/{config-CGDxsTZg.mjs → config-BTEW041n.mjs} +2 -2
  6. package/dist/{config-CEbOao_0.cjs → config-rQdv_Yr0.cjs} +2 -2
  7. package/dist/{index-CYizH-JC.cjs → index-BHg0P9cY.cjs} +2 -2
  8. package/dist/{index-CUJ6faw1.mjs → index-BTnlYGaP.mjs} +139 -41
  9. package/dist/{index-D4_LW69g.mjs → index-BeHr5uMY.mjs} +25 -11
  10. package/dist/{index-DKj_0dqB.mjs → index-CaIsj1q7.mjs} +2 -2
  11. package/dist/{index-BlkIz9BQ.cjs → index-DKRU6E-x.cjs} +143 -44
  12. package/dist/{index-HKcuQ_fQ.cjs → index-uPpFZhhr.cjs} +24 -10
  13. package/dist/index.cjs +2 -2
  14. package/dist/index.mjs +2 -2
  15. package/dist/{installTerminalHooks-MWVPJDxV.cjs → installTerminalHooks-CGqopr1A.cjs} +2 -2
  16. package/dist/{installTerminalHooks-B3EGNaJr.mjs → installTerminalHooks-DFmKhCto.mjs} +2 -2
  17. package/dist/lib.cjs +1 -1
  18. package/dist/lib.d.cts +25 -1
  19. package/dist/lib.d.mts +25 -1
  20. package/dist/lib.mjs +1 -1
  21. package/dist/{mcp-CZ1Z6AI5.mjs → mcp-DnKBKXYa.mjs} +2 -2
  22. package/dist/{mcp-DBKk5L6_.cjs → mcp-FlbfMw6_.cjs} +2 -2
  23. package/dist/{runGemini-C3BCKTMp.mjs → runGemini-BsfadDSa.mjs} +9 -5
  24. package/dist/{runGemini-BRUmjZgV.cjs → runGemini-DYawZQTu.cjs} +9 -5
  25. package/dist/{runOpenClaw-o1ImBlcJ.cjs → runOpenClaw-C2XjFP2m.cjs} +3 -3
  26. package/dist/{runOpenClaw-DEYzcGSV.mjs → runOpenClaw-xGtbJ7f8.mjs} +3 -3
  27. package/dist/{send-B9fh96vR.cjs → send-B0Wojz18.cjs} +2 -2
  28. package/dist/{send-DFGH_-s_.mjs → send-DRZppEr2.mjs} +2 -2
  29. package/dist/{sessions-CKVfXHyi.mjs → sessions-BuMgxuxd.mjs} +11 -4
  30. package/dist/{sessions-BNyEJ2_6.cjs → sessions-CTuUV0TW.cjs} +11 -4
  31. package/dist/{spawn-xPV7-s4S.cjs → spawn-7U_4QTHw.cjs} +2 -2
  32. package/dist/{spawn-B6kP4YjA.mjs → spawn-BRdfNDsu.mjs} +2 -2
  33. package/dist/{types-7ZSxm6Pi.cjs → types-Jag0GwhO.cjs} +209 -41
  34. package/dist/{types-Di0o0BdV.mjs → types-q7wtjfxb.mjs} +208 -41
  35. package/package.json +7 -7
package/dist/lib.d.mts CHANGED
@@ -137,6 +137,10 @@ declare const sessionEnvelopeSchema: z.ZodObject<{
137
137
  totalTokens: z.ZodOptional<z.ZodNumber>;
138
138
  durationMs: z.ZodOptional<z.ZodNumber>;
139
139
  summary: z.ZodOptional<z.ZodString>;
140
+ }, z.core.$strip>, z.ZodObject<{
141
+ t: z.ZodLiteral<"queue-cancel">;
142
+ targetLocalKeys: z.ZodArray<z.ZodString>;
143
+ reason: z.ZodOptional<z.ZodString>;
140
144
  }, z.core.$strip>], "t">;
141
145
  }, z.core.$strip>;
142
146
  type SessionEnvelope = z.infer<typeof sessionEnvelopeSchema>;
@@ -922,8 +926,24 @@ declare class ApiSessionClient extends EventEmitter {
922
926
  private connectSessionRelay;
923
927
  private pushCommittedMessagesToRelay;
924
928
  private enqueueMessage;
929
+ /** B-332: emit a queue-cancel tombstone, mirroring the web's own signal. */
930
+ sendQueueCancelReason(localKeys: string[], reason: 'cleared' | 'aborted' | 'restarted'): void;
925
931
  /**
926
- * Send message to session
932
+ * B-332 site ③: find queued user input this wrapper destroyed (it was still
933
+ * in the previous wrapper's in-memory queue when it died) and tell the web.
934
+ *
935
+ * Walks NEWEST → OLDEST via `before_seq`, decrypting each page, and stops at
936
+ * the first turn-end. The runner calls this on EVERY reconnect (runClaude /
937
+ * runCodex), seeded or not: a cursor seeded at the server's latest seq skips
938
+ * the undelivered tail just as thoroughly as skipExistingMessages does —
939
+ * and the daemon's resume/restart always seeds, so gating on the skip path
940
+ * would miss the common case. Best-effort: a failed scan must not take a
941
+ * session down. Needs no socket; POSTs through the same session-message
942
+ * channel so the web receives it identically to a cancel-button tombstone.
943
+ */
944
+ cancelUndeliveredQueuedInputs(): Promise<void>;
945
+ /**
946
+ * Send a message to session
927
947
  * @param body - Message body (can be MessageContent or raw content for agent messages)
928
948
  */
929
949
  sendClaudeSessionMessage(body: RawJSONLines, opts?: {
@@ -1296,6 +1316,10 @@ declare class ApiMachineClient {
1296
1316
  private keepAliveInterval;
1297
1317
  private lastKnownCLIAvailability;
1298
1318
  private lastKnownResumeSupport;
1319
+ /** Wall-clock of the last CLI availability probe. Initialised as "already
1320
+ * stale" so the FIRST keep-alive tick always probes and populates the
1321
+ * machine metadata that a connecting/reconnecting web client reads. */
1322
+ private lastCliProbeAt;
1299
1323
  private cliUpdateState;
1300
1324
  private cliUpdatePushChain;
1301
1325
  private claudeAuthState;
package/dist/lib.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-Di0o0BdV.mjs';
1
+ export { A as ApiClient, a as ApiSessionClient, R as RawJSONLinesSchema, c as configuration, l as logger } from './types-q7wtjfxb.mjs';
2
2
  import 'axios';
3
3
  import 'chalk';
4
4
  import 'node:util';
@@ -1,9 +1,9 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
3
  import { z } from 'zod';
4
- import { p as pushClipboardViaDaemon, k as setTerminalTitleViaDaemon, m as registerAssistantSessionTools } from './index-CUJ6faw1.mjs';
4
+ import { p as pushClipboardViaDaemon, k as setTerminalTitleViaDaemon, m as registerAssistantSessionTools } from './index-BTnlYGaP.mjs';
5
5
  import { C as CLIPBOARD_TOOL_NAME, a as CLIPBOARD_TOOL_TITLE, b as CLIPBOARD_TOOL_DESCRIPTION, c as CLIPBOARD_MAX_BYTES } from './limits-CwFb5S2b.mjs';
6
- import { l as logger } from './types-Di0o0BdV.mjs';
6
+ import { l as logger } from './types-q7wtjfxb.mjs';
7
7
  import 'node:fs/promises';
8
8
  import 'node:os';
9
9
  import 'node:crypto';
@@ -3,9 +3,9 @@
3
3
  var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
4
4
  var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
5
5
  var z = require('zod');
6
- var index = require('./index-BlkIz9BQ.cjs');
6
+ var index = require('./index-DKRU6E-x.cjs');
7
7
  var limits = require('./limits-KdWKmwtH.cjs');
8
- var persistence = require('./types-7ZSxm6Pi.cjs');
8
+ var persistence = require('./types-Jag0GwhO.cjs');
9
9
  require('node:fs/promises');
10
10
  require('node:os');
11
11
  require('node:crypto');
@@ -2,10 +2,10 @@ import { useStdout, useInput, Box, Text, render } from 'ink';
2
2
  import React, { useState, useRef, useEffect, useCallback } from 'react';
3
3
  import { randomUUID } from 'node:crypto';
4
4
  import { join } from 'node:path';
5
- import { l as logger, d as connectionState, A as ApiClient, e as readSettings, h as errorLogMetadata, f as encodeBase64, p as projectPath, g as contentLogMetadata } from './types-Di0o0BdV.mjs';
6
- import { I as GEMINI_API_KEY_ENV, J as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, C as BasePermissionHandler, K as BaseReasoningProcessor, n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, y as hashObject, L as MessageBuffer, N as CHANGE_TITLE_INSTRUCTION, B as registerKillSessionHandler, z as startHappyServer } from './index-CUJ6faw1.mjs';
7
- import { A as AcpBackend } from './AcpBackend-DiIJaJWG.mjs';
8
- import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-CGDxsTZg.mjs';
5
+ import { l as logger, d as connectionState, A as ApiClient, e as readSettings, h as errorLogMetadata, f as encodeBase64, p as projectPath, g as contentLogMetadata } from './types-q7wtjfxb.mjs';
6
+ import { J as GEMINI_API_KEY_ENV, K as GOOGLE_API_KEY_ENV, G as GEMINI_MODEL_ENV, E as BasePermissionHandler, L as BaseReasoningProcessor, n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, y as MessageQueue2, z as hashObject, N as MessageBuffer, O as CHANGE_TITLE_INSTRUCTION, C as registerKillSessionHandler, B as startHappyServer } from './index-BTnlYGaP.mjs';
7
+ import { A as AcpBackend } from './AcpBackend-pgDnK76l.mjs';
8
+ import { readGeminiLocalConfig, determineGeminiModel, getGeminiModelSource, getInitialGeminiModel, saveGeminiModelToConfig } from './config-BTEW041n.mjs';
9
9
  import 'axios';
10
10
  import 'chalk';
11
11
  import 'node:util';
@@ -960,6 +960,10 @@ async function runGemini(opts) {
960
960
  permissionMode: mode.permissionMode,
961
961
  model: mode.model
962
962
  }));
963
+ messageQueue.setOnDiscard((entries) => {
964
+ const keys = entries.map((entry) => entry.sourceId).filter((key) => typeof key === "string");
965
+ if (keys.length > 0) session.sendQueueCancelReason(keys, entries[0].reason);
966
+ });
963
967
  const conversationHistory = new ConversationHistory({ maxMessages: 20, maxCharacters: 5e4 });
964
968
  let currentPermissionMode = void 0;
965
969
  let currentModel = void 0;
@@ -1010,7 +1014,7 @@ async function runGemini(opts) {
1010
1014
  originalUserMessage
1011
1015
  // Store original message separately
1012
1016
  };
1013
- messageQueue.push(fullPrompt, mode);
1017
+ messageQueue.push(fullPrompt, mode, void 0, message.localKey);
1014
1018
  conversationHistory.addUserMessage(originalUserMessage);
1015
1019
  });
1016
1020
  let thinking = false;
@@ -4,10 +4,10 @@ var ink = require('ink');
4
4
  var React = require('react');
5
5
  var node_crypto = require('node:crypto');
6
6
  var path = require('node:path');
7
- var persistence = require('./types-7ZSxm6Pi.cjs');
8
- var index = require('./index-BlkIz9BQ.cjs');
9
- var AcpBackend = require('./AcpBackend-tou8FQXI.cjs');
10
- var config = require('./config-CEbOao_0.cjs');
7
+ var persistence = require('./types-Jag0GwhO.cjs');
8
+ var index = require('./index-DKRU6E-x.cjs');
9
+ var AcpBackend = require('./AcpBackend-YPVwACkW.cjs');
10
+ var config = require('./config-rQdv_Yr0.cjs');
11
11
  require('axios');
12
12
  require('chalk');
13
13
  require('node:util');
@@ -962,6 +962,10 @@ async function runGemini(opts) {
962
962
  permissionMode: mode.permissionMode,
963
963
  model: mode.model
964
964
  }));
965
+ messageQueue.setOnDiscard((entries) => {
966
+ const keys = entries.map((entry) => entry.sourceId).filter((key) => typeof key === "string");
967
+ if (keys.length > 0) session.sendQueueCancelReason(keys, entries[0].reason);
968
+ });
965
969
  const conversationHistory = new ConversationHistory({ maxMessages: 20, maxCharacters: 5e4 });
966
970
  let currentPermissionMode = void 0;
967
971
  let currentModel = void 0;
@@ -1012,7 +1016,7 @@ async function runGemini(opts) {
1012
1016
  originalUserMessage
1013
1017
  // Store original message separately
1014
1018
  };
1015
- messageQueue.push(fullPrompt, mode);
1019
+ messageQueue.push(fullPrompt, mode, void 0, message.localKey);
1016
1020
  conversationHistory.addUserMessage(originalUserMessage);
1017
1021
  });
1018
1022
  let thinking = false;
@@ -5,9 +5,9 @@ var node_child_process = require('node:child_process');
5
5
  var os = require('node:os');
6
6
  var node_fs = require('node:fs');
7
7
  var path = require('node:path');
8
- var persistence = require('./types-7ZSxm6Pi.cjs');
9
- var AcpSessionManager = require('./AcpSessionManager-fF_HFB98.cjs');
10
- var index = require('./index-BlkIz9BQ.cjs');
8
+ var persistence = require('./types-Jag0GwhO.cjs');
9
+ var AcpSessionManager = require('./AcpSessionManager-6rypahwH.cjs');
10
+ var index = require('./index-DKRU6E-x.cjs');
11
11
  var WebSocket = require('ws');
12
12
  var ed = require('@noble/ed25519');
13
13
  var sha2_js = require('@noble/hashes/sha2.js');
@@ -3,9 +3,9 @@ import { execFileSync } from 'node:child_process';
3
3
  import os from 'node:os';
4
4
  import { existsSync, readFileSync } from 'node:fs';
5
5
  import { join } from 'node:path';
6
- import { m as ensurePrivateDirectorySync, n as hardenPrivateFileSync, w as writePrivateFileSync, h as errorLogMetadata, g as contentLogMetadata, d as connectionState, A as ApiClient, e as readSettings, f as encodeBase64, l as logger, c as configuration } from './types-Di0o0BdV.mjs';
7
- import { A as AcpSessionManager } from './AcpSessionManager-CZ0Az0GG.mjs';
8
- import { n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, x as MessageQueue2, B as registerKillSessionHandler } from './index-CUJ6faw1.mjs';
6
+ import { m as ensurePrivateDirectorySync, n as hardenPrivateFileSync, w as writePrivateFileSync, h as errorLogMetadata, g as contentLogMetadata, d as connectionState, A as ApiClient, e as readSettings, f as encodeBase64, l as logger, c as configuration } from './types-q7wtjfxb.mjs';
7
+ import { A as AcpSessionManager } from './AcpSessionManager-Bq5Tiky1.mjs';
8
+ import { n as initialMachineMetadata, o as createSessionMetadata, u as setupOfflineReconnection, v as notifyDaemonSessionStarted, y as MessageQueue2, C as registerKillSessionHandler } from './index-BTnlYGaP.mjs';
9
9
  import WebSocket from 'ws';
10
10
  import * as ed from '@noble/ed25519';
11
11
  import { sha512 } from '@noble/hashes/sha2.js';
@@ -3,8 +3,8 @@
3
3
  var chalk = require('chalk');
4
4
  var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var persistence = require('./types-7ZSxm6Pi.cjs');
7
- var index = require('./index-BlkIz9BQ.cjs');
6
+ var persistence = require('./types-Jag0GwhO.cjs');
7
+ var index = require('./index-DKRU6E-x.cjs');
8
8
  require('axios');
9
9
  require('node:util');
10
10
  require('node:os');
@@ -1,8 +1,8 @@
1
1
  import chalk from 'chalk';
2
2
  import { readFileSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import { r as readPersistedSessions, c as configuration } from './types-Di0o0BdV.mjs';
5
- import { d as sendUserMessage, a as sessionWebUrl } from './index-CUJ6faw1.mjs';
4
+ import { r as readPersistedSessions, c as configuration } from './types-q7wtjfxb.mjs';
5
+ import { d as sendUserMessage, a as sessionWebUrl } from './index-BTnlYGaP.mjs';
6
6
  import 'axios';
7
7
  import 'node:util';
8
8
  import 'node:os';
@@ -1,6 +1,6 @@
1
1
  import chalk from 'chalk';
2
- import { D as DEFAULT_RECENT_LIMIT, M as MAX_READ_LIMIT, l as listAccountSessions, e as listSessions, r as readSessionTranscript, f as stopSession, g as resolvePermissionRequest, h as archiveSession } from './index-CUJ6faw1.mjs';
3
- import { i as isValidSessionId } from './types-Di0o0BdV.mjs';
2
+ import { D as DEFAULT_RECENT_LIMIT, M as MAX_READ_LIMIT, l as listAccountSessions, e as listSessions, r as readSessionTranscript, f as stopSession, g as resolvePermissionRequest, h as archiveSession } from './index-BTnlYGaP.mjs';
3
+ import { i as isValidSessionId } from './types-q7wtjfxb.mjs';
4
4
  import 'node:os';
5
5
  import 'node:crypto';
6
6
  import 'cross-spawn';
@@ -286,14 +286,21 @@ async function handleSessionsCommand(args) {
286
286
  const verdict = options.action === "approve" ? { kind: "approve", forSession: options.forSession } : { kind: "deny", reason: options.reason };
287
287
  let result;
288
288
  try {
289
- result = await resolvePermissionRequest(sessionId, requestId, verdict);
289
+ result = await resolvePermissionRequest(sessionId, requestId, verdict, {
290
+ // T-014: a rate refusal waits (bounded) before re-sending;
291
+ // say so on stderr so the wait does not look like a hang.
292
+ onRateLimited: ({ attempt, waitMs, serverError }) => {
293
+ console.error(chalk.yellow("Rate limited:"), `${serverError} \u2014 waiting ${Math.ceil(waitMs / 1e3)}s before retry ${attempt}`);
294
+ }
295
+ });
290
296
  } catch (error) {
291
297
  if (options.json) console.log(JSON.stringify(permissionFailureRecord(sessionId, requestId, error)));
292
298
  throw error;
293
299
  }
294
300
  if (result.outcome.status !== "acknowledged") {
295
301
  if (options.json) console.log(JSON.stringify(result));
296
- console.error(chalk.red("Error:"), `${options.action} of ${requestId} on ${sessionId} was not delivered (${result.outcome.status}): ${result.outcome.message}`);
302
+ const hint = result.outcome.status === "rate-limited" ? ` \u2014 the request is still pending; re-run in ~${Math.ceil(result.outcome.retryAfterMs / 1e3)}s` : "";
303
+ console.error(chalk.red("Error:"), `${options.action} of ${requestId} on ${sessionId} was not delivered (${result.outcome.status}): ${result.outcome.message}${hint}`);
297
304
  process.exit(1);
298
305
  }
299
306
  if (options.json) {
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
- var index = require('./index-BlkIz9BQ.cjs');
5
- var persistence = require('./types-7ZSxm6Pi.cjs');
4
+ var index = require('./index-DKRU6E-x.cjs');
5
+ var persistence = require('./types-Jag0GwhO.cjs');
6
6
  require('node:os');
7
7
  require('node:crypto');
8
8
  require('cross-spawn');
@@ -288,14 +288,21 @@ async function handleSessionsCommand(args) {
288
288
  const verdict = options.action === "approve" ? { kind: "approve", forSession: options.forSession } : { kind: "deny", reason: options.reason };
289
289
  let result;
290
290
  try {
291
- result = await index.resolvePermissionRequest(sessionId, requestId, verdict);
291
+ result = await index.resolvePermissionRequest(sessionId, requestId, verdict, {
292
+ // T-014: a rate refusal waits (bounded) before re-sending;
293
+ // say so on stderr so the wait does not look like a hang.
294
+ onRateLimited: ({ attempt, waitMs, serverError }) => {
295
+ console.error(chalk.yellow("Rate limited:"), `${serverError} \u2014 waiting ${Math.ceil(waitMs / 1e3)}s before retry ${attempt}`);
296
+ }
297
+ });
292
298
  } catch (error) {
293
299
  if (options.json) console.log(JSON.stringify(permissionFailureRecord(sessionId, requestId, error)));
294
300
  throw error;
295
301
  }
296
302
  if (result.outcome.status !== "acknowledged") {
297
303
  if (options.json) console.log(JSON.stringify(result));
298
- console.error(chalk.red("Error:"), `${options.action} of ${requestId} on ${sessionId} was not delivered (${result.outcome.status}): ${result.outcome.message}`);
304
+ const hint = result.outcome.status === "rate-limited" ? ` \u2014 the request is still pending; re-run in ~${Math.ceil(result.outcome.retryAfterMs / 1e3)}s` : "";
305
+ console.error(chalk.red("Error:"), `${options.action} of ${requestId} on ${sessionId} was not delivered (${result.outcome.status}): ${result.outcome.message}${hint}`);
299
306
  process.exit(1);
300
307
  }
301
308
  if (options.json) {
@@ -3,8 +3,8 @@
3
3
  var chalk = require('chalk');
4
4
  var node_fs = require('node:fs');
5
5
  var path = require('node:path');
6
- var index = require('./index-BlkIz9BQ.cjs');
7
- var persistence = require('./types-7ZSxm6Pi.cjs');
6
+ var index = require('./index-DKRU6E-x.cjs');
7
+ var persistence = require('./types-Jag0GwhO.cjs');
8
8
  require('node:os');
9
9
  require('node:crypto');
10
10
  require('cross-spawn');
@@ -1,8 +1,8 @@
1
1
  import chalk from 'chalk';
2
2
  import { readFileSync, statSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, i as isValidSpawnOrigin, b as sanitizeSpawnPermissionMode, A as ALLOWED_SPAWN_PERMISSION_MODES, S as SPAWN_AGENTS, w as waitForSessionKey, d as sendUserMessage } from './index-CUJ6faw1.mjs';
5
- import { l as logger } from './types-Di0o0BdV.mjs';
4
+ import { c as checkIfDaemonRunningAndCleanupStaleState, s as spawnDaemonSession, a as sessionWebUrl, i as isValidSpawnOrigin, b as sanitizeSpawnPermissionMode, A as ALLOWED_SPAWN_PERMISSION_MODES, S as SPAWN_AGENTS, w as waitForSessionKey, d as sendUserMessage } from './index-BTnlYGaP.mjs';
5
+ import { l as logger } from './types-q7wtjfxb.mjs';
6
6
  import 'node:os';
7
7
  import 'node:crypto';
8
8
  import 'cross-spawn';