diff --git a/extensions/bluebubbles/index.ts b/extensions/bluebubbles/index.ts index 2af6a906c..0fe0bddba 100644 --- a/extensions/bluebubbles/index.ts +++ b/extensions/bluebubbles/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { bluebubblesPlugin } from "./src/channel.js"; import { handleBlueBubblesWebhookRequest } from "./src/monitor.js"; diff --git a/extensions/bluebubbles/src/accounts.ts b/extensions/bluebubbles/src/accounts.ts index 36d7d5946..4d100b520 100644 --- a/extensions/bluebubbles/src/accounts.ts +++ b/extensions/bluebubbles/src/accounts.ts @@ -1,5 +1,5 @@ -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "moltbot/plugin-sdk"; import { normalizeBlueBubblesServerUrl, type BlueBubblesAccountConfig } from "./types.js"; export type ResolvedBlueBubblesAccount = { diff --git a/extensions/bluebubbles/src/actions.test.ts b/extensions/bluebubbles/src/actions.test.ts index 3ae97b8d1..112294c67 100644 --- a/extensions/bluebubbles/src/actions.test.ts +++ b/extensions/bluebubbles/src/actions.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it, vi, beforeEach } from "vitest"; import { bluebubblesMessageActions } from "./actions.js"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; vi.mock("./accounts.js", () => ({ resolveBlueBubblesAccount: vi.fn(({ cfg, accountId }) => { diff --git a/extensions/bluebubbles/src/actions.ts b/extensions/bluebubbles/src/actions.ts index 6371e3e7c..63b1778d5 100644 --- a/extensions/bluebubbles/src/actions.ts +++ b/extensions/bluebubbles/src/actions.ts @@ -10,7 +10,7 @@ import { type ChannelMessageActionName, type ChannelToolSend, type MoltbotConfig, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { resolveBlueBubblesAccount } from "./accounts.js"; import { resolveBlueBubblesMessageId } from "./monitor.js"; diff --git a/extensions/bluebubbles/src/attachments.ts b/extensions/bluebubbles/src/attachments.ts index f49705fe4..3454f79cc 100644 --- a/extensions/bluebubbles/src/attachments.ts +++ b/extensions/bluebubbles/src/attachments.ts @@ -1,6 +1,6 @@ import crypto from "node:crypto"; import path from "node:path"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import { resolveBlueBubblesAccount } from "./accounts.js"; import { resolveChatGuidForTarget } from "./send.js"; import { parseBlueBubblesTarget, normalizeBlueBubblesHandle } from "./targets.js"; diff --git a/extensions/bluebubbles/src/channel.ts b/extensions/bluebubbles/src/channel.ts index f88662dbb..2e2888bda 100644 --- a/extensions/bluebubbles/src/channel.ts +++ b/extensions/bluebubbles/src/channel.ts @@ -1,4 +1,4 @@ -import type { ChannelAccountSnapshot, ChannelPlugin, MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { ChannelAccountSnapshot, ChannelPlugin, MoltbotConfig } from "moltbot/plugin-sdk"; import { applyAccountNameToChannelSection, buildChannelConfigSchema, @@ -12,7 +12,7 @@ import { resolveBlueBubblesGroupRequireMention, resolveBlueBubblesGroupToolPolicy, setAccountEnabledInConfigSection, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listBlueBubblesAccountIds, diff --git a/extensions/bluebubbles/src/chat.ts b/extensions/bluebubbles/src/chat.ts index 8f079df90..27edceac9 100644 --- a/extensions/bluebubbles/src/chat.ts +++ b/extensions/bluebubbles/src/chat.ts @@ -1,6 +1,6 @@ import crypto from "node:crypto"; import { resolveBlueBubblesAccount } from "./accounts.js"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import { blueBubblesFetchWithTimeout, buildBlueBubblesApiUrl } from "./types.js"; export type BlueBubblesChatOpts = { diff --git a/extensions/bluebubbles/src/config-schema.ts b/extensions/bluebubbles/src/config-schema.ts index dc532e979..11d148b2d 100644 --- a/extensions/bluebubbles/src/config-schema.ts +++ b/extensions/bluebubbles/src/config-schema.ts @@ -1,4 +1,4 @@ -import { MarkdownConfigSchema, ToolPolicySchema } from "clawdbot/plugin-sdk"; +import { MarkdownConfigSchema, ToolPolicySchema } from "moltbot/plugin-sdk"; import { z } from "zod"; const allowFromEntry = z.union([z.string(), z.number()]); diff --git a/extensions/bluebubbles/src/media-send.ts b/extensions/bluebubbles/src/media-send.ts index 792b0654e..87af8c751 100644 --- a/extensions/bluebubbles/src/media-send.ts +++ b/extensions/bluebubbles/src/media-send.ts @@ -1,7 +1,7 @@ import path from "node:path"; import { fileURLToPath } from "node:url"; -import { resolveChannelMediaMaxBytes, type MoltbotConfig } from "clawdbot/plugin-sdk"; +import { resolveChannelMediaMaxBytes, type MoltbotConfig } from "moltbot/plugin-sdk"; import { sendBlueBubblesAttachment } from "./attachments.js"; import { resolveBlueBubblesMessageId } from "./monitor.js"; diff --git a/extensions/bluebubbles/src/monitor.test.ts b/extensions/bluebubbles/src/monitor.test.ts index 2ae335cd2..79bdf8cc5 100644 --- a/extensions/bluebubbles/src/monitor.test.ts +++ b/extensions/bluebubbles/src/monitor.test.ts @@ -2,8 +2,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { IncomingMessage, ServerResponse } from "node:http"; import { EventEmitter } from "node:events"; -import { removeAckReactionAfterReply, shouldAckReaction } from "clawdbot/plugin-sdk"; -import type { MoltbotConfig, PluginRuntime } from "clawdbot/plugin-sdk"; +import { removeAckReactionAfterReply, shouldAckReaction } from "moltbot/plugin-sdk"; +import type { MoltbotConfig, PluginRuntime } from "moltbot/plugin-sdk"; import { handleBlueBubblesWebhookRequest, registerBlueBubblesWebhookTarget, diff --git a/extensions/bluebubbles/src/monitor.ts b/extensions/bluebubbles/src/monitor.ts index d890db8e8..403333038 100644 --- a/extensions/bluebubbles/src/monitor.ts +++ b/extensions/bluebubbles/src/monitor.ts @@ -1,13 +1,13 @@ import type { IncomingMessage, ServerResponse } from "node:http"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import { logAckFailure, logInboundDrop, logTypingFailure, resolveAckReaction, resolveControlCommandGate, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { markBlueBubblesChatRead, sendBlueBubblesTyping } from "./chat.js"; import { resolveChatGuidForTarget, sendMessageBlueBubbles } from "./send.js"; import { downloadBlueBubblesAttachment } from "./attachments.js"; diff --git a/extensions/bluebubbles/src/onboarding.ts b/extensions/bluebubbles/src/onboarding.ts index b38c3e3c9..ddff9b0d0 100644 --- a/extensions/bluebubbles/src/onboarding.ts +++ b/extensions/bluebubbles/src/onboarding.ts @@ -4,14 +4,14 @@ import type { MoltbotConfig, DmPolicy, WizardPrompter, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { DEFAULT_ACCOUNT_ID, addWildcardAllowFrom, formatDocsLink, normalizeAccountId, promptAccountId, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listBlueBubblesAccountIds, resolveBlueBubblesAccount, diff --git a/extensions/bluebubbles/src/reactions.ts b/extensions/bluebubbles/src/reactions.ts index 7fd4e251f..0b38cd756 100644 --- a/extensions/bluebubbles/src/reactions.ts +++ b/extensions/bluebubbles/src/reactions.ts @@ -1,5 +1,5 @@ import { resolveBlueBubblesAccount } from "./accounts.js"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import { blueBubblesFetchWithTimeout, buildBlueBubblesApiUrl } from "./types.js"; export type BlueBubblesReactionOpts = { diff --git a/extensions/bluebubbles/src/runtime.ts b/extensions/bluebubbles/src/runtime.ts index cf97ba4ae..59222241e 100644 --- a/extensions/bluebubbles/src/runtime.ts +++ b/extensions/bluebubbles/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/bluebubbles/src/send.ts b/extensions/bluebubbles/src/send.ts index 57beb8360..fb8dee5f2 100644 --- a/extensions/bluebubbles/src/send.ts +++ b/extensions/bluebubbles/src/send.ts @@ -6,7 +6,7 @@ import { normalizeBlueBubblesHandle, parseBlueBubblesTarget, } from "./targets.js"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import { blueBubblesFetchWithTimeout, buildBlueBubblesApiUrl, diff --git a/extensions/copilot-proxy/index.ts b/extensions/copilot-proxy/index.ts index 7c68410e7..1518fd09e 100644 --- a/extensions/copilot-proxy/index.ts +++ b/extensions/copilot-proxy/index.ts @@ -1,4 +1,4 @@ -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; const DEFAULT_BASE_URL = "http://localhost:3000/v1"; const DEFAULT_API_KEY = "n/a"; diff --git a/extensions/diagnostics-otel/index.ts b/extensions/diagnostics-otel/index.ts index c464d4a1b..c6f9a21f9 100644 --- a/extensions/diagnostics-otel/index.ts +++ b/extensions/diagnostics-otel/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { createDiagnosticsOtelService } from "./src/service.js"; diff --git a/extensions/diagnostics-otel/src/service.test.ts b/extensions/diagnostics-otel/src/service.test.ts index 53e83f31b..088326a11 100644 --- a/extensions/diagnostics-otel/src/service.test.ts +++ b/extensions/diagnostics-otel/src/service.test.ts @@ -95,8 +95,8 @@ vi.mock("@opentelemetry/semantic-conventions", () => ({ }, })); -vi.mock("clawdbot/plugin-sdk", async () => { - const actual = await vi.importActual("clawdbot/plugin-sdk"); +vi.mock("moltbot/plugin-sdk", async () => { + const actual = await vi.importActual("moltbot/plugin-sdk"); return { ...actual, registerLogTransport: registerLogTransportMock, @@ -104,7 +104,7 @@ vi.mock("clawdbot/plugin-sdk", async () => { }); import { createDiagnosticsOtelService } from "./service.js"; -import { emitDiagnosticEvent } from "clawdbot/plugin-sdk"; +import { emitDiagnosticEvent } from "moltbot/plugin-sdk"; describe("diagnostics-otel service", () => { beforeEach(() => { diff --git a/extensions/diagnostics-otel/src/service.ts b/extensions/diagnostics-otel/src/service.ts index f8c022b88..26b4ebb45 100644 --- a/extensions/diagnostics-otel/src/service.ts +++ b/extensions/diagnostics-otel/src/service.ts @@ -10,8 +10,8 @@ import { NodeSDK } from "@opentelemetry/sdk-node"; import { ParentBasedSampler, TraceIdRatioBasedSampler } from "@opentelemetry/sdk-trace-base"; import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions"; -import type { MoltbotPluginService, DiagnosticEventPayload } from "clawdbot/plugin-sdk"; -import { onDiagnosticEvent, registerLogTransport } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginService, DiagnosticEventPayload } from "moltbot/plugin-sdk"; +import { onDiagnosticEvent, registerLogTransport } from "moltbot/plugin-sdk"; const DEFAULT_SERVICE_NAME = "moltbot"; diff --git a/extensions/discord/index.ts b/extensions/discord/index.ts index 1c3396ff8..5654b4a38 100644 --- a/extensions/discord/index.ts +++ b/extensions/discord/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { discordPlugin } from "./src/channel.js"; import { setDiscordRuntime } from "./src/runtime.js"; diff --git a/extensions/discord/src/channel.ts b/extensions/discord/src/channel.ts index f2dea61d4..a91cb7d49 100644 --- a/extensions/discord/src/channel.ts +++ b/extensions/discord/src/channel.ts @@ -25,7 +25,7 @@ import { type ChannelMessageActionAdapter, type ChannelPlugin, type ResolvedDiscordAccount, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { getDiscordRuntime } from "./runtime.js"; diff --git a/extensions/discord/src/runtime.ts b/extensions/discord/src/runtime.ts index 3e963091c..6fb0abe12 100644 --- a/extensions/discord/src/runtime.ts +++ b/extensions/discord/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/google-antigravity-auth/index.ts b/extensions/google-antigravity-auth/index.ts index cd9e00b1a..3d4384e2a 100644 --- a/extensions/google-antigravity-auth/index.ts +++ b/extensions/google-antigravity-auth/index.ts @@ -1,7 +1,7 @@ import { createHash, randomBytes } from "node:crypto"; import { readFileSync } from "node:fs"; import { createServer } from "node:http"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; // OAuth constants - decoded from pi-ai's base64 encoded values to stay in sync const decode = (s: string) => Buffer.from(s, "base64").toString(); diff --git a/extensions/google-gemini-cli-auth/index.ts b/extensions/google-gemini-cli-auth/index.ts index 56251dabd..8f20edd58 100644 --- a/extensions/google-gemini-cli-auth/index.ts +++ b/extensions/google-gemini-cli-auth/index.ts @@ -1,4 +1,4 @@ -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { loginGeminiCliOAuth } from "./oauth.js"; @@ -6,8 +6,8 @@ const PROVIDER_ID = "google-gemini-cli"; const PROVIDER_LABEL = "Gemini CLI OAuth"; const DEFAULT_MODEL = "google-gemini-cli/gemini-3-pro-preview"; const ENV_VARS = [ - "CLAWDBOT_GEMINI_OAUTH_CLIENT_ID", - "CLAWDBOT_GEMINI_OAUTH_CLIENT_SECRET", + "MOLTBOT_GEMINI_OAUTH_CLIENT_ID", + "MOLTBOT_GEMINI_OAUTH_CLIENT_SECRET", "GEMINI_CLI_OAUTH_CLIENT_ID", "GEMINI_CLI_OAUTH_CLIENT_SECRET", ]; diff --git a/extensions/google-gemini-cli-auth/oauth.ts b/extensions/google-gemini-cli-auth/oauth.ts index 0f58bf801..4aa4384f5 100644 --- a/extensions/google-gemini-cli-auth/oauth.ts +++ b/extensions/google-gemini-cli-auth/oauth.ts @@ -3,9 +3,9 @@ import { existsSync, readFileSync, readdirSync, realpathSync } from "node:fs"; import { createServer } from "node:http"; import { delimiter, dirname, join } from "node:path"; -const CLIENT_ID_KEYS = ["CLAWDBOT_GEMINI_OAUTH_CLIENT_ID", "GEMINI_CLI_OAUTH_CLIENT_ID"]; +const CLIENT_ID_KEYS = ["MOLTBOT_GEMINI_OAUTH_CLIENT_ID", "GEMINI_CLI_OAUTH_CLIENT_ID"]; const CLIENT_SECRET_KEYS = [ - "CLAWDBOT_GEMINI_OAUTH_CLIENT_SECRET", + "MOLTBOT_GEMINI_OAUTH_CLIENT_SECRET", "GEMINI_CLI_OAUTH_CLIENT_SECRET", ]; const REDIRECT_URI = "http://localhost:8085/oauth2callback"; diff --git a/extensions/googlechat/index.ts b/extensions/googlechat/index.ts index 877b1099b..190d13ce4 100644 --- a/extensions/googlechat/index.ts +++ b/extensions/googlechat/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { googlechatDock, googlechatPlugin } from "./src/channel.js"; import { handleGoogleChatWebhookRequest } from "./src/monitor.js"; diff --git a/extensions/googlechat/src/accounts.ts b/extensions/googlechat/src/accounts.ts index efe6c4a75..f2f0f4ec5 100644 --- a/extensions/googlechat/src/accounts.ts +++ b/extensions/googlechat/src/accounts.ts @@ -1,5 +1,5 @@ -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "moltbot/plugin-sdk"; import type { GoogleChatAccountConfig, GoogleChatConfig } from "./types.config.js"; diff --git a/extensions/googlechat/src/actions.ts b/extensions/googlechat/src/actions.ts index 3c6a260e3..e951e44f5 100644 --- a/extensions/googlechat/src/actions.ts +++ b/extensions/googlechat/src/actions.ts @@ -2,14 +2,14 @@ import type { ChannelMessageActionAdapter, ChannelMessageActionName, MoltbotConfig, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { createActionGate, jsonResult, readNumberParam, readReactionParams, readStringParam, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listEnabledGoogleChatAccounts, resolveGoogleChatAccount } from "./accounts.js"; import { diff --git a/extensions/googlechat/src/channel.ts b/extensions/googlechat/src/channel.ts index eaa922767..e218b9a3b 100644 --- a/extensions/googlechat/src/channel.ts +++ b/extensions/googlechat/src/channel.ts @@ -16,8 +16,8 @@ import { type ChannelMessageActionAdapter, type ChannelPlugin, type MoltbotConfig, -} from "clawdbot/plugin-sdk"; -import { GoogleChatConfigSchema } from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; +import { GoogleChatConfigSchema } from "moltbot/plugin-sdk"; import { listGoogleChatAccountIds, diff --git a/extensions/googlechat/src/monitor.ts b/extensions/googlechat/src/monitor.ts index 95874027b..b7538af1e 100644 --- a/extensions/googlechat/src/monitor.ts +++ b/extensions/googlechat/src/monitor.ts @@ -1,7 +1,7 @@ import type { IncomingMessage, ServerResponse } from "node:http"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; -import { resolveMentionGatingWithBypass } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; +import { resolveMentionGatingWithBypass } from "moltbot/plugin-sdk"; import { type ResolvedGoogleChatAccount diff --git a/extensions/googlechat/src/onboarding.ts b/extensions/googlechat/src/onboarding.ts index 95c98ae6b..04940916a 100644 --- a/extensions/googlechat/src/onboarding.ts +++ b/extensions/googlechat/src/onboarding.ts @@ -1,4 +1,4 @@ -import type { MoltbotConfig, DmPolicy } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig, DmPolicy } from "moltbot/plugin-sdk"; import { addWildcardAllowFrom, formatDocsLink, @@ -9,7 +9,7 @@ import { DEFAULT_ACCOUNT_ID, normalizeAccountId, migrateBaseNameToDefaultAccount, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listGoogleChatAccountIds, diff --git a/extensions/googlechat/src/runtime.ts b/extensions/googlechat/src/runtime.ts index 98beb61f9..e6fd8f3ca 100644 --- a/extensions/googlechat/src/runtime.ts +++ b/extensions/googlechat/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/googlechat/src/types.config.ts b/extensions/googlechat/src/types.config.ts index 5dac1559e..e0718c789 100644 --- a/extensions/googlechat/src/types.config.ts +++ b/extensions/googlechat/src/types.config.ts @@ -1,3 +1,3 @@ -import type { GoogleChatAccountConfig, GoogleChatConfig } from "clawdbot/plugin-sdk"; +import type { GoogleChatAccountConfig, GoogleChatConfig } from "moltbot/plugin-sdk"; export type { GoogleChatAccountConfig, GoogleChatConfig }; diff --git a/extensions/imessage/index.ts b/extensions/imessage/index.ts index 43e358be4..f3a8f1e49 100644 --- a/extensions/imessage/index.ts +++ b/extensions/imessage/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { imessagePlugin } from "./src/channel.js"; import { setIMessageRuntime } from "./src/runtime.js"; diff --git a/extensions/imessage/src/channel.ts b/extensions/imessage/src/channel.ts index 556c2970a..74174b233 100644 --- a/extensions/imessage/src/channel.ts +++ b/extensions/imessage/src/channel.ts @@ -21,7 +21,7 @@ import { setAccountEnabledInConfigSection, type ChannelPlugin, type ResolvedIMessageAccount, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { getIMessageRuntime } from "./runtime.js"; diff --git a/extensions/imessage/src/runtime.ts b/extensions/imessage/src/runtime.ts index adb67b012..5921f06fe 100644 --- a/extensions/imessage/src/runtime.ts +++ b/extensions/imessage/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/line/index.ts b/extensions/line/index.ts index e0fcb1dc6..171345d94 100644 --- a/extensions/line/index.ts +++ b/extensions/line/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { linePlugin } from "./src/channel.js"; import { registerLineCardCommand } from "./src/card-command.js"; diff --git a/extensions/line/src/card-command.ts b/extensions/line/src/card-command.ts index e12f32c25..63b6e4a33 100644 --- a/extensions/line/src/card-command.ts +++ b/extensions/line/src/card-command.ts @@ -1,4 +1,4 @@ -import type { MoltbotPluginApi, LineChannelData, ReplyPayload } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi, LineChannelData, ReplyPayload } from "moltbot/plugin-sdk"; import { createActionCard, createImageCard, @@ -7,7 +7,7 @@ import { createReceiptCard, type CardAction, type ListItem, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; const CARD_USAGE = `Usage: /card "title" "body" [options] diff --git a/extensions/line/src/channel.logout.test.ts b/extensions/line/src/channel.logout.test.ts index 034751c8b..d81600275 100644 --- a/extensions/line/src/channel.logout.test.ts +++ b/extensions/line/src/channel.logout.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { MoltbotConfig, PluginRuntime } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig, PluginRuntime } from "moltbot/plugin-sdk"; import { linePlugin } from "./channel.js"; import { setLineRuntime } from "./runtime.js"; diff --git a/extensions/line/src/channel.sendPayload.test.ts b/extensions/line/src/channel.sendPayload.test.ts index 82d10dd74..889e264b4 100644 --- a/extensions/line/src/channel.sendPayload.test.ts +++ b/extensions/line/src/channel.sendPayload.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from "vitest"; -import type { MoltbotConfig, PluginRuntime } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig, PluginRuntime } from "moltbot/plugin-sdk"; import { linePlugin } from "./channel.js"; import { setLineRuntime } from "./runtime.js"; diff --git a/extensions/line/src/channel.ts b/extensions/line/src/channel.ts index a59723809..485435371 100644 --- a/extensions/line/src/channel.ts +++ b/extensions/line/src/channel.ts @@ -8,7 +8,7 @@ import { type LineConfig, type LineChannelData, type ResolvedLineAccount, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { getLineRuntime } from "./runtime.js"; diff --git a/extensions/line/src/runtime.ts b/extensions/line/src/runtime.ts index 5706349c6..2f6038a7a 100644 --- a/extensions/line/src/runtime.ts +++ b/extensions/line/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/matrix/index.ts b/extensions/matrix/index.ts index 61f671ad3..323dd61d3 100644 --- a/extensions/matrix/index.ts +++ b/extensions/matrix/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { matrixPlugin } from "./src/channel.js"; import { setMatrixRuntime } from "./src/runtime.js"; diff --git a/extensions/matrix/src/actions.ts b/extensions/matrix/src/actions.ts index 221a4f72b..949719ebe 100644 --- a/extensions/matrix/src/actions.ts +++ b/extensions/matrix/src/actions.ts @@ -6,7 +6,7 @@ import { type ChannelMessageActionContext, type ChannelMessageActionName, type ChannelToolSend, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { resolveMatrixAccount } from "./matrix/accounts.js"; import { handleMatrixAction } from "./tool-actions.js"; import type { CoreConfig } from "./types.js"; diff --git a/extensions/matrix/src/channel.directory.test.ts b/extensions/matrix/src/channel.directory.test.ts index c83f7121b..584ce7d2b 100644 --- a/extensions/matrix/src/channel.directory.test.ts +++ b/extensions/matrix/src/channel.directory.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it } from "vitest"; -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; import type { CoreConfig } from "./types.js"; import { matrixPlugin } from "./channel.js"; diff --git a/extensions/matrix/src/channel.ts b/extensions/matrix/src/channel.ts index 909f3fac3..dbccccac6 100644 --- a/extensions/matrix/src/channel.ts +++ b/extensions/matrix/src/channel.ts @@ -8,7 +8,7 @@ import { PAIRING_APPROVED_MESSAGE, setAccountEnabledInConfigSection, type ChannelPlugin, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { matrixMessageActions } from "./actions.js"; import { MatrixConfigSchema } from "./config-schema.js"; diff --git a/extensions/matrix/src/config-schema.ts b/extensions/matrix/src/config-schema.ts index 62b327d40..1ca59c65a 100644 --- a/extensions/matrix/src/config-schema.ts +++ b/extensions/matrix/src/config-schema.ts @@ -1,4 +1,4 @@ -import { MarkdownConfigSchema, ToolPolicySchema } from "clawdbot/plugin-sdk"; +import { MarkdownConfigSchema, ToolPolicySchema } from "moltbot/plugin-sdk"; import { z } from "zod"; const allowFromEntry = z.union([z.string(), z.number()]); diff --git a/extensions/matrix/src/directory-live.ts b/extensions/matrix/src/directory-live.ts index bb42e95a0..8f6be60ce 100644 --- a/extensions/matrix/src/directory-live.ts +++ b/extensions/matrix/src/directory-live.ts @@ -1,4 +1,4 @@ -import type { ChannelDirectoryEntry } from "clawdbot/plugin-sdk"; +import type { ChannelDirectoryEntry } from "moltbot/plugin-sdk"; import { resolveMatrixAuth } from "./matrix/client.js"; diff --git a/extensions/matrix/src/group-mentions.ts b/extensions/matrix/src/group-mentions.ts index 084479160..90def5163 100644 --- a/extensions/matrix/src/group-mentions.ts +++ b/extensions/matrix/src/group-mentions.ts @@ -1,4 +1,4 @@ -import type { ChannelGroupContext, GroupToolPolicyConfig } from "clawdbot/plugin-sdk"; +import type { ChannelGroupContext, GroupToolPolicyConfig } from "moltbot/plugin-sdk"; import { resolveMatrixRoomConfig } from "./matrix/monitor/rooms.js"; import type { CoreConfig } from "./types.js"; diff --git a/extensions/matrix/src/matrix/accounts.ts b/extensions/matrix/src/matrix/accounts.ts index 8c95c3f1a..fc554f64f 100644 --- a/extensions/matrix/src/matrix/accounts.ts +++ b/extensions/matrix/src/matrix/accounts.ts @@ -1,4 +1,4 @@ -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "clawdbot/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "moltbot/plugin-sdk"; import type { CoreConfig, MatrixConfig } from "../types.js"; import { resolveMatrixConfig } from "./client.js"; import { credentialsMatchConfig, loadMatrixCredentials } from "./credentials.js"; diff --git a/extensions/matrix/src/matrix/actions/client.ts b/extensions/matrix/src/matrix/actions/client.ts index b9f27640c..0485a02c1 100644 --- a/extensions/matrix/src/matrix/actions/client.ts +++ b/extensions/matrix/src/matrix/actions/client.ts @@ -22,7 +22,7 @@ export async function resolveActionClient( if (opts.client) return { client: opts.client, stopOnDone: false }; const active = getActiveMatrixClient(); if (active) return { client: active, stopOnDone: false }; - const shouldShareClient = Boolean(process.env.CLAWDBOT_GATEWAY_PORT); + const shouldShareClient = Boolean(process.env.MOLTBOT_GATEWAY_PORT); if (shouldShareClient) { const client = await resolveSharedMatrixClient({ cfg: getMatrixRuntime().config.loadConfig() as CoreConfig, diff --git a/extensions/matrix/src/matrix/deps.ts b/extensions/matrix/src/matrix/deps.ts index 5777e43a7..d1591a7f9 100644 --- a/extensions/matrix/src/matrix/deps.ts +++ b/extensions/matrix/src/matrix/deps.ts @@ -3,7 +3,7 @@ import path from "node:path"; import { createRequire } from "node:module"; import { fileURLToPath } from "node:url"; -import type { RuntimeEnv } from "clawdbot/plugin-sdk"; +import type { RuntimeEnv } from "moltbot/plugin-sdk"; import { getMatrixRuntime } from "../runtime.js"; const MATRIX_SDK_PACKAGE = "@vector-im/matrix-bot-sdk"; diff --git a/extensions/matrix/src/matrix/monitor/allowlist.ts b/extensions/matrix/src/matrix/monitor/allowlist.ts index 6fe45c03a..b56f09038 100644 --- a/extensions/matrix/src/matrix/monitor/allowlist.ts +++ b/extensions/matrix/src/matrix/monitor/allowlist.ts @@ -1,4 +1,4 @@ -import type { AllowlistMatch } from "clawdbot/plugin-sdk"; +import type { AllowlistMatch } from "moltbot/plugin-sdk"; function normalizeAllowList(list?: Array) { return (list ?? []).map((entry) => String(entry).trim()).filter(Boolean); diff --git a/extensions/matrix/src/matrix/monitor/auto-join.ts b/extensions/matrix/src/matrix/monitor/auto-join.ts index 5feb5bc3a..ef63d7897 100644 --- a/extensions/matrix/src/matrix/monitor/auto-join.ts +++ b/extensions/matrix/src/matrix/monitor/auto-join.ts @@ -1,7 +1,7 @@ import type { MatrixClient } from "@vector-im/matrix-bot-sdk"; import { AutojoinRoomsMixin } from "@vector-im/matrix-bot-sdk"; -import type { RuntimeEnv } from "clawdbot/plugin-sdk"; +import type { RuntimeEnv } from "moltbot/plugin-sdk"; import type { CoreConfig } from "../../types.js"; import { getMatrixRuntime } from "../../runtime.js"; diff --git a/extensions/matrix/src/matrix/monitor/events.ts b/extensions/matrix/src/matrix/monitor/events.ts index 3705eb356..266b3cb3c 100644 --- a/extensions/matrix/src/matrix/monitor/events.ts +++ b/extensions/matrix/src/matrix/monitor/events.ts @@ -1,5 +1,5 @@ import type { MatrixClient } from "@vector-im/matrix-bot-sdk"; -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; import type { MatrixAuth } from "../client.js"; import type { MatrixRawEvent } from "./types.js"; diff --git a/extensions/matrix/src/matrix/monitor/handler.ts b/extensions/matrix/src/matrix/monitor/handler.ts index 4ef4f4eae..76f01d831 100644 --- a/extensions/matrix/src/matrix/monitor/handler.ts +++ b/extensions/matrix/src/matrix/monitor/handler.ts @@ -8,7 +8,7 @@ import { logTypingFailure, resolveControlCommandGate, type RuntimeEnv, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import type { CoreConfig, ReplyToMode } from "../../types.js"; import { formatPollAsText, @@ -37,7 +37,7 @@ export type MatrixMonitorHandlerParams = { logging: { shouldLogVerbose: () => boolean; }; - channel: typeof import("clawdbot/plugin-sdk")["channel"]; + channel: typeof import("moltbot/plugin-sdk")["channel"]; system: { enqueueSystemEvent: ( text: string, @@ -59,7 +59,7 @@ export type MatrixMonitorHandlerParams = { : Record | undefined : Record | undefined; mentionRegexes: ReturnType< - typeof import("clawdbot/plugin-sdk")["channel"]["mentions"]["buildMentionRegexes"] + typeof import("moltbot/plugin-sdk")["channel"]["mentions"]["buildMentionRegexes"] >; groupPolicy: "open" | "allowlist" | "disabled"; replyToMode: ReplyToMode; diff --git a/extensions/matrix/src/matrix/monitor/index.ts b/extensions/matrix/src/matrix/monitor/index.ts index 0a203be41..e11bc0148 100644 --- a/extensions/matrix/src/matrix/monitor/index.ts +++ b/extensions/matrix/src/matrix/monitor/index.ts @@ -4,7 +4,7 @@ import { mergeAllowlist, summarizeMapping, type RuntimeEnv, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import type { CoreConfig, ReplyToMode } from "../../types.js"; import { setActiveMatrixClient } from "../active-client.js"; import { diff --git a/extensions/matrix/src/matrix/monitor/location.ts b/extensions/matrix/src/matrix/monitor/location.ts index 0054b6c6b..1886a9195 100644 --- a/extensions/matrix/src/matrix/monitor/location.ts +++ b/extensions/matrix/src/matrix/monitor/location.ts @@ -4,7 +4,7 @@ import { formatLocationText, toLocationContext, type NormalizedLocation, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { EventType } from "./types.js"; export type MatrixLocationPayload = { diff --git a/extensions/matrix/src/matrix/monitor/media.test.ts b/extensions/matrix/src/matrix/monitor/media.test.ts index 28ed5046a..2b1976fa8 100644 --- a/extensions/matrix/src/matrix/monitor/media.test.ts +++ b/extensions/matrix/src/matrix/monitor/media.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; import { setMatrixRuntime } from "../../runtime.js"; import { downloadMatrixMedia } from "./media.js"; diff --git a/extensions/matrix/src/matrix/monitor/replies.ts b/extensions/matrix/src/matrix/monitor/replies.ts index 70ac9bacc..20976e4da 100644 --- a/extensions/matrix/src/matrix/monitor/replies.ts +++ b/extensions/matrix/src/matrix/monitor/replies.ts @@ -1,6 +1,6 @@ import type { MatrixClient } from "@vector-im/matrix-bot-sdk"; -import type { MarkdownTableMode, ReplyPayload, RuntimeEnv } from "clawdbot/plugin-sdk"; +import type { MarkdownTableMode, ReplyPayload, RuntimeEnv } from "moltbot/plugin-sdk"; import { sendMessageMatrix } from "../send.js"; import { getMatrixRuntime } from "../../runtime.js"; diff --git a/extensions/matrix/src/matrix/monitor/rooms.ts b/extensions/matrix/src/matrix/monitor/rooms.ts index f45f54cf4..a98224f2a 100644 --- a/extensions/matrix/src/matrix/monitor/rooms.ts +++ b/extensions/matrix/src/matrix/monitor/rooms.ts @@ -1,5 +1,5 @@ import type { MatrixRoomConfig } from "../../types.js"; -import { buildChannelKeyCandidates, resolveChannelEntryMatch } from "clawdbot/plugin-sdk"; +import { buildChannelKeyCandidates, resolveChannelEntryMatch } from "moltbot/plugin-sdk"; export type MatrixRoomConfigResolved = { allowed: boolean; diff --git a/extensions/matrix/src/matrix/poll-types.ts b/extensions/matrix/src/matrix/poll-types.ts index 28b36d42d..79e604c5f 100644 --- a/extensions/matrix/src/matrix/poll-types.ts +++ b/extensions/matrix/src/matrix/poll-types.ts @@ -7,7 +7,7 @@ * - m.poll.end - Closes a poll */ -import type { PollInput } from "clawdbot/plugin-sdk"; +import type { PollInput } from "moltbot/plugin-sdk"; export const M_POLL_START = "m.poll.start" as const; export const M_POLL_RESPONSE = "m.poll.response" as const; diff --git a/extensions/matrix/src/matrix/send.test.ts b/extensions/matrix/src/matrix/send.test.ts index e82e18fb0..3547fe111 100644 --- a/extensions/matrix/src/matrix/send.test.ts +++ b/extensions/matrix/src/matrix/send.test.ts @@ -1,6 +1,6 @@ import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; import { setMatrixRuntime } from "../runtime.js"; vi.mock("@vector-im/matrix-bot-sdk", () => ({ diff --git a/extensions/matrix/src/matrix/send.ts b/extensions/matrix/src/matrix/send.ts index 1fed4198a..56ea39682 100644 --- a/extensions/matrix/src/matrix/send.ts +++ b/extensions/matrix/src/matrix/send.ts @@ -1,6 +1,6 @@ import type { MatrixClient } from "@vector-im/matrix-bot-sdk"; -import type { PollInput } from "clawdbot/plugin-sdk"; +import type { PollInput } from "moltbot/plugin-sdk"; import { getMatrixRuntime } from "../runtime.js"; import { buildPollStartContent, M_POLL_START } from "./poll-types.js"; import { resolveMatrixClient, resolveMediaMaxBytes } from "./send/client.js"; diff --git a/extensions/matrix/src/matrix/send/client.ts b/extensions/matrix/src/matrix/send/client.ts index 5b9338054..1f36704c2 100644 --- a/extensions/matrix/src/matrix/send/client.ts +++ b/extensions/matrix/src/matrix/send/client.ts @@ -34,7 +34,7 @@ export async function resolveMatrixClient(opts: { if (opts.client) return { client: opts.client, stopOnDone: false }; const active = getActiveMatrixClient(); if (active) return { client: active, stopOnDone: false }; - const shouldShareClient = Boolean(process.env.CLAWDBOT_GATEWAY_PORT); + const shouldShareClient = Boolean(process.env.MOLTBOT_GATEWAY_PORT); if (shouldShareClient) { const client = await resolveSharedMatrixClient({ timeoutMs: opts.timeoutMs, diff --git a/extensions/matrix/src/onboarding.ts b/extensions/matrix/src/onboarding.ts index 95a6a0f8e..e331aedf7 100644 --- a/extensions/matrix/src/onboarding.ts +++ b/extensions/matrix/src/onboarding.ts @@ -5,7 +5,7 @@ import { type ChannelOnboardingAdapter, type ChannelOnboardingDmPolicy, type WizardPrompter, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listMatrixDirectoryGroupsLive } from "./directory-live.js"; import { listMatrixDirectoryPeersLive } from "./directory-live.js"; import { resolveMatrixAccount } from "./matrix/accounts.js"; diff --git a/extensions/matrix/src/outbound.ts b/extensions/matrix/src/outbound.ts index fd30e3ded..13e28519d 100644 --- a/extensions/matrix/src/outbound.ts +++ b/extensions/matrix/src/outbound.ts @@ -1,4 +1,4 @@ -import type { ChannelOutboundAdapter } from "clawdbot/plugin-sdk"; +import type { ChannelOutboundAdapter } from "moltbot/plugin-sdk"; import { getMatrixRuntime } from "./runtime.js"; import { sendMessageMatrix, sendPollMatrix } from "./matrix/send.js"; diff --git a/extensions/matrix/src/resolve-targets.ts b/extensions/matrix/src/resolve-targets.ts index 2faf68c95..fef9724b1 100644 --- a/extensions/matrix/src/resolve-targets.ts +++ b/extensions/matrix/src/resolve-targets.ts @@ -3,7 +3,7 @@ import type { ChannelResolveKind, ChannelResolveResult, RuntimeEnv, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listMatrixDirectoryGroupsLive, diff --git a/extensions/matrix/src/runtime.ts b/extensions/matrix/src/runtime.ts index dea53f66a..50fc8962f 100644 --- a/extensions/matrix/src/runtime.ts +++ b/extensions/matrix/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/matrix/src/tool-actions.ts b/extensions/matrix/src/tool-actions.ts index 9f1a83bdd..435a9160c 100644 --- a/extensions/matrix/src/tool-actions.ts +++ b/extensions/matrix/src/tool-actions.ts @@ -21,7 +21,7 @@ import { readNumberParam, readReactionParams, readStringParam, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; const messageActions = new Set(["sendMessage", "editMessage", "deleteMessage", "readMessages"]); const reactionActions = new Set(["react", "reactions"]); diff --git a/extensions/mattermost/index.ts b/extensions/mattermost/index.ts index 95331d75d..4bce72e5e 100644 --- a/extensions/mattermost/index.ts +++ b/extensions/mattermost/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { mattermostPlugin } from "./src/channel.js"; import { setMattermostRuntime } from "./src/runtime.js"; diff --git a/extensions/mattermost/src/channel.ts b/extensions/mattermost/src/channel.ts index e12931883..0a102f565 100644 --- a/extensions/mattermost/src/channel.ts +++ b/extensions/mattermost/src/channel.ts @@ -8,7 +8,7 @@ import { normalizeAccountId, setAccountEnabledInConfigSection, type ChannelPlugin, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { MattermostConfigSchema } from "./config-schema.js"; import { resolveMattermostGroupRequireMention } from "./group-mentions.js"; diff --git a/extensions/mattermost/src/config-schema.ts b/extensions/mattermost/src/config-schema.ts index 2a1b76248..41c457ae4 100644 --- a/extensions/mattermost/src/config-schema.ts +++ b/extensions/mattermost/src/config-schema.ts @@ -6,7 +6,7 @@ import { GroupPolicySchema, MarkdownConfigSchema, requireOpenAllowFrom, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; const MattermostAccountSchemaBase = z .object({ diff --git a/extensions/mattermost/src/group-mentions.ts b/extensions/mattermost/src/group-mentions.ts index 773e655ff..925dc2541 100644 --- a/extensions/mattermost/src/group-mentions.ts +++ b/extensions/mattermost/src/group-mentions.ts @@ -1,4 +1,4 @@ -import type { ChannelGroupContext } from "clawdbot/plugin-sdk"; +import type { ChannelGroupContext } from "moltbot/plugin-sdk"; import { resolveMattermostAccount } from "./mattermost/accounts.js"; diff --git a/extensions/mattermost/src/mattermost/accounts.ts b/extensions/mattermost/src/mattermost/accounts.ts index 4671e652a..d5cd0cf8d 100644 --- a/extensions/mattermost/src/mattermost/accounts.ts +++ b/extensions/mattermost/src/mattermost/accounts.ts @@ -1,5 +1,5 @@ -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "moltbot/plugin-sdk"; import type { MattermostAccountConfig, MattermostChatMode } from "../types.js"; import { normalizeMattermostBaseUrl } from "./client.js"; diff --git a/extensions/mattermost/src/mattermost/monitor-helpers.ts b/extensions/mattermost/src/mattermost/monitor-helpers.ts index 60799c17a..6b412ff9d 100644 --- a/extensions/mattermost/src/mattermost/monitor-helpers.ts +++ b/extensions/mattermost/src/mattermost/monitor-helpers.ts @@ -2,7 +2,7 @@ import { Buffer } from "node:buffer"; import type WebSocket from "ws"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; export type ResponsePrefixContext = { model?: string; diff --git a/extensions/mattermost/src/mattermost/monitor.ts b/extensions/mattermost/src/mattermost/monitor.ts index 754ec3d92..6d738e204 100644 --- a/extensions/mattermost/src/mattermost/monitor.ts +++ b/extensions/mattermost/src/mattermost/monitor.ts @@ -5,7 +5,7 @@ import type { MoltbotConfig, ReplyPayload, RuntimeEnv, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { createReplyPrefixContext, createTypingCallbacks, @@ -18,7 +18,7 @@ import { resolveControlCommandGate, resolveChannelMediaMaxBytes, type HistoryEntry, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { getMattermostRuntime } from "../runtime.js"; import { resolveMattermostAccount } from "./accounts.js"; diff --git a/extensions/mattermost/src/onboarding-helpers.ts b/extensions/mattermost/src/onboarding-helpers.ts index 2350ebc61..4377e9cf1 100644 --- a/extensions/mattermost/src/onboarding-helpers.ts +++ b/extensions/mattermost/src/onboarding-helpers.ts @@ -1,5 +1,5 @@ -import type { MoltbotConfig, WizardPrompter } from "clawdbot/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig, WizardPrompter } from "moltbot/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "moltbot/plugin-sdk"; type PromptAccountIdParams = { cfg: MoltbotConfig; diff --git a/extensions/mattermost/src/onboarding.ts b/extensions/mattermost/src/onboarding.ts index 17dc6bc31..1df53902a 100644 --- a/extensions/mattermost/src/onboarding.ts +++ b/extensions/mattermost/src/onboarding.ts @@ -1,5 +1,5 @@ -import type { ChannelOnboardingAdapter, MoltbotConfig, WizardPrompter } from "clawdbot/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "clawdbot/plugin-sdk"; +import type { ChannelOnboardingAdapter, MoltbotConfig, WizardPrompter } from "moltbot/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "moltbot/plugin-sdk"; import { listMattermostAccountIds, diff --git a/extensions/mattermost/src/runtime.ts b/extensions/mattermost/src/runtime.ts index 3d0ad283f..d0126e58a 100644 --- a/extensions/mattermost/src/runtime.ts +++ b/extensions/mattermost/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/mattermost/src/types.ts b/extensions/mattermost/src/types.ts index 3348f3cca..deabaec4d 100644 --- a/extensions/mattermost/src/types.ts +++ b/extensions/mattermost/src/types.ts @@ -1,4 +1,4 @@ -import type { BlockStreamingCoalesceConfig, DmPolicy, GroupPolicy } from "clawdbot/plugin-sdk"; +import type { BlockStreamingCoalesceConfig, DmPolicy, GroupPolicy } from "moltbot/plugin-sdk"; export type MattermostChatMode = "oncall" | "onmessage" | "onchar"; diff --git a/extensions/memory-core/index.ts b/extensions/memory-core/index.ts index f410ae0ab..11b7ed2fa 100644 --- a/extensions/memory-core/index.ts +++ b/extensions/memory-core/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; const memoryCorePlugin = { id: "memory-core", diff --git a/extensions/memory-lancedb/config.ts b/extensions/memory-lancedb/config.ts index c0382392f..014b48aeb 100644 --- a/extensions/memory-lancedb/config.ts +++ b/extensions/memory-lancedb/config.ts @@ -17,7 +17,7 @@ export const MEMORY_CATEGORIES = ["preference", "fact", "decision", "entity", "o export type MemoryCategory = (typeof MEMORY_CATEGORIES)[number]; const DEFAULT_MODEL = "text-embedding-3-small"; -const DEFAULT_DB_PATH = join(homedir(), ".clawdbot", "memory", "lancedb"); +const DEFAULT_DB_PATH = join(homedir(), ".moltbot", "memory", "lancedb"); const EMBEDDING_DIMENSIONS: Record = { "text-embedding-3-small": 1536, @@ -99,7 +99,7 @@ export const memoryConfigSchema = { }, dbPath: { label: "Database Path", - placeholder: "~/.clawdbot/memory/lancedb", + placeholder: "~/.moltbot/memory/lancedb", advanced: true, }, autoCapture: { diff --git a/extensions/memory-lancedb/index.test.ts b/extensions/memory-lancedb/index.test.ts index c7b837992..25f7ea3df 100644 --- a/extensions/memory-lancedb/index.test.ts +++ b/extensions/memory-lancedb/index.test.ts @@ -16,7 +16,7 @@ import os from "node:os"; const OPENAI_API_KEY = process.env.OPENAI_API_KEY ?? "test-key"; const HAS_OPENAI_KEY = Boolean(process.env.OPENAI_API_KEY); -const liveEnabled = HAS_OPENAI_KEY && process.env.CLAWDBOT_LIVE_TEST === "1"; +const liveEnabled = HAS_OPENAI_KEY && process.env.MOLTBOT_LIVE_TEST === "1"; const describeLive = liveEnabled ? describe : describe.skip; describe("memory plugin e2e", () => { diff --git a/extensions/memory-lancedb/index.ts b/extensions/memory-lancedb/index.ts index e7daab6f5..886518ac8 100644 --- a/extensions/memory-lancedb/index.ts +++ b/extensions/memory-lancedb/index.ts @@ -10,8 +10,8 @@ import { Type } from "@sinclair/typebox"; import * as lancedb from "@lancedb/lancedb"; import OpenAI from "openai"; import { randomUUID } from "node:crypto"; -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { stringEnum } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { stringEnum } from "moltbot/plugin-sdk"; import { MEMORY_CATEGORIES, diff --git a/extensions/msteams/index.ts b/extensions/msteams/index.ts index 63ddc050c..755fe9b11 100644 --- a/extensions/msteams/index.ts +++ b/extensions/msteams/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { msteamsPlugin } from "./src/channel.js"; import { setMSTeamsRuntime } from "./src/runtime.js"; diff --git a/extensions/msteams/src/attachments.test.ts b/extensions/msteams/src/attachments.test.ts index a86a476c5..ab3932d91 100644 --- a/extensions/msteams/src/attachments.test.ts +++ b/extensions/msteams/src/attachments.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; import { setMSTeamsRuntime } from "./runtime.js"; const detectMimeMock = vi.fn(async () => "image/png"); diff --git a/extensions/msteams/src/channel.directory.test.ts b/extensions/msteams/src/channel.directory.test.ts index c09b69017..3857878cf 100644 --- a/extensions/msteams/src/channel.directory.test.ts +++ b/extensions/msteams/src/channel.directory.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import { msteamsPlugin } from "./channel.js"; diff --git a/extensions/msteams/src/channel.ts b/extensions/msteams/src/channel.ts index d01499416..61b740b39 100644 --- a/extensions/msteams/src/channel.ts +++ b/extensions/msteams/src/channel.ts @@ -1,10 +1,10 @@ -import type { ChannelMessageActionName, ChannelPlugin, MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { ChannelMessageActionName, ChannelPlugin, MoltbotConfig } from "moltbot/plugin-sdk"; import { buildChannelConfigSchema, DEFAULT_ACCOUNT_ID, MSTeamsConfigSchema, PAIRING_APPROVED_MESSAGE, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { msteamsOnboardingAdapter } from "./onboarding.js"; import { msteamsOutbound } from "./outbound.js"; diff --git a/extensions/msteams/src/conversation-store-fs.test.ts b/extensions/msteams/src/conversation-store-fs.test.ts index cd8511769..805c6e456 100644 --- a/extensions/msteams/src/conversation-store-fs.test.ts +++ b/extensions/msteams/src/conversation-store-fs.test.ts @@ -4,7 +4,7 @@ import path from "node:path"; import { beforeEach, describe, expect, it } from "vitest"; -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; import type { StoredConversationReference } from "./conversation-store.js"; import { createMSTeamsConversationStoreFs } from "./conversation-store-fs.js"; import { setMSTeamsRuntime } from "./runtime.js"; @@ -12,10 +12,10 @@ import { setMSTeamsRuntime } from "./runtime.js"; const runtimeStub = { state: { resolveStateDir: (env: NodeJS.ProcessEnv = process.env, homedir?: () => string) => { - const override = env.CLAWDBOT_STATE_DIR?.trim(); + const override = env.MOLTBOT_STATE_DIR?.trim(); if (override) return override; const resolvedHome = homedir ? homedir() : os.homedir(); - return path.join(resolvedHome, ".clawdbot"); + return path.join(resolvedHome, ".moltbot"); }, }, } as unknown as PluginRuntime; @@ -30,7 +30,7 @@ describe("msteams conversation store (fs)", () => { const env: NodeJS.ProcessEnv = { ...process.env, - CLAWDBOT_STATE_DIR: stateDir, + MOLTBOT_STATE_DIR: stateDir, }; const store = createMSTeamsConversationStoreFs({ env, ttlMs: 1_000 }); diff --git a/extensions/msteams/src/directory-live.ts b/extensions/msteams/src/directory-live.ts index bbc5c79eb..2830d974b 100644 --- a/extensions/msteams/src/directory-live.ts +++ b/extensions/msteams/src/directory-live.ts @@ -1,4 +1,4 @@ -import type { ChannelDirectoryEntry } from "clawdbot/plugin-sdk"; +import type { ChannelDirectoryEntry } from "moltbot/plugin-sdk"; import { GRAPH_ROOT } from "./attachments/shared.js"; import { loadMSTeamsSdkWithAuth } from "./sdk.js"; diff --git a/extensions/msteams/src/media-helpers.ts b/extensions/msteams/src/media-helpers.ts index bf4a6265b..72aa32647 100644 --- a/extensions/msteams/src/media-helpers.ts +++ b/extensions/msteams/src/media-helpers.ts @@ -9,7 +9,7 @@ import { extensionForMime, extractOriginalFilename, getFileExtension, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; /** * Detect MIME type from URL extension or data URL. diff --git a/extensions/msteams/src/messenger.test.ts b/extensions/msteams/src/messenger.test.ts index 681dade29..5c7248ba7 100644 --- a/extensions/msteams/src/messenger.test.ts +++ b/extensions/msteams/src/messenger.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it } from "vitest"; -import { SILENT_REPLY_TOKEN, type PluginRuntime } from "clawdbot/plugin-sdk"; +import { SILENT_REPLY_TOKEN, type PluginRuntime } from "moltbot/plugin-sdk"; import type { StoredConversationReference } from "./conversation-store.js"; import { type MSTeamsAdapter, diff --git a/extensions/msteams/src/messenger.ts b/extensions/msteams/src/messenger.ts index f19cde27b..f688f5103 100644 --- a/extensions/msteams/src/messenger.ts +++ b/extensions/msteams/src/messenger.ts @@ -6,7 +6,7 @@ import { type MSTeamsReplyStyle, type ReplyPayload, SILENT_REPLY_TOKEN, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import type { MSTeamsAccessTokenProvider } from "./attachments/types.js"; import type { StoredConversationReference } from "./conversation-store.js"; import { classifyMSTeamsSendError } from "./errors.js"; diff --git a/extensions/msteams/src/monitor-handler.ts b/extensions/msteams/src/monitor-handler.ts index f344d13cd..8bd356c54 100644 --- a/extensions/msteams/src/monitor-handler.ts +++ b/extensions/msteams/src/monitor-handler.ts @@ -1,4 +1,4 @@ -import type { MoltbotConfig, RuntimeEnv } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig, RuntimeEnv } from "moltbot/plugin-sdk"; import type { MSTeamsConversationStore } from "./conversation-store.js"; import { buildFileInfoCard, diff --git a/extensions/msteams/src/monitor-handler/message-handler.ts b/extensions/msteams/src/monitor-handler/message-handler.ts index 16eb8fc0a..05a2f95bc 100644 --- a/extensions/msteams/src/monitor-handler/message-handler.ts +++ b/extensions/msteams/src/monitor-handler/message-handler.ts @@ -8,7 +8,7 @@ import { resolveMentionGating, formatAllowlistMatchMeta, type HistoryEntry, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { buildMSTeamsAttachmentPlaceholder, diff --git a/extensions/msteams/src/monitor.ts b/extensions/msteams/src/monitor.ts index 4be1757c1..c773e6b3b 100644 --- a/extensions/msteams/src/monitor.ts +++ b/extensions/msteams/src/monitor.ts @@ -4,7 +4,7 @@ import { summarizeMapping, type MoltbotConfig, type RuntimeEnv, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import type { MSTeamsConversationStore } from "./conversation-store.js"; import { createMSTeamsConversationStoreFs } from "./conversation-store-fs.js"; import { formatUnknownError } from "./errors.js"; diff --git a/extensions/msteams/src/onboarding.ts b/extensions/msteams/src/onboarding.ts index d36455f16..d1fbb5293 100644 --- a/extensions/msteams/src/onboarding.ts +++ b/extensions/msteams/src/onboarding.ts @@ -4,13 +4,13 @@ import type { MoltbotConfig, DmPolicy, WizardPrompter, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { addWildcardAllowFrom, DEFAULT_ACCOUNT_ID, formatDocsLink, promptChannelAccessConfig, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { resolveMSTeamsCredentials } from "./token.js"; import { diff --git a/extensions/msteams/src/outbound.ts b/extensions/msteams/src/outbound.ts index c3b0d37ee..92bda44a9 100644 --- a/extensions/msteams/src/outbound.ts +++ b/extensions/msteams/src/outbound.ts @@ -1,4 +1,4 @@ -import type { ChannelOutboundAdapter } from "clawdbot/plugin-sdk"; +import type { ChannelOutboundAdapter } from "moltbot/plugin-sdk"; import { createMSTeamsPollStoreFs } from "./polls.js"; import { getMSTeamsRuntime } from "./runtime.js"; diff --git a/extensions/msteams/src/policy.test.ts b/extensions/msteams/src/policy.test.ts index d9e8fcfb5..b53b3379c 100644 --- a/extensions/msteams/src/policy.test.ts +++ b/extensions/msteams/src/policy.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { MSTeamsConfig } from "clawdbot/plugin-sdk"; +import type { MSTeamsConfig } from "moltbot/plugin-sdk"; import { isMSTeamsGroupAllowed, resolveMSTeamsReplyPolicy, diff --git a/extensions/msteams/src/policy.ts b/extensions/msteams/src/policy.ts index fee0543a8..ec68aac81 100644 --- a/extensions/msteams/src/policy.ts +++ b/extensions/msteams/src/policy.ts @@ -7,14 +7,14 @@ import type { MSTeamsConfig, MSTeamsReplyStyle, MSTeamsTeamConfig, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { buildChannelKeyCandidates, normalizeChannelSlug, resolveToolsBySender, resolveChannelEntryMatchWithFallback, resolveNestedAllowlistDecision, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; export type MSTeamsResolvedRouteConfig = { teamConfig?: MSTeamsTeamConfig; diff --git a/extensions/msteams/src/polls.test.ts b/extensions/msteams/src/polls.test.ts index cc5fe41cb..579909b2c 100644 --- a/extensions/msteams/src/polls.test.ts +++ b/extensions/msteams/src/polls.test.ts @@ -4,17 +4,17 @@ import path from "node:path"; import { beforeEach, describe, expect, it } from "vitest"; -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; import { buildMSTeamsPollCard, createMSTeamsPollStoreFs, extractMSTeamsPollVote } from "./polls.js"; import { setMSTeamsRuntime } from "./runtime.js"; const runtimeStub = { state: { resolveStateDir: (env: NodeJS.ProcessEnv = process.env, homedir?: () => string) => { - const override = env.CLAWDBOT_STATE_DIR?.trim(); + const override = env.MOLTBOT_STATE_DIR?.trim(); if (override) return override; const resolvedHome = homedir ? homedir() : os.homedir(); - return path.join(resolvedHome, ".clawdbot"); + return path.join(resolvedHome, ".moltbot"); }, }, } as unknown as PluginRuntime; diff --git a/extensions/msteams/src/probe.test.ts b/extensions/msteams/src/probe.test.ts index 9a7bb1808..189425842 100644 --- a/extensions/msteams/src/probe.test.ts +++ b/extensions/msteams/src/probe.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from "vitest"; -import type { MSTeamsConfig } from "clawdbot/plugin-sdk"; +import type { MSTeamsConfig } from "moltbot/plugin-sdk"; const hostMockState = vi.hoisted(() => ({ tokenError: null as Error | null, diff --git a/extensions/msteams/src/probe.ts b/extensions/msteams/src/probe.ts index 60711bc70..3c68fce79 100644 --- a/extensions/msteams/src/probe.ts +++ b/extensions/msteams/src/probe.ts @@ -1,4 +1,4 @@ -import type { MSTeamsConfig } from "clawdbot/plugin-sdk"; +import type { MSTeamsConfig } from "moltbot/plugin-sdk"; import { formatUnknownError } from "./errors.js"; import { loadMSTeamsSdkWithAuth } from "./sdk.js"; import { resolveMSTeamsCredentials } from "./token.js"; diff --git a/extensions/msteams/src/reply-dispatcher.ts b/extensions/msteams/src/reply-dispatcher.ts index f1e0736b3..1f61bfba3 100644 --- a/extensions/msteams/src/reply-dispatcher.ts +++ b/extensions/msteams/src/reply-dispatcher.ts @@ -6,7 +6,7 @@ import { type MoltbotConfig, type MSTeamsReplyStyle, type RuntimeEnv, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import type { MSTeamsAccessTokenProvider } from "./attachments/types.js"; import type { StoredConversationReference } from "./conversation-store.js"; import { diff --git a/extensions/msteams/src/runtime.ts b/extensions/msteams/src/runtime.ts index b6f00f3af..e1df7e3ae 100644 --- a/extensions/msteams/src/runtime.ts +++ b/extensions/msteams/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/msteams/src/send-context.ts b/extensions/msteams/src/send-context.ts index 783915ab4..5bbe271c6 100644 --- a/extensions/msteams/src/send-context.ts +++ b/extensions/msteams/src/send-context.ts @@ -1,4 +1,4 @@ -import { resolveChannelMediaMaxBytes, type MoltbotConfig, type PluginRuntime } from "clawdbot/plugin-sdk"; +import { resolveChannelMediaMaxBytes, type MoltbotConfig, type PluginRuntime } from "moltbot/plugin-sdk"; import type { MSTeamsAccessTokenProvider } from "./attachments/types.js"; import type { MSTeamsConversationStore, diff --git a/extensions/msteams/src/send.ts b/extensions/msteams/src/send.ts index 61cfb1d55..4e51c800f 100644 --- a/extensions/msteams/src/send.ts +++ b/extensions/msteams/src/send.ts @@ -1,5 +1,5 @@ -import { loadWebMedia, resolveChannelMediaMaxBytes } from "clawdbot/plugin-sdk"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import { loadWebMedia, resolveChannelMediaMaxBytes } from "moltbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import { createMSTeamsConversationStoreFs } from "./conversation-store-fs.js"; import { classifyMSTeamsSendError, diff --git a/extensions/msteams/src/token.ts b/extensions/msteams/src/token.ts index e6406b85f..d07d75247 100644 --- a/extensions/msteams/src/token.ts +++ b/extensions/msteams/src/token.ts @@ -1,4 +1,4 @@ -import type { MSTeamsConfig } from "clawdbot/plugin-sdk"; +import type { MSTeamsConfig } from "moltbot/plugin-sdk"; export type MSTeamsCredentials = { appId: string; diff --git a/extensions/nextcloud-talk/index.ts b/extensions/nextcloud-talk/index.ts index b9a645c6d..04fcda426 100644 --- a/extensions/nextcloud-talk/index.ts +++ b/extensions/nextcloud-talk/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { nextcloudTalkPlugin } from "./src/channel.js"; import { setNextcloudTalkRuntime } from "./src/runtime.js"; diff --git a/extensions/nextcloud-talk/src/accounts.ts b/extensions/nextcloud-talk/src/accounts.ts index 9baa465a3..d70cd290b 100644 --- a/extensions/nextcloud-talk/src/accounts.ts +++ b/extensions/nextcloud-talk/src/accounts.ts @@ -1,6 +1,6 @@ import { readFileSync } from "node:fs"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "clawdbot/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "moltbot/plugin-sdk"; import type { CoreConfig, NextcloudTalkAccountConfig } from "./types.js"; @@ -12,7 +12,7 @@ function isTruthyEnvValue(value?: string): boolean { } const debugAccounts = (...args: unknown[]) => { - if (isTruthyEnvValue(process.env.CLAWDBOT_DEBUG_NEXTCLOUD_TALK_ACCOUNTS)) { + if (isTruthyEnvValue(process.env.MOLTBOT_DEBUG_NEXTCLOUD_TALK_ACCOUNTS)) { console.warn("[nextcloud-talk:accounts]", ...args); } }; diff --git a/extensions/nextcloud-talk/src/channel.ts b/extensions/nextcloud-talk/src/channel.ts index 42aa5d72b..c2975e6db 100644 --- a/extensions/nextcloud-talk/src/channel.ts +++ b/extensions/nextcloud-talk/src/channel.ts @@ -9,7 +9,7 @@ import { type ChannelPlugin, type MoltbotConfig, type ChannelSetupInput, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listNextcloudTalkAccountIds, diff --git a/extensions/nextcloud-talk/src/config-schema.ts b/extensions/nextcloud-talk/src/config-schema.ts index 8eb5fa27b..11b8e167f 100644 --- a/extensions/nextcloud-talk/src/config-schema.ts +++ b/extensions/nextcloud-talk/src/config-schema.ts @@ -6,7 +6,7 @@ import { MarkdownConfigSchema, ToolPolicySchema, requireOpenAllowFrom, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { z } from "zod"; export const NextcloudTalkRoomSchema = z diff --git a/extensions/nextcloud-talk/src/inbound.ts b/extensions/nextcloud-talk/src/inbound.ts index 0199d8f9d..792b0d782 100644 --- a/extensions/nextcloud-talk/src/inbound.ts +++ b/extensions/nextcloud-talk/src/inbound.ts @@ -3,7 +3,7 @@ import { resolveControlCommandGate, type MoltbotConfig, type RuntimeEnv, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import type { ResolvedNextcloudTalkAccount } from "./accounts.js"; import { diff --git a/extensions/nextcloud-talk/src/monitor.ts b/extensions/nextcloud-talk/src/monitor.ts index 0a1e44c88..d2a5181bc 100644 --- a/extensions/nextcloud-talk/src/monitor.ts +++ b/extensions/nextcloud-talk/src/monitor.ts @@ -1,6 +1,6 @@ import { createServer, type IncomingMessage, type Server, type ServerResponse } from "node:http"; -import type { RuntimeEnv } from "clawdbot/plugin-sdk"; +import type { RuntimeEnv } from "moltbot/plugin-sdk"; import { resolveNextcloudTalkAccount } from "./accounts.js"; import { handleNextcloudTalkInbound } from "./inbound.js"; diff --git a/extensions/nextcloud-talk/src/onboarding.ts b/extensions/nextcloud-talk/src/onboarding.ts index b06606051..aad6196bc 100644 --- a/extensions/nextcloud-talk/src/onboarding.ts +++ b/extensions/nextcloud-talk/src/onboarding.ts @@ -7,7 +7,7 @@ import { type ChannelOnboardingAdapter, type ChannelOnboardingDmPolicy, type WizardPrompter, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listNextcloudTalkAccountIds, diff --git a/extensions/nextcloud-talk/src/policy.ts b/extensions/nextcloud-talk/src/policy.ts index 56e094a99..fe0590ce2 100644 --- a/extensions/nextcloud-talk/src/policy.ts +++ b/extensions/nextcloud-talk/src/policy.ts @@ -1,11 +1,11 @@ -import type { AllowlistMatch, ChannelGroupContext, GroupPolicy, GroupToolPolicyConfig } from "clawdbot/plugin-sdk"; +import type { AllowlistMatch, ChannelGroupContext, GroupPolicy, GroupToolPolicyConfig } from "moltbot/plugin-sdk"; import { buildChannelKeyCandidates, normalizeChannelSlug, resolveChannelEntryMatchWithFallback, resolveMentionGatingWithBypass, resolveNestedAllowlistDecision, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import type { NextcloudTalkRoomConfig } from "./types.js"; diff --git a/extensions/nextcloud-talk/src/room-info.ts b/extensions/nextcloud-talk/src/room-info.ts index 812ede51d..982ff8139 100644 --- a/extensions/nextcloud-talk/src/room-info.ts +++ b/extensions/nextcloud-talk/src/room-info.ts @@ -1,6 +1,6 @@ import { readFileSync } from "node:fs"; -import type { RuntimeEnv } from "clawdbot/plugin-sdk"; +import type { RuntimeEnv } from "moltbot/plugin-sdk"; import type { ResolvedNextcloudTalkAccount } from "./accounts.js"; diff --git a/extensions/nextcloud-talk/src/runtime.ts b/extensions/nextcloud-talk/src/runtime.ts index 8ccfa17ca..b7fb6da23 100644 --- a/extensions/nextcloud-talk/src/runtime.ts +++ b/extensions/nextcloud-talk/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/nextcloud-talk/src/types.ts b/extensions/nextcloud-talk/src/types.ts index 2aa81a2cd..813f1b6ec 100644 --- a/extensions/nextcloud-talk/src/types.ts +++ b/extensions/nextcloud-talk/src/types.ts @@ -3,7 +3,7 @@ import type { DmConfig, DmPolicy, GroupPolicy, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; export type NextcloudTalkRoomConfig = { requireMention?: boolean; diff --git a/extensions/nostr/README.md b/extensions/nostr/README.md index f089f2223..4f8af2520 100644 --- a/extensions/nostr/README.md +++ b/extensions/nostr/README.md @@ -1,4 +1,4 @@ -# @clawdbot/nostr +# @moltbot/nostr Nostr DM channel plugin for Clawdbot using NIP-04 encrypted direct messages. @@ -13,7 +13,7 @@ This extension adds Nostr as a messaging channel to Clawdbot. It enables your bo ## Installation ```bash -clawdbot plugins install @clawdbot/nostr +clawdbot plugins install @moltbot/nostr ``` ## Quick Setup diff --git a/extensions/nostr/index.ts b/extensions/nostr/index.ts index 8bb57211c..ce455efcb 100644 --- a/extensions/nostr/index.ts +++ b/extensions/nostr/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi, MoltbotConfig } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi, MoltbotConfig } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { nostrPlugin } from "./src/channel.js"; import { setNostrRuntime, getNostrRuntime } from "./src/runtime.js"; diff --git a/extensions/nostr/src/channel.ts b/extensions/nostr/src/channel.ts index ac006ec57..ebf1051a8 100644 --- a/extensions/nostr/src/channel.ts +++ b/extensions/nostr/src/channel.ts @@ -3,7 +3,7 @@ import { DEFAULT_ACCOUNT_ID, formatPairingApproveHint, type ChannelPlugin, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { NostrConfigSchema } from "./config-schema.js"; import { getNostrRuntime } from "./runtime.js"; diff --git a/extensions/nostr/src/config-schema.ts b/extensions/nostr/src/config-schema.ts index 08ac773b0..c584d9bc0 100644 --- a/extensions/nostr/src/config-schema.ts +++ b/extensions/nostr/src/config-schema.ts @@ -1,4 +1,4 @@ -import { MarkdownConfigSchema, buildChannelConfigSchema } from "clawdbot/plugin-sdk"; +import { MarkdownConfigSchema, buildChannelConfigSchema } from "moltbot/plugin-sdk"; import { z } from "zod"; const allowFromEntry = z.union([z.string(), z.number()]); diff --git a/extensions/nostr/src/nostr-state-store.test.ts b/extensions/nostr/src/nostr-state-store.test.ts index 786b2cb5c..7cf1199f4 100644 --- a/extensions/nostr/src/nostr-state-store.test.ts +++ b/extensions/nostr/src/nostr-state-store.test.ts @@ -3,7 +3,7 @@ import os from "node:os"; import path from "node:path"; import { describe, expect, it } from "vitest"; -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; import { readNostrBusState, @@ -13,23 +13,23 @@ import { import { setNostrRuntime } from "./runtime.js"; async function withTempStateDir(fn: (dir: string) => Promise) { - const previous = process.env.CLAWDBOT_STATE_DIR; + const previous = process.env.MOLTBOT_STATE_DIR; const dir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-nostr-")); - process.env.CLAWDBOT_STATE_DIR = dir; + process.env.MOLTBOT_STATE_DIR = dir; setNostrRuntime({ state: { resolveStateDir: (env, homedir) => { - const override = env.CLAWDBOT_STATE_DIR?.trim(); + const override = env.MOLTBOT_STATE_DIR?.trim(); if (override) return override; - return path.join(homedir(), ".clawdbot"); + return path.join(homedir(), ".moltbot"); }, }, } as PluginRuntime); try { return await fn(dir); } finally { - if (previous === undefined) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = previous; + if (previous === undefined) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = previous; await fs.rm(dir, { recursive: true, force: true }); } } diff --git a/extensions/nostr/src/runtime.ts b/extensions/nostr/src/runtime.ts index d5f04cbc4..d7cac13fa 100644 --- a/extensions/nostr/src/runtime.ts +++ b/extensions/nostr/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/nostr/src/types.ts b/extensions/nostr/src/types.ts index 03f5a8d8b..fb8bd7bd5 100644 --- a/extensions/nostr/src/types.ts +++ b/extensions/nostr/src/types.ts @@ -1,4 +1,4 @@ -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import { getPublicKeyFromPrivate } from "./nostr-bus.js"; import { DEFAULT_RELAYS } from "./nostr-bus.js"; import type { NostrProfile } from "./config-schema.js"; diff --git a/extensions/qwen-portal-auth/index.ts b/extensions/qwen-portal-auth/index.ts index bacb48a50..f62e5a2be 100644 --- a/extensions/qwen-portal-auth/index.ts +++ b/extensions/qwen-portal-auth/index.ts @@ -1,4 +1,4 @@ -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { loginQwenPortalOAuth } from "./oauth.js"; diff --git a/extensions/signal/index.ts b/extensions/signal/index.ts index 01a20c4a2..c9d1162c3 100644 --- a/extensions/signal/index.ts +++ b/extensions/signal/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { signalPlugin } from "./src/channel.js"; import { setSignalRuntime } from "./src/runtime.js"; diff --git a/extensions/signal/src/channel.ts b/extensions/signal/src/channel.ts index e9a3e2955..43bf13d04 100644 --- a/extensions/signal/src/channel.ts +++ b/extensions/signal/src/channel.ts @@ -21,7 +21,7 @@ import { type ChannelMessageActionAdapter, type ChannelPlugin, type ResolvedSignalAccount, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { getSignalRuntime } from "./runtime.js"; diff --git a/extensions/signal/src/runtime.ts b/extensions/signal/src/runtime.ts index 2af8bd1dc..4ca732545 100644 --- a/extensions/signal/src/runtime.ts +++ b/extensions/signal/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/slack/index.ts b/extensions/slack/index.ts index a9a84aafe..cba2e7730 100644 --- a/extensions/slack/index.ts +++ b/extensions/slack/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { slackPlugin } from "./src/channel.js"; import { setSlackRuntime } from "./src/runtime.js"; diff --git a/extensions/slack/src/channel.ts b/extensions/slack/src/channel.ts index 8323a9ce0..d02478cd9 100644 --- a/extensions/slack/src/channel.ts +++ b/extensions/slack/src/channel.ts @@ -29,7 +29,7 @@ import { type ChannelMessageActionName, type ChannelPlugin, type ResolvedSlackAccount, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { getSlackRuntime } from "./runtime.js"; diff --git a/extensions/slack/src/runtime.ts b/extensions/slack/src/runtime.ts index 39a4189cb..708ff8d92 100644 --- a/extensions/slack/src/runtime.ts +++ b/extensions/slack/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/telegram/index.ts b/extensions/telegram/index.ts index d64efeac6..7078ef8cb 100644 --- a/extensions/telegram/index.ts +++ b/extensions/telegram/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { telegramPlugin } from "./src/channel.js"; import { setTelegramRuntime } from "./src/runtime.js"; diff --git a/extensions/telegram/src/channel.ts b/extensions/telegram/src/channel.ts index b8ab14b52..546d2dfce 100644 --- a/extensions/telegram/src/channel.ts +++ b/extensions/telegram/src/channel.ts @@ -25,7 +25,7 @@ import { type ChannelPlugin, type MoltbotConfig, type ResolvedTelegramAccount, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { getTelegramRuntime } from "./runtime.js"; diff --git a/extensions/telegram/src/runtime.ts b/extensions/telegram/src/runtime.ts index df96e1447..f22152727 100644 --- a/extensions/telegram/src/runtime.ts +++ b/extensions/telegram/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/tlon/index.ts b/extensions/tlon/index.ts index c01236e50..d5b1a1403 100644 --- a/extensions/tlon/index.ts +++ b/extensions/tlon/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { tlonPlugin } from "./src/channel.js"; import { setTlonRuntime } from "./src/runtime.js"; diff --git a/extensions/tlon/src/channel.ts b/extensions/tlon/src/channel.ts index 4d56cfd93..ccdaf954e 100644 --- a/extensions/tlon/src/channel.ts +++ b/extensions/tlon/src/channel.ts @@ -3,12 +3,12 @@ import type { ChannelPlugin, ChannelSetupInput, MoltbotConfig, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { applyAccountNameToChannelSection, DEFAULT_ACCOUNT_ID, normalizeAccountId, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { resolveTlonAccount, listTlonAccountIds } from "./types.js"; import { formatTargetHint, normalizeShip, parseTlonTarget } from "./targets.js"; diff --git a/extensions/tlon/src/config-schema.ts b/extensions/tlon/src/config-schema.ts index 20b5eb4dd..ec35cb8cd 100644 --- a/extensions/tlon/src/config-schema.ts +++ b/extensions/tlon/src/config-schema.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import { buildChannelConfigSchema } from "clawdbot/plugin-sdk"; +import { buildChannelConfigSchema } from "moltbot/plugin-sdk"; const ShipSchema = z.string().min(1); const ChannelNestSchema = z.string().min(1); diff --git a/extensions/tlon/src/monitor/discovery.ts b/extensions/tlon/src/monitor/discovery.ts index 05bab008b..329225d6d 100644 --- a/extensions/tlon/src/monitor/discovery.ts +++ b/extensions/tlon/src/monitor/discovery.ts @@ -1,4 +1,4 @@ -import type { RuntimeEnv } from "clawdbot/plugin-sdk"; +import type { RuntimeEnv } from "moltbot/plugin-sdk"; import { formatChangesDate } from "./utils.js"; diff --git a/extensions/tlon/src/monitor/history.ts b/extensions/tlon/src/monitor/history.ts index 137d46d6c..967cfcabb 100644 --- a/extensions/tlon/src/monitor/history.ts +++ b/extensions/tlon/src/monitor/history.ts @@ -1,4 +1,4 @@ -import type { RuntimeEnv } from "clawdbot/plugin-sdk"; +import type { RuntimeEnv } from "moltbot/plugin-sdk"; import { extractMessageText } from "./utils.js"; diff --git a/extensions/tlon/src/monitor/index.ts b/extensions/tlon/src/monitor/index.ts index 7f2e5c587..372f945ab 100644 --- a/extensions/tlon/src/monitor/index.ts +++ b/extensions/tlon/src/monitor/index.ts @@ -1,6 +1,6 @@ import { format } from "node:util"; -import type { RuntimeEnv, ReplyPayload, MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { RuntimeEnv, ReplyPayload, MoltbotConfig } from "moltbot/plugin-sdk"; import { getTlonRuntime } from "../runtime.js"; import { resolveTlonAccount } from "../types.js"; diff --git a/extensions/tlon/src/onboarding.ts b/extensions/tlon/src/onboarding.ts index 0b8a4cdec..6c4e869dd 100644 --- a/extensions/tlon/src/onboarding.ts +++ b/extensions/tlon/src/onboarding.ts @@ -5,11 +5,11 @@ import { normalizeAccountId, type ChannelOnboardingAdapter, type WizardPrompter, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listTlonAccountIds, resolveTlonAccount } from "./types.js"; import type { TlonResolvedAccount } from "./types.js"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; const channel = "tlon" as const; diff --git a/extensions/tlon/src/runtime.ts b/extensions/tlon/src/runtime.ts index bdcaeae4d..446ecf908 100644 --- a/extensions/tlon/src/runtime.ts +++ b/extensions/tlon/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/tlon/src/types.ts b/extensions/tlon/src/types.ts index 3240cfe2f..1ba4677e9 100644 --- a/extensions/tlon/src/types.ts +++ b/extensions/tlon/src/types.ts @@ -1,4 +1,4 @@ -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; export type TlonResolvedAccount = { accountId: string; diff --git a/extensions/twitch/README.md b/extensions/twitch/README.md index 377b49baa..f30ec6491 100644 --- a/extensions/twitch/README.md +++ b/extensions/twitch/README.md @@ -1,4 +1,4 @@ -# @clawdbot/twitch +# @moltbot/twitch Twitch channel plugin for Clawdbot. @@ -11,7 +11,7 @@ clawdbot plugins install ./extensions/twitch ## Install (npm) ```bash -clawdbot plugins install @clawdbot/twitch +clawdbot plugins install @moltbot/twitch ``` Onboarding: select Twitch and confirm the install prompt to fetch the plugin automatically. diff --git a/extensions/twitch/index.ts b/extensions/twitch/index.ts index 10aa29af3..76a580555 100644 --- a/extensions/twitch/index.ts +++ b/extensions/twitch/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { twitchPlugin } from "./src/plugin.js"; import { setTwitchRuntime } from "./src/runtime.js"; diff --git a/extensions/twitch/src/config-schema.ts b/extensions/twitch/src/config-schema.ts index f4d8500c7..5f337ba23 100644 --- a/extensions/twitch/src/config-schema.ts +++ b/extensions/twitch/src/config-schema.ts @@ -1,4 +1,4 @@ -import { MarkdownConfigSchema } from "clawdbot/plugin-sdk"; +import { MarkdownConfigSchema } from "moltbot/plugin-sdk"; import { z } from "zod"; /** diff --git a/extensions/twitch/src/config.ts b/extensions/twitch/src/config.ts index bebf28112..41ba4b504 100644 --- a/extensions/twitch/src/config.ts +++ b/extensions/twitch/src/config.ts @@ -1,4 +1,4 @@ -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import type { TwitchAccountConfig } from "./types.js"; /** diff --git a/extensions/twitch/src/monitor.ts b/extensions/twitch/src/monitor.ts index 684f51569..1c3fc9d0c 100644 --- a/extensions/twitch/src/monitor.ts +++ b/extensions/twitch/src/monitor.ts @@ -5,7 +5,7 @@ * resolves agent routes, and handles replies. */ -import type { ReplyPayload, MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { ReplyPayload, MoltbotConfig } from "moltbot/plugin-sdk"; import type { TwitchAccountConfig, TwitchChatMessage } from "./types.js"; import { checkTwitchAccessControl } from "./access-control.js"; import { getTwitchRuntime } from "./runtime.js"; diff --git a/extensions/twitch/src/onboarding.test.ts b/extensions/twitch/src/onboarding.test.ts index 492845bc1..c85b43c78 100644 --- a/extensions/twitch/src/onboarding.test.ts +++ b/extensions/twitch/src/onboarding.test.ts @@ -12,7 +12,7 @@ */ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import type { WizardPrompter } from "clawdbot/plugin-sdk"; +import type { WizardPrompter } from "moltbot/plugin-sdk"; import type { TwitchAccountConfig } from "./types.js"; // Mock the helpers we're testing diff --git a/extensions/twitch/src/onboarding.ts b/extensions/twitch/src/onboarding.ts index fd88bb34d..3e393036d 100644 --- a/extensions/twitch/src/onboarding.ts +++ b/extensions/twitch/src/onboarding.ts @@ -8,11 +8,11 @@ import { type ChannelOnboardingAdapter, type ChannelOnboardingDmPolicy, type WizardPrompter, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { DEFAULT_ACCOUNT_ID, getAccountConfig } from "./config.js"; import { isAccountConfigured } from "./utils/twitch.js"; import type { TwitchAccountConfig, TwitchRole } from "./types.js"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; const channel = "twitch" as const; @@ -70,7 +70,7 @@ async function noteTwitchSetupHelp(prompter: WizardPrompter): Promise { "2. Generate a token with scopes: chat:read and chat:write", " Use https://twitchtokengenerator.com/ or https://twitchapps.com/tmi/", "3. Copy the token (starts with 'oauth:') and Client ID", - "Env vars supported: CLAWDBOT_TWITCH_ACCESS_TOKEN", + "Env vars supported: MOLTBOT_TWITCH_ACCESS_TOKEN", `Docs: ${formatDocsLink("/channels/twitch", "channels/twitch")}`, ].join("\n"), "Twitch setup", @@ -213,7 +213,7 @@ async function configureWithEnvToken( dmPolicy: ChannelOnboardingDmPolicy, ): Promise<{ cfg: MoltbotConfig } | null> { const useEnv = await prompter.confirm({ - message: "Twitch env var CLAWDBOT_TWITCH_ACCESS_TOKEN detected. Use env token?", + message: "Twitch env var MOLTBOT_TWITCH_ACCESS_TOKEN detected. Use env token?", initialValue: true, }); if (!useEnv) { @@ -316,7 +316,7 @@ export const twitchOnboardingAdapter: ChannelOnboardingAdapter = { await noteTwitchSetupHelp(prompter); } - const envToken = process.env.CLAWDBOT_TWITCH_ACCESS_TOKEN?.trim(); + const envToken = process.env.MOLTBOT_TWITCH_ACCESS_TOKEN?.trim(); // Check if env var is set and config is empty if (envToken && !account?.accessToken) { diff --git a/extensions/twitch/src/outbound.test.ts b/extensions/twitch/src/outbound.test.ts index 9b49eda60..f69a79a0e 100644 --- a/extensions/twitch/src/outbound.test.ts +++ b/extensions/twitch/src/outbound.test.ts @@ -11,7 +11,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { twitchOutbound } from "./outbound.js"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; // Mock dependencies vi.mock("./config.js", () => ({ diff --git a/extensions/twitch/src/plugin.test.ts b/extensions/twitch/src/plugin.test.ts index b164ea826..12f523e5c 100644 --- a/extensions/twitch/src/plugin.test.ts +++ b/extensions/twitch/src/plugin.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import { twitchPlugin } from "./plugin.js"; describe("twitchPlugin.status.buildAccountSnapshot", () => { diff --git a/extensions/twitch/src/plugin.ts b/extensions/twitch/src/plugin.ts index 9e27ec977..73911757e 100644 --- a/extensions/twitch/src/plugin.ts +++ b/extensions/twitch/src/plugin.ts @@ -5,8 +5,8 @@ * This is the primary entry point for the Twitch channel integration. */ -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; -import { buildChannelConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; +import { buildChannelConfigSchema } from "moltbot/plugin-sdk"; import { twitchMessageActions } from "./actions.js"; import { TwitchConfigSchema } from "./config-schema.js"; import { DEFAULT_ACCOUNT_ID, getAccountConfig, listAccountIds } from "./config.js"; diff --git a/extensions/twitch/src/runtime.ts b/extensions/twitch/src/runtime.ts index 5c2f1c672..bcda5d7a5 100644 --- a/extensions/twitch/src/runtime.ts +++ b/extensions/twitch/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/twitch/src/send.test.ts b/extensions/twitch/src/send.test.ts index a83a508f2..810f2d967 100644 --- a/extensions/twitch/src/send.test.ts +++ b/extensions/twitch/src/send.test.ts @@ -12,7 +12,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { sendMessageTwitchInternal } from "./send.js"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; // Mock dependencies vi.mock("./config.js", () => ({ diff --git a/extensions/twitch/src/send.ts b/extensions/twitch/src/send.ts index a773158ed..9abd4a80a 100644 --- a/extensions/twitch/src/send.ts +++ b/extensions/twitch/src/send.ts @@ -7,7 +7,7 @@ import { DEFAULT_ACCOUNT_ID, getAccountConfig } from "./config.js"; import { getClientManager as getRegistryClientManager } from "./client-manager-registry.js"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import { resolveTwitchToken } from "./token.js"; import { stripMarkdownForTwitch } from "./utils/markdown.js"; import { generateMessageId, isAccountConfigured, normalizeTwitchChannel } from "./utils/twitch.js"; diff --git a/extensions/twitch/src/token.test.ts b/extensions/twitch/src/token.test.ts index a30048069..a1cd1a5a5 100644 --- a/extensions/twitch/src/token.test.ts +++ b/extensions/twitch/src/token.test.ts @@ -10,7 +10,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { resolveTwitchToken, type TwitchTokenSource } from "./token.js"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; describe("token", () => { // Multi-account config for testing non-default accounts @@ -47,7 +47,7 @@ describe("token", () => { afterEach(() => { vi.restoreAllMocks(); - delete process.env.CLAWDBOT_TWITCH_ACCESS_TOKEN; + delete process.env.MOLTBOT_TWITCH_ACCESS_TOKEN; }); describe("resolveTwitchToken", () => { @@ -66,7 +66,7 @@ describe("token", () => { }); it("should prioritize config token over env var (simplified config)", () => { - process.env.CLAWDBOT_TWITCH_ACCESS_TOKEN = "oauth:env-token"; + process.env.MOLTBOT_TWITCH_ACCESS_TOKEN = "oauth:env-token"; const result = resolveTwitchToken(mockSimplifiedConfig, { accountId: "default" }); @@ -76,7 +76,7 @@ describe("token", () => { }); it("should use env var when config token is empty (simplified config)", () => { - process.env.CLAWDBOT_TWITCH_ACCESS_TOKEN = "oauth:env-token"; + process.env.MOLTBOT_TWITCH_ACCESS_TOKEN = "oauth:env-token"; const configWithEmptyToken = { channels: { @@ -110,7 +110,7 @@ describe("token", () => { }); it("should not use env var for non-default accounts (multi-account)", () => { - process.env.CLAWDBOT_TWITCH_ACCESS_TOKEN = "oauth:env-token"; + process.env.MOLTBOT_TWITCH_ACCESS_TOKEN = "oauth:env-token"; const configWithoutToken = { channels: { diff --git a/extensions/twitch/src/token.ts b/extensions/twitch/src/token.ts index 4dd7032ae..3d2d133fd 100644 --- a/extensions/twitch/src/token.ts +++ b/extensions/twitch/src/token.ts @@ -2,11 +2,11 @@ * Twitch access token resolution with environment variable support. * * Supports reading Twitch OAuth access tokens from config or environment variable. - * The CLAWDBOT_TWITCH_ACCESS_TOKEN env var is only used for the default account. + * The MOLTBOT_TWITCH_ACCESS_TOKEN env var is only used for the default account. * * Token resolution priority: * 1. Account access token from merged config (accounts.{id} or base-level for default) - * 2. Environment variable: CLAWDBOT_TWITCH_ACCESS_TOKEN (default account only) + * 2. Environment variable: MOLTBOT_TWITCH_ACCESS_TOKEN (default account only) */ import type { MoltbotConfig } from "../../../src/config/config.js"; @@ -35,7 +35,7 @@ function normalizeTwitchToken(raw?: string | null): string | undefined { * * Priority: * 1. Account access token (from merged config - base-level for default, or accounts.{accountId}) - * 2. Environment variable: CLAWDBOT_TWITCH_ACCESS_TOKEN (default account only) + * 2. Environment variable: MOLTBOT_TWITCH_ACCESS_TOKEN (default account only) * * The getAccountConfig function handles merging base-level config with accounts.default, * so this logic works for both simplified and multi-account patterns. @@ -77,7 +77,7 @@ export function resolveTwitchToken( // Environment variable (default account only) const allowEnv = accountId === DEFAULT_ACCOUNT_ID; const envToken = allowEnv - ? normalizeTwitchToken(opts.envToken ?? process.env.CLAWDBOT_TWITCH_ACCESS_TOKEN) + ? normalizeTwitchToken(opts.envToken ?? process.env.MOLTBOT_TWITCH_ACCESS_TOKEN) : undefined; if (envToken) { return { token: envToken, source: "env" }; diff --git a/extensions/twitch/src/twitch-client.ts b/extensions/twitch/src/twitch-client.ts index bcc5cc217..38c7102d4 100644 --- a/extensions/twitch/src/twitch-client.ts +++ b/extensions/twitch/src/twitch-client.ts @@ -1,6 +1,6 @@ import { RefreshingAuthProvider, StaticAuthProvider } from "@twurple/auth"; import { ChatClient, LogLevel } from "@twurple/chat"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import type { ChannelLogSink, TwitchAccountConfig, TwitchChatMessage } from "./types.js"; import { resolveTwitchToken } from "./token.js"; import { normalizeToken } from "./utils/twitch.js"; @@ -92,7 +92,7 @@ export class TwitchClientManager { if (!tokenResolution.token) { this.logger.error( - `Missing Twitch token for account ${account.username} (set channels.twitch.accounts.${account.username}.token or CLAWDBOT_TWITCH_ACCESS_TOKEN for default)`, + `Missing Twitch token for account ${account.username} (set channels.twitch.accounts.${account.username}.token or MOLTBOT_TWITCH_ACCESS_TOKEN for default)`, ); throw new Error("Missing Twitch token"); } diff --git a/extensions/voice-call/README.md b/extensions/voice-call/README.md index 269a67d11..079b254f0 100644 --- a/extensions/voice-call/README.md +++ b/extensions/voice-call/README.md @@ -1,4 +1,4 @@ -# @clawdbot/voice-call +# @moltbot/voice-call Official Voice Call plugin for **Clawdbot**. @@ -16,7 +16,7 @@ Plugin system: `https://docs.molt.bot/plugin` ### Option A: install via Clawdbot (recommended) ```bash -clawdbot plugins install @clawdbot/voice-call +clawdbot plugins install @moltbot/voice-call ``` Restart the Gateway afterwards. diff --git a/extensions/voice-call/src/core-bridge.ts b/extensions/voice-call/src/core-bridge.ts index 5cc12a700..aa6c69f7c 100644 --- a/extensions/voice-call/src/core-bridge.ts +++ b/extensions/voice-call/src/core-bridge.ts @@ -88,7 +88,7 @@ function findPackageRoot(startDir: string, name: string): string | null { function resolveMoltbotRoot(): string { if (coreRootCache) return coreRootCache; - const override = process.env.MOLTBOT_ROOT?.trim() || process.env.CLAWDBOT_ROOT?.trim(); + const override = process.env.MOLTBOT_ROOT?.trim() || process.env.MOLTBOT_ROOT?.trim(); if (override) { coreRootCache = override; return override; @@ -117,7 +117,7 @@ function resolveMoltbotRoot(): string { } throw new Error( - "Unable to resolve core root. Set MOLTBOT_ROOT (or legacy CLAWDBOT_ROOT) to the package root.", + "Unable to resolve core root. Set MOLTBOT_ROOT (or legacy MOLTBOT_ROOT) to the package root.", ); } diff --git a/extensions/whatsapp/index.ts b/extensions/whatsapp/index.ts index 640f80217..159f1f5da 100644 --- a/extensions/whatsapp/index.ts +++ b/extensions/whatsapp/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { whatsappPlugin } from "./src/channel.js"; import { setWhatsAppRuntime } from "./src/runtime.js"; diff --git a/extensions/whatsapp/src/channel.ts b/extensions/whatsapp/src/channel.ts index 9d37fcf2a..6ccbddfad 100644 --- a/extensions/whatsapp/src/channel.ts +++ b/extensions/whatsapp/src/channel.ts @@ -28,7 +28,7 @@ import { type ChannelMessageActionName, type ChannelPlugin, type ResolvedWhatsAppAccount, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { getWhatsAppRuntime } from "./runtime.js"; diff --git a/extensions/whatsapp/src/runtime.ts b/extensions/whatsapp/src/runtime.ts index 59ce96388..f08351bb4 100644 --- a/extensions/whatsapp/src/runtime.ts +++ b/extensions/whatsapp/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/zalo/README.md b/extensions/zalo/README.md index 1d9d3483a..26018e50e 100644 --- a/extensions/zalo/README.md +++ b/extensions/zalo/README.md @@ -1,4 +1,4 @@ -# @clawdbot/zalo +# @moltbot/zalo Zalo channel plugin for Clawdbot (Bot API). @@ -11,7 +11,7 @@ clawdbot plugins install ./extensions/zalo ## Install (npm) ```bash -clawdbot plugins install @clawdbot/zalo +clawdbot plugins install @moltbot/zalo ``` Onboarding: select Zalo and confirm the install prompt to fetch the plugin automatically. diff --git a/extensions/zalo/index.ts b/extensions/zalo/index.ts index df9cc84ac..b13f5e9f7 100644 --- a/extensions/zalo/index.ts +++ b/extensions/zalo/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { zaloDock, zaloPlugin } from "./src/channel.js"; import { handleZaloWebhookRequest } from "./src/monitor.js"; diff --git a/extensions/zalo/src/accounts.ts b/extensions/zalo/src/accounts.ts index 0407579ca..5fdecd885 100644 --- a/extensions/zalo/src/accounts.ts +++ b/extensions/zalo/src/accounts.ts @@ -1,5 +1,5 @@ -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "moltbot/plugin-sdk"; import type { ResolvedZaloAccount, ZaloAccountConfig, ZaloConfig } from "./types.js"; import { resolveZaloToken } from "./token.js"; diff --git a/extensions/zalo/src/actions.ts b/extensions/zalo/src/actions.ts index 57c9c8aa9..43edef808 100644 --- a/extensions/zalo/src/actions.ts +++ b/extensions/zalo/src/actions.ts @@ -2,8 +2,8 @@ import type { ChannelMessageActionAdapter, ChannelMessageActionName, MoltbotConfig, -} from "clawdbot/plugin-sdk"; -import { jsonResult, readStringParam } from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; +import { jsonResult, readStringParam } from "moltbot/plugin-sdk"; import { listEnabledZaloAccounts } from "./accounts.js"; import { sendMessageZalo } from "./send.js"; diff --git a/extensions/zalo/src/channel.directory.test.ts b/extensions/zalo/src/channel.directory.test.ts index 7a5aebb83..e6b918940 100644 --- a/extensions/zalo/src/channel.directory.test.ts +++ b/extensions/zalo/src/channel.directory.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import { zaloPlugin } from "./channel.js"; diff --git a/extensions/zalo/src/channel.ts b/extensions/zalo/src/channel.ts index f12ce6675..a024047d3 100644 --- a/extensions/zalo/src/channel.ts +++ b/extensions/zalo/src/channel.ts @@ -3,7 +3,7 @@ import type { ChannelDock, ChannelPlugin, MoltbotConfig, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { applyAccountNameToChannelSection, buildChannelConfigSchema, @@ -14,7 +14,7 @@ import { normalizeAccountId, PAIRING_APPROVED_MESSAGE, setAccountEnabledInConfigSection, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listZaloAccountIds, resolveDefaultZaloAccountId, resolveZaloAccount, type ResolvedZaloAccount } from "./accounts.js"; import { zaloMessageActions } from "./actions.js"; diff --git a/extensions/zalo/src/config-schema.ts b/extensions/zalo/src/config-schema.ts index 25e22bd3b..b436d2ae4 100644 --- a/extensions/zalo/src/config-schema.ts +++ b/extensions/zalo/src/config-schema.ts @@ -1,4 +1,4 @@ -import { MarkdownConfigSchema } from "clawdbot/plugin-sdk"; +import { MarkdownConfigSchema } from "moltbot/plugin-sdk"; import { z } from "zod"; const allowFromEntry = z.union([z.string(), z.number()]); diff --git a/extensions/zalo/src/monitor.ts b/extensions/zalo/src/monitor.ts index c615161f3..245c797c5 100644 --- a/extensions/zalo/src/monitor.ts +++ b/extensions/zalo/src/monitor.ts @@ -1,6 +1,6 @@ import type { IncomingMessage, ServerResponse } from "node:http"; -import type { MoltbotConfig, MarkdownTableMode } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig, MarkdownTableMode } from "moltbot/plugin-sdk"; import type { ResolvedZaloAccount } from "./accounts.js"; import { diff --git a/extensions/zalo/src/monitor.webhook.test.ts b/extensions/zalo/src/monitor.webhook.test.ts index ae7bda2dc..c7a8dba94 100644 --- a/extensions/zalo/src/monitor.webhook.test.ts +++ b/extensions/zalo/src/monitor.webhook.test.ts @@ -3,7 +3,7 @@ import type { AddressInfo } from "node:net"; import { describe, expect, it } from "vitest"; -import type { MoltbotConfig, PluginRuntime } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig, PluginRuntime } from "moltbot/plugin-sdk"; import type { ResolvedZaloAccount } from "./types.js"; import { handleZaloWebhookRequest, registerZaloWebhookTarget } from "./monitor.js"; diff --git a/extensions/zalo/src/onboarding.ts b/extensions/zalo/src/onboarding.ts index 6ec03f03e..8e455cd89 100644 --- a/extensions/zalo/src/onboarding.ts +++ b/extensions/zalo/src/onboarding.ts @@ -3,13 +3,13 @@ import type { ChannelOnboardingDmPolicy, MoltbotConfig, WizardPrompter, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { addWildcardAllowFrom, DEFAULT_ACCOUNT_ID, normalizeAccountId, promptAccountId, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listZaloAccountIds, diff --git a/extensions/zalo/src/runtime.ts b/extensions/zalo/src/runtime.ts index ab67f8dbf..1c05d2817 100644 --- a/extensions/zalo/src/runtime.ts +++ b/extensions/zalo/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/zalo/src/send.ts b/extensions/zalo/src/send.ts index 57f61e878..7ef016a50 100644 --- a/extensions/zalo/src/send.ts +++ b/extensions/zalo/src/send.ts @@ -1,4 +1,4 @@ -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; import type { ZaloFetch } from "./api.js"; import { sendMessage, sendPhoto } from "./api.js"; diff --git a/extensions/zalo/src/status-issues.ts b/extensions/zalo/src/status-issues.ts index 8370c0aa6..53b8664cf 100644 --- a/extensions/zalo/src/status-issues.ts +++ b/extensions/zalo/src/status-issues.ts @@ -1,4 +1,4 @@ -import type { ChannelAccountSnapshot, ChannelStatusIssue } from "clawdbot/plugin-sdk"; +import type { ChannelAccountSnapshot, ChannelStatusIssue } from "moltbot/plugin-sdk"; type ZaloAccountStatus = { accountId?: unknown; diff --git a/extensions/zalo/src/token.ts b/extensions/zalo/src/token.ts index 41c372666..d78d4b4da 100644 --- a/extensions/zalo/src/token.ts +++ b/extensions/zalo/src/token.ts @@ -1,6 +1,6 @@ import { readFileSync } from "node:fs"; -import { DEFAULT_ACCOUNT_ID } from "clawdbot/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID } from "moltbot/plugin-sdk"; import type { ZaloConfig } from "./types.js"; diff --git a/extensions/zalouser/README.md b/extensions/zalouser/README.md index f1af62ce1..b61f164ea 100644 --- a/extensions/zalouser/README.md +++ b/extensions/zalouser/README.md @@ -1,4 +1,4 @@ -# @clawdbot/zalouser +# @moltbot/zalouser Clawdbot extension for Zalo Personal Account messaging via [zca-cli](https://zca-cli.dev). diff --git a/extensions/zalouser/index.ts b/extensions/zalouser/index.ts index 1eee5793e..523109ba3 100644 --- a/extensions/zalouser/index.ts +++ b/extensions/zalouser/index.ts @@ -1,5 +1,5 @@ -import type { MoltbotPluginApi } from "clawdbot/plugin-sdk"; -import { emptyPluginConfigSchema } from "clawdbot/plugin-sdk"; +import type { MoltbotPluginApi } from "moltbot/plugin-sdk"; +import { emptyPluginConfigSchema } from "moltbot/plugin-sdk"; import { zalouserDock, zalouserPlugin } from "./src/channel.js"; import { ZalouserToolSchema, executeZalouserTool } from "./src/tool.js"; diff --git a/extensions/zalouser/src/accounts.ts b/extensions/zalouser/src/accounts.ts index 121cb5023..89a082feb 100644 --- a/extensions/zalouser/src/accounts.ts +++ b/extensions/zalouser/src/accounts.ts @@ -1,5 +1,5 @@ -import type { MoltbotConfig } from "clawdbot/plugin-sdk"; -import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig } from "moltbot/plugin-sdk"; +import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "moltbot/plugin-sdk"; import { runZca, parseJsonOutput } from "./zca.js"; import type { ResolvedZalouserAccount, ZalouserAccountConfig, ZalouserConfig } from "./types.js"; diff --git a/extensions/zalouser/src/channel.ts b/extensions/zalouser/src/channel.ts index 61dc98ff0..0b2a6f390 100644 --- a/extensions/zalouser/src/channel.ts +++ b/extensions/zalouser/src/channel.ts @@ -6,7 +6,7 @@ import type { ChannelPlugin, MoltbotConfig, GroupToolPolicyConfig, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { applyAccountNameToChannelSection, buildChannelConfigSchema, @@ -16,7 +16,7 @@ import { migrateBaseNameToDefaultAccount, normalizeAccountId, setAccountEnabledInConfigSection, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listZalouserAccountIds, resolveDefaultZalouserAccountId, diff --git a/extensions/zalouser/src/config-schema.ts b/extensions/zalouser/src/config-schema.ts index 8fac18805..6b2248005 100644 --- a/extensions/zalouser/src/config-schema.ts +++ b/extensions/zalouser/src/config-schema.ts @@ -1,4 +1,4 @@ -import { MarkdownConfigSchema, ToolPolicySchema } from "clawdbot/plugin-sdk"; +import { MarkdownConfigSchema, ToolPolicySchema } from "moltbot/plugin-sdk"; import { z } from "zod"; const allowFromEntry = z.union([z.string(), z.number()]); diff --git a/extensions/zalouser/src/monitor.ts b/extensions/zalouser/src/monitor.ts index 82c64a138..d0b138cbf 100644 --- a/extensions/zalouser/src/monitor.ts +++ b/extensions/zalouser/src/monitor.ts @@ -1,7 +1,7 @@ import type { ChildProcess } from "node:child_process"; -import type { MoltbotConfig, MarkdownTableMode, RuntimeEnv } from "clawdbot/plugin-sdk"; -import { mergeAllowlist, summarizeMapping } from "clawdbot/plugin-sdk"; +import type { MoltbotConfig, MarkdownTableMode, RuntimeEnv } from "moltbot/plugin-sdk"; +import { mergeAllowlist, summarizeMapping } from "moltbot/plugin-sdk"; import { sendMessageZalouser } from "./send.js"; import type { ResolvedZalouserAccount, diff --git a/extensions/zalouser/src/onboarding.ts b/extensions/zalouser/src/onboarding.ts index aae3fe843..fecd348ad 100644 --- a/extensions/zalouser/src/onboarding.ts +++ b/extensions/zalouser/src/onboarding.ts @@ -3,14 +3,14 @@ import type { ChannelOnboardingDmPolicy, MoltbotConfig, WizardPrompter, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { addWildcardAllowFrom, DEFAULT_ACCOUNT_ID, normalizeAccountId, promptAccountId, promptChannelAccessConfig, -} from "clawdbot/plugin-sdk"; +} from "moltbot/plugin-sdk"; import { listZalouserAccountIds, diff --git a/extensions/zalouser/src/runtime.ts b/extensions/zalouser/src/runtime.ts index 0f4fb8b6d..e37f39f03 100644 --- a/extensions/zalouser/src/runtime.ts +++ b/extensions/zalouser/src/runtime.ts @@ -1,4 +1,4 @@ -import type { PluginRuntime } from "clawdbot/plugin-sdk"; +import type { PluginRuntime } from "moltbot/plugin-sdk"; let runtime: PluginRuntime | null = null; diff --git a/extensions/zalouser/src/status-issues.ts b/extensions/zalouser/src/status-issues.ts index 1dafc3e20..116fbb756 100644 --- a/extensions/zalouser/src/status-issues.ts +++ b/extensions/zalouser/src/status-issues.ts @@ -1,4 +1,4 @@ -import type { ChannelAccountSnapshot, ChannelStatusIssue } from "clawdbot/plugin-sdk"; +import type { ChannelAccountSnapshot, ChannelStatusIssue } from "moltbot/plugin-sdk"; type ZalouserAccountStatus = { accountId?: unknown; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..962d1f0cb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13303 @@ +{ + "name": "moltbot", + "version": "2026.1.27-beta.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "moltbot", + "version": "2026.1.27-beta.1", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@agentclientprotocol/sdk": "0.13.1", + "@aws-sdk/client-bedrock": "^3.975.0", + "@buape/carbon": "0.14.0", + "@clack/prompts": "^0.11.0", + "@grammyjs/runner": "^2.0.3", + "@grammyjs/transformer-throttler": "^1.2.1", + "@homebridge/ciao": "^1.3.4", + "@line/bot-sdk": "^10.6.0", + "@lydell/node-pty": "1.2.0-beta.3", + "@mariozechner/pi-agent-core": "0.49.3", + "@mariozechner/pi-ai": "0.49.3", + "@mariozechner/pi-coding-agent": "0.49.3", + "@mariozechner/pi-tui": "0.49.3", + "@mozilla/readability": "^0.6.0", + "@sinclair/typebox": "0.34.47", + "@slack/bolt": "^4.6.0", + "@slack/web-api": "^7.13.0", + "@whiskeysockets/baileys": "7.0.0-rc.9", + "ajv": "^8.17.1", + "body-parser": "^2.2.2", + "chalk": "^5.6.2", + "chokidar": "^5.0.0", + "chromium-bidi": "13.0.1", + "cli-highlight": "^2.1.11", + "commander": "^14.0.2", + "croner": "^9.1.0", + "detect-libc": "^2.1.2", + "discord-api-types": "^0.38.37", + "dotenv": "^17.2.3", + "express": "^5.2.1", + "file-type": "^21.3.0", + "grammy": "^1.39.3", + "hono": "4.11.4", + "jiti": "^2.6.1", + "json5": "^2.2.3", + "jszip": "^3.10.1", + "linkedom": "^0.18.12", + "long": "5.3.2", + "markdown-it": "^14.1.0", + "node-edge-tts": "^1.2.9", + "osc-progress": "^0.3.0", + "pdfjs-dist": "^5.4.530", + "playwright-core": "1.58.0", + "proper-lockfile": "^4.1.2", + "qrcode-terminal": "^0.12.0", + "sharp": "^0.34.5", + "sqlite-vec": "0.1.7-alpha.2", + "tar": "7.5.4", + "tslog": "^4.10.2", + "undici": "^7.19.0", + "ws": "^8.19.0", + "yaml": "^2.8.2", + "zod": "^4.3.6" + }, + "bin": { + "moltbot": "moltbot.mjs" + }, + "devDependencies": { + "@grammyjs/types": "^3.23.0", + "@lit-labs/signals": "^0.2.0", + "@lit/context": "^1.1.6", + "@mariozechner/mini-lit": "0.2.1", + "@types/body-parser": "^1.19.6", + "@types/express": "^5.0.6", + "@types/markdown-it": "^14.1.2", + "@types/node": "^25.0.10", + "@types/proper-lockfile": "^4.1.4", + "@types/qrcode-terminal": "^0.12.2", + "@types/ws": "^8.18.1", + "@typescript/native-preview": "7.0.0-dev.20260124.1", + "@vitest/coverage-v8": "^4.0.18", + "docx-preview": "^0.3.7", + "lit": "^3.3.2", + "lucide": "^0.563.0", + "ollama": "^0.6.3", + "oxfmt": "0.26.0", + "oxlint": "^1.41.0", + "oxlint-tsgolint": "^0.11.1", + "quicktype-core": "^23.2.6", + "rolldown": "1.0.0-rc.1", + "signal-utils": "^0.21.1", + "tsx": "^4.21.0", + "typescript": "^5.9.3", + "vitest": "^4.0.18", + "wireit": "^0.14.12" + }, + "engines": { + "node": ">=22.12.0" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^0.1.88", + "node-llama-cpp": "3.15.0" + } + }, + "node_modules/@agentclientprotocol/sdk": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-0.13.1.tgz", + "integrity": "sha512-6byvu+F/xc96GBkdAx4hq6/tB3vT63DSBO4i3gYCz8nuyZMerVFna2Gkhm8EHNpZX0J9DjUxzZCW+rnHXUg0FA==", + "license": "Apache-2.0", + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.71.2", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.71.2.tgz", + "integrity": "sha512-TGNDEUuEstk/DKu0/TflXAEt+p+p/WhTlFzEnoosvbaDU2LTjm42igSdlL0VijrKpWejtOKxX0b8A7uc+XiSAQ==", + "license": "MIT", + "dependencies": { + "json-schema-to-ts": "^3.1.1" + }, + "bin": { + "anthropic-ai-sdk": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-bedrock": { + "version": "3.978.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock/-/client-bedrock-3.978.0.tgz", + "integrity": "sha512-nyKE6MsusYw8BZRd4pzkRM5ZMtPtg4rbzbFu2ruz8dEFLW0InVeGE8OJnVFSGdZIGFFMsAG4vpu/e0qO4D1f4w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.4", + "@aws-sdk/credential-provider-node": "^3.972.2", + "@aws-sdk/middleware-host-header": "^3.972.2", + "@aws-sdk/middleware-logger": "^3.972.2", + "@aws-sdk/middleware-recursion-detection": "^3.972.2", + "@aws-sdk/middleware-user-agent": "^3.972.4", + "@aws-sdk/region-config-resolver": "^3.972.2", + "@aws-sdk/token-providers": "3.978.0", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.972.0", + "@aws-sdk/util-user-agent-browser": "^3.972.2", + "@aws-sdk/util-user-agent-node": "^3.972.2", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/middleware-retry": "^4.4.29", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.28", + "@smithy/util-defaults-mode-node": "^4.2.31", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-bedrock-runtime": { + "version": "3.978.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.978.0.tgz", + "integrity": "sha512-N5zRvcpq/brl46Mnn3J1N4RFDeiOKU4hFNISFVawt3eT+WBPc74hbbd5b7aky+sreapkfeZ+MAXrQLdevZyMBw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.4", + "@aws-sdk/credential-provider-node": "^3.972.2", + "@aws-sdk/eventstream-handler-node": "^3.972.2", + "@aws-sdk/middleware-eventstream": "^3.972.2", + "@aws-sdk/middleware-host-header": "^3.972.2", + "@aws-sdk/middleware-logger": "^3.972.2", + "@aws-sdk/middleware-recursion-detection": "^3.972.2", + "@aws-sdk/middleware-user-agent": "^3.972.4", + "@aws-sdk/middleware-websocket": "^3.972.2", + "@aws-sdk/region-config-resolver": "^3.972.2", + "@aws-sdk/token-providers": "3.978.0", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.972.0", + "@aws-sdk/util-user-agent-browser": "^3.972.2", + "@aws-sdk/util-user-agent-node": "^3.972.2", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.0", + "@smithy/eventstream-serde-browser": "^4.2.8", + "@smithy/eventstream-serde-config-resolver": "^4.3.8", + "@smithy/eventstream-serde-node": "^4.2.8", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/middleware-retry": "^4.4.29", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.28", + "@smithy/util-defaults-mode-node": "^4.2.31", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.975.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.975.0.tgz", + "integrity": "sha512-HpgJuleH7P6uILxzJKQOmlHdwaCY+xYC6VgRDzlwVEqU/HXjo4m2gOAyjUbpXlBOCWfGgMUzfBlNJ9z3MboqEQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.1", + "@aws-sdk/middleware-host-header": "^3.972.1", + "@aws-sdk/middleware-logger": "^3.972.1", + "@aws-sdk/middleware-recursion-detection": "^3.972.1", + "@aws-sdk/middleware-user-agent": "^3.972.2", + "@aws-sdk/region-config-resolver": "^3.972.1", + "@aws-sdk/types": "^3.973.0", + "@aws-sdk/util-endpoints": "3.972.0", + "@aws-sdk/util-user-agent-browser": "^3.972.1", + "@aws-sdk/util-user-agent-node": "^3.972.1", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.21.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.11", + "@smithy/middleware-retry": "^4.4.27", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.26", + "@smithy/util-defaults-mode-node": "^4.2.29", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.973.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.4.tgz", + "integrity": "sha512-8Rk+kPP74YiR47x54bxYlKZswsaSh0a4XvvRUMLvyS/koNawhsGu/+qSZxREqUeTO+GkKpFvSQIsAZR+deUP+g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.2", + "@smithy/core": "^3.22.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.2.tgz", + "integrity": "sha512-wzH1EdrZsytG1xN9UHaK12J9+kfrnd2+c8y0LVoS4O4laEjPoie1qVK3k8/rZe7KOtvULzyMnO3FT4Krr9Z0Dg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.4.tgz", + "integrity": "sha512-OC7F3ipXV12QfDEWybQGHLzoeHBlAdx/nLzPfHP0Wsabu3JBffu5nlzSaJNf7to9HGtOW8Bpu8NX0ugmDrCbtw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.4", + "@aws-sdk/types": "^3.973.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.2.tgz", + "integrity": "sha512-Jrb8sLm6k8+L7520irBrvCtdLxNtrG7arIxe9TCeMJt/HxqMGJdbIjw8wILzkEHLMIi4MecF2FbXCln7OT1Tag==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/credential-provider-env": "^3.972.2", + "@aws-sdk/credential-provider-http": "^3.972.3", + "@aws-sdk/credential-provider-login": "^3.972.2", + "@aws-sdk/credential-provider-process": "^3.972.2", + "@aws-sdk/credential-provider-sso": "^3.972.2", + "@aws-sdk/credential-provider-web-identity": "^3.972.2", + "@aws-sdk/nested-clients": "3.975.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.2.tgz", + "integrity": "sha512-mlaw2aiI3DrimW85ZMn3g7qrtHueidS58IGytZ+mbFpsYLK5wMjCAKZQtt7VatLMtSBG/dn/EY4njbnYXIDKeQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/nested-clients": "3.975.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.2.tgz", + "integrity": "sha512-Lz1J5IZdTjLYTVIcDP5DVDgi1xlgsF3p1cnvmbfKbjCRhQpftN2e2J4NFfRRvPD54W9+bZ8l5VipPXtTYK7aEg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "^3.972.2", + "@aws-sdk/credential-provider-http": "^3.972.3", + "@aws-sdk/credential-provider-ini": "^3.972.2", + "@aws-sdk/credential-provider-process": "^3.972.2", + "@aws-sdk/credential-provider-sso": "^3.972.2", + "@aws-sdk/credential-provider-web-identity": "^3.972.2", + "@aws-sdk/types": "^3.973.1", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.2.tgz", + "integrity": "sha512-NLKLTT7jnUe9GpQAVkPTJO+cs2FjlQDt5fArIYS7h/Iw/CvamzgGYGFRVD2SE05nOHCMwafUSi42If8esGFV+g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.2.tgz", + "integrity": "sha512-YpwDn8g3gCGUl61cCV0sRxP2pFIwg+ZsMfWQ/GalSyjXtRkctCMFA+u0yPb/Q4uTfNEiya1Y4nm0C5rIHyPW5Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.975.0", + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/token-providers": "3.975.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { + "version": "3.975.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.975.0.tgz", + "integrity": "sha512-AWQt64hkVbDQ+CmM09wnvSk2mVyH4iRROkmYkr3/lmUtFNbE2L/fnw26sckZnUcFCsHPqbkQrcsZAnTcBLbH4w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.1", + "@aws-sdk/nested-clients": "3.975.0", + "@aws-sdk/types": "^3.973.0", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.2.tgz", + "integrity": "sha512-x9DAiN9Qz+NjJ99ltDiVQ8d511M/tuF/9MFbe2jUgo7HZhD6+x4S3iT1YcP07ndwDUjmzKGmeOEgE24k4qvfdg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.2", + "@aws-sdk/nested-clients": "3.975.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-handler-node": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.972.2.tgz", + "integrity": "sha512-bYYftGahAQv90qJci/MvE/baqlxqUJ3urY0WpEux0Nd2bl2mh0t2M7mtnHa6pxU95UW2BeKSL6/LV6zLo00o4Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/eventstream-codec": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-eventstream": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.2.tgz", + "integrity": "sha512-cUxOy8hXPgNkKw0G0avq4nxJ2kyROTmBKaO8B4G84HguV3orxMMdwq7bdKkv4xV8RZr/Bd8lJDoVtgRjSBq83Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.2.tgz", + "integrity": "sha512-42hZ8jEXT2uR6YybCzNq9OomqHPw43YIfRfz17biZjMQA4jKSQUaHIl6VvqO2Ddl5904pXg2Yd/ku78S0Ikgog==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.2.tgz", + "integrity": "sha512-iUzdXKOgi4JVDDEG/VvoNw50FryRCEm0qAudw12DcZoiNJWl0rN6SYVLcL1xwugMfQncCXieK5UBlG6mhH7iYA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.2.tgz", + "integrity": "sha512-/mzlyzJDtngNFd/rAYvqx29a2d0VuiYKN84Y/Mu9mGw7cfMOCyRK+896tb9wV6MoPRHUX7IXuKCIL8nzz2Pz5A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.4.tgz", + "integrity": "sha512-6sU8jrSJvY/lqSnU6IYsa8SrCKwOZ4Enl6O4xVJo8RCq9Bdr5Giuw2eUaJAk9GPcpr4OFcmSFv3JOLhpKGeRZA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.4", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.972.0", + "@smithy/core": "^3.22.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-websocket": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.2.tgz", + "integrity": "sha512-D4fFifl48BJ7fSGz33zJPrbKQ4DFD5mR73xTEs1JoxgsyskV/bR7h+QidE+Kyeps5GX7D1E4TKHimpoGSqAlRg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-format-url": "^3.972.2", + "@smithy/eventstream-codec": "^4.2.8", + "@smithy/eventstream-serde-browser": "^4.2.8", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.975.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.975.0.tgz", + "integrity": "sha512-OkeFHPlQj2c/Y5bQGkX14pxhDWUGUFt3LRHhjcDKsSCw6lrxKcxN3WFZN0qbJwKNydP+knL5nxvfgKiCLpTLRA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.1", + "@aws-sdk/middleware-host-header": "^3.972.1", + "@aws-sdk/middleware-logger": "^3.972.1", + "@aws-sdk/middleware-recursion-detection": "^3.972.1", + "@aws-sdk/middleware-user-agent": "^3.972.2", + "@aws-sdk/region-config-resolver": "^3.972.1", + "@aws-sdk/types": "^3.973.0", + "@aws-sdk/util-endpoints": "3.972.0", + "@aws-sdk/util-user-agent-browser": "^3.972.1", + "@aws-sdk/util-user-agent-node": "^3.972.1", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.21.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.11", + "@smithy/middleware-retry": "^4.4.27", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.10.12", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.26", + "@smithy/util-defaults-mode-node": "^4.2.29", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.2.tgz", + "integrity": "sha512-/7vRBsfmiOlg2X67EdKrzzQGw5/SbkXb7ALHQmlQLkZh8qNgvS2G2dDC6NtF3hzFlpP3j2k+KIEtql/6VrI6JA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/config-resolver": "^4.4.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.978.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.978.0.tgz", + "integrity": "sha512-WASLAiZAzGCIsr9Yqf0RW8Jpuwfw9RP6Dpuev1J+ewLKl5nr6JL5Y9PIfnRi7asG0QUxgu5smadfSuPDMEbJjA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.4", + "@aws-sdk/nested-clients": "3.978.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients": { + "version": "3.978.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.978.0.tgz", + "integrity": "sha512-FyFiPp1SPt2JnspHlPO0LJyRwfYLBA27ToAoJAsbJIcd/Ytt9mFkRQ4kqUJQwnSl5JpdYzotNRqoRFCmx3uUfA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.4", + "@aws-sdk/middleware-host-header": "^3.972.2", + "@aws-sdk/middleware-logger": "^3.972.2", + "@aws-sdk/middleware-recursion-detection": "^3.972.2", + "@aws-sdk/middleware-user-agent": "^3.972.4", + "@aws-sdk/region-config-resolver": "^3.972.2", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.972.0", + "@aws-sdk/util-user-agent-browser": "^3.972.2", + "@aws-sdk/util-user-agent-node": "^3.972.2", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/middleware-retry": "^4.4.29", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.28", + "@smithy/util-defaults-mode-node": "^4.2.31", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.972.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.972.0.tgz", + "integrity": "sha512-6JHsl1V/a1ZW8D8AFfd4R52fwZPnZ5H4U6DS8m/bWT8qad72NvbOFAC7U2cDtFs2TShqUO3TEiX/EJibtY3ijg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.972.0", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints/node_modules/@aws-sdk/types": { + "version": "3.972.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.972.0.tgz", + "integrity": "sha512-U7xBIbLSetONxb2bNzHyDgND3oKGoIfmknrEVnoEU4GUSs+0augUOIn9DIWGUO2ETcRFdsRUnmx9KhPT9Ojbug==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.972.2.tgz", + "integrity": "sha512-RCd8eur5wzDLgFBvbBhoFQ1bw1wxHJiN88MQ82IiJBs6OGXTWaf0oFgLbK06qJvnVUqL13t3jEnlYPHPNdgBWw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.965.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.4.tgz", + "integrity": "sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.2.tgz", + "integrity": "sha512-gz76bUyebPZRxIsBHJUd/v+yiyFzm9adHbr8NykP2nm+z/rFyvQneOHajrUejtmnc5tTBeaDPL4X25TnagRk4A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.2.tgz", + "integrity": "sha512-vnxOc4C6AR7hVbwyFo1YuH0GB6dgJlWt8nIOOJpnzJAWJPkUMPJ9Zv2lnKsSU7TTZbhP2hEO8OZ4PYH59XFv8Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.2.tgz", + "integrity": "sha512-jGOOV/bV1DhkkUhHiZ3/1GZ67cZyOXaDb7d1rYD6ZiXf5V9tBNOcgqXwRRPvrCbYaFRa1pPMFb3ZjqjWpR3YfA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.3.tgz", + "integrity": "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.1.tgz", + "integrity": "sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@buape/carbon": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@buape/carbon/-/carbon-0.14.0.tgz", + "integrity": "sha512-mavllPK2iVpRNRtC4C8JOUdJ1hdV0+LDelFW+pjpJaM31MBLMfIJ+f/LlYTIK5QrEcQsXOC+6lU2e0gmgjWhIQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^25.0.9", + "discord-api-types": "0.38.37" + }, + "optionalDependencies": { + "@cloudflare/workers-types": "4.20260120.0", + "@discordjs/voice": "0.19.0", + "@hono/node-server": "1.19.9", + "@types/bun": "1.3.6", + "@types/ws": "8.18.1", + "ws": "8.19.0" + } + }, + "node_modules/@cacheable/memory": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.7.tgz", + "integrity": "sha512-RbxnxAMf89Tp1dLhXMS7ceft/PGsDl1Ip7T20z5nZ+pwIAsQ1p2izPjVG69oCLv/jfQ7HDPHTWK0c9rcAWXN3A==", + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.3.3", + "@keyv/bigmap": "^1.3.0", + "hookified": "^1.14.0", + "keyv": "^5.5.5" + } + }, + "node_modules/@cacheable/node-cache": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@cacheable/node-cache/-/node-cache-1.7.6.tgz", + "integrity": "sha512-6Omk2SgNnjtxB5f/E6bTIWIt5xhdpx39fGNRQgU9lojvRxU68v+qY+SXXLsp3ZGukqoPjsK21wZ6XABFr/Ge3A==", + "license": "MIT", + "dependencies": { + "cacheable": "^2.3.1", + "hookified": "^1.14.0", + "keyv": "^5.5.5" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.3.3.tgz", + "integrity": "sha512-JsXDL70gQ+1Vc2W/KUFfkAJzgb4puKwwKehNLuB+HrNKWf91O736kGfxn4KujXCCSuh6mRRL4XEB0PkAFjWS0A==", + "license": "MIT", + "dependencies": { + "hashery": "^1.3.0", + "keyv": "^5.5.5" + } + }, + "node_modules/@clack/core": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.5.0.tgz", + "integrity": "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.11.0.tgz", + "integrity": "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==", + "license": "MIT", + "dependencies": { + "@clack/core": "0.5.0", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@cloudflare/workers-types": { + "version": "4.20260120.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20260120.0.tgz", + "integrity": "sha512-B8pueG+a5S+mdK3z8oKu1ShcxloZ7qWb68IEyLLaepvdryIbNC7JVPcY0bWsjS56UQVKc5fnyRge3yZIwc9bxw==", + "license": "MIT OR Apache-2.0", + "optional": true + }, + "node_modules/@discordjs/voice": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.19.0.tgz", + "integrity": "sha512-UyX6rGEXzVyPzb1yvjHtPfTlnLvB5jX/stAMdiytHhfoydX+98hfympdOwsnTktzr+IRvphxTbdErgYDJkEsvw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@types/ws": "^8.18.1", + "discord-api-types": "^0.38.16", + "prism-media": "^1.3.5", + "tslib": "^2.8.1", + "ws": "^8.18.3" + }, + "engines": { + "node": ">=22.12.0" + }, + "funding": { + "url": "https://github.com/discordjs/discord.js?sponsor" + } + }, + "node_modules/@emnapi/core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@glideapps/ts-necessities": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.2.3.tgz", + "integrity": "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@google/genai": { + "version": "1.34.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.34.0.tgz", + "integrity": "sha512-vu53UMPvjmb7PGzlYu6Tzxso8Dfhn+a7eQFaS2uNemVtDZKwzSpJ5+ikqBbXplF7RGB1STcVDqCkPvquiwb2sw==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^10.3.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.24.0" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@grammyjs/runner": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@grammyjs/runner/-/runner-2.0.3.tgz", + "integrity": "sha512-nckmTs1dPWfVQteK9cxqxzE+0m1VRvluLWB8UgFzsjg62w3qthPJt0TYtJBEdG7OedvfQq4vnFAyE6iaMkR42A==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0" + }, + "engines": { + "node": ">=12.20.0 || >=14.13.1" + }, + "peerDependencies": { + "grammy": "^1.13.1" + } + }, + "node_modules/@grammyjs/transformer-throttler": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@grammyjs/transformer-throttler/-/transformer-throttler-1.2.1.tgz", + "integrity": "sha512-CpWB0F3rJdUiKsq7826QhQsxbZi4wqfz1ccKX+fr+AOC+o8K7ZvS+wqX0suSu1QCsyUq2MDpNiKhyL2ZOJUS4w==", + "license": "MIT", + "dependencies": { + "bottleneck": "^2.0.0" + }, + "engines": { + "node": "^12.20.0 || >=14.13.1" + }, + "peerDependencies": { + "grammy": "^1.0.0" + } + }, + "node_modules/@grammyjs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@grammyjs/types/-/types-3.23.0.tgz", + "integrity": "sha512-D3jQ4UWERPsyR3op/YFudMMIPNTU47vy7L51uO9/73tMELmjO/+LX5N36/Y0CG5IQfIsz43MxiHI5rgsK0/k+g==", + "license": "MIT" + }, + "node_modules/@hapi/boom": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz", + "integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "9.x.x" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@homebridge/ciao": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@homebridge/ciao/-/ciao-1.3.4.tgz", + "integrity": "sha512-qK6ZgGx0wwOubq/MY6eTbhApQHBUQCvCOsTYpQE01uLvfA2/Prm6egySHlZouKaina1RPuDwfLhCmsRCxwHj3Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.1", + "fast-deep-equal": "^3.1.3", + "source-map-support": "^0.5.21", + "tslib": "^2.8.1" + }, + "bin": { + "ciao-bcs": "lib/bonjour-conformance-testing.js" + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", + "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@huggingface/jinja": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.5.4.tgz", + "integrity": "sha512-VoQJywjpjy2D88Oj0BTHRuS8JCbUgoOg5t1UGgbtGh2fRia9Dx/k6Wf8FqrEWIvWK9fAkfJeeLB9fcSpCNPCpw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "license": "MIT" + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "license": "MIT", + "optional": true + }, + "node_modules/@line/bot-sdk": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/@line/bot-sdk/-/bot-sdk-10.6.0.tgz", + "integrity": "sha512-4hSpglL/G/cW2JCcohaYz/BS0uOSJNV9IEYdMm0EiPEvDLayoI2hGq2D86uYPQFD2gvgkyhmzdShpWLG3P5r3w==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^24.0.0" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "axios": "^1.7.4" + } + }, + "node_modules/@line/bot-sdk/node_modules/@types/node": { + "version": "24.10.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", + "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@lit-labs/signals": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@lit-labs/signals/-/signals-0.2.0.tgz", + "integrity": "sha512-68plyIbciumbwKaiilhLNyhz4Vg6/+nJwDufG2xxWA9r/fUw58jxLHCAlKs+q1CE5Lmh3cZ3ShyYKnOCebEpVA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "lit": "^2.0.0 || ^3.0.0", + "signal-polyfill": "^0.2.2" + } + }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.5.1.tgz", + "integrity": "sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@lit/context": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@lit/context/-/context-1.1.6.tgz", + "integrity": "sha512-M26qDE6UkQbZA2mQ3RjJ3Gzd8TxP+/0obMgE5HfkfLhEEyYE3Bui4A5XHiGPjy0MUGAyxB3QgVuw2ciS0kHn6A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.2 || ^2.1.0" + } + }, + "node_modules/@lit/reactive-element": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz", + "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.5.0" + } + }, + "node_modules/@lydell/node-pty": { + "version": "1.2.0-beta.3", + "resolved": "https://registry.npmjs.org/@lydell/node-pty/-/node-pty-1.2.0-beta.3.tgz", + "integrity": "sha512-ngGAItlRhmJXrhspxt8kX13n1dVFqzETOq0m/+gqSkO8NJBvNMwP7FZckMwps2UFySdr4yxCXNGu/bumg5at6A==", + "license": "MIT", + "optionalDependencies": { + "@lydell/node-pty-darwin-arm64": "1.2.0-beta.3", + "@lydell/node-pty-darwin-x64": "1.2.0-beta.3", + "@lydell/node-pty-linux-arm64": "1.2.0-beta.3", + "@lydell/node-pty-linux-x64": "1.2.0-beta.3", + "@lydell/node-pty-win32-arm64": "1.2.0-beta.3", + "@lydell/node-pty-win32-x64": "1.2.0-beta.3" + } + }, + "node_modules/@lydell/node-pty-darwin-arm64": { + "version": "1.2.0-beta.3", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-darwin-arm64/-/node-pty-darwin-arm64-1.2.0-beta.3.tgz", + "integrity": "sha512-owcv+e1/OSu3bf9ZBdUQqJsQF888KyuSIiPYFNn0fLhgkhm9F3Pvha76Kj5mCPnodf7hh3suDe7upw7GPRXftQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lydell/node-pty-darwin-x64": { + "version": "1.2.0-beta.3", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-darwin-x64/-/node-pty-darwin-x64-1.2.0-beta.3.tgz", + "integrity": "sha512-k38O+UviWrWdxtqZBBc/D8NJU11Rey8Y2YMwSWNxLv3eXZZdF5IVpbBkI/2RmLsV5nCcciqLPbukxeZnEfPlwA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lydell/node-pty-linux-arm64": { + "version": "1.2.0-beta.3", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-linux-arm64/-/node-pty-linux-arm64-1.2.0-beta.3.tgz", + "integrity": "sha512-HUwRpGu3O+4sv9DAQFKnyW5LYhyYu2SDUa/bdFO/t4dIFCM4uDJEq47wfRM7+aYtJTi1b3lakN8SlWeuFQqJQQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lydell/node-pty-linux-x64": { + "version": "1.2.0-beta.3", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-linux-x64/-/node-pty-linux-x64-1.2.0-beta.3.tgz", + "integrity": "sha512-+RRY0PoCUeQaCvPR7/UnkGbxulwbFtoTWJfe+o4T1RcNtngrgaI55I9nl8CD8uqhGrB3smKuyvPM5UtwGhASUw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lydell/node-pty-win32-arm64": { + "version": "1.2.0-beta.3", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-win32-arm64/-/node-pty-win32-arm64-1.2.0-beta.3.tgz", + "integrity": "sha512-UEDd9ASp2M3iIYpIzfmfBlpyn4+K1G4CAjYcHWStptCkefoSVXWTiUBIa1KjBjZi3/xmsHIDpBEYTkGWuvLt2Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lydell/node-pty-win32-x64": { + "version": "1.2.0-beta.3", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-win32-x64/-/node-pty-win32-x64-1.2.0-beta.3.tgz", + "integrity": "sha512-TpdqSFYx7/Rj+68tuP6F/lkRYrHCYAIJgaS1bx3SctTkb5QAQCFwOKHd4xlsivmEOMT2LdhkJggPxwX9PAO5pQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@mariozechner/clipboard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard/-/clipboard-0.3.0.tgz", + "integrity": "sha512-tQrCRAtr58BLmWcvwCqlJo5GJgqBGb3zwOBFFBKCEKvRgD8y/EawhCyXsfOh9XOOde1NTAYsYuYyVOYw2tLnoQ==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@mariozechner/clipboard-darwin-arm64": "0.3.0", + "@mariozechner/clipboard-darwin-universal": "0.3.0", + "@mariozechner/clipboard-darwin-x64": "0.3.0", + "@mariozechner/clipboard-linux-arm64-gnu": "0.3.0", + "@mariozechner/clipboard-linux-riscv64-gnu": "0.3.0", + "@mariozechner/clipboard-linux-x64-gnu": "0.3.0", + "@mariozechner/clipboard-linux-x64-musl": "0.3.0", + "@mariozechner/clipboard-win32-arm64-msvc": "0.3.0", + "@mariozechner/clipboard-win32-x64-msvc": "0.3.0" + } + }, + "node_modules/@mariozechner/clipboard-darwin-arm64": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-arm64/-/clipboard-darwin-arm64-0.3.0.tgz", + "integrity": "sha512-7i4bitLzRSij0fj6q6tPmmf+JrwHqfBsBmf8mOcLVv0LVexD+4gEsyMait4i92exKYmCfna6uHKVS84G4nqehg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-darwin-universal": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-universal/-/clipboard-darwin-universal-0.3.0.tgz", + "integrity": "sha512-FVZLGdIkmvqtPQjD0GQwKLVheL+zV7DjA6I5NcsHGjBeWpG2nACS6COuelNf8ruMoPxJFw7RoB4fjw6mmjT+Nw==", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-darwin-x64": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-darwin-x64/-/clipboard-darwin-x64-0.3.0.tgz", + "integrity": "sha512-KuurQYEqRhalvBji3CH5xIq1Ts23IgVRE3rjanhqFDI77luOhCnlNbDtqv3No5OxJhEBLykQNrAzfgjqPsPWdA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-linux-arm64-gnu": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-arm64-gnu/-/clipboard-linux-arm64-gnu-0.3.0.tgz", + "integrity": "sha512-nWpGMlk43bch7ztGfnALcSi5ZREVziPYzrFKjoJimbwaiULrfY0fGce0gWBynP9ak0nHgDLp0nSa7b4cCl+cIw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-linux-riscv64-gnu": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-riscv64-gnu/-/clipboard-linux-riscv64-gnu-0.3.0.tgz", + "integrity": "sha512-4BC08CIaOXSSAGRZLEjqJmQfioED8ohAzwt0k2amZPEbH96YKoBNorq5EdwPf5VT+odS0DeyCwhwtxokRLZIvQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-linux-x64-gnu": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-x64-gnu/-/clipboard-linux-x64-gnu-0.3.0.tgz", + "integrity": "sha512-GpNY5Y9nOzr0Vt0Qi5U88qwe6piiIHk44kSMexl8ns90LluN5UTNYmyfi7Xq3/lmPZCpnB2xvBTYbsXCxnopIA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-linux-x64-musl": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-linux-x64-musl/-/clipboard-linux-x64-musl-0.3.0.tgz", + "integrity": "sha512-+PnR48/x9GMY5Kh8BLjzHMx6trOegMtxAuqTM9X/bhV3QuW6sLLd7nojDHSGj/ZueK6i0tcQxvOrgNLozVtNDA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-win32-arm64-msvc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-win32-arm64-msvc/-/clipboard-win32-arm64-msvc-0.3.0.tgz", + "integrity": "sha512-+dy2vZ1Ph4EYj0cotB+bVUVk/uKl2bh9LOp/zlnFqoCCYDN6sm+L0VyIOPPo3hjoEVdGpHe1MUxp3qG/OLwXgg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/clipboard-win32-x64-msvc": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mariozechner/clipboard-win32-x64-msvc/-/clipboard-win32-x64-msvc-0.3.0.tgz", + "integrity": "sha512-dfpHrUpKHl7ad3xVGE1+gIN3cEnjjPZa4I0BIYMuj2OKq07Gf1FKTXMypB41rDFv6XNzcfhYQnY+ZNgIu9FB8A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@mariozechner/jiti": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@mariozechner/jiti/-/jiti-2.6.5.tgz", + "integrity": "sha512-faGUlTcXka5l7rv0lP3K3vGW/ejRuOS24RR2aSFWREUQqzjgdsuWNo/IiPqL3kWRGt6Ahl2+qcDAwtdeWeuGUw==", + "license": "MIT", + "dependencies": { + "std-env": "^3.10.0", + "yoctocolors": "^2.1.2" + }, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/@mariozechner/mini-lit": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@mariozechner/mini-lit/-/mini-lit-0.2.1.tgz", + "integrity": "sha512-u300euLgCsDDlb8o2Wbz+55eSJga5X2vB58s9XBuFIr2Bi3iI+GMR7t/NYo/O6Vr6obXShXgYjR3SRUJVgo+kQ==", + "dev": true, + "dependencies": { + "@preact/signals-core": "^1.12.1", + "class-variance-authority": "^0.7.1", + "diff": "^8.0.2", + "highlight.js": "^11.11.1", + "html-parse-string": "^0.0.9", + "katex": "^0.16.22", + "lucide": "^0.544.0", + "marked": "^16.3.0", + "tailwind-merge": "^3.3.1", + "tailwind-variants": "^3.1.1", + "uhtml": "^5.0.9" + }, + "peerDependencies": { + "lit": "^3.3.1" + } + }, + "node_modules/@mariozechner/mini-lit/node_modules/lucide": { + "version": "0.544.0", + "resolved": "https://registry.npmjs.org/lucide/-/lucide-0.544.0.tgz", + "integrity": "sha512-U5ORwr5z9Sx7bNTDFaW55RbjVdQEnAcT3vws9uz3vRT1G4XXJUDAhRZdxhFoIyHEvjmTkzzlEhjSLYM5n4mb5w==", + "dev": true, + "license": "ISC" + }, + "node_modules/@mariozechner/pi-agent-core": { + "version": "0.49.3", + "resolved": "https://registry.npmjs.org/@mariozechner/pi-agent-core/-/pi-agent-core-0.49.3.tgz", + "integrity": "sha512-YL3PrLA8//Cklx58GJBUyNBCVLIOtK+wpAgqimuR03EgToaGPkSM7B/1S4CP4pFkr7b3DTIsC6t++tK7LgfjQg==", + "license": "MIT", + "dependencies": { + "@mariozechner/pi-ai": "^0.49.3", + "@mariozechner/pi-tui": "^0.49.3" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@mariozechner/pi-ai": { + "version": "0.49.3", + "resolved": "https://registry.npmjs.org/@mariozechner/pi-ai/-/pi-ai-0.49.3.tgz", + "integrity": "sha512-FYck4TPrF7ps3WBKxLnBQdda9OXUWN6rukni0LgK8m/GpMAXGienHouDrWPn0XIgTwrz5r7SGI3sfsEYslCICA==", + "license": "MIT", + "dependencies": { + "@anthropic-ai/sdk": "0.71.2", + "@aws-sdk/client-bedrock-runtime": "^3.966.0", + "@google/genai": "1.34.0", + "@mistralai/mistralai": "1.10.0", + "@sinclair/typebox": "^0.34.41", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "chalk": "^5.6.2", + "openai": "6.10.0", + "partial-json": "^0.1.7", + "zod-to-json-schema": "^3.24.6" + }, + "bin": { + "pi-ai": "dist/cli.js" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@mariozechner/pi-coding-agent": { + "version": "0.49.3", + "resolved": "https://registry.npmjs.org/@mariozechner/pi-coding-agent/-/pi-coding-agent-0.49.3.tgz", + "integrity": "sha512-V/Fsq0PeYB5svmw5lZsbD/glmkXofegQcPSKecK2ab3VihKwQp/MQfYjyK6nY4b/B1HIugatcDWaH5WvPKIKwg==", + "license": "MIT", + "dependencies": { + "@mariozechner/clipboard": "^0.3.0", + "@mariozechner/jiti": "^2.6.2", + "@mariozechner/pi-agent-core": "^0.49.3", + "@mariozechner/pi-ai": "^0.49.3", + "@mariozechner/pi-tui": "^0.49.3", + "@silvia-odwyer/photon-node": "^0.3.4", + "chalk": "^5.5.0", + "cli-highlight": "^2.1.11", + "diff": "^8.0.2", + "file-type": "^21.1.1", + "glob": "^11.0.3", + "marked": "^15.0.12", + "minimatch": "^10.1.1", + "proper-lockfile": "^4.1.2", + "yaml": "^2.8.2" + }, + "bin": { + "pi": "dist/cli.js" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@mariozechner/pi-coding-agent/node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@mariozechner/pi-tui": { + "version": "0.49.3", + "resolved": "https://registry.npmjs.org/@mariozechner/pi-tui/-/pi-tui-0.49.3.tgz", + "integrity": "sha512-SyBtQ0B9A/8V4eX7z3l9Q7sEVAnSueNJ1gC6+nRakDBfBOSxuqA61vz6tic0C7Jj46NERRuvJKdQSmk1VP5sUA==", + "license": "MIT", + "dependencies": { + "@types/mime-types": "^2.1.4", + "chalk": "^5.5.0", + "get-east-asian-width": "^1.3.0", + "marked": "^15.0.12", + "mime-types": "^3.0.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@mariozechner/pi-tui/node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@mistralai/mistralai": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-1.10.0.tgz", + "integrity": "sha512-tdIgWs4Le8vpvPiUEWne6tK0qbVc+jMenujnvTqOjogrJUsCSQhus0tHTU1avDDh5//Rq2dFgP9mWRAdIEoBqg==", + "dependencies": { + "zod": "^3.20.0", + "zod-to-json-schema": "^3.24.1" + } + }, + "node_modules/@mistralai/mistralai/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@mozilla/readability": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.6.0.tgz", + "integrity": "sha512-juG5VWh4qAivzTAeMzvY9xs9HY5rAcr2E4I7tiSSCokRFi7XIZCAu92ZkSTsIj1OPceCifL3cpfteP3pDT9/QQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@napi-rs/canvas": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.89.tgz", + "integrity": "sha512-7GjmkMirJHejeALCqUnZY3QwID7bbumOiLrqq2LKgxrdjdmxWQBTc6rcASa2u8wuWrH7qo4/4n/VNrOwCoKlKg==", + "license": "MIT", + "optional": true, + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "0.1.89", + "@napi-rs/canvas-darwin-arm64": "0.1.89", + "@napi-rs/canvas-darwin-x64": "0.1.89", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.89", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.89", + "@napi-rs/canvas-linux-arm64-musl": "0.1.89", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.89", + "@napi-rs/canvas-linux-x64-gnu": "0.1.89", + "@napi-rs/canvas-linux-x64-musl": "0.1.89", + "@napi-rs/canvas-win32-arm64-msvc": "0.1.89", + "@napi-rs/canvas-win32-x64-msvc": "0.1.89" + } + }, + "node_modules/@napi-rs/canvas-android-arm64": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.89.tgz", + "integrity": "sha512-CXxQTXsjtQqKGENS8Ejv9pZOFJhOPIl2goenS+aU8dY4DygvkyagDhy/I07D1YLqrDtPvLEX5zZHt8qUdnuIpQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.89.tgz", + "integrity": "sha512-k29cR/Zl20WLYM7M8YePevRu2VQRaKcRedYr1V/8FFHkyIQ8kShEV+MPoPGi+znvmd17Eqjy2Pk2F2kpM2umVg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-x64": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.89.tgz", + "integrity": "sha512-iUragqhBrA5FqU13pkhYBDbUD1WEAIlT8R2+fj6xHICY2nemzwMUI8OENDhRh7zuL06YDcRwENbjAVxOmaX9jg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.89.tgz", + "integrity": "sha512-y3SM9sfDWasY58ftoaI09YBFm35Ig8tosZqgahLJ2WGqawCusGNPV9P0/4PsrLOCZqGg629WxexQMY25n7zcvA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.89.tgz", + "integrity": "sha512-NEoF9y8xq5fX8HG8aZunBom1ILdTwt7ayBzSBIwrmitk7snj4W6Fz/yN/ZOmlM1iyzHDNX5Xn0n+VgWCF8BEdA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.89.tgz", + "integrity": "sha512-UQQkIEzV12/l60j1ziMjZ+mtodICNUbrd205uAhbyTw0t60CrC/EsKb5/aJWGq1wM0agvcgZV72JJCKfLS6+4w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.89.tgz", + "integrity": "sha512-1/VmEoFaIO6ONeeEMGoWF17wOYZOl5hxDC1ios2Bkz/oQjbJJ8DY/X22vWTmvuUKWWhBVlo63pxLGZbjJU/heA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.89.tgz", + "integrity": "sha512-ebLuqkCuaPIkKgKH9q4+pqWi1tkPOfiTk5PM1LKR1tB9iO9sFNVSIgwEp+SJreTSbA2DK5rW8lQXiN78SjtcvA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.89.tgz", + "integrity": "sha512-w+5qxHzplvA4BkHhCaizNMLLXiI+CfP84YhpHm/PqMub4u8J0uOAv+aaGv40rYEYra5hHRWr9LUd6cfW32o9/A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-arm64-msvc": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.89.tgz", + "integrity": "sha512-DmyXa5lJHcjOsDC78BM3bnEECqbK3xASVMrKfvtT/7S7Z8NGQOugvu+L7b41V6cexCd34mBWgMOsjoEBceeB1Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "0.1.89", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.89.tgz", + "integrity": "sha512-WMej0LZrIqIncQcx0JHaMXlnAG7sncwJh7obs/GBgp0xF9qABjwoRwIooMWCZkSansapKGNUHhamY6qEnFN7gA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@node-llama-cpp/linux-arm64": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/linux-arm64/-/linux-arm64-3.15.0.tgz", + "integrity": "sha512-IaHIllWlj6tGjhhCtyp1w6xA7AHaGJiVaXAZ+78hDs8X1SL9ySBN2Qceju8AQJALePtynbAfjgjTqjQ7Hyk+IQ==", + "cpu": [ + "arm64", + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/linux-armv7l": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/linux-armv7l/-/linux-armv7l-3.15.0.tgz", + "integrity": "sha512-ZuZ3q6mejQnEP4o22la7zBv7jNR+IZfgItDm3KjAl04HUXTKJ43HpNwjnf9GyYYd+dEgtoX0MESvWz4RnGH8Jw==", + "cpu": [ + "arm", + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/linux-x64": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/linux-x64/-/linux-x64-3.15.0.tgz", + "integrity": "sha512-etUuTqSyNefRObqc5+JZviNTkuef2XEtHcQLaamEIWwjI1dj7nTD2YMZPBP7H3M3E55HSIY82vqCQ1bp6ZILiA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/linux-x64-cuda": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/linux-x64-cuda/-/linux-x64-cuda-3.15.0.tgz", + "integrity": "sha512-mDjyVulCTRYilm9Emm3lDMx7dbI1vzGqk28Pj28shartjERTUu8aUNDYOmVKNMLpUKS1akw7vy0lMF8t4qswxQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/linux-x64-cuda-ext": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/linux-x64-cuda-ext/-/linux-x64-cuda-ext-3.15.0.tgz", + "integrity": "sha512-wQwgSl7Qm8vH56oBt7IuWWDNNsDECkVMS000C92wl3PkbzjwZFiWzehwa+kF8Lr2BBMiCJNkI5nEabhYH3RN2Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/linux-x64-vulkan": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/linux-x64-vulkan/-/linux-x64-vulkan-3.15.0.tgz", + "integrity": "sha512-htVIthQKq/rr8v5e7NiVtcHsstqTBAAC50kUymmDMbrzAu6d/EHacCJpNbU57b1UUa1nKN5cBqr6Jr+QqEalMA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/mac-arm64-metal": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/mac-arm64-metal/-/mac-arm64-metal-3.15.0.tgz", + "integrity": "sha512-3Vkq6bpyQZaIzoaLLP7H2Tt8ty5BS0zxUY2pX0ox2S9P4fp8Au0CCJuUJF4V+EKi+/PTn70A6R1QCkRMfMQJig==", + "cpu": [ + "arm64", + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/mac-x64": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/mac-x64/-/mac-x64-3.15.0.tgz", + "integrity": "sha512-BUrmLu0ySveEYv2YzFIjqnWWAqjTZfRHuzoFLaZwqIJ86Jzycm9tzxJub4wfJCj6ixeuWyI1sUdNGIw4/2E03Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/win-arm64": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/win-arm64/-/win-arm64-3.15.0.tgz", + "integrity": "sha512-GwhqaPNpbtGDmw0Ex13hwq4jqzSZr7hw5QpRWhSKB1dHiYj6C1NLM1Vz5xiDZX+69WI/ndb+FEqGiIYFQpfmiQ==", + "cpu": [ + "arm64", + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/win-x64": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/win-x64/-/win-x64-3.15.0.tgz", + "integrity": "sha512-gWhtc8l3HOry5guO46YfFohLQnF0NfL4On0GAO8E27JiYYxHO9nHSCfFif4+U03+FfHquZXL0znJ1qPVOiwOPw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/win-x64-cuda": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/win-x64-cuda/-/win-x64-cuda-3.15.0.tgz", + "integrity": "sha512-2Kyu1roDwXwFLaJgGZQISIXP9lCDZtJCx/DRcmrYRHcSUFCzo5ikOuAECyliSSQmRUAvvlRCuD+GrTcegbhojA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/win-x64-cuda-ext": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/win-x64-cuda-ext/-/win-x64-cuda-ext-3.15.0.tgz", + "integrity": "sha512-KQoNH9KsVtqGVXaRdPrnHPrg5w3KOM7CfynPmG1m16gmjmDSIspdPg/Dbg6DgHBfkdAzt+duRZEBk8Bg8KbDHw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@node-llama-cpp/win-x64-vulkan": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@node-llama-cpp/win-x64-vulkan/-/win-x64-vulkan-3.15.0.tgz", + "integrity": "sha512-sH+K7lO49WrUvCCC3RPddCBrn2ZQwKCXKL90P/NZicMRgxTPFZEVSU2jXR/bu1K8B+4lNN+z5OEbjSYs7cKEcA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@octokit/app": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@octokit/app/-/app-16.1.2.tgz", + "integrity": "sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/auth-app": "^8.1.2", + "@octokit/auth-unauthenticated": "^7.0.3", + "@octokit/core": "^7.0.6", + "@octokit/oauth-app": "^8.0.3", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/types": "^16.0.0", + "@octokit/webhooks": "^14.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-app": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-8.1.2.tgz", + "integrity": "sha512-db8VO0PqXxfzI6GdjtgEFHY9tzqUql5xMFXYA12juq8TeTgPAuiiP3zid4h50lwlIP457p5+56PnJOgd2GGBuw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/auth-oauth-app": "^9.0.3", + "@octokit/auth-oauth-user": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "toad-cache": "^3.7.0", + "universal-github-app-jwt": "^2.2.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-oauth-app": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-9.0.3.tgz", + "integrity": "sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/auth-oauth-device": "^8.0.3", + "@octokit/auth-oauth-user": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-oauth-device": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-8.0.3.tgz", + "integrity": "sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/oauth-methods": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-oauth-user": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-6.0.2.tgz", + "integrity": "sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/auth-oauth-device": "^8.0.3", + "@octokit/oauth-methods": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-token": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/auth-unauthenticated": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-7.0.3.tgz", + "integrity": "sha512-8Jb1mtUdmBHL7lGmop9mU9ArMRUTRhg8vp0T1VtZ4yd9vEm3zcLwmjQkhNEduKawOOORie61xhtYIhTDN+ZQ3g==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/core": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", + "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.3", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/endpoint": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.2.tgz", + "integrity": "sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/graphql": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", + "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/oauth-app": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-8.0.3.tgz", + "integrity": "sha512-jnAjvTsPepyUaMu9e69hYBuozEPgYqP4Z3UnpmvoIzHDpf8EXDGvTY1l1jK0RsZ194oRd+k6Hm13oRU8EoDFwg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/auth-oauth-app": "^9.0.2", + "@octokit/auth-oauth-user": "^6.0.1", + "@octokit/auth-unauthenticated": "^7.0.2", + "@octokit/core": "^7.0.5", + "@octokit/oauth-authorization-url": "^8.0.0", + "@octokit/oauth-methods": "^6.0.1", + "@types/aws-lambda": "^8.10.83", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/oauth-authorization-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-8.0.0.tgz", + "integrity": "sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/oauth-methods": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-6.0.2.tgz", + "integrity": "sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/oauth-authorization-url": "^8.0.0", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", + "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", + "license": "MIT", + "optional": true + }, + "node_modules/@octokit/openapi-webhooks-types": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-webhooks-types/-/openapi-webhooks-types-12.1.0.tgz", + "integrity": "sha512-WiuzhOsiOvb7W3Pvmhf8d2C6qaLHXrWiLBP4nJ/4kydu+wpagV5Fkz9RfQwV2afYzv3PB+3xYgp4mAdNGjDprA==", + "license": "MIT", + "optional": true + }, + "node_modules/@octokit/plugin-paginate-graphql": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-6.0.0.tgz", + "integrity": "sha512-crfpnIoFiBtRkvPqOyLOsw12XsveYuY2ieP6uYDosoUegBJpSVxGwut9sxUgFFcll3VTOTqpUf8yGd8x1OmAkQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", + "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-17.0.0.tgz", + "integrity": "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-8.0.3.tgz", + "integrity": "sha512-vKGx1i3MC0za53IzYBSBXcrhmd+daQDzuZfYDd52X5S0M2otf3kVZTVP8bLA3EkU0lTvd1WEC2OlNNa4G+dohA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=7" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-11.0.3.tgz", + "integrity": "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/types": "^16.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": "^7.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.7.tgz", + "integrity": "sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/endpoint": "^11.0.2", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "fast-content-type-parse": "^3.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/request-error": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", + "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/types": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", + "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/openapi-types": "^27.0.0" + } + }, + "node_modules/@octokit/webhooks": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-14.2.0.tgz", + "integrity": "sha512-da6KbdNCV5sr1/txD896V+6W0iamFWrvVl8cHkBSPT+YlvmT3DwXa4jxZnQc+gnuTEqSWbBeoSZYTayXH9wXcw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/openapi-webhooks-types": "12.1.0", + "@octokit/request-error": "^7.0.0", + "@octokit/webhooks-methods": "^6.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/webhooks-methods": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-6.0.0.tgz", + "integrity": "sha512-MFlzzoDJVw/GcbfzVC1RLR36QqkTLUf79vLVO3D+xn7r0QgxnFoLZgtrzxiQErAjFUOdH6fas2KeQJ1yr/qaXQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.110.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.110.0.tgz", + "integrity": "sha512-6Ct21OIlrEnFEJk5LT4e63pk3btsI6/TusD/GStLi7wYlGJNOl1GI9qvXAnRAxQU9zqA2Oz+UwhfTOU2rPZVow==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@oxfmt/darwin-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@oxfmt/darwin-arm64/-/darwin-arm64-0.26.0.tgz", + "integrity": "sha512-AAGc+8CffkiWeVgtWf4dPfQwHEE5c/j/8NWH7VGVxxJRCZFdmWcqCXprvL2H6qZFewvDLrFbuSPRCqYCpYGaTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxfmt/darwin-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@oxfmt/darwin-x64/-/darwin-x64-0.26.0.tgz", + "integrity": "sha512-xFx5ijCTjw577wJvFlZEMmKDnp3HSCcbYdCsLRmC5i3TZZiDe9DEYh3P46uqhzj8BkEw1Vm1ZCWdl48aEYAzvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxfmt/linux-arm64-gnu": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@oxfmt/linux-arm64-gnu/-/linux-arm64-gnu-0.26.0.tgz", + "integrity": "sha512-GubkQeQT5d3B/Jx/IiR7NMkSmXrCZcVI0BPh1i7mpFi8HgD1hQ/LbhiBKAMsMqs5bbugdQOgBEl8bOhe8JhW1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxfmt/linux-arm64-musl": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@oxfmt/linux-arm64-musl/-/linux-arm64-musl-0.26.0.tgz", + "integrity": "sha512-OEypUwK69bFPj+aa3/LYCnlIUPgoOLu//WNcriwpnWNmt47808Ht7RJSg+MNK8a7pSZHpXJ5/E6CRK/OTwFdaQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxfmt/linux-x64-gnu": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@oxfmt/linux-x64-gnu/-/linux-x64-gnu-0.26.0.tgz", + "integrity": "sha512-xO6iEW2bC6ZHyOTPmPWrg/nM6xgzyRPaS84rATy6F8d79wz69LdRdJ3l/PXlkqhi7XoxhvX4ExysA0Nf10ZZEQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxfmt/linux-x64-musl": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@oxfmt/linux-x64-musl/-/linux-x64-musl-0.26.0.tgz", + "integrity": "sha512-Z3KuZFC+MIuAyFCXBHY71kCsdRq1ulbsbzTe71v+hrEv7zVBn6yzql+/AZcgfIaKzWO9OXNuz5WWLWDmVALwow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxfmt/win32-arm64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@oxfmt/win32-arm64/-/win32-arm64-0.26.0.tgz", + "integrity": "sha512-3zRbqwVWK1mDhRhTknlQFpRFL9GhEB5GfU6U7wawnuEwpvi39q91kJ+SRJvJnhyPCARkjZBd1V8XnweN5IFd1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxfmt/win32-x64": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@oxfmt/win32-x64/-/win32-x64-0.26.0.tgz", + "integrity": "sha512-m8TfIljU22i9UEIkD+slGPifTFeaCwIUfxszN3E6ABWP1KQbtwSw9Ak0TdoikibvukF/dtbeyG3WW63jv9DnEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint-tsgolint/darwin-arm64": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-arm64/-/darwin-arm64-0.11.3.tgz", + "integrity": "sha512-FU4e+w09D+2rkCVdL7I7zMuQOJ2tuapVhBGPGY66VAct2FUwFDVmgU+rNJ2hHIdc9uHg24v+FD8PcfFYpask8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint-tsgolint/darwin-x64": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-x64/-/darwin-x64-0.11.3.tgz", + "integrity": "sha512-7sm1d920HfFsC3hIP7SJVm11WhYufA8qnLQQVk7odTpSzVUAT1jtG8LdfFigzgb38zHszQbsqJ7OjAgIW/OgmA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint-tsgolint/linux-arm64": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-arm64/-/linux-arm64-0.11.3.tgz", + "integrity": "sha512-eoJfdmHcpG9k8fufb8yL3rC3HC6QELoTEfs56lmGaRIHHmd1aj4MWDbGCqdRqPEp7oC5fVvFxi7wDkA1MDf99Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint-tsgolint/linux-x64": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-x64/-/linux-x64-0.11.3.tgz", + "integrity": "sha512-t7jGK0vBApuAGvOnCPTxsdX+1e9nMdvqU3zHCJWQ7yUDaJxki0bCy4zbKfUgVo8ePeVRgIKWwqLFBOVTXQ5AMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint-tsgolint/win32-arm64": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-arm64/-/win32-arm64-0.11.3.tgz", + "integrity": "sha512-6ellG0zcWnj2b6Mr7fl19x+nlFIWGWoKCBlYnqNZ4CaziRYGpYx7PLwHhPJq331w7zzRRSnYqhyTrVluYjZADQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint-tsgolint/win32-x64": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-x64/-/win32-x64-0.11.3.tgz", + "integrity": "sha512-rzvfaRJPK9eRYVWMXCt8JtvOsVFAsqScgsFhnXzsipU6W1Te0g+b4q068o7hZ3NRTjJxNgFJj8ayOkZ6NbX0tA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint/darwin-arm64": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@oxlint/darwin-arm64/-/darwin-arm64-1.42.0.tgz", + "integrity": "sha512-ui5CdAcDsXPQwZQEXOOSWsilJWhgj9jqHCvYBm2tDE8zfwZZuF9q58+hGKH1x5y0SV4sRlyobB2Quq6uU6EgeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint/darwin-x64": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@oxlint/darwin-x64/-/darwin-x64-1.42.0.tgz", + "integrity": "sha512-wo0M/hcpHRv7vFje99zHHqheOhVEwUOKjOgBKyi0M99xcLizv04kcSm1rTd6HSCeZgOtiJYZRVAlKhQOQw2byQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint/linux-arm64-gnu": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-gnu/-/linux-arm64-gnu-1.42.0.tgz", + "integrity": "sha512-j4QzfCM8ks+OyM+KKYWDiBEQsm5RCW50H1Wz16wUyoFsobJ+X5qqcJxq6HvkE07m8euYmZelyB0WqsiDoz1v8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-arm64-musl": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-arm64-musl/-/linux-arm64-musl-1.42.0.tgz", + "integrity": "sha512-g5b1Uw7zo6yw4Ymzyd1etKzAY7xAaGA3scwB8tAp3QzuY7CYdfTwlhiLKSAKbd7T/JBgxOXAGNcLDorJyVTXcg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-x64-gnu": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-gnu/-/linux-x64-gnu-1.42.0.tgz", + "integrity": "sha512-HnD99GD9qAbpV4q9iQil7mXZUJFpoBdDavfcC2CgGLPlawfcV5COzQPNwOgvPVkr7C0cBx6uNCq3S6r9IIiEIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/linux-x64-musl": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@oxlint/linux-x64-musl/-/linux-x64-musl-1.42.0.tgz", + "integrity": "sha512-8NTe8A78HHFn+nBi+8qMwIjgv9oIBh+9zqCPNLH56ah4vKOPvbePLI6NIv9qSkmzrBuu8SB+FJ2TH/G05UzbNA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint/win32-arm64": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@oxlint/win32-arm64/-/win32-arm64-1.42.0.tgz", + "integrity": "sha512-lAPS2YAuu+qFqoTNPFcNsxXjwSV0M+dOgAzzVTAN7Yo2ifj+oLOx0GsntWoM78PvQWI7Q827ZxqtU2ImBmDapA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint/win32-x64": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@oxlint/win32-x64/-/win32-x64-1.42.0.tgz", + "integrity": "sha512-3/KmyUOHNriL6rLpaFfm9RJxdhpXY2/Ehx9UuorJr2pUA+lrZL15FAEx/DOszYm5r10hfzj40+efAHcCilNvSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@preact/signals-core": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.12.2.tgz", + "integrity": "sha512-5Yf8h1Ke3SMHr15xl630KtwPTW4sYDFkkxS0vQ8UiQLWwZQnrF9IKaVG1mN5VcJz52EcWs2acsc/Npjha/7ysA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@reflink/reflink": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@reflink/reflink/-/reflink-0.1.19.tgz", + "integrity": "sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@reflink/reflink-darwin-arm64": "0.1.19", + "@reflink/reflink-darwin-x64": "0.1.19", + "@reflink/reflink-linux-arm64-gnu": "0.1.19", + "@reflink/reflink-linux-arm64-musl": "0.1.19", + "@reflink/reflink-linux-x64-gnu": "0.1.19", + "@reflink/reflink-linux-x64-musl": "0.1.19", + "@reflink/reflink-win32-arm64-msvc": "0.1.19", + "@reflink/reflink-win32-x64-msvc": "0.1.19" + } + }, + "node_modules/@reflink/reflink-darwin-arm64": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@reflink/reflink-darwin-arm64/-/reflink-darwin-arm64-0.1.19.tgz", + "integrity": "sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@reflink/reflink-darwin-x64": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@reflink/reflink-darwin-x64/-/reflink-darwin-x64-0.1.19.tgz", + "integrity": "sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@reflink/reflink-linux-arm64-gnu": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@reflink/reflink-linux-arm64-gnu/-/reflink-linux-arm64-gnu-0.1.19.tgz", + "integrity": "sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@reflink/reflink-linux-arm64-musl": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@reflink/reflink-linux-arm64-musl/-/reflink-linux-arm64-musl-0.1.19.tgz", + "integrity": "sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@reflink/reflink-linux-x64-gnu": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@reflink/reflink-linux-x64-gnu/-/reflink-linux-x64-gnu-0.1.19.tgz", + "integrity": "sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@reflink/reflink-linux-x64-musl": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@reflink/reflink-linux-x64-musl/-/reflink-linux-x64-musl-0.1.19.tgz", + "integrity": "sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@reflink/reflink-win32-arm64-msvc": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@reflink/reflink-win32-arm64-msvc/-/reflink-win32-arm64-msvc-0.1.19.tgz", + "integrity": "sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@reflink/reflink-win32-x64-msvc": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@reflink/reflink-win32-x64-msvc/-/reflink-win32-x64-msvc-0.1.19.tgz", + "integrity": "sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.1.tgz", + "integrity": "sha512-He6ZoCfv5D7dlRbrhNBkuMVIHd0GDnjJwbICE1OWpG7G3S2gmJ+eXkcNLJjzjNDpeI2aRy56ou39AJM9AD8YFA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.1.tgz", + "integrity": "sha512-YzJdn08kSOXnj85ghHauH2iHpOJ6eSmstdRTLyaziDcUxe9SyQJgGyx/5jDIhDvtOcNvMm2Ju7m19+S/Rm1jFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.1.tgz", + "integrity": "sha512-cIvAbqM+ZVV6lBSKSBtlNqH5iCiW933t1q8j0H66B3sjbe8AxIRetVqfGgcHcJtMzBIkIALlL9fcDrElWLJQcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.1.tgz", + "integrity": "sha512-rVt+B1B/qmKwCl1XD02wKfgh3vQPXRXdB/TicV2w6g7RVAM1+cZcpigwhLarqiVCxDObFZ7UgXCxPC7tpDoRog==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.1.tgz", + "integrity": "sha512-69YKwJJBOFprQa1GktPgbuBOfnn+EGxu8sBJ1TjPER+zhSpYeaU4N07uqmyBiksOLGXsMegymuecLobfz03h8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.1.tgz", + "integrity": "sha512-9JDhHUf3WcLfnViFWm+TyorqUtnSAHaCzlSNmMOq824prVuuzDOK91K0Hl8DUcEb9M5x2O+d2/jmBMsetRIn3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.1.tgz", + "integrity": "sha512-UvApLEGholmxw/HIwmUnLq3CwdydbhaHHllvWiCTNbyGom7wTwOtz5OAQbAKZYyiEOeIXZNPkM7nA4Dtng7CLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.1.tgz", + "integrity": "sha512-uVctNgZHiGnJx5Fij7wHLhgw4uyZBVi6mykeWKOqE7bVy9Hcxn0fM/IuqdMwk6hXlaf9fFShDTFz2+YejP+x0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.1.tgz", + "integrity": "sha512-T6Eg0xWwcxd/MzBcuv4Z37YVbUbJxy5cMNnbIt/Yr99wFwli30O4BPlY8hKeGyn6lWNtU0QioBS46lVzDN38bg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.1.tgz", + "integrity": "sha512-PuGZVS2xNJyLADeh2F04b+Cz4NwvpglbtWACgrDOa5YDTEHKwmiTDjoD5eZ9/ptXtcpeFrMqD2H4Zn33KAh1Eg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.1.tgz", + "integrity": "sha512-2mOxY562ihHlz9lEXuaGEIDCZ1vI+zyFdtsoa3M62xsEunDXQE+DVPO4S4x5MPK9tKulG/aFcA/IH5eVN257Cw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.1.tgz", + "integrity": "sha512-oQVOP5cfAWZwRD0Q3nGn/cA9FW3KhMMuQ0NIndALAe6obqjLhqYVYDiGGRGrxvnjJsVbpLwR14gIUYnpIcHR1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.1.tgz", + "integrity": "sha512-Ydsxxx++FNOuov3wCBPaYjZrEvKOOGq3k+BF4BPridhg2pENfitSRD2TEuQ8i33bp5VptuNdC9IzxRKU031z5A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.1.tgz", + "integrity": "sha512-UTBjtTxVOhodhzFVp/ayITaTETRHPUPYZPXQe0WU0wOgxghMojXxYjOiPOauKIYNWJAWS2fd7gJgGQK8GU8vDA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.0.tgz", + "integrity": "sha512-tPgXB6cDTndIe1ah7u6amCI1T0SsnlOuKgg10Xh3uizJk4e5M1JGaUMk7J4ciuAUcFpbOiNhm2XIjP9ON0dUqA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.0.tgz", + "integrity": "sha512-sa4LyseLLXr1onr97StkU1Nb7fWcg6niokTwEVNOO7awaKaoRObQ54+V/hrF/BP1noMEaaAW6Fg2d/CfLiq3Mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.0.tgz", + "integrity": "sha512-/NNIj9A7yLjKdmkx5dC2XQ9DmjIECpGpwHoGmA5E1AhU0fuICSqSWScPhN1yLCkEdkCwJIDu2xIeLPs60MNIVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.0.tgz", + "integrity": "sha512-xoh8abqgPrPYPr7pTYipqnUi1V3em56JzE/HgDgitTqZBZ3yKCWI+7KUkceM6tNweyUKYru1UMi7FC060RyKwA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.0.tgz", + "integrity": "sha512-PCkMh7fNahWSbA0OTUQ2OpYHpjZZr0hPr8lId8twD7a7SeWrvT3xJVyza+dQwXSSq4yEQTMoXgNOfMCsn8584g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.0.tgz", + "integrity": "sha512-1j3stGx+qbhXql4OCDZhnK7b01s6rBKNybfsX+TNrEe9JNq4DLi1yGiR1xW+nL+FNVvI4D02PUnl6gJ/2y6WJA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.0.tgz", + "integrity": "sha512-eyrr5W08Ms9uM0mLcKfM/Uzx7hjhz2bcjv8P2uynfj0yU8GGPdz8iYrBPhiLOZqahoAMB8ZiolRZPbbU2MAi6Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.0.tgz", + "integrity": "sha512-Xds90ITXJCNyX9pDhqf85MKWUI4lqjiPAipJ8OLp8xqI2Ehk+TCVhF9rvOoN8xTbcafow3QOThkNnrM33uCFQA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.0.tgz", + "integrity": "sha512-Xws2KA4CLvZmXjy46SQaXSejuKPhwVdaNinldoYfqruZBaJHqVo6hnRa8SDo9z7PBW5x84SH64+izmldCgbezw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.0.tgz", + "integrity": "sha512-hrKXKbX5FdaRJj7lTMusmvKbhMJSGWJ+w++4KmjiDhpTgNlhYobMvKfDoIWecy4O60K6yA4SnztGuNTQF+Lplw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.0.tgz", + "integrity": "sha512-6A+nccfSDGKsPm00d3xKcrsBcbqzCTAukjwWK6rbuAnB2bHaL3r9720HBVZ/no7+FhZLz/U3GwwZZEh6tOSI8Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.0.tgz", + "integrity": "sha512-4P1VyYUe6XAJtQH1Hh99THxr0GKMMwIXsRNOceLrJnaHTDgk1FTcTimDgneRJPvB3LqDQxUmroBclQ1S0cIJwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.0.tgz", + "integrity": "sha512-8Vv6pLuIZCMcgXre6c3nOPhE0gjz1+nZP6T+hwWjr7sVH8k0jRkH+XnfjjOTglyMBdSKBPPz54/y1gToSKwrSQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.0.tgz", + "integrity": "sha512-r1te1M0Sm2TBVD/RxBPC6RZVwNqUTwJTA7w+C/IW5v9Ssu6xmxWEi+iJQlpBhtUiT1raJ5b48pI8tBvEjEFnFA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.0.tgz", + "integrity": "sha512-say0uMU/RaPm3CDQLxUUTF2oNWL8ysvHkAjcCzV2znxBr23kFfaxocS9qJm+NdkRhF8wtdEEAJuYcLPhSPbjuQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.0.tgz", + "integrity": "sha512-/MU7/HizQGsnBREtRpcSbSV1zfkoxSTR7wLsRmBPQ8FwUj5sykrP1MyJTvsxP5KBq9SyE6kH8UQQQwa0ASeoQQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.0.tgz", + "integrity": "sha512-Q9eh+gUGILIHEaJf66aF6a414jQbDnn29zeu0eX3dHMuysnhTvsUvZTCAyZ6tJhUjnvzBKE4FtuaYxutxRZpOg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.0.tgz", + "integrity": "sha512-OR5p5yG5OKSxHReWmwvM0P+VTPMwoBS45PXTMYaskKQqybkS3Kmugq1W+YbNWArF8/s7jQScgzXUhArzEQ7x0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.0.tgz", + "integrity": "sha512-XeatKzo4lHDsVEbm1XDHZlhYZZSQYym6dg2X/Ko0kSFgio+KXLsxwJQprnR48GvdIKDOpqWqssC3iBCjoMcMpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.0.tgz", + "integrity": "sha512-Lu71y78F5qOfYmubYLHPcJm74GZLU6UJ4THkf/a1K7Tz2ycwC2VUbsqbJAXaR6Bx70SRdlVrt2+n5l7F0agTUw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.0.tgz", + "integrity": "sha512-v5xwKDWcu7qhAEcsUubiav7r+48Uk/ENWdr82MBZZRIm7zThSxCIVDfb3ZeRRq9yqk+oIzMdDo6fCcA5DHfMyA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.0.tgz", + "integrity": "sha512-XnaaaSMGSI6Wk8F4KK3QP7GfuuhjGchElsVerCplUuxRIzdvZ7hRBpLR0omCmw+kI2RFJB80nenhOoGXlJ5TfQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.0.tgz", + "integrity": "sha512-3K1lP+3BXY4t4VihLw5MEg6IZD3ojSYzqzBG571W3kNQe4G4CcFpSUQVgurYgib5d+YaCjeFow8QivWp8vuSvA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.0.tgz", + "integrity": "sha512-MDk610P/vJGc5L5ImE4k5s+GZT3en0KoK1MKPXCRgzmksAMk79j4h3k1IerxTNqwDLxsGxStEZVBqG0gIqZqoA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.0.tgz", + "integrity": "sha512-Zv7v6q6aV+VslnpwzqKAmrk5JdVkLUzok2208ZXGipjb+msxBr/fJPZyeEXiFgH7k62Ak0SLIfxQRZQvTuf7rQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@silvia-odwyer/photon-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@silvia-odwyer/photon-node/-/photon-node-0.3.4.tgz", + "integrity": "sha512-bnly4BKB3KDTFxrUIcgCLbaeVVS8lrAkri1pEzskpmxu9MdfGQTy8b8EgcD83ywD3RPMsIulY8xJH5Awa+t9fA==", + "license": "Apache-2.0" + }, + "node_modules/@sinclair/typebox": { + "version": "0.34.47", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.47.tgz", + "integrity": "sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw==", + "license": "MIT" + }, + "node_modules/@slack/bolt": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-4.6.0.tgz", + "integrity": "sha512-xPgfUs2+OXSugz54Ky07pA890+Qydk22SYToi8uGpXeHSt1JWwFJkRyd/9Vlg5I1AdfdpGXExDpwnbuN9Q/2dQ==", + "license": "MIT", + "dependencies": { + "@slack/logger": "^4.0.0", + "@slack/oauth": "^3.0.4", + "@slack/socket-mode": "^2.0.5", + "@slack/types": "^2.18.0", + "@slack/web-api": "^7.12.0", + "axios": "^1.12.0", + "express": "^5.0.0", + "path-to-regexp": "^8.1.0", + "raw-body": "^3", + "tsscmp": "^1.0.6" + }, + "engines": { + "node": ">=18", + "npm": ">=8.6.0" + }, + "peerDependencies": { + "@types/express": "^5.0.0" + } + }, + "node_modules/@slack/logger": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-4.0.0.tgz", + "integrity": "sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==", + "license": "MIT", + "dependencies": { + "@types/node": ">=18.0.0" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, + "node_modules/@slack/oauth": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@slack/oauth/-/oauth-3.0.4.tgz", + "integrity": "sha512-+8H0g7mbrHndEUbYCP7uYyBCbwqmm3E6Mo3nfsDvZZW74zKk1ochfH/fWSvGInYNCVvaBUbg3RZBbTp0j8yJCg==", + "license": "MIT", + "dependencies": { + "@slack/logger": "^4", + "@slack/web-api": "^7.10.0", + "@types/jsonwebtoken": "^9", + "@types/node": ">=18", + "jsonwebtoken": "^9" + }, + "engines": { + "node": ">=18", + "npm": ">=8.6.0" + } + }, + "node_modules/@slack/socket-mode": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@slack/socket-mode/-/socket-mode-2.0.5.tgz", + "integrity": "sha512-VaapvmrAifeFLAFaDPfGhEwwunTKsI6bQhYzxRXw7BSujZUae5sANO76WqlVsLXuhVtCVrBWPiS2snAQR2RHJQ==", + "license": "MIT", + "dependencies": { + "@slack/logger": "^4", + "@slack/web-api": "^7.10.0", + "@types/node": ">=18", + "@types/ws": "^8", + "eventemitter3": "^5", + "ws": "^8" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, + "node_modules/@slack/types": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.19.0.tgz", + "integrity": "sha512-7+QZ38HGcNh/b/7MpvPG6jnw7mliV6UmrquJLqgdxkzJgQEYUcEztvFWRU49z0x4vthF0ixL5lTK601AXrS8IA==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/web-api": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-7.13.0.tgz", + "integrity": "sha512-ERcExbWrnkDN8ovoWWe6Wgt/usanj1dWUd18dJLpctUI4mlPS0nKt81Joh8VI+OPbNnY1lIilVt9gdMBD9U2ig==", + "license": "MIT", + "dependencies": { + "@slack/logger": "^4.0.0", + "@slack/types": "^2.18.0", + "@types/node": ">=18.0.0", + "@types/retry": "0.12.0", + "axios": "^1.11.0", + "eventemitter3": "^5.0.1", + "form-data": "^4.0.4", + "is-electron": "2.2.2", + "is-stream": "^2", + "p-queue": "^6", + "p-retry": "^4", + "retry": "^0.13.1" + }, + "engines": { + "node": ">= 18", + "npm": ">= 8.6.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz", + "integrity": "sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.6.tgz", + "integrity": "sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.22.0.tgz", + "integrity": "sha512-6vjCHD6vaY8KubeNw2Fg3EK0KLGQYdldG4fYgQmA0xSW0dJ8G2xFhSOdrlUakWVoP5JuWHtFODg3PNd/DN3FDA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.10", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.8.tgz", + "integrity": "sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.8.tgz", + "integrity": "sha512-jS/O5Q14UsufqoGhov7dHLOPCzkYJl9QDzusI2Psh4wyYx/izhzvX9P4D69aTxcdfVhEPhjK+wYyn/PzLjKbbw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.12.0", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.8.tgz", + "integrity": "sha512-MTfQT/CRQz5g24ayXdjg53V0mhucZth4PESoA5IhvaWVDTOQLfo8qI9vzqHcPsdd2v6sqfTYqF5L/l+pea5Uyw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.8.tgz", + "integrity": "sha512-ah12+luBiDGzBruhu3efNy1IlbwSEdNiw8fOZksoKoWW1ZHvO/04MQsdnws/9Aj+5b0YXSSN2JXKy/ClIsW8MQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.8.tgz", + "integrity": "sha512-cYpCpp29z6EJHa5T9WL0KAlq3SOKUQkcgSoeRfRVwjGgSFl7Uh32eYGt7IDYCX20skiEdRffyDpvF2efEZPC0A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.8.tgz", + "integrity": "sha512-iJ6YNJd0bntJYnX6s52NC4WFYcZeKrPUr1Kmmr5AwZcwCSzVpS7oavAmxMR7pMq7V+D1G4s9F5NJK0xwOsKAlQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz", + "integrity": "sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.8.tgz", + "integrity": "sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.8.tgz", + "integrity": "sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.8.tgz", + "integrity": "sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.12.tgz", + "integrity": "sha512-9JMKHVJtW9RysTNjcBZQHDwB0p3iTP6B1IfQV4m+uCevkVd/VuLgwfqk5cnI4RHcp4cPwoIvxQqN4B1sxeHo8Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.22.0", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-middleware": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.4.29", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.29.tgz", + "integrity": "sha512-bmTn75a4tmKRkC5w61yYQLb3DmxNzB8qSVu9SbTYqW6GAL0WXO2bDZuMAn/GJSbOdHEdjZvWxe+9Kk015bw6Cg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/service-error-classification": "^4.2.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz", + "integrity": "sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz", + "integrity": "sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", + "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.8.tgz", + "integrity": "sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", + "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz", + "integrity": "sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz", + "integrity": "sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.8.tgz", + "integrity": "sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.8.tgz", + "integrity": "sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.11.1.tgz", + "integrity": "sha512-SERgNg5Z1U+jfR6/2xPYjSEHY1t3pyTHC/Ma3YQl6qWtmiL42bvNId3W/oMUWIwu7ekL2FMPdqAmwbQegM7HeQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.22.0", + "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.10", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz", + "integrity": "sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.28", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.28.tgz", + "integrity": "sha512-/9zcatsCao9h6g18p/9vH9NIi5PSqhCkxQ/tb7pMgRFnqYp9XUOyOlGPDMHzr8n5ih6yYgwJEY2MLEobUgi47w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.31", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.31.tgz", + "integrity": "sha512-JTvoApUXA5kbpceI2vuqQzRjeTbLpx1eoa5R/YEZbTgtxvIB7AQZxFJ0SEyfCpgPCyVV9IT7we+ytSeIB3CyWA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.4.6", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz", + "integrity": "sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz", + "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.8.tgz", + "integrity": "sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.10.tgz", + "integrity": "sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tinyhttp/content-disposition": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@tinyhttp/content-disposition/-/content-disposition-2.2.3.tgz", + "integrity": "sha512-0nSvOgFHvq0a15+pZAdbAyHUk0+AGLX6oyo45b7fPdgWdPfHA19IfgUKRECYT0aw86ZP6ZDDLxGQ7FEA1fAVOg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.17.0" + }, + "funding": { + "type": "individual", + "url": "https://github.com/tinyhttp/tinyhttp?sponsor=1" + } + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.160", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.160.tgz", + "integrity": "sha512-uoO4QVQNWFPJMh26pXtmtrRfGshPUSpMZGUyUQY20FhfHEElEBOPKgVmFs1z+kbpyBsRs2JnoOPT7++Z4GA9pA==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bun": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.3.6.tgz", + "integrity": "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA==", + "license": "MIT", + "optional": true, + "dependencies": { + "bun-types": "1.3.6" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^2" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", + "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "license": "MIT", + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime-types": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", + "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", + "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/proper-lockfile": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/proper-lockfile/-/proper-lockfile-4.1.4.tgz", + "integrity": "sha512-uo2ABllncSqg9F1D4nugVl9v93RmjxF6LJzQLMLDdPaXCUIDPeOJ21Gbqi43xNKzBi/WQ0Q0dICqufzQbMjipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "*" + } + }, + "node_modules/@types/qrcode-terminal": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/qrcode-terminal/-/qrcode-terminal-0.12.2.tgz", + "integrity": "sha512-v+RcIEJ+Uhd6ygSQ0u5YYY7ZM+la7GgPbs0V/7l/kFs2uO4S8BcIUEMoP7za4DNIqNnUD5npf0A/7kBhrCKG5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript/native-preview": { + "version": "7.0.0-dev.20260124.1", + "resolved": "https://registry.npmjs.org/@typescript/native-preview/-/native-preview-7.0.0-dev.20260124.1.tgz", + "integrity": "sha512-VRIKr9caNPE8zZqQKyPaRB+3HZQVy5AECW2B8GMRqp2LQvE5eDKXsilXAcLc0LaaHDwXIKxMlvIVC1sWkJOYhw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsgo": "bin/tsgo.js" + }, + "optionalDependencies": { + "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260124.1", + "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260124.1", + "@typescript/native-preview-linux-arm": "7.0.0-dev.20260124.1", + "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260124.1", + "@typescript/native-preview-linux-x64": "7.0.0-dev.20260124.1", + "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260124.1", + "@typescript/native-preview-win32-x64": "7.0.0-dev.20260124.1" + } + }, + "node_modules/@typescript/native-preview-darwin-arm64": { + "version": "7.0.0-dev.20260124.1", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-arm64/-/native-preview-darwin-arm64-7.0.0-dev.20260124.1.tgz", + "integrity": "sha512-hFA0vQyyrmTwRLfZnC03QtCCwg/6kyM5qfOjEoIqKlAi7TllP4eLFSJz38X9fh/3Geh0krkZHeIh6h6QP0Jjfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@typescript/native-preview-darwin-x64": { + "version": "7.0.0-dev.20260124.1", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-x64/-/native-preview-darwin-x64-7.0.0-dev.20260124.1.tgz", + "integrity": "sha512-WvhTJ0YucAQpTQwy54tj8c8rzsPFXJeXAk04vYQSBBq7gv3k8CoLuVzghAYG2zGzAFEHA9FW/rT9NACqNJ8Iww==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@typescript/native-preview-linux-arm": { + "version": "7.0.0-dev.20260124.1", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm/-/native-preview-linux-arm-7.0.0-dev.20260124.1.tgz", + "integrity": "sha512-fJGwwQYldfeSO/rzXJMgRR+YhfBdGZgQN+n3vBX5/lCUWS1dtXI/8yWpBs/mc0UtYm0w2oY912eG4Xd0kJMElw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@typescript/native-preview-linux-arm64": { + "version": "7.0.0-dev.20260124.1", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm64/-/native-preview-linux-arm64-7.0.0-dev.20260124.1.tgz", + "integrity": "sha512-YjhWXiQdCOMbWhZgOy4eYs5l6i6lKxtI8rsmzLiGyM7sgD7Uzq8hh9z1DCSpGwvDR7Bky9sjkjGHJ2r+KGaU2Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@typescript/native-preview-linux-x64": { + "version": "7.0.0-dev.20260124.1", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-x64/-/native-preview-linux-x64-7.0.0-dev.20260124.1.tgz", + "integrity": "sha512-ReEuzIqgwydFCsRUmlPERfgt38m7Z+Lyw3MddOCT6mJFArZ4J+XxOFlPL3PLI1pSXJHeHc3oTSQGToODLR1bnw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@typescript/native-preview-win32-arm64": { + "version": "7.0.0-dev.20260124.1", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-arm64/-/native-preview-win32-arm64-7.0.0-dev.20260124.1.tgz", + "integrity": "sha512-4jwjoKlsapGj0wFTxI/d9TLBK+kVHwn+qSdPIcuE2t8OsjpEXSvjvjHMX64ysyf6VGVKd9m/qJs8708qo4RYmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@typescript/native-preview-win32-x64": { + "version": "7.0.0-dev.20260124.1", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-x64/-/native-preview-win32-x64-7.0.0-dev.20260124.1.tgz", + "integrity": "sha512-dtUucoRDMi0bUbM2GkSF3qMbNRwE+K9udc6lTUj6+akXLqatuXm7PHVcqjrdXCyarc3CSNJE5Uq6GDHWzjDxyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vitest/coverage-v8": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.18.tgz", + "integrity": "sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^1.0.2", + "@vitest/utils": "4.0.18", + "ast-v8-to-istanbul": "^0.3.10", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.2.0", + "magicast": "^0.5.1", + "obug": "^2.1.1", + "std-env": "^3.10.0", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "4.0.18", + "vitest": "4.0.18" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", + "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", + "chai": "^6.2.1", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", + "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.0.18", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", + "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", + "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.0.18", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", + "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.18", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", + "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", + "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.18", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@webreflection/alien-signals": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@webreflection/alien-signals/-/alien-signals-0.3.2.tgz", + "integrity": "sha512-DmNjD8Kq5iM+Toirp3llS/izAiI3Dwav5nHRvKdR/YJBTgun3y4xK76rs9CFYD2bZwZJN/rP+HjEqKTteGK+Yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "alien-signals": "^2.0.6" + } + }, + "node_modules/@whiskeysockets/baileys": { + "version": "7.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@whiskeysockets/baileys/-/baileys-7.0.0-rc.9.tgz", + "integrity": "sha512-YFm5gKXfDP9byCXCW3OPHKXLzrAKzolzgVUlRosHHgwbnf2YOO3XknkMm6J7+F0ns8OA0uuSBhgkRHTDtqkacw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@cacheable/node-cache": "^1.4.0", + "@hapi/boom": "^9.1.3", + "async-mutex": "^0.5.0", + "libsignal": "git+https://github.com/whiskeysockets/libsignal-node.git", + "lru-cache": "^11.1.0", + "music-metadata": "^11.7.0", + "p-queue": "^9.0.0", + "pino": "^9.6", + "protobufjs": "^7.2.4", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "audio-decode": "^2.1.3", + "jimp": "^1.6.0", + "link-preview-js": "^3.0.0", + "sharp": "*" + }, + "peerDependenciesMeta": { + "audio-decode": { + "optional": true + }, + "jimp": { + "optional": true + }, + "link-preview-js": { + "optional": true + } + } + }, + "node_modules/@whiskeysockets/baileys/node_modules/p-queue": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", + "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@whiskeysockets/baileys/node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/alien-signals": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-2.0.8.tgz", + "integrity": "sha512-844G1VLkk0Pe2SJjY0J8vp8ADI73IM4KliNu2OGlYzWpO28NexEUvjHTcFjFX3VXoiUtwTbHxLNI9ImkcoBqzA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-escapes": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/aproba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", + "license": "ISC", + "optional": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.10.tgz", + "integrity": "sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^9.0.1" + } + }, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "license": "MIT", + "optional": true, + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/axios": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.4.tgz", + "integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-3.0.1.tgz", + "integrity": "sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/before-after-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", + "license": "MIT" + }, + "node_modules/bowser": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-4.0.1.tgz", + "integrity": "sha512-YClrbvTCXGe70pU2JiEiPLYXO9gQkyxYeKpJIQHVS/gOs6EWMQP2RYBwjFLNT322Ji8TOC3IMPfsYCedNpzKfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^3.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-or-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-3.0.0.tgz", + "integrity": "sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bun-types": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.3.6.tgz", + "integrity": "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.2.tgz", + "integrity": "sha512-w+ZuRNmex9c1TR9RcsxbfTKCjSL0rh1WA5SABbrWprIHeNBdmyQLSYonlDy9gpD+63XT8DgZ/wNh1Smvc9WnJA==", + "license": "MIT", + "dependencies": { + "@cacheable/memory": "^2.0.7", + "@cacheable/utils": "^2.3.3", + "hookified": "^1.15.0", + "keyv": "^5.5.5", + "qified": "^0.6.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chmodrp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chmodrp/-/chmodrp-1.0.2.tgz", + "integrity": "sha512-TdngOlFV1FLTzU0o1w8MB6/BFywhtLC0SzRTGJU7T9lmdjlCWeMRt1iVo0Ki+ldwNk0BqNiKoc8xpLZEQ8mY1w==", + "license": "MIT", + "optional": true + }, + "node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "license": "MIT", + "dependencies": { + "readdirp": "^5.0.0" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chromium-bidi": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-13.0.1.tgz", + "integrity": "sha512-c+RLxH0Vg2x2syS9wPw378oJgiJNXtYXUvnVAldUlt5uaHekn0CCU7gPksNgHjrH1qFhmjVXQj4esvuthuC7OQ==", + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/chromium-bidi/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", + "optional": true, + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "license": "ISC", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmake-js": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-7.4.0.tgz", + "integrity": "sha512-Lw0JxEHrmk+qNj1n9W9d4IvkDdYTBn7l2BW6XmtLj7WPpIo2shvxUy+YokfjMxAAOELNonQwX3stkPhM5xSC2Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "axios": "^1.6.5", + "debug": "^4", + "fs-extra": "^11.2.0", + "memory-stream": "^1.0.0", + "node-api-headers": "^1.1.0", + "npmlog": "^6.0.2", + "rc": "^1.2.7", + "semver": "^7.5.4", + "tar": "^6.2.0", + "url-join": "^4.0.1", + "which": "^2.0.2", + "yargs": "^17.7.2" + }, + "bin": { + "cmake-js": "bin/cmake-js" + }, + "engines": { + "node": ">= 14.15.0" + } + }, + "node_modules/cmake-js/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cmake-js/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cmake-js/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cmake-js/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "optional": true + }, + "node_modules/cmake-js/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cmake-js/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cmake-js/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cmake-js/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/cmake-js/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cmake-js/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/collection-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", + "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC", + "optional": true + }, + "node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/croner": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/croner/-/croner-9.1.0.tgz", + "integrity": "sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==", + "license": "MIT", + "engines": { + "node": ">=18.0" + } + }, + "node_modules/cross-fetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "license": "MIT" + }, + "node_modules/curve25519-js": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz", + "integrity": "sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==", + "license": "MIT" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT", + "optional": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1575685", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1575685.tgz", + "integrity": "sha512-5dS9wazW8h5VoY3wx8GkZH1EJMv4y90WISi5OnYi6aWzSoC8kwXlxcnnETz95KdlPjNbOuL9TWBE7xDUVYTOew==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/discord-api-types": { + "version": "0.38.37", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.37.tgz", + "integrity": "sha512-Cv47jzY1jkGkh5sv0bfHYqGgKOWO1peOrGMkDFM4UmaGMOTgOW8QSexhvixa9sVOiz8MnVOBryWYyw/CEVhj7w==", + "license": "MIT", + "workspaces": [ + "scripts/actions/documentation" + ] + }, + "node_modules/docx-preview": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/docx-preview/-/docx-preview-0.3.7.tgz", + "integrity": "sha512-Lav69CTA/IYZPJTsKH7oYeoZjyg96N0wEJMNslGJnZJ+dMUZK85Lt5ASC79yUlD48ecWjuv+rkcmFt6EVPV0Xg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jszip": ">=3.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-var": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/env-var/-/env-var-7.5.0.tgz", + "integrity": "sha512-mKZOzLRN0ETzau2W2QXefbFjo5EF4yWq28OyKb9ICdeNhHJlOE/pHHnz4hdYJ9cNZXcJHo5xN4OT4pzuSHSNvA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-content-type-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-type": { + "version": "21.3.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.0.tgz", + "integrity": "sha512-8kPJMIGz1Yt/aPEwOsrR97ZyZaD1Iqm8PClb1nYFclUCkBi0Ma5IsYNQzvSFS9ib51lWyIw5mIT9rWzI/xjpzA==", + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/filename-reserved-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", + "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/filenamify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-6.0.0.tgz", + "integrity": "sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "filename-reserved-regex": "^3.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "optional": true + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC", + "optional": true + }, + "node_modules/gauge/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gaxios": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz", + "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2", + "rimraf": "^5.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/google-auth-library": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz", + "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==", + "license": "Apache-2.0", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.0.0", + "gcp-metadata": "^8.0.0", + "google-logging-utils": "^1.0.0", + "gtoken": "^8.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/grammy": { + "version": "1.39.3", + "resolved": "https://registry.npmjs.org/grammy/-/grammy-1.39.3.tgz", + "integrity": "sha512-7arRRoOtOh9UwMwANZ475kJrWV6P3/EGNooeHlY0/SwZv4t3ZZ3Uiz9cAXK8Zg9xSdgmm8T21kx6n7SZaWvOcw==", + "license": "MIT", + "dependencies": { + "@grammyjs/types": "3.23.0", + "abort-controller": "^3.0.0", + "debug": "^4.4.3", + "node-fetch": "^2.7.0" + }, + "engines": { + "node": "^12.20.0 || >=14.13.1" + } + }, + "node_modules/grammy/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/gtoken": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz", + "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==", + "license": "MIT", + "dependencies": { + "gaxios": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC", + "optional": true + }, + "node_modules/hashery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.4.0.tgz", + "integrity": "sha512-Wn2i1In6XFxl8Az55kkgnFRiAlIAushzh26PTjL2AKtQcEfXrcLa7Hn5QOWGZEf3LU057P9TwwZjFyxfS1VuvQ==", + "license": "MIT", + "dependencies": { + "hookified": "^1.14.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/hono": { + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", + "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/hookified": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.0.tgz", + "integrity": "sha512-51w+ZZGt7Zw5q7rM3nC4t3aLn/xvKDETsXqMczndvwyVQhAHfUmUuFBRFcos8Iyebtk7OAE9dL26wFNzZVVOkw==", + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-parse-string": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/html-parse-string/-/html-parse-string-0.0.9.tgz", + "integrity": "sha512-wyGnsOolHbNrcb8N6bdJF4EHyzd3zVGCb9/mBxeNjAYBDOZqD7YkqLBz7kXtdgHwNnV8lN/BpSDpsI1zm8Sd8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC", + "optional": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ipull": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/ipull/-/ipull-3.9.3.tgz", + "integrity": "sha512-ZMkxaopfwKHwmEuGDYx7giNBdLxbHbRCWcQVA1D2eqE4crUguupfxej6s7UqbidYEwT69dkyumYkY8DPHIxF9g==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tinyhttp/content-disposition": "^2.2.0", + "async-retry": "^1.3.3", + "chalk": "^5.3.0", + "ci-info": "^4.0.0", + "cli-spinners": "^2.9.2", + "commander": "^10.0.0", + "eventemitter3": "^5.0.1", + "filenamify": "^6.0.0", + "fs-extra": "^11.1.1", + "is-unicode-supported": "^2.0.0", + "lifecycle-utils": "^2.0.1", + "lodash.debounce": "^4.0.8", + "lowdb": "^7.0.1", + "pretty-bytes": "^6.1.0", + "pretty-ms": "^8.0.0", + "sleep-promise": "^9.1.0", + "slice-ansi": "^7.1.0", + "stdout-update": "^4.0.1", + "strip-ansi": "^7.1.0" + }, + "bin": { + "ipull": "dist/cli/cli.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/ido-pluto/ipull?sponsor=1" + }, + "optionalDependencies": { + "@reflink/reflink": "^0.1.16" + } + }, + "node_modules/ipull/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/ipull/node_modules/lifecycle-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lifecycle-utils/-/lifecycle-utils-2.1.0.tgz", + "integrity": "sha512-AnrXnE2/OF9PHCyFg0RSqsnQTzV991XaZA/buhFDoc58xU7rhSCDgCz/09Lqpsn4MpoPHt7TRAXV1kWZypFVsA==", + "license": "MIT", + "optional": true + }, + "node_modules/ipull/node_modules/parse-ms": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", + "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ipull/node_modules/pretty-ms": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", + "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "parse-ms": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==", + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true, + "license": "MIT" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-base64": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-schema-to-ts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", + "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "ts-algebra": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "optional": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "license": "MIT", + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/katex": { + "version": "0.16.28", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.28.tgz", + "integrity": "sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg==", + "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/libsignal": { + "name": "@whiskeysockets/libsignal-node", + "version": "2.0.1", + "resolved": "git+ssh://git@github.com/whiskeysockets/libsignal-node.git#1c30d7d7e76a3b0aa120b04dc6a26f5a12dccf67", + "license": "GPL-3.0", + "dependencies": { + "curve25519-js": "^0.0.4", + "protobufjs": "6.8.8" + } + }, + "node_modules/libsignal/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "license": "MIT" + }, + "node_modules/libsignal/node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "license": "Apache-2.0" + }, + "node_modules/libsignal/node_modules/protobufjs": { + "version": "6.8.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", + "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lifecycle-utils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lifecycle-utils/-/lifecycle-utils-3.0.1.tgz", + "integrity": "sha512-Qt/Jl5dsNIsyCAZsHB6x3mbwHFn0HJbdmvF49sVX/bHgX2cW7+G+U+I67Zw+TPM1Sr21Gb2nfJMd2g6iUcI1EQ==", + "license": "MIT", + "optional": true + }, + "node_modules/linkedom": { + "version": "0.18.12", + "resolved": "https://registry.npmjs.org/linkedom/-/linkedom-0.18.12.tgz", + "integrity": "sha512-jalJsOwIKuQJSeTvsgzPe9iJzyfVaEJiEXl+25EkKevsULHvMJzpNqwvj1jOESWdmgKDiXObyjOYwlUqG7wo1Q==", + "license": "ISC", + "dependencies": { + "css-select": "^5.1.0", + "cssom": "^0.5.0", + "html-escaper": "^3.0.3", + "htmlparser2": "^10.0.0", + "uhyphen": "^0.2.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "canvas": ">= 2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/linkedom/node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/lit": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.2.tgz", + "integrity": "sha512-NF9zbsP79l4ao2SNrH3NkfmFgN/hBYSQo90saIVI1o5GpjAdCPVstVzO1MrLOakHoEhYkrtRjPK6Ob521aoYWQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^2.1.0", + "lit-element": "^4.2.0", + "lit-html": "^3.3.0" + } + }, + "node_modules/lit-element": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz", + "integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.5.0", + "@lit/reactive-element": "^2.1.0", + "lit-html": "^3.3.0" + } + }, + "node_modules/lit-html": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.2.tgz", + "integrity": "sha512-Qy9hU88zcmaxBXcc10ZpdK7cOLXvXpRoBxERdtqV9QOrfpMZZ6pSYP91LhpPtap3sFMUiL7Tw2RImbe0Al2/kw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lowdb": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-7.0.1.tgz", + "integrity": "sha512-neJAj8GwF0e8EpycYIDFqEPcx9Qz4GUho20jWFR7YiFeXzF1YMLdxB36PypcTSPMA+4+LvgyMacYhlr18Zlymw==", + "license": "MIT", + "optional": true, + "dependencies": { + "steno": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/lru-cache": { + "version": "11.2.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", + "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/lucide": { + "version": "0.563.0", + "resolved": "https://registry.npmjs.org/lucide/-/lucide-0.563.0.tgz", + "integrity": "sha512-2zBzDJ5n2Plj3d0ksj6h9TWPOSiKu9gtxJxnBAye11X/8gfWied6IYJn6ADYBp1NPoJmgpyOYP3wMrVx69+2AA==", + "dev": true, + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz", + "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "source-map-js": "^1.2.1" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/marked": { + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/memory-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-1.0.0.tgz", + "integrity": "sha512-Wm13VcsPIMdG96dzILfij09PvuS3APtcKNh7M28FsCA/w6+1mjR7hhPmfFNoilX9xU7wTdhsH5lJAm6XNzdtww==", + "license": "MIT", + "optional": true, + "dependencies": { + "readable-stream": "^3.4.0" + } + }, + "node_modules/memory-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/music-metadata": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/music-metadata/-/music-metadata-11.11.1.tgz", + "integrity": "sha512-8FT+lSLznASDhn5KNJtQE6ZH95VqhxtKWNPrvdfhlqgbdZZEEAXehx+xpUvas4VuEZAu49BhQgLa3NlmPeRaww==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + }, + { + "type": "buymeacoffee", + "url": "https://buymeacoffee.com/borewit" + } + ], + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "file-type": "^21.3.0", + "media-typer": "^1.1.0", + "strtok3": "^10.3.4", + "token-types": "^6.1.2", + "uint8array-extras": "^1.5.0", + "win-guid": "^0.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz", + "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "optional": true, + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-addon-api": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", + "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/node-api-headers": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/node-api-headers/-/node-api-headers-1.8.0.tgz", + "integrity": "sha512-jfnmiKWjRAGbdD1yQS28bknFM1tbHC1oucyuMPjmkEs+kpiu76aRs40WlTmBmyEgzDM76ge1DQ7XJ3R5deiVjQ==", + "license": "MIT", + "optional": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-edge-tts": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/node-edge-tts/-/node-edge-tts-1.2.9.tgz", + "integrity": "sha512-fvfW1dUgJdZAdTniC6MzLTMwnNUFKGKaUdRJ1OsveOYlfnPUETBU973CG89565txvbBowCQ4Czdeu3qSX8bNOg==", + "license": "MIT", + "dependencies": { + "https-proxy-agent": "^7.0.1", + "ws": "^8.13.0", + "yargs": "^17.7.2" + }, + "bin": { + "node-edge-tts": "bin.js" + } + }, + "node_modules/node-edge-tts/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/node-edge-tts/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/node-edge-tts/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/node-edge-tts/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/node-edge-tts/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/node-edge-tts/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-edge-tts/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-edge-tts/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/node-edge-tts/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/node-edge-tts/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-llama-cpp": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/node-llama-cpp/-/node-llama-cpp-3.15.0.tgz", + "integrity": "sha512-xQKl+MvKiA5QNi/CTwqLKMos7hefhRVyzJuNIAEwl7zvOoF+gNMOXEsR4Ojwl7qvgpcjsVeGKWSK3Rb6zoUP1w==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@huggingface/jinja": "^0.5.3", + "async-retry": "^1.3.3", + "bytes": "^3.1.2", + "chalk": "^5.4.1", + "chmodrp": "^1.0.2", + "cmake-js": "^7.4.0", + "cross-spawn": "^7.0.6", + "env-var": "^7.5.0", + "filenamify": "^6.0.0", + "fs-extra": "^11.3.0", + "ignore": "^7.0.4", + "ipull": "^3.9.2", + "is-unicode-supported": "^2.1.0", + "lifecycle-utils": "^3.0.1", + "log-symbols": "^7.0.0", + "nanoid": "^5.1.5", + "node-addon-api": "^8.3.1", + "octokit": "^5.0.3", + "ora": "^8.2.0", + "pretty-ms": "^9.2.0", + "proper-lockfile": "^4.1.2", + "semver": "^7.7.1", + "simple-git": "^3.27.0", + "slice-ansi": "^7.1.0", + "stdout-update": "^4.0.1", + "strip-ansi": "^7.1.0", + "validate-npm-package-name": "^6.0.0", + "which": "^5.0.0", + "yargs": "^17.7.2" + }, + "bin": { + "nlc": "dist/cli/cli.js", + "node-llama-cpp": "dist/cli/cli.js" + }, + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/giladgd" + }, + "optionalDependencies": { + "@node-llama-cpp/linux-arm64": "3.15.0", + "@node-llama-cpp/linux-armv7l": "3.15.0", + "@node-llama-cpp/linux-x64": "3.15.0", + "@node-llama-cpp/linux-x64-cuda": "3.15.0", + "@node-llama-cpp/linux-x64-cuda-ext": "3.15.0", + "@node-llama-cpp/linux-x64-vulkan": "3.15.0", + "@node-llama-cpp/mac-arm64-metal": "3.15.0", + "@node-llama-cpp/mac-x64": "3.15.0", + "@node-llama-cpp/win-arm64": "3.15.0", + "@node-llama-cpp/win-x64": "3.15.0", + "@node-llama-cpp/win-x64-cuda": "3.15.0", + "@node-llama-cpp/win-x64-cuda-ext": "3.15.0", + "@node-llama-cpp/win-x64-vulkan": "3.15.0" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/node-llama-cpp/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-llama-cpp/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/node-llama-cpp/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/node-llama-cpp/node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-llama-cpp/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "optional": true + }, + "node_modules/node-llama-cpp/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-llama-cpp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/node-llama-cpp/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-llama-cpp/node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-llama-cpp/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/node-llama-cpp/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/node-llama-cpp/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-llama-cpp/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/node-llama-cpp/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/octokit": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/octokit/-/octokit-5.0.5.tgz", + "integrity": "sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@octokit/app": "^16.1.2", + "@octokit/core": "^7.0.6", + "@octokit/oauth-app": "^8.0.3", + "@octokit/plugin-paginate-graphql": "^6.0.0", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/plugin-rest-endpoint-methods": "^17.0.0", + "@octokit/plugin-retry": "^8.0.3", + "@octokit/plugin-throttling": "^11.0.3", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "@octokit/webhooks": "^14.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/ollama": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/ollama/-/ollama-0.6.3.tgz", + "integrity": "sha512-KEWEhIqE5wtfzEIZbDCLH51VFZ6Z3ZSa6sIOg/E/tBV8S51flyqBOXi+bRxlOYKDf8i327zG9eSTb8IJxvm3Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-fetch": "^3.6.20" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openai": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.10.0.tgz", + "integrity": "sha512-ITxOGo7rO3XRMiKA5l7tQ43iNNu+iXGFAcf2t+aWVzzqRaS0i7m1K2BhxNdaveB+5eENhO0VY1FkiZzhBk4v3A==", + "license": "Apache-2.0", + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "license": "MIT", + "optional": true, + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT", + "optional": true + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "license": "MIT", + "optional": true, + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/osc-progress": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/osc-progress/-/osc-progress-0.3.0.tgz", + "integrity": "sha512-4/8JfsetakdeEa4vAYV45FW20aY+B/+K8NEXp5Eiar3wR8726whgHrbSg5Ar/ZY1FLJ/AGtUqV7W2IVF+Gvp9A==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/oxfmt": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.26.0.tgz", + "integrity": "sha512-UDD1wFNwfeorMm2ZY0xy1KRAAvJ5NjKBfbDmiMwGP7baEHTq65cYpC0aPP+BGHc8weXUbSZaK8MdGyvuRUvS4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinypool": "2.0.0" + }, + "bin": { + "oxfmt": "bin/oxfmt" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxfmt/darwin-arm64": "0.26.0", + "@oxfmt/darwin-x64": "0.26.0", + "@oxfmt/linux-arm64-gnu": "0.26.0", + "@oxfmt/linux-arm64-musl": "0.26.0", + "@oxfmt/linux-x64-gnu": "0.26.0", + "@oxfmt/linux-x64-musl": "0.26.0", + "@oxfmt/win32-arm64": "0.26.0", + "@oxfmt/win32-x64": "0.26.0" + } + }, + "node_modules/oxlint": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.42.0.tgz", + "integrity": "sha512-qnspC/lrp8FgKNaONLLn14dm+W5t0SSlus6V5NJpgI2YNT1tkFYZt4fBf14ESxf9AAh98WBASnW5f0gtw462Lg==", + "dev": true, + "license": "MIT", + "bin": { + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxlint/darwin-arm64": "1.42.0", + "@oxlint/darwin-x64": "1.42.0", + "@oxlint/linux-arm64-gnu": "1.42.0", + "@oxlint/linux-arm64-musl": "1.42.0", + "@oxlint/linux-x64-gnu": "1.42.0", + "@oxlint/linux-x64-musl": "1.42.0", + "@oxlint/win32-arm64": "1.42.0", + "@oxlint/win32-x64": "1.42.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=0.11.2" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + } + } + }, + "node_modules/oxlint-tsgolint": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/oxlint-tsgolint/-/oxlint-tsgolint-0.11.3.tgz", + "integrity": "sha512-zkuGXJzE5WIoGQ6CHG3GbxncPNrvUG9giTKdXMqKrlieCRxa9hGMvMJM+7DFxKSaryVAEFrTQJNrGJHpeMmFPg==", + "dev": true, + "license": "MIT", + "bin": { + "tsgolint": "bin/tsgolint.js" + }, + "optionalDependencies": { + "@oxlint-tsgolint/darwin-arm64": "0.11.3", + "@oxlint-tsgolint/darwin-x64": "0.11.3", + "@oxlint-tsgolint/linux-arm64": "0.11.3", + "@oxlint-tsgolint/linux-x64": "0.11.3", + "@oxlint-tsgolint/win32-arm64": "0.11.3", + "@oxlint-tsgolint/win32-x64": "0.11.3" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "license": "MIT" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/partial-json": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/partial-json/-/partial-json-0.1.7.tgz", + "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", + "license": "MIT" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pdfjs-dist": { + "version": "5.4.530", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.530.tgz", + "integrity": "sha512-r1hWsSIGGmyYUAHR26zSXkxYWLXLMd6AwqcaFYG9YUZ0GBf5GvcjJSeo512tabM4GYFhxhl5pMCmPr7Q72Rq2Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=20.16.0 || >=22.3.0" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^0.1.84" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "license": "MIT" + }, + "node_modules/playwright-core": { + "version": "1.58.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.0.tgz", + "integrity": "sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prism-media": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.5.tgz", + "integrity": "sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA==", + "license": "Apache-2.0", + "optional": true, + "peerDependencies": { + "@discordjs/opus": ">=0.8.0 <1.0.0", + "ffmpeg-static": "^5.0.2 || ^4.2.7 || ^3.0.0 || ^2.4.0", + "node-opus": "^0.3.3", + "opusscript": "^0.0.8" + }, + "peerDependenciesMeta": { + "@discordjs/opus": { + "optional": true + }, + "ffmpeg-static": { + "optional": true + }, + "node-opus": { + "optional": true + }, + "opusscript": { + "optional": true + } + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proper-lockfile/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/proper-lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qified": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.6.0.tgz", + "integrity": "sha512-tsSGN1x3h569ZSU1u6diwhltLyfUWDp3YbFHedapTmpBl0B3P6U3+Qptg7xu+v+1io1EwhdPyyRHYbEw0KN2FA==", + "license": "MIT", + "dependencies": { + "hookified": "^1.14.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/quicktype-core": { + "version": "23.2.6", + "resolved": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-23.2.6.tgz", + "integrity": "sha512-asfeSv7BKBNVb9WiYhFRBvBZHcRutPRBwJMxW0pefluK4kkKu4lv0IvZBwFKvw2XygLcL1Rl90zxWDHYgkwCmA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@glideapps/ts-necessities": "2.2.3", + "browser-or-node": "^3.0.0", + "collection-utils": "^1.0.1", + "cross-fetch": "^4.0.0", + "is-url": "^1.2.4", + "js-base64": "^3.7.7", + "lodash": "^4.17.21", + "pako": "^1.0.6", + "pluralize": "^8.0.0", + "readable-stream": "4.5.2", + "unicode-properties": "^1.4.1", + "urijs": "^1.19.1", + "wordwrap": "^1.0.0", + "yaml": "^2.4.1" + } + }, + "node_modules/quicktype-core/node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/quicktype-core/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "optional": true, + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/rimraf/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rolldown": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.1.tgz", + "integrity": "sha512-M3AeZjYE6UclblEf531Hch0WfVC/NOL43Cc+WdF3J50kk5/fvouHhDumSGTh0oRjbZ8C4faaVr5r6Nx1xMqDGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.110.0", + "@rolldown/pluginutils": "1.0.0-rc.1" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.1", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.1", + "@rolldown/binding-darwin-x64": "1.0.0-rc.1", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.1", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.1", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.1", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.1", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.1", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.1", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.1", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.1", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.1", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.1" + } + }, + "node_modules/rollup": { + "version": "4.57.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.0.tgz", + "integrity": "sha512-e5lPJi/aui4TO1LpAXIRLySmwXSE8k3b9zoGfd42p67wzxog4WHjiZF3M2uheQih4DGyc25QEV4yRBbpueNiUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.57.0", + "@rollup/rollup-android-arm64": "4.57.0", + "@rollup/rollup-darwin-arm64": "4.57.0", + "@rollup/rollup-darwin-x64": "4.57.0", + "@rollup/rollup-freebsd-arm64": "4.57.0", + "@rollup/rollup-freebsd-x64": "4.57.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.0", + "@rollup/rollup-linux-arm-musleabihf": "4.57.0", + "@rollup/rollup-linux-arm64-gnu": "4.57.0", + "@rollup/rollup-linux-arm64-musl": "4.57.0", + "@rollup/rollup-linux-loong64-gnu": "4.57.0", + "@rollup/rollup-linux-loong64-musl": "4.57.0", + "@rollup/rollup-linux-ppc64-gnu": "4.57.0", + "@rollup/rollup-linux-ppc64-musl": "4.57.0", + "@rollup/rollup-linux-riscv64-gnu": "4.57.0", + "@rollup/rollup-linux-riscv64-musl": "4.57.0", + "@rollup/rollup-linux-s390x-gnu": "4.57.0", + "@rollup/rollup-linux-x64-gnu": "4.57.0", + "@rollup/rollup-linux-x64-musl": "4.57.0", + "@rollup/rollup-openbsd-x64": "4.57.0", + "@rollup/rollup-openharmony-arm64": "4.57.0", + "@rollup/rollup-win32-arm64-msvc": "4.57.0", + "@rollup/rollup-win32-ia32-msvc": "4.57.0", + "@rollup/rollup-win32-x64-gnu": "4.57.0", + "@rollup/rollup-win32-x64-msvc": "4.57.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC", + "optional": true + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/signal-polyfill": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/signal-polyfill/-/signal-polyfill-0.2.2.tgz", + "integrity": "sha512-p63Y4Er5/eMQ9RHg0M0Y64NlsQKpiu6MDdhBXpyywRuWiPywhJTpKJ1iB5K2hJEbFZ0BnDS7ZkJ+0AfTuL37Rg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/signal-utils": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/signal-utils/-/signal-utils-0.21.1.tgz", + "integrity": "sha512-i9cdLSvVH4j8ql8mz2lyrA93xL499P8wEbIev3ldSriXeUwqh+wM4Q5VPhIZ19gPtIS4BOopJuKB8l1+wH9LCg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "signal-polyfill": "^0.2.0" + } + }, + "node_modules/simple-git": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz", + "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sleep-promise": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/sleep-promise/-/sleep-promise-9.1.0.tgz", + "integrity": "sha512-UHYzVpz9Xn8b+jikYSD6bqvf754xL2uBUzDFwiU6NcdZeifPr6UfgU43xpkPu67VMS88+TI2PSI7Eohgqf2fKA==", + "license": "MIT", + "optional": true + }, + "node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sqlite-vec": { + "version": "0.1.7-alpha.2", + "resolved": "https://registry.npmjs.org/sqlite-vec/-/sqlite-vec-0.1.7-alpha.2.tgz", + "integrity": "sha512-rNgRCv+4V4Ed3yc33Qr+nNmjhtrMnnHzXfLVPeGb28Dx5mmDL3Ngw/Wk8vhCGjj76+oC6gnkmMG8y73BZWGBwQ==", + "license": "MIT OR Apache", + "optionalDependencies": { + "sqlite-vec-darwin-arm64": "0.1.7-alpha.2", + "sqlite-vec-darwin-x64": "0.1.7-alpha.2", + "sqlite-vec-linux-arm64": "0.1.7-alpha.2", + "sqlite-vec-linux-x64": "0.1.7-alpha.2", + "sqlite-vec-windows-x64": "0.1.7-alpha.2" + } + }, + "node_modules/sqlite-vec-darwin-arm64": { + "version": "0.1.7-alpha.2", + "resolved": "https://registry.npmjs.org/sqlite-vec-darwin-arm64/-/sqlite-vec-darwin-arm64-0.1.7-alpha.2.tgz", + "integrity": "sha512-raIATOqFYkeCHhb/t3r7W7Cf2lVYdf4J3ogJ6GFc8PQEgHCPEsi+bYnm2JT84MzLfTlSTIdxr4/NKv+zF7oLPw==", + "cpu": [ + "arm64" + ], + "license": "MIT OR Apache", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/sqlite-vec-darwin-x64": { + "version": "0.1.7-alpha.2", + "resolved": "https://registry.npmjs.org/sqlite-vec-darwin-x64/-/sqlite-vec-darwin-x64-0.1.7-alpha.2.tgz", + "integrity": "sha512-jeZEELsQjjRsVojsvU5iKxOvkaVuE+JYC8Y4Ma8U45aAERrDYmqZoHvgSG7cg1PXL3bMlumFTAmHynf1y4pOzA==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/sqlite-vec-linux-arm64": { + "version": "0.1.7-alpha.2", + "resolved": "https://registry.npmjs.org/sqlite-vec-linux-arm64/-/sqlite-vec-linux-arm64-0.1.7-alpha.2.tgz", + "integrity": "sha512-6Spj4Nfi7tG13jsUG+W7jnT0bCTWbyPImu2M8nWp20fNrd1SZ4g3CSlDAK8GBdavX7wRlbBHCZ+BDa++rbDewA==", + "cpu": [ + "arm64" + ], + "license": "MIT OR Apache", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/sqlite-vec-linux-x64": { + "version": "0.1.7-alpha.2", + "resolved": "https://registry.npmjs.org/sqlite-vec-linux-x64/-/sqlite-vec-linux-x64-0.1.7-alpha.2.tgz", + "integrity": "sha512-IcgrbHaDccTVhXDf8Orwdc2+hgDLAFORl6OBUhcvlmwswwBP1hqBTSEhovClG4NItwTOBNgpwOoQ7Qp3VDPWLg==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/sqlite-vec-windows-x64": { + "version": "0.1.7-alpha.2", + "resolved": "https://registry.npmjs.org/sqlite-vec-windows-x64/-/sqlite-vec-windows-x64-0.1.7-alpha.2.tgz", + "integrity": "sha512-TRP6hTjAcwvQ6xpCZvjP00pdlda8J38ArFy1lMYhtQWXiIBmWnhMaMbq4kaeCYwvTTddfidatRS+TJrwIKB/oQ==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "license": "MIT" + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stdout-update": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/stdout-update/-/stdout-update-4.0.1.tgz", + "integrity": "sha512-wiS21Jthlvl1to+oorePvcyrIkiG/6M3D3VTmDUlJm7Cy6SbFhKkAvX+YBuHLxck/tO3mrdpC/cNesigQc3+UQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-escapes": "^6.2.0", + "ansi-styles": "^6.2.1", + "string-width": "^7.1.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/stdout-update/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT", + "optional": true + }, + "node_modules/stdout-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/steno": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/steno/-/steno-4.0.2.tgz", + "integrity": "sha512-yhPIQXjrlt1xv7dyPQg2P17URmXbuM5pdGkpiMB3RenprfiBlvK415Lctfe0eshk90oA7/tNq7WEiMK8RSP39A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/strtok3": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tailwind-merge": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", + "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwind-variants": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.2.2.tgz", + "integrity": "sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.x", + "pnpm": ">=7.x" + }, + "peerDependencies": { + "tailwind-merge": ">=3.0.0", + "tailwindcss": "*" + }, + "peerDependenciesMeta": { + "tailwind-merge": { + "optional": true + } + } + }, + "node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/tar": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.4.tgz", + "integrity": "sha512-AN04xbWGrSTDmVwlI4/GTlIIwMFk/XEv7uL8aa57zuvRy6s4hdBed+lVq2fAZ89XDa7Us3ANXcE3Tvqvja1kTA==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.0.0.tgz", + "integrity": "sha512-/RX9RzeH2xU5ADE7n2Ykvmi9ED3FBGPAjw9u3zucrNNaEBIO0HPSYgL0NT7+3p147ojeSdaVu08F6hjpv31HJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.0.0 || >=22.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toad-cache": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/ts-algebra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", + "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tslog": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/tslog/-/tslog-4.10.2.tgz", + "integrity": "sha512-XuELoRpMR+sq8fuWwX7P0bcj+PRNiicOKDEb3fGNURhxWVyykCi9BNq7c4uVz7h7P0sj8qgBsr5SWS6yBClq3g==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/fullstack-build/tslog?sponsor=1" + } + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "license": "MIT", + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/uhtml": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/uhtml/-/uhtml-5.0.9.tgz", + "integrity": "sha512-qPyu3vGilaLe6zrjOCD/xezWEHLwdevxmbY3hzyhT25KBDF4F7YYW3YZcL3kylD/6dMoVISHjn8ggV3+9FY+5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webreflection/alien-signals": "^0.3.2" + } + }, + "node_modules/uhyphen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/uhyphen/-/uhyphen-0.2.0.tgz", + "integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==", + "license": "ISC" + }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.19.2.tgz", + "integrity": "sha512-4VQSpGEGsWzk0VYxyB/wVX/Q7qf9t5znLRgs0dzszr9w9Fej/8RVNQ+S20vdXSAyra/bJ7ZQfGv6ZMj7UEbzSg==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true, + "license": "MIT" + }, + "node_modules/universal-github-app-jwt": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-2.2.2.tgz", + "integrity": "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw==", + "license": "MIT", + "optional": true + }, + "node_modules/universal-user-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "license": "ISC", + "optional": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/urijs": { + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", + "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "license": "MIT", + "optional": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/validate-npm-package-name": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", + "license": "ISC", + "optional": true, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", + "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.0.18", + "@vitest/mocker": "4.0.18", + "@vitest/pretty-format": "4.0.18", + "@vitest/runner": "4.0.18", + "@vitest/snapshot": "4.0.18", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", + "es-module-lexer": "^1.7.0", + "expect-type": "^1.2.2", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^3.10.0", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.0.3", + "vite": "^6.0.0 || ^7.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.0.18", + "@vitest/browser-preview": "4.0.18", + "@vitest/browser-webdriverio": "4.0.18", + "@vitest/ui": "4.0.18", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "optional": true + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/win-guid": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/win-guid/-/win-guid-0.2.1.tgz", + "integrity": "sha512-gEIQU4mkgl2OPeoNrWflcJFJ3Ae2BPd4eCsHHA/XikslkIVms/nHhvnvzIZV7VLmBvtFlDOzLt9rrZT+n6D67A==", + "license": "MIT" + }, + "node_modules/wireit": { + "version": "0.14.12", + "resolved": "https://registry.npmjs.org/wireit/-/wireit-0.14.12.tgz", + "integrity": "sha512-gNSd+nZmMo6cuICezYXRIayu6TSOeCSCDzjSF0q6g8FKDsRbdqrONrSZYzdk/uBISmRcv4vZtsno6GyGvdXwGA==", + "dev": true, + "license": "Apache-2.0", + "workspaces": [ + "vscode-extension", + "website" + ], + "dependencies": { + "brace-expansion": "^4.0.0", + "chokidar": "^3.5.3", + "fast-glob": "^3.2.11", + "jsonc-parser": "^3.0.0", + "proper-lockfile": "^4.1.2" + }, + "bin": { + "wireit": "bin/wireit.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/wireit/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/wireit/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/wireit/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.25 || ^4" + } + } + } +} diff --git a/package.json b/package.json index 04322f3af..59dbca6e6 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,7 @@ "./cli-entry": "./moltbot.mjs" }, "bin": { - "moltbot": "./moltbot.mjs", - "clawdbot": "./moltbot.mjs" + "moltbot": "./moltbot.mjs" }, "files": [ "dist/acp/**", @@ -95,10 +94,10 @@ "start": "node scripts/run-node.mjs", "moltbot": "node scripts/run-node.mjs", "gateway:watch": "node scripts/watch-node.mjs gateway --force", - "gateway:dev": "CLAWDBOT_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway", - "gateway:dev:reset": "CLAWDBOT_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway --reset", + "gateway:dev": "MOLTBOT_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway", + "gateway:dev:reset": "MOLTBOT_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway --reset", "tui": "node scripts/run-node.mjs tui", - "tui:dev": "CLAWDBOT_PROFILE=dev node scripts/run-node.mjs tui", + "tui:dev": "MOLTBOT_PROFILE=dev node scripts/run-node.mjs tui", "moltbot:rpc": "node scripts/run-node.mjs agent --mode rpc --json", "ios:gen": "cd apps/ios && xcodegen generate", "ios:open": "cd apps/ios && xcodegen generate && open Moltbot.xcodeproj", @@ -125,7 +124,7 @@ "test:force": "node --import tsx scripts/test-force.ts", "test:coverage": "vitest run --coverage", "test:e2e": "vitest run --config vitest.e2e.config.ts", - "test:live": "CLAWDBOT_LIVE_TEST=1 vitest run --config vitest.live.config.ts", + "test:live": "MOLTBOT_LIVE_TEST=1 vitest run --config vitest.live.config.ts", "test:docker:onboard": "bash scripts/e2e/onboard-docker.sh", "test:docker:gateway-network": "bash scripts/e2e/gateway-network-docker.sh", "test:docker:live-models": "bash scripts/test-live-models-docker.sh", @@ -138,8 +137,8 @@ "test:all": "pnpm lint && pnpm build && pnpm test && pnpm test:e2e && pnpm test:live && pnpm test:docker:all", "test:install:e2e": "bash scripts/test-install-sh-e2e-docker.sh", "test:install:smoke": "bash scripts/test-install-sh-docker.sh", - "test:install:e2e:openai": "CLAWDBOT_E2E_MODELS=openai bash scripts/test-install-sh-e2e-docker.sh", - "test:install:e2e:anthropic": "CLAWDBOT_E2E_MODELS=anthropic bash scripts/test-install-sh-e2e-docker.sh", + "test:install:e2e:openai": "MOLTBOT_E2E_MODELS=openai bash scripts/test-install-sh-e2e-docker.sh", + "test:install:e2e:anthropic": "MOLTBOT_E2E_MODELS=anthropic bash scripts/test-install-sh-e2e-docker.sh", "protocol:gen": "node --import tsx scripts/protocol-gen.ts", "protocol:gen:swift": "node --import tsx scripts/protocol-gen-swift.ts", "protocol:check": "pnpm protocol:gen && pnpm protocol:gen:swift && git diff --exit-code -- dist/protocol.schema.json apps/macos/Sources/MoltbotProtocol/GatewayModels.swift", diff --git a/scripts/auth-monitor.sh b/scripts/auth-monitor.sh index af6242b0c..7c3b8f504 100755 --- a/scripts/auth-monitor.sh +++ b/scripts/auth-monitor.sh @@ -14,7 +14,7 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CLAUDE_CREDS="$HOME/.claude/.credentials.json" -STATE_FILE="$HOME/.clawdbot/auth-monitor-state" +STATE_FILE="$HOME/.moltbot/auth-monitor-state" # Configuration WARN_HOURS="${WARN_HOURS:-2}" diff --git a/scripts/canvas-a2ui-copy.ts b/scripts/canvas-a2ui-copy.ts index e95be5fdd..7778f6772 100644 --- a/scripts/canvas-a2ui-copy.ts +++ b/scripts/canvas-a2ui-copy.ts @@ -6,9 +6,9 @@ const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".." export function getA2uiPaths(env = process.env) { const srcDir = - env.CLAWDBOT_A2UI_SRC_DIR ?? path.join(repoRoot, "src", "canvas-host", "a2ui"); + env.MOLTBOT_A2UI_SRC_DIR ?? path.join(repoRoot, "src", "canvas-host", "a2ui"); const outDir = - env.CLAWDBOT_A2UI_OUT_DIR ?? path.join(repoRoot, "dist", "canvas-host", "a2ui"); + env.MOLTBOT_A2UI_OUT_DIR ?? path.join(repoRoot, "dist", "canvas-host", "a2ui"); return { srcDir, outDir }; } @@ -19,7 +19,7 @@ export async function copyA2uiAssets({ srcDir: string; outDir: string; }) { - const skipMissing = process.env.CLAWDBOT_A2UI_SKIP_MISSING === "1"; + const skipMissing = process.env.MOLTBOT_A2UI_SKIP_MISSING === "1"; try { await fs.stat(path.join(srcDir, "index.html")); await fs.stat(path.join(srcDir, "a2ui.bundle.js")); @@ -27,7 +27,7 @@ export async function copyA2uiAssets({ const message = 'Missing A2UI bundle assets. Run "pnpm canvas:a2ui:bundle" and retry.'; if (skipMissing) { - console.warn(`${message} Skipping copy (CLAWDBOT_A2UI_SKIP_MISSING=1).`); + console.warn(`${message} Skipping copy (MOLTBOT_A2UI_SKIP_MISSING=1).`); return; } throw new Error(message, { cause: err }); diff --git a/scripts/claude-auth-status.sh b/scripts/claude-auth-status.sh index 4badd04d8..c54574efe 100755 --- a/scripts/claude-auth-status.sh +++ b/scripts/claude-auth-status.sh @@ -5,7 +5,7 @@ set -euo pipefail CLAUDE_CREDS="$HOME/.claude/.credentials.json" -CLAWDBOT_AUTH="$HOME/.clawdbot/agents/main/agent/auth-profiles.json" +MOLTBOT_AUTH="$HOME/.moltbot/agents/main/agent/auth-profiles.json" # Colors for terminal output RED='\033[0;31m' @@ -122,7 +122,7 @@ check_moltbot_auth() { return $? fi - if [ ! -f "$CLAWDBOT_AUTH" ]; then + if [ ! -f "$MOLTBOT_AUTH" ]; then echo "MISSING" return 1 fi @@ -131,7 +131,7 @@ check_moltbot_auth() { expires=$(jq -r ' [.profiles | to_entries[] | select(.value.provider == "anthropic") | .value.expires] | max // 0 - ' "$CLAWDBOT_AUTH" 2>/dev/null || echo "0") + ' "$MOLTBOT_AUTH" 2>/dev/null || echo "0") calc_status_from_expires "$expires" } @@ -148,7 +148,7 @@ if [ "$OUTPUT_MODE" = "json" ]; then moltbot_expires=$(json_expires_for_anthropic_any) else claude_expires=$(jq -r '.claudeAiOauth.expiresAt // 0' "$CLAUDE_CREDS" 2>/dev/null || echo "0") - moltbot_expires=$(jq -r '.profiles["anthropic:default"].expires // 0' "$CLAWDBOT_AUTH" 2>/dev/null || echo "0") + moltbot_expires=$(jq -r '.profiles["anthropic:default"].expires // 0' "$MOLTBOT_AUTH" 2>/dev/null || echo "0") fi jq -n \ @@ -173,13 +173,13 @@ if [ "$OUTPUT_MODE" = "simple" ]; then echo "CLAUDE_EXPIRED" exit 1 elif [[ "$moltbot_status" == EXPIRED* ]] || [[ "$moltbot_status" == MISSING* ]]; then - echo "CLAWDBOT_EXPIRED" + echo "MOLTBOT_EXPIRED" exit 1 elif [[ "$claude_status" == EXPIRING* ]]; then echo "CLAUDE_EXPIRING" exit 2 elif [[ "$moltbot_status" == EXPIRING* ]]; then - echo "CLAWDBOT_EXPIRING" + echo "MOLTBOT_EXPIRING" exit 2 else echo "OK" @@ -228,7 +228,7 @@ else fi echo "" -echo "Moltbot Auth (~/.clawdbot/agents/main/agent/auth-profiles.json):" +echo "Moltbot Auth (~/.moltbot/agents/main/agent/auth-profiles.json):" if [ "$USE_JSON" -eq 1 ]; then best_profile=$(json_best_anthropic_profile) expires=$(json_expires_for_anthropic_any) @@ -239,11 +239,11 @@ else | map(select(.value.provider == "anthropic")) | sort_by(.value.expires) | reverse | .[0].key // "none" - ' "$CLAWDBOT_AUTH" 2>/dev/null || echo "none") + ' "$MOLTBOT_AUTH" 2>/dev/null || echo "none") expires=$(jq -r ' [.profiles | to_entries[] | select(.value.provider == "anthropic") | .value.expires] | max // 0 - ' "$CLAWDBOT_AUTH" 2>/dev/null || echo "0") + ' "$MOLTBOT_AUTH" 2>/dev/null || echo "0") api_keys=0 fi diff --git a/scripts/debug-claude-usage.ts b/scripts/debug-claude-usage.ts index b98d7d45b..7cfcecefd 100644 --- a/scripts/debug-claude-usage.ts +++ b/scripts/debug-claude-usage.ts @@ -44,7 +44,7 @@ const parseArgs = (): Args => { const loadAuthProfiles = (agentId: string) => { const stateRoot = - process.env.CLAWDBOT_STATE_DIR?.trim() || path.join(os.homedir(), ".clawdbot"); + process.env.MOLTBOT_STATE_DIR?.trim() || path.join(os.homedir(), ".clawdbot"); const authPath = path.join(stateRoot, "agents", agentId, "agent", "auth-profiles.json"); if (!fs.existsSync(authPath)) throw new Error(`Missing: ${authPath}`); const store = JSON.parse(fs.readFileSync(authPath, "utf8")) as { diff --git a/scripts/docker/cleanup-smoke/run.sh b/scripts/docker/cleanup-smoke/run.sh index f6ee13c65..d4f1d7e52 100755 --- a/scripts/docker/cleanup-smoke/run.sh +++ b/scripts/docker/cleanup-smoke/run.sh @@ -3,30 +3,30 @@ set -euo pipefail cd /repo -export CLAWDBOT_STATE_DIR="/tmp/moltbot-test" -export CLAWDBOT_CONFIG_PATH="${CLAWDBOT_STATE_DIR}/moltbot.json" +export MOLTBOT_STATE_DIR="/tmp/moltbot-test" +export MOLTBOT_CONFIG_PATH="${MOLTBOT_STATE_DIR}/moltbot.json" echo "==> Seed state" -mkdir -p "${CLAWDBOT_STATE_DIR}/credentials" -mkdir -p "${CLAWDBOT_STATE_DIR}/agents/main/sessions" -echo '{}' >"${CLAWDBOT_CONFIG_PATH}" -echo 'creds' >"${CLAWDBOT_STATE_DIR}/credentials/marker.txt" -echo 'session' >"${CLAWDBOT_STATE_DIR}/agents/main/sessions/sessions.json" +mkdir -p "${MOLTBOT_STATE_DIR}/credentials" +mkdir -p "${MOLTBOT_STATE_DIR}/agents/main/sessions" +echo '{}' >"${MOLTBOT_CONFIG_PATH}" +echo 'creds' >"${MOLTBOT_STATE_DIR}/credentials/marker.txt" +echo 'session' >"${MOLTBOT_STATE_DIR}/agents/main/sessions/sessions.json" echo "==> Reset (config+creds+sessions)" pnpm moltbot reset --scope config+creds+sessions --yes --non-interactive -test ! -f "${CLAWDBOT_CONFIG_PATH}" -test ! -d "${CLAWDBOT_STATE_DIR}/credentials" -test ! -d "${CLAWDBOT_STATE_DIR}/agents/main/sessions" +test ! -f "${MOLTBOT_CONFIG_PATH}" +test ! -d "${MOLTBOT_STATE_DIR}/credentials" +test ! -d "${MOLTBOT_STATE_DIR}/agents/main/sessions" echo "==> Recreate minimal config" -mkdir -p "${CLAWDBOT_STATE_DIR}/credentials" -echo '{}' >"${CLAWDBOT_CONFIG_PATH}" +mkdir -p "${MOLTBOT_STATE_DIR}/credentials" +echo '{}' >"${MOLTBOT_CONFIG_PATH}" echo "==> Uninstall (state only)" pnpm moltbot uninstall --state --yes --non-interactive -test ! -d "${CLAWDBOT_STATE_DIR}" +test ! -d "${MOLTBOT_STATE_DIR}" echo "OK" diff --git a/scripts/docker/install-sh-e2e/run.sh b/scripts/docker/install-sh-e2e/run.sh index 35a006f7f..62d81fdef 100755 --- a/scripts/docker/install-sh-e2e/run.sh +++ b/scripts/docker/install-sh-e2e/run.sh @@ -1,34 +1,34 @@ #!/usr/bin/env bash set -euo pipefail -INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}" -MODELS_MODE="${CLAWDBOT_E2E_MODELS:-both}" # both|openai|anthropic -INSTALL_TAG="${CLAWDBOT_INSTALL_TAG:-latest}" -E2E_PREVIOUS_VERSION="${CLAWDBOT_INSTALL_E2E_PREVIOUS:-}" -SKIP_PREVIOUS="${CLAWDBOT_INSTALL_E2E_SKIP_PREVIOUS:-0}" +INSTALL_URL="${MOLTBOT_INSTALL_URL:-https://molt.bot/install.sh}" +MODELS_MODE="${MOLTBOT_E2E_MODELS:-both}" # both|openai|anthropic +INSTALL_TAG="${MOLTBOT_INSTALL_TAG:-latest}" +E2E_PREVIOUS_VERSION="${MOLTBOT_INSTALL_E2E_PREVIOUS:-}" +SKIP_PREVIOUS="${MOLTBOT_INSTALL_E2E_SKIP_PREVIOUS:-0}" OPENAI_API_KEY="${OPENAI_API_KEY:-}" ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY:-}" ANTHROPIC_API_TOKEN="${ANTHROPIC_API_TOKEN:-}" if [[ "$MODELS_MODE" != "both" && "$MODELS_MODE" != "openai" && "$MODELS_MODE" != "anthropic" ]]; then - echo "ERROR: CLAWDBOT_E2E_MODELS must be one of: both|openai|anthropic" >&2 + echo "ERROR: MOLTBOT_E2E_MODELS must be one of: both|openai|anthropic" >&2 exit 2 fi if [[ "$MODELS_MODE" == "both" ]]; then if [[ -z "$OPENAI_API_KEY" ]]; then - echo "ERROR: CLAWDBOT_E2E_MODELS=both requires OPENAI_API_KEY." >&2 + echo "ERROR: MOLTBOT_E2E_MODELS=both requires OPENAI_API_KEY." >&2 exit 2 fi if [[ -z "$ANTHROPIC_API_TOKEN" && -z "$ANTHROPIC_API_KEY" ]]; then - echo "ERROR: CLAWDBOT_E2E_MODELS=both requires ANTHROPIC_API_TOKEN or ANTHROPIC_API_KEY." >&2 + echo "ERROR: MOLTBOT_E2E_MODELS=both requires ANTHROPIC_API_TOKEN or ANTHROPIC_API_KEY." >&2 exit 2 fi elif [[ "$MODELS_MODE" == "openai" && -z "$OPENAI_API_KEY" ]]; then - echo "ERROR: CLAWDBOT_E2E_MODELS=openai requires OPENAI_API_KEY." >&2 + echo "ERROR: MOLTBOT_E2E_MODELS=openai requires OPENAI_API_KEY." >&2 exit 2 elif [[ "$MODELS_MODE" == "anthropic" && -z "$ANTHROPIC_API_TOKEN" && -z "$ANTHROPIC_API_KEY" ]]; then - echo "ERROR: CLAWDBOT_E2E_MODELS=anthropic requires ANTHROPIC_API_TOKEN or ANTHROPIC_API_KEY." >&2 + echo "ERROR: MOLTBOT_E2E_MODELS=anthropic requires ANTHROPIC_API_TOKEN or ANTHROPIC_API_KEY." >&2 exit 2 fi @@ -52,7 +52,7 @@ fi echo "expected=$EXPECTED_VERSION previous=$PREVIOUS_VERSION" if [[ "$SKIP_PREVIOUS" == "1" ]]; then - echo "==> Skip preinstall previous (CLAWDBOT_INSTALL_E2E_SKIP_PREVIOUS=1)" + echo "==> Skip preinstall previous (MOLTBOT_INSTALL_E2E_SKIP_PREVIOUS=1)" else echo "==> Preinstall previous (forces installer upgrade path; avoids read() prompt)" npm install -g "moltbot@${PREVIOUS_VERSION}" @@ -60,9 +60,9 @@ fi echo "==> Run official installer one-liner" if [[ "$INSTALL_TAG" == "beta" ]]; then - CLAWDBOT_BETA=1 curl -fsSL "$INSTALL_URL" | bash + MOLTBOT_BETA=1 curl -fsSL "$INSTALL_URL" | bash elif [[ "$INSTALL_TAG" != "latest" ]]; then - CLAWDBOT_VERSION="$INSTALL_TAG" curl -fsSL "$INSTALL_URL" | bash + MOLTBOT_VERSION="$INSTALL_TAG" curl -fsSL "$INSTALL_URL" | bash else curl -fsSL "$INSTALL_URL" | bash fi @@ -416,7 +416,7 @@ run_profile() { IMAGE_PNG="$workspace/proof.png" IMAGE_TXT="$workspace/image.txt" SESSION_ID="e2e-tools-${profile}" - SESSION_JSONL="/root/.clawdbot-${profile}/agents/main/sessions/${SESSION_ID}.jsonl" + SESSION_JSONL="/root/.moltbot-${profile}/agents/main/sessions/${SESSION_ID}.jsonl" PROOF_VALUE="$(node -e 'console.log(require("node:crypto").randomBytes(16).toString("hex"))')" echo -n "$PROOF_VALUE" >"$PROOF_TXT" @@ -511,7 +511,7 @@ run_profile() { sleep 1 if [[ ! -f "$SESSION_JSONL" ]]; then echo "ERROR: missing session transcript ($profile): $SESSION_JSONL" >&2 - ls -la "/root/.clawdbot-${profile}/agents/main/sessions" >&2 || true + ls -la "/root/.moltbot-${profile}/agents/main/sessions" >&2 || true exit 1 fi assert_session_used_tools "$SESSION_JSONL" read write exec image diff --git a/scripts/docker/install-sh-nonroot/run.sh b/scripts/docker/install-sh-nonroot/run.sh index 58a8fc3e7..7cc597fff 100644 --- a/scripts/docker/install-sh-nonroot/run.sh +++ b/scripts/docker/install-sh-nonroot/run.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash set -euo pipefail -INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}" +INSTALL_URL="${MOLTBOT_INSTALL_URL:-https://molt.bot/install.sh}" DEFAULT_PACKAGE="moltbot" -if [[ -z "${CLAWDBOT_INSTALL_PACKAGE:-}" && "$INSTALL_URL" == *"clawd.bot"* ]]; then +if [[ -z "${MOLTBOT_INSTALL_PACKAGE:-}" && "$INSTALL_URL" == *"clawd.bot"* ]]; then DEFAULT_PACKAGE="clawdbot" fi -PACKAGE_NAME="${CLAWDBOT_INSTALL_PACKAGE:-$DEFAULT_PACKAGE}" +PACKAGE_NAME="${MOLTBOT_INSTALL_PACKAGE:-$DEFAULT_PACKAGE}" if [[ "$PACKAGE_NAME" == "moltbot" ]]; then ALT_PACKAGE_NAME="clawdbot" else @@ -28,7 +28,7 @@ export PATH="$HOME/.npm-global/bin:$PATH" echo "==> Verify git installed" command -v git >/dev/null -EXPECTED_VERSION="${CLAWDBOT_INSTALL_EXPECT_VERSION:-}" +EXPECTED_VERSION="${MOLTBOT_INSTALL_EXPECT_VERSION:-}" if [[ -n "$EXPECTED_VERSION" ]]; then LATEST_VERSION="$EXPECTED_VERSION" else diff --git a/scripts/docker/install-sh-smoke/run.sh b/scripts/docker/install-sh-smoke/run.sh index 09a597de8..27a0428ec 100755 --- a/scripts/docker/install-sh-smoke/run.sh +++ b/scripts/docker/install-sh-smoke/run.sh @@ -1,14 +1,14 @@ #!/usr/bin/env bash set -euo pipefail -INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}" -SMOKE_PREVIOUS_VERSION="${CLAWDBOT_INSTALL_SMOKE_PREVIOUS:-}" -SKIP_PREVIOUS="${CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS:-0}" +INSTALL_URL="${MOLTBOT_INSTALL_URL:-https://molt.bot/install.sh}" +SMOKE_PREVIOUS_VERSION="${MOLTBOT_INSTALL_SMOKE_PREVIOUS:-}" +SKIP_PREVIOUS="${MOLTBOT_INSTALL_SMOKE_SKIP_PREVIOUS:-0}" DEFAULT_PACKAGE="moltbot" -if [[ -z "${CLAWDBOT_INSTALL_PACKAGE:-}" && "$INSTALL_URL" == *"clawd.bot"* ]]; then +if [[ -z "${MOLTBOT_INSTALL_PACKAGE:-}" && "$INSTALL_URL" == *"clawd.bot"* ]]; then DEFAULT_PACKAGE="clawdbot" fi -PACKAGE_NAME="${CLAWDBOT_INSTALL_PACKAGE:-$DEFAULT_PACKAGE}" +PACKAGE_NAME="${MOLTBOT_INSTALL_PACKAGE:-$DEFAULT_PACKAGE}" if [[ "$PACKAGE_NAME" == "moltbot" ]]; then ALT_PACKAGE_NAME="clawdbot" else @@ -49,7 +49,7 @@ fi echo "package=$PACKAGE_NAME latest=$LATEST_VERSION previous=$PREVIOUS_VERSION" if [[ "$SKIP_PREVIOUS" == "1" ]]; then - echo "==> Skip preinstall previous (CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS=1)" + echo "==> Skip preinstall previous (MOLTBOT_INSTALL_SMOKE_SKIP_PREVIOUS=1)" else echo "==> Preinstall previous (forces installer upgrade path)" npm install -g "${PACKAGE_NAME}@${PREVIOUS_VERSION}" @@ -70,8 +70,8 @@ if ! command -v "$CLI_NAME" >/dev/null 2>&1; then exit 1 fi fi -if [[ -n "${CLAWDBOT_INSTALL_LATEST_OUT:-}" ]]; then - printf "%s" "$LATEST_VERSION" > "$CLAWDBOT_INSTALL_LATEST_OUT" +if [[ -n "${MOLTBOT_INSTALL_LATEST_OUT:-}" ]]; then + printf "%s" "$LATEST_VERSION" > "$MOLTBOT_INSTALL_LATEST_OUT" fi INSTALLED_VERSION="$("$CLI_NAME" --version 2>/dev/null | head -n 1 | tr -d '\r')" echo "cli=$CLI_NAME installed=$INSTALLED_VERSION expected=$LATEST_VERSION" diff --git a/scripts/e2e/gateway-network-docker.sh b/scripts/e2e/gateway-network-docker.sh index fae1408e1..dbf2f4ee0 100644 --- a/scripts/e2e/gateway-network-docker.sh +++ b/scripts/e2e/gateway-network-docker.sh @@ -25,11 +25,11 @@ echo "Starting gateway container..." docker run --rm -d \ --name "$GW_NAME" \ --network "$NET_NAME" \ - -e "CLAWDBOT_GATEWAY_TOKEN=$TOKEN" \ - -e "CLAWDBOT_SKIP_CHANNELS=1" \ - -e "CLAWDBOT_SKIP_GMAIL_WATCHER=1" \ - -e "CLAWDBOT_SKIP_CRON=1" \ - -e "CLAWDBOT_SKIP_CANVAS_HOST=1" \ + -e "MOLTBOT_GATEWAY_TOKEN=$TOKEN" \ + -e "MOLTBOT_SKIP_CHANNELS=1" \ + -e "MOLTBOT_SKIP_GMAIL_WATCHER=1" \ + -e "MOLTBOT_SKIP_CRON=1" \ + -e "MOLTBOT_SKIP_CANVAS_HOST=1" \ "$IMAGE_NAME" \ bash -lc "node dist/index.js gateway --port $PORT --bind lan --allow-unconfigured > /tmp/gateway-net-e2e.log 2>&1" diff --git a/scripts/e2e/onboard-docker.sh b/scripts/e2e/onboard-docker.sh index 3eb2a0b03..34e5e0b6d 100755 --- a/scripts/e2e/onboard-docker.sh +++ b/scripts/e2e/onboard-docker.sh @@ -281,8 +281,8 @@ TRASH # Assert config + workspace scaffolding. workspace_dir="$HOME/clawd" - config_path="$HOME/.clawdbot/moltbot.json" - sessions_dir="$HOME/.clawdbot/agents/main/sessions" + config_path="$HOME/.moltbot/moltbot.json" + sessions_dir="$HOME/.moltbot/agents/main/sessions" assert_file "$config_path" assert_dir "$sessions_dir" @@ -352,7 +352,7 @@ NODE --skip-skills \ --skip-health - config_path="$HOME/.clawdbot/moltbot.json" + config_path="$HOME/.moltbot/moltbot.json" assert_file "$config_path" CONFIG_PATH="$config_path" node --input-type=module - <<'"'"'NODE'"'"' @@ -386,9 +386,9 @@ NODE local home_dir home_dir="$(make_home reset-config)" export HOME="$home_dir" - mkdir -p "$HOME/.clawdbot" + mkdir -p "$HOME/.moltbot" # Seed a remote config to exercise reset path. - cat > "$HOME/.clawdbot/moltbot.json" <<'"'"'JSON'"'"' + cat > "$HOME/.moltbot/moltbot.json" <<'"'"'JSON'"'"' { "agents": { "defaults": { "workspace": "/root/old" } }, "gateway": { @@ -410,7 +410,7 @@ JSON --skip-ui \ --skip-health - config_path="$HOME/.clawdbot/moltbot.json" + config_path="$HOME/.moltbot/moltbot.json" assert_file "$config_path" CONFIG_PATH="$config_path" node --input-type=module - <<'"'"'NODE'"'"' @@ -443,7 +443,7 @@ NODE # Channels-only configure flow. run_wizard_cmd channels "$home_dir" "node dist/index.js configure --section channels" send_channels_flow - config_path="$HOME/.clawdbot/moltbot.json" + config_path="$HOME/.moltbot/moltbot.json" assert_file "$config_path" CONFIG_PATH="$config_path" node --input-type=module - <<'"'"'NODE'"'"' @@ -481,9 +481,9 @@ NODE local home_dir home_dir="$(make_home skills)" export HOME="$home_dir" - mkdir -p "$HOME/.clawdbot" + mkdir -p "$HOME/.moltbot" # Seed skills config to ensure it survives the wizard. - cat > "$HOME/.clawdbot/moltbot.json" <<'"'"'JSON'"'"' + cat > "$HOME/.moltbot/moltbot.json" <<'"'"'JSON'"'"' { "skills": { "allowBundled": ["__none__"], @@ -494,7 +494,7 @@ JSON run_wizard_cmd skills "$home_dir" "node dist/index.js configure --section skills" send_skills_flow - config_path="$HOME/.clawdbot/moltbot.json" + config_path="$HOME/.moltbot/moltbot.json" assert_file "$config_path" CONFIG_PATH="$config_path" node --input-type=module - <<'"'"'NODE'"'"' diff --git a/scripts/e2e/plugins-docker.sh b/scripts/e2e/plugins-docker.sh index da4fcf14f..e70a9eb18 100755 --- a/scripts/e2e/plugins-docker.sh +++ b/scripts/e2e/plugins-docker.sh @@ -13,9 +13,9 @@ docker run --rm -t "$IMAGE_NAME" bash -lc ' home_dir=$(mktemp -d "/tmp/moltbot-plugins-e2e.XXXXXX") export HOME="$home_dir" - mkdir -p "$HOME/.clawdbot/extensions" + mkdir -p "$HOME/.moltbot/extensions" - cat > "$HOME/.clawdbot/extensions/demo-plugin.js" <<'"'"'JS'"'"' + cat > "$HOME/.moltbot/extensions/demo-plugin.js" <<'"'"'JS'"'"' module.exports = { id: "demo-plugin", name: "Demo Plugin", diff --git a/scripts/e2e/qr-import-docker.sh b/scripts/e2e/qr-import-docker.sh index 78bb73093..a42a306a6 100755 --- a/scripts/e2e/qr-import-docker.sh +++ b/scripts/e2e/qr-import-docker.sh @@ -2,7 +2,7 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" -IMAGE_NAME="${CLAWDBOT_QR_SMOKE_IMAGE:-moltbot-qr-smoke}" +IMAGE_NAME="${MOLTBOT_QR_SMOKE_IMAGE:-moltbot-qr-smoke}" echo "Building Docker image..." docker build -t "$IMAGE_NAME" -f "$ROOT_DIR/scripts/e2e/Dockerfile.qr-import" "$ROOT_DIR" diff --git a/scripts/mobile-reauth.sh b/scripts/mobile-reauth.sh index fab3153c6..77a83edda 100755 --- a/scripts/mobile-reauth.sh +++ b/scripts/mobile-reauth.sh @@ -32,7 +32,7 @@ case "$AUTH_STATUS" in "$SCRIPT_DIR/claude-auth-status.sh" full exit 0 ;; - CLAUDE_EXPIRING|CLAWDBOT_EXPIRING) + CLAUDE_EXPIRING|MOLTBOT_EXPIRING) echo -e "${YELLOW}Auth is expiring soon.${NC}" echo "" ;; diff --git a/scripts/restart-mac.sh b/scripts/restart-mac.sh index b9bf1ab86..176e5e89b 100755 --- a/scripts/restart-mac.sh +++ b/scripts/restart-mac.sh @@ -4,7 +4,7 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -APP_BUNDLE="${CLAWDBOT_APP_BUNDLE:-}" +APP_BUNDLE="${MOLTBOT_APP_BUNDLE:-}" APP_PROCESS_PATTERN="Moltbot.app/Contents/MacOS/Moltbot" DEBUG_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build/debug/Moltbot" LOCAL_PROCESS_PATTERN="${ROOT_DIR}/apps/macos/.build-local/debug/Moltbot" @@ -14,12 +14,12 @@ LOCK_KEY="$(printf '%s' "${ROOT_DIR}" | shasum -a 256 | cut -c1-8)" LOCK_DIR="${TMPDIR:-/tmp}/moltbot-restart-${LOCK_KEY}" LOCK_PID_FILE="${LOCK_DIR}/pid" WAIT_FOR_LOCK=0 -LOG_PATH="${CLAWDBOT_RESTART_LOG:-/tmp/moltbot-restart.log}" +LOG_PATH="${MOLTBOT_RESTART_LOG:-/tmp/moltbot-restart.log}" NO_SIGN=0 SIGN=0 AUTO_DETECT_SIGNING=1 -GATEWAY_WAIT_SECONDS="${CLAWDBOT_GATEWAY_WAIT_SECONDS:-0}" -LAUNCHAGENT_DISABLE_MARKER="${HOME}/.clawdbot/disable-launchagent" +GATEWAY_WAIT_SECONDS="${MOLTBOT_GATEWAY_WAIT_SECONDS:-0}" +LAUNCHAGENT_DISABLE_MARKER="${HOME}/.moltbot/disable-launchagent" ATTACH_ONLY=1 log() { printf '%s\n' "$*"; } @@ -93,14 +93,14 @@ for arg in "$@"; do log " --no-attach-only Launch app without attach-only override" log "" log "Env:" - log " CLAWDBOT_GATEWAY_WAIT_SECONDS=0 Wait time before gateway port check (unsigned only)" + log " MOLTBOT_GATEWAY_WAIT_SECONDS=0 Wait time before gateway port check (unsigned only)" log "" log "Unsigned recovery:" log " node moltbot.mjs daemon install --force --runtime node" log " node moltbot.mjs daemon restart" log "" log "Reset unsigned overrides:" - log " rm ~/.clawdbot/disable-launchagent" + log " rm ~/.moltbot/disable-launchagent" log "" log "Default behavior: Auto-detect signing keys, fallback to --no-sign if none found" exit 0 @@ -173,7 +173,7 @@ fi if [ "$NO_SIGN" -eq 1 ]; then export ALLOW_ADHOC_SIGNING=1 export SIGN_IDENTITY="-" - mkdir -p "${HOME}/.clawdbot" + mkdir -p "${HOME}/.moltbot" run_step "disable launchagent writes" /usr/bin/touch "${LAUNCHAGENT_DISABLE_MARKER}" elif [ "$SIGN" -eq 1 ]; then if ! check_signing_keys; then @@ -204,7 +204,7 @@ choose_app_bundle() { return 0 fi - fail "App bundle not found. Set CLAWDBOT_APP_BUNDLE to your installed Moltbot.app" + fail "App bundle not found. Set MOLTBOT_APP_BUNDLE to your installed Moltbot.app" } choose_app_bundle @@ -227,7 +227,7 @@ if [ "$NO_SIGN" -eq 1 ] && [ "$ATTACH_ONLY" -ne 1 ]; then const fs = require("node:fs"); const path = require("node:path"); try { - const raw = fs.readFileSync(path.join(process.env.HOME, ".clawdbot", "moltbot.json"), "utf8"); + const raw = fs.readFileSync(path.join(process.env.HOME, ".moltbot", "moltbot.json"), "utf8"); const cfg = JSON.parse(raw); const port = cfg && cfg.gateway && typeof cfg.gateway.port === "number" ? cfg.gateway.port : 18789; process.stdout.write(String(port)); diff --git a/scripts/sandbox-browser-entrypoint.sh b/scripts/sandbox-browser-entrypoint.sh index 7a1d6fdf7..9366cda8e 100755 --- a/scripts/sandbox-browser-entrypoint.sh +++ b/scripts/sandbox-browser-entrypoint.sh @@ -6,11 +6,11 @@ export HOME=/tmp/moltbot-home export XDG_CONFIG_HOME="${HOME}/.config" export XDG_CACHE_HOME="${HOME}/.cache" -CDP_PORT="${CLAWDBOT_BROWSER_CDP_PORT:-9222}" -VNC_PORT="${CLAWDBOT_BROWSER_VNC_PORT:-5900}" -NOVNC_PORT="${CLAWDBOT_BROWSER_NOVNC_PORT:-6080}" -ENABLE_NOVNC="${CLAWDBOT_BROWSER_ENABLE_NOVNC:-1}" -HEADLESS="${CLAWDBOT_BROWSER_HEADLESS:-0}" +CDP_PORT="${MOLTBOT_BROWSER_CDP_PORT:-9222}" +VNC_PORT="${MOLTBOT_BROWSER_VNC_PORT:-5900}" +NOVNC_PORT="${MOLTBOT_BROWSER_NOVNC_PORT:-6080}" +ENABLE_NOVNC="${MOLTBOT_BROWSER_ENABLE_NOVNC:-1}" +HEADLESS="${MOLTBOT_BROWSER_HEADLESS:-0}" mkdir -p "${HOME}" "${HOME}/.chrome" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" diff --git a/scripts/termux-auth-widget.sh b/scripts/termux-auth-widget.sh index 94896c5d5..3a152e006 100644 --- a/scripts/termux-auth-widget.sh +++ b/scripts/termux-auth-widget.sh @@ -6,7 +6,7 @@ # It's designed for quick one-tap checking from phone home screen. # Server hostname (via Tailscale or SSH config) -SERVER="${CLAWDBOT_SERVER:-l36}" +SERVER="${MOLTBOT_SERVER:-l36}" # Check auth status termux-toast "Checking Moltbot auth..." @@ -24,7 +24,7 @@ case "$STATUS" in termux-toast "Auth OK (${HOURS}h left)" ;; - CLAUDE_EXPIRING|CLAWDBOT_EXPIRING) + CLAUDE_EXPIRING|MOLTBOT_EXPIRING) termux-vibrate -d 100 # Ask if user wants to re-auth now @@ -51,7 +51,7 @@ case "$STATUS" in esac ;; - CLAUDE_EXPIRED|CLAWDBOT_EXPIRED) + CLAUDE_EXPIRED|MOLTBOT_EXPIRED) termux-vibrate -d 300 CHOICE=$(termux-dialog radio -t "Auth Expired!" -v "Re-auth now,Dismiss") diff --git a/scripts/termux-quick-auth.sh b/scripts/termux-quick-auth.sh index 700e75605..31ecd1f49 100644 --- a/scripts/termux-quick-auth.sh +++ b/scripts/termux-quick-auth.sh @@ -5,7 +5,7 @@ # One-tap: shows status toast # If expired: directly opens auth URL -SERVER="${CLAWDBOT_SERVER:-l36}" +SERVER="${MOLTBOT_SERVER:-l36}" STATUS=$(ssh -o ConnectTimeout=5 "$SERVER" '$HOME/moltbot/scripts/claude-auth-status.sh simple' 2>&1) diff --git a/scripts/test-cleanup-docker.sh b/scripts/test-cleanup-docker.sh index b8f08bf0d..ec0fe732f 100755 --- a/scripts/test-cleanup-docker.sh +++ b/scripts/test-cleanup-docker.sh @@ -2,7 +2,7 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -IMAGE_NAME="${CLAWDBOT_CLEANUP_SMOKE_IMAGE:-moltbot-cleanup-smoke:local}" +IMAGE_NAME="${MOLTBOT_CLEANUP_SMOKE_IMAGE:-moltbot-cleanup-smoke:local}" echo "==> Build image: $IMAGE_NAME" docker build \ diff --git a/scripts/test-force.ts b/scripts/test-force.ts index 93eab4800..c76de620e 100755 --- a/scripts/test-force.ts +++ b/scripts/test-force.ts @@ -27,13 +27,13 @@ function killGatewayListeners(port: number): PortProcess[] { function runTests() { const isolatedLock = - process.env.CLAWDBOT_GATEWAY_LOCK ?? + process.env.MOLTBOT_GATEWAY_LOCK ?? path.join(os.tmpdir(), `moltbot-gateway.lock.test.${Date.now()}`); const result = spawnSync("pnpm", ["vitest", "run"], { stdio: "inherit", env: { ...process.env, - CLAWDBOT_GATEWAY_LOCK: isolatedLock, + MOLTBOT_GATEWAY_LOCK: isolatedLock, }, }); if (result.error) { @@ -45,7 +45,7 @@ function runTests() { function main() { const port = Number.parseInt( - process.env.CLAWDBOT_GATEWAY_PORT ?? `${DEFAULT_PORT}`, + process.env.MOLTBOT_GATEWAY_PORT ?? `${DEFAULT_PORT}`, 10, ); diff --git a/scripts/test-install-sh-docker.sh b/scripts/test-install-sh-docker.sh index 35d252479..45970ebc7 100755 --- a/scripts/test-install-sh-docker.sh +++ b/scripts/test-install-sh-docker.sh @@ -2,11 +2,11 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -SMOKE_IMAGE="${CLAWDBOT_INSTALL_SMOKE_IMAGE:-moltbot-install-smoke:local}" -NONROOT_IMAGE="${CLAWDBOT_INSTALL_NONROOT_IMAGE:-moltbot-install-nonroot:local}" -INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}" -CLI_INSTALL_URL="${CLAWDBOT_INSTALL_CLI_URL:-https://molt.bot/install-cli.sh}" -SKIP_NONROOT="${CLAWDBOT_INSTALL_SMOKE_SKIP_NONROOT:-0}" +SMOKE_IMAGE="${MOLTBOT_INSTALL_SMOKE_IMAGE:-moltbot-install-smoke:local}" +NONROOT_IMAGE="${MOLTBOT_INSTALL_NONROOT_IMAGE:-moltbot-install-nonroot:local}" +INSTALL_URL="${MOLTBOT_INSTALL_URL:-https://molt.bot/install.sh}" +CLI_INSTALL_URL="${MOLTBOT_INSTALL_CLI_URL:-https://molt.bot/install-cli.sh}" +SKIP_NONROOT="${MOLTBOT_INSTALL_SMOKE_SKIP_NONROOT:-0}" LATEST_DIR="$(mktemp -d)" LATEST_FILE="${LATEST_DIR}/latest" @@ -19,11 +19,11 @@ docker build \ echo "==> Run installer smoke test (root): $INSTALL_URL" docker run --rm -t \ -v "${LATEST_DIR}:/out" \ - -e CLAWDBOT_INSTALL_URL="$INSTALL_URL" \ - -e CLAWDBOT_INSTALL_LATEST_OUT="/out/latest" \ - -e CLAWDBOT_INSTALL_SMOKE_PREVIOUS="${CLAWDBOT_INSTALL_SMOKE_PREVIOUS:-}" \ - -e CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS="${CLAWDBOT_INSTALL_SMOKE_SKIP_PREVIOUS:-0}" \ - -e CLAWDBOT_NO_ONBOARD=1 \ + -e MOLTBOT_INSTALL_URL="$INSTALL_URL" \ + -e MOLTBOT_INSTALL_LATEST_OUT="/out/latest" \ + -e MOLTBOT_INSTALL_SMOKE_PREVIOUS="${MOLTBOT_INSTALL_SMOKE_PREVIOUS:-}" \ + -e MOLTBOT_INSTALL_SMOKE_SKIP_PREVIOUS="${MOLTBOT_INSTALL_SMOKE_SKIP_PREVIOUS:-0}" \ + -e MOLTBOT_NO_ONBOARD=1 \ -e DEBIAN_FRONTEND=noninteractive \ "$SMOKE_IMAGE" @@ -33,7 +33,7 @@ if [[ -f "$LATEST_FILE" ]]; then fi if [[ "$SKIP_NONROOT" == "1" ]]; then - echo "==> Skip non-root installer smoke (CLAWDBOT_INSTALL_SMOKE_SKIP_NONROOT=1)" + echo "==> Skip non-root installer smoke (MOLTBOT_INSTALL_SMOKE_SKIP_NONROOT=1)" else echo "==> Build non-root image: $NONROOT_IMAGE" docker build \ @@ -43,15 +43,15 @@ else echo "==> Run installer non-root test: $INSTALL_URL" docker run --rm -t \ - -e CLAWDBOT_INSTALL_URL="$INSTALL_URL" \ - -e CLAWDBOT_INSTALL_EXPECT_VERSION="$LATEST_VERSION" \ - -e CLAWDBOT_NO_ONBOARD=1 \ + -e MOLTBOT_INSTALL_URL="$INSTALL_URL" \ + -e MOLTBOT_INSTALL_EXPECT_VERSION="$LATEST_VERSION" \ + -e MOLTBOT_NO_ONBOARD=1 \ -e DEBIAN_FRONTEND=noninteractive \ "$NONROOT_IMAGE" fi -if [[ "${CLAWDBOT_INSTALL_SMOKE_SKIP_CLI:-0}" == "1" ]]; then - echo "==> Skip CLI installer smoke (CLAWDBOT_INSTALL_SMOKE_SKIP_CLI=1)" +if [[ "${MOLTBOT_INSTALL_SMOKE_SKIP_CLI:-0}" == "1" ]]; then + echo "==> Skip CLI installer smoke (MOLTBOT_INSTALL_SMOKE_SKIP_CLI=1)" exit 0 fi @@ -63,8 +63,8 @@ fi echo "==> Run CLI installer non-root test (same image)" docker run --rm -t \ --entrypoint /bin/bash \ - -e CLAWDBOT_INSTALL_URL="$INSTALL_URL" \ - -e CLAWDBOT_INSTALL_CLI_URL="$CLI_INSTALL_URL" \ - -e CLAWDBOT_NO_ONBOARD=1 \ + -e MOLTBOT_INSTALL_URL="$INSTALL_URL" \ + -e MOLTBOT_INSTALL_CLI_URL="$CLI_INSTALL_URL" \ + -e MOLTBOT_NO_ONBOARD=1 \ -e DEBIAN_FRONTEND=noninteractive \ "$NONROOT_IMAGE" -lc "curl -fsSL \"$CLI_INSTALL_URL\" | bash -s -- --set-npm-prefix --no-onboard" diff --git a/scripts/test-install-sh-e2e-docker.sh b/scripts/test-install-sh-e2e-docker.sh index b13666536..6b1e57d95 100755 --- a/scripts/test-install-sh-e2e-docker.sh +++ b/scripts/test-install-sh-e2e-docker.sh @@ -2,13 +2,13 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -IMAGE_NAME="${CLAWDBOT_INSTALL_E2E_IMAGE:-moltbot-install-e2e:local}" -INSTALL_URL="${CLAWDBOT_INSTALL_URL:-https://molt.bot/install.sh}" +IMAGE_NAME="${MOLTBOT_INSTALL_E2E_IMAGE:-moltbot-install-e2e:local}" +INSTALL_URL="${MOLTBOT_INSTALL_URL:-https://molt.bot/install.sh}" OPENAI_API_KEY="${OPENAI_API_KEY:-}" ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY:-}" ANTHROPIC_API_TOKEN="${ANTHROPIC_API_TOKEN:-}" -CLAWDBOT_E2E_MODELS="${CLAWDBOT_E2E_MODELS:-}" +MOLTBOT_E2E_MODELS="${MOLTBOT_E2E_MODELS:-}" echo "==> Build image: $IMAGE_NAME" docker build \ @@ -18,11 +18,11 @@ docker build \ echo "==> Run E2E installer test" docker run --rm \ - -e CLAWDBOT_INSTALL_URL="$INSTALL_URL" \ - -e CLAWDBOT_INSTALL_TAG="${CLAWDBOT_INSTALL_TAG:-latest}" \ - -e CLAWDBOT_E2E_MODELS="$CLAWDBOT_E2E_MODELS" \ - -e CLAWDBOT_INSTALL_E2E_PREVIOUS="${CLAWDBOT_INSTALL_E2E_PREVIOUS:-}" \ - -e CLAWDBOT_INSTALL_E2E_SKIP_PREVIOUS="${CLAWDBOT_INSTALL_E2E_SKIP_PREVIOUS:-0}" \ + -e MOLTBOT_INSTALL_URL="$INSTALL_URL" \ + -e MOLTBOT_INSTALL_TAG="${MOLTBOT_INSTALL_TAG:-latest}" \ + -e MOLTBOT_E2E_MODELS="$MOLTBOT_E2E_MODELS" \ + -e MOLTBOT_INSTALL_E2E_PREVIOUS="${MOLTBOT_INSTALL_E2E_PREVIOUS:-}" \ + -e MOLTBOT_INSTALL_E2E_SKIP_PREVIOUS="${MOLTBOT_INSTALL_E2E_SKIP_PREVIOUS:-0}" \ -e OPENAI_API_KEY="$OPENAI_API_KEY" \ -e ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY" \ -e ANTHROPIC_API_TOKEN="$ANTHROPIC_API_TOKEN" \ diff --git a/scripts/test-live-gateway-models-docker.sh b/scripts/test-live-gateway-models-docker.sh index 603abe2c1..c4702ce88 100755 --- a/scripts/test-live-gateway-models-docker.sh +++ b/scripts/test-live-gateway-models-docker.sh @@ -2,10 +2,10 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -IMAGE_NAME="${CLAWDBOT_IMAGE:-moltbot:local}" -CONFIG_DIR="${CLAWDBOT_CONFIG_DIR:-$HOME/.clawdbot}" -WORKSPACE_DIR="${CLAWDBOT_WORKSPACE_DIR:-$HOME/clawd}" -PROFILE_FILE="${CLAWDBOT_PROFILE_FILE:-$HOME/.profile}" +IMAGE_NAME="${MOLTBOT_IMAGE:-moltbot:local}" +CONFIG_DIR="${MOLTBOT_CONFIG_DIR:-$HOME/.moltbot}" +WORKSPACE_DIR="${MOLTBOT_WORKSPACE_DIR:-$HOME/clawd}" +PROFILE_FILE="${MOLTBOT_PROFILE_FILE:-$HOME/.profile}" PROFILE_MOUNT=() if [[ -f "$PROFILE_FILE" ]]; then @@ -21,11 +21,11 @@ docker run --rm -t \ -e COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \ -e HOME=/home/node \ -e NODE_OPTIONS=--disable-warning=ExperimentalWarning \ - -e CLAWDBOT_LIVE_TEST=1 \ - -e CLAWDBOT_LIVE_GATEWAY_MODELS="${CLAWDBOT_LIVE_GATEWAY_MODELS:-all}" \ - -e CLAWDBOT_LIVE_GATEWAY_PROVIDERS="${CLAWDBOT_LIVE_GATEWAY_PROVIDERS:-}" \ - -e CLAWDBOT_LIVE_GATEWAY_MODEL_TIMEOUT_MS="${CLAWDBOT_LIVE_GATEWAY_MODEL_TIMEOUT_MS:-}" \ - -v "$CONFIG_DIR":/home/node/.clawdbot \ + -e MOLTBOT_LIVE_TEST=1 \ + -e MOLTBOT_LIVE_GATEWAY_MODELS="${MOLTBOT_LIVE_GATEWAY_MODELS:-all}" \ + -e MOLTBOT_LIVE_GATEWAY_PROVIDERS="${MOLTBOT_LIVE_GATEWAY_PROVIDERS:-}" \ + -e MOLTBOT_LIVE_GATEWAY_MODEL_TIMEOUT_MS="${MOLTBOT_LIVE_GATEWAY_MODEL_TIMEOUT_MS:-}" \ + -v "$CONFIG_DIR":/home/node/.moltbot \ -v "$WORKSPACE_DIR":/home/node/clawd \ "${PROFILE_MOUNT[@]}" \ "$IMAGE_NAME" \ diff --git a/scripts/test-live-models-docker.sh b/scripts/test-live-models-docker.sh index 9dbee9eae..5499a6353 100755 --- a/scripts/test-live-models-docker.sh +++ b/scripts/test-live-models-docker.sh @@ -2,10 +2,10 @@ set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -IMAGE_NAME="${CLAWDBOT_IMAGE:-moltbot:local}" -CONFIG_DIR="${CLAWDBOT_CONFIG_DIR:-$HOME/.clawdbot}" -WORKSPACE_DIR="${CLAWDBOT_WORKSPACE_DIR:-$HOME/clawd}" -PROFILE_FILE="${CLAWDBOT_PROFILE_FILE:-$HOME/.profile}" +IMAGE_NAME="${MOLTBOT_IMAGE:-moltbot:local}" +CONFIG_DIR="${MOLTBOT_CONFIG_DIR:-$HOME/.moltbot}" +WORKSPACE_DIR="${MOLTBOT_WORKSPACE_DIR:-$HOME/clawd}" +PROFILE_FILE="${MOLTBOT_PROFILE_FILE:-$HOME/.profile}" PROFILE_MOUNT=() if [[ -f "$PROFILE_FILE" ]]; then @@ -21,12 +21,12 @@ docker run --rm -t \ -e COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \ -e HOME=/home/node \ -e NODE_OPTIONS=--disable-warning=ExperimentalWarning \ - -e CLAWDBOT_LIVE_TEST=1 \ - -e CLAWDBOT_LIVE_MODELS="${CLAWDBOT_LIVE_MODELS:-all}" \ - -e CLAWDBOT_LIVE_PROVIDERS="${CLAWDBOT_LIVE_PROVIDERS:-}" \ - -e CLAWDBOT_LIVE_MODEL_TIMEOUT_MS="${CLAWDBOT_LIVE_MODEL_TIMEOUT_MS:-}" \ - -e CLAWDBOT_LIVE_REQUIRE_PROFILE_KEYS="${CLAWDBOT_LIVE_REQUIRE_PROFILE_KEYS:-}" \ - -v "$CONFIG_DIR":/home/node/.clawdbot \ + -e MOLTBOT_LIVE_TEST=1 \ + -e MOLTBOT_LIVE_MODELS="${MOLTBOT_LIVE_MODELS:-all}" \ + -e MOLTBOT_LIVE_PROVIDERS="${MOLTBOT_LIVE_PROVIDERS:-}" \ + -e MOLTBOT_LIVE_MODEL_TIMEOUT_MS="${MOLTBOT_LIVE_MODEL_TIMEOUT_MS:-}" \ + -e MOLTBOT_LIVE_REQUIRE_PROFILE_KEYS="${MOLTBOT_LIVE_REQUIRE_PROFILE_KEYS:-}" \ + -v "$CONFIG_DIR":/home/node/.moltbot \ -v "$WORKSPACE_DIR":/home/node/clawd \ "${PROFILE_MOUNT[@]}" \ "$IMAGE_NAME" \ diff --git a/scripts/zai-fallback-repro.ts b/scripts/zai-fallback-repro.ts index 0e1bb4265..eddd7e898 100644 --- a/scripts/zai-fallback-repro.ts +++ b/scripts/zai-fallback-repro.ts @@ -98,12 +98,12 @@ async function main() { await fs.writeFile(configPath, JSON.stringify(config, null, 2), "utf8"); const sessionId = - process.env.CLAWDBOT_ZAI_FALLBACK_SESSION_ID ?? randomUUID(); + process.env.MOLTBOT_ZAI_FALLBACK_SESSION_ID ?? randomUUID(); const baseEnv: NodeJS.ProcessEnv = { ...process.env, - CLAWDBOT_CONFIG_PATH: configPath, - CLAWDBOT_STATE_DIR: stateDir, + MOLTBOT_CONFIG_PATH: configPath, + MOLTBOT_STATE_DIR: stateDir, ZAI_API_KEY: zaiKey, Z_AI_API_KEY: "", }; diff --git a/src/acp/server.ts b/src/acp/server.ts index 97682580d..86aa4d22a 100644 --- a/src/acp/server.ts +++ b/src/acp/server.ts @@ -27,12 +27,12 @@ export function serveAcpGateway(opts: AcpServerOptions = {}): void { const token = opts.gatewayToken ?? (isRemoteMode ? remote?.token?.trim() : undefined) ?? - process.env.CLAWDBOT_GATEWAY_TOKEN ?? + process.env.MOLTBOT_GATEWAY_TOKEN ?? auth.token; const password = opts.gatewayPassword ?? (isRemoteMode ? remote?.password?.trim() : undefined) ?? - process.env.CLAWDBOT_GATEWAY_PASSWORD ?? + process.env.MOLTBOT_GATEWAY_PASSWORD ?? auth.password; let agent: AcpGatewayAgent | null = null; diff --git a/src/agents/agent-paths.test.ts b/src/agents/agent-paths.test.ts index a1b6fb75f..dd694688d 100644 --- a/src/agents/agent-paths.test.ts +++ b/src/agents/agent-paths.test.ts @@ -7,8 +7,8 @@ import { afterEach, describe, expect, it } from "vitest"; import { resolveMoltbotAgentDir } from "./agent-paths.js"; describe("resolveMoltbotAgentDir", () => { - const previousStateDir = process.env.CLAWDBOT_STATE_DIR; - const previousAgentDir = process.env.CLAWDBOT_AGENT_DIR; + const previousStateDir = process.env.MOLTBOT_STATE_DIR; + const previousAgentDir = process.env.MOLTBOT_AGENT_DIR; const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR; let tempStateDir: string | null = null; @@ -18,14 +18,14 @@ describe("resolveMoltbotAgentDir", () => { tempStateDir = null; } if (previousStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = previousStateDir; + process.env.MOLTBOT_STATE_DIR = previousStateDir; } if (previousAgentDir === undefined) { - delete process.env.CLAWDBOT_AGENT_DIR; + delete process.env.MOLTBOT_AGENT_DIR; } else { - process.env.CLAWDBOT_AGENT_DIR = previousAgentDir; + process.env.MOLTBOT_AGENT_DIR = previousAgentDir; } if (previousPiAgentDir === undefined) { delete process.env.PI_CODING_AGENT_DIR; @@ -36,8 +36,8 @@ describe("resolveMoltbotAgentDir", () => { it("defaults to the multi-agent path when no overrides are set", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-agent-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; - delete process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempStateDir; + delete process.env.MOLTBOT_AGENT_DIR; delete process.env.PI_CODING_AGENT_DIR; const resolved = resolveMoltbotAgentDir(); @@ -45,10 +45,10 @@ describe("resolveMoltbotAgentDir", () => { expect(resolved).toBe(path.join(tempStateDir, "agents", "main", "agent")); }); - it("honors CLAWDBOT_AGENT_DIR overrides", async () => { + it("honors MOLTBOT_AGENT_DIR overrides", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-agent-")); const override = path.join(tempStateDir, "agent"); - process.env.CLAWDBOT_AGENT_DIR = override; + process.env.MOLTBOT_AGENT_DIR = override; delete process.env.PI_CODING_AGENT_DIR; const resolved = resolveMoltbotAgentDir(); diff --git a/src/agents/agent-paths.ts b/src/agents/agent-paths.ts index a1d8aa91f..b5700eaab 100644 --- a/src/agents/agent-paths.ts +++ b/src/agents/agent-paths.ts @@ -5,8 +5,7 @@ import { DEFAULT_AGENT_ID } from "../routing/session-key.js"; import { resolveUserPath } from "../utils.js"; export function resolveMoltbotAgentDir(): string { - const override = - process.env.CLAWDBOT_AGENT_DIR?.trim() || process.env.PI_CODING_AGENT_DIR?.trim(); + const override = process.env.MOLTBOT_AGENT_DIR?.trim() || process.env.PI_CODING_AGENT_DIR?.trim(); if (override) return resolveUserPath(override); const defaultAgentDir = path.join(resolveStateDir(), "agents", DEFAULT_AGENT_ID, "agent"); return resolveUserPath(defaultAgentDir); @@ -14,7 +13,7 @@ export function resolveMoltbotAgentDir(): string { export function ensureMoltbotAgentEnv(): string { const dir = resolveMoltbotAgentDir(); - if (!process.env.CLAWDBOT_AGENT_DIR) process.env.CLAWDBOT_AGENT_DIR = dir; + if (!process.env.MOLTBOT_AGENT_DIR) process.env.MOLTBOT_AGENT_DIR = dir; if (!process.env.PI_CODING_AGENT_DIR) process.env.PI_CODING_AGENT_DIR = dir; return dir; } diff --git a/src/agents/agent-scope.test.ts b/src/agents/agent-scope.test.ts index 614d5548f..26dfdc6a8 100644 --- a/src/agents/agent-scope.test.ts +++ b/src/agents/agent-scope.test.ts @@ -31,7 +31,7 @@ describe("resolveAgentConfig", () => { id: "main", name: "Main Agent", workspace: "~/clawd", - agentDir: "~/.clawdbot/agents/main", + agentDir: "~/.moltbot/agents/main", model: "anthropic/claude-opus-4", }, ], @@ -41,7 +41,7 @@ describe("resolveAgentConfig", () => { expect(result).toEqual({ name: "Main Agent", workspace: "~/clawd", - agentDir: "~/.clawdbot/agents/main", + agentDir: "~/.moltbot/agents/main", model: "anthropic/claude-opus-4", identity: undefined, groupChat: undefined, diff --git a/src/agents/anthropic-payload-log.ts b/src/agents/anthropic-payload-log.ts index 1023f9f45..82a3dd0f5 100644 --- a/src/agents/anthropic-payload-log.ts +++ b/src/agents/anthropic-payload-log.ts @@ -42,8 +42,8 @@ const writers = new Map(); const log = createSubsystemLogger("agent/anthropic-payload"); function resolvePayloadLogConfig(env: NodeJS.ProcessEnv): PayloadLogConfig { - const enabled = parseBooleanValue(env.CLAWDBOT_ANTHROPIC_PAYLOAD_LOG) ?? false; - const fileOverride = env.CLAWDBOT_ANTHROPIC_PAYLOAD_LOG_FILE?.trim(); + const enabled = parseBooleanValue(env.MOLTBOT_ANTHROPIC_PAYLOAD_LOG) ?? false; + const fileOverride = env.MOLTBOT_ANTHROPIC_PAYLOAD_LOG_FILE?.trim(); const filePath = fileOverride ? resolveUserPath(fileOverride) : path.join(resolveStateDir(env), "logs", "anthropic-payload.jsonl"); diff --git a/src/agents/anthropic.setup-token.live.test.ts b/src/agents/anthropic.setup-token.live.test.ts index 9d487bab0..2feda4a06 100644 --- a/src/agents/anthropic.setup-token.live.test.ts +++ b/src/agents/anthropic.setup-token.live.test.ts @@ -22,11 +22,11 @@ import { getApiKeyForModel, requireApiKey } from "./model-auth.js"; import { normalizeProviderId, parseModelRef } from "./model-selection.js"; import { ensureMoltbotModelsJson } from "./models-config.js"; -const LIVE = isTruthyEnvValue(process.env.LIVE) || isTruthyEnvValue(process.env.CLAWDBOT_LIVE_TEST); -const SETUP_TOKEN_RAW = process.env.CLAWDBOT_LIVE_SETUP_TOKEN?.trim() ?? ""; -const SETUP_TOKEN_VALUE = process.env.CLAWDBOT_LIVE_SETUP_TOKEN_VALUE?.trim() ?? ""; -const SETUP_TOKEN_PROFILE = process.env.CLAWDBOT_LIVE_SETUP_TOKEN_PROFILE?.trim() ?? ""; -const SETUP_TOKEN_MODEL = process.env.CLAWDBOT_LIVE_SETUP_TOKEN_MODEL?.trim() ?? ""; +const LIVE = isTruthyEnvValue(process.env.LIVE) || isTruthyEnvValue(process.env.MOLTBOT_LIVE_TEST); +const SETUP_TOKEN_RAW = process.env.MOLTBOT_LIVE_SETUP_TOKEN?.trim() ?? ""; +const SETUP_TOKEN_VALUE = process.env.MOLTBOT_LIVE_SETUP_TOKEN_VALUE?.trim() ?? ""; +const SETUP_TOKEN_PROFILE = process.env.MOLTBOT_LIVE_SETUP_TOKEN_PROFILE?.trim() ?? ""; +const SETUP_TOKEN_MODEL = process.env.MOLTBOT_LIVE_SETUP_TOKEN_MODEL?.trim() ?? ""; const ENABLED = LIVE && Boolean(SETUP_TOKEN_RAW || SETUP_TOKEN_VALUE || SETUP_TOKEN_PROFILE); const describeLive = ENABLED ? describe : describe.skip; @@ -108,13 +108,13 @@ async function resolveTokenSource(): Promise { if (SETUP_TOKEN_RAW && SETUP_TOKEN_RAW !== "1" && SETUP_TOKEN_RAW !== "auto") { throw new Error( - "CLAWDBOT_LIVE_SETUP_TOKEN did not look like a setup-token. Use CLAWDBOT_LIVE_SETUP_TOKEN_VALUE for raw tokens.", + "MOLTBOT_LIVE_SETUP_TOKEN did not look like a setup-token. Use MOLTBOT_LIVE_SETUP_TOKEN_VALUE for raw tokens.", ); } if (candidates.length === 0) { throw new Error( - "No Anthropics setup-token profiles found. Set CLAWDBOT_LIVE_SETUP_TOKEN_VALUE or CLAWDBOT_LIVE_SETUP_TOKEN_PROFILE.", + "No Anthropics setup-token profiles found. Set MOLTBOT_LIVE_SETUP_TOKEN_VALUE or MOLTBOT_LIVE_SETUP_TOKEN_PROFILE.", ); } return { agentDir, profileId: pickSetupTokenProfile(candidates) }; diff --git a/src/agents/auth-profiles.chutes.test.ts b/src/agents/auth-profiles.chutes.test.ts index 11b6d6b77..e3a33d15e 100644 --- a/src/agents/auth-profiles.chutes.test.ts +++ b/src/agents/auth-profiles.chutes.test.ts @@ -11,8 +11,8 @@ import { import { CHUTES_TOKEN_ENDPOINT, type ChutesStoredOAuth } from "./chutes-oauth.js"; describe("auth-profiles (chutes)", () => { - const previousStateDir = process.env.CLAWDBOT_STATE_DIR; - const previousAgentDir = process.env.CLAWDBOT_AGENT_DIR; + const previousStateDir = process.env.MOLTBOT_STATE_DIR; + const previousAgentDir = process.env.MOLTBOT_AGENT_DIR; const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR; const previousChutesClientId = process.env.CHUTES_CLIENT_ID; let tempDir: string | null = null; @@ -23,10 +23,10 @@ describe("auth-profiles (chutes)", () => { await fs.rm(tempDir, { recursive: true, force: true }); tempDir = null; } - if (previousStateDir === undefined) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = previousStateDir; - if (previousAgentDir === undefined) delete process.env.CLAWDBOT_AGENT_DIR; - else process.env.CLAWDBOT_AGENT_DIR = previousAgentDir; + if (previousStateDir === undefined) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = previousStateDir; + if (previousAgentDir === undefined) delete process.env.MOLTBOT_AGENT_DIR; + else process.env.MOLTBOT_AGENT_DIR = previousAgentDir; if (previousPiAgentDir === undefined) delete process.env.PI_CODING_AGENT_DIR; else process.env.PI_CODING_AGENT_DIR = previousPiAgentDir; if (previousChutesClientId === undefined) delete process.env.CHUTES_CLIENT_ID; @@ -35,9 +35,9 @@ describe("auth-profiles (chutes)", () => { it("refreshes expired Chutes OAuth credentials", async () => { tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-chutes-")); - process.env.CLAWDBOT_STATE_DIR = tempDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempDir, "agents", "main", "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempDir, "agents", "main", "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; const authProfilePath = path.join(tempDir, "agents", "main", "agent", "auth-profiles.json"); await fs.mkdir(path.dirname(authProfilePath), { recursive: true }); diff --git a/src/agents/auth-profiles.ensureauthprofilestore.test.ts b/src/agents/auth-profiles.ensureauthprofilestore.test.ts index ffb1a38b2..e9cb81afc 100644 --- a/src/agents/auth-profiles.ensureauthprofilestore.test.ts +++ b/src/agents/auth-profiles.ensureauthprofilestore.test.ts @@ -49,7 +49,7 @@ describe("ensureAuthProfileStore", () => { it("merges main auth profiles into agent store and keeps agent overrides", () => { const root = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-auth-merge-")); - const previousAgentDir = process.env.CLAWDBOT_AGENT_DIR; + const previousAgentDir = process.env.MOLTBOT_AGENT_DIR; const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR; try { const mainDir = path.join(root, "main-agent"); @@ -57,7 +57,7 @@ describe("ensureAuthProfileStore", () => { fs.mkdirSync(mainDir, { recursive: true }); fs.mkdirSync(agentDir, { recursive: true }); - process.env.CLAWDBOT_AGENT_DIR = mainDir; + process.env.MOLTBOT_AGENT_DIR = mainDir; process.env.PI_CODING_AGENT_DIR = mainDir; const mainStore = { @@ -110,9 +110,9 @@ describe("ensureAuthProfileStore", () => { }); } finally { if (previousAgentDir === undefined) { - delete process.env.CLAWDBOT_AGENT_DIR; + delete process.env.MOLTBOT_AGENT_DIR; } else { - process.env.CLAWDBOT_AGENT_DIR = previousAgentDir; + process.env.MOLTBOT_AGENT_DIR = previousAgentDir; } if (previousPiAgentDir === undefined) { delete process.env.PI_CODING_AGENT_DIR; diff --git a/src/agents/auth-profiles/oauth.fallback-to-main-agent.test.ts b/src/agents/auth-profiles/oauth.fallback-to-main-agent.test.ts index 119f36ce6..8cc8ed919 100644 --- a/src/agents/auth-profiles/oauth.fallback-to-main-agent.test.ts +++ b/src/agents/auth-profiles/oauth.fallback-to-main-agent.test.ts @@ -7,8 +7,8 @@ import { ensureAuthProfileStore } from "./store.js"; import type { AuthProfileStore } from "./types.js"; describe("resolveApiKeyForProfile fallback to main agent", () => { - const previousStateDir = process.env.CLAWDBOT_STATE_DIR; - const previousAgentDir = process.env.CLAWDBOT_AGENT_DIR; + const previousStateDir = process.env.MOLTBOT_STATE_DIR; + const previousAgentDir = process.env.MOLTBOT_AGENT_DIR; const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR; let tmpDir: string; let mainAgentDir: string; @@ -22,8 +22,8 @@ describe("resolveApiKeyForProfile fallback to main agent", () => { await fs.mkdir(secondaryAgentDir, { recursive: true }); // Set environment variables so resolveMoltbotAgentDir() returns mainAgentDir - process.env.CLAWDBOT_STATE_DIR = tmpDir; - process.env.CLAWDBOT_AGENT_DIR = mainAgentDir; + process.env.MOLTBOT_STATE_DIR = tmpDir; + process.env.MOLTBOT_AGENT_DIR = mainAgentDir; process.env.PI_CODING_AGENT_DIR = mainAgentDir; }); @@ -31,10 +31,10 @@ describe("resolveApiKeyForProfile fallback to main agent", () => { vi.unstubAllGlobals(); // Restore original environment - if (previousStateDir === undefined) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = previousStateDir; - if (previousAgentDir === undefined) delete process.env.CLAWDBOT_AGENT_DIR; - else process.env.CLAWDBOT_AGENT_DIR = previousAgentDir; + if (previousStateDir === undefined) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = previousStateDir; + if (previousAgentDir === undefined) delete process.env.MOLTBOT_AGENT_DIR; + else process.env.MOLTBOT_AGENT_DIR = previousAgentDir; if (previousPiAgentDir === undefined) delete process.env.PI_CODING_AGENT_DIR; else process.env.PI_CODING_AGENT_DIR = previousPiAgentDir; diff --git a/src/agents/auth-profiles/session-override.test.ts b/src/agents/auth-profiles/session-override.test.ts index f1b0c0593..f1fe1b0c4 100644 --- a/src/agents/auth-profiles/session-override.test.ts +++ b/src/agents/auth-profiles/session-override.test.ts @@ -24,8 +24,8 @@ async function writeAuthStore(agentDir: string) { describe("resolveSessionAuthProfileOverride", () => { it("keeps user override when provider alias differs", async () => { const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-auth-")); - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; - process.env.CLAWDBOT_STATE_DIR = tmpDir; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; + process.env.MOLTBOT_STATE_DIR = tmpDir; try { const agentDir = path.join(tmpDir, "agent"); await fs.mkdir(agentDir, { recursive: true }); @@ -53,8 +53,8 @@ describe("resolveSessionAuthProfileOverride", () => { expect(resolved).toBe("zai:work"); expect(sessionEntry.authProfileOverride).toBe("zai:work"); } finally { - if (prevStateDir === undefined) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = prevStateDir; + if (prevStateDir === undefined) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = prevStateDir; await fs.rm(tmpDir, { recursive: true, force: true }); } }); diff --git a/src/agents/bash-tools.exec.ts b/src/agents/bash-tools.exec.ts index b9de81872..512a3b63a 100644 --- a/src/agents/bash-tools.exec.ts +++ b/src/agents/bash-tools.exec.ts @@ -64,7 +64,7 @@ const DEFAULT_MAX_OUTPUT = clampNumber( 200_000, ); const DEFAULT_PENDING_MAX_OUTPUT = clampNumber( - readEnvInt("CLAWDBOT_BASH_PENDING_MAX_OUTPUT_CHARS"), + readEnvInt("MOLTBOT_BASH_PENDING_MAX_OUTPUT_CHARS"), 200_000, 1_000, 200_000, diff --git a/src/agents/bash-tools.shared.ts b/src/agents/bash-tools.shared.ts index aa4e5d000..d2387726e 100644 --- a/src/agents/bash-tools.shared.ts +++ b/src/agents/bash-tools.shared.ts @@ -63,14 +63,14 @@ export function buildDockerExecArgs(params: { const hasCustomPath = typeof params.env.PATH === "string" && params.env.PATH.length > 0; if (hasCustomPath) { // Avoid interpolating PATH into the shell command; pass it via env instead. - args.push("-e", `CLAWDBOT_PREPEND_PATH=${params.env.PATH}`); + args.push("-e", `MOLTBOT_PREPEND_PATH=${params.env.PATH}`); } // Login shell (-l) sources /etc/profile which resets PATH to a minimal set, // overriding both Docker ENV and -e PATH=... environment variables. // Prepend custom PATH after profile sourcing to ensure custom tools are accessible // while preserving system paths that /etc/profile may have added. const pathExport = hasCustomPath - ? 'export PATH="${CLAWDBOT_PREPEND_PATH}:$PATH"; unset CLAWDBOT_PREPEND_PATH; ' + ? 'export PATH="${MOLTBOT_PREPEND_PATH}:$PATH"; unset MOLTBOT_PREPEND_PATH; ' : ""; args.push(params.containerName, "sh", "-lc", `${pathExport}${params.command}`); return args; diff --git a/src/agents/bash-tools.test.ts b/src/agents/bash-tools.test.ts index 6990d3a76..9178d22c9 100644 --- a/src/agents/bash-tools.test.ts +++ b/src/agents/bash-tools.test.ts @@ -318,11 +318,11 @@ describe("buildDockerExecArgs", () => { }); const commandArg = args[args.length - 1]; - expect(args).toContain("CLAWDBOT_PREPEND_PATH=/custom/bin:/usr/local/bin:/usr/bin"); - expect(commandArg).toContain('export PATH="${CLAWDBOT_PREPEND_PATH}:$PATH"'); + expect(args).toContain("MOLTBOT_PREPEND_PATH=/custom/bin:/usr/local/bin:/usr/bin"); + expect(commandArg).toContain('export PATH="${MOLTBOT_PREPEND_PATH}:$PATH"'); expect(commandArg).toContain("echo hello"); expect(commandArg).toBe( - 'export PATH="${CLAWDBOT_PREPEND_PATH}:$PATH"; unset CLAWDBOT_PREPEND_PATH; echo hello', + 'export PATH="${MOLTBOT_PREPEND_PATH}:$PATH"; unset MOLTBOT_PREPEND_PATH; echo hello', ); }); @@ -339,9 +339,9 @@ describe("buildDockerExecArgs", () => { }); const commandArg = args[args.length - 1]; - expect(args).toContain(`CLAWDBOT_PREPEND_PATH=${injectedPath}`); + expect(args).toContain(`MOLTBOT_PREPEND_PATH=${injectedPath}`); expect(commandArg).not.toContain(injectedPath); - expect(commandArg).toContain("CLAWDBOT_PREPEND_PATH"); + expect(commandArg).toContain("MOLTBOT_PREPEND_PATH"); }); it("does not add PATH export when PATH is not in env", () => { diff --git a/src/agents/cache-trace.test.ts b/src/agents/cache-trace.test.ts index add6d695d..76de2bf25 100644 --- a/src/agents/cache-trace.test.ts +++ b/src/agents/cache-trace.test.ts @@ -21,7 +21,7 @@ describe("createCacheTrace", () => { diagnostics: { cacheTrace: { enabled: true, - filePath: "~/.clawdbot/logs/cache-trace.jsonl", + filePath: "~/.moltbot/logs/cache-trace.jsonl", }, }, }, @@ -33,7 +33,7 @@ describe("createCacheTrace", () => { }); expect(trace).not.toBeNull(); - expect(trace?.filePath).toBe(resolveUserPath("~/.clawdbot/logs/cache-trace.jsonl")); + expect(trace?.filePath).toBe(resolveUserPath("~/.moltbot/logs/cache-trace.jsonl")); trace?.recordStage("session:loaded", { messages: [], @@ -80,7 +80,7 @@ describe("createCacheTrace", () => { }, }, env: { - CLAWDBOT_CACHE_TRACE: "0", + MOLTBOT_CACHE_TRACE: "0", }, writer: { filePath: "memory", diff --git a/src/agents/cache-trace.ts b/src/agents/cache-trace.ts index 5de1f474f..d7d39fb55 100644 --- a/src/agents/cache-trace.ts +++ b/src/agents/cache-trace.ts @@ -82,17 +82,17 @@ const writers = new Map(); function resolveCacheTraceConfig(params: CacheTraceInit): CacheTraceConfig { const env = params.env ?? process.env; const config = params.cfg?.diagnostics?.cacheTrace; - const envEnabled = parseBooleanValue(env.CLAWDBOT_CACHE_TRACE); + const envEnabled = parseBooleanValue(env.MOLTBOT_CACHE_TRACE); const enabled = envEnabled ?? config?.enabled ?? false; - const fileOverride = config?.filePath?.trim() || env.CLAWDBOT_CACHE_TRACE_FILE?.trim(); + const fileOverride = config?.filePath?.trim() || env.MOLTBOT_CACHE_TRACE_FILE?.trim(); const filePath = fileOverride ? resolveUserPath(fileOverride) : path.join(resolveStateDir(env), "logs", "cache-trace.jsonl"); const includeMessages = - parseBooleanValue(env.CLAWDBOT_CACHE_TRACE_MESSAGES) ?? config?.includeMessages; - const includePrompt = parseBooleanValue(env.CLAWDBOT_CACHE_TRACE_PROMPT) ?? config?.includePrompt; - const includeSystem = parseBooleanValue(env.CLAWDBOT_CACHE_TRACE_SYSTEM) ?? config?.includeSystem; + parseBooleanValue(env.MOLTBOT_CACHE_TRACE_MESSAGES) ?? config?.includeMessages; + const includePrompt = parseBooleanValue(env.MOLTBOT_CACHE_TRACE_PROMPT) ?? config?.includePrompt; + const includeSystem = parseBooleanValue(env.MOLTBOT_CACHE_TRACE_SYSTEM) ?? config?.includeSystem; return { enabled, diff --git a/src/agents/clawdbot-gateway-tool.test.ts b/src/agents/clawdbot-gateway-tool.test.ts index 32e4d3d3f..94f6c660f 100644 --- a/src/agents/clawdbot-gateway-tool.test.ts +++ b/src/agents/clawdbot-gateway-tool.test.ts @@ -19,11 +19,11 @@ describe("gateway tool", () => { it("schedules SIGUSR1 restart", async () => { vi.useFakeTimers(); const kill = vi.spyOn(process, "kill").mockImplementation(() => true); - const previousStateDir = process.env.CLAWDBOT_STATE_DIR; - const previousProfile = process.env.CLAWDBOT_PROFILE; + const previousStateDir = process.env.MOLTBOT_STATE_DIR; + const previousProfile = process.env.MOLTBOT_PROFILE; const stateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-test-")); - process.env.CLAWDBOT_STATE_DIR = stateDir; - process.env.CLAWDBOT_PROFILE = "isolated"; + process.env.MOLTBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_PROFILE = "isolated"; try { const tool = createMoltbotTools({ @@ -60,14 +60,14 @@ describe("gateway tool", () => { kill.mockRestore(); vi.useRealTimers(); if (previousStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = previousStateDir; + process.env.MOLTBOT_STATE_DIR = previousStateDir; } if (previousProfile === undefined) { - delete process.env.CLAWDBOT_PROFILE; + delete process.env.MOLTBOT_PROFILE; } else { - process.env.CLAWDBOT_PROFILE = previousProfile; + process.env.MOLTBOT_PROFILE = previousProfile; } } }); diff --git a/src/agents/cli-runner.ts b/src/agents/cli-runner.ts index c998a9e6f..804251c0c 100644 --- a/src/agents/cli-runner.ts +++ b/src/agents/cli-runner.ts @@ -167,7 +167,7 @@ export async function runCliAgent(params: { log.info( `cli exec: provider=${params.provider} model=${normalizedModel} promptChars=${params.prompt.length}`, ); - const logOutputText = isTruthyEnvValue(process.env.CLAWDBOT_CLAUDE_CLI_LOG_OUTPUT); + const logOutputText = isTruthyEnvValue(process.env.MOLTBOT_CLAUDE_CLI_LOG_OUTPUT); if (logOutputText) { const logArgs: string[] = []; for (let i = 0; i < args.length; i += 1) { diff --git a/src/agents/live-auth-keys.ts b/src/agents/live-auth-keys.ts index dccb3bbab..b9cc7623a 100644 --- a/src/agents/live-auth-keys.ts +++ b/src/agents/live-auth-keys.ts @@ -20,10 +20,10 @@ function collectEnvPrefixedKeys(prefix: string): string[] { } export function collectAnthropicApiKeys(): string[] { - const forcedSingle = process.env.CLAWDBOT_LIVE_ANTHROPIC_KEY?.trim(); + const forcedSingle = process.env.MOLTBOT_LIVE_ANTHROPIC_KEY?.trim(); if (forcedSingle) return [forcedSingle]; - const fromList = parseKeyList(process.env.CLAWDBOT_LIVE_ANTHROPIC_KEYS); + const fromList = parseKeyList(process.env.MOLTBOT_LIVE_ANTHROPIC_KEYS); const fromEnv = collectEnvPrefixedKeys("ANTHROPIC_API_KEY"); const primary = process.env.ANTHROPIC_API_KEY?.trim(); diff --git a/src/agents/model-auth.test.ts b/src/agents/model-auth.test.ts index 7219e128d..17b40b9bb 100644 --- a/src/agents/model-auth.test.ts +++ b/src/agents/model-auth.test.ts @@ -13,15 +13,15 @@ const oauthFixture = { describe("getApiKeyForModel", () => { it("migrates legacy oauth.json into auth-profiles.json", async () => { - const previousStateDir = process.env.CLAWDBOT_STATE_DIR; - const previousAgentDir = process.env.CLAWDBOT_AGENT_DIR; + const previousStateDir = process.env.MOLTBOT_STATE_DIR; + const previousAgentDir = process.env.MOLTBOT_AGENT_DIR; const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR; const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-oauth-")); try { - process.env.CLAWDBOT_STATE_DIR = tempDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempDir, "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempDir, "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; const oauthDir = path.join(tempDir, "credentials"); await fs.mkdir(oauthDir, { recursive: true, mode: 0o700 }); @@ -41,7 +41,7 @@ describe("getApiKeyForModel", () => { api: "openai-codex-responses", } as Model; - const store = ensureAuthProfileStore(process.env.CLAWDBOT_AGENT_DIR, { + const store = ensureAuthProfileStore(process.env.MOLTBOT_AGENT_DIR, { allowKeychainPrompt: false, }); const apiKey = await getApiKeyForModel({ @@ -57,7 +57,7 @@ describe("getApiKeyForModel", () => { }, }, store, - agentDir: process.env.CLAWDBOT_AGENT_DIR, + agentDir: process.env.MOLTBOT_AGENT_DIR, }); expect(apiKey.apiKey).toBe(oauthFixture.access); @@ -76,14 +76,14 @@ describe("getApiKeyForModel", () => { }); } finally { if (previousStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = previousStateDir; + process.env.MOLTBOT_STATE_DIR = previousStateDir; } if (previousAgentDir === undefined) { - delete process.env.CLAWDBOT_AGENT_DIR; + delete process.env.MOLTBOT_AGENT_DIR; } else { - process.env.CLAWDBOT_AGENT_DIR = previousAgentDir; + process.env.MOLTBOT_AGENT_DIR = previousAgentDir; } if (previousPiAgentDir === undefined) { delete process.env.PI_CODING_AGENT_DIR; @@ -95,17 +95,17 @@ describe("getApiKeyForModel", () => { }); it("suggests openai-codex when only Codex OAuth is configured", async () => { - const previousStateDir = process.env.CLAWDBOT_STATE_DIR; - const previousAgentDir = process.env.CLAWDBOT_AGENT_DIR; + const previousStateDir = process.env.MOLTBOT_STATE_DIR; + const previousAgentDir = process.env.MOLTBOT_AGENT_DIR; const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR; const previousOpenAiKey = process.env.OPENAI_API_KEY; const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-auth-")); try { delete process.env.OPENAI_API_KEY; - process.env.CLAWDBOT_STATE_DIR = tempDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempDir, "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempDir, "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; const authProfilesPath = path.join(tempDir, "agent", "auth-profiles.json"); await fs.mkdir(path.dirname(authProfilesPath), { @@ -148,14 +148,14 @@ describe("getApiKeyForModel", () => { process.env.OPENAI_API_KEY = previousOpenAiKey; } if (previousStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = previousStateDir; + process.env.MOLTBOT_STATE_DIR = previousStateDir; } if (previousAgentDir === undefined) { - delete process.env.CLAWDBOT_AGENT_DIR; + delete process.env.MOLTBOT_AGENT_DIR; } else { - process.env.CLAWDBOT_AGENT_DIR = previousAgentDir; + process.env.MOLTBOT_AGENT_DIR = previousAgentDir; } if (previousPiAgentDir === undefined) { delete process.env.PI_CODING_AGENT_DIR; diff --git a/src/agents/models.profiles.live.test.ts b/src/agents/models.profiles.live.test.ts index 4ae542aca..c1094a813 100644 --- a/src/agents/models.profiles.live.test.ts +++ b/src/agents/models.profiles.live.test.ts @@ -15,9 +15,9 @@ import { getApiKeyForModel, requireApiKey } from "./model-auth.js"; import { ensureMoltbotModelsJson } from "./models-config.js"; import { isRateLimitErrorMessage } from "./pi-embedded-helpers/errors.js"; -const LIVE = isTruthyEnvValue(process.env.LIVE) || isTruthyEnvValue(process.env.CLAWDBOT_LIVE_TEST); -const DIRECT_ENABLED = Boolean(process.env.CLAWDBOT_LIVE_MODELS?.trim()); -const REQUIRE_PROFILE_KEYS = isTruthyEnvValue(process.env.CLAWDBOT_LIVE_REQUIRE_PROFILE_KEYS); +const LIVE = isTruthyEnvValue(process.env.LIVE) || isTruthyEnvValue(process.env.MOLTBOT_LIVE_TEST); +const DIRECT_ENABLED = Boolean(process.env.MOLTBOT_LIVE_MODELS?.trim()); +const REQUIRE_PROFILE_KEYS = isTruthyEnvValue(process.env.MOLTBOT_LIVE_REQUIRE_PROFILE_KEYS); const describeLive = LIVE ? describe : describe.skip; @@ -154,7 +154,7 @@ describeLive("live models (profile keys)", () => { await ensureMoltbotModelsJson(cfg); if (!DIRECT_ENABLED) { logProgress( - "[live-models] skipping (set CLAWDBOT_LIVE_MODELS=modern|all|; all=modern)", + "[live-models] skipping (set MOLTBOT_LIVE_MODELS=modern|all|; all=modern)", ); return; } @@ -169,13 +169,13 @@ describeLive("live models (profile keys)", () => { const modelRegistry = discoverModels(authStorage, agentDir); const models = modelRegistry.getAll() as Array>; - const rawModels = process.env.CLAWDBOT_LIVE_MODELS?.trim(); + const rawModels = process.env.MOLTBOT_LIVE_MODELS?.trim(); const useModern = rawModels === "modern" || rawModels === "all"; const useExplicit = Boolean(rawModels) && !useModern; const filter = useExplicit ? parseModelFilter(rawModels) : null; const allowNotFoundSkip = useModern; - const providers = parseProviderFilter(process.env.CLAWDBOT_LIVE_PROVIDERS); - const perModelTimeoutMs = toInt(process.env.CLAWDBOT_LIVE_MODEL_TIMEOUT_MS, 30_000); + const providers = parseProviderFilter(process.env.MOLTBOT_LIVE_PROVIDERS); + const perModelTimeoutMs = toInt(process.env.MOLTBOT_LIVE_MODEL_TIMEOUT_MS, 30_000); const failures: Array<{ model: string; error: string }> = []; const skipped: Array<{ model: string; reason: string }> = []; diff --git a/src/agents/pi-embedded-runner/run/images.test.ts b/src/agents/pi-embedded-runner/run/images.test.ts index d516dfb04..eb80d2e86 100644 --- a/src/agents/pi-embedded-runner/run/images.test.ts +++ b/src/agents/pi-embedded-runner/run/images.test.ts @@ -125,8 +125,8 @@ describe("detectImageReferences", () => { it("detects multiple images in [media attached: ...] format", () => { // Multi-file format uses separate brackets on separate lines const prompt = `[media attached: 2 files] -[media attached 1/2: /Users/tyleryust/.clawdbot/media/IMG_6430.jpeg (image/jpeg)] -[media attached 2/2: /Users/tyleryust/.clawdbot/media/IMG_6431.jpeg (image/jpeg)] +[media attached 1/2: /Users/tyleryust/.moltbot/media/IMG_6430.jpeg (image/jpeg)] +[media attached 2/2: /Users/tyleryust/.moltbot/media/IMG_6431.jpeg (image/jpeg)] what about these images?`; const refs = detectImageReferences(prompt); @@ -165,7 +165,7 @@ what is this?`; it("handles paths with spaces in filename", () => { // URL after | is https, not a local path, so only the local path should be detected - const prompt = `[media attached: /Users/test/.clawdbot/media/ChatGPT Image Apr 21, 2025.png (image/png) | https://example.com/same.png] + const prompt = `[media attached: /Users/test/.moltbot/media/ChatGPT Image Apr 21, 2025.png (image/png) | https://example.com/same.png] what is this?`; const refs = detectImageReferences(prompt); diff --git a/src/agents/pi-embedded-runner/session-manager-cache.ts b/src/agents/pi-embedded-runner/session-manager-cache.ts index 5ef81858b..8b2258868 100644 --- a/src/agents/pi-embedded-runner/session-manager-cache.ts +++ b/src/agents/pi-embedded-runner/session-manager-cache.ts @@ -13,7 +13,7 @@ const DEFAULT_SESSION_MANAGER_TTL_MS = 45_000; // 45 seconds function getSessionManagerTtl(): number { return resolveCacheTtlMs({ - envValue: process.env.CLAWDBOT_SESSION_MANAGER_CACHE_TTL_MS, + envValue: process.env.MOLTBOT_SESSION_MANAGER_CACHE_TTL_MS, defaultTtlMs: DEFAULT_SESSION_MANAGER_TTL_MS, }); } diff --git a/src/agents/pi-embedded-subscribe.raw-stream.ts b/src/agents/pi-embedded-subscribe.raw-stream.ts index 65a7549e6..c96b038fc 100644 --- a/src/agents/pi-embedded-subscribe.raw-stream.ts +++ b/src/agents/pi-embedded-subscribe.raw-stream.ts @@ -4,9 +4,9 @@ import path from "node:path"; import { resolveStateDir } from "../config/paths.js"; import { isTruthyEnvValue } from "../infra/env.js"; -const RAW_STREAM_ENABLED = isTruthyEnvValue(process.env.CLAWDBOT_RAW_STREAM); +const RAW_STREAM_ENABLED = isTruthyEnvValue(process.env.MOLTBOT_RAW_STREAM); const RAW_STREAM_PATH = - process.env.CLAWDBOT_RAW_STREAM_PATH?.trim() || + process.env.MOLTBOT_RAW_STREAM_PATH?.trim() || path.join(resolveStateDir(), "logs", "raw-stream.jsonl"); let rawStreamReady = false; diff --git a/src/agents/sandbox-agent-config.agent-specific-sandbox-config.should-use-agent-specific-workspaceroot.test.ts b/src/agents/sandbox-agent-config.agent-specific-sandbox-config.should-use-agent-specific-workspaceroot.test.ts index 96ffec7b1..6383591a2 100644 --- a/src/agents/sandbox-agent-config.agent-specific-sandbox-config.should-use-agent-specific-workspaceroot.test.ts +++ b/src/agents/sandbox-agent-config.agent-specific-sandbox-config.should-use-agent-specific-workspaceroot.test.ts @@ -68,7 +68,7 @@ describe("Agent-specific sandbox config", () => { sandbox: { mode: "all", scope: "agent", - workspaceRoot: "~/.clawdbot/sandboxes", // Global default + workspaceRoot: "~/.moltbot/sandboxes", // Global default }, }, list: [ diff --git a/src/agents/sandbox-skills.test.ts b/src/agents/sandbox-skills.test.ts index d4390140f..8a597646b 100644 --- a/src/agents/sandbox-skills.test.ts +++ b/src/agents/sandbox-skills.test.ts @@ -86,8 +86,8 @@ describe("sandbox skill mirroring", () => { const bundledDir = path.join(stateDir, "bundled-skills"); await fs.mkdir(bundledDir, { recursive: true }); - process.env.CLAWDBOT_STATE_DIR = stateDir; - process.env.CLAWDBOT_BUNDLED_SKILLS_DIR = bundledDir; + process.env.MOLTBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_BUNDLED_SKILLS_DIR = bundledDir; vi.resetModules(); const { resolveSandboxContext } = await import("./sandbox.js"); diff --git a/src/agents/sandbox/browser.ts b/src/agents/sandbox/browser.ts index e085030b5..cd3fac250 100644 --- a/src/agents/sandbox/browser.ts +++ b/src/agents/sandbox/browser.ts @@ -114,11 +114,11 @@ export async function ensureSandboxBrowser(params: { if (params.cfg.browser.enableNoVnc && !params.cfg.browser.headless) { args.push("-p", `127.0.0.1::${params.cfg.browser.noVncPort}`); } - args.push("-e", `CLAWDBOT_BROWSER_HEADLESS=${params.cfg.browser.headless ? "1" : "0"}`); - args.push("-e", `CLAWDBOT_BROWSER_ENABLE_NOVNC=${params.cfg.browser.enableNoVnc ? "1" : "0"}`); - args.push("-e", `CLAWDBOT_BROWSER_CDP_PORT=${params.cfg.browser.cdpPort}`); - args.push("-e", `CLAWDBOT_BROWSER_VNC_PORT=${params.cfg.browser.vncPort}`); - args.push("-e", `CLAWDBOT_BROWSER_NOVNC_PORT=${params.cfg.browser.noVncPort}`); + args.push("-e", `MOLTBOT_BROWSER_HEADLESS=${params.cfg.browser.headless ? "1" : "0"}`); + args.push("-e", `MOLTBOT_BROWSER_ENABLE_NOVNC=${params.cfg.browser.enableNoVnc ? "1" : "0"}`); + args.push("-e", `MOLTBOT_BROWSER_CDP_PORT=${params.cfg.browser.cdpPort}`); + args.push("-e", `MOLTBOT_BROWSER_VNC_PORT=${params.cfg.browser.vncPort}`); + args.push("-e", `MOLTBOT_BROWSER_NOVNC_PORT=${params.cfg.browser.noVncPort}`); args.push(params.cfg.browser.image); await execDocker(args); await execDocker(["start", containerName]); diff --git a/src/agents/sandbox/constants.ts b/src/agents/sandbox/constants.ts index 6a844ecc7..c5ea9e431 100644 --- a/src/agents/sandbox/constants.ts +++ b/src/agents/sandbox/constants.ts @@ -4,7 +4,7 @@ import path from "node:path"; import { CHANNEL_IDS } from "../../channels/registry.js"; import { STATE_DIR } from "../../config/config.js"; -export const DEFAULT_SANDBOX_WORKSPACE_ROOT = path.join(os.homedir(), ".clawdbot", "sandboxes"); +export const DEFAULT_SANDBOX_WORKSPACE_ROOT = path.join(os.homedir(), ".moltbot", "sandboxes"); export const DEFAULT_SANDBOX_IMAGE = "moltbot-sandbox:bookworm-slim"; export const DEFAULT_SANDBOX_CONTAINER_PREFIX = "moltbot-sbx-"; @@ -48,7 +48,7 @@ export const DEFAULT_SANDBOX_BROWSER_AUTOSTART_TIMEOUT_MS = 12_000; export const SANDBOX_AGENT_WORKSPACE_MOUNT = "/agent"; -const resolvedSandboxStateDir = STATE_DIR ?? path.join(os.homedir(), ".clawdbot"); +const resolvedSandboxStateDir = STATE_DIR ?? path.join(os.homedir(), ".moltbot"); export const SANDBOX_STATE_DIR = path.join(resolvedSandboxStateDir, "sandbox"); export const SANDBOX_REGISTRY_PATH = path.join(SANDBOX_STATE_DIR, "containers.json"); export const SANDBOX_BROWSER_REGISTRY_PATH = path.join(SANDBOX_STATE_DIR, "browsers.json"); diff --git a/src/agents/session-tool-result-guard.tool-result-persist-hook.test.ts b/src/agents/session-tool-result-guard.tool-result-persist-hook.test.ts index adf9b3025..852a1bb03 100644 --- a/src/agents/session-tool-result-guard.tool-result-persist-hook.test.ts +++ b/src/agents/session-tool-result-guard.tool-result-persist-hook.test.ts @@ -68,7 +68,7 @@ describe("tool_result_persist hook", () => { it("composes transforms in priority order and allows stripping toolResult.details", () => { const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-toolpersist-")); - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; const pluginA = writeTempPlugin({ dir: tmp, diff --git a/src/agents/skills.buildworkspaceskillstatus.test.ts b/src/agents/skills.buildworkspaceskillstatus.test.ts index 8372c536e..b6ce5427f 100644 --- a/src/agents/skills.buildworkspaceskillstatus.test.ts +++ b/src/agents/skills.buildworkspaceskillstatus.test.ts @@ -81,7 +81,7 @@ describe("buildWorkspaceSkillStatus", () => { const workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-")); const bundledDir = path.join(workspaceDir, ".bundled"); const bundledSkillDir = path.join(bundledDir, "peekaboo"); - const originalBundled = process.env.CLAWDBOT_BUNDLED_SKILLS_DIR; + const originalBundled = process.env.MOLTBOT_BUNDLED_SKILLS_DIR; await writeSkill({ dir: bundledSkillDir, @@ -91,7 +91,7 @@ describe("buildWorkspaceSkillStatus", () => { }); try { - process.env.CLAWDBOT_BUNDLED_SKILLS_DIR = bundledDir; + process.env.MOLTBOT_BUNDLED_SKILLS_DIR = bundledDir; const report = buildWorkspaceSkillStatus(workspaceDir, { managedSkillsDir: path.join(workspaceDir, ".managed"), config: { skills: { allowBundled: ["other-skill"] } }, @@ -103,9 +103,9 @@ describe("buildWorkspaceSkillStatus", () => { expect(skill?.eligible).toBe(false); } finally { if (originalBundled === undefined) { - delete process.env.CLAWDBOT_BUNDLED_SKILLS_DIR; + delete process.env.MOLTBOT_BUNDLED_SKILLS_DIR; } else { - process.env.CLAWDBOT_BUNDLED_SKILLS_DIR = originalBundled; + process.env.MOLTBOT_BUNDLED_SKILLS_DIR = originalBundled; } } }); diff --git a/src/agents/skills.loadworkspaceskillentries.test.ts b/src/agents/skills.loadworkspaceskillentries.test.ts index 26e7b9835..874b9fa34 100644 --- a/src/agents/skills.loadworkspaceskillentries.test.ts +++ b/src/agents/skills.loadworkspaceskillentries.test.ts @@ -44,7 +44,7 @@ describe("loadWorkspaceSkillEntries", () => { const workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-")); const managedDir = path.join(workspaceDir, ".managed"); const bundledDir = path.join(workspaceDir, ".bundled"); - const pluginRoot = path.join(workspaceDir, ".clawdbot", "extensions", "open-prose"); + const pluginRoot = path.join(workspaceDir, ".moltbot", "extensions", "open-prose"); await fs.mkdir(path.join(pluginRoot, "skills", "prose"), { recursive: true }); await fs.writeFile( @@ -83,7 +83,7 @@ describe("loadWorkspaceSkillEntries", () => { const workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-")); const managedDir = path.join(workspaceDir, ".managed"); const bundledDir = path.join(workspaceDir, ".bundled"); - const pluginRoot = path.join(workspaceDir, ".clawdbot", "extensions", "open-prose"); + const pluginRoot = path.join(workspaceDir, ".moltbot", "extensions", "open-prose"); await fs.mkdir(path.join(pluginRoot, "skills", "prose"), { recursive: true }); await fs.writeFile( diff --git a/src/agents/skills/bundled-dir.ts b/src/agents/skills/bundled-dir.ts index edcaf8d03..d226110b6 100644 --- a/src/agents/skills/bundled-dir.ts +++ b/src/agents/skills/bundled-dir.ts @@ -3,7 +3,7 @@ import path from "node:path"; import { fileURLToPath } from "node:url"; export function resolveBundledSkillsDir(): string | undefined { - const override = process.env.CLAWDBOT_BUNDLED_SKILLS_DIR?.trim(); + const override = process.env.MOLTBOT_BUNDLED_SKILLS_DIR?.trim(); if (override) return override; // bun --compile: ship a sibling `skills/` next to the executable. diff --git a/src/agents/subagent-registry.persistence.test.ts b/src/agents/subagent-registry.persistence.test.ts index c37ca054a..f278393c4 100644 --- a/src/agents/subagent-registry.persistence.test.ts +++ b/src/agents/subagent-registry.persistence.test.ts @@ -24,7 +24,7 @@ vi.mock("./subagent-announce.js", () => ({ })); describe("subagent registry persistence", () => { - const previousStateDir = process.env.CLAWDBOT_STATE_DIR; + const previousStateDir = process.env.MOLTBOT_STATE_DIR; let tempStateDir: string | null = null; afterEach(async () => { @@ -35,15 +35,15 @@ describe("subagent registry persistence", () => { tempStateDir = null; } if (previousStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = previousStateDir; + process.env.MOLTBOT_STATE_DIR = previousStateDir; } }); it("persists runs to disk and resumes after restart", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-subagent-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_STATE_DIR = tempStateDir; vi.resetModules(); const mod1 = await import("./subagent-registry.js"); @@ -103,7 +103,7 @@ describe("subagent registry persistence", () => { it("skips cleanup when cleanupHandled was persisted", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-subagent-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_STATE_DIR = tempStateDir; const registryPath = path.join(tempStateDir, "subagents", "runs.json"); const persisted = { @@ -143,7 +143,7 @@ describe("subagent registry persistence", () => { it("maps legacy announce fields into cleanup state", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-subagent-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_STATE_DIR = tempStateDir; const registryPath = path.join(tempStateDir, "subagents", "runs.json"); const persisted = { @@ -184,7 +184,7 @@ describe("subagent registry persistence", () => { it("retries cleanup announce after a failed announce", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-subagent-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_STATE_DIR = tempStateDir; const registryPath = path.join(tempStateDir, "subagents", "runs.json"); const persisted = { diff --git a/src/agents/tools/browser-tool.ts b/src/agents/tools/browser-tool.ts index b28da2fc7..a77a7c628 100644 --- a/src/agents/tools/browser-tool.ts +++ b/src/agents/tools/browser-tool.ts @@ -208,7 +208,7 @@ function resolveBrowserBaseUrl(params: { } if (!resolved.enabled) { throw new Error( - "Browser control is disabled. Set browser.enabled=true in ~/.clawdbot/moltbot.json.", + "Browser control is disabled. Set browser.enabled=true in ~/.moltbot/moltbot.json.", ); } return undefined; diff --git a/src/agents/tools/image-tool.test.ts b/src/agents/tools/image-tool.test.ts index 2b4e1aea1..5ba2646da 100644 --- a/src/agents/tools/image-tool.test.ts +++ b/src/agents/tools/image-tool.test.ts @@ -202,7 +202,7 @@ describe("image tool implicit imageModel config", () => { const res = await tool.execute("t1", { prompt: "Describe the image.", - image: "@/Users/steipete/.clawdbot/media/inbound/photo.png", + image: "@/Users/steipete/.moltbot/media/inbound/photo.png", }); expect(fetch).toHaveBeenCalledTimes(1); diff --git a/src/agents/workspace.ts b/src/agents/workspace.ts index 0cef8e5f0..05d213625 100644 --- a/src/agents/workspace.ts +++ b/src/agents/workspace.ts @@ -11,7 +11,7 @@ export function resolveDefaultAgentWorkspaceDir( env: NodeJS.ProcessEnv = process.env, homedir: () => string = os.homedir, ): string { - const profile = env.CLAWDBOT_PROFILE?.trim(); + const profile = env.MOLTBOT_PROFILE?.trim(); if (profile && profile.toLowerCase() !== "default") { return path.join(homedir(), `clawd-${profile}`); } diff --git a/src/auto-reply/reply.directive.directive-behavior.accepts-thinking-xhigh-codex-models.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.accepts-thinking-xhigh-codex-models.e2e.test.ts index e24d1c2c1..bcad00850 100644 --- a/src/auto-reply/reply.directive.directive-behavior.accepts-thinking-xhigh-codex-models.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.accepts-thinking-xhigh-codex-models.e2e.test.ts @@ -39,8 +39,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, diff --git a/src/auto-reply/reply.directive.directive-behavior.applies-inline-reasoning-mixed-messages-acks-immediately.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.applies-inline-reasoning-mixed-messages-acks-immediately.e2e.test.ts index 4823008bb..01f312785 100644 --- a/src/auto-reply/reply.directive.directive-behavior.applies-inline-reasoning-mixed-messages-acks-immediately.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.applies-inline-reasoning-mixed-messages-acks-immediately.e2e.test.ts @@ -27,8 +27,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, diff --git a/src/auto-reply/reply.directive.directive-behavior.defaults-think-low-reasoning-capable-models-no.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.defaults-think-low-reasoning-capable-models-no.e2e.test.ts index 3655e5a48..b452cc9c3 100644 --- a/src/auto-reply/reply.directive.directive-behavior.defaults-think-low-reasoning-capable-models-no.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.defaults-think-low-reasoning-capable-models-no.e2e.test.ts @@ -27,8 +27,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, diff --git a/src/auto-reply/reply.directive.directive-behavior.ignores-inline-model-uses-default-model.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.ignores-inline-model-uses-default-model.e2e.test.ts index de7c36539..d9e539d41 100644 --- a/src/auto-reply/reply.directive.directive-behavior.ignores-inline-model-uses-default-model.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.ignores-inline-model-uses-default-model.e2e.test.ts @@ -27,8 +27,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, diff --git a/src/auto-reply/reply.directive.directive-behavior.lists-allowlisted-models-model-list.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.lists-allowlisted-models-model-list.e2e.test.ts index e5a29fa90..57f3cb86c 100644 --- a/src/auto-reply/reply.directive.directive-behavior.lists-allowlisted-models-model-list.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.lists-allowlisted-models-model-list.e2e.test.ts @@ -27,8 +27,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, diff --git a/src/auto-reply/reply.directive.directive-behavior.prefers-alias-matches-fuzzy-selection-is-ambiguous.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.prefers-alias-matches-fuzzy-selection-is-ambiguous.e2e.test.ts index 4c406ba13..4cea8eed4 100644 --- a/src/auto-reply/reply.directive.directive-behavior.prefers-alias-matches-fuzzy-selection-is-ambiguous.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.prefers-alias-matches-fuzzy-selection-is-ambiguous.e2e.test.ts @@ -29,8 +29,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, @@ -116,7 +116,7 @@ describe("directive behavior", () => { await withTempHome(async (home) => { vi.mocked(runEmbeddedPiAgent).mockReset(); const storePath = path.join(home, "sessions.json"); - const authDir = path.join(home, ".clawdbot", "agents", "main", "agent"); + const authDir = path.join(home, ".moltbot", "agents", "main", "agent"); await fs.mkdir(authDir, { recursive: true, mode: 0o700 }); await fs.writeFile( path.join(authDir, "auth-profiles.json"), diff --git a/src/auto-reply/reply.directive.directive-behavior.requires-per-agent-allowlist-addition-global.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.requires-per-agent-allowlist-addition-global.e2e.test.ts index 552bacff5..b3e8cd15b 100644 --- a/src/auto-reply/reply.directive.directive-behavior.requires-per-agent-allowlist-addition-global.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.requires-per-agent-allowlist-addition-global.e2e.test.ts @@ -27,8 +27,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, diff --git a/src/auto-reply/reply.directive.directive-behavior.returns-status-alongside-directive-only-acks.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.returns-status-alongside-directive-only-acks.e2e.test.ts index 9c90f8616..567acb8e1 100644 --- a/src/auto-reply/reply.directive.directive-behavior.returns-status-alongside-directive-only-acks.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.returns-status-alongside-directive-only-acks.e2e.test.ts @@ -27,8 +27,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, diff --git a/src/auto-reply/reply.directive.directive-behavior.shows-current-elevated-level-as-off-after.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.shows-current-elevated-level-as-off-after.e2e.test.ts index 2dbf4de64..7d619e12d 100644 --- a/src/auto-reply/reply.directive.directive-behavior.shows-current-elevated-level-as-off-after.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.shows-current-elevated-level-as-off-after.e2e.test.ts @@ -27,8 +27,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, diff --git a/src/auto-reply/reply.directive.directive-behavior.shows-current-verbose-level-verbose-has-no.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.shows-current-verbose-level-verbose-has-no.e2e.test.ts index 5c4665ec9..8f69ee6ec 100644 --- a/src/auto-reply/reply.directive.directive-behavior.shows-current-verbose-level-verbose-has-no.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.shows-current-verbose-level-verbose-has-no.e2e.test.ts @@ -27,8 +27,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, diff --git a/src/auto-reply/reply.directive.directive-behavior.supports-fuzzy-model-matches-model-directive.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.supports-fuzzy-model-matches-model-directive.e2e.test.ts index 2ebbd921e..e2c7ff9a7 100644 --- a/src/auto-reply/reply.directive.directive-behavior.supports-fuzzy-model-matches-model-directive.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.supports-fuzzy-model-matches-model-directive.e2e.test.ts @@ -27,8 +27,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, diff --git a/src/auto-reply/reply.directive.directive-behavior.updates-tool-verbose-during-flight-run-toggle.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.updates-tool-verbose-during-flight-run-toggle.e2e.test.ts index f9ad71e70..65258a1c3 100644 --- a/src/auto-reply/reply.directive.directive-behavior.updates-tool-verbose-during-flight-run-toggle.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.updates-tool-verbose-during-flight-run-toggle.e2e.test.ts @@ -27,8 +27,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-reply-", }, diff --git a/src/auto-reply/reply.media-note.test.ts b/src/auto-reply/reply.media-note.test.ts index e2d66c5ee..a622d8937 100644 --- a/src/auto-reply/reply.media-note.test.ts +++ b/src/auto-reply/reply.media-note.test.ts @@ -33,7 +33,7 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_BUNDLED_SKILLS_DIR: (home) => path.join(home, "bundled-skills"), + MOLTBOT_BUNDLED_SKILLS_DIR: (home) => path.join(home, "bundled-skills"), }, prefix: "moltbot-media-note-", }, diff --git a/src/auto-reply/reply.raw-body.test.ts b/src/auto-reply/reply.raw-body.test.ts index 50816ba38..a565e3d9e 100644 --- a/src/auto-reply/reply.raw-body.test.ts +++ b/src/auto-reply/reply.raw-body.test.ts @@ -24,8 +24,8 @@ async function withTempHome(fn: (home: string) => Promise): Promise { }, { env: { - CLAWDBOT_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), - PI_CODING_AGENT_DIR: (home) => path.join(home, ".clawdbot", "agent"), + MOLTBOT_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), + PI_CODING_AGENT_DIR: (home) => path.join(home, ".moltbot", "agent"), }, prefix: "moltbot-rawbody-", }, diff --git a/src/auto-reply/reply.triggers.group-intro-prompts.e2e.test.ts b/src/auto-reply/reply.triggers.group-intro-prompts.e2e.test.ts index eac762ada..fc41e30ee 100644 --- a/src/auto-reply/reply.triggers.group-intro-prompts.e2e.test.ts +++ b/src/auto-reply/reply.triggers.group-intro-prompts.e2e.test.ts @@ -64,7 +64,7 @@ vi.mock("../web/session.js", () => webMocks); async function withTempHome(fn: (home: string) => Promise): Promise { return withTempHomeBase( async (home) => { - await mkdir(join(home, ".clawdbot", "agents", "main", "sessions"), { recursive: true }); + await mkdir(join(home, ".moltbot", "agents", "main", "sessions"), { recursive: true }); vi.mocked(runEmbeddedPiAgent).mockClear(); vi.mocked(abortEmbeddedPiRun).mockClear(); return await fn(home); diff --git a/src/auto-reply/reply.triggers.trigger-handling.reports-active-auth-profile-key-snippet-status.e2e.test.ts b/src/auto-reply/reply.triggers.trigger-handling.reports-active-auth-profile-key-snippet-status.e2e.test.ts index b7c6c64e5..fc9c420c2 100644 --- a/src/auto-reply/reply.triggers.trigger-handling.reports-active-auth-profile-key-snippet-status.e2e.test.ts +++ b/src/auto-reply/reply.triggers.trigger-handling.reports-active-auth-profile-key-snippet-status.e2e.test.ts @@ -98,7 +98,7 @@ describe("trigger handling", () => { it("reports active auth profile and key snippet in status", async () => { await withTempHome(async (home) => { const cfg = makeCfg(home); - const agentDir = join(home, ".clawdbot", "agents", "main", "agent"); + const agentDir = join(home, ".moltbot", "agents", "main", "agent"); await fs.mkdir(agentDir, { recursive: true }); await fs.writeFile( join(agentDir, "auth-profiles.json"), diff --git a/src/auto-reply/reply.triggers.trigger-handling.stages-inbound-media-into-sandbox-workspace.test.ts b/src/auto-reply/reply.triggers.trigger-handling.stages-inbound-media-into-sandbox-workspace.test.ts index fb5754a4f..4c1308cb4 100644 --- a/src/auto-reply/reply.triggers.trigger-handling.stages-inbound-media-into-sandbox-workspace.test.ts +++ b/src/auto-reply/reply.triggers.trigger-handling.stages-inbound-media-into-sandbox-workspace.test.ts @@ -24,7 +24,7 @@ afterEach(() => { describe("stageSandboxMedia", () => { it("stages inbound media into the sandbox workspace", async () => { await withTempHome(async (home) => { - const inboundDir = join(home, ".clawdbot", "media", "inbound"); + const inboundDir = join(home, ".moltbot", "media", "inbound"); await fs.mkdir(inboundDir, { recursive: true }); const mediaPath = join(inboundDir, "photo.jpg"); await fs.writeFile(mediaPath, "test"); diff --git a/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.resets-corrupted-gemini-sessions-deletes-transcripts.test.ts b/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.resets-corrupted-gemini-sessions-deletes-transcripts.test.ts index dabb5f2b4..4d4736206 100644 --- a/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.resets-corrupted-gemini-sessions-deletes-transcripts.test.ts +++ b/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.resets-corrupted-gemini-sessions-deletes-transcripts.test.ts @@ -122,9 +122,9 @@ function createMinimalRun(params?: { describe("runReplyAgent typing (heartbeat)", () => { it("resets corrupted Gemini sessions and deletes transcripts", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const stateDir = await fs.mkdtemp(path.join(tmpdir(), "moltbot-session-reset-")); - process.env.CLAWDBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_STATE_DIR = stateDir; try { const sessionId = "session-corrupt"; const storePath = path.join(stateDir, "sessions", "sessions.json"); @@ -162,16 +162,16 @@ describe("runReplyAgent typing (heartbeat)", () => { expect(persisted.main).toBeUndefined(); } finally { if (prevStateDir) { - process.env.CLAWDBOT_STATE_DIR = prevStateDir; + process.env.MOLTBOT_STATE_DIR = prevStateDir; } else { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } } }); it("keeps sessions intact on other errors", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const stateDir = await fs.mkdtemp(path.join(tmpdir(), "moltbot-session-noreset-")); - process.env.CLAWDBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_STATE_DIR = stateDir; try { const sessionId = "session-ok"; const storePath = path.join(stateDir, "sessions", "sessions.json"); @@ -207,9 +207,9 @@ describe("runReplyAgent typing (heartbeat)", () => { expect(persisted.main).toBeDefined(); } finally { if (prevStateDir) { - process.env.CLAWDBOT_STATE_DIR = prevStateDir; + process.env.MOLTBOT_STATE_DIR = prevStateDir; } else { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } } }); diff --git a/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.retries-after-compaction-failure-by-resetting-session.test.ts b/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.retries-after-compaction-failure-by-resetting-session.test.ts index a3cd93ae1..37e0d276a 100644 --- a/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.retries-after-compaction-failure-by-resetting-session.test.ts +++ b/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.retries-after-compaction-failure-by-resetting-session.test.ts @@ -126,9 +126,9 @@ describe("runReplyAgent typing (heartbeat)", () => { }); it("retries after compaction failure by resetting the session", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const stateDir = await fs.mkdtemp(path.join(tmpdir(), "moltbot-session-compaction-reset-")); - process.env.CLAWDBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_STATE_DIR = stateDir; try { const sessionId = "session"; const storePath = path.join(stateDir, "sessions", "sessions.json"); @@ -167,17 +167,17 @@ describe("runReplyAgent typing (heartbeat)", () => { expect(persisted.main.sessionId).toBe(sessionStore.main.sessionId); } finally { if (prevStateDir) { - process.env.CLAWDBOT_STATE_DIR = prevStateDir; + process.env.MOLTBOT_STATE_DIR = prevStateDir; } else { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } } }); it("retries after context overflow payload by resetting the session", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const stateDir = await fs.mkdtemp(path.join(tmpdir(), "moltbot-session-overflow-reset-")); - process.env.CLAWDBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_STATE_DIR = stateDir; try { const sessionId = "session"; const storePath = path.join(stateDir, "sessions", "sessions.json"); @@ -221,17 +221,17 @@ describe("runReplyAgent typing (heartbeat)", () => { expect(persisted.main.sessionId).toBe(sessionStore.main.sessionId); } finally { if (prevStateDir) { - process.env.CLAWDBOT_STATE_DIR = prevStateDir; + process.env.MOLTBOT_STATE_DIR = prevStateDir; } else { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } } }); it("resets the session after role ordering payloads", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const stateDir = await fs.mkdtemp(path.join(tmpdir(), "moltbot-session-role-ordering-")); - process.env.CLAWDBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_STATE_DIR = stateDir; try { const sessionId = "session"; const storePath = path.join(stateDir, "sessions", "sessions.json"); @@ -275,9 +275,9 @@ describe("runReplyAgent typing (heartbeat)", () => { expect(persisted.main.sessionId).toBe(sessionStore.main.sessionId); } finally { if (prevStateDir) { - process.env.CLAWDBOT_STATE_DIR = prevStateDir; + process.env.MOLTBOT_STATE_DIR = prevStateDir; } else { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } } }); diff --git a/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.still-replies-even-if-session-reset-fails.test.ts b/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.still-replies-even-if-session-reset-fails.test.ts index 93ce58c35..c43863d87 100644 --- a/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.still-replies-even-if-session-reset-fails.test.ts +++ b/src/auto-reply/reply/agent-runner.heartbeat-typing.runreplyagent-typing-heartbeat.still-replies-even-if-session-reset-fails.test.ts @@ -122,9 +122,9 @@ function createMinimalRun(params?: { describe("runReplyAgent typing (heartbeat)", () => { it("still replies even if session reset fails to persist", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const stateDir = await fs.mkdtemp(path.join(tmpdir(), "moltbot-session-reset-fail-")); - process.env.CLAWDBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_STATE_DIR = stateDir; const saveSpy = vi.spyOn(sessions, "saveSessionStore").mockRejectedValueOnce(new Error("boom")); try { const sessionId = "session-corrupt"; @@ -158,9 +158,9 @@ describe("runReplyAgent typing (heartbeat)", () => { } finally { saveSpy.mockRestore(); if (prevStateDir) { - process.env.CLAWDBOT_STATE_DIR = prevStateDir; + process.env.MOLTBOT_STATE_DIR = prevStateDir; } else { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } } }); diff --git a/src/auto-reply/reply/get-reply.ts b/src/auto-reply/reply/get-reply.ts index eefd3cf87..7dbc5ca6f 100644 --- a/src/auto-reply/reply/get-reply.ts +++ b/src/auto-reply/reply/get-reply.ts @@ -29,7 +29,7 @@ export async function getReplyFromConfig( opts?: GetReplyOptions, configOverride?: MoltbotConfig, ): Promise { - const isFastTestEnv = process.env.CLAWDBOT_TEST_FAST === "1"; + const isFastTestEnv = process.env.MOLTBOT_TEST_FAST === "1"; const cfg = configOverride ?? loadConfig(); const targetSessionKey = ctx.CommandSource === "native" ? ctx.CommandTargetSessionKey?.trim() : undefined; diff --git a/src/auto-reply/reply/stage-sandbox-media.ts b/src/auto-reply/reply/stage-sandbox-media.ts index ef1b7c7a9..4b3c427ce 100644 --- a/src/auto-reply/reply/stage-sandbox-media.ts +++ b/src/auto-reply/reply/stage-sandbox-media.ts @@ -32,7 +32,7 @@ export async function stageSandboxMedia(params: { workspaceDir, }); - // For remote attachments without sandbox, use ~/.clawdbot/media (not agent workspace for privacy) + // For remote attachments without sandbox, use ~/.moltbot/media (not agent workspace for privacy) const remoteMediaCacheDir = ctx.MediaRemoteHost ? path.join(CONFIG_DIR, "media", "remote-cache", sessionKey) : null; diff --git a/src/auto-reply/status.test.ts b/src/auto-reply/status.test.ts index 2f0120130..bc5035bf4 100644 --- a/src/auto-reply/status.test.ts +++ b/src/auto-reply/status.test.ts @@ -354,7 +354,7 @@ describe("buildStatusMessage", () => { const sessionId = "sess-1"; const logPath = path.join( dir, - ".clawdbot", + ".moltbot", "agents", "main", "sessions", diff --git a/src/auto-reply/status.ts b/src/auto-reply/status.ts index e69941cd8..0f222d190 100644 --- a/src/auto-reply/status.ts +++ b/src/auto-reply/status.ts @@ -169,7 +169,7 @@ const readUsageFromSessionLog = ( model?: string; } | undefined => { - // Transcripts are stored at the session file path (fallback: ~/.clawdbot/sessions/.jsonl) + // Transcripts are stored at the session file path (fallback: ~/.moltbot/sessions/.jsonl) if (!sessionId) return undefined; const logPath = resolveSessionFilePath(sessionId, sessionEntry); if (!fs.existsSync(logPath)) return undefined; diff --git a/src/browser/config.test.ts b/src/browser/config.test.ts index 136846059..51247c0cf 100644 --- a/src/browser/config.test.ts +++ b/src/browser/config.test.ts @@ -24,9 +24,9 @@ describe("browser config", () => { expect(resolved.remoteCdpHandshakeTimeoutMs).toBe(3000); }); - it("derives default ports from CLAWDBOT_GATEWAY_PORT when unset", () => { - const prev = process.env.CLAWDBOT_GATEWAY_PORT; - process.env.CLAWDBOT_GATEWAY_PORT = "19001"; + it("derives default ports from MOLTBOT_GATEWAY_PORT when unset", () => { + const prev = process.env.MOLTBOT_GATEWAY_PORT; + process.env.MOLTBOT_GATEWAY_PORT = "19001"; try { const resolved = resolveBrowserConfig(undefined); expect(resolved.controlPort).toBe(19003); @@ -40,16 +40,16 @@ describe("browser config", () => { expect(clawd?.cdpUrl).toBe("http://127.0.0.1:19012"); } finally { if (prev === undefined) { - delete process.env.CLAWDBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; } else { - process.env.CLAWDBOT_GATEWAY_PORT = prev; + process.env.MOLTBOT_GATEWAY_PORT = prev; } } }); it("derives default ports from gateway.port when env is unset", () => { - const prev = process.env.CLAWDBOT_GATEWAY_PORT; - delete process.env.CLAWDBOT_GATEWAY_PORT; + const prev = process.env.MOLTBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; try { const resolved = resolveBrowserConfig(undefined, { gateway: { port: 19011 } }); expect(resolved.controlPort).toBe(19013); @@ -63,9 +63,9 @@ describe("browser config", () => { expect(clawd?.cdpUrl).toBe("http://127.0.0.1:19022"); } finally { if (prev === undefined) { - delete process.env.CLAWDBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; } else { - process.env.CLAWDBOT_GATEWAY_PORT = prev; + process.env.MOLTBOT_GATEWAY_PORT = prev; } } }); diff --git a/src/browser/pw-session.browserless.live.test.ts b/src/browser/pw-session.browserless.live.test.ts index 4207a5031..247af3111 100644 --- a/src/browser/pw-session.browserless.live.test.ts +++ b/src/browser/pw-session.browserless.live.test.ts @@ -1,8 +1,8 @@ import { describe, it } from "vitest"; import { isTruthyEnvValue } from "../infra/env.js"; -const LIVE = isTruthyEnvValue(process.env.LIVE) || isTruthyEnvValue(process.env.CLAWDBOT_LIVE_TEST); -const CDP_URL = process.env.CLAWDBOT_LIVE_BROWSER_CDP_URL?.trim() || ""; +const LIVE = isTruthyEnvValue(process.env.LIVE) || isTruthyEnvValue(process.env.MOLTBOT_LIVE_TEST); +const CDP_URL = process.env.MOLTBOT_LIVE_BROWSER_CDP_URL?.trim() || ""; const describeLive = LIVE && CDP_URL ? describe : describe.skip; async function waitFor( diff --git a/src/browser/server.agent-contract-form-layout-act-commands.test.ts b/src/browser/server.agent-contract-form-layout-act-commands.test.ts index 9276a5280..b8b797241 100644 --- a/src/browser/server.agent-contract-form-layout-act-commands.test.ts +++ b/src/browser/server.agent-contract-form-layout-act-commands.test.ts @@ -200,8 +200,8 @@ describe("browser control server", () => { testPort = await getFreePort(); cdpBaseUrl = `http://127.0.0.1:${testPort + 1}`; - prevGatewayPort = process.env.CLAWDBOT_GATEWAY_PORT; - process.env.CLAWDBOT_GATEWAY_PORT = String(testPort - 2); + prevGatewayPort = process.env.MOLTBOT_GATEWAY_PORT; + process.env.MOLTBOT_GATEWAY_PORT = String(testPort - 2); // Minimal CDP JSON endpoints used by the server. let putNewCalls = 0; @@ -254,9 +254,9 @@ describe("browser control server", () => { vi.unstubAllGlobals(); vi.restoreAllMocks(); if (prevGatewayPort === undefined) { - delete process.env.CLAWDBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; } else { - process.env.CLAWDBOT_GATEWAY_PORT = prevGatewayPort; + process.env.MOLTBOT_GATEWAY_PORT = prevGatewayPort; } const { stopBrowserControlServer } = await import("./server.js"); await stopBrowserControlServer(); diff --git a/src/browser/server.agent-contract-snapshot-endpoints.test.ts b/src/browser/server.agent-contract-snapshot-endpoints.test.ts index 494d64657..c98dab547 100644 --- a/src/browser/server.agent-contract-snapshot-endpoints.test.ts +++ b/src/browser/server.agent-contract-snapshot-endpoints.test.ts @@ -198,8 +198,8 @@ describe("browser control server", () => { testPort = await getFreePort(); cdpBaseUrl = `http://127.0.0.1:${testPort + 1}`; - prevGatewayPort = process.env.CLAWDBOT_GATEWAY_PORT; - process.env.CLAWDBOT_GATEWAY_PORT = String(testPort - 2); + prevGatewayPort = process.env.MOLTBOT_GATEWAY_PORT; + process.env.MOLTBOT_GATEWAY_PORT = String(testPort - 2); // Minimal CDP JSON endpoints used by the server. let putNewCalls = 0; @@ -252,9 +252,9 @@ describe("browser control server", () => { vi.unstubAllGlobals(); vi.restoreAllMocks(); if (prevGatewayPort === undefined) { - delete process.env.CLAWDBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; } else { - process.env.CLAWDBOT_GATEWAY_PORT = prevGatewayPort; + process.env.MOLTBOT_GATEWAY_PORT = prevGatewayPort; } const { stopBrowserControlServer } = await import("./server.js"); await stopBrowserControlServer(); diff --git a/src/browser/server.covers-additional-endpoint-branches.test.ts b/src/browser/server.covers-additional-endpoint-branches.test.ts index 3710d8ed6..2e8cff76f 100644 --- a/src/browser/server.covers-additional-endpoint-branches.test.ts +++ b/src/browser/server.covers-additional-endpoint-branches.test.ts @@ -197,8 +197,8 @@ describe("browser control server", () => { testPort = await getFreePort(); _cdpBaseUrl = `http://127.0.0.1:${testPort + 1}`; - prevGatewayPort = process.env.CLAWDBOT_GATEWAY_PORT; - process.env.CLAWDBOT_GATEWAY_PORT = String(testPort - 2); + prevGatewayPort = process.env.MOLTBOT_GATEWAY_PORT; + process.env.MOLTBOT_GATEWAY_PORT = String(testPort - 2); // Minimal CDP JSON endpoints used by the server. let putNewCalls = 0; @@ -251,9 +251,9 @@ describe("browser control server", () => { vi.unstubAllGlobals(); vi.restoreAllMocks(); if (prevGatewayPort === undefined) { - delete process.env.CLAWDBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; } else { - process.env.CLAWDBOT_GATEWAY_PORT = prevGatewayPort; + process.env.MOLTBOT_GATEWAY_PORT = prevGatewayPort; } const { stopBrowserControlServer } = await import("./server.js"); await stopBrowserControlServer(); @@ -308,11 +308,11 @@ describe("backward compatibility (profile parameter)", () => { testPort = await getFreePort(); _cdpBaseUrl = `http://127.0.0.1:${testPort + 1}`; - prevGatewayPort = process.env.CLAWDBOT_GATEWAY_PORT; - process.env.CLAWDBOT_GATEWAY_PORT = String(testPort - 2); + prevGatewayPort = process.env.MOLTBOT_GATEWAY_PORT; + process.env.MOLTBOT_GATEWAY_PORT = String(testPort - 2); - prevGatewayPort = process.env.CLAWDBOT_GATEWAY_PORT; - process.env.CLAWDBOT_GATEWAY_PORT = String(testPort - 2); + prevGatewayPort = process.env.MOLTBOT_GATEWAY_PORT; + process.env.MOLTBOT_GATEWAY_PORT = String(testPort - 2); vi.stubGlobal( "fetch", @@ -350,9 +350,9 @@ describe("backward compatibility (profile parameter)", () => { vi.unstubAllGlobals(); vi.restoreAllMocks(); if (prevGatewayPort === undefined) { - delete process.env.CLAWDBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; } else { - process.env.CLAWDBOT_GATEWAY_PORT = prevGatewayPort; + process.env.MOLTBOT_GATEWAY_PORT = prevGatewayPort; } const { stopBrowserControlServer } = await import("./server.js"); await stopBrowserControlServer(); diff --git a/src/browser/server.post-tabs-open-profile-unknown-returns-404.test.ts b/src/browser/server.post-tabs-open-profile-unknown-returns-404.test.ts index 3b55339b5..a28a5bab5 100644 --- a/src/browser/server.post-tabs-open-profile-unknown-returns-404.test.ts +++ b/src/browser/server.post-tabs-open-profile-unknown-returns-404.test.ts @@ -197,8 +197,8 @@ describe("browser control server", () => { testPort = await getFreePort(); _cdpBaseUrl = `http://127.0.0.1:${testPort + 1}`; - prevGatewayPort = process.env.CLAWDBOT_GATEWAY_PORT; - process.env.CLAWDBOT_GATEWAY_PORT = String(testPort - 2); + prevGatewayPort = process.env.MOLTBOT_GATEWAY_PORT; + process.env.MOLTBOT_GATEWAY_PORT = String(testPort - 2); // Minimal CDP JSON endpoints used by the server. let putNewCalls = 0; @@ -251,9 +251,9 @@ describe("browser control server", () => { vi.unstubAllGlobals(); vi.restoreAllMocks(); if (prevGatewayPort === undefined) { - delete process.env.CLAWDBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; } else { - process.env.CLAWDBOT_GATEWAY_PORT = prevGatewayPort; + process.env.MOLTBOT_GATEWAY_PORT = prevGatewayPort; } const { stopBrowserControlServer } = await import("./server.js"); await stopBrowserControlServer(); @@ -285,11 +285,11 @@ describe("profile CRUD endpoints", () => { testPort = await getFreePort(); _cdpBaseUrl = `http://127.0.0.1:${testPort + 1}`; - prevGatewayPort = process.env.CLAWDBOT_GATEWAY_PORT; - process.env.CLAWDBOT_GATEWAY_PORT = String(testPort - 2); + prevGatewayPort = process.env.MOLTBOT_GATEWAY_PORT; + process.env.MOLTBOT_GATEWAY_PORT = String(testPort - 2); - prevGatewayPort = process.env.CLAWDBOT_GATEWAY_PORT; - process.env.CLAWDBOT_GATEWAY_PORT = String(testPort - 2); + prevGatewayPort = process.env.MOLTBOT_GATEWAY_PORT; + process.env.MOLTBOT_GATEWAY_PORT = String(testPort - 2); vi.stubGlobal( "fetch", @@ -305,9 +305,9 @@ describe("profile CRUD endpoints", () => { vi.unstubAllGlobals(); vi.restoreAllMocks(); if (prevGatewayPort === undefined) { - delete process.env.CLAWDBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; } else { - process.env.CLAWDBOT_GATEWAY_PORT = prevGatewayPort; + process.env.MOLTBOT_GATEWAY_PORT = prevGatewayPort; } const { stopBrowserControlServer } = await import("./server.js"); await stopBrowserControlServer(); diff --git a/src/browser/server.serves-status-starts-browser-requested.test.ts b/src/browser/server.serves-status-starts-browser-requested.test.ts index 41ea6ab47..81ce19855 100644 --- a/src/browser/server.serves-status-starts-browser-requested.test.ts +++ b/src/browser/server.serves-status-starts-browser-requested.test.ts @@ -197,8 +197,8 @@ describe("browser control server", () => { testPort = await getFreePort(); _cdpBaseUrl = `http://127.0.0.1:${testPort + 1}`; - prevGatewayPort = process.env.CLAWDBOT_GATEWAY_PORT; - process.env.CLAWDBOT_GATEWAY_PORT = String(testPort - 2); + prevGatewayPort = process.env.MOLTBOT_GATEWAY_PORT; + process.env.MOLTBOT_GATEWAY_PORT = String(testPort - 2); // Minimal CDP JSON endpoints used by the server. let putNewCalls = 0; @@ -251,9 +251,9 @@ describe("browser control server", () => { vi.unstubAllGlobals(); vi.restoreAllMocks(); if (prevGatewayPort === undefined) { - delete process.env.CLAWDBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; } else { - process.env.CLAWDBOT_GATEWAY_PORT = prevGatewayPort; + process.env.MOLTBOT_GATEWAY_PORT = prevGatewayPort; } const { stopBrowserControlServer } = await import("./server.js"); await stopBrowserControlServer(); diff --git a/src/browser/server.skips-default-maxchars-explicitly-set-zero.test.ts b/src/browser/server.skips-default-maxchars-explicitly-set-zero.test.ts index ed4d4f9f5..3432d317d 100644 --- a/src/browser/server.skips-default-maxchars-explicitly-set-zero.test.ts +++ b/src/browser/server.skips-default-maxchars-explicitly-set-zero.test.ts @@ -197,8 +197,8 @@ describe("browser control server", () => { testPort = await getFreePort(); cdpBaseUrl = `http://127.0.0.1:${testPort + 1}`; - prevGatewayPort = process.env.CLAWDBOT_GATEWAY_PORT; - process.env.CLAWDBOT_GATEWAY_PORT = String(testPort - 2); + prevGatewayPort = process.env.MOLTBOT_GATEWAY_PORT; + process.env.MOLTBOT_GATEWAY_PORT = String(testPort - 2); // Minimal CDP JSON endpoints used by the server. let putNewCalls = 0; @@ -251,9 +251,9 @@ describe("browser control server", () => { vi.unstubAllGlobals(); vi.restoreAllMocks(); if (prevGatewayPort === undefined) { - delete process.env.CLAWDBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; } else { - process.env.CLAWDBOT_GATEWAY_PORT = prevGatewayPort; + process.env.MOLTBOT_GATEWAY_PORT = prevGatewayPort; } const { stopBrowserControlServer } = await import("./server.js"); await stopBrowserControlServer(); diff --git a/src/canvas-host/a2ui.ts b/src/canvas-host/a2ui.ts index 2a19d03dc..d62908d93 100644 --- a/src/canvas-host/a2ui.ts +++ b/src/canvas-host/a2ui.ts @@ -132,8 +132,8 @@ export function injectCanvasLiveReload(html: string): string { globalThis.Moltbot.sendUserAction = sendUserAction; globalThis.moltbotPostMessage = postToNode; globalThis.moltbotSendUserAction = sendUserAction; - globalThis.clawdbotPostMessage = postToNode; - globalThis.clawdbotSendUserAction = sendUserAction; + globalThis.moltbotPostMessage = postToNode; + globalThis.moltbotSendUserAction = sendUserAction; try { const proto = location.protocol === "https:" ? "wss" : "ws"; diff --git a/src/canvas-host/server.ts b/src/canvas-host/server.ts index 11e1ccec1..aa212d873 100644 --- a/src/canvas-host/server.ts +++ b/src/canvas-host/server.ts @@ -103,25 +103,25 @@ function defaultIndexHTML() { window.webkit && window.webkit.messageHandlers && (window.webkit.messageHandlers.moltbotCanvasA2UIAction || - window.webkit.messageHandlers.clawdbotCanvasA2UIAction) + window.webkit.messageHandlers.moltbotCanvasA2UIAction) ); const hasAndroid = () => !!( (window.moltbotCanvasA2UIAction && typeof window.moltbotCanvasA2UIAction.postMessage === "function") || - (window.clawdbotCanvasA2UIAction && - typeof window.clawdbotCanvasA2UIAction.postMessage === "function") + (window.moltbotCanvasA2UIAction && + typeof window.moltbotCanvasA2UIAction.postMessage === "function") ); - const legacySend = typeof window.clawdbotSendUserAction === "function" ? window.clawdbotSendUserAction : undefined; + const legacySend = typeof window.moltbotSendUserAction === "function" ? window.moltbotSendUserAction : undefined; if (!window.moltbotSendUserAction && legacySend) { window.moltbotSendUserAction = legacySend; } - if (!window.clawdbotSendUserAction && typeof window.moltbotSendUserAction === "function") { - window.clawdbotSendUserAction = window.moltbotSendUserAction; + if (!window.moltbotSendUserAction && typeof window.moltbotSendUserAction === "function") { + window.moltbotSendUserAction = window.moltbotSendUserAction; } const hasHelper = () => typeof window.moltbotSendUserAction === "function" || - typeof window.clawdbotSendUserAction === "function"; + typeof window.moltbotSendUserAction === "function"; statusEl.innerHTML = "Bridge: " + (hasHelper() ? "ready" : "missing") + @@ -141,7 +141,7 @@ function defaultIndexHTML() { const sendUserAction = typeof window.moltbotSendUserAction === "function" ? window.moltbotSendUserAction - : window.clawdbotSendUserAction; + : window.moltbotSendUserAction; const ok = sendUserAction({ name, surfaceId: "main", @@ -199,7 +199,7 @@ async function resolveFilePath(rootReal: string, urlPath: string) { } function isDisabledByEnv() { - if (isTruthyEnvValue(process.env.CLAWDBOT_SKIP_CANVAS_HOST)) return true; + if (isTruthyEnvValue(process.env.MOLTBOT_SKIP_CANVAS_HOST)) return true; if (process.env.NODE_ENV === "test") return true; if (process.env.VITEST) return true; return false; diff --git a/src/channels/plugins/catalog.ts b/src/channels/plugins/catalog.ts index 1182b4766..f740c5d7c 100644 --- a/src/channels/plugins/catalog.ts +++ b/src/channels/plugins/catalog.ts @@ -60,7 +60,7 @@ const DEFAULT_CATALOG_PATHS = [ path.join(CONFIG_DIR, "plugins", "catalog.json"), ]; -const ENV_CATALOG_PATHS = ["CLAWDBOT_PLUGIN_CATALOG_PATHS", "CLAWDBOT_MPM_CATALOG_PATHS"]; +const ENV_CATALOG_PATHS = ["MOLTBOT_PLUGIN_CATALOG_PATHS", "MOLTBOT_MPM_CATALOG_PATHS"]; function isRecord(value: unknown): value is Record { return Boolean(value && typeof value === "object" && !Array.isArray(value)); diff --git a/src/cli/browser-cli-extension.test.ts b/src/cli/browser-cli-extension.test.ts index b750a80db..505527e6f 100644 --- a/src/cli/browser-cli-extension.test.ts +++ b/src/cli/browser-cli-extension.test.ts @@ -33,9 +33,9 @@ describe("browser extension install", () => { }); it("copies extension path to clipboard", async () => { - const prev = process.env.CLAWDBOT_STATE_DIR; + const prev = process.env.MOLTBOT_STATE_DIR; const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-ext-path-")); - process.env.CLAWDBOT_STATE_DIR = tmp; + process.env.MOLTBOT_STATE_DIR = tmp; try { copyToClipboard.mockReset(); @@ -63,8 +63,8 @@ describe("browser extension install", () => { expect(copyToClipboard).toHaveBeenCalledWith(dir); } finally { - if (prev === undefined) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = prev; + if (prev === undefined) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = prev; } }); }); diff --git a/src/cli/channel-options.ts b/src/cli/channel-options.ts index fac7fbd9e..9019dd745 100644 --- a/src/cli/channel-options.ts +++ b/src/cli/channel-options.ts @@ -18,7 +18,7 @@ function dedupe(values: string[]): string[] { export function resolveCliChannelOptions(): string[] { const catalog = listChannelPluginCatalogEntries().map((entry) => entry.id); const base = dedupe([...CHAT_CHANNEL_ORDER, ...catalog]); - if (isTruthyEnvValue(process.env.CLAWDBOT_EAGER_CHANNEL_OPTIONS)) { + if (isTruthyEnvValue(process.env.MOLTBOT_EAGER_CHANNEL_OPTIONS)) { ensurePluginRegistryLoaded(); const pluginIds = listChannelPlugins().map((plugin) => plugin.id); return dedupe([...base, ...pluginIds]); diff --git a/src/cli/cli-name.ts b/src/cli/cli-name.ts index 7b943f590..d45871a7b 100644 --- a/src/cli/cli-name.ts +++ b/src/cli/cli-name.ts @@ -10,7 +10,7 @@ export function resolveCliName( argv: string[] = process.argv, env: Record = process.env as Record, ): string { - const override = env.MOLTBOT_CLI_NAME?.trim() || env.CLAWDBOT_CLI_NAME?.trim(); + const override = env.MOLTBOT_CLI_NAME?.trim() || env.MOLTBOT_CLI_NAME?.trim(); if (override) return override; const argv1 = argv[1]; if (!argv1) return DEFAULT_CLI_NAME; diff --git a/src/cli/command-format.ts b/src/cli/command-format.ts index 156a5cd2f..92ab33b8e 100644 --- a/src/cli/command-format.ts +++ b/src/cli/command-format.ts @@ -11,7 +11,7 @@ export function formatCliCommand( ): string { const cliName = resolveCliName(undefined, env); const normalizedCommand = replaceCliName(command, cliName); - const profile = normalizeProfileName(env.CLAWDBOT_PROFILE); + const profile = normalizeProfileName(env.MOLTBOT_PROFILE); if (!profile) return normalizedCommand; if (!CLI_PREFIX_RE.test(normalizedCommand)) return normalizedCommand; if (PROFILE_FLAG_RE.test(normalizedCommand) || DEV_FLAG_RE.test(normalizedCommand)) { diff --git a/src/cli/daemon-cli.coverage.test.ts b/src/cli/daemon-cli.coverage.test.ts index 0a6d07390..85bb192e2 100644 --- a/src/cli/daemon-cli.coverage.test.ts +++ b/src/cli/daemon-cli.coverage.test.ts @@ -81,36 +81,36 @@ vi.mock("./progress.js", () => ({ describe("daemon-cli coverage", () => { const originalEnv = { - CLAWDBOT_STATE_DIR: process.env.CLAWDBOT_STATE_DIR, - CLAWDBOT_CONFIG_PATH: process.env.CLAWDBOT_CONFIG_PATH, - CLAWDBOT_GATEWAY_PORT: process.env.CLAWDBOT_GATEWAY_PORT, - CLAWDBOT_PROFILE: process.env.CLAWDBOT_PROFILE, + MOLTBOT_STATE_DIR: process.env.MOLTBOT_STATE_DIR, + MOLTBOT_CONFIG_PATH: process.env.MOLTBOT_CONFIG_PATH, + MOLTBOT_GATEWAY_PORT: process.env.MOLTBOT_GATEWAY_PORT, + MOLTBOT_PROFILE: process.env.MOLTBOT_PROFILE, }; beforeEach(() => { - process.env.CLAWDBOT_STATE_DIR = "/tmp/moltbot-cli-state"; - process.env.CLAWDBOT_CONFIG_PATH = "/tmp/moltbot-cli-state/moltbot.json"; - delete process.env.CLAWDBOT_GATEWAY_PORT; - delete process.env.CLAWDBOT_PROFILE; + process.env.MOLTBOT_STATE_DIR = "/tmp/moltbot-cli-state"; + process.env.MOLTBOT_CONFIG_PATH = "/tmp/moltbot-cli-state/moltbot.json"; + delete process.env.MOLTBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_PROFILE; serviceReadCommand.mockResolvedValue(null); }); afterEach(() => { - if (originalEnv.CLAWDBOT_STATE_DIR !== undefined) - process.env.CLAWDBOT_STATE_DIR = originalEnv.CLAWDBOT_STATE_DIR; - else delete process.env.CLAWDBOT_STATE_DIR; + if (originalEnv.MOLTBOT_STATE_DIR !== undefined) + process.env.MOLTBOT_STATE_DIR = originalEnv.MOLTBOT_STATE_DIR; + else delete process.env.MOLTBOT_STATE_DIR; - if (originalEnv.CLAWDBOT_CONFIG_PATH !== undefined) - process.env.CLAWDBOT_CONFIG_PATH = originalEnv.CLAWDBOT_CONFIG_PATH; - else delete process.env.CLAWDBOT_CONFIG_PATH; + if (originalEnv.MOLTBOT_CONFIG_PATH !== undefined) + process.env.MOLTBOT_CONFIG_PATH = originalEnv.MOLTBOT_CONFIG_PATH; + else delete process.env.MOLTBOT_CONFIG_PATH; - if (originalEnv.CLAWDBOT_GATEWAY_PORT !== undefined) - process.env.CLAWDBOT_GATEWAY_PORT = originalEnv.CLAWDBOT_GATEWAY_PORT; - else delete process.env.CLAWDBOT_GATEWAY_PORT; + if (originalEnv.MOLTBOT_GATEWAY_PORT !== undefined) + process.env.MOLTBOT_GATEWAY_PORT = originalEnv.MOLTBOT_GATEWAY_PORT; + else delete process.env.MOLTBOT_GATEWAY_PORT; - if (originalEnv.CLAWDBOT_PROFILE !== undefined) - process.env.CLAWDBOT_PROFILE = originalEnv.CLAWDBOT_PROFILE; - else delete process.env.CLAWDBOT_PROFILE; + if (originalEnv.MOLTBOT_PROFILE !== undefined) + process.env.MOLTBOT_PROFILE = originalEnv.MOLTBOT_PROFILE; + else delete process.env.MOLTBOT_PROFILE; }); it("probes gateway status by default", async () => { @@ -140,10 +140,10 @@ describe("daemon-cli coverage", () => { serviceReadCommand.mockResolvedValueOnce({ programArguments: ["/bin/node", "cli", "gateway", "--port", "19001"], environment: { - CLAWDBOT_PROFILE: "dev", - CLAWDBOT_STATE_DIR: "/tmp/moltbot-daemon-state", - CLAWDBOT_CONFIG_PATH: "/tmp/moltbot-daemon-state/moltbot.json", - CLAWDBOT_GATEWAY_PORT: "19001", + MOLTBOT_PROFILE: "dev", + MOLTBOT_STATE_DIR: "/tmp/moltbot-daemon-state", + MOLTBOT_CONFIG_PATH: "/tmp/moltbot-daemon-state/moltbot.json", + MOLTBOT_GATEWAY_PORT: "19001", }, sourcePath: "/tmp/bot.molt.gateway.plist", }); diff --git a/src/cli/daemon-cli/install.ts b/src/cli/daemon-cli/install.ts index e479d2037..fc410421a 100644 --- a/src/cli/daemon-cli/install.ts +++ b/src/cli/daemon-cli/install.ts @@ -94,7 +94,7 @@ export async function runDaemonInstall(opts: DaemonInstallOptions) { const { programArguments, workingDirectory, environment } = await buildGatewayInstallPlan({ env: process.env, port, - token: opts.token || cfg.gateway?.auth?.token || process.env.CLAWDBOT_GATEWAY_TOKEN, + token: opts.token || cfg.gateway?.auth?.token || process.env.MOLTBOT_GATEWAY_TOKEN, runtime: runtimeRaw, warn: (message) => { if (json) warnings.push(message); diff --git a/src/cli/daemon-cli/shared.ts b/src/cli/daemon-cli/shared.ts index af4e0ff41..f672bbbb7 100644 --- a/src/cli/daemon-cli/shared.ts +++ b/src/cli/daemon-cli/shared.ts @@ -53,11 +53,11 @@ export function pickProbeHostForBind( const SAFE_DAEMON_ENV_KEYS = [ "MOLTBOT_STATE_DIR", "MOLTBOT_CONFIG_PATH", - "CLAWDBOT_PROFILE", - "CLAWDBOT_STATE_DIR", - "CLAWDBOT_CONFIG_PATH", - "CLAWDBOT_GATEWAY_PORT", - "CLAWDBOT_NIX_MODE", + "MOLTBOT_PROFILE", + "MOLTBOT_STATE_DIR", + "MOLTBOT_CONFIG_PATH", + "MOLTBOT_GATEWAY_PORT", + "MOLTBOT_NIX_MODE", ]; export function filterDaemonEnv(env: Record | undefined): Record { @@ -142,10 +142,10 @@ export function renderRuntimeHints( hints.push(`Launchd stdout (if installed): ${logs.stdoutPath}`); hints.push(`Launchd stderr (if installed): ${logs.stderrPath}`); } else if (process.platform === "linux") { - const unit = resolveGatewaySystemdServiceName(env.CLAWDBOT_PROFILE); + const unit = resolveGatewaySystemdServiceName(env.MOLTBOT_PROFILE); hints.push(`Logs: journalctl --user -u ${unit}.service -n 200 --no-pager`); } else if (process.platform === "win32") { - const task = resolveGatewayWindowsTaskName(env.CLAWDBOT_PROFILE); + const task = resolveGatewayWindowsTaskName(env.MOLTBOT_PROFILE); hints.push(`Logs: schtasks /Query /TN "${task}" /V /FO LIST`); } } @@ -157,7 +157,7 @@ export function renderGatewayServiceStartHints(env: NodeJS.ProcessEnv = process. formatCliCommand("moltbot gateway install", env), formatCliCommand("moltbot gateway", env), ]; - const profile = env.CLAWDBOT_PROFILE; + const profile = env.MOLTBOT_PROFILE; switch (process.platform) { case "darwin": { const label = resolveGatewayLaunchAgentLabel(profile); diff --git a/src/cli/daemon-cli/status.gather.ts b/src/cli/daemon-cli/status.gather.ts index c4b97aa53..0ba9054ba 100644 --- a/src/cli/daemon-cli/status.gather.ts +++ b/src/cli/daemon-cli/status.gather.ts @@ -225,12 +225,10 @@ export async function gatherDaemonStatus( ? await probeGatewayStatus({ url: probeUrl, token: - opts.rpc.token || - mergedDaemonEnv.CLAWDBOT_GATEWAY_TOKEN || - daemonCfg.gateway?.auth?.token, + opts.rpc.token || mergedDaemonEnv.MOLTBOT_GATEWAY_TOKEN || daemonCfg.gateway?.auth?.token, password: opts.rpc.password || - mergedDaemonEnv.CLAWDBOT_GATEWAY_PASSWORD || + mergedDaemonEnv.MOLTBOT_GATEWAY_PASSWORD || daemonCfg.gateway?.auth?.password, timeoutMs, json: opts.rpc.json, diff --git a/src/cli/daemon-cli/status.print.ts b/src/cli/daemon-cli/status.print.ts index b8e2fde72..00a3f5c91 100644 --- a/src/cli/daemon-cli/status.print.ts +++ b/src/cli/daemon-cli/status.print.ts @@ -134,7 +134,7 @@ export function printDaemonStatus(status: DaemonStatus, opts: { json: boolean }) ); defaultRuntime.error( errorText( - `Fix: rerun \`${formatCliCommand("moltbot gateway install --force")}\` from the same --profile / CLAWDBOT_STATE_DIR you expect.`, + `Fix: rerun \`${formatCliCommand("moltbot gateway install --force")}\` from the same --profile / MOLTBOT_STATE_DIR you expect.`, ), ); } @@ -230,7 +230,7 @@ export function printDaemonStatus(status: DaemonStatus, opts: { json: boolean }) if (service.runtime?.cachedLabel) { const env = (service.command?.environment ?? process.env) as NodeJS.ProcessEnv; - const labelValue = resolveGatewayLaunchAgentLabel(env.CLAWDBOT_PROFILE); + const labelValue = resolveGatewayLaunchAgentLabel(env.MOLTBOT_PROFILE); defaultRuntime.error( errorText( `LaunchAgent label cached but plist missing. Clear with: launchctl bootout gui/$UID/${labelValue}`, @@ -273,7 +273,7 @@ export function printDaemonStatus(status: DaemonStatus, opts: { json: boolean }) } if (process.platform === "linux") { const env = (service.command?.environment ?? process.env) as NodeJS.ProcessEnv; - const unit = resolveGatewaySystemdServiceName(env.CLAWDBOT_PROFILE); + const unit = resolveGatewaySystemdServiceName(env.MOLTBOT_PROFILE); defaultRuntime.error( errorText(`Logs: journalctl --user -u ${unit}.service -n 200 --no-pager`), ); diff --git a/src/cli/dns-cli.ts b/src/cli/dns-cli.ts index a39026f1d..ea4cdc213 100644 --- a/src/cli/dns-cli.ts +++ b/src/cli/dns-cli.ts @@ -134,7 +134,7 @@ export function registerDnsCli(program: Command) { }).trimEnd(), ); defaultRuntime.log(""); - defaultRuntime.log(theme.heading("Recommended ~/.clawdbot/moltbot.json:")); + defaultRuntime.log(theme.heading("Recommended ~/.moltbot/moltbot.json:")); defaultRuntime.log( JSON.stringify( { @@ -233,7 +233,7 @@ export function registerDnsCli(program: Command) { defaultRuntime.log(""); defaultRuntime.log( theme.muted( - "Note: enable discovery.wideArea.enabled in ~/.clawdbot/moltbot.json on the gateway and restart the gateway so it writes the DNS-SD zone.", + "Note: enable discovery.wideArea.enabled in ~/.moltbot/moltbot.json on the gateway and restart the gateway so it writes the DNS-SD zone.", ), ); } diff --git a/src/cli/gateway-cli.coverage.test.ts b/src/cli/gateway-cli.coverage.test.ts index 09985f227..4faf7702c 100644 --- a/src/cli/gateway-cli.coverage.test.ts +++ b/src/cli/gateway-cli.coverage.test.ts @@ -174,7 +174,7 @@ describe("gateway-cli coverage", () => { instanceName: "Studio (Moltbot)", displayName: "Studio", domain: "moltbot.internal.", - host: "studio.clawdbot.internal", + host: "studio.moltbot.internal", lanHost: "studio.local", tailnetDns: "studio.tailnet.ts.net", gatewayPort: 18789, @@ -196,7 +196,7 @@ describe("gateway-cli coverage", () => { expect(out).toContain("Found 1 gateway(s)"); expect(out).toContain("- Studio moltbot.internal."); expect(out).toContain(" tailnet: studio.tailnet.ts.net"); - expect(out).toContain(" host: studio.clawdbot.internal"); + expect(out).toContain(" host: studio.moltbot.internal"); expect(out).toContain(" ws: ws://studio.tailnet.ts.net:18789"); }); @@ -318,7 +318,7 @@ describe("gateway-cli coverage", () => { }); it("uses env/config port when --port is omitted", async () => { - await withEnvOverride({ CLAWDBOT_GATEWAY_PORT: "19001" }, async () => { + await withEnvOverride({ MOLTBOT_GATEWAY_PORT: "19001" }, async () => { runtimeLogs.length = 0; runtimeErrors.length = 0; startGatewayServer.mockClear(); diff --git a/src/cli/gateway-cli/dev.ts b/src/cli/gateway-cli/dev.ts index 565df14b8..eb04a76a5 100644 --- a/src/cli/gateway-cli/dev.ts +++ b/src/cli/gateway-cli/dev.ts @@ -32,7 +32,7 @@ async function loadDevTemplate(name: string, fallback: string): Promise const resolveDevWorkspaceDir = (env: NodeJS.ProcessEnv = process.env): string => { const baseDir = resolveDefaultAgentWorkspaceDir(env, os.homedir); - const profile = env.CLAWDBOT_PROFILE?.trim().toLowerCase(); + const profile = env.MOLTBOT_PROFILE?.trim().toLowerCase(); if (profile === "dev") return baseDir; return `${baseDir}-${DEV_AGENT_WORKSPACE_SUFFIX}`; }; diff --git a/src/cli/gateway-cli/run.ts b/src/cli/gateway-cli/run.ts index cb26aa98d..dd8aae9c1 100644 --- a/src/cli/gateway-cli/run.ts +++ b/src/cli/gateway-cli/run.ts @@ -53,7 +53,7 @@ type GatewayRunOpts = { const gatewayLog = createSubsystemLogger("gateway"); async function runGatewayCommand(opts: GatewayRunOpts) { - const isDevProfile = process.env.CLAWDBOT_PROFILE?.trim().toLowerCase() === "dev"; + const isDevProfile = process.env.MOLTBOT_PROFILE?.trim().toLowerCase() === "dev"; const devMode = Boolean(opts.dev) || isDevProfile; if (opts.reset && !devMode) { defaultRuntime.error("Use --reset with --dev."); @@ -65,7 +65,7 @@ async function runGatewayCommand(opts: GatewayRunOpts) { setVerbose(Boolean(opts.verbose)); if (opts.claudeCliLogs) { setConsoleSubsystemFilter(["agent/claude-cli"]); - process.env.CLAWDBOT_CLAUDE_CLI_LOG_OUTPUT = "1"; + process.env.MOLTBOT_CLAUDE_CLI_LOG_OUTPUT = "1"; } const wsLogRaw = (opts.compact ? "compact" : opts.wsLog) as string | undefined; const wsLogStyle: GatewayWsLogStyle = @@ -82,11 +82,11 @@ async function runGatewayCommand(opts: GatewayRunOpts) { setGatewayWsLogStyle(wsLogStyle); if (opts.rawStream) { - process.env.CLAWDBOT_RAW_STREAM = "1"; + process.env.MOLTBOT_RAW_STREAM = "1"; } const rawStreamPath = toOptionString(opts.rawStreamPath); if (rawStreamPath) { - process.env.CLAWDBOT_RAW_STREAM_PATH = rawStreamPath; + process.env.MOLTBOT_RAW_STREAM_PATH = rawStreamPath; } if (devMode) { @@ -134,7 +134,7 @@ async function runGatewayCommand(opts: GatewayRunOpts) { } if (opts.token) { const token = toOptionString(opts.token); - if (token) process.env.CLAWDBOT_GATEWAY_TOKEN = token; + if (token) process.env.MOLTBOT_GATEWAY_TOKEN = token; } const authModeRaw = toOptionString(opts.auth); const authMode: GatewayAuthMode | null = @@ -220,7 +220,7 @@ async function runGatewayCommand(opts: GatewayRunOpts) { defaultRuntime.error( [ "Gateway auth is set to token, but no token is configured.", - "Set gateway.auth.token (or CLAWDBOT_GATEWAY_TOKEN), or pass --token.", + "Set gateway.auth.token (or MOLTBOT_GATEWAY_TOKEN), or pass --token.", ...authHints, ] .filter(Boolean) @@ -233,7 +233,7 @@ async function runGatewayCommand(opts: GatewayRunOpts) { defaultRuntime.error( [ "Gateway auth is set to password, but no password is configured.", - "Set gateway.auth.password (or CLAWDBOT_GATEWAY_PASSWORD), or pass --password.", + "Set gateway.auth.password (or MOLTBOT_GATEWAY_PASSWORD), or pass --password.", ...authHints, ] .filter(Boolean) @@ -246,7 +246,7 @@ async function runGatewayCommand(opts: GatewayRunOpts) { defaultRuntime.error( [ `Refusing to bind gateway to ${bind} without auth.`, - "Set gateway.auth.token/password (or CLAWDBOT_GATEWAY_TOKEN/CLAWDBOT_GATEWAY_PASSWORD) or pass --token/--password.", + "Set gateway.auth.token/password (or MOLTBOT_GATEWAY_TOKEN/MOLTBOT_GATEWAY_PASSWORD) or pass --token/--password.", ...authHints, ] .filter(Boolean) @@ -316,7 +316,7 @@ export function addGatewayRunCommand(cmd: Command): Command { ) .option( "--token ", - "Shared token required in connect.params.auth.token (default: CLAWDBOT_GATEWAY_TOKEN env if set)", + "Shared token required in connect.params.auth.token (default: MOLTBOT_GATEWAY_TOKEN env if set)", ) .option("--auth ", 'Gateway auth mode ("token"|"password")') .option("--password ", "Password for auth mode=password") diff --git a/src/cli/gateway-cli/shared.ts b/src/cli/gateway-cli/shared.ts index 83945e074..3f2bd4504 100644 --- a/src/cli/gateway-cli/shared.ts +++ b/src/cli/gateway-cli/shared.ts @@ -64,7 +64,7 @@ export function extractGatewayMiskeys(parsed: unknown): { } export function renderGatewayServiceStopHints(env: NodeJS.ProcessEnv = process.env): string[] { - const profile = env.CLAWDBOT_PROFILE; + const profile = env.MOLTBOT_PROFILE; switch (process.platform) { case "darwin": return [ diff --git a/src/cli/gateway.sigterm.test.ts b/src/cli/gateway.sigterm.test.ts index 4ebf371d8..8a22793a5 100644 --- a/src/cli/gateway.sigterm.test.ts +++ b/src/cli/gateway.sigterm.test.ts @@ -84,13 +84,13 @@ describe("gateway SIGTERM", () => { const nodeBin = process.execPath; const env = { ...process.env, - CLAWDBOT_NO_RESPAWN: "1", - CLAWDBOT_STATE_DIR: stateDir, - CLAWDBOT_SKIP_CHANNELS: "1", - CLAWDBOT_SKIP_GMAIL_WATCHER: "1", - CLAWDBOT_SKIP_CRON: "1", - CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER: "1", - CLAWDBOT_SKIP_CANVAS_HOST: "1", + MOLTBOT_NO_RESPAWN: "1", + MOLTBOT_STATE_DIR: stateDir, + MOLTBOT_SKIP_CHANNELS: "1", + MOLTBOT_SKIP_GMAIL_WATCHER: "1", + MOLTBOT_SKIP_CRON: "1", + MOLTBOT_SKIP_BROWSER_CONTROL_SERVER: "1", + MOLTBOT_SKIP_CANVAS_HOST: "1", }; const bootstrapPath = path.join(stateDir, "moltbot-entry-bootstrap.mjs"); const runLoopPath = path.resolve("src/cli/gateway-cli/run-loop.ts"); diff --git a/src/cli/node-cli/daemon.ts b/src/cli/node-cli/daemon.ts index c51496ec9..8a4f056ec 100644 --- a/src/cli/node-cli/daemon.ts +++ b/src/cli/node-cli/daemon.ts @@ -561,7 +561,7 @@ export async function runNodeDaemonStatus(opts: NodeDaemonStatusOptions = {}) { }; const hintEnv = { ...baseEnv, - CLAWDBOT_LOG_PREFIX: baseEnv.CLAWDBOT_LOG_PREFIX ?? "node", + MOLTBOT_LOG_PREFIX: baseEnv.MOLTBOT_LOG_PREFIX ?? "node", } as NodeJS.ProcessEnv; if (runtime?.missingUnit) { diff --git a/src/cli/profile.test.ts b/src/cli/profile.test.ts index f1f9c7a03..c2ff067d1 100644 --- a/src/cli/profile.test.ts +++ b/src/cli/profile.test.ts @@ -55,26 +55,26 @@ describe("applyCliProfileEnv", () => { env, homedir: () => "/home/peter", }); - const expectedStateDir = path.join("/home/peter", ".clawdbot-dev"); - expect(env.CLAWDBOT_PROFILE).toBe("dev"); - expect(env.CLAWDBOT_STATE_DIR).toBe(expectedStateDir); - expect(env.CLAWDBOT_CONFIG_PATH).toBe(path.join(expectedStateDir, "moltbot.json")); - expect(env.CLAWDBOT_GATEWAY_PORT).toBe("19001"); + const expectedStateDir = path.join("/home/peter", ".moltbot-dev"); + expect(env.MOLTBOT_PROFILE).toBe("dev"); + expect(env.MOLTBOT_STATE_DIR).toBe(expectedStateDir); + expect(env.MOLTBOT_CONFIG_PATH).toBe(path.join(expectedStateDir, "moltbot.json")); + expect(env.MOLTBOT_GATEWAY_PORT).toBe("19001"); }); it("does not override explicit env values", () => { const env: Record = { - CLAWDBOT_STATE_DIR: "/custom", - CLAWDBOT_GATEWAY_PORT: "19099", + MOLTBOT_STATE_DIR: "/custom", + MOLTBOT_GATEWAY_PORT: "19099", }; applyCliProfileEnv({ profile: "dev", env, homedir: () => "/home/peter", }); - expect(env.CLAWDBOT_STATE_DIR).toBe("/custom"); - expect(env.CLAWDBOT_GATEWAY_PORT).toBe("19099"); - expect(env.CLAWDBOT_CONFIG_PATH).toBe(path.join("/custom", "moltbot.json")); + expect(env.MOLTBOT_STATE_DIR).toBe("/custom"); + expect(env.MOLTBOT_GATEWAY_PORT).toBe("19099"); + expect(env.MOLTBOT_CONFIG_PATH).toBe(path.join("/custom", "moltbot.json")); }); }); @@ -84,55 +84,53 @@ describe("formatCliCommand", () => { }); it("returns command unchanged when profile is default", () => { - expect(formatCliCommand("moltbot doctor --fix", { CLAWDBOT_PROFILE: "default" })).toBe( + expect(formatCliCommand("moltbot doctor --fix", { MOLTBOT_PROFILE: "default" })).toBe( "moltbot doctor --fix", ); }); it("returns command unchanged when profile is Default (case-insensitive)", () => { - expect(formatCliCommand("moltbot doctor --fix", { CLAWDBOT_PROFILE: "Default" })).toBe( + expect(formatCliCommand("moltbot doctor --fix", { MOLTBOT_PROFILE: "Default" })).toBe( "moltbot doctor --fix", ); }); it("returns command unchanged when profile is invalid", () => { - expect(formatCliCommand("moltbot doctor --fix", { CLAWDBOT_PROFILE: "bad profile" })).toBe( + expect(formatCliCommand("moltbot doctor --fix", { MOLTBOT_PROFILE: "bad profile" })).toBe( "moltbot doctor --fix", ); }); it("returns command unchanged when --profile is already present", () => { expect( - formatCliCommand("moltbot --profile work doctor --fix", { CLAWDBOT_PROFILE: "work" }), + formatCliCommand("moltbot --profile work doctor --fix", { MOLTBOT_PROFILE: "work" }), ).toBe("moltbot --profile work doctor --fix"); }); it("returns command unchanged when --dev is already present", () => { - expect(formatCliCommand("moltbot --dev doctor", { CLAWDBOT_PROFILE: "dev" })).toBe( + expect(formatCliCommand("moltbot --dev doctor", { MOLTBOT_PROFILE: "dev" })).toBe( "moltbot --dev doctor", ); }); it("inserts --profile flag when profile is set", () => { - expect(formatCliCommand("moltbot doctor --fix", { CLAWDBOT_PROFILE: "work" })).toBe( + expect(formatCliCommand("moltbot doctor --fix", { MOLTBOT_PROFILE: "work" })).toBe( "moltbot --profile work doctor --fix", ); }); it("trims whitespace from profile", () => { - expect(formatCliCommand("moltbot doctor --fix", { CLAWDBOT_PROFILE: " jbclawd " })).toBe( + expect(formatCliCommand("moltbot doctor --fix", { MOLTBOT_PROFILE: " jbclawd " })).toBe( "moltbot --profile jbclawd doctor --fix", ); }); it("handles command with no args after moltbot", () => { - expect(formatCliCommand("moltbot", { CLAWDBOT_PROFILE: "test" })).toBe( - "moltbot --profile test", - ); + expect(formatCliCommand("moltbot", { MOLTBOT_PROFILE: "test" })).toBe("moltbot --profile test"); }); it("handles pnpm wrapper", () => { - expect(formatCliCommand("pnpm moltbot doctor", { CLAWDBOT_PROFILE: "work" })).toBe( + expect(formatCliCommand("pnpm moltbot doctor", { MOLTBOT_PROFILE: "work" })).toBe( "pnpm moltbot --profile work doctor", ); }); diff --git a/src/cli/profile.ts b/src/cli/profile.ts index 755eaebc5..f76eaffc0 100644 --- a/src/cli/profile.ts +++ b/src/cli/profile.ts @@ -82,7 +82,7 @@ export function parseCliProfileArgs(argv: string[]): CliProfileParseResult { function resolveProfileStateDir(profile: string, homedir: () => string): string { const suffix = profile.toLowerCase() === "default" ? "" : `-${profile}`; - return path.join(homedir(), `.clawdbot${suffix}`); + return path.join(homedir(), `.moltbot${suffix}`); } export function applyCliProfileEnv(params: { @@ -96,16 +96,16 @@ export function applyCliProfileEnv(params: { if (!profile) return; // Convenience only: fill defaults, never override explicit env values. - env.CLAWDBOT_PROFILE = profile; + env.MOLTBOT_PROFILE = profile; - const stateDir = env.CLAWDBOT_STATE_DIR?.trim() || resolveProfileStateDir(profile, homedir); - if (!env.CLAWDBOT_STATE_DIR?.trim()) env.CLAWDBOT_STATE_DIR = stateDir; + const stateDir = env.MOLTBOT_STATE_DIR?.trim() || resolveProfileStateDir(profile, homedir); + if (!env.MOLTBOT_STATE_DIR?.trim()) env.MOLTBOT_STATE_DIR = stateDir; - if (!env.CLAWDBOT_CONFIG_PATH?.trim()) { - env.CLAWDBOT_CONFIG_PATH = path.join(stateDir, "moltbot.json"); + if (!env.MOLTBOT_CONFIG_PATH?.trim()) { + env.MOLTBOT_CONFIG_PATH = path.join(stateDir, "moltbot.json"); } - if (profile === "dev" && !env.CLAWDBOT_GATEWAY_PORT?.trim()) { - env.CLAWDBOT_GATEWAY_PORT = "19001"; + if (profile === "dev" && !env.MOLTBOT_GATEWAY_PORT?.trim()) { + env.MOLTBOT_GATEWAY_PORT = "19001"; } } diff --git a/src/cli/program/help.ts b/src/cli/program/help.ts index 6c872477c..b2d540cc2 100644 --- a/src/cli/program/help.ts +++ b/src/cli/program/help.ts @@ -34,11 +34,11 @@ export function configureProgramHelp(program: Command, ctx: ProgramContext) { .version(ctx.programVersion) .option( "--dev", - "Dev profile: isolate state under ~/.clawdbot-dev, default gateway port 19001, and shift derived ports (browser/canvas)", + "Dev profile: isolate state under ~/.moltbot-dev, default gateway port 19001, and shift derived ports (browser/canvas)", ) .option( "--profile ", - "Use a named profile (isolates CLAWDBOT_STATE_DIR/CLAWDBOT_CONFIG_PATH under ~/.clawdbot-)", + "Use a named profile (isolates MOLTBOT_STATE_DIR/MOLTBOT_CONFIG_PATH under ~/.moltbot-)", ); program.option("--no-color", "Disable ANSI colors", false); diff --git a/src/cli/program/preaction.ts b/src/cli/program/preaction.ts index acdcde387..d1b01eaa6 100644 --- a/src/cli/program/preaction.ts +++ b/src/cli/program/preaction.ts @@ -29,7 +29,7 @@ export function registerPreActionHooks(program: Command, programVersion: string) if (hasHelpOrVersion(argv)) return; const commandPath = getCommandPath(argv, 2); const hideBanner = - isTruthyEnvValue(process.env.CLAWDBOT_HIDE_BANNER) || + isTruthyEnvValue(process.env.MOLTBOT_HIDE_BANNER) || commandPath[0] === "update" || (commandPath[0] === "plugins" && commandPath[1] === "update"); if (!hideBanner) { diff --git a/src/cli/program/register.setup.ts b/src/cli/program/register.setup.ts index 53c33a670..92b7099c8 100644 --- a/src/cli/program/register.setup.ts +++ b/src/cli/program/register.setup.ts @@ -10,7 +10,7 @@ import { runCommandWithRuntime } from "../cli-utils.js"; export function registerSetupCommand(program: Command) { program .command("setup") - .description("Initialize ~/.clawdbot/moltbot.json and the agent workspace") + .description("Initialize ~/.moltbot/moltbot.json and the agent workspace") .addHelpText( "after", () => diff --git a/src/cli/program/register.subclis.test.ts b/src/cli/program/register.subclis.test.ts index f27236182..79358dfab 100644 --- a/src/cli/program/register.subclis.test.ts +++ b/src/cli/program/register.subclis.test.ts @@ -29,7 +29,7 @@ describe("registerSubCliCommands", () => { beforeEach(() => { process.env = { ...originalEnv }; - delete process.env.CLAWDBOT_DISABLE_LAZY_SUBCOMMANDS; + delete process.env.MOLTBOT_DISABLE_LAZY_SUBCOMMANDS; registerAcpCli.mockClear(); acpAction.mockClear(); registerNodesCli.mockClear(); diff --git a/src/cli/program/register.subclis.ts b/src/cli/program/register.subclis.ts index e5684fbea..3aae9b361 100644 --- a/src/cli/program/register.subclis.ts +++ b/src/cli/program/register.subclis.ts @@ -13,13 +13,13 @@ type SubCliEntry = { }; const shouldRegisterPrimaryOnly = (argv: string[]) => { - if (isTruthyEnvValue(process.env.CLAWDBOT_DISABLE_LAZY_SUBCOMMANDS)) return false; + if (isTruthyEnvValue(process.env.MOLTBOT_DISABLE_LAZY_SUBCOMMANDS)) return false; if (hasHelpOrVersion(argv)) return false; return true; }; const shouldEagerRegisterSubcommands = (_argv: string[]) => { - return isTruthyEnvValue(process.env.CLAWDBOT_DISABLE_LAZY_SUBCOMMANDS); + return isTruthyEnvValue(process.env.MOLTBOT_DISABLE_LAZY_SUBCOMMANDS); }; const loadConfig = async (): Promise => { diff --git a/src/cli/route.ts b/src/cli/route.ts index 885904964..d4d77d553 100644 --- a/src/cli/route.ts +++ b/src/cli/route.ts @@ -20,7 +20,7 @@ async function prepareRoutedCommand(params: { } export async function tryRouteCli(argv: string[]): Promise { - if (isTruthyEnvValue(process.env.CLAWDBOT_DISABLE_ROUTE_FIRST)) return false; + if (isTruthyEnvValue(process.env.MOLTBOT_DISABLE_ROUTE_FIRST)) return false; if (hasHelpOrVersion(argv)) return false; const path = getCommandPath(argv, 2); diff --git a/src/cli/tagline.ts b/src/cli/tagline.ts index bbadf2500..2e1cc66d7 100644 --- a/src/cli/tagline.ts +++ b/src/cli/tagline.ts @@ -241,7 +241,7 @@ export function activeTaglines(options: TaglineOptions = {}): string[] { export function pickTagline(options: TaglineOptions = {}): string { const env = options.env ?? process.env; - const override = env?.CLAWDBOT_TAGLINE_INDEX; + const override = env?.MOLTBOT_TAGLINE_INDEX; if (override !== undefined) { const parsed = Number.parseInt(override, 10); if (!Number.isNaN(parsed) && parsed >= 0) { diff --git a/src/cli/update-cli.test.ts b/src/cli/update-cli.test.ts index 521ac3d45..032c3bc61 100644 --- a/src/cli/update-cli.test.ts +++ b/src/cli/update-cli.test.ts @@ -637,10 +637,10 @@ describe("update-cli", () => { it("updateWizardCommand offers dev checkout and forwards selections", async () => { const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-update-wizard-")); - const previousGitDir = process.env.CLAWDBOT_GIT_DIR; + const previousGitDir = process.env.MOLTBOT_GIT_DIR; try { setTty(true); - process.env.CLAWDBOT_GIT_DIR = tempDir; + process.env.MOLTBOT_GIT_DIR = tempDir; const { checkUpdateStatus } = await import("../infra/update-check.js"); const { runGatewayUpdate } = await import("../infra/update-runner.js"); @@ -671,7 +671,7 @@ describe("update-cli", () => { const call = vi.mocked(runGatewayUpdate).mock.calls[0]?.[0]; expect(call?.channel).toBe("dev"); } finally { - process.env.CLAWDBOT_GIT_DIR = previousGitDir; + process.env.MOLTBOT_GIT_DIR = previousGitDir; await fs.rm(tempDir, { recursive: true, force: true }); } }); diff --git a/src/cli/update-cli.ts b/src/cli/update-cli.ts index 1bee23c69..9eac9389d 100644 --- a/src/cli/update-cli.ts +++ b/src/cli/update-cli.ts @@ -114,7 +114,7 @@ const MAX_LOG_CHARS = 8000; const DEFAULT_PACKAGE_NAME = "moltbot"; const CORE_PACKAGE_NAMES = new Set([DEFAULT_PACKAGE_NAME, "moltbot"]); const CLI_NAME = resolveCliName(); -const CLAWDBOT_REPO_URL = "https://github.com/moltbot/moltbot.git"; +const MOLTBOT_REPO_URL = "https://github.com/moltbot/moltbot.git"; const DEFAULT_GIT_DIR = path.join(os.homedir(), "moltbot"); function normalizeTag(value?: string | null): string | null { @@ -200,7 +200,7 @@ async function isEmptyDir(targetPath: string): Promise { } function resolveGitInstallDir(): string { - const override = process.env.CLAWDBOT_GIT_DIR?.trim(); + const override = process.env.MOLTBOT_GIT_DIR?.trim(); if (override) return path.resolve(override); return DEFAULT_GIT_DIR; } @@ -261,7 +261,7 @@ async function ensureGitCheckout(params: { if (!dirExists) { return await runUpdateStep({ name: "git clone", - argv: ["git", "clone", CLAWDBOT_REPO_URL, params.dir], + argv: ["git", "clone", MOLTBOT_REPO_URL, params.dir], timeoutMs: params.timeoutMs, progress: params.progress, }); @@ -271,12 +271,12 @@ async function ensureGitCheckout(params: { const empty = await isEmptyDir(params.dir); if (!empty) { throw new Error( - `CLAWDBOT_GIT_DIR points at a non-git directory: ${params.dir}. Set CLAWDBOT_GIT_DIR to an empty folder or a moltbot checkout.`, + `MOLTBOT_GIT_DIR points at a non-git directory: ${params.dir}. Set MOLTBOT_GIT_DIR to an empty folder or a moltbot checkout.`, ); } return await runUpdateStep({ name: "git clone", - argv: ["git", "clone", CLAWDBOT_REPO_URL, params.dir], + argv: ["git", "clone", MOLTBOT_REPO_URL, params.dir], cwd: params.dir, timeoutMs: params.timeoutMs, progress: params.progress, @@ -284,7 +284,7 @@ async function ensureGitCheckout(params: { } if (!(await isCorePackage(params.dir))) { - throw new Error(`CLAWDBOT_GIT_DIR does not look like a core checkout: ${params.dir}.`); + throw new Error(`MOLTBOT_GIT_DIR does not look like a core checkout: ${params.dir}.`); } return null; @@ -929,7 +929,7 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise { if (!opts.json && restarted) { defaultRuntime.log(theme.success("Daemon restarted successfully.")); defaultRuntime.log(""); - process.env.CLAWDBOT_UPDATE_IN_PROGRESS = "1"; + process.env.MOLTBOT_UPDATE_IN_PROGRESS = "1"; try { const { doctorCommand } = await import("../commands/doctor.js"); const interactiveDoctor = Boolean(process.stdin.isTTY) && !opts.json && opts.yes !== true; @@ -937,7 +937,7 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise { } catch (err) { defaultRuntime.log(theme.warn(`Doctor failed: ${String(err)}`)); } finally { - delete process.env.CLAWDBOT_UPDATE_IN_PROGRESS; + delete process.env.MOLTBOT_UPDATE_IN_PROGRESS; } } } catch (err) { @@ -1066,7 +1066,7 @@ export async function updateWizardCommand(opts: UpdateWizardOptions = {}): Promi const empty = await isEmptyDir(gitDir); if (!empty) { defaultRuntime.error( - `CLAWDBOT_GIT_DIR points at a non-git directory: ${gitDir}. Set CLAWDBOT_GIT_DIR to an empty folder or a moltbot checkout.`, + `MOLTBOT_GIT_DIR points at a non-git directory: ${gitDir}. Set MOLTBOT_GIT_DIR to an empty folder or a moltbot checkout.`, ); defaultRuntime.exit(1); return; @@ -1074,7 +1074,7 @@ export async function updateWizardCommand(opts: UpdateWizardOptions = {}): Promi } const ok = await confirm({ message: stylePromptMessage( - `Create a git checkout at ${gitDir}? (override via CLAWDBOT_GIT_DIR)`, + `Create a git checkout at ${gitDir}? (override via MOLTBOT_GIT_DIR)`, ), initialValue: true, }); diff --git a/src/commands/auth-choice.test.ts b/src/commands/auth-choice.test.ts index 981588410..d8efe9306 100644 --- a/src/commands/auth-choice.test.ts +++ b/src/commands/auth-choice.test.ts @@ -22,14 +22,14 @@ const noopAsync = async () => {}; const noop = () => {}; const authProfilePathFor = (agentDir: string) => path.join(agentDir, "auth-profiles.json"); const requireAgentDir = () => { - const agentDir = process.env.CLAWDBOT_AGENT_DIR; - if (!agentDir) throw new Error("CLAWDBOT_AGENT_DIR not set"); + const agentDir = process.env.MOLTBOT_AGENT_DIR; + if (!agentDir) throw new Error("MOLTBOT_AGENT_DIR not set"); return agentDir; }; describe("applyAuthChoice", () => { - const previousStateDir = process.env.CLAWDBOT_STATE_DIR; - const previousAgentDir = process.env.CLAWDBOT_AGENT_DIR; + const previousStateDir = process.env.MOLTBOT_STATE_DIR; + const previousAgentDir = process.env.MOLTBOT_AGENT_DIR; const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR; const previousOpenrouterKey = process.env.OPENROUTER_API_KEY; const previousAiGatewayKey = process.env.AI_GATEWAY_API_KEY; @@ -45,14 +45,14 @@ describe("applyAuthChoice", () => { tempStateDir = null; } if (previousStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = previousStateDir; + process.env.MOLTBOT_STATE_DIR = previousStateDir; } if (previousAgentDir === undefined) { - delete process.env.CLAWDBOT_AGENT_DIR; + delete process.env.MOLTBOT_AGENT_DIR; } else { - process.env.CLAWDBOT_AGENT_DIR = previousAgentDir; + process.env.MOLTBOT_AGENT_DIR = previousAgentDir; } if (previousPiAgentDir === undefined) { delete process.env.PI_CODING_AGENT_DIR; @@ -83,9 +83,9 @@ describe("applyAuthChoice", () => { it("prompts and writes MiniMax API key when selecting minimax-api", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-auth-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempStateDir, "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempStateDir, "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; const text = vi.fn().mockResolvedValue("sk-minimax-test"); const select: WizardPrompter["select"] = vi.fn( @@ -136,9 +136,9 @@ describe("applyAuthChoice", () => { it("prompts and writes Synthetic API key when selecting synthetic-api-key", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-auth-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempStateDir, "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempStateDir, "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; const text = vi.fn().mockResolvedValue("sk-synthetic-test"); const select: WizardPrompter["select"] = vi.fn( @@ -189,9 +189,9 @@ describe("applyAuthChoice", () => { it("sets default model when selecting github-copilot", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-auth-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempStateDir, "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempStateDir, "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; const prompter: WizardPrompter = { intro: vi.fn(noopAsync), @@ -232,9 +232,9 @@ describe("applyAuthChoice", () => { it("does not override the default model when selecting opencode-zen without setDefaultModel", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-auth-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempStateDir, "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempStateDir, "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; const text = vi.fn().mockResolvedValue("sk-opencode-zen-test"); const select: WizardPrompter["select"] = vi.fn( @@ -283,9 +283,9 @@ describe("applyAuthChoice", () => { it("uses existing OPENROUTER_API_KEY when selecting openrouter-api-key", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-auth-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempStateDir, "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempStateDir, "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; process.env.OPENROUTER_API_KEY = "sk-openrouter-test"; const text = vi.fn(); @@ -344,9 +344,9 @@ describe("applyAuthChoice", () => { it("uses existing AI_GATEWAY_API_KEY when selecting ai-gateway-api-key", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-auth-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempStateDir, "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempStateDir, "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; process.env.AI_GATEWAY_API_KEY = "gateway-test-key"; const text = vi.fn(); @@ -407,9 +407,9 @@ describe("applyAuthChoice", () => { it("writes Chutes OAuth credentials when selecting chutes (remote/manual)", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-auth-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempStateDir, "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempStateDir, "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; process.env.SSH_TTY = "1"; process.env.CHUTES_CLIENT_ID = "cid_test"; @@ -494,9 +494,9 @@ describe("applyAuthChoice", () => { it("writes Qwen credentials when selecting qwen-portal", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-auth-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempStateDir, "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempStateDir, "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; resolvePluginProviders.mockReturnValue([ { diff --git a/src/commands/configure.wizard.test.ts b/src/commands/configure.wizard.test.ts index a8c320386..b75cf1704 100644 --- a/src/commands/configure.wizard.test.ts +++ b/src/commands/configure.wizard.test.ts @@ -30,7 +30,7 @@ vi.mock("@clack/prompts", () => ({ })); vi.mock("../config/config.js", () => ({ - CONFIG_PATH: "~/.clawdbot/moltbot.json", + CONFIG_PATH: "~/.moltbot/moltbot.json", readConfigFileSnapshot: mocks.readConfigFileSnapshot, writeConfigFile: mocks.writeConfigFile, resolveGatewayPort: mocks.resolveGatewayPort, @@ -49,7 +49,7 @@ vi.mock("../terminal/note.js", () => ({ })); vi.mock("./onboard-helpers.js", () => ({ - DEFAULT_WORKSPACE: "~/.clawdbot/workspace", + DEFAULT_WORKSPACE: "~/.moltbot/workspace", applyWizardMetadata: (cfg: MoltbotConfig) => cfg, ensureWorkspaceAndSessions: vi.fn(), guardCancel: (value: T) => value, diff --git a/src/commands/configure.wizard.ts b/src/commands/configure.wizard.ts index 8db1d8379..4be87c596 100644 --- a/src/commands/configure.wizard.ts +++ b/src/commands/configure.wizard.ts @@ -206,8 +206,8 @@ export async function runConfigureWizard( const localUrl = "ws://127.0.0.1:18789"; const localProbe = await probeGatewayReachable({ url: localUrl, - token: baseConfig.gateway?.auth?.token ?? process.env.CLAWDBOT_GATEWAY_TOKEN, - password: baseConfig.gateway?.auth?.password ?? process.env.CLAWDBOT_GATEWAY_PASSWORD, + token: baseConfig.gateway?.auth?.token ?? process.env.MOLTBOT_GATEWAY_TOKEN, + password: baseConfig.gateway?.auth?.password ?? process.env.MOLTBOT_GATEWAY_PASSWORD, }); const remoteUrl = baseConfig.gateway?.remote?.url?.trim() ?? ""; const remoteProbe = remoteUrl @@ -274,7 +274,7 @@ export async function runConfigureWizard( let gatewayToken: string | undefined = nextConfig.gateway?.auth?.token ?? baseConfig.gateway?.auth?.token ?? - process.env.CLAWDBOT_GATEWAY_TOKEN; + process.env.MOLTBOT_GATEWAY_TOKEN; const persistConfig = async () => { nextConfig = applyWizardMetadata(nextConfig, { @@ -377,9 +377,8 @@ export async function runConfigureWizard( const remoteUrl = nextConfig.gateway?.remote?.url?.trim(); const wsUrl = nextConfig.gateway?.mode === "remote" && remoteUrl ? remoteUrl : localLinks.wsUrl; - const token = nextConfig.gateway?.auth?.token ?? process.env.CLAWDBOT_GATEWAY_TOKEN; - const password = - nextConfig.gateway?.auth?.password ?? process.env.CLAWDBOT_GATEWAY_PASSWORD; + const token = nextConfig.gateway?.auth?.token ?? process.env.MOLTBOT_GATEWAY_TOKEN; + const password = nextConfig.gateway?.auth?.password ?? process.env.MOLTBOT_GATEWAY_PASSWORD; await waitForGatewayReachable({ url: wsUrl, token, @@ -502,9 +501,9 @@ export async function runConfigureWizard( const remoteUrl = nextConfig.gateway?.remote?.url?.trim(); const wsUrl = nextConfig.gateway?.mode === "remote" && remoteUrl ? remoteUrl : localLinks.wsUrl; - const token = nextConfig.gateway?.auth?.token ?? process.env.CLAWDBOT_GATEWAY_TOKEN; + const token = nextConfig.gateway?.auth?.token ?? process.env.MOLTBOT_GATEWAY_TOKEN; const password = - nextConfig.gateway?.auth?.password ?? process.env.CLAWDBOT_GATEWAY_PASSWORD; + nextConfig.gateway?.auth?.password ?? process.env.MOLTBOT_GATEWAY_PASSWORD; await waitForGatewayReachable({ url: wsUrl, token, @@ -551,9 +550,9 @@ export async function runConfigureWizard( basePath: nextConfig.gateway?.controlUi?.basePath, }); // Try both new and old passwords since gateway may still have old config. - const newPassword = nextConfig.gateway?.auth?.password ?? process.env.CLAWDBOT_GATEWAY_PASSWORD; - const oldPassword = baseConfig.gateway?.auth?.password ?? process.env.CLAWDBOT_GATEWAY_PASSWORD; - const token = nextConfig.gateway?.auth?.token ?? process.env.CLAWDBOT_GATEWAY_TOKEN; + const newPassword = nextConfig.gateway?.auth?.password ?? process.env.MOLTBOT_GATEWAY_PASSWORD; + const oldPassword = baseConfig.gateway?.auth?.password ?? process.env.MOLTBOT_GATEWAY_PASSWORD; + const token = nextConfig.gateway?.auth?.token ?? process.env.MOLTBOT_GATEWAY_TOKEN; let gatewayProbe = await probeGatewayReachable({ url: links.wsUrl, diff --git a/src/commands/daemon-install-helpers.test.ts b/src/commands/daemon-install-helpers.test.ts index 2781e6fa0..4214e1560 100644 --- a/src/commands/daemon-install-helpers.test.ts +++ b/src/commands/daemon-install-helpers.test.ts @@ -55,7 +55,7 @@ describe("buildGatewayInstallPlan", () => { supported: true, }); mocks.renderSystemNodeWarning.mockReturnValue(undefined); - mocks.buildServiceEnvironment.mockReturnValue({ CLAWDBOT_PORT: "3000" }); + mocks.buildServiceEnvironment.mockReturnValue({ MOLTBOT_PORT: "3000" }); const plan = await buildGatewayInstallPlan({ env: {}, @@ -66,7 +66,7 @@ describe("buildGatewayInstallPlan", () => { expect(plan.programArguments).toEqual(["node", "gateway"]); expect(plan.workingDirectory).toBe("/Users/me"); - expect(plan.environment).toEqual({ CLAWDBOT_PORT: "3000" }); + expect(plan.environment).toEqual({ MOLTBOT_PORT: "3000" }); expect(mocks.resolvePreferredNodePath).not.toHaveBeenCalled(); }); @@ -108,7 +108,7 @@ describe("buildGatewayInstallPlan", () => { supported: true, }); mocks.buildServiceEnvironment.mockReturnValue({ - CLAWDBOT_PORT: "3000", + MOLTBOT_PORT: "3000", HOME: "/Users/me", }); @@ -130,7 +130,7 @@ describe("buildGatewayInstallPlan", () => { expect(plan.environment.GOOGLE_API_KEY).toBe("test-key"); expect(plan.environment.CUSTOM_VAR).toBe("custom-value"); // Service environment vars should take precedence - expect(plan.environment.CLAWDBOT_PORT).toBe("3000"); + expect(plan.environment.MOLTBOT_PORT).toBe("3000"); expect(plan.environment.HOME).toBe("/Users/me"); }); @@ -145,7 +145,7 @@ describe("buildGatewayInstallPlan", () => { version: "22.0.0", supported: true, }); - mocks.buildServiceEnvironment.mockReturnValue({ CLAWDBOT_PORT: "3000" }); + mocks.buildServiceEnvironment.mockReturnValue({ MOLTBOT_PORT: "3000" }); const plan = await buildGatewayInstallPlan({ env: {}, @@ -209,7 +209,7 @@ describe("buildGatewayInstallPlan", () => { }); mocks.buildServiceEnvironment.mockReturnValue({ HOME: "/Users/service", - CLAWDBOT_PORT: "3000", + MOLTBOT_PORT: "3000", }); const plan = await buildGatewayInstallPlan({ @@ -220,14 +220,14 @@ describe("buildGatewayInstallPlan", () => { env: { HOME: "/Users/config", vars: { - CLAWDBOT_PORT: "9999", + MOLTBOT_PORT: "9999", }, }, }, }); expect(plan.environment.HOME).toBe("/Users/service"); - expect(plan.environment.CLAWDBOT_PORT).toBe("3000"); + expect(plan.environment.MOLTBOT_PORT).toBe("3000"); }); }); diff --git a/src/commands/daemon-install-helpers.ts b/src/commands/daemon-install-helpers.ts index e51a7c42c..1188a3d40 100644 --- a/src/commands/daemon-install-helpers.ts +++ b/src/commands/daemon-install-helpers.ts @@ -60,7 +60,7 @@ export async function buildGatewayInstallPlan(params: { token: params.token, launchdLabel: process.platform === "darwin" - ? resolveGatewayLaunchAgentLabel(params.env.CLAWDBOT_PROFILE) + ? resolveGatewayLaunchAgentLabel(params.env.MOLTBOT_PROFILE) : undefined, }); diff --git a/src/commands/dashboard.ts b/src/commands/dashboard.ts index b5fb09309..d28667312 100644 --- a/src/commands/dashboard.ts +++ b/src/commands/dashboard.ts @@ -23,7 +23,7 @@ export async function dashboardCommand( const bind = cfg.gateway?.bind ?? "loopback"; const basePath = cfg.gateway?.controlUi?.basePath; const customBindHost = cfg.gateway?.customBindHost; - const token = cfg.gateway?.auth?.token ?? process.env.CLAWDBOT_GATEWAY_TOKEN ?? ""; + const token = cfg.gateway?.auth?.token ?? process.env.MOLTBOT_GATEWAY_TOKEN ?? ""; const links = resolveControlUiLinks({ port, diff --git a/src/commands/doctor-auth.deprecated-cli-profiles.test.ts b/src/commands/doctor-auth.deprecated-cli-profiles.test.ts index 5b3851b15..0931690d5 100644 --- a/src/commands/doctor-auth.deprecated-cli-profiles.test.ts +++ b/src/commands/doctor-auth.deprecated-cli-profiles.test.ts @@ -24,18 +24,18 @@ function makePrompter(confirmValue: boolean): DoctorPrompter { } beforeEach(() => { - originalAgentDir = process.env.CLAWDBOT_AGENT_DIR; + originalAgentDir = process.env.MOLTBOT_AGENT_DIR; originalPiAgentDir = process.env.PI_CODING_AGENT_DIR; tempAgentDir = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-auth-")); - process.env.CLAWDBOT_AGENT_DIR = tempAgentDir; + process.env.MOLTBOT_AGENT_DIR = tempAgentDir; process.env.PI_CODING_AGENT_DIR = tempAgentDir; }); afterEach(() => { if (originalAgentDir === undefined) { - delete process.env.CLAWDBOT_AGENT_DIR; + delete process.env.MOLTBOT_AGENT_DIR; } else { - process.env.CLAWDBOT_AGENT_DIR = originalAgentDir; + process.env.MOLTBOT_AGENT_DIR = originalAgentDir; } if (originalPiAgentDir === undefined) { delete process.env.PI_CODING_AGENT_DIR; diff --git a/src/commands/doctor-config-flow.test.ts b/src/commands/doctor-config-flow.test.ts index 7065ff7bb..f6fe0acfd 100644 --- a/src/commands/doctor-config-flow.test.ts +++ b/src/commands/doctor-config-flow.test.ts @@ -9,7 +9,7 @@ import { loadAndMaybeMigrateDoctorConfig } from "./doctor-config-flow.js"; describe("doctor config flow", () => { it("preserves invalid config for doctor repairs", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -37,7 +37,7 @@ describe("doctor config flow", () => { it("drops unknown keys on repair", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), diff --git a/src/commands/doctor-config-flow.ts b/src/commands/doctor-config-flow.ts index fda4673d9..e50439c0a 100644 --- a/src/commands/doctor-config-flow.ts +++ b/src/commands/doctor-config-flow.ts @@ -121,7 +121,7 @@ function noteOpencodeProviderOverrides(cfg: MoltbotConfig) { } function hasExplicitConfigPath(env: NodeJS.ProcessEnv): boolean { - return Boolean(env.MOLTBOT_CONFIG_PATH?.trim() || env.CLAWDBOT_CONFIG_PATH?.trim()); + return Boolean(env.MOLTBOT_CONFIG_PATH?.trim() || env.MOLTBOT_CONFIG_PATH?.trim()); } function moveLegacyConfigFile(legacyPath: string, canonicalPath: string) { diff --git a/src/commands/doctor-format.ts b/src/commands/doctor-format.ts index 9904d29f7..76a2b5be9 100644 --- a/src/commands/doctor-format.ts +++ b/src/commands/doctor-format.ts @@ -66,7 +66,7 @@ export function buildGatewayRuntimeHints( return hints; } if (runtime.cachedLabel && platform === "darwin") { - const label = resolveGatewayLaunchAgentLabel(env.CLAWDBOT_PROFILE); + const label = resolveGatewayLaunchAgentLabel(env.MOLTBOT_PROFILE); hints.push( `LaunchAgent label cached but plist missing. Clear with: launchctl bootout gui/$UID/${label}`, ); @@ -85,10 +85,10 @@ export function buildGatewayRuntimeHints( hints.push(`Launchd stdout (if installed): ${logs.stdoutPath}`); hints.push(`Launchd stderr (if installed): ${logs.stderrPath}`); } else if (platform === "linux") { - const unit = resolveGatewaySystemdServiceName(env.CLAWDBOT_PROFILE); + const unit = resolveGatewaySystemdServiceName(env.MOLTBOT_PROFILE); hints.push(`Logs: journalctl --user -u ${unit}.service -n 200 --no-pager`); } else if (platform === "win32") { - const task = resolveGatewayWindowsTaskName(env.CLAWDBOT_PROFILE); + const task = resolveGatewayWindowsTaskName(env.MOLTBOT_PROFILE); hints.push(`Logs: schtasks /Query /TN "${task}" /V /FO LIST`); } } diff --git a/src/commands/doctor-gateway-daemon-flow.ts b/src/commands/doctor-gateway-daemon-flow.ts index 202b4408c..38fe09468 100644 --- a/src/commands/doctor-gateway-daemon-flow.ts +++ b/src/commands/doctor-gateway-daemon-flow.ts @@ -106,7 +106,7 @@ export async function maybeRepairGatewayDaemon(params: { prompter: params.prompter, }); await maybeRepairLaunchAgentBootstrap({ - env: { ...process.env, CLAWDBOT_LAUNCHD_LABEL: resolveNodeLaunchAgentLabel() }, + env: { ...process.env, MOLTBOT_LAUNCHD_LABEL: resolveNodeLaunchAgentLabel() }, title: "Node", runtime: params.runtime, prompter: params.prompter, @@ -158,7 +158,7 @@ export async function maybeRepairGatewayDaemon(params: { const { programArguments, workingDirectory, environment } = await buildGatewayInstallPlan({ env: process.env, port, - token: params.cfg.gateway?.auth?.token ?? process.env.CLAWDBOT_GATEWAY_TOKEN, + token: params.cfg.gateway?.auth?.token ?? process.env.MOLTBOT_GATEWAY_TOKEN, runtime: daemonRuntime, warn: (message, title) => note(message, title), config: params.cfg, @@ -207,7 +207,7 @@ export async function maybeRepairGatewayDaemon(params: { } if (process.platform === "darwin") { - const label = resolveGatewayLaunchAgentLabel(process.env.CLAWDBOT_PROFILE); + const label = resolveGatewayLaunchAgentLabel(process.env.MOLTBOT_PROFILE); note( `LaunchAgent loaded; stopping requires "${formatCliCommand("moltbot gateway stop")}" or launchctl bootout gui/$UID/${label}.`, "Gateway", diff --git a/src/commands/doctor-gateway-services.ts b/src/commands/doctor-gateway-services.ts index 8e8958ee8..cd09e58fd 100644 --- a/src/commands/doctor-gateway-services.ts +++ b/src/commands/doctor-gateway-services.ts @@ -107,7 +107,7 @@ export async function maybeMigrateLegacyGatewayService( const { programArguments, workingDirectory, environment } = await buildGatewayInstallPlan({ env: process.env, port, - token: cfg.gateway?.auth?.token ?? process.env.CLAWDBOT_GATEWAY_TOKEN, + token: cfg.gateway?.auth?.token ?? process.env.MOLTBOT_GATEWAY_TOKEN, runtime: daemonRuntime, warn: (message, title) => note(message, title), config: cfg, @@ -174,7 +174,7 @@ export async function maybeRepairGatewayServiceConfig( const { programArguments, workingDirectory, environment } = await buildGatewayInstallPlan({ env: process.env, port, - token: cfg.gateway?.auth?.token ?? process.env.CLAWDBOT_GATEWAY_TOKEN, + token: cfg.gateway?.auth?.token ?? process.env.MOLTBOT_GATEWAY_TOKEN, runtime: needsNodeRuntime && systemNodePath ? "node" : runtimeChoice, nodePath: systemNodePath ?? undefined, warn: (message, title) => note(message, title), diff --git a/src/commands/doctor-legacy-config.test.ts b/src/commands/doctor-legacy-config.test.ts index 772057716..18a825339 100644 --- a/src/commands/doctor-legacy-config.test.ts +++ b/src/commands/doctor-legacy-config.test.ts @@ -15,16 +15,16 @@ describe("normalizeLegacyConfigValues", () => { }; beforeEach(() => { - previousOauthDir = process.env.CLAWDBOT_OAUTH_DIR; + previousOauthDir = process.env.MOLTBOT_OAUTH_DIR; tempOauthDir = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-oauth-")); - process.env.CLAWDBOT_OAUTH_DIR = tempOauthDir; + process.env.MOLTBOT_OAUTH_DIR = tempOauthDir; }); afterEach(() => { if (previousOauthDir === undefined) { - delete process.env.CLAWDBOT_OAUTH_DIR; + delete process.env.MOLTBOT_OAUTH_DIR; } else { - process.env.CLAWDBOT_OAUTH_DIR = previousOauthDir; + process.env.MOLTBOT_OAUTH_DIR = previousOauthDir; } if (tempOauthDir) { fs.rmSync(tempOauthDir, { recursive: true, force: true }); diff --git a/src/commands/doctor-platform-notes.launchctl-env-overrides.test.ts b/src/commands/doctor-platform-notes.launchctl-env-overrides.test.ts index 60eca8017..705a77a92 100644 --- a/src/commands/doctor-platform-notes.launchctl-env-overrides.test.ts +++ b/src/commands/doctor-platform-notes.launchctl-env-overrides.test.ts @@ -8,7 +8,7 @@ describe("noteMacLaunchctlGatewayEnvOverrides", () => { it("prints clear unsetenv instructions for token override", async () => { const noteFn = vi.fn(); const getenv = vi.fn(async (name: string) => - name === "CLAWDBOT_GATEWAY_TOKEN" ? "launchctl-token" : undefined, + name === "MOLTBOT_GATEWAY_TOKEN" ? "launchctl-token" : undefined, ); const cfg = { gateway: { @@ -26,9 +26,9 @@ describe("noteMacLaunchctlGatewayEnvOverrides", () => { const [message, title] = noteFn.mock.calls[0] ?? []; expect(title).toBe("Gateway (macOS)"); expect(message).toContain("launchctl environment overrides detected"); - expect(message).toContain("CLAWDBOT_GATEWAY_TOKEN"); - expect(message).toContain("launchctl unsetenv CLAWDBOT_GATEWAY_TOKEN"); - expect(message).not.toContain("CLAWDBOT_GATEWAY_PASSWORD"); + expect(message).toContain("MOLTBOT_GATEWAY_TOKEN"); + expect(message).toContain("launchctl unsetenv MOLTBOT_GATEWAY_TOKEN"); + expect(message).not.toContain("MOLTBOT_GATEWAY_PASSWORD"); }); it("does nothing when config has no gateway credentials", async () => { diff --git a/src/commands/doctor-platform-notes.ts b/src/commands/doctor-platform-notes.ts index 9a900edcb..521e74cc1 100644 --- a/src/commands/doctor-platform-notes.ts +++ b/src/commands/doctor-platform-notes.ts @@ -16,7 +16,7 @@ function resolveHomeDir(): string { export async function noteMacLaunchAgentOverrides() { if (process.platform !== "darwin") return; - const markerPath = path.join(resolveHomeDir(), ".clawdbot", "disable-launchagent"); + const markerPath = path.join(resolveHomeDir(), ".moltbot", "disable-launchagent"); const hasMarker = fs.existsSync(markerPath); if (!hasMarker) return; @@ -64,19 +64,17 @@ export async function noteMacLaunchctlGatewayEnvOverrides( if (!hasConfigGatewayCreds(cfg)) return; const getenv = deps?.getenv ?? launchctlGetenv; - const envToken = await getenv("CLAWDBOT_GATEWAY_TOKEN"); - const envPassword = await getenv("CLAWDBOT_GATEWAY_PASSWORD"); + const envToken = await getenv("MOLTBOT_GATEWAY_TOKEN"); + const envPassword = await getenv("MOLTBOT_GATEWAY_PASSWORD"); if (!envToken && !envPassword) return; const lines = [ "- launchctl environment overrides detected (can cause confusing unauthorized errors).", - envToken ? "- `CLAWDBOT_GATEWAY_TOKEN` is set; it overrides config tokens." : undefined, - envPassword - ? "- `CLAWDBOT_GATEWAY_PASSWORD` is set; it overrides config passwords." - : undefined, + envToken ? "- `MOLTBOT_GATEWAY_TOKEN` is set; it overrides config tokens." : undefined, + envPassword ? "- `MOLTBOT_GATEWAY_PASSWORD` is set; it overrides config passwords." : undefined, "- Clear overrides and restart the app/gateway:", - envToken ? " launchctl unsetenv CLAWDBOT_GATEWAY_TOKEN" : undefined, - envPassword ? " launchctl unsetenv CLAWDBOT_GATEWAY_PASSWORD" : undefined, + envToken ? " launchctl unsetenv MOLTBOT_GATEWAY_TOKEN" : undefined, + envPassword ? " launchctl unsetenv MOLTBOT_GATEWAY_PASSWORD" : undefined, ].filter((line): line is string => Boolean(line)); (deps?.noteFn ?? note)(lines.join("\n"), "Gateway (macOS)"); diff --git a/src/commands/doctor-security.test.ts b/src/commands/doctor-security.test.ts index c03b0fa63..9ec346907 100644 --- a/src/commands/doctor-security.test.ts +++ b/src/commands/doctor-security.test.ts @@ -20,17 +20,17 @@ describe("noteSecurityWarnings gateway exposure", () => { beforeEach(() => { note.mockClear(); - prevToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - prevPassword = process.env.CLAWDBOT_GATEWAY_PASSWORD; - delete process.env.CLAWDBOT_GATEWAY_TOKEN; - delete process.env.CLAWDBOT_GATEWAY_PASSWORD; + prevToken = process.env.MOLTBOT_GATEWAY_TOKEN; + prevPassword = process.env.MOLTBOT_GATEWAY_PASSWORD; + delete process.env.MOLTBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_PASSWORD; }); afterEach(() => { - if (prevToken === undefined) delete process.env.CLAWDBOT_GATEWAY_TOKEN; - else process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; - if (prevPassword === undefined) delete process.env.CLAWDBOT_GATEWAY_PASSWORD; - else process.env.CLAWDBOT_GATEWAY_PASSWORD = prevPassword; + if (prevToken === undefined) delete process.env.MOLTBOT_GATEWAY_TOKEN; + else process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; + if (prevPassword === undefined) delete process.env.MOLTBOT_GATEWAY_PASSWORD; + else process.env.MOLTBOT_GATEWAY_PASSWORD = prevPassword; }); const lastMessage = () => String(note.mock.calls.at(-1)?.[0] ?? ""); @@ -44,7 +44,7 @@ describe("noteSecurityWarnings gateway exposure", () => { }); it("uses env token to avoid critical warning", async () => { - process.env.CLAWDBOT_GATEWAY_TOKEN = "token-123"; + process.env.MOLTBOT_GATEWAY_TOKEN = "token-123"; const cfg = { gateway: { bind: "lan" } } as MoltbotConfig; await noteSecurityWarnings(cfg); const message = lastMessage(); diff --git a/src/commands/doctor-state-integrity.ts b/src/commands/doctor-state-integrity.ts index 7fb182c5c..242280053 100644 --- a/src/commands/doctor-state-integrity.ts +++ b/src/commands/doctor-state-integrity.ts @@ -108,7 +108,7 @@ function findOtherStateDirs(stateDir: string): string[] { for (const entry of entries) { if (!entry.isDirectory()) continue; if (entry.name.startsWith(".")) continue; - const candidate = path.resolve(root, entry.name, ".clawdbot"); + const candidate = path.resolve(root, entry.name, ".moltbot"); if (candidate === resolvedState) continue; if (existsDir(candidate)) found.push(candidate); } @@ -126,7 +126,7 @@ export async function noteStateIntegrity( const env = process.env; const homedir = os.homedir; const stateDir = resolveStateDir(env, homedir); - const defaultStateDir = path.join(homedir(), ".clawdbot"); + const defaultStateDir = path.join(homedir(), ".moltbot"); const oauthDir = resolveOAuthDir(env, stateDir); const agentId = resolveDefaultAgentId(cfg); const sessionsDir = resolveSessionTranscriptsDirForAgent(agentId, env, homedir); @@ -354,7 +354,7 @@ export function noteWorkspaceBackupTip(workspaceDir: string) { note( [ "- Tip: back up the workspace in a private git repo (GitHub or GitLab).", - "- Keep ~/.clawdbot out of git; it contains credentials and session history.", + "- Keep ~/.moltbot out of git; it contains credentials and session history.", "- Details: /concepts/agent-workspace#git-backup-recommended", ].join("\n"), "Workspace", diff --git a/src/commands/doctor-state-migrations.test.ts b/src/commands/doctor-state-migrations.test.ts index 2ae7faf05..7af46825a 100644 --- a/src/commands/doctor-state-migrations.test.ts +++ b/src/commands/doctor-state-migrations.test.ts @@ -54,7 +54,7 @@ describe("doctor legacy state migrations", () => { const detected = await detectLegacyStateMigrations({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, }); const result = await runLegacyStateMigrations({ detected, @@ -95,7 +95,7 @@ describe("doctor legacy state migrations", () => { const detected = await detectLegacyStateMigrations({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, }); await runLegacyStateMigrations({ detected, now: () => 123 }); @@ -116,7 +116,7 @@ describe("doctor legacy state migrations", () => { const result = await autoMigrateLegacyState({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, log, }); @@ -141,7 +141,7 @@ describe("doctor legacy state migrations", () => { const result = await autoMigrateLegacyState({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, log, now: () => 123, }); @@ -167,7 +167,7 @@ describe("doctor legacy state migrations", () => { const detected = await detectLegacyStateMigrations({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, }); await runLegacyStateMigrations({ detected, now: () => 123 }); @@ -183,7 +183,7 @@ describe("doctor legacy state migrations", () => { const cfg: MoltbotConfig = {}; const detected = await detectLegacyStateMigrations({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, }); const result = await runLegacyStateMigrations({ detected }); expect(result.changes).toEqual([]); @@ -202,7 +202,7 @@ describe("doctor legacy state migrations", () => { const detected = await detectLegacyStateMigrations({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, }); await runLegacyStateMigrations({ detected, now: () => 123 }); @@ -225,7 +225,7 @@ describe("doctor legacy state migrations", () => { const detected = await detectLegacyStateMigrations({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, }); await runLegacyStateMigrations({ detected, now: () => 123 }); @@ -248,7 +248,7 @@ describe("doctor legacy state migrations", () => { const detected = await detectLegacyStateMigrations({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, }); await runLegacyStateMigrations({ detected, now: () => 123 }); @@ -270,7 +270,7 @@ describe("doctor legacy state migrations", () => { const detected = await detectLegacyStateMigrations({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, }); await runLegacyStateMigrations({ detected, now: () => 123 }); @@ -291,7 +291,7 @@ describe("doctor legacy state migrations", () => { const detected = await detectLegacyStateMigrations({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, }); await runLegacyStateMigrations({ detected, now: () => 123 }); @@ -314,7 +314,7 @@ describe("doctor legacy state migrations", () => { const result = await autoMigrateLegacyState({ cfg, - env: { CLAWDBOT_STATE_DIR: root } as NodeJS.ProcessEnv, + env: { MOLTBOT_STATE_DIR: root } as NodeJS.ProcessEnv, log, }); @@ -329,7 +329,7 @@ describe("doctor legacy state migrations", () => { it("auto-migrates legacy state dir to ~/.moltbot", async () => { const root = await makeTempRoot(); - const legacyDir = path.join(root, ".clawdbot"); + const legacyDir = path.join(root, ".moltbot"); fs.mkdirSync(legacyDir, { recursive: true }); fs.writeFileSync(path.join(legacyDir, "foo.txt"), "legacy", "utf-8"); @@ -348,7 +348,7 @@ describe("doctor legacy state migrations", () => { it("skips state dir migration when target exists", async () => { const root = await makeTempRoot(); - const legacyDir = path.join(root, ".clawdbot"); + const legacyDir = path.join(root, ".moltbot"); const targetDir = path.join(root, ".moltbot"); fs.mkdirSync(legacyDir, { recursive: true }); fs.mkdirSync(targetDir, { recursive: true }); @@ -364,7 +364,7 @@ describe("doctor legacy state migrations", () => { it("skips state dir migration when env override is set", async () => { const root = await makeTempRoot(); - const legacyDir = path.join(root, ".clawdbot"); + const legacyDir = path.join(root, ".moltbot"); fs.mkdirSync(legacyDir, { recursive: true }); const result = await autoMigrateLegacyStateDir({ diff --git a/src/commands/doctor-update.ts b/src/commands/doctor-update.ts index a59a93582..ddc766181 100644 --- a/src/commands/doctor-update.ts +++ b/src/commands/doctor-update.ts @@ -29,7 +29,7 @@ export async function maybeOfferUpdateBeforeDoctor(params: { confirm: (p: { message: string; initialValue: boolean }) => Promise; outro: (message: string) => void; }) { - const updateInProgress = isTruthyEnvValue(process.env.CLAWDBOT_UPDATE_IN_PROGRESS); + const updateInProgress = isTruthyEnvValue(process.env.MOLTBOT_UPDATE_IN_PROGRESS); const canOfferUpdate = !updateInProgress && params.options.nonInteractive !== true && diff --git a/src/commands/doctor.falls-back-legacy-sandbox-image-missing.test.ts b/src/commands/doctor.falls-back-legacy-sandbox-image-missing.test.ts index 7ddcc2049..b62fd3b7d 100644 --- a/src/commands/doctor.falls-back-legacy-sandbox-image-missing.test.ts +++ b/src/commands/doctor.falls-back-legacy-sandbox-image-missing.test.ts @@ -76,11 +76,11 @@ beforeEach(() => { originalIsTTY = process.stdin.isTTY; setStdinTty(true); - originalStateDir = process.env.CLAWDBOT_STATE_DIR; - originalUpdateInProgress = process.env.CLAWDBOT_UPDATE_IN_PROGRESS; - process.env.CLAWDBOT_UPDATE_IN_PROGRESS = "1"; + originalStateDir = process.env.MOLTBOT_STATE_DIR; + originalUpdateInProgress = process.env.MOLTBOT_UPDATE_IN_PROGRESS; + process.env.MOLTBOT_UPDATE_IN_PROGRESS = "1"; tempStateDir = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-doctor-state-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_STATE_DIR = tempStateDir; fs.mkdirSync(path.join(tempStateDir, "agents", "main", "sessions"), { recursive: true, }); @@ -90,14 +90,14 @@ beforeEach(() => { afterEach(() => { setStdinTty(originalIsTTY); if (originalStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = originalStateDir; + process.env.MOLTBOT_STATE_DIR = originalStateDir; } if (originalUpdateInProgress === undefined) { - delete process.env.CLAWDBOT_UPDATE_IN_PROGRESS; + delete process.env.MOLTBOT_UPDATE_IN_PROGRESS; } else { - process.env.CLAWDBOT_UPDATE_IN_PROGRESS = originalUpdateInProgress; + process.env.MOLTBOT_UPDATE_IN_PROGRESS = originalUpdateInProgress; } if (tempStateDir) { fs.rmSync(tempStateDir, { recursive: true, force: true }); diff --git a/src/commands/doctor.migrates-routing-allowfrom-channels-whatsapp-allowfrom.test.ts b/src/commands/doctor.migrates-routing-allowfrom-channels-whatsapp-allowfrom.test.ts index 4f6651251..859cc4322 100644 --- a/src/commands/doctor.migrates-routing-allowfrom-channels-whatsapp-allowfrom.test.ts +++ b/src/commands/doctor.migrates-routing-allowfrom-channels-whatsapp-allowfrom.test.ts @@ -75,11 +75,11 @@ beforeEach(() => { originalIsTTY = process.stdin.isTTY; setStdinTty(true); - originalStateDir = process.env.CLAWDBOT_STATE_DIR; - originalUpdateInProgress = process.env.CLAWDBOT_UPDATE_IN_PROGRESS; - process.env.CLAWDBOT_UPDATE_IN_PROGRESS = "1"; + originalStateDir = process.env.MOLTBOT_STATE_DIR; + originalUpdateInProgress = process.env.MOLTBOT_UPDATE_IN_PROGRESS; + process.env.MOLTBOT_UPDATE_IN_PROGRESS = "1"; tempStateDir = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-doctor-state-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_STATE_DIR = tempStateDir; fs.mkdirSync(path.join(tempStateDir, "agents", "main", "sessions"), { recursive: true, }); @@ -89,14 +89,14 @@ beforeEach(() => { afterEach(() => { setStdinTty(originalIsTTY); if (originalStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = originalStateDir; + process.env.MOLTBOT_STATE_DIR = originalStateDir; } if (originalUpdateInProgress === undefined) { - delete process.env.CLAWDBOT_UPDATE_IN_PROGRESS; + delete process.env.MOLTBOT_UPDATE_IN_PROGRESS; } else { - process.env.CLAWDBOT_UPDATE_IN_PROGRESS = originalUpdateInProgress; + process.env.MOLTBOT_UPDATE_IN_PROGRESS = originalUpdateInProgress; } if (tempStateDir) { fs.rmSync(tempStateDir, { recursive: true, force: true }); @@ -389,7 +389,7 @@ describe("doctor command", () => { findLegacyGatewayServices.mockResolvedValueOnce([ { platform: "darwin", - label: "com.steipete.clawdbot.gateway", + label: "com.steipete.moltbot.gateway", detail: "loaded", }, ]); @@ -410,7 +410,7 @@ describe("doctor command", () => { }); it("offers to update first for git checkouts", async () => { - delete process.env.CLAWDBOT_UPDATE_IN_PROGRESS; + delete process.env.MOLTBOT_UPDATE_IN_PROGRESS; const root = "/tmp/moltbot"; resolveMoltbotPackageRoot.mockResolvedValueOnce(root); diff --git a/src/commands/doctor.runs-legacy-state-migrations-yes-mode-without.test.ts b/src/commands/doctor.runs-legacy-state-migrations-yes-mode-without.test.ts index f36b85b29..bf8da0977 100644 --- a/src/commands/doctor.runs-legacy-state-migrations-yes-mode-without.test.ts +++ b/src/commands/doctor.runs-legacy-state-migrations-yes-mode-without.test.ts @@ -75,11 +75,11 @@ beforeEach(() => { originalIsTTY = process.stdin.isTTY; setStdinTty(true); - originalStateDir = process.env.CLAWDBOT_STATE_DIR; - originalUpdateInProgress = process.env.CLAWDBOT_UPDATE_IN_PROGRESS; - process.env.CLAWDBOT_UPDATE_IN_PROGRESS = "1"; + originalStateDir = process.env.MOLTBOT_STATE_DIR; + originalUpdateInProgress = process.env.MOLTBOT_UPDATE_IN_PROGRESS; + process.env.MOLTBOT_UPDATE_IN_PROGRESS = "1"; tempStateDir = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-doctor-state-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_STATE_DIR = tempStateDir; fs.mkdirSync(path.join(tempStateDir, "agents", "main", "sessions"), { recursive: true, }); @@ -89,14 +89,14 @@ beforeEach(() => { afterEach(() => { setStdinTty(originalIsTTY); if (originalStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = originalStateDir; + process.env.MOLTBOT_STATE_DIR = originalStateDir; } if (originalUpdateInProgress === undefined) { - delete process.env.CLAWDBOT_UPDATE_IN_PROGRESS; + delete process.env.MOLTBOT_UPDATE_IN_PROGRESS; } else { - process.env.CLAWDBOT_UPDATE_IN_PROGRESS = originalUpdateInProgress; + process.env.MOLTBOT_UPDATE_IN_PROGRESS = originalUpdateInProgress; } if (tempStateDir) { fs.rmSync(tempStateDir, { recursive: true, force: true }); diff --git a/src/commands/doctor.warns-per-agent-sandbox-docker-browser-prune.test.ts b/src/commands/doctor.warns-per-agent-sandbox-docker-browser-prune.test.ts index d2d232606..f5935ef62 100644 --- a/src/commands/doctor.warns-per-agent-sandbox-docker-browser-prune.test.ts +++ b/src/commands/doctor.warns-per-agent-sandbox-docker-browser-prune.test.ts @@ -75,11 +75,11 @@ beforeEach(() => { originalIsTTY = process.stdin.isTTY; setStdinTty(true); - originalStateDir = process.env.CLAWDBOT_STATE_DIR; - originalUpdateInProgress = process.env.CLAWDBOT_UPDATE_IN_PROGRESS; - process.env.CLAWDBOT_UPDATE_IN_PROGRESS = "1"; + originalStateDir = process.env.MOLTBOT_STATE_DIR; + originalUpdateInProgress = process.env.MOLTBOT_UPDATE_IN_PROGRESS; + process.env.MOLTBOT_UPDATE_IN_PROGRESS = "1"; tempStateDir = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-doctor-state-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_STATE_DIR = tempStateDir; fs.mkdirSync(path.join(tempStateDir, "agents", "main", "sessions"), { recursive: true, }); @@ -89,14 +89,14 @@ beforeEach(() => { afterEach(() => { setStdinTty(originalIsTTY); if (originalStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = originalStateDir; + process.env.MOLTBOT_STATE_DIR = originalStateDir; } if (originalUpdateInProgress === undefined) { - delete process.env.CLAWDBOT_UPDATE_IN_PROGRESS; + delete process.env.MOLTBOT_UPDATE_IN_PROGRESS; } else { - process.env.CLAWDBOT_UPDATE_IN_PROGRESS = originalUpdateInProgress; + process.env.MOLTBOT_UPDATE_IN_PROGRESS = originalUpdateInProgress; } if (tempStateDir) { fs.rmSync(tempStateDir, { recursive: true, force: true }); diff --git a/src/commands/doctor.warns-state-directory-is-missing.test.ts b/src/commands/doctor.warns-state-directory-is-missing.test.ts index 10b9e8a67..c91e1b784 100644 --- a/src/commands/doctor.warns-state-directory-is-missing.test.ts +++ b/src/commands/doctor.warns-state-directory-is-missing.test.ts @@ -75,11 +75,11 @@ beforeEach(() => { originalIsTTY = process.stdin.isTTY; setStdinTty(true); - originalStateDir = process.env.CLAWDBOT_STATE_DIR; - originalUpdateInProgress = process.env.CLAWDBOT_UPDATE_IN_PROGRESS; - process.env.CLAWDBOT_UPDATE_IN_PROGRESS = "1"; + originalStateDir = process.env.MOLTBOT_STATE_DIR; + originalUpdateInProgress = process.env.MOLTBOT_UPDATE_IN_PROGRESS; + process.env.MOLTBOT_UPDATE_IN_PROGRESS = "1"; tempStateDir = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-doctor-state-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_STATE_DIR = tempStateDir; fs.mkdirSync(path.join(tempStateDir, "agents", "main", "sessions"), { recursive: true, }); @@ -89,14 +89,14 @@ beforeEach(() => { afterEach(() => { setStdinTty(originalIsTTY); if (originalStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = originalStateDir; + process.env.MOLTBOT_STATE_DIR = originalStateDir; } if (originalUpdateInProgress === undefined) { - delete process.env.CLAWDBOT_UPDATE_IN_PROGRESS; + delete process.env.MOLTBOT_UPDATE_IN_PROGRESS; } else { - process.env.CLAWDBOT_UPDATE_IN_PROGRESS = originalUpdateInProgress; + process.env.MOLTBOT_UPDATE_IN_PROGRESS = originalUpdateInProgress; } if (tempStateDir) { fs.rmSync(tempStateDir, { recursive: true, force: true }); @@ -348,7 +348,7 @@ describe("doctor command", () => { const missingDir = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-missing-state-")); fs.rmSync(missingDir, { recursive: true, force: true }); - process.env.CLAWDBOT_STATE_DIR = missingDir; + process.env.MOLTBOT_STATE_DIR = missingDir; note.mockClear(); const { doctorCommand } = await import("./doctor.js"); @@ -396,7 +396,7 @@ describe("doctor command", () => { expect(warned).toBe(true); }); - it("skips gateway auth warning when CLAWDBOT_GATEWAY_TOKEN is set", async () => { + it("skips gateway auth warning when MOLTBOT_GATEWAY_TOKEN is set", async () => { readConfigFileSnapshot.mockResolvedValue({ path: "/tmp/moltbot.json", exists: true, @@ -410,8 +410,8 @@ describe("doctor command", () => { legacyIssues: [], }); - const prevToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - process.env.CLAWDBOT_GATEWAY_TOKEN = "env-token-1234567890"; + const prevToken = process.env.MOLTBOT_GATEWAY_TOKEN; + process.env.MOLTBOT_GATEWAY_TOKEN = "env-token-1234567890"; note.mockClear(); try { @@ -421,8 +421,8 @@ describe("doctor command", () => { { nonInteractive: true, workspaceSuggestions: false }, ); } finally { - if (prevToken === undefined) delete process.env.CLAWDBOT_GATEWAY_TOKEN; - else process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; + if (prevToken === undefined) delete process.env.MOLTBOT_GATEWAY_TOKEN; + else process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; } const warned = note.mock.calls.some(([message]) => diff --git a/src/commands/gateway-status/helpers.ts b/src/commands/gateway-status/helpers.ts index 7387c314f..b0701b340 100644 --- a/src/commands/gateway-status/helpers.ts +++ b/src/commands/gateway-status/helpers.ts @@ -145,8 +145,8 @@ export function resolveAuthForTarget( }; } - const envToken = process.env.CLAWDBOT_GATEWAY_TOKEN?.trim() || ""; - const envPassword = process.env.CLAWDBOT_GATEWAY_PASSWORD?.trim() || ""; + const envToken = process.env.MOLTBOT_GATEWAY_TOKEN?.trim() || ""; + const envPassword = process.env.MOLTBOT_GATEWAY_PASSWORD?.trim() || ""; const cfgToken = typeof cfg.gateway?.auth?.token === "string" ? cfg.gateway.auth.token.trim() : ""; const cfgPassword = diff --git a/src/commands/health-format.test.ts b/src/commands/health-format.test.ts index 54734cbd1..b8a044ac1 100644 --- a/src/commands/health-format.test.ts +++ b/src/commands/health-format.test.ts @@ -20,7 +20,7 @@ describe("formatHealthCheckFailure", () => { "gateway closed (1006 abnormal closure (no close frame)): no close reason", "Gateway target: ws://127.0.0.1:19001", "Source: local loopback", - "Config: /Users/steipete/.clawdbot-dev/moltbot.json", + "Config: /Users/steipete/.moltbot-dev/moltbot.json", "Bind: loopback", ].join("\n"), ); @@ -30,7 +30,7 @@ describe("formatHealthCheckFailure", () => { "Health check failed: gateway closed (1006 abnormal closure (no close frame)): no close reason", " Gateway target: ws://127.0.0.1:19001", " Source: local loopback", - " Config: /Users/steipete/.clawdbot-dev/moltbot.json", + " Config: /Users/steipete/.moltbot-dev/moltbot.json", " Bind: loopback", ].join("\n"), ); diff --git a/src/commands/health.ts b/src/commands/health.ts index 88c17839e..ad7c7bbdb 100644 --- a/src/commands/health.ts +++ b/src/commands/health.ts @@ -73,7 +73,7 @@ export type HealthSummary = { const DEFAULT_TIMEOUT_MS = 10_000; const debugHealth = (...args: unknown[]) => { - if (isTruthyEnvValue(process.env.CLAWDBOT_DEBUG_HEALTH)) { + if (isTruthyEnvValue(process.env.MOLTBOT_DEBUG_HEALTH)) { console.warn("[health:debug]", ...args); } }; @@ -527,7 +527,7 @@ export async function healthCommand( if (opts.json) { runtime.log(JSON.stringify(summary, null, 2)); } else { - const debugEnabled = isTruthyEnvValue(process.env.CLAWDBOT_DEBUG_HEALTH); + const debugEnabled = isTruthyEnvValue(process.env.MOLTBOT_DEBUG_HEALTH); if (opts.verbose) { const details = buildGatewayConnectionDetails({ config: cfg }); runtime.log(info("Gateway connection:")); diff --git a/src/commands/node-daemon-install-helpers.ts b/src/commands/node-daemon-install-helpers.ts index 56aa9c1c3..7899739e3 100644 --- a/src/commands/node-daemon-install-helpers.ts +++ b/src/commands/node-daemon-install-helpers.ts @@ -58,7 +58,7 @@ export async function buildNodeInstallPlan(params: { const environment = buildNodeServiceEnvironment({ env: params.env }); const description = formatNodeServiceDescription({ - version: environment.CLAWDBOT_SERVICE_VERSION, + version: environment.MOLTBOT_SERVICE_VERSION, }); return { programArguments, workingDirectory, environment, description }; diff --git a/src/commands/onboard-auth.test.ts b/src/commands/onboard-auth.test.ts index 0a2c67f94..4ec0e0832 100644 --- a/src/commands/onboard-auth.test.ts +++ b/src/commands/onboard-auth.test.ts @@ -24,14 +24,14 @@ import { const authProfilePathFor = (agentDir: string) => path.join(agentDir, "auth-profiles.json"); const requireAgentDir = () => { - const agentDir = process.env.CLAWDBOT_AGENT_DIR; - if (!agentDir) throw new Error("CLAWDBOT_AGENT_DIR not set"); + const agentDir = process.env.MOLTBOT_AGENT_DIR; + if (!agentDir) throw new Error("MOLTBOT_AGENT_DIR not set"); return agentDir; }; describe("writeOAuthCredentials", () => { - const previousStateDir = process.env.CLAWDBOT_STATE_DIR; - const previousAgentDir = process.env.CLAWDBOT_AGENT_DIR; + const previousStateDir = process.env.MOLTBOT_STATE_DIR; + const previousAgentDir = process.env.MOLTBOT_AGENT_DIR; const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR; let tempStateDir: string | null = null; @@ -41,28 +41,28 @@ describe("writeOAuthCredentials", () => { tempStateDir = null; } if (previousStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = previousStateDir; + process.env.MOLTBOT_STATE_DIR = previousStateDir; } if (previousAgentDir === undefined) { - delete process.env.CLAWDBOT_AGENT_DIR; + delete process.env.MOLTBOT_AGENT_DIR; } else { - process.env.CLAWDBOT_AGENT_DIR = previousAgentDir; + process.env.MOLTBOT_AGENT_DIR = previousAgentDir; } if (previousPiAgentDir === undefined) { delete process.env.PI_CODING_AGENT_DIR; } else { process.env.PI_CODING_AGENT_DIR = previousPiAgentDir; } - delete process.env.CLAWDBOT_OAUTH_DIR; + delete process.env.MOLTBOT_OAUTH_DIR; }); - it("writes auth-profiles.json under CLAWDBOT_AGENT_DIR when set", async () => { + it("writes auth-profiles.json under MOLTBOT_AGENT_DIR when set", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-oauth-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempStateDir, "agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempStateDir, "agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; const creds = { refresh: "refresh-token", @@ -90,8 +90,8 @@ describe("writeOAuthCredentials", () => { }); describe("setMinimaxApiKey", () => { - const previousStateDir = process.env.CLAWDBOT_STATE_DIR; - const previousAgentDir = process.env.CLAWDBOT_AGENT_DIR; + const previousStateDir = process.env.MOLTBOT_STATE_DIR; + const previousAgentDir = process.env.MOLTBOT_AGENT_DIR; const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR; let tempStateDir: string | null = null; @@ -101,14 +101,14 @@ describe("setMinimaxApiKey", () => { tempStateDir = null; } if (previousStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = previousStateDir; + process.env.MOLTBOT_STATE_DIR = previousStateDir; } if (previousAgentDir === undefined) { - delete process.env.CLAWDBOT_AGENT_DIR; + delete process.env.MOLTBOT_AGENT_DIR; } else { - process.env.CLAWDBOT_AGENT_DIR = previousAgentDir; + process.env.MOLTBOT_AGENT_DIR = previousAgentDir; } if (previousPiAgentDir === undefined) { delete process.env.PI_CODING_AGENT_DIR; @@ -117,11 +117,11 @@ describe("setMinimaxApiKey", () => { } }); - it("writes to CLAWDBOT_AGENT_DIR when set", async () => { + it("writes to MOLTBOT_AGENT_DIR when set", async () => { tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-minimax-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; - process.env.CLAWDBOT_AGENT_DIR = path.join(tempStateDir, "custom-agent"); - process.env.PI_CODING_AGENT_DIR = process.env.CLAWDBOT_AGENT_DIR; + process.env.MOLTBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_AGENT_DIR = path.join(tempStateDir, "custom-agent"); + process.env.PI_CODING_AGENT_DIR = process.env.MOLTBOT_AGENT_DIR; await setMinimaxApiKey("sk-minimax-test"); diff --git a/src/commands/onboard-hooks.test.ts b/src/commands/onboard-hooks.test.ts index c58630a5b..43adf2210 100644 --- a/src/commands/onboard-hooks.test.ts +++ b/src/commands/onboard-hooks.test.ts @@ -42,7 +42,7 @@ describe("onboard-hooks", () => { const createMockHookReport = (eligible = true): HookStatusReport => ({ workspaceDir: "/mock/workspace", - managedHooksDir: "/mock/.clawdbot/hooks", + managedHooksDir: "/mock/.moltbot/hooks", hooks: [ { name: "session-memory", diff --git a/src/commands/onboard-non-interactive.ai-gateway.test.ts b/src/commands/onboard-non-interactive.ai-gateway.test.ts index b0f2d7b8b..a52eeeeca 100644 --- a/src/commands/onboard-non-interactive.ai-gateway.test.ts +++ b/src/commands/onboard-non-interactive.ai-gateway.test.ts @@ -8,27 +8,27 @@ describe("onboard (non-interactive): Vercel AI Gateway", () => { it("stores the API key and configures the default model", async () => { const prev = { home: process.env.HOME, - stateDir: process.env.CLAWDBOT_STATE_DIR, - configPath: process.env.CLAWDBOT_CONFIG_PATH, - skipChannels: process.env.CLAWDBOT_SKIP_CHANNELS, - skipGmail: process.env.CLAWDBOT_SKIP_GMAIL_WATCHER, - skipCron: process.env.CLAWDBOT_SKIP_CRON, - skipCanvas: process.env.CLAWDBOT_SKIP_CANVAS_HOST, - token: process.env.CLAWDBOT_GATEWAY_TOKEN, - password: process.env.CLAWDBOT_GATEWAY_PASSWORD, + stateDir: process.env.MOLTBOT_STATE_DIR, + configPath: process.env.MOLTBOT_CONFIG_PATH, + skipChannels: process.env.MOLTBOT_SKIP_CHANNELS, + skipGmail: process.env.MOLTBOT_SKIP_GMAIL_WATCHER, + skipCron: process.env.MOLTBOT_SKIP_CRON, + skipCanvas: process.env.MOLTBOT_SKIP_CANVAS_HOST, + token: process.env.MOLTBOT_GATEWAY_TOKEN, + password: process.env.MOLTBOT_GATEWAY_PASSWORD, }; - process.env.CLAWDBOT_SKIP_CHANNELS = "1"; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = "1"; - process.env.CLAWDBOT_SKIP_CRON = "1"; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = "1"; - delete process.env.CLAWDBOT_GATEWAY_TOKEN; - delete process.env.CLAWDBOT_GATEWAY_PASSWORD; + process.env.MOLTBOT_SKIP_CHANNELS = "1"; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = "1"; + process.env.MOLTBOT_SKIP_CRON = "1"; + process.env.MOLTBOT_SKIP_CANVAS_HOST = "1"; + delete process.env.MOLTBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_PASSWORD; const tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-onboard-gateway-")); process.env.HOME = tempHome; - process.env.CLAWDBOT_STATE_DIR = tempHome; - process.env.CLAWDBOT_CONFIG_PATH = path.join(tempHome, "moltbot.json"); + process.env.MOLTBOT_STATE_DIR = tempHome; + process.env.MOLTBOT_CONFIG_PATH = path.join(tempHome, "moltbot.json"); vi.resetModules(); const runtime = { @@ -81,14 +81,14 @@ describe("onboard (non-interactive): Vercel AI Gateway", () => { } finally { await fs.rm(tempHome, { recursive: true, force: true }); process.env.HOME = prev.home; - process.env.CLAWDBOT_STATE_DIR = prev.stateDir; - process.env.CLAWDBOT_CONFIG_PATH = prev.configPath; - process.env.CLAWDBOT_SKIP_CHANNELS = prev.skipChannels; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; - process.env.CLAWDBOT_SKIP_CRON = prev.skipCron; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = prev.skipCanvas; - process.env.CLAWDBOT_GATEWAY_TOKEN = prev.token; - process.env.CLAWDBOT_GATEWAY_PASSWORD = prev.password; + process.env.MOLTBOT_STATE_DIR = prev.stateDir; + process.env.MOLTBOT_CONFIG_PATH = prev.configPath; + process.env.MOLTBOT_SKIP_CHANNELS = prev.skipChannels; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; + process.env.MOLTBOT_SKIP_CRON = prev.skipCron; + process.env.MOLTBOT_SKIP_CANVAS_HOST = prev.skipCanvas; + process.env.MOLTBOT_GATEWAY_TOKEN = prev.token; + process.env.MOLTBOT_GATEWAY_PASSWORD = prev.password; } }, 60_000); }); diff --git a/src/commands/onboard-non-interactive.gateway.test.ts b/src/commands/onboard-non-interactive.gateway.test.ts index 7ab4de54e..eae5745a2 100644 --- a/src/commands/onboard-non-interactive.gateway.test.ts +++ b/src/commands/onboard-non-interactive.gateway.test.ts @@ -79,15 +79,15 @@ const runtime = { describe("onboard (non-interactive): gateway and remote auth", () => { const prev = { home: process.env.HOME, - stateDir: process.env.CLAWDBOT_STATE_DIR, - configPath: process.env.CLAWDBOT_CONFIG_PATH, - skipChannels: process.env.CLAWDBOT_SKIP_CHANNELS, - skipGmail: process.env.CLAWDBOT_SKIP_GMAIL_WATCHER, - skipCron: process.env.CLAWDBOT_SKIP_CRON, - skipCanvas: process.env.CLAWDBOT_SKIP_CANVAS_HOST, - skipBrowser: process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER, - token: process.env.CLAWDBOT_GATEWAY_TOKEN, - password: process.env.CLAWDBOT_GATEWAY_PASSWORD, + stateDir: process.env.MOLTBOT_STATE_DIR, + configPath: process.env.MOLTBOT_CONFIG_PATH, + skipChannels: process.env.MOLTBOT_SKIP_CHANNELS, + skipGmail: process.env.MOLTBOT_SKIP_GMAIL_WATCHER, + skipCron: process.env.MOLTBOT_SKIP_CRON, + skipCanvas: process.env.MOLTBOT_SKIP_CANVAS_HOST, + skipBrowser: process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER, + token: process.env.MOLTBOT_GATEWAY_TOKEN, + password: process.env.MOLTBOT_GATEWAY_PASSWORD, }; let tempHome: string | undefined; @@ -96,19 +96,19 @@ describe("onboard (non-interactive): gateway and remote auth", () => { throw new Error("temp home not initialized"); } const stateDir = await fs.mkdtemp(path.join(tempHome, prefix)); - process.env.CLAWDBOT_STATE_DIR = stateDir; - delete process.env.CLAWDBOT_CONFIG_PATH; + process.env.MOLTBOT_STATE_DIR = stateDir; + delete process.env.MOLTBOT_CONFIG_PATH; return stateDir; }; beforeAll(async () => { - process.env.CLAWDBOT_SKIP_CHANNELS = "1"; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = "1"; - process.env.CLAWDBOT_SKIP_CRON = "1"; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = "1"; - process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER = "1"; - delete process.env.CLAWDBOT_GATEWAY_TOKEN; - delete process.env.CLAWDBOT_GATEWAY_PASSWORD; + process.env.MOLTBOT_SKIP_CHANNELS = "1"; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = "1"; + process.env.MOLTBOT_SKIP_CRON = "1"; + process.env.MOLTBOT_SKIP_CANVAS_HOST = "1"; + process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER = "1"; + delete process.env.MOLTBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_PASSWORD; tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-onboard-")); process.env.HOME = tempHome; @@ -119,15 +119,15 @@ describe("onboard (non-interactive): gateway and remote auth", () => { await fs.rm(tempHome, { recursive: true, force: true }); } process.env.HOME = prev.home; - process.env.CLAWDBOT_STATE_DIR = prev.stateDir; - process.env.CLAWDBOT_CONFIG_PATH = prev.configPath; - process.env.CLAWDBOT_SKIP_CHANNELS = prev.skipChannels; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; - process.env.CLAWDBOT_SKIP_CRON = prev.skipCron; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = prev.skipCanvas; - process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER = prev.skipBrowser; - process.env.CLAWDBOT_GATEWAY_TOKEN = prev.token; - process.env.CLAWDBOT_GATEWAY_PASSWORD = prev.password; + process.env.MOLTBOT_STATE_DIR = prev.stateDir; + process.env.MOLTBOT_CONFIG_PATH = prev.configPath; + process.env.MOLTBOT_SKIP_CHANNELS = prev.skipChannels; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; + process.env.MOLTBOT_SKIP_CRON = prev.skipCron; + process.env.MOLTBOT_SKIP_CANVAS_HOST = prev.skipCanvas; + process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER = prev.skipBrowser; + process.env.MOLTBOT_GATEWAY_TOKEN = prev.token; + process.env.MOLTBOT_GATEWAY_PASSWORD = prev.password; }); it("writes gateway token auth into config and gateway enforces it", async () => { @@ -216,8 +216,8 @@ describe("onboard (non-interactive): gateway and remote auth", () => { return; } const stateDir = await initStateDir("state-lan-"); - process.env.CLAWDBOT_STATE_DIR = stateDir; - process.env.CLAWDBOT_CONFIG_PATH = path.join(stateDir, "moltbot.json"); + process.env.MOLTBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_CONFIG_PATH = path.join(stateDir, "moltbot.json"); const port = await getFreeGatewayPort(); const workspace = path.join(stateDir, "clawd"); diff --git a/src/commands/onboard-non-interactive.token.test.ts b/src/commands/onboard-non-interactive.token.test.ts index ba18f6b66..4911d6ee9 100644 --- a/src/commands/onboard-non-interactive.token.test.ts +++ b/src/commands/onboard-non-interactive.token.test.ts @@ -8,27 +8,27 @@ describe("onboard (non-interactive): token auth", () => { it("writes token profile config and stores the token", async () => { const prev = { home: process.env.HOME, - stateDir: process.env.CLAWDBOT_STATE_DIR, - configPath: process.env.CLAWDBOT_CONFIG_PATH, - skipChannels: process.env.CLAWDBOT_SKIP_CHANNELS, - skipGmail: process.env.CLAWDBOT_SKIP_GMAIL_WATCHER, - skipCron: process.env.CLAWDBOT_SKIP_CRON, - skipCanvas: process.env.CLAWDBOT_SKIP_CANVAS_HOST, - token: process.env.CLAWDBOT_GATEWAY_TOKEN, - password: process.env.CLAWDBOT_GATEWAY_PASSWORD, + stateDir: process.env.MOLTBOT_STATE_DIR, + configPath: process.env.MOLTBOT_CONFIG_PATH, + skipChannels: process.env.MOLTBOT_SKIP_CHANNELS, + skipGmail: process.env.MOLTBOT_SKIP_GMAIL_WATCHER, + skipCron: process.env.MOLTBOT_SKIP_CRON, + skipCanvas: process.env.MOLTBOT_SKIP_CANVAS_HOST, + token: process.env.MOLTBOT_GATEWAY_TOKEN, + password: process.env.MOLTBOT_GATEWAY_PASSWORD, }; - process.env.CLAWDBOT_SKIP_CHANNELS = "1"; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = "1"; - process.env.CLAWDBOT_SKIP_CRON = "1"; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = "1"; - delete process.env.CLAWDBOT_GATEWAY_TOKEN; - delete process.env.CLAWDBOT_GATEWAY_PASSWORD; + process.env.MOLTBOT_SKIP_CHANNELS = "1"; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = "1"; + process.env.MOLTBOT_SKIP_CRON = "1"; + process.env.MOLTBOT_SKIP_CANVAS_HOST = "1"; + delete process.env.MOLTBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_PASSWORD; const tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-onboard-token-")); process.env.HOME = tempHome; - process.env.CLAWDBOT_STATE_DIR = tempHome; - process.env.CLAWDBOT_CONFIG_PATH = path.join(tempHome, "moltbot.json"); + process.env.MOLTBOT_STATE_DIR = tempHome; + process.env.MOLTBOT_CONFIG_PATH = path.join(tempHome, "moltbot.json"); vi.resetModules(); const token = `sk-ant-oat01-${"a".repeat(80)}`; @@ -80,14 +80,14 @@ describe("onboard (non-interactive): token auth", () => { } finally { await fs.rm(tempHome, { recursive: true, force: true }); process.env.HOME = prev.home; - process.env.CLAWDBOT_STATE_DIR = prev.stateDir; - process.env.CLAWDBOT_CONFIG_PATH = prev.configPath; - process.env.CLAWDBOT_SKIP_CHANNELS = prev.skipChannels; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; - process.env.CLAWDBOT_SKIP_CRON = prev.skipCron; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = prev.skipCanvas; - process.env.CLAWDBOT_GATEWAY_TOKEN = prev.token; - process.env.CLAWDBOT_GATEWAY_PASSWORD = prev.password; + process.env.MOLTBOT_STATE_DIR = prev.stateDir; + process.env.MOLTBOT_CONFIG_PATH = prev.configPath; + process.env.MOLTBOT_SKIP_CHANNELS = prev.skipChannels; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; + process.env.MOLTBOT_SKIP_CRON = prev.skipCron; + process.env.MOLTBOT_SKIP_CANVAS_HOST = prev.skipCanvas; + process.env.MOLTBOT_GATEWAY_TOKEN = prev.token; + process.env.MOLTBOT_GATEWAY_PASSWORD = prev.password; } }, 60_000); }); diff --git a/src/commands/status-all.ts b/src/commands/status-all.ts index 290c5a22a..0794999ce 100644 --- a/src/commands/status-all.ts +++ b/src/commands/status-all.ts @@ -138,10 +138,10 @@ export async function statusAllCommand( ? typeof remote?.token === "string" && remote.token.trim() ? remote.token.trim() : undefined - : process.env.CLAWDBOT_GATEWAY_TOKEN?.trim() || + : process.env.MOLTBOT_GATEWAY_TOKEN?.trim() || (typeof authToken === "string" && authToken.trim() ? authToken.trim() : undefined); const password = - process.env.CLAWDBOT_GATEWAY_PASSWORD?.trim() || + process.env.MOLTBOT_GATEWAY_PASSWORD?.trim() || (mode === "remote" ? typeof remote?.password === "string" && remote.password.trim() ? remote.password.trim() diff --git a/src/commands/status.gateway-probe.ts b/src/commands/status.gateway-probe.ts index 9ede30692..5f3f73832 100644 --- a/src/commands/status.gateway-probe.ts +++ b/src/commands/status.gateway-probe.ts @@ -12,10 +12,10 @@ export function resolveGatewayProbeAuth(cfg: ReturnType): { ? typeof remote?.token === "string" && remote.token.trim().length > 0 ? remote.token.trim() : undefined - : process.env.CLAWDBOT_GATEWAY_TOKEN?.trim() || + : process.env.MOLTBOT_GATEWAY_TOKEN?.trim() || (typeof authToken === "string" && authToken.trim().length > 0 ? authToken.trim() : undefined); const password = - process.env.CLAWDBOT_GATEWAY_PASSWORD?.trim() || + process.env.MOLTBOT_GATEWAY_PASSWORD?.trim() || (isRemoteMode ? typeof remote?.password === "string" && remote.password.trim().length > 0 ? remote.password.trim() diff --git a/src/commands/status.scan.ts b/src/commands/status.scan.ts index 13de0a383..7c64e358d 100644 --- a/src/commands/status.scan.ts +++ b/src/commands/status.scan.ts @@ -140,8 +140,8 @@ export async function scanStatus( progress.setLabel("Summarizing channels…"); const channels = await buildChannelsTable(cfg, { // Show token previews in regular status; keep `status --all` redacted. - // Set `CLAWDBOT_SHOW_SECRETS=0` to force redaction. - showSecrets: process.env.CLAWDBOT_SHOW_SECRETS?.trim() !== "0", + // Set `MOLTBOT_SHOW_SECRETS=0` to force redaction. + showSecrets: process.env.MOLTBOT_SHOW_SECRETS?.trim() !== "0", }); progress.tick(); diff --git a/src/commands/status.test.ts b/src/commands/status.test.ts index 06d07d476..0ac6b2d6f 100644 --- a/src/commands/status.test.ts +++ b/src/commands/status.test.ts @@ -3,15 +3,15 @@ import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; let previousProfile: string | undefined; beforeAll(() => { - previousProfile = process.env.CLAWDBOT_PROFILE; - process.env.CLAWDBOT_PROFILE = "isolated"; + previousProfile = process.env.MOLTBOT_PROFILE; + process.env.MOLTBOT_PROFILE = "isolated"; }); afterAll(() => { if (previousProfile === undefined) { - delete process.env.CLAWDBOT_PROFILE; + delete process.env.MOLTBOT_PROFILE; } else { - process.env.CLAWDBOT_PROFILE = previousProfile; + process.env.MOLTBOT_PROFILE = previousProfile; } }); @@ -339,8 +339,8 @@ describe("statusCommand", () => { }); it("shows gateway auth when reachable", async () => { - const prevToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - process.env.CLAWDBOT_GATEWAY_TOKEN = "abcd1234"; + const prevToken = process.env.MOLTBOT_GATEWAY_TOKEN; + process.env.MOLTBOT_GATEWAY_TOKEN = "abcd1234"; try { mocks.probeGateway.mockResolvedValueOnce({ ok: true, @@ -358,8 +358,8 @@ describe("statusCommand", () => { const logs = (runtime.log as vi.Mock).mock.calls.map((c) => String(c[0])); expect(logs.some((l) => l.includes("auth token"))).toBe(true); } finally { - if (prevToken === undefined) delete process.env.CLAWDBOT_GATEWAY_TOKEN; - else process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; + if (prevToken === undefined) delete process.env.MOLTBOT_GATEWAY_TOKEN; + else process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; } }); diff --git a/src/commands/uninstall.ts b/src/commands/uninstall.ts index 1aa33b574..7452739b2 100644 --- a/src/commands/uninstall.ts +++ b/src/commands/uninstall.ts @@ -111,7 +111,7 @@ export async function uninstallCommand(runtime: RuntimeEnv, opts: UninstallOptio label: "Gateway service", hint: "launchd / systemd / schtasks", }, - { value: "state", label: "State + config", hint: "~/.clawdbot" }, + { value: "state", label: "State + config", hint: "~/.moltbot" }, { value: "workspace", label: "Workspace", hint: "agent files" }, { value: "app", diff --git a/src/config/config.agent-concurrency-defaults.test.ts b/src/config/config.agent-concurrency-defaults.test.ts index 43d889323..57125a31d 100644 --- a/src/config/config.agent-concurrency-defaults.test.ts +++ b/src/config/config.agent-concurrency-defaults.test.ts @@ -43,7 +43,7 @@ describe("agent concurrency defaults", () => { it("injects defaults on load", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), diff --git a/src/config/config.compaction-settings.test.ts b/src/config/config.compaction-settings.test.ts index b3ef64f63..cacf524d5 100644 --- a/src/config/config.compaction-settings.test.ts +++ b/src/config/config.compaction-settings.test.ts @@ -6,7 +6,7 @@ import { withTempHome } from "./test-helpers.js"; describe("config compaction settings", () => { it("preserves memory flush config values", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -48,7 +48,7 @@ describe("config compaction settings", () => { it("defaults compaction mode to safeguard", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), diff --git a/src/config/config.discord.test.ts b/src/config/config.discord.test.ts index b33ac9247..2dbc7e9f4 100644 --- a/src/config/config.discord.test.ts +++ b/src/config/config.discord.test.ts @@ -16,7 +16,7 @@ describe("config discord", () => { it("loads discord guild map + dm group settings", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), diff --git a/src/config/config.env-vars.test.ts b/src/config/config.env-vars.test.ts index ad7e212ef..d31339660 100644 --- a/src/config/config.env-vars.test.ts +++ b/src/config/config.env-vars.test.ts @@ -6,7 +6,7 @@ import { withEnvOverride, withTempHome } from "./test-helpers.js"; describe("config env vars", () => { it("applies env vars from env block when missing", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -30,7 +30,7 @@ describe("config env vars", () => { it("does not override existing env vars", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -54,7 +54,7 @@ describe("config env vars", () => { it("applies env vars from env.vars when missing", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), diff --git a/src/config/config.identity-defaults.test.ts b/src/config/config.identity-defaults.test.ts index 046e8ccef..92f85ef2d 100644 --- a/src/config/config.identity-defaults.test.ts +++ b/src/config/config.identity-defaults.test.ts @@ -17,7 +17,7 @@ describe("config identity defaults", () => { it("does not derive mentionPatterns when identity is set", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -54,7 +54,7 @@ describe("config identity defaults", () => { it("defaults ackReactionScope without setting ackReaction", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -91,7 +91,7 @@ describe("config identity defaults", () => { it("keeps ackReaction unset when identity is missing", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -116,7 +116,7 @@ describe("config identity defaults", () => { it("does not override explicit values", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -156,7 +156,7 @@ describe("config identity defaults", () => { it("supports provider textChunkLimit config", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -202,7 +202,7 @@ describe("config identity defaults", () => { it("accepts blank model provider apiKey values", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -251,7 +251,7 @@ describe("config identity defaults", () => { it("respects empty responsePrefix to disable identity defaults", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -287,7 +287,7 @@ describe("config identity defaults", () => { it("does not synthesize agent list/session when absent", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -316,7 +316,7 @@ describe("config identity defaults", () => { it("does not derive responsePrefix from identity emoji", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), diff --git a/src/config/config.legacy-config-detection.accepts-imessage-dmpolicy.test.ts b/src/config/config.legacy-config-detection.accepts-imessage-dmpolicy.test.ts index 09ce79c33..3f2c0eaef 100644 --- a/src/config/config.legacy-config-detection.accepts-imessage-dmpolicy.test.ts +++ b/src/config/config.legacy-config-detection.accepts-imessage-dmpolicy.test.ts @@ -176,7 +176,7 @@ describe("legacy config detection", () => { }); it("flags legacy config in snapshot", async () => { await withTempHome(async (home) => { - const configPath = path.join(home, ".clawdbot", "moltbot.json"); + const configPath = path.join(home, ".moltbot", "moltbot.json"); await fs.mkdir(path.dirname(configPath), { recursive: true }); await fs.writeFile( configPath, @@ -202,7 +202,7 @@ describe("legacy config detection", () => { }); it("does not auto-migrate claude-cli auth profile mode on load", async () => { await withTempHome(async (home) => { - const configPath = path.join(home, ".clawdbot", "moltbot.json"); + const configPath = path.join(home, ".moltbot", "moltbot.json"); await fs.mkdir(path.dirname(configPath), { recursive: true }); await fs.writeFile( configPath, @@ -234,7 +234,7 @@ describe("legacy config detection", () => { }); it("flags legacy provider sections in snapshot", async () => { await withTempHome(async (home) => { - const configPath = path.join(home, ".clawdbot", "moltbot.json"); + const configPath = path.join(home, ".moltbot", "moltbot.json"); await fs.mkdir(path.dirname(configPath), { recursive: true }); await fs.writeFile( configPath, @@ -260,7 +260,7 @@ describe("legacy config detection", () => { }); it("flags routing.allowFrom in snapshot", async () => { await withTempHome(async (home) => { - const configPath = path.join(home, ".clawdbot", "moltbot.json"); + const configPath = path.join(home, ".moltbot", "moltbot.json"); await fs.mkdir(path.dirname(configPath), { recursive: true }); await fs.writeFile( configPath, @@ -286,7 +286,7 @@ describe("legacy config detection", () => { }); it("rejects bindings[].match.provider on load", async () => { await withTempHome(async (home) => { - const configPath = path.join(home, ".clawdbot", "moltbot.json"); + const configPath = path.join(home, ".moltbot", "moltbot.json"); await fs.mkdir(path.dirname(configPath), { recursive: true }); await fs.writeFile( configPath, @@ -316,7 +316,7 @@ describe("legacy config detection", () => { }); it("rejects bindings[].match.accountID on load", async () => { await withTempHome(async (home) => { - const configPath = path.join(home, ".clawdbot", "moltbot.json"); + const configPath = path.join(home, ".moltbot", "moltbot.json"); await fs.mkdir(path.dirname(configPath), { recursive: true }); await fs.writeFile( configPath, @@ -346,7 +346,7 @@ describe("legacy config detection", () => { }); it("rejects session.sendPolicy.rules[].match.provider on load", async () => { await withTempHome(async (home) => { - const configPath = path.join(home, ".clawdbot", "moltbot.json"); + const configPath = path.join(home, ".moltbot", "moltbot.json"); await fs.mkdir(path.dirname(configPath), { recursive: true }); await fs.writeFile( configPath, @@ -380,7 +380,7 @@ describe("legacy config detection", () => { }); it("rejects messages.queue.byProvider on load", async () => { await withTempHome(async (home) => { - const configPath = path.join(home, ".clawdbot", "moltbot.json"); + const configPath = path.join(home, ".moltbot", "moltbot.json"); await fs.mkdir(path.dirname(configPath), { recursive: true }); await fs.writeFile( configPath, diff --git a/src/config/config.multi-agent-agentdir-validation.test.ts b/src/config/config.multi-agent-agentdir-validation.test.ts index b1354fe95..767c207bb 100644 --- a/src/config/config.multi-agent-agentdir-validation.test.ts +++ b/src/config/config.multi-agent-agentdir-validation.test.ts @@ -26,7 +26,7 @@ describe("multi-agent agentDir validation", () => { it("throws on shared agentDir during loadConfig()", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -34,8 +34,8 @@ describe("multi-agent agentDir validation", () => { { agents: { list: [ - { id: "a", agentDir: "~/.clawdbot/agents/shared/agent" }, - { id: "b", agentDir: "~/.clawdbot/agents/shared/agent" }, + { id: "a", agentDir: "~/.moltbot/agents/shared/agent" }, + { id: "b", agentDir: "~/.moltbot/agents/shared/agent" }, ], }, bindings: [{ agentId: "a", match: { channel: "telegram" } }], diff --git a/src/config/config.nix-integration-u3-u5-u9.test.ts b/src/config/config.nix-integration-u3-u5-u9.test.ts index 9310416d4..cb96e7762 100644 --- a/src/config/config.nix-integration-u3-u5-u9.test.ts +++ b/src/config/config.nix-integration-u3-u5-u9.test.ts @@ -5,29 +5,29 @@ import { withEnvOverride, withTempHome } from "./test-helpers.js"; describe("Nix integration (U3, U5, U9)", () => { describe("U3: isNixMode env var detection", () => { - it("isNixMode is false when CLAWDBOT_NIX_MODE is not set", async () => { - await withEnvOverride({ CLAWDBOT_NIX_MODE: undefined }, async () => { + it("isNixMode is false when MOLTBOT_NIX_MODE is not set", async () => { + await withEnvOverride({ MOLTBOT_NIX_MODE: undefined }, async () => { const { isNixMode } = await import("./config.js"); expect(isNixMode).toBe(false); }); }); - it("isNixMode is false when CLAWDBOT_NIX_MODE is empty", async () => { - await withEnvOverride({ CLAWDBOT_NIX_MODE: "" }, async () => { + it("isNixMode is false when MOLTBOT_NIX_MODE is empty", async () => { + await withEnvOverride({ MOLTBOT_NIX_MODE: "" }, async () => { const { isNixMode } = await import("./config.js"); expect(isNixMode).toBe(false); }); }); - it("isNixMode is false when CLAWDBOT_NIX_MODE is not '1'", async () => { - await withEnvOverride({ CLAWDBOT_NIX_MODE: "true" }, async () => { + it("isNixMode is false when MOLTBOT_NIX_MODE is not '1'", async () => { + await withEnvOverride({ MOLTBOT_NIX_MODE: "true" }, async () => { const { isNixMode } = await import("./config.js"); expect(isNixMode).toBe(false); }); }); - it("isNixMode is true when CLAWDBOT_NIX_MODE=1", async () => { - await withEnvOverride({ CLAWDBOT_NIX_MODE: "1" }, async () => { + it("isNixMode is true when MOLTBOT_NIX_MODE=1", async () => { + await withEnvOverride({ MOLTBOT_NIX_MODE: "1" }, async () => { const { isNixMode } = await import("./config.js"); expect(isNixMode).toBe(true); }); @@ -35,19 +35,19 @@ describe("Nix integration (U3, U5, U9)", () => { }); describe("U5: CONFIG_PATH and STATE_DIR env var overrides", () => { - it("STATE_DIR defaults to ~/.clawdbot when env not set", async () => { + it("STATE_DIR defaults to ~/.moltbot when env not set", async () => { await withEnvOverride( - { MOLTBOT_STATE_DIR: undefined, CLAWDBOT_STATE_DIR: undefined }, + { MOLTBOT_STATE_DIR: undefined, MOLTBOT_STATE_DIR: undefined }, async () => { const { STATE_DIR } = await import("./config.js"); - expect(STATE_DIR).toMatch(/\.clawdbot$/); + expect(STATE_DIR).toMatch(/\.moltbot$/); }, ); }); - it("STATE_DIR respects CLAWDBOT_STATE_DIR override", async () => { + it("STATE_DIR respects MOLTBOT_STATE_DIR override", async () => { await withEnvOverride( - { MOLTBOT_STATE_DIR: undefined, CLAWDBOT_STATE_DIR: "/custom/state/dir" }, + { MOLTBOT_STATE_DIR: undefined, MOLTBOT_STATE_DIR: "/custom/state/dir" }, async () => { const { STATE_DIR } = await import("./config.js"); expect(STATE_DIR).toBe(path.resolve("/custom/state/dir")); @@ -57,7 +57,7 @@ describe("Nix integration (U3, U5, U9)", () => { it("STATE_DIR prefers MOLTBOT_STATE_DIR over legacy override", async () => { await withEnvOverride( - { MOLTBOT_STATE_DIR: "/custom/new", CLAWDBOT_STATE_DIR: "/custom/legacy" }, + { MOLTBOT_STATE_DIR: "/custom/new", MOLTBOT_STATE_DIR: "/custom/legacy" }, async () => { const { STATE_DIR } = await import("./config.js"); expect(STATE_DIR).toBe(path.resolve("/custom/new")); @@ -65,24 +65,24 @@ describe("Nix integration (U3, U5, U9)", () => { ); }); - it("CONFIG_PATH defaults to ~/.clawdbot/moltbot.json when env not set", async () => { + it("CONFIG_PATH defaults to ~/.moltbot/moltbot.json when env not set", async () => { await withEnvOverride( { MOLTBOT_CONFIG_PATH: undefined, MOLTBOT_STATE_DIR: undefined, - CLAWDBOT_CONFIG_PATH: undefined, - CLAWDBOT_STATE_DIR: undefined, + MOLTBOT_CONFIG_PATH: undefined, + MOLTBOT_STATE_DIR: undefined, }, async () => { const { CONFIG_PATH } = await import("./config.js"); - expect(CONFIG_PATH).toMatch(/\.clawdbot[\\/]moltbot\.json$/); + expect(CONFIG_PATH).toMatch(/\.moltbot[\\/]moltbot\.json$/); }, ); }); - it("CONFIG_PATH respects CLAWDBOT_CONFIG_PATH override", async () => { + it("CONFIG_PATH respects MOLTBOT_CONFIG_PATH override", async () => { await withEnvOverride( - { MOLTBOT_CONFIG_PATH: undefined, CLAWDBOT_CONFIG_PATH: "/nix/store/abc/moltbot.json" }, + { MOLTBOT_CONFIG_PATH: undefined, MOLTBOT_CONFIG_PATH: "/nix/store/abc/moltbot.json" }, async () => { const { CONFIG_PATH } = await import("./config.js"); expect(CONFIG_PATH).toBe(path.resolve("/nix/store/abc/moltbot.json")); @@ -94,7 +94,7 @@ describe("Nix integration (U3, U5, U9)", () => { await withEnvOverride( { MOLTBOT_CONFIG_PATH: "/nix/store/new/moltbot.json", - CLAWDBOT_CONFIG_PATH: "/nix/store/legacy/moltbot.json", + MOLTBOT_CONFIG_PATH: "/nix/store/legacy/moltbot.json", }, async () => { const { CONFIG_PATH } = await import("./config.js"); @@ -103,13 +103,13 @@ describe("Nix integration (U3, U5, U9)", () => { ); }); - it("CONFIG_PATH expands ~ in CLAWDBOT_CONFIG_PATH override", async () => { + it("CONFIG_PATH expands ~ in MOLTBOT_CONFIG_PATH override", async () => { await withTempHome(async (home) => { await withEnvOverride( - { MOLTBOT_CONFIG_PATH: undefined, CLAWDBOT_CONFIG_PATH: "~/.clawdbot/custom.json" }, + { MOLTBOT_CONFIG_PATH: undefined, MOLTBOT_CONFIG_PATH: "~/.moltbot/custom.json" }, async () => { const { CONFIG_PATH } = await import("./config.js"); - expect(CONFIG_PATH).toBe(path.join(home, ".clawdbot", "custom.json")); + expect(CONFIG_PATH).toBe(path.join(home, ".moltbot", "custom.json")); }, ); }); @@ -120,8 +120,8 @@ describe("Nix integration (U3, U5, U9)", () => { { MOLTBOT_CONFIG_PATH: undefined, MOLTBOT_STATE_DIR: undefined, - CLAWDBOT_CONFIG_PATH: undefined, - CLAWDBOT_STATE_DIR: "/custom/state", + MOLTBOT_CONFIG_PATH: undefined, + MOLTBOT_STATE_DIR: "/custom/state", }, async () => { const { CONFIG_PATH } = await import("./config.js"); @@ -134,7 +134,7 @@ describe("Nix integration (U3, U5, U9)", () => { describe("U5b: tilde expansion for config paths", () => { it("expands ~ in common path-ish config fields", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); const pluginDir = path.join(home, "plugins", "demo-plugin"); await fs.mkdir(pluginDir, { recursive: true }); @@ -170,7 +170,7 @@ describe("Nix integration (U3, U5, U9)", () => { { id: "main", workspace: "~/ws-agent", - agentDir: "~/.clawdbot/agents/main", + agentDir: "~/.moltbot/agents/main", sandbox: { workspaceRoot: "~/sandbox-root" }, }, ], @@ -179,7 +179,7 @@ describe("Nix integration (U3, U5, U9)", () => { whatsapp: { accounts: { personal: { - authDir: "~/.clawdbot/credentials/wa-personal", + authDir: "~/.moltbot/credentials/wa-personal", }, }, }, @@ -198,12 +198,10 @@ describe("Nix integration (U3, U5, U9)", () => { expect(cfg.plugins?.load?.paths?.[0]).toBe(path.join(home, "plugins", "demo-plugin")); expect(cfg.agents?.defaults?.workspace).toBe(path.join(home, "ws-default")); expect(cfg.agents?.list?.[0]?.workspace).toBe(path.join(home, "ws-agent")); - expect(cfg.agents?.list?.[0]?.agentDir).toBe( - path.join(home, ".clawdbot", "agents", "main"), - ); + expect(cfg.agents?.list?.[0]?.agentDir).toBe(path.join(home, ".moltbot", "agents", "main")); expect(cfg.agents?.list?.[0]?.sandbox?.workspaceRoot).toBe(path.join(home, "sandbox-root")); expect(cfg.channels?.whatsapp?.accounts?.personal?.authDir).toBe( - path.join(home, ".clawdbot", "credentials", "wa-personal"), + path.join(home, ".moltbot", "credentials", "wa-personal"), ); }); }); @@ -211,21 +209,21 @@ describe("Nix integration (U3, U5, U9)", () => { describe("U6: gateway port resolution", () => { it("uses default when env and config are unset", async () => { - await withEnvOverride({ CLAWDBOT_GATEWAY_PORT: undefined }, async () => { + await withEnvOverride({ MOLTBOT_GATEWAY_PORT: undefined }, async () => { const { DEFAULT_GATEWAY_PORT, resolveGatewayPort } = await import("./config.js"); expect(resolveGatewayPort({})).toBe(DEFAULT_GATEWAY_PORT); }); }); - it("prefers CLAWDBOT_GATEWAY_PORT over config", async () => { - await withEnvOverride({ CLAWDBOT_GATEWAY_PORT: "19001" }, async () => { + it("prefers MOLTBOT_GATEWAY_PORT over config", async () => { + await withEnvOverride({ MOLTBOT_GATEWAY_PORT: "19001" }, async () => { const { resolveGatewayPort } = await import("./config.js"); expect(resolveGatewayPort({ gateway: { port: 19002 } })).toBe(19001); }); }); it("falls back to config when env is invalid", async () => { - await withEnvOverride({ CLAWDBOT_GATEWAY_PORT: "nope" }, async () => { + await withEnvOverride({ MOLTBOT_GATEWAY_PORT: "nope" }, async () => { const { resolveGatewayPort } = await import("./config.js"); expect(resolveGatewayPort({ gateway: { port: 19003 } })).toBe(19003); }); @@ -235,7 +233,7 @@ describe("Nix integration (U3, U5, U9)", () => { describe("U9: telegram.tokenFile schema validation", () => { it("accepts config with only botToken", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -255,7 +253,7 @@ describe("Nix integration (U3, U5, U9)", () => { it("accepts config with only tokenFile", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -275,7 +273,7 @@ describe("Nix integration (U3, U5, U9)", () => { it("accepts config with both botToken and tokenFile", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), diff --git a/src/config/config.plugin-validation.test.ts b/src/config/config.plugin-validation.test.ts index ce1f6fd51..6fa14b520 100644 --- a/src/config/config.plugin-validation.test.ts +++ b/src/config/config.plugin-validation.test.ts @@ -34,7 +34,7 @@ async function writePluginFixture(params: { describe("config plugin validation", () => { it("rejects missing plugin load paths", async () => { await withTempHome(async (home) => { - process.env.CLAWDBOT_STATE_DIR = path.join(home, ".clawdbot"); + process.env.MOLTBOT_STATE_DIR = path.join(home, ".moltbot"); vi.resetModules(); const { validateConfigObjectWithPlugins } = await import("./config.js"); const missingPath = path.join(home, "missing-plugin"); @@ -55,7 +55,7 @@ describe("config plugin validation", () => { it("rejects missing plugin ids in entries", async () => { await withTempHome(async (home) => { - process.env.CLAWDBOT_STATE_DIR = path.join(home, ".clawdbot"); + process.env.MOLTBOT_STATE_DIR = path.join(home, ".moltbot"); vi.resetModules(); const { validateConfigObjectWithPlugins } = await import("./config.js"); const res = validateConfigObjectWithPlugins({ @@ -74,7 +74,7 @@ describe("config plugin validation", () => { it("rejects missing plugin ids in allow/deny/slots", async () => { await withTempHome(async (home) => { - process.env.CLAWDBOT_STATE_DIR = path.join(home, ".clawdbot"); + process.env.MOLTBOT_STATE_DIR = path.join(home, ".moltbot"); vi.resetModules(); const { validateConfigObjectWithPlugins } = await import("./config.js"); const res = validateConfigObjectWithPlugins({ @@ -101,7 +101,7 @@ describe("config plugin validation", () => { it("surfaces plugin config diagnostics", async () => { await withTempHome(async (home) => { - process.env.CLAWDBOT_STATE_DIR = path.join(home, ".clawdbot"); + process.env.MOLTBOT_STATE_DIR = path.join(home, ".moltbot"); const pluginDir = path.join(home, "bad-plugin"); await writePluginFixture({ dir: pluginDir, @@ -140,7 +140,7 @@ describe("config plugin validation", () => { it("accepts known plugin ids", async () => { await withTempHome(async (home) => { - process.env.CLAWDBOT_STATE_DIR = path.join(home, ".clawdbot"); + process.env.MOLTBOT_STATE_DIR = path.join(home, ".moltbot"); vi.resetModules(); const { validateConfigObjectWithPlugins } = await import("./config.js"); const res = validateConfigObjectWithPlugins({ @@ -153,7 +153,7 @@ describe("config plugin validation", () => { it("accepts plugin heartbeat targets", async () => { await withTempHome(async (home) => { - process.env.CLAWDBOT_STATE_DIR = path.join(home, ".clawdbot"); + process.env.MOLTBOT_STATE_DIR = path.join(home, ".moltbot"); const pluginDir = path.join(home, "bluebubbles-plugin"); await writePluginFixture({ dir: pluginDir, @@ -174,7 +174,7 @@ describe("config plugin validation", () => { it("rejects unknown heartbeat targets", async () => { await withTempHome(async (home) => { - process.env.CLAWDBOT_STATE_DIR = path.join(home, ".clawdbot"); + process.env.MOLTBOT_STATE_DIR = path.join(home, ".moltbot"); vi.resetModules(); const { validateConfigObjectWithPlugins } = await import("./config.js"); const res = validateConfigObjectWithPlugins({ diff --git a/src/config/config.preservation-on-validation-failure.test.ts b/src/config/config.preservation-on-validation-failure.test.ts index 185c427db..a69d866b4 100644 --- a/src/config/config.preservation-on-validation-failure.test.ts +++ b/src/config/config.preservation-on-validation-failure.test.ts @@ -16,7 +16,7 @@ describe("config strict validation", () => { it("flags legacy config entries without auto-migrating", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), diff --git a/src/config/config.pruning-defaults.test.ts b/src/config/config.pruning-defaults.test.ts index 475d60950..d5b236056 100644 --- a/src/config/config.pruning-defaults.test.ts +++ b/src/config/config.pruning-defaults.test.ts @@ -10,7 +10,7 @@ describe("config pruning defaults", () => { process.env.ANTHROPIC_API_KEY = ""; process.env.ANTHROPIC_OAUTH_TOKEN = ""; await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -38,7 +38,7 @@ describe("config pruning defaults", () => { it("enables cache-ttl pruning + 1h heartbeat for Anthropic OAuth", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -69,7 +69,7 @@ describe("config pruning defaults", () => { it("enables cache-ttl pruning + 1h cache TTL for Anthropic API keys", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), @@ -107,7 +107,7 @@ describe("config pruning defaults", () => { it("does not override explicit contextPruning mode", async () => { await withTempHome(async (home) => { - const configDir = path.join(home, ".clawdbot"); + const configDir = path.join(home, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "moltbot.json"), diff --git a/src/config/env-substitution.test.ts b/src/config/env-substitution.test.ts index 53dde329f..b837bb4f9 100644 --- a/src/config/env-substitution.test.ts +++ b/src/config/env-substitution.test.ts @@ -247,12 +247,12 @@ describe("resolveConfigEnvVars", () => { const config = { gateway: { auth: { - token: "${CLAWDBOT_GATEWAY_TOKEN}", + token: "${MOLTBOT_GATEWAY_TOKEN}", }, }, }; const result = resolveConfigEnvVars(config, { - CLAWDBOT_GATEWAY_TOKEN: "secret-token", + MOLTBOT_GATEWAY_TOKEN: "secret-token", }); expect(result).toEqual({ gateway: { diff --git a/src/config/includes.test.ts b/src/config/includes.test.ts index 0f88eab77..a7242c71f 100644 --- a/src/config/includes.test.ts +++ b/src/config/includes.test.ts @@ -11,7 +11,7 @@ import { const ROOT_DIR = path.parse(process.cwd()).root; const CONFIG_DIR = path.join(ROOT_DIR, "config"); -const ETC_CLAWDBOT_DIR = path.join(ROOT_DIR, "etc", "moltbot"); +const ETC_MOLTBOT_DIR = path.join(ROOT_DIR, "etc", "moltbot"); const SHARED_DIR = path.join(ROOT_DIR, "shared"); const DEFAULT_BASE_PATH = path.join(CONFIG_DIR, "moltbot.json"); @@ -21,7 +21,7 @@ function configPath(...parts: string[]) { } function etcMoltbotPath(...parts: string[]) { - return path.join(ETC_CLAWDBOT_DIR, ...parts); + return path.join(ETC_MOLTBOT_DIR, ...parts); } function sharedPath(...parts: string[]) { diff --git a/src/config/io.compat.test.ts b/src/config/io.compat.test.ts index fd98f2650..fb0a21f13 100644 --- a/src/config/io.compat.test.ts +++ b/src/config/io.compat.test.ts @@ -16,7 +16,7 @@ async function withTempHome(run: (home: string) => Promise): Promise async function writeConfig( home: string, - dirname: ".moltbot" | ".clawdbot", + dirname: ".moltbot" | ".moltbot", port: number, filename: "moltbot.json" | "clawdbot.json" = "moltbot.json", ) { @@ -31,7 +31,7 @@ describe("config io compat (new + legacy folders)", () => { it("prefers ~/.moltbot/moltbot.json when both configs exist", async () => { await withTempHome(async (home) => { const newConfigPath = await writeConfig(home, ".moltbot", 19001); - await writeConfig(home, ".clawdbot", 18789); + await writeConfig(home, ".moltbot", 18789); const io = createConfigIO({ env: {} as NodeJS.ProcessEnv, @@ -42,9 +42,9 @@ describe("config io compat (new + legacy folders)", () => { }); }); - it("falls back to ~/.clawdbot/moltbot.json when only legacy exists", async () => { + it("falls back to ~/.moltbot/moltbot.json when only legacy exists", async () => { await withTempHome(async (home) => { - const legacyConfigPath = await writeConfig(home, ".clawdbot", 20001); + const legacyConfigPath = await writeConfig(home, ".moltbot", 20001); const io = createConfigIO({ env: {} as NodeJS.ProcessEnv, @@ -56,9 +56,9 @@ describe("config io compat (new + legacy folders)", () => { }); }); - it("falls back to ~/.clawdbot/clawdbot.json when only legacy filename exists", async () => { + it("falls back to ~/.moltbot/clawdbot.json when only legacy filename exists", async () => { await withTempHome(async (home) => { - const legacyConfigPath = await writeConfig(home, ".clawdbot", 20002, "clawdbot.json"); + const legacyConfigPath = await writeConfig(home, ".moltbot", 20002, "clawdbot.json"); const io = createConfigIO({ env: {} as NodeJS.ProcessEnv, @@ -72,8 +72,8 @@ describe("config io compat (new + legacy folders)", () => { it("prefers moltbot.json over legacy filename in the same dir", async () => { await withTempHome(async (home) => { - const preferred = await writeConfig(home, ".clawdbot", 20003, "moltbot.json"); - await writeConfig(home, ".clawdbot", 20004, "clawdbot.json"); + const preferred = await writeConfig(home, ".moltbot", 20003, "moltbot.json"); + await writeConfig(home, ".moltbot", 20004, "clawdbot.json"); const io = createConfigIO({ env: {} as NodeJS.ProcessEnv, @@ -88,10 +88,10 @@ describe("config io compat (new + legacy folders)", () => { it("honors explicit legacy config path env override", async () => { await withTempHome(async (home) => { const newConfigPath = await writeConfig(home, ".moltbot", 19002); - const legacyConfigPath = await writeConfig(home, ".clawdbot", 20002); + const legacyConfigPath = await writeConfig(home, ".moltbot", 20002); const io = createConfigIO({ - env: { CLAWDBOT_CONFIG_PATH: legacyConfigPath } as NodeJS.ProcessEnv, + env: { MOLTBOT_CONFIG_PATH: legacyConfigPath } as NodeJS.ProcessEnv, homedir: () => home, }); diff --git a/src/config/io.ts b/src/config/io.ts index 50f1edb82..95326966c 100644 --- a/src/config/io.ts +++ b/src/config/io.ts @@ -53,8 +53,8 @@ const SHELL_ENV_EXPECTED_KEYS = [ "DISCORD_BOT_TOKEN", "SLACK_BOT_TOKEN", "SLACK_APP_TOKEN", - "CLAWDBOT_GATEWAY_TOKEN", - "CLAWDBOT_GATEWAY_PASSWORD", + "MOLTBOT_GATEWAY_TOKEN", + "MOLTBOT_GATEWAY_PASSWORD", ]; const CONFIG_BACKUP_COUNT = 5; @@ -527,7 +527,7 @@ export function createConfigIO(overrides: ConfigIoDeps = {}) { } // NOTE: These wrappers intentionally do *not* cache the resolved config path at -// module scope. `CLAWDBOT_CONFIG_PATH` (and friends) are expected to work even +// module scope. `MOLTBOT_CONFIG_PATH` (and friends) are expected to work even // when set after the module has been imported (tests, one-off scripts, etc.). const DEFAULT_CONFIG_CACHE_MS = 200; let configCache: { @@ -537,7 +537,7 @@ let configCache: { } | null = null; function resolveConfigCacheMs(env: NodeJS.ProcessEnv): number { - const raw = env.CLAWDBOT_CONFIG_CACHE_MS?.trim(); + const raw = env.MOLTBOT_CONFIG_CACHE_MS?.trim(); if (raw === "" || raw === "0") return 0; if (!raw) return DEFAULT_CONFIG_CACHE_MS; const parsed = Number.parseInt(raw, 10); @@ -546,7 +546,7 @@ function resolveConfigCacheMs(env: NodeJS.ProcessEnv): number { } function shouldUseConfigCache(env: NodeJS.ProcessEnv): boolean { - if (env.CLAWDBOT_DISABLE_CONFIG_CACHE?.trim()) return false; + if (env.MOLTBOT_DISABLE_CONFIG_CACHE?.trim()) return false; return resolveConfigCacheMs(env) > 0; } diff --git a/src/config/normalize-paths.test.ts b/src/config/normalize-paths.test.ts index 6595a951a..c46cb4334 100644 --- a/src/config/normalize-paths.test.ts +++ b/src/config/normalize-paths.test.ts @@ -13,16 +13,16 @@ describe("normalizeConfigPaths", () => { const cfg = normalizeConfigPaths({ tools: { exec: { pathPrepend: ["~/bin"] } }, plugins: { load: { paths: ["~/plugins/a"] } }, - logging: { file: "~/.clawdbot/logs/moltbot.log" }, + logging: { file: "~/.moltbot/logs/moltbot.log" }, hooks: { - path: "~/.clawdbot/hooks.json5", + path: "~/.moltbot/hooks.json5", transformsDir: "~/hooks-xform", }, channels: { telegram: { accounts: { personal: { - tokenFile: "~/.clawdbot/telegram.token", + tokenFile: "~/.moltbot/telegram.token", }, }, }, @@ -36,7 +36,7 @@ describe("normalizeConfigPaths", () => { { id: "main", workspace: "~/ws-agent", - agentDir: "~/.clawdbot/agents/main", + agentDir: "~/.moltbot/agents/main", identity: { name: "~not-a-path", }, @@ -47,19 +47,19 @@ describe("normalizeConfigPaths", () => { }); expect(cfg.plugins?.load?.paths?.[0]).toBe(path.join(home, "plugins", "a")); - expect(cfg.logging?.file).toBe(path.join(home, ".clawdbot", "logs", "moltbot.log")); - expect(cfg.hooks?.path).toBe(path.join(home, ".clawdbot", "hooks.json5")); + expect(cfg.logging?.file).toBe(path.join(home, ".moltbot", "logs", "moltbot.log")); + expect(cfg.hooks?.path).toBe(path.join(home, ".moltbot", "hooks.json5")); expect(cfg.hooks?.transformsDir).toBe(path.join(home, "hooks-xform")); expect(cfg.tools?.exec?.pathPrepend?.[0]).toBe(path.join(home, "bin")); expect(cfg.channels?.telegram?.accounts?.personal?.tokenFile).toBe( - path.join(home, ".clawdbot", "telegram.token"), + path.join(home, ".moltbot", "telegram.token"), ); expect(cfg.channels?.imessage?.accounts?.personal?.dbPath).toBe( path.join(home, "Library", "Messages", "chat.db"), ); expect(cfg.agents?.defaults?.workspace).toBe(path.join(home, "ws-default")); expect(cfg.agents?.list?.[0]?.workspace).toBe(path.join(home, "ws-agent")); - expect(cfg.agents?.list?.[0]?.agentDir).toBe(path.join(home, ".clawdbot", "agents", "main")); + expect(cfg.agents?.list?.[0]?.agentDir).toBe(path.join(home, ".moltbot", "agents", "main")); expect(cfg.agents?.list?.[0]?.sandbox?.workspaceRoot).toBe(path.join(home, "sandbox-root")); // Non-path key => do not treat "~" as home expansion. diff --git a/src/config/paths.test.ts b/src/config/paths.test.ts index 806d29f92..1446884ab 100644 --- a/src/config/paths.test.ts +++ b/src/config/paths.test.ts @@ -12,10 +12,10 @@ import { } from "./paths.js"; describe("oauth paths", () => { - it("prefers CLAWDBOT_OAUTH_DIR over CLAWDBOT_STATE_DIR", () => { + it("prefers MOLTBOT_OAUTH_DIR over MOLTBOT_STATE_DIR", () => { const env = { - CLAWDBOT_OAUTH_DIR: "/custom/oauth", - CLAWDBOT_STATE_DIR: "/custom/state", + MOLTBOT_OAUTH_DIR: "/custom/oauth", + MOLTBOT_STATE_DIR: "/custom/state", } as NodeJS.ProcessEnv; expect(resolveOAuthDir(env, "/custom/state")).toBe(path.resolve("/custom/oauth")); @@ -24,9 +24,9 @@ describe("oauth paths", () => { ); }); - it("derives oauth path from CLAWDBOT_STATE_DIR when unset", () => { + it("derives oauth path from MOLTBOT_STATE_DIR when unset", () => { const env = { - CLAWDBOT_STATE_DIR: "/custom/state", + MOLTBOT_STATE_DIR: "/custom/state", } as NodeJS.ProcessEnv; expect(resolveOAuthDir(env, "/custom/state")).toBe(path.join("/custom/state", "credentials")); @@ -40,7 +40,7 @@ describe("state + config path candidates", () => { it("prefers MOLTBOT_STATE_DIR over legacy state dir env", () => { const env = { MOLTBOT_STATE_DIR: "/new/state", - CLAWDBOT_STATE_DIR: "/legacy/state", + MOLTBOT_STATE_DIR: "/legacy/state", } as NodeJS.ProcessEnv; expect(resolveStateDir(env, () => "/home/test")).toBe(path.resolve("/new/state")); @@ -51,8 +51,8 @@ describe("state + config path candidates", () => { const candidates = resolveDefaultConfigCandidates({} as NodeJS.ProcessEnv, () => home); expect(candidates[0]).toBe(path.join(home, ".moltbot", "moltbot.json")); expect(candidates[1]).toBe(path.join(home, ".moltbot", "clawdbot.json")); - expect(candidates[2]).toBe(path.join(home, ".clawdbot", "moltbot.json")); - expect(candidates[3]).toBe(path.join(home, ".clawdbot", "clawdbot.json")); + expect(candidates[2]).toBe(path.join(home, ".moltbot", "moltbot.json")); + expect(candidates[3]).toBe(path.join(home, ".moltbot", "clawdbot.json")); }); it("prefers ~/.moltbot when it exists and legacy dir is missing", async () => { @@ -74,11 +74,11 @@ describe("state + config path candidates", () => { const previousHomeDrive = process.env.HOMEDRIVE; const previousHomePath = process.env.HOMEPATH; const previousMoltbotConfig = process.env.MOLTBOT_CONFIG_PATH; - const previousClawdbotConfig = process.env.CLAWDBOT_CONFIG_PATH; + const previousClawdbotConfig = process.env.MOLTBOT_CONFIG_PATH; const previousMoltbotState = process.env.MOLTBOT_STATE_DIR; - const previousClawdbotState = process.env.CLAWDBOT_STATE_DIR; + const previousClawdbotState = process.env.MOLTBOT_STATE_DIR; try { - const legacyDir = path.join(root, ".clawdbot"); + const legacyDir = path.join(root, ".moltbot"); await fs.mkdir(legacyDir, { recursive: true }); const legacyPath = path.join(legacyDir, "clawdbot.json"); await fs.writeFile(legacyPath, "{}", "utf-8"); @@ -91,9 +91,9 @@ describe("state + config path candidates", () => { process.env.HOMEPATH = root.slice(parsed.root.length - 1); } delete process.env.MOLTBOT_CONFIG_PATH; - delete process.env.CLAWDBOT_CONFIG_PATH; + delete process.env.MOLTBOT_CONFIG_PATH; + delete process.env.MOLTBOT_STATE_DIR; delete process.env.MOLTBOT_STATE_DIR; - delete process.env.CLAWDBOT_STATE_DIR; vi.resetModules(); const { CONFIG_PATH } = await import("./paths.js"); @@ -112,12 +112,12 @@ describe("state + config path candidates", () => { else process.env.HOMEPATH = previousHomePath; if (previousMoltbotConfig === undefined) delete process.env.MOLTBOT_CONFIG_PATH; else process.env.MOLTBOT_CONFIG_PATH = previousMoltbotConfig; - if (previousClawdbotConfig === undefined) delete process.env.CLAWDBOT_CONFIG_PATH; - else process.env.CLAWDBOT_CONFIG_PATH = previousClawdbotConfig; + if (previousClawdbotConfig === undefined) delete process.env.MOLTBOT_CONFIG_PATH; + else process.env.MOLTBOT_CONFIG_PATH = previousClawdbotConfig; if (previousMoltbotState === undefined) delete process.env.MOLTBOT_STATE_DIR; else process.env.MOLTBOT_STATE_DIR = previousMoltbotState; - if (previousClawdbotState === undefined) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = previousClawdbotState; + if (previousClawdbotState === undefined) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = previousClawdbotState; await fs.rm(root, { recursive: true, force: true }); vi.resetModules(); } @@ -126,7 +126,7 @@ describe("state + config path candidates", () => { it("respects state dir overrides when config is missing", async () => { const root = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-config-override-")); try { - const legacyDir = path.join(root, ".clawdbot"); + const legacyDir = path.join(root, ".moltbot"); await fs.mkdir(legacyDir, { recursive: true }); const legacyConfig = path.join(legacyDir, "moltbot.json"); await fs.writeFile(legacyConfig, "{}", "utf-8"); diff --git a/src/config/paths.ts b/src/config/paths.ts index f6e451596..46229c928 100644 --- a/src/config/paths.ts +++ b/src/config/paths.ts @@ -4,19 +4,19 @@ import path from "node:path"; import type { MoltbotConfig } from "./types.js"; /** - * Nix mode detection: When CLAWDBOT_NIX_MODE=1, the gateway is running under Nix. + * Nix mode detection: When MOLTBOT_NIX_MODE=1, the gateway is running under Nix. * In this mode: * - No auto-install flows should be attempted * - Missing dependencies should produce actionable Nix-specific error messages * - Config is managed externally (read-only from Nix perspective) */ export function resolveIsNixMode(env: NodeJS.ProcessEnv = process.env): boolean { - return env.CLAWDBOT_NIX_MODE === "1"; + return env.MOLTBOT_NIX_MODE === "1"; } export const isNixMode = resolveIsNixMode(); -const LEGACY_STATE_DIRNAME = ".clawdbot"; +const LEGACY_STATE_DIRNAME = ".moltbot"; const NEW_STATE_DIRNAME = ".moltbot"; const CONFIG_FILENAME = "moltbot.json"; const LEGACY_CONFIG_FILENAME = "clawdbot.json"; @@ -39,15 +39,15 @@ export function resolveNewStateDir(homedir: () => string = os.homedir): string { /** * State directory for mutable data (sessions, logs, caches). - * Can be overridden via MOLTBOT_STATE_DIR (preferred) or CLAWDBOT_STATE_DIR (legacy). - * Default: ~/.clawdbot (legacy default for compatibility) - * If ~/.moltbot exists and ~/.clawdbot does not, prefer ~/.moltbot. + * Can be overridden via MOLTBOT_STATE_DIR (preferred) or MOLTBOT_STATE_DIR (legacy). + * Default: ~/.moltbot (legacy default for compatibility) + * If ~/.moltbot exists and ~/.moltbot does not, prefer ~/.moltbot. */ export function resolveStateDir( env: NodeJS.ProcessEnv = process.env, homedir: () => string = os.homedir, ): string { - const override = env.MOLTBOT_STATE_DIR?.trim() || env.CLAWDBOT_STATE_DIR?.trim(); + const override = env.MOLTBOT_STATE_DIR?.trim() || env.MOLTBOT_STATE_DIR?.trim(); if (override) return resolveUserPath(override); const legacyDir = legacyStateDir(homedir); const newDir = newStateDir(homedir); @@ -71,14 +71,14 @@ export const STATE_DIR = resolveStateDir(); /** * Config file path (JSON5). - * Can be overridden via MOLTBOT_CONFIG_PATH (preferred) or CLAWDBOT_CONFIG_PATH (legacy). - * Default: ~/.clawdbot/moltbot.json (or $*_STATE_DIR/moltbot.json) + * Can be overridden via MOLTBOT_CONFIG_PATH (preferred) or MOLTBOT_CONFIG_PATH (legacy). + * Default: ~/.moltbot/moltbot.json (or $*_STATE_DIR/moltbot.json) */ export function resolveCanonicalConfigPath( env: NodeJS.ProcessEnv = process.env, stateDir: string = resolveStateDir(env, os.homedir), ): string { - const override = env.MOLTBOT_CONFIG_PATH?.trim() || env.CLAWDBOT_CONFIG_PATH?.trim(); + const override = env.MOLTBOT_CONFIG_PATH?.trim() || env.MOLTBOT_CONFIG_PATH?.trim(); if (override) return resolveUserPath(override); return path.join(stateDir, CONFIG_FILENAME); } @@ -111,9 +111,9 @@ export function resolveConfigPath( stateDir: string = resolveStateDir(env, os.homedir), homedir: () => string = os.homedir, ): string { - const override = env.MOLTBOT_CONFIG_PATH?.trim() || env.CLAWDBOT_CONFIG_PATH?.trim(); + const override = env.MOLTBOT_CONFIG_PATH?.trim() || env.MOLTBOT_CONFIG_PATH?.trim(); if (override) return resolveUserPath(override); - const stateOverride = env.MOLTBOT_STATE_DIR?.trim() || env.CLAWDBOT_STATE_DIR?.trim(); + const stateOverride = env.MOLTBOT_STATE_DIR?.trim() || env.MOLTBOT_STATE_DIR?.trim(); const candidates = [ path.join(stateDir, CONFIG_FILENAME), path.join(stateDir, LEGACY_CONFIG_FILENAME), @@ -144,7 +144,7 @@ export function resolveDefaultConfigCandidates( env: NodeJS.ProcessEnv = process.env, homedir: () => string = os.homedir, ): string[] { - const explicit = env.MOLTBOT_CONFIG_PATH?.trim() || env.CLAWDBOT_CONFIG_PATH?.trim(); + const explicit = env.MOLTBOT_CONFIG_PATH?.trim() || env.MOLTBOT_CONFIG_PATH?.trim(); if (explicit) return [resolveUserPath(explicit)]; const candidates: string[] = []; @@ -153,7 +153,7 @@ export function resolveDefaultConfigCandidates( candidates.push(path.join(resolveUserPath(moltbotStateDir), CONFIG_FILENAME)); candidates.push(path.join(resolveUserPath(moltbotStateDir), LEGACY_CONFIG_FILENAME)); } - const legacyStateDirOverride = env.CLAWDBOT_STATE_DIR?.trim(); + const legacyStateDirOverride = env.MOLTBOT_STATE_DIR?.trim(); if (legacyStateDirOverride) { candidates.push(path.join(resolveUserPath(legacyStateDirOverride), CONFIG_FILENAME)); candidates.push(path.join(resolveUserPath(legacyStateDirOverride), LEGACY_CONFIG_FILENAME)); @@ -185,15 +185,15 @@ const OAUTH_FILENAME = "oauth.json"; * OAuth credentials storage directory. * * Precedence: - * - `CLAWDBOT_OAUTH_DIR` (explicit override) + * - `MOLTBOT_OAUTH_DIR` (explicit override) * - `$*_STATE_DIR/credentials` (canonical server/default) - * - `~/.clawdbot/credentials` (legacy default) + * - `~/.moltbot/credentials` (legacy default) */ export function resolveOAuthDir( env: NodeJS.ProcessEnv = process.env, stateDir: string = resolveStateDir(env, os.homedir), ): string { - const override = env.CLAWDBOT_OAUTH_DIR?.trim(); + const override = env.MOLTBOT_OAUTH_DIR?.trim(); if (override) return resolveUserPath(override); return path.join(stateDir, "credentials"); } @@ -209,7 +209,7 @@ export function resolveGatewayPort( cfg?: MoltbotConfig, env: NodeJS.ProcessEnv = process.env, ): number { - const envRaw = env.CLAWDBOT_GATEWAY_PORT?.trim(); + const envRaw = env.MOLTBOT_GATEWAY_PORT?.trim(); if (envRaw) { const parsed = Number.parseInt(envRaw, 10); if (Number.isFinite(parsed) && parsed > 0) return parsed; diff --git a/src/config/schema.ts b/src/config/schema.ts index 28c994f3d..ecd2d4bc8 100644 --- a/src/config/schema.ts +++ b/src/config/schema.ts @@ -407,7 +407,7 @@ const FIELD_HELP: Record = { "diagnostics.cacheTrace.enabled": "Log cache trace snapshots for embedded agent runs (default: false).", "diagnostics.cacheTrace.filePath": - "JSONL output path for cache trace logs (default: $CLAWDBOT_STATE_DIR/logs/cache-trace.jsonl).", + "JSONL output path for cache trace logs (default: $MOLTBOT_STATE_DIR/logs/cache-trace.jsonl).", "diagnostics.cacheTrace.includeMessages": "Include full message payloads in trace output (default: true).", "diagnostics.cacheTrace.includePrompt": "Include prompt text in trace output (default: true).", @@ -525,7 +525,7 @@ const FIELD_HELP: Record = { "agents.defaults.memorySearch.fallback": 'Fallback provider when embeddings fail ("openai", "gemini", "local", or "none").', "agents.defaults.memorySearch.store.path": - "SQLite index path (default: ~/.clawdbot/memory/{agentId}.sqlite).", + "SQLite index path (default: ~/.moltbot/memory/{agentId}.sqlite).", "agents.defaults.memorySearch.store.vector.enabled": "Enable sqlite-vec extension for vector search (default: true).", "agents.defaults.memorySearch.store.vector.extensionPath": @@ -565,7 +565,7 @@ const FIELD_HELP: Record = { "plugins.installs.*.spec": "Original npm spec used for install (if source is npm).", "plugins.installs.*.sourcePath": "Original archive/path used for install (if any).", "plugins.installs.*.installPath": - "Resolved install directory (usually ~/.clawdbot/extensions/).", + "Resolved install directory (usually ~/.moltbot/extensions/).", "plugins.installs.*.version": "Version recorded at install time (if available).", "plugins.installs.*.installedAt": "ISO timestamp of last install/update.", "agents.list.*.identity.avatar": diff --git a/src/config/sessions.cache.test.ts b/src/config/sessions.cache.test.ts index 74b0f7ae7..329f25066 100644 --- a/src/config/sessions.cache.test.ts +++ b/src/config/sessions.cache.test.ts @@ -23,7 +23,7 @@ describe("Session Store Cache", () => { clearSessionStoreCacheForTest(); // Reset environment variable - delete process.env.CLAWDBOT_SESSION_CACHE_TTL_MS; + delete process.env.MOLTBOT_SESSION_CACHE_TTL_MS; }); afterEach(() => { @@ -32,7 +32,7 @@ describe("Session Store Cache", () => { fs.rmSync(testDir, { recursive: true, force: true }); } clearSessionStoreCacheForTest(); - delete process.env.CLAWDBOT_SESSION_CACHE_TTL_MS; + delete process.env.MOLTBOT_SESSION_CACHE_TTL_MS; }); it("should load session store from disk on first call", async () => { @@ -161,8 +161,8 @@ describe("Session Store Cache", () => { expect(loaded2["session:1"].displayName).toBe("Updated Session 1"); }); - it("should respect CLAWDBOT_SESSION_CACHE_TTL_MS=0 to disable cache", async () => { - process.env.CLAWDBOT_SESSION_CACHE_TTL_MS = "0"; + it("should respect MOLTBOT_SESSION_CACHE_TTL_MS=0 to disable cache", async () => { + process.env.MOLTBOT_SESSION_CACHE_TTL_MS = "0"; clearSessionStoreCacheForTest(); const testStore: Record = { diff --git a/src/config/sessions.test.ts b/src/config/sessions.test.ts index 36767cfb2..50604905f 100644 --- a/src/config/sessions.test.ts +++ b/src/config/sessions.test.ts @@ -359,17 +359,17 @@ describe("sessions", () => { expect(entry.lastProvider).toBeUndefined(); }); - it("derives session transcripts dir from CLAWDBOT_STATE_DIR", () => { + it("derives session transcripts dir from MOLTBOT_STATE_DIR", () => { const dir = resolveSessionTranscriptsDir( - { CLAWDBOT_STATE_DIR: "/custom/state" } as NodeJS.ProcessEnv, + { MOLTBOT_STATE_DIR: "/custom/state" } as NodeJS.ProcessEnv, () => "/home/ignored", ); expect(dir).toBe(path.join(path.resolve("/custom/state"), "agents", "main", "sessions")); }); it("includes topic ids in session transcript filenames", () => { - const prev = process.env.CLAWDBOT_STATE_DIR; - process.env.CLAWDBOT_STATE_DIR = "/custom/state"; + const prev = process.env.MOLTBOT_STATE_DIR; + process.env.MOLTBOT_STATE_DIR = "/custom/state"; try { const sessionFile = resolveSessionTranscriptPath("sess-1", "main", 123); expect(sessionFile).toBe( @@ -383,16 +383,16 @@ describe("sessions", () => { ); } finally { if (prev === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = prev; + process.env.MOLTBOT_STATE_DIR = prev; } } }); it("uses agent id when resolving session file fallback paths", () => { - const prev = process.env.CLAWDBOT_STATE_DIR; - process.env.CLAWDBOT_STATE_DIR = "/custom/state"; + const prev = process.env.MOLTBOT_STATE_DIR; + process.env.MOLTBOT_STATE_DIR = "/custom/state"; try { const sessionFile = resolveSessionFilePath("sess-2", undefined, { agentId: "codex", @@ -402,9 +402,9 @@ describe("sessions", () => { ); } finally { if (prev === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = prev; + process.env.MOLTBOT_STATE_DIR = prev; } } }); diff --git a/src/config/sessions/store.ts b/src/config/sessions/store.ts index f0e516476..99469bef9 100644 --- a/src/config/sessions/store.ts +++ b/src/config/sessions/store.ts @@ -35,7 +35,7 @@ function isSessionStoreRecord(value: unknown): value is Record(fn: (home: string) => Promise): Promise { } async function writeSessionStore(home: string) { - const dir = path.join(home, ".clawdbot", "sessions"); + const dir = path.join(home, ".moltbot", "sessions"); await fs.mkdir(dir, { recursive: true }); const storePath = path.join(dir, "sessions.json"); await fs.writeFile( diff --git a/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts b/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts index 956ec538a..6ff9b7cb5 100644 --- a/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts +++ b/src/cron/isolated-agent.skips-delivery-without-whatsapp-recipient-besteffortdeliver-true.test.ts @@ -35,7 +35,7 @@ async function withTempHome(fn: (home: string) => Promise): Promise { } async function writeSessionStore(home: string) { - const dir = path.join(home, ".clawdbot", "sessions"); + const dir = path.join(home, ".moltbot", "sessions"); await fs.mkdir(dir, { recursive: true }); const storePath = path.join(dir, "sessions.json"); await fs.writeFile( diff --git a/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.test.ts b/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.test.ts index 2d0baa5f9..8877de5b6 100644 --- a/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.test.ts +++ b/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.test.ts @@ -26,7 +26,7 @@ async function withTempHome(fn: (home: string) => Promise): Promise { } async function writeSessionStore(home: string) { - const dir = path.join(home, ".clawdbot", "sessions"); + const dir = path.join(home, ".moltbot", "sessions"); await fs.mkdir(dir, { recursive: true }); const storePath = path.join(dir, "sessions.json"); await fs.writeFile( @@ -182,7 +182,7 @@ describe("runCronIsolatedAgentTurn", () => { const cfg = makeCfg( home, - path.join(home, ".clawdbot", "agents", "{agentId}", "sessions", "sessions.json"), + path.join(home, ".moltbot", "agents", "{agentId}", "sessions", "sessions.json"), { agents: { defaults: { workspace: path.join(home, "default-workspace") }, diff --git a/src/daemon/inspect.ts b/src/daemon/inspect.ts index 46318956d..28310e78c 100644 --- a/src/daemon/inspect.ts +++ b/src/daemon/inspect.ts @@ -31,7 +31,7 @@ const execFileAsync = promisify(execFile); export function renderGatewayServiceCleanupHints( env: Record = process.env as Record, ): string[] { - const profile = env.CLAWDBOT_PROFILE; + const profile = env.MOLTBOT_PROFILE; switch (process.platform) { case "darwin": { const label = resolveGatewayLaunchAgentLabel(profile); @@ -103,7 +103,7 @@ function tryExtractPlistLabel(contents: string): string | null { function isIgnoredLaunchdLabel(label: string): boolean { return ( label === resolveGatewayLaunchAgentLabel() || - resolveLegacyGatewayLaunchAgentLabels(process.env.CLAWDBOT_PROFILE).includes(label) + resolveLegacyGatewayLaunchAgentLabels(process.env.MOLTBOT_PROFILE).includes(label) ); } diff --git a/src/daemon/launchd.test.ts b/src/daemon/launchd.test.ts index 1052cb9b9..41c618cd5 100644 --- a/src/daemon/launchd.test.ts +++ b/src/daemon/launchd.test.ts @@ -18,8 +18,8 @@ async function withLaunchctlStub( run: (context: { env: Record; logPath: string }) => Promise, ) { const originalPath = process.env.PATH; - const originalLogPath = process.env.CLAWDBOT_TEST_LAUNCHCTL_LOG; - const originalListOutput = process.env.CLAWDBOT_TEST_LAUNCHCTL_LIST_OUTPUT; + const originalLogPath = process.env.MOLTBOT_TEST_LAUNCHCTL_LOG; + const originalListOutput = process.env.MOLTBOT_TEST_LAUNCHCTL_LIST_OUTPUT; const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-launchctl-test-")); try { @@ -35,12 +35,12 @@ async function withLaunchctlStub( [ 'import fs from "node:fs";', "const args = process.argv.slice(2);", - "const logPath = process.env.CLAWDBOT_TEST_LAUNCHCTL_LOG;", + "const logPath = process.env.MOLTBOT_TEST_LAUNCHCTL_LOG;", "if (logPath) {", ' fs.appendFileSync(logPath, JSON.stringify(args) + "\\n", "utf8");', "}", 'if (args[0] === "list") {', - ' const output = process.env.CLAWDBOT_TEST_LAUNCHCTL_LIST_OUTPUT || "";', + ' const output = process.env.MOLTBOT_TEST_LAUNCHCTL_LIST_OUTPUT || "";', " process.stdout.write(output);", "}", "process.exit(0);", @@ -61,28 +61,28 @@ async function withLaunchctlStub( await fs.chmod(shPath, 0o755); } - process.env.CLAWDBOT_TEST_LAUNCHCTL_LOG = logPath; - process.env.CLAWDBOT_TEST_LAUNCHCTL_LIST_OUTPUT = options.listOutput ?? ""; + process.env.MOLTBOT_TEST_LAUNCHCTL_LOG = logPath; + process.env.MOLTBOT_TEST_LAUNCHCTL_LIST_OUTPUT = options.listOutput ?? ""; process.env.PATH = `${binDir}${path.delimiter}${originalPath ?? ""}`; await run({ env: { HOME: homeDir, - CLAWDBOT_PROFILE: "default", + MOLTBOT_PROFILE: "default", }, logPath, }); } finally { process.env.PATH = originalPath; if (originalLogPath === undefined) { - delete process.env.CLAWDBOT_TEST_LAUNCHCTL_LOG; + delete process.env.MOLTBOT_TEST_LAUNCHCTL_LOG; } else { - process.env.CLAWDBOT_TEST_LAUNCHCTL_LOG = originalLogPath; + process.env.MOLTBOT_TEST_LAUNCHCTL_LOG = originalLogPath; } if (originalListOutput === undefined) { - delete process.env.CLAWDBOT_TEST_LAUNCHCTL_LIST_OUTPUT; + delete process.env.MOLTBOT_TEST_LAUNCHCTL_LIST_OUTPUT; } else { - process.env.CLAWDBOT_TEST_LAUNCHCTL_LIST_OUTPUT = originalListOutput; + process.env.MOLTBOT_TEST_LAUNCHCTL_LIST_OUTPUT = originalListOutput; } await fs.rm(tmpDir, { recursive: true, force: true }); } @@ -145,7 +145,7 @@ describe("launchd bootstrap repair", () => { describe("launchd install", () => { it("enables service before bootstrap (clears persisted disabled state)", async () => { const originalPath = process.env.PATH; - const originalLogPath = process.env.CLAWDBOT_TEST_LAUNCHCTL_LOG; + const originalLogPath = process.env.MOLTBOT_TEST_LAUNCHCTL_LOG; const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-launchctl-test-")); try { @@ -160,7 +160,7 @@ describe("launchd install", () => { stubJsPath, [ 'import fs from "node:fs";', - "const logPath = process.env.CLAWDBOT_TEST_LAUNCHCTL_LOG;", + "const logPath = process.env.MOLTBOT_TEST_LAUNCHCTL_LOG;", "if (logPath) {", ' fs.appendFileSync(logPath, JSON.stringify(process.argv.slice(2)) + "\\n", "utf8");', "}", @@ -182,12 +182,12 @@ describe("launchd install", () => { await fs.chmod(shPath, 0o755); } - process.env.CLAWDBOT_TEST_LAUNCHCTL_LOG = logPath; + process.env.MOLTBOT_TEST_LAUNCHCTL_LOG = logPath; process.env.PATH = `${binDir}${path.delimiter}${originalPath ?? ""}`; const env: Record = { HOME: homeDir, - CLAWDBOT_PROFILE: "default", + MOLTBOT_PROFILE: "default", }; await installLaunchAgent({ env, @@ -218,9 +218,9 @@ describe("launchd install", () => { } finally { process.env.PATH = originalPath; if (originalLogPath === undefined) { - delete process.env.CLAWDBOT_TEST_LAUNCHCTL_LOG; + delete process.env.MOLTBOT_TEST_LAUNCHCTL_LOG; } else { - process.env.CLAWDBOT_TEST_LAUNCHCTL_LOG = originalLogPath; + process.env.MOLTBOT_TEST_LAUNCHCTL_LOG = originalLogPath; } await fs.rm(tmpDir, { recursive: true, force: true }); } @@ -228,53 +228,53 @@ describe("launchd install", () => { }); describe("resolveLaunchAgentPlistPath", () => { - it("uses default label when CLAWDBOT_PROFILE is default", () => { - const env = { HOME: "/Users/test", CLAWDBOT_PROFILE: "default" }; + it("uses default label when MOLTBOT_PROFILE is default", () => { + const env = { HOME: "/Users/test", MOLTBOT_PROFILE: "default" }; expect(resolveLaunchAgentPlistPath(env)).toBe( "/Users/test/Library/LaunchAgents/bot.molt.gateway.plist", ); }); - it("uses default label when CLAWDBOT_PROFILE is unset", () => { + it("uses default label when MOLTBOT_PROFILE is unset", () => { const env = { HOME: "/Users/test" }; expect(resolveLaunchAgentPlistPath(env)).toBe( "/Users/test/Library/LaunchAgents/bot.molt.gateway.plist", ); }); - it("uses profile-specific label when CLAWDBOT_PROFILE is set to a custom value", () => { - const env = { HOME: "/Users/test", CLAWDBOT_PROFILE: "jbphoenix" }; + it("uses profile-specific label when MOLTBOT_PROFILE is set to a custom value", () => { + const env = { HOME: "/Users/test", MOLTBOT_PROFILE: "jbphoenix" }; expect(resolveLaunchAgentPlistPath(env)).toBe( "/Users/test/Library/LaunchAgents/bot.molt.jbphoenix.plist", ); }); - it("prefers CLAWDBOT_LAUNCHD_LABEL over CLAWDBOT_PROFILE", () => { + it("prefers MOLTBOT_LAUNCHD_LABEL over MOLTBOT_PROFILE", () => { const env = { HOME: "/Users/test", - CLAWDBOT_PROFILE: "jbphoenix", - CLAWDBOT_LAUNCHD_LABEL: "com.custom.label", + MOLTBOT_PROFILE: "jbphoenix", + MOLTBOT_LAUNCHD_LABEL: "com.custom.label", }; expect(resolveLaunchAgentPlistPath(env)).toBe( "/Users/test/Library/LaunchAgents/com.custom.label.plist", ); }); - it("trims whitespace from CLAWDBOT_LAUNCHD_LABEL", () => { + it("trims whitespace from MOLTBOT_LAUNCHD_LABEL", () => { const env = { HOME: "/Users/test", - CLAWDBOT_LAUNCHD_LABEL: " com.custom.label ", + MOLTBOT_LAUNCHD_LABEL: " com.custom.label ", }; expect(resolveLaunchAgentPlistPath(env)).toBe( "/Users/test/Library/LaunchAgents/com.custom.label.plist", ); }); - it("ignores empty CLAWDBOT_LAUNCHD_LABEL and falls back to profile", () => { + it("ignores empty MOLTBOT_LAUNCHD_LABEL and falls back to profile", () => { const env = { HOME: "/Users/test", - CLAWDBOT_PROFILE: "myprofile", - CLAWDBOT_LAUNCHD_LABEL: " ", + MOLTBOT_PROFILE: "myprofile", + MOLTBOT_LAUNCHD_LABEL: " ", }; expect(resolveLaunchAgentPlistPath(env)).toBe( "/Users/test/Library/LaunchAgents/bot.molt.myprofile.plist", @@ -282,21 +282,21 @@ describe("resolveLaunchAgentPlistPath", () => { }); it("handles case-insensitive 'Default' profile", () => { - const env = { HOME: "/Users/test", CLAWDBOT_PROFILE: "Default" }; + const env = { HOME: "/Users/test", MOLTBOT_PROFILE: "Default" }; expect(resolveLaunchAgentPlistPath(env)).toBe( "/Users/test/Library/LaunchAgents/bot.molt.gateway.plist", ); }); it("handles case-insensitive 'DEFAULT' profile", () => { - const env = { HOME: "/Users/test", CLAWDBOT_PROFILE: "DEFAULT" }; + const env = { HOME: "/Users/test", MOLTBOT_PROFILE: "DEFAULT" }; expect(resolveLaunchAgentPlistPath(env)).toBe( "/Users/test/Library/LaunchAgents/bot.molt.gateway.plist", ); }); - it("trims whitespace from CLAWDBOT_PROFILE", () => { - const env = { HOME: "/Users/test", CLAWDBOT_PROFILE: " myprofile " }; + it("trims whitespace from MOLTBOT_PROFILE", () => { + const env = { HOME: "/Users/test", MOLTBOT_PROFILE: " myprofile " }; expect(resolveLaunchAgentPlistPath(env)).toBe( "/Users/test/Library/LaunchAgents/bot.molt.myprofile.plist", ); diff --git a/src/daemon/launchd.ts b/src/daemon/launchd.ts index 747494bf7..998672241 100644 --- a/src/daemon/launchd.ts +++ b/src/daemon/launchd.ts @@ -27,9 +27,9 @@ const formatLine = (label: string, value: string) => { }; function resolveLaunchAgentLabel(args?: { env?: Record }): string { - const envLabel = args?.env?.CLAWDBOT_LAUNCHD_LABEL?.trim(); + const envLabel = args?.env?.MOLTBOT_LAUNCHD_LABEL?.trim(); if (envLabel) return envLabel; - return resolveGatewayLaunchAgentLabel(args?.env?.CLAWDBOT_PROFILE); + return resolveGatewayLaunchAgentLabel(args?.env?.MOLTBOT_PROFILE); } function resolveLaunchAgentPlistPathForLabel( @@ -52,7 +52,7 @@ export function resolveGatewayLogPaths(env: Record): } { const stateDir = resolveGatewayStateDir(env); const logDir = path.join(stateDir, "logs"); - const prefix = env.CLAWDBOT_LOG_PREFIX?.trim() || "gateway"; + const prefix = env.MOLTBOT_LOG_PREFIX?.trim() || "gateway"; return { logDir, stdoutPath: path.join(logDir, `${prefix}.log`), @@ -248,7 +248,7 @@ export async function findLegacyLaunchAgents( ): Promise { const domain = resolveGuiDomain(); const results: LegacyLaunchAgent[] = []; - for (const label of resolveLegacyGatewayLaunchAgentLabels(env.CLAWDBOT_PROFILE)) { + for (const label of resolveLegacyGatewayLaunchAgentLabels(env.MOLTBOT_PROFILE)) { const plistPath = resolveLaunchAgentPlistPathForLabel(env, label); const res = await execLaunchctl(["print", `${domain}/${label}`]); const loaded = res.code === 0; @@ -384,7 +384,7 @@ export async function installLaunchAgent({ const domain = resolveGuiDomain(); const label = resolveLaunchAgentLabel({ env }); - for (const legacyLabel of resolveLegacyGatewayLaunchAgentLabels(env.CLAWDBOT_PROFILE)) { + for (const legacyLabel of resolveLegacyGatewayLaunchAgentLabels(env.MOLTBOT_PROFILE)) { const legacyPlistPath = resolveLaunchAgentPlistPathForLabel(env, legacyLabel); await execLaunchctl(["bootout", domain, legacyPlistPath]); await execLaunchctl(["unload", legacyPlistPath]); @@ -401,8 +401,8 @@ export async function installLaunchAgent({ const serviceDescription = description ?? formatGatewayServiceDescription({ - profile: env.CLAWDBOT_PROFILE, - version: environment?.CLAWDBOT_SERVICE_VERSION ?? env.CLAWDBOT_SERVICE_VERSION, + profile: env.MOLTBOT_PROFILE, + version: environment?.MOLTBOT_SERVICE_VERSION ?? env.MOLTBOT_SERVICE_VERSION, }); const plist = buildLaunchAgentPlist({ label, diff --git a/src/daemon/node-service.ts b/src/daemon/node-service.ts index c31dfd18d..6f37c5b7f 100644 --- a/src/daemon/node-service.ts +++ b/src/daemon/node-service.ts @@ -14,13 +14,13 @@ function withNodeServiceEnv( ): Record { return { ...env, - CLAWDBOT_LAUNCHD_LABEL: resolveNodeLaunchAgentLabel(), - CLAWDBOT_SYSTEMD_UNIT: resolveNodeSystemdServiceName(), - CLAWDBOT_WINDOWS_TASK_NAME: resolveNodeWindowsTaskName(), - CLAWDBOT_TASK_SCRIPT_NAME: NODE_WINDOWS_TASK_SCRIPT_NAME, - CLAWDBOT_LOG_PREFIX: "node", - CLAWDBOT_SERVICE_MARKER: NODE_SERVICE_MARKER, - CLAWDBOT_SERVICE_KIND: NODE_SERVICE_KIND, + MOLTBOT_LAUNCHD_LABEL: resolveNodeLaunchAgentLabel(), + MOLTBOT_SYSTEMD_UNIT: resolveNodeSystemdServiceName(), + MOLTBOT_WINDOWS_TASK_NAME: resolveNodeWindowsTaskName(), + MOLTBOT_TASK_SCRIPT_NAME: NODE_WINDOWS_TASK_SCRIPT_NAME, + MOLTBOT_LOG_PREFIX: "node", + MOLTBOT_SERVICE_MARKER: NODE_SERVICE_MARKER, + MOLTBOT_SERVICE_KIND: NODE_SERVICE_KIND, }; } @@ -30,13 +30,13 @@ function withNodeInstallEnv(args: GatewayServiceInstallArgs): GatewayServiceInst env: withNodeServiceEnv(args.env), environment: { ...args.environment, - CLAWDBOT_LAUNCHD_LABEL: resolveNodeLaunchAgentLabel(), - CLAWDBOT_SYSTEMD_UNIT: resolveNodeSystemdServiceName(), - CLAWDBOT_WINDOWS_TASK_NAME: resolveNodeWindowsTaskName(), - CLAWDBOT_TASK_SCRIPT_NAME: NODE_WINDOWS_TASK_SCRIPT_NAME, - CLAWDBOT_LOG_PREFIX: "node", - CLAWDBOT_SERVICE_MARKER: NODE_SERVICE_MARKER, - CLAWDBOT_SERVICE_KIND: NODE_SERVICE_KIND, + MOLTBOT_LAUNCHD_LABEL: resolveNodeLaunchAgentLabel(), + MOLTBOT_SYSTEMD_UNIT: resolveNodeSystemdServiceName(), + MOLTBOT_WINDOWS_TASK_NAME: resolveNodeWindowsTaskName(), + MOLTBOT_TASK_SCRIPT_NAME: NODE_WINDOWS_TASK_SCRIPT_NAME, + MOLTBOT_LOG_PREFIX: "node", + MOLTBOT_SERVICE_MARKER: NODE_SERVICE_MARKER, + MOLTBOT_SERVICE_KIND: NODE_SERVICE_KIND, }, }; } diff --git a/src/daemon/paths.test.ts b/src/daemon/paths.test.ts index 3d6bca1a6..245ac091c 100644 --- a/src/daemon/paths.test.ts +++ b/src/daemon/paths.test.ts @@ -7,31 +7,31 @@ import { resolveGatewayStateDir } from "./paths.js"; describe("resolveGatewayStateDir", () => { it("uses the default state dir when no overrides are set", () => { const env = { HOME: "/Users/test" }; - expect(resolveGatewayStateDir(env)).toBe(path.join("/Users/test", ".clawdbot")); + expect(resolveGatewayStateDir(env)).toBe(path.join("/Users/test", ".moltbot")); }); it("appends the profile suffix when set", () => { - const env = { HOME: "/Users/test", CLAWDBOT_PROFILE: "rescue" }; - expect(resolveGatewayStateDir(env)).toBe(path.join("/Users/test", ".clawdbot-rescue")); + const env = { HOME: "/Users/test", MOLTBOT_PROFILE: "rescue" }; + expect(resolveGatewayStateDir(env)).toBe(path.join("/Users/test", ".moltbot-rescue")); }); it("treats default profiles as the base state dir", () => { - const env = { HOME: "/Users/test", CLAWDBOT_PROFILE: "Default" }; - expect(resolveGatewayStateDir(env)).toBe(path.join("/Users/test", ".clawdbot")); + const env = { HOME: "/Users/test", MOLTBOT_PROFILE: "Default" }; + expect(resolveGatewayStateDir(env)).toBe(path.join("/Users/test", ".moltbot")); }); - it("uses CLAWDBOT_STATE_DIR when provided", () => { - const env = { HOME: "/Users/test", CLAWDBOT_STATE_DIR: "/var/lib/moltbot" }; + it("uses MOLTBOT_STATE_DIR when provided", () => { + const env = { HOME: "/Users/test", MOLTBOT_STATE_DIR: "/var/lib/moltbot" }; expect(resolveGatewayStateDir(env)).toBe(path.resolve("/var/lib/moltbot")); }); - it("expands ~ in CLAWDBOT_STATE_DIR", () => { - const env = { HOME: "/Users/test", CLAWDBOT_STATE_DIR: "~/moltbot-state" }; + it("expands ~ in MOLTBOT_STATE_DIR", () => { + const env = { HOME: "/Users/test", MOLTBOT_STATE_DIR: "~/moltbot-state" }; expect(resolveGatewayStateDir(env)).toBe(path.resolve("/Users/test/moltbot-state")); }); it("preserves Windows absolute paths without HOME", () => { - const env = { CLAWDBOT_STATE_DIR: "C:\\State\\moltbot" }; + const env = { MOLTBOT_STATE_DIR: "C:\\State\\moltbot" }; expect(resolveGatewayStateDir(env)).toBe("C:\\State\\moltbot"); }); }); diff --git a/src/daemon/paths.ts b/src/daemon/paths.ts index 61913fe3c..652ff36c2 100644 --- a/src/daemon/paths.ts +++ b/src/daemon/paths.ts @@ -26,12 +26,12 @@ export function resolveUserPathWithHome(input: string, home?: string): string { } export function resolveGatewayStateDir(env: Record): string { - const override = env.CLAWDBOT_STATE_DIR?.trim(); + const override = env.MOLTBOT_STATE_DIR?.trim(); if (override) { const home = override.startsWith("~") ? resolveHomeDir(env) : undefined; return resolveUserPathWithHome(override, home); } const home = resolveHomeDir(env); - const suffix = resolveGatewayProfileSuffix(env.CLAWDBOT_PROFILE); - return path.join(home, `.clawdbot${suffix}`); + const suffix = resolveGatewayProfileSuffix(env.MOLTBOT_PROFILE); + return path.join(home, `.moltbot${suffix}`); } diff --git a/src/daemon/schtasks.test.ts b/src/daemon/schtasks.test.ts index 7fc898a7b..0441e182f 100644 --- a/src/daemon/schtasks.test.ts +++ b/src/daemon/schtasks.test.ts @@ -37,60 +37,60 @@ describe("schtasks runtime parsing", () => { }); describe("resolveTaskScriptPath", () => { - it("uses default path when CLAWDBOT_PROFILE is default", () => { - const env = { USERPROFILE: "C:\\Users\\test", CLAWDBOT_PROFILE: "default" }; + it("uses default path when MOLTBOT_PROFILE is default", () => { + const env = { USERPROFILE: "C:\\Users\\test", MOLTBOT_PROFILE: "default" }; expect(resolveTaskScriptPath(env)).toBe( - path.join("C:\\Users\\test", ".clawdbot", "gateway.cmd"), + path.join("C:\\Users\\test", ".moltbot", "gateway.cmd"), ); }); - it("uses default path when CLAWDBOT_PROFILE is unset", () => { + it("uses default path when MOLTBOT_PROFILE is unset", () => { const env = { USERPROFILE: "C:\\Users\\test" }; expect(resolveTaskScriptPath(env)).toBe( - path.join("C:\\Users\\test", ".clawdbot", "gateway.cmd"), + path.join("C:\\Users\\test", ".moltbot", "gateway.cmd"), ); }); - it("uses profile-specific path when CLAWDBOT_PROFILE is set to a custom value", () => { - const env = { USERPROFILE: "C:\\Users\\test", CLAWDBOT_PROFILE: "jbphoenix" }; + it("uses profile-specific path when MOLTBOT_PROFILE is set to a custom value", () => { + const env = { USERPROFILE: "C:\\Users\\test", MOLTBOT_PROFILE: "jbphoenix" }; expect(resolveTaskScriptPath(env)).toBe( - path.join("C:\\Users\\test", ".clawdbot-jbphoenix", "gateway.cmd"), + path.join("C:\\Users\\test", ".moltbot-jbphoenix", "gateway.cmd"), ); }); - it("prefers CLAWDBOT_STATE_DIR over profile-derived defaults", () => { + it("prefers MOLTBOT_STATE_DIR over profile-derived defaults", () => { const env = { USERPROFILE: "C:\\Users\\test", - CLAWDBOT_PROFILE: "rescue", - CLAWDBOT_STATE_DIR: "C:\\State\\moltbot", + MOLTBOT_PROFILE: "rescue", + MOLTBOT_STATE_DIR: "C:\\State\\moltbot", }; expect(resolveTaskScriptPath(env)).toBe(path.join("C:\\State\\moltbot", "gateway.cmd")); }); it("handles case-insensitive 'Default' profile", () => { - const env = { USERPROFILE: "C:\\Users\\test", CLAWDBOT_PROFILE: "Default" }; + const env = { USERPROFILE: "C:\\Users\\test", MOLTBOT_PROFILE: "Default" }; expect(resolveTaskScriptPath(env)).toBe( - path.join("C:\\Users\\test", ".clawdbot", "gateway.cmd"), + path.join("C:\\Users\\test", ".moltbot", "gateway.cmd"), ); }); it("handles case-insensitive 'DEFAULT' profile", () => { - const env = { USERPROFILE: "C:\\Users\\test", CLAWDBOT_PROFILE: "DEFAULT" }; + const env = { USERPROFILE: "C:\\Users\\test", MOLTBOT_PROFILE: "DEFAULT" }; expect(resolveTaskScriptPath(env)).toBe( - path.join("C:\\Users\\test", ".clawdbot", "gateway.cmd"), + path.join("C:\\Users\\test", ".moltbot", "gateway.cmd"), ); }); - it("trims whitespace from CLAWDBOT_PROFILE", () => { - const env = { USERPROFILE: "C:\\Users\\test", CLAWDBOT_PROFILE: " myprofile " }; + it("trims whitespace from MOLTBOT_PROFILE", () => { + const env = { USERPROFILE: "C:\\Users\\test", MOLTBOT_PROFILE: " myprofile " }; expect(resolveTaskScriptPath(env)).toBe( - path.join("C:\\Users\\test", ".clawdbot-myprofile", "gateway.cmd"), + path.join("C:\\Users\\test", ".moltbot-myprofile", "gateway.cmd"), ); }); it("falls back to HOME when USERPROFILE is not set", () => { - const env = { HOME: "/home/test", CLAWDBOT_PROFILE: "default" }; - expect(resolveTaskScriptPath(env)).toBe(path.join("/home/test", ".clawdbot", "gateway.cmd")); + const env = { HOME: "/home/test", MOLTBOT_PROFILE: "default" }; + expect(resolveTaskScriptPath(env)).toBe(path.join("/home/test", ".moltbot", "gateway.cmd")); }); }); @@ -98,7 +98,7 @@ describe("readScheduledTaskCommand", () => { it("parses basic command script", async () => { const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-schtasks-test-")); try { - const scriptPath = path.join(tmpDir, ".clawdbot", "gateway.cmd"); + const scriptPath = path.join(tmpDir, ".moltbot", "gateway.cmd"); await fs.mkdir(path.dirname(scriptPath), { recursive: true }); await fs.writeFile( scriptPath, @@ -106,7 +106,7 @@ describe("readScheduledTaskCommand", () => { "utf8", ); - const env = { USERPROFILE: tmpDir, CLAWDBOT_PROFILE: "default" }; + const env = { USERPROFILE: tmpDir, MOLTBOT_PROFILE: "default" }; const result = await readScheduledTaskCommand(env); expect(result).toEqual({ programArguments: ["node", "gateway.js", "--port", "18789"], @@ -119,7 +119,7 @@ describe("readScheduledTaskCommand", () => { it("parses script with working directory", async () => { const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-schtasks-test-")); try { - const scriptPath = path.join(tmpDir, ".clawdbot", "gateway.cmd"); + const scriptPath = path.join(tmpDir, ".moltbot", "gateway.cmd"); await fs.mkdir(path.dirname(scriptPath), { recursive: true }); await fs.writeFile( scriptPath, @@ -127,7 +127,7 @@ describe("readScheduledTaskCommand", () => { "utf8", ); - const env = { USERPROFILE: tmpDir, CLAWDBOT_PROFILE: "default" }; + const env = { USERPROFILE: tmpDir, MOLTBOT_PROFILE: "default" }; const result = await readScheduledTaskCommand(env); expect(result).toEqual({ programArguments: ["node", "gateway.js"], @@ -141,7 +141,7 @@ describe("readScheduledTaskCommand", () => { it("parses script with environment variables", async () => { const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-schtasks-test-")); try { - const scriptPath = path.join(tmpDir, ".clawdbot", "gateway.cmd"); + const scriptPath = path.join(tmpDir, ".moltbot", "gateway.cmd"); await fs.mkdir(path.dirname(scriptPath), { recursive: true }); await fs.writeFile( scriptPath, @@ -149,7 +149,7 @@ describe("readScheduledTaskCommand", () => { "utf8", ); - const env = { USERPROFILE: tmpDir, CLAWDBOT_PROFILE: "default" }; + const env = { USERPROFILE: tmpDir, MOLTBOT_PROFILE: "default" }; const result = await readScheduledTaskCommand(env); expect(result).toEqual({ programArguments: ["node", "gateway.js"], @@ -166,7 +166,7 @@ describe("readScheduledTaskCommand", () => { it("parses script with quoted arguments containing spaces", async () => { const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-schtasks-test-")); try { - const scriptPath = path.join(tmpDir, ".clawdbot", "gateway.cmd"); + const scriptPath = path.join(tmpDir, ".moltbot", "gateway.cmd"); await fs.mkdir(path.dirname(scriptPath), { recursive: true }); // Use forward slashes which work in Windows cmd and avoid escape parsing issues await fs.writeFile( @@ -175,7 +175,7 @@ describe("readScheduledTaskCommand", () => { "utf8", ); - const env = { USERPROFILE: tmpDir, CLAWDBOT_PROFILE: "default" }; + const env = { USERPROFILE: tmpDir, MOLTBOT_PROFILE: "default" }; const result = await readScheduledTaskCommand(env); expect(result).toEqual({ programArguments: ["C:/Program Files/Node/node.exe", "gateway.js"], @@ -188,7 +188,7 @@ describe("readScheduledTaskCommand", () => { it("returns null when script does not exist", async () => { const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-schtasks-test-")); try { - const env = { USERPROFILE: tmpDir, CLAWDBOT_PROFILE: "default" }; + const env = { USERPROFILE: tmpDir, MOLTBOT_PROFILE: "default" }; const result = await readScheduledTaskCommand(env); expect(result).toBeNull(); } finally { @@ -199,7 +199,7 @@ describe("readScheduledTaskCommand", () => { it("returns null when script has no command", async () => { const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-schtasks-test-")); try { - const scriptPath = path.join(tmpDir, ".clawdbot", "gateway.cmd"); + const scriptPath = path.join(tmpDir, ".moltbot", "gateway.cmd"); await fs.mkdir(path.dirname(scriptPath), { recursive: true }); await fs.writeFile( scriptPath, @@ -207,7 +207,7 @@ describe("readScheduledTaskCommand", () => { "utf8", ); - const env = { USERPROFILE: tmpDir, CLAWDBOT_PROFILE: "default" }; + const env = { USERPROFILE: tmpDir, MOLTBOT_PROFILE: "default" }; const result = await readScheduledTaskCommand(env); expect(result).toBeNull(); } finally { @@ -218,7 +218,7 @@ describe("readScheduledTaskCommand", () => { it("parses full script with all components", async () => { const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-schtasks-test-")); try { - const scriptPath = path.join(tmpDir, ".clawdbot", "gateway.cmd"); + const scriptPath = path.join(tmpDir, ".moltbot", "gateway.cmd"); await fs.mkdir(path.dirname(scriptPath), { recursive: true }); await fs.writeFile( scriptPath, @@ -227,20 +227,20 @@ describe("readScheduledTaskCommand", () => { "rem Moltbot Gateway", "cd /d C:\\Projects\\moltbot", "set NODE_ENV=production", - "set CLAWDBOT_PORT=18789", + "set MOLTBOT_PORT=18789", "node gateway.js --verbose", ].join("\r\n"), "utf8", ); - const env = { USERPROFILE: tmpDir, CLAWDBOT_PROFILE: "default" }; + const env = { USERPROFILE: tmpDir, MOLTBOT_PROFILE: "default" }; const result = await readScheduledTaskCommand(env); expect(result).toEqual({ programArguments: ["node", "gateway.js", "--verbose"], workingDirectory: "C:\\Projects\\moltbot", environment: { NODE_ENV: "production", - CLAWDBOT_PORT: "18789", + MOLTBOT_PORT: "18789", }, }); } finally { diff --git a/src/daemon/schtasks.ts b/src/daemon/schtasks.ts index 2c68b1e63..0de332d22 100644 --- a/src/daemon/schtasks.ts +++ b/src/daemon/schtasks.ts @@ -17,15 +17,15 @@ const formatLine = (label: string, value: string) => { }; function resolveTaskName(env: Record): string { - const override = env.CLAWDBOT_WINDOWS_TASK_NAME?.trim(); + const override = env.MOLTBOT_WINDOWS_TASK_NAME?.trim(); if (override) return override; - return resolveGatewayWindowsTaskName(env.CLAWDBOT_PROFILE); + return resolveGatewayWindowsTaskName(env.MOLTBOT_PROFILE); } export function resolveTaskScriptPath(env: Record): string { - const override = env.CLAWDBOT_TASK_SCRIPT?.trim(); + const override = env.MOLTBOT_TASK_SCRIPT?.trim(); if (override) return override; - const scriptName = env.CLAWDBOT_TASK_SCRIPT_NAME?.trim() || "gateway.cmd"; + const scriptName = env.MOLTBOT_TASK_SCRIPT_NAME?.trim() || "gateway.cmd"; const stateDir = resolveGatewayStateDir(env); return path.join(stateDir, scriptName); } @@ -225,8 +225,8 @@ export async function installScheduledTask({ const taskDescription = description ?? formatGatewayServiceDescription({ - profile: env.CLAWDBOT_PROFILE, - version: environment?.CLAWDBOT_SERVICE_VERSION ?? env.CLAWDBOT_SERVICE_VERSION, + profile: env.MOLTBOT_PROFILE, + version: environment?.MOLTBOT_SERVICE_VERSION ?? env.MOLTBOT_SERVICE_VERSION, }); const script = buildTaskScript({ description: taskDescription, diff --git a/src/daemon/service-env.test.ts b/src/daemon/service-env.test.ts index 8a5cc6072..384c80c78 100644 --- a/src/daemon/service-env.test.ts +++ b/src/daemon/service-env.test.ts @@ -223,25 +223,25 @@ describe("buildServiceEnvironment", () => { } else { expect(env.PATH).toContain("/usr/bin"); } - expect(env.CLAWDBOT_GATEWAY_PORT).toBe("18789"); - expect(env.CLAWDBOT_GATEWAY_TOKEN).toBe("secret"); - expect(env.CLAWDBOT_SERVICE_MARKER).toBe("moltbot"); - expect(env.CLAWDBOT_SERVICE_KIND).toBe("gateway"); - expect(typeof env.CLAWDBOT_SERVICE_VERSION).toBe("string"); - expect(env.CLAWDBOT_SYSTEMD_UNIT).toBe("moltbot-gateway.service"); + expect(env.MOLTBOT_GATEWAY_PORT).toBe("18789"); + expect(env.MOLTBOT_GATEWAY_TOKEN).toBe("secret"); + expect(env.MOLTBOT_SERVICE_MARKER).toBe("moltbot"); + expect(env.MOLTBOT_SERVICE_KIND).toBe("gateway"); + expect(typeof env.MOLTBOT_SERVICE_VERSION).toBe("string"); + expect(env.MOLTBOT_SYSTEMD_UNIT).toBe("moltbot-gateway.service"); if (process.platform === "darwin") { - expect(env.CLAWDBOT_LAUNCHD_LABEL).toBe("bot.molt.gateway"); + expect(env.MOLTBOT_LAUNCHD_LABEL).toBe("bot.molt.gateway"); } }); it("uses profile-specific unit and label", () => { const env = buildServiceEnvironment({ - env: { HOME: "/home/user", CLAWDBOT_PROFILE: "work" }, + env: { HOME: "/home/user", MOLTBOT_PROFILE: "work" }, port: 18789, }); - expect(env.CLAWDBOT_SYSTEMD_UNIT).toBe("moltbot-gateway-work.service"); + expect(env.MOLTBOT_SYSTEMD_UNIT).toBe("moltbot-gateway-work.service"); if (process.platform === "darwin") { - expect(env.CLAWDBOT_LAUNCHD_LABEL).toBe("bot.molt.work"); + expect(env.MOLTBOT_LAUNCHD_LABEL).toBe("bot.molt.work"); } }); }); diff --git a/src/daemon/service-env.ts b/src/daemon/service-env.ts index 776080ebe..1b0cf310f 100644 --- a/src/daemon/service-env.ts +++ b/src/daemon/service-env.ts @@ -131,7 +131,7 @@ export function buildServiceEnvironment(params: { launchdLabel?: string; }): Record { const { env, port, token, launchdLabel } = params; - const profile = env.CLAWDBOT_PROFILE; + const profile = env.MOLTBOT_PROFILE; const resolvedLaunchdLabel = launchdLabel || (process.platform === "darwin" ? resolveGatewayLaunchAgentLabel(profile) : undefined); @@ -139,16 +139,16 @@ export function buildServiceEnvironment(params: { return { HOME: env.HOME, PATH: buildMinimalServicePath({ env }), - CLAWDBOT_PROFILE: profile, - CLAWDBOT_STATE_DIR: env.CLAWDBOT_STATE_DIR, - CLAWDBOT_CONFIG_PATH: env.CLAWDBOT_CONFIG_PATH, - CLAWDBOT_GATEWAY_PORT: String(port), - CLAWDBOT_GATEWAY_TOKEN: token, - CLAWDBOT_LAUNCHD_LABEL: resolvedLaunchdLabel, - CLAWDBOT_SYSTEMD_UNIT: systemdUnit, - CLAWDBOT_SERVICE_MARKER: GATEWAY_SERVICE_MARKER, - CLAWDBOT_SERVICE_KIND: GATEWAY_SERVICE_KIND, - CLAWDBOT_SERVICE_VERSION: VERSION, + MOLTBOT_PROFILE: profile, + MOLTBOT_STATE_DIR: env.MOLTBOT_STATE_DIR, + MOLTBOT_CONFIG_PATH: env.MOLTBOT_CONFIG_PATH, + MOLTBOT_GATEWAY_PORT: String(port), + MOLTBOT_GATEWAY_TOKEN: token, + MOLTBOT_LAUNCHD_LABEL: resolvedLaunchdLabel, + MOLTBOT_SYSTEMD_UNIT: systemdUnit, + MOLTBOT_SERVICE_MARKER: GATEWAY_SERVICE_MARKER, + MOLTBOT_SERVICE_KIND: GATEWAY_SERVICE_KIND, + MOLTBOT_SERVICE_VERSION: VERSION, }; } @@ -159,15 +159,15 @@ export function buildNodeServiceEnvironment(params: { return { HOME: env.HOME, PATH: buildMinimalServicePath({ env }), - CLAWDBOT_STATE_DIR: env.CLAWDBOT_STATE_DIR, - CLAWDBOT_CONFIG_PATH: env.CLAWDBOT_CONFIG_PATH, - CLAWDBOT_LAUNCHD_LABEL: resolveNodeLaunchAgentLabel(), - CLAWDBOT_SYSTEMD_UNIT: resolveNodeSystemdServiceName(), - CLAWDBOT_WINDOWS_TASK_NAME: resolveNodeWindowsTaskName(), - CLAWDBOT_TASK_SCRIPT_NAME: NODE_WINDOWS_TASK_SCRIPT_NAME, - CLAWDBOT_LOG_PREFIX: "node", - CLAWDBOT_SERVICE_MARKER: NODE_SERVICE_MARKER, - CLAWDBOT_SERVICE_KIND: NODE_SERVICE_KIND, - CLAWDBOT_SERVICE_VERSION: VERSION, + MOLTBOT_STATE_DIR: env.MOLTBOT_STATE_DIR, + MOLTBOT_CONFIG_PATH: env.MOLTBOT_CONFIG_PATH, + MOLTBOT_LAUNCHD_LABEL: resolveNodeLaunchAgentLabel(), + MOLTBOT_SYSTEMD_UNIT: resolveNodeSystemdServiceName(), + MOLTBOT_WINDOWS_TASK_NAME: resolveNodeWindowsTaskName(), + MOLTBOT_TASK_SCRIPT_NAME: NODE_WINDOWS_TASK_SCRIPT_NAME, + MOLTBOT_LOG_PREFIX: "node", + MOLTBOT_SERVICE_MARKER: NODE_SERVICE_MARKER, + MOLTBOT_SERVICE_KIND: NODE_SERVICE_KIND, + MOLTBOT_SERVICE_VERSION: VERSION, }; } diff --git a/src/daemon/systemd.test.ts b/src/daemon/systemd.test.ts index c61c7cf24..2bd5b7981 100644 --- a/src/daemon/systemd.test.ts +++ b/src/daemon/systemd.test.ts @@ -21,52 +21,52 @@ describe("systemd runtime parsing", () => { }); describe("resolveSystemdUserUnitPath", () => { - it("uses default service name when CLAWDBOT_PROFILE is default", () => { - const env = { HOME: "/home/test", CLAWDBOT_PROFILE: "default" }; + it("uses default service name when MOLTBOT_PROFILE is default", () => { + const env = { HOME: "/home/test", MOLTBOT_PROFILE: "default" }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/moltbot-gateway.service", ); }); - it("uses default service name when CLAWDBOT_PROFILE is unset", () => { + it("uses default service name when MOLTBOT_PROFILE is unset", () => { const env = { HOME: "/home/test" }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/moltbot-gateway.service", ); }); - it("uses profile-specific service name when CLAWDBOT_PROFILE is set to a custom value", () => { - const env = { HOME: "/home/test", CLAWDBOT_PROFILE: "jbphoenix" }; + it("uses profile-specific service name when MOLTBOT_PROFILE is set to a custom value", () => { + const env = { HOME: "/home/test", MOLTBOT_PROFILE: "jbphoenix" }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/moltbot-gateway-jbphoenix.service", ); }); - it("prefers CLAWDBOT_SYSTEMD_UNIT over CLAWDBOT_PROFILE", () => { + it("prefers MOLTBOT_SYSTEMD_UNIT over MOLTBOT_PROFILE", () => { const env = { HOME: "/home/test", - CLAWDBOT_PROFILE: "jbphoenix", - CLAWDBOT_SYSTEMD_UNIT: "custom-unit", + MOLTBOT_PROFILE: "jbphoenix", + MOLTBOT_SYSTEMD_UNIT: "custom-unit", }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/custom-unit.service", ); }); - it("handles CLAWDBOT_SYSTEMD_UNIT with .service suffix", () => { + it("handles MOLTBOT_SYSTEMD_UNIT with .service suffix", () => { const env = { HOME: "/home/test", - CLAWDBOT_SYSTEMD_UNIT: "custom-unit.service", + MOLTBOT_SYSTEMD_UNIT: "custom-unit.service", }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/custom-unit.service", ); }); - it("trims whitespace from CLAWDBOT_SYSTEMD_UNIT", () => { + it("trims whitespace from MOLTBOT_SYSTEMD_UNIT", () => { const env = { HOME: "/home/test", - CLAWDBOT_SYSTEMD_UNIT: " custom-unit ", + MOLTBOT_SYSTEMD_UNIT: " custom-unit ", }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/custom-unit.service", @@ -74,21 +74,21 @@ describe("resolveSystemdUserUnitPath", () => { }); it("handles case-insensitive 'Default' profile", () => { - const env = { HOME: "/home/test", CLAWDBOT_PROFILE: "Default" }; + const env = { HOME: "/home/test", MOLTBOT_PROFILE: "Default" }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/moltbot-gateway.service", ); }); it("handles case-insensitive 'DEFAULT' profile", () => { - const env = { HOME: "/home/test", CLAWDBOT_PROFILE: "DEFAULT" }; + const env = { HOME: "/home/test", MOLTBOT_PROFILE: "DEFAULT" }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/moltbot-gateway.service", ); }); - it("trims whitespace from CLAWDBOT_PROFILE", () => { - const env = { HOME: "/home/test", CLAWDBOT_PROFILE: " myprofile " }; + it("trims whitespace from MOLTBOT_PROFILE", () => { + const env = { HOME: "/home/test", MOLTBOT_PROFILE: " myprofile " }; expect(resolveSystemdUserUnitPath(env)).toBe( "/home/test/.config/systemd/user/moltbot-gateway-myprofile.service", ); diff --git a/src/daemon/systemd.ts b/src/daemon/systemd.ts index 7a28304f3..48c551a4d 100644 --- a/src/daemon/systemd.ts +++ b/src/daemon/systemd.ts @@ -39,11 +39,11 @@ function resolveSystemdUnitPathForName( } function resolveSystemdServiceName(env: Record): string { - const override = env.CLAWDBOT_SYSTEMD_UNIT?.trim(); + const override = env.MOLTBOT_SYSTEMD_UNIT?.trim(); if (override) { return override.endsWith(".service") ? override.slice(0, -".service".length) : override; } - return resolveGatewaySystemdServiceName(env.CLAWDBOT_PROFILE); + return resolveGatewaySystemdServiceName(env.MOLTBOT_PROFILE); } function resolveSystemdUnitPath(env: Record): string { @@ -202,8 +202,8 @@ export async function installSystemdService({ const serviceDescription = description ?? formatGatewayServiceDescription({ - profile: env.CLAWDBOT_PROFILE, - version: environment?.CLAWDBOT_SERVICE_VERSION ?? env.CLAWDBOT_SERVICE_VERSION, + profile: env.MOLTBOT_PROFILE, + version: environment?.MOLTBOT_SERVICE_VERSION ?? env.MOLTBOT_SERVICE_VERSION, }); const unit = buildSystemdUnit({ description: serviceDescription, @@ -213,7 +213,7 @@ export async function installSystemdService({ }); await fs.writeFile(unitPath, unit, "utf8"); - const serviceName = resolveGatewaySystemdServiceName(env.CLAWDBOT_PROFILE); + const serviceName = resolveGatewaySystemdServiceName(env.MOLTBOT_PROFILE); const unitName = `${serviceName}.service`; const reload = await execSystemctl(["--user", "daemon-reload"]); if (reload.code !== 0) { @@ -244,7 +244,7 @@ export async function uninstallSystemdService({ stdout: NodeJS.WritableStream; }): Promise { await assertSystemdAvailable(); - const serviceName = resolveGatewaySystemdServiceName(env.CLAWDBOT_PROFILE); + const serviceName = resolveGatewaySystemdServiceName(env.MOLTBOT_PROFILE); const unitName = `${serviceName}.service`; await execSystemctl(["--user", "disable", "--now", unitName]); diff --git a/src/docker-setup.test.ts b/src/docker-setup.test.ts index 6a8e91a4b..a0a4ff8e5 100644 --- a/src/docker-setup.test.ts +++ b/src/docker-setup.test.ts @@ -60,13 +60,13 @@ describe("docker-setup.sh", () => { ...process.env, PATH: `${binDir}:${process.env.PATH ?? ""}`, DOCKER_STUB_LOG: logPath, - CLAWDBOT_GATEWAY_TOKEN: "test-token", - CLAWDBOT_CONFIG_DIR: join(rootDir, "config"), - CLAWDBOT_WORKSPACE_DIR: join(rootDir, "clawd"), + MOLTBOT_GATEWAY_TOKEN: "test-token", + MOLTBOT_CONFIG_DIR: join(rootDir, "config"), + MOLTBOT_WORKSPACE_DIR: join(rootDir, "clawd"), }; - delete env.CLAWDBOT_DOCKER_APT_PACKAGES; - delete env.CLAWDBOT_EXTRA_MOUNTS; - delete env.CLAWDBOT_HOME_VOLUME; + delete env.MOLTBOT_DOCKER_APT_PACKAGES; + delete env.MOLTBOT_EXTRA_MOUNTS; + delete env.MOLTBOT_HOME_VOLUME; const result = spawnSync("bash", [scriptPath], { cwd: rootDir, @@ -77,12 +77,12 @@ describe("docker-setup.sh", () => { expect(result.status).toBe(0); const envFile = await readFile(join(rootDir, ".env"), "utf8"); - expect(envFile).toContain("CLAWDBOT_DOCKER_APT_PACKAGES="); - expect(envFile).toContain("CLAWDBOT_EXTRA_MOUNTS="); - expect(envFile).toContain("CLAWDBOT_HOME_VOLUME="); + expect(envFile).toContain("MOLTBOT_DOCKER_APT_PACKAGES="); + expect(envFile).toContain("MOLTBOT_EXTRA_MOUNTS="); + expect(envFile).toContain("MOLTBOT_HOME_VOLUME="); }); - it("plumbs CLAWDBOT_DOCKER_APT_PACKAGES into .env and docker build args", async () => { + it("plumbs MOLTBOT_DOCKER_APT_PACKAGES into .env and docker build args", async () => { const assocCheck = spawnSync("bash", ["-c", "declare -A _t=()"], { encoding: "utf8", }); @@ -110,12 +110,12 @@ describe("docker-setup.sh", () => { ...process.env, PATH: `${binDir}:${process.env.PATH ?? ""}`, DOCKER_STUB_LOG: logPath, - CLAWDBOT_DOCKER_APT_PACKAGES: "ffmpeg build-essential", - CLAWDBOT_GATEWAY_TOKEN: "test-token", - CLAWDBOT_CONFIG_DIR: join(rootDir, "config"), - CLAWDBOT_WORKSPACE_DIR: join(rootDir, "clawd"), - CLAWDBOT_EXTRA_MOUNTS: "", - CLAWDBOT_HOME_VOLUME: "", + MOLTBOT_DOCKER_APT_PACKAGES: "ffmpeg build-essential", + MOLTBOT_GATEWAY_TOKEN: "test-token", + MOLTBOT_CONFIG_DIR: join(rootDir, "config"), + MOLTBOT_WORKSPACE_DIR: join(rootDir, "clawd"), + MOLTBOT_EXTRA_MOUNTS: "", + MOLTBOT_HOME_VOLUME: "", }; const result = spawnSync("bash", [scriptPath], { @@ -127,10 +127,10 @@ describe("docker-setup.sh", () => { expect(result.status).toBe(0); const envFile = await readFile(join(rootDir, ".env"), "utf8"); - expect(envFile).toContain("CLAWDBOT_DOCKER_APT_PACKAGES=ffmpeg build-essential"); + expect(envFile).toContain("MOLTBOT_DOCKER_APT_PACKAGES=ffmpeg build-essential"); const log = await readFile(logPath, "utf8"); - expect(log).toContain("--build-arg CLAWDBOT_DOCKER_APT_PACKAGES=ffmpeg build-essential"); + expect(log).toContain("--build-arg MOLTBOT_DOCKER_APT_PACKAGES=ffmpeg build-essential"); }); it("keeps docker-compose gateway command in sync", async () => { diff --git a/src/entry.ts b/src/entry.ts index 8cd1c5060..6bff1581e 100644 --- a/src/entry.ts +++ b/src/entry.ts @@ -24,12 +24,12 @@ function hasExperimentalWarningSuppressed(nodeOptions: string): boolean { } function ensureExperimentalWarningSuppressed(): boolean { - if (isTruthyEnvValue(process.env.CLAWDBOT_NO_RESPAWN)) return false; - if (isTruthyEnvValue(process.env.CLAWDBOT_NODE_OPTIONS_READY)) return false; + if (isTruthyEnvValue(process.env.MOLTBOT_NO_RESPAWN)) return false; + if (isTruthyEnvValue(process.env.MOLTBOT_NODE_OPTIONS_READY)) return false; const nodeOptions = process.env.NODE_OPTIONS ?? ""; if (hasExperimentalWarningSuppressed(nodeOptions)) return false; - process.env.CLAWDBOT_NODE_OPTIONS_READY = "1"; + process.env.MOLTBOT_NODE_OPTIONS_READY = "1"; process.env.NODE_OPTIONS = `${nodeOptions} ${EXPERIMENTAL_WARNING_FLAG}`.trim(); const child = spawn(process.execPath, [...process.execArgv, ...process.argv.slice(1)], { diff --git a/src/gateway/auth.ts b/src/gateway/auth.ts index 1adc367a2..7d09f432f 100644 --- a/src/gateway/auth.ts +++ b/src/gateway/auth.ts @@ -171,8 +171,8 @@ export function resolveGatewayAuth(params: { }): ResolvedGatewayAuth { const authConfig = params.authConfig ?? {}; const env = params.env ?? process.env; - const token = authConfig.token ?? env.CLAWDBOT_GATEWAY_TOKEN ?? undefined; - const password = authConfig.password ?? env.CLAWDBOT_GATEWAY_PASSWORD ?? undefined; + const token = authConfig.token ?? env.MOLTBOT_GATEWAY_TOKEN ?? undefined; + const password = authConfig.password ?? env.MOLTBOT_GATEWAY_PASSWORD ?? undefined; const mode: ResolvedGatewayAuth["mode"] = authConfig.mode ?? (password ? "password" : "token"); const allowTailscale = authConfig.allowTailscale ?? (params.tailscaleMode === "serve" && mode !== "password"); @@ -188,7 +188,7 @@ export function assertGatewayAuthConfigured(auth: ResolvedGatewayAuth): void { if (auth.mode === "token" && !auth.token) { if (auth.allowTailscale) return; throw new Error( - "gateway auth mode is token, but no token was configured (set gateway.auth.token or CLAWDBOT_GATEWAY_TOKEN)", + "gateway auth mode is token, but no token was configured (set gateway.auth.token or MOLTBOT_GATEWAY_TOKEN)", ); } if (auth.mode === "password" && !auth.password) { diff --git a/src/gateway/call.test.ts b/src/gateway/call.test.ts index a0a0d8583..9bbd3fee3 100644 --- a/src/gateway/call.test.ts +++ b/src/gateway/call.test.ts @@ -254,7 +254,7 @@ describe("callGateway error details", () => { }); describe("callGateway password resolution", () => { - const originalEnvPassword = process.env.CLAWDBOT_GATEWAY_PASSWORD; + const originalEnvPassword = process.env.MOLTBOT_GATEWAY_PASSWORD; beforeEach(() => { loadConfig.mockReset(); @@ -264,16 +264,16 @@ describe("callGateway password resolution", () => { startMode = "hello"; closeCode = 1006; closeReason = ""; - delete process.env.CLAWDBOT_GATEWAY_PASSWORD; + delete process.env.MOLTBOT_GATEWAY_PASSWORD; resolveGatewayPort.mockReturnValue(18789); pickPrimaryTailnetIPv4.mockReturnValue(undefined); }); afterEach(() => { if (originalEnvPassword == null) { - delete process.env.CLAWDBOT_GATEWAY_PASSWORD; + delete process.env.MOLTBOT_GATEWAY_PASSWORD; } else { - process.env.CLAWDBOT_GATEWAY_PASSWORD = originalEnvPassword; + process.env.MOLTBOT_GATEWAY_PASSWORD = originalEnvPassword; } }); @@ -292,7 +292,7 @@ describe("callGateway password resolution", () => { }); it("prefers env password over local config password", async () => { - process.env.CLAWDBOT_GATEWAY_PASSWORD = "from-env"; + process.env.MOLTBOT_GATEWAY_PASSWORD = "from-env"; loadConfig.mockReturnValue({ gateway: { mode: "local", @@ -321,7 +321,7 @@ describe("callGateway password resolution", () => { }); it("prefers env password over remote password in remote mode", async () => { - process.env.CLAWDBOT_GATEWAY_PASSWORD = "from-env"; + process.env.MOLTBOT_GATEWAY_PASSWORD = "from-env"; loadConfig.mockReturnValue({ gateway: { mode: "remote", @@ -337,7 +337,7 @@ describe("callGateway password resolution", () => { }); describe("callGateway token resolution", () => { - const originalEnvToken = process.env.CLAWDBOT_GATEWAY_TOKEN; + const originalEnvToken = process.env.MOLTBOT_GATEWAY_TOKEN; beforeEach(() => { loadConfig.mockReset(); @@ -347,21 +347,21 @@ describe("callGateway token resolution", () => { startMode = "hello"; closeCode = 1006; closeReason = ""; - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; resolveGatewayPort.mockReturnValue(18789); pickPrimaryTailnetIPv4.mockReturnValue(undefined); }); afterEach(() => { if (originalEnvToken == null) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = originalEnvToken; + process.env.MOLTBOT_GATEWAY_TOKEN = originalEnvToken; } }); it("uses remote token when remote mode uses url override", async () => { - process.env.CLAWDBOT_GATEWAY_TOKEN = "env-token"; + process.env.MOLTBOT_GATEWAY_TOKEN = "env-token"; loadConfig.mockReturnValue({ gateway: { mode: "remote", diff --git a/src/gateway/call.ts b/src/gateway/call.ts index 934c22da9..e1c289481 100644 --- a/src/gateway/call.ts +++ b/src/gateway/call.ts @@ -158,7 +158,7 @@ export async function callGateway(opts: CallGatewayOptions): Promis ? typeof remote?.token === "string" && remote.token.trim().length > 0 ? remote.token.trim() : undefined - : process.env.CLAWDBOT_GATEWAY_TOKEN?.trim() || + : process.env.MOLTBOT_GATEWAY_TOKEN?.trim() || (typeof authToken === "string" && authToken.trim().length > 0 ? authToken.trim() : undefined)); @@ -166,7 +166,7 @@ export async function callGateway(opts: CallGatewayOptions): Promis (typeof opts.password === "string" && opts.password.trim().length > 0 ? opts.password.trim() : undefined) || - process.env.CLAWDBOT_GATEWAY_PASSWORD?.trim() || + process.env.MOLTBOT_GATEWAY_PASSWORD?.trim() || (isRemoteMode ? typeof remote?.password === "string" && remote.password.trim().length > 0 ? remote.password.trim() diff --git a/src/gateway/control-ui.ts b/src/gateway/control-ui.ts index b06092a96..f4a122a26 100644 --- a/src/gateway/control-ui.ts +++ b/src/gateway/control-ui.ts @@ -176,16 +176,16 @@ function injectControlUiConfig(html: string, opts: ControlUiInjectionOpts): stri const { basePath, assistantName, assistantAvatar } = opts; const script = ``; // Check if already injected - if (html.includes("__CLAWDBOT_ASSISTANT_NAME__")) return html; + if (html.includes("__MOLTBOT_ASSISTANT_NAME__")) return html; const headClose = html.indexOf(""); if (headClose !== -1) { return `${html.slice(0, headClose)}${script}${html.slice(headClose)}`; diff --git a/src/gateway/gateway-cli-backend.live.test.ts b/src/gateway/gateway-cli-backend.live.test.ts index c39b34b91..ee42293ab 100644 --- a/src/gateway/gateway-cli-backend.live.test.ts +++ b/src/gateway/gateway-cli-backend.live.test.ts @@ -12,10 +12,10 @@ import { GatewayClient } from "./client.js"; import { renderCatNoncePngBase64 } from "./live-image-probe.js"; import { startGatewayServer } from "./server.js"; -const LIVE = isTruthyEnvValue(process.env.LIVE) || isTruthyEnvValue(process.env.CLAWDBOT_LIVE_TEST); -const CLI_LIVE = isTruthyEnvValue(process.env.CLAWDBOT_LIVE_CLI_BACKEND); -const CLI_IMAGE = isTruthyEnvValue(process.env.CLAWDBOT_LIVE_CLI_BACKEND_IMAGE_PROBE); -const CLI_RESUME = isTruthyEnvValue(process.env.CLAWDBOT_LIVE_CLI_BACKEND_RESUME_PROBE); +const LIVE = isTruthyEnvValue(process.env.LIVE) || isTruthyEnvValue(process.env.MOLTBOT_LIVE_TEST); +const CLI_LIVE = isTruthyEnvValue(process.env.MOLTBOT_LIVE_CLI_BACKEND); +const CLI_IMAGE = isTruthyEnvValue(process.env.MOLTBOT_LIVE_CLI_BACKEND_IMAGE_PROBE); +const CLI_RESUME = isTruthyEnvValue(process.env.MOLTBOT_LIVE_CLI_BACKEND_RESUME_PROBE); const describeLive = LIVE && CLI_LIVE ? describe : describe.skip; const DEFAULT_MODEL = "claude-cli/claude-sonnet-4-5"; @@ -94,7 +94,7 @@ function parseImageMode(raw?: string): "list" | "repeat" | undefined { const trimmed = raw?.trim(); if (!trimmed) return undefined; if (trimmed === "list" || trimmed === "repeat") return trimmed; - throw new Error("CLAWDBOT_LIVE_CLI_BACKEND_IMAGE_MODE must be 'list' or 'repeat'."); + throw new Error("MOLTBOT_LIVE_CLI_BACKEND_IMAGE_MODE must be 'list' or 'repeat'."); } function withMcpConfigOverrides(args: string[], mcpConfigPath: string): string[] { @@ -181,31 +181,31 @@ async function connectClient(params: { url: string; token: string }) { describeLive("gateway live (cli backend)", () => { it("runs the agent pipeline against the local CLI backend", async () => { const previous = { - configPath: process.env.CLAWDBOT_CONFIG_PATH, - token: process.env.CLAWDBOT_GATEWAY_TOKEN, - skipChannels: process.env.CLAWDBOT_SKIP_CHANNELS, - skipGmail: process.env.CLAWDBOT_SKIP_GMAIL_WATCHER, - skipCron: process.env.CLAWDBOT_SKIP_CRON, - skipCanvas: process.env.CLAWDBOT_SKIP_CANVAS_HOST, + configPath: process.env.MOLTBOT_CONFIG_PATH, + token: process.env.MOLTBOT_GATEWAY_TOKEN, + skipChannels: process.env.MOLTBOT_SKIP_CHANNELS, + skipGmail: process.env.MOLTBOT_SKIP_GMAIL_WATCHER, + skipCron: process.env.MOLTBOT_SKIP_CRON, + skipCanvas: process.env.MOLTBOT_SKIP_CANVAS_HOST, anthropicApiKey: process.env.ANTHROPIC_API_KEY, anthropicApiKeyOld: process.env.ANTHROPIC_API_KEY_OLD, }; - process.env.CLAWDBOT_SKIP_CHANNELS = "1"; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = "1"; - process.env.CLAWDBOT_SKIP_CRON = "1"; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = "1"; + process.env.MOLTBOT_SKIP_CHANNELS = "1"; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = "1"; + process.env.MOLTBOT_SKIP_CRON = "1"; + process.env.MOLTBOT_SKIP_CANVAS_HOST = "1"; delete process.env.ANTHROPIC_API_KEY; delete process.env.ANTHROPIC_API_KEY_OLD; const token = `test-${randomUUID()}`; - process.env.CLAWDBOT_GATEWAY_TOKEN = token; + process.env.MOLTBOT_GATEWAY_TOKEN = token; - const rawModel = process.env.CLAWDBOT_LIVE_CLI_BACKEND_MODEL ?? DEFAULT_MODEL; + const rawModel = process.env.MOLTBOT_LIVE_CLI_BACKEND_MODEL ?? DEFAULT_MODEL; const parsed = parseModelRef(rawModel, "claude-cli"); if (!parsed) { throw new Error( - `CLAWDBOT_LIVE_CLI_BACKEND_MODEL must resolve to a CLI backend model. Got: ${rawModel}`, + `MOLTBOT_LIVE_CLI_BACKEND_MODEL must resolve to a CLI backend model. Got: ${rawModel}`, ); } const providerId = parsed.provider; @@ -218,36 +218,34 @@ describeLive("gateway live (cli backend)", () => { ? { command: "codex", args: DEFAULT_CODEX_ARGS } : null; - const cliCommand = process.env.CLAWDBOT_LIVE_CLI_BACKEND_COMMAND ?? providerDefaults?.command; + const cliCommand = process.env.MOLTBOT_LIVE_CLI_BACKEND_COMMAND ?? providerDefaults?.command; if (!cliCommand) { - throw new Error( - `CLAWDBOT_LIVE_CLI_BACKEND_COMMAND is required for provider "${providerId}".`, - ); + throw new Error(`MOLTBOT_LIVE_CLI_BACKEND_COMMAND is required for provider "${providerId}".`); } const baseCliArgs = parseJsonStringArray( - "CLAWDBOT_LIVE_CLI_BACKEND_ARGS", - process.env.CLAWDBOT_LIVE_CLI_BACKEND_ARGS, + "MOLTBOT_LIVE_CLI_BACKEND_ARGS", + process.env.MOLTBOT_LIVE_CLI_BACKEND_ARGS, ) ?? providerDefaults?.args; if (!baseCliArgs || baseCliArgs.length === 0) { - throw new Error(`CLAWDBOT_LIVE_CLI_BACKEND_ARGS is required for provider "${providerId}".`); + throw new Error(`MOLTBOT_LIVE_CLI_BACKEND_ARGS is required for provider "${providerId}".`); } const cliClearEnv = parseJsonStringArray( - "CLAWDBOT_LIVE_CLI_BACKEND_CLEAR_ENV", - process.env.CLAWDBOT_LIVE_CLI_BACKEND_CLEAR_ENV, + "MOLTBOT_LIVE_CLI_BACKEND_CLEAR_ENV", + process.env.MOLTBOT_LIVE_CLI_BACKEND_CLEAR_ENV, ) ?? (providerId === "claude-cli" ? DEFAULT_CLEAR_ENV : []); - const cliImageArg = process.env.CLAWDBOT_LIVE_CLI_BACKEND_IMAGE_ARG?.trim() || undefined; - const cliImageMode = parseImageMode(process.env.CLAWDBOT_LIVE_CLI_BACKEND_IMAGE_MODE); + const cliImageArg = process.env.MOLTBOT_LIVE_CLI_BACKEND_IMAGE_ARG?.trim() || undefined; + const cliImageMode = parseImageMode(process.env.MOLTBOT_LIVE_CLI_BACKEND_IMAGE_MODE); if (cliImageMode && !cliImageArg) { throw new Error( - "CLAWDBOT_LIVE_CLI_BACKEND_IMAGE_MODE requires CLAWDBOT_LIVE_CLI_BACKEND_IMAGE_ARG.", + "MOLTBOT_LIVE_CLI_BACKEND_IMAGE_MODE requires MOLTBOT_LIVE_CLI_BACKEND_IMAGE_ARG.", ); } const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-live-cli-")); - const disableMcpConfig = process.env.CLAWDBOT_LIVE_CLI_BACKEND_DISABLE_MCP_CONFIG !== "0"; + const disableMcpConfig = process.env.MOLTBOT_LIVE_CLI_BACKEND_DISABLE_MCP_CONFIG !== "0"; let cliArgs = baseCliArgs; if (providerId === "claude-cli" && disableMcpConfig) { const mcpConfigPath = path.join(tempDir, "claude-mcp.json"); @@ -283,7 +281,7 @@ describeLive("gateway live (cli backend)", () => { }; const tempConfigPath = path.join(tempDir, "moltbot.json"); await fs.writeFile(tempConfigPath, `${JSON.stringify(nextCfg, null, 2)}\n`); - process.env.CLAWDBOT_CONFIG_PATH = tempConfigPath; + process.env.MOLTBOT_CONFIG_PATH = tempConfigPath; const port = await getFreeGatewayPort(); const server = await startGatewayServer(port, { @@ -399,18 +397,18 @@ describeLive("gateway live (cli backend)", () => { client.stop(); await server.close(); await fs.rm(tempDir, { recursive: true, force: true }); - if (previous.configPath === undefined) delete process.env.CLAWDBOT_CONFIG_PATH; - else process.env.CLAWDBOT_CONFIG_PATH = previous.configPath; - if (previous.token === undefined) delete process.env.CLAWDBOT_GATEWAY_TOKEN; - else process.env.CLAWDBOT_GATEWAY_TOKEN = previous.token; - if (previous.skipChannels === undefined) delete process.env.CLAWDBOT_SKIP_CHANNELS; - else process.env.CLAWDBOT_SKIP_CHANNELS = previous.skipChannels; - if (previous.skipGmail === undefined) delete process.env.CLAWDBOT_SKIP_GMAIL_WATCHER; - else process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = previous.skipGmail; - if (previous.skipCron === undefined) delete process.env.CLAWDBOT_SKIP_CRON; - else process.env.CLAWDBOT_SKIP_CRON = previous.skipCron; - if (previous.skipCanvas === undefined) delete process.env.CLAWDBOT_SKIP_CANVAS_HOST; - else process.env.CLAWDBOT_SKIP_CANVAS_HOST = previous.skipCanvas; + if (previous.configPath === undefined) delete process.env.MOLTBOT_CONFIG_PATH; + else process.env.MOLTBOT_CONFIG_PATH = previous.configPath; + if (previous.token === undefined) delete process.env.MOLTBOT_GATEWAY_TOKEN; + else process.env.MOLTBOT_GATEWAY_TOKEN = previous.token; + if (previous.skipChannels === undefined) delete process.env.MOLTBOT_SKIP_CHANNELS; + else process.env.MOLTBOT_SKIP_CHANNELS = previous.skipChannels; + if (previous.skipGmail === undefined) delete process.env.MOLTBOT_SKIP_GMAIL_WATCHER; + else process.env.MOLTBOT_SKIP_GMAIL_WATCHER = previous.skipGmail; + if (previous.skipCron === undefined) delete process.env.MOLTBOT_SKIP_CRON; + else process.env.MOLTBOT_SKIP_CRON = previous.skipCron; + if (previous.skipCanvas === undefined) delete process.env.MOLTBOT_SKIP_CANVAS_HOST; + else process.env.MOLTBOT_SKIP_CANVAS_HOST = previous.skipCanvas; if (previous.anthropicApiKey === undefined) delete process.env.ANTHROPIC_API_KEY; else process.env.ANTHROPIC_API_KEY = previous.anthropicApiKey; if (previous.anthropicApiKeyOld === undefined) delete process.env.ANTHROPIC_API_KEY_OLD; diff --git a/src/gateway/gateway-models.profiles.live.test.ts b/src/gateway/gateway-models.profiles.live.test.ts index d3cede10b..92d6284cc 100644 --- a/src/gateway/gateway-models.profiles.live.test.ts +++ b/src/gateway/gateway-models.profiles.live.test.ts @@ -31,10 +31,10 @@ import { GatewayClient } from "./client.js"; import { renderCatNoncePngBase64 } from "./live-image-probe.js"; import { startGatewayServer } from "./server.js"; -const LIVE = isTruthyEnvValue(process.env.LIVE) || isTruthyEnvValue(process.env.CLAWDBOT_LIVE_TEST); -const GATEWAY_LIVE = isTruthyEnvValue(process.env.CLAWDBOT_LIVE_GATEWAY); -const ZAI_FALLBACK = isTruthyEnvValue(process.env.CLAWDBOT_LIVE_GATEWAY_ZAI_FALLBACK); -const PROVIDERS = parseFilter(process.env.CLAWDBOT_LIVE_GATEWAY_PROVIDERS); +const LIVE = isTruthyEnvValue(process.env.LIVE) || isTruthyEnvValue(process.env.MOLTBOT_LIVE_TEST); +const GATEWAY_LIVE = isTruthyEnvValue(process.env.MOLTBOT_LIVE_GATEWAY); +const ZAI_FALLBACK = isTruthyEnvValue(process.env.MOLTBOT_LIVE_GATEWAY_ZAI_FALLBACK); +const PROVIDERS = parseFilter(process.env.MOLTBOT_LIVE_GATEWAY_PROVIDERS); const THINKING_LEVEL = "high"; const THINKING_TAG_RE = /<\s*\/?\s*(?:think(?:ing)?|thought|antthinking)\s*>/i; const FINAL_TAG_RE = /<\s*\/?\s*final\s*>/i; @@ -436,26 +436,26 @@ function buildMinimaxProviderOverride(params: { async function runGatewayModelSuite(params: GatewayModelSuiteParams) { const previous = { - configPath: process.env.CLAWDBOT_CONFIG_PATH, - token: process.env.CLAWDBOT_GATEWAY_TOKEN, - skipChannels: process.env.CLAWDBOT_SKIP_CHANNELS, - skipGmail: process.env.CLAWDBOT_SKIP_GMAIL_WATCHER, - skipCron: process.env.CLAWDBOT_SKIP_CRON, - skipCanvas: process.env.CLAWDBOT_SKIP_CANVAS_HOST, - agentDir: process.env.CLAWDBOT_AGENT_DIR, + configPath: process.env.MOLTBOT_CONFIG_PATH, + token: process.env.MOLTBOT_GATEWAY_TOKEN, + skipChannels: process.env.MOLTBOT_SKIP_CHANNELS, + skipGmail: process.env.MOLTBOT_SKIP_GMAIL_WATCHER, + skipCron: process.env.MOLTBOT_SKIP_CRON, + skipCanvas: process.env.MOLTBOT_SKIP_CANVAS_HOST, + agentDir: process.env.MOLTBOT_AGENT_DIR, piAgentDir: process.env.PI_CODING_AGENT_DIR, - stateDir: process.env.CLAWDBOT_STATE_DIR, + stateDir: process.env.MOLTBOT_STATE_DIR, }; let tempAgentDir: string | undefined; let tempStateDir: string | undefined; - process.env.CLAWDBOT_SKIP_CHANNELS = "1"; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = "1"; - process.env.CLAWDBOT_SKIP_CRON = "1"; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = "1"; + process.env.MOLTBOT_SKIP_CHANNELS = "1"; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = "1"; + process.env.MOLTBOT_SKIP_CRON = "1"; + process.env.MOLTBOT_SKIP_CANVAS_HOST = "1"; const token = `test-${randomUUID()}`; - process.env.CLAWDBOT_GATEWAY_TOKEN = token; + process.env.MOLTBOT_GATEWAY_TOKEN = token; const agentId = "dev"; const hostAgentDir = resolveMoltbotAgentDir(); @@ -472,21 +472,21 @@ async function runGatewayModelSuite(params: GatewayModelSuiteParams) { usageStats: hostStore.usageStats ? { ...hostStore.usageStats } : undefined, }; tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-live-state-")); - process.env.CLAWDBOT_STATE_DIR = tempStateDir; + process.env.MOLTBOT_STATE_DIR = tempStateDir; tempAgentDir = path.join(tempStateDir, "agents", DEFAULT_AGENT_ID, "agent"); saveAuthProfileStore(sanitizedStore, tempAgentDir); const tempSessionAgentDir = path.join(tempStateDir, "agents", agentId, "agent"); if (tempSessionAgentDir !== tempAgentDir) { saveAuthProfileStore(sanitizedStore, tempSessionAgentDir); } - process.env.CLAWDBOT_AGENT_DIR = tempAgentDir; + process.env.MOLTBOT_AGENT_DIR = tempAgentDir; process.env.PI_CODING_AGENT_DIR = tempAgentDir; const workspaceDir = resolveAgentWorkspaceDir(params.cfg, agentId); await fs.mkdir(workspaceDir, { recursive: true }); const nonceA = randomUUID(); const nonceB = randomUUID(); - const toolProbePath = path.join(workspaceDir, `.clawdbot-live-tool-probe.${nonceA}.txt`); + const toolProbePath = path.join(workspaceDir, `.moltbot-live-tool-probe.${nonceA}.txt`); await fs.writeFile(toolProbePath, `nonceA=${nonceA}\nnonceB=${nonceB}\n`); const agentDir = resolveMoltbotAgentDir(); @@ -502,7 +502,7 @@ async function runGatewayModelSuite(params: GatewayModelSuiteParams) { const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-live-")); const tempConfigPath = path.join(tempDir, "moltbot.json"); await fs.writeFile(tempConfigPath, `${JSON.stringify(nextCfg, null, 2)}\n`); - process.env.CLAWDBOT_CONFIG_PATH = tempConfigPath; + process.env.MOLTBOT_CONFIG_PATH = tempConfigPath; await ensureMoltbotModelsJson(nextCfg); @@ -940,15 +940,15 @@ async function runGatewayModelSuite(params: GatewayModelSuiteParams) { await fs.rm(tempStateDir, { recursive: true, force: true }); } - process.env.CLAWDBOT_CONFIG_PATH = previous.configPath; - process.env.CLAWDBOT_GATEWAY_TOKEN = previous.token; - process.env.CLAWDBOT_SKIP_CHANNELS = previous.skipChannels; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = previous.skipGmail; - process.env.CLAWDBOT_SKIP_CRON = previous.skipCron; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = previous.skipCanvas; - process.env.CLAWDBOT_AGENT_DIR = previous.agentDir; + process.env.MOLTBOT_CONFIG_PATH = previous.configPath; + process.env.MOLTBOT_GATEWAY_TOKEN = previous.token; + process.env.MOLTBOT_SKIP_CHANNELS = previous.skipChannels; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = previous.skipGmail; + process.env.MOLTBOT_SKIP_CRON = previous.skipCron; + process.env.MOLTBOT_SKIP_CANVAS_HOST = previous.skipCanvas; + process.env.MOLTBOT_AGENT_DIR = previous.agentDir; process.env.PI_CODING_AGENT_DIR = previous.piAgentDir; - process.env.CLAWDBOT_STATE_DIR = previous.stateDir; + process.env.MOLTBOT_STATE_DIR = previous.stateDir; } } @@ -967,7 +967,7 @@ describeLive("gateway live (dev agent, profile keys)", () => { const modelRegistry = discoverModels(authStorage, agentDir); const all = modelRegistry.getAll() as Array>; - const rawModels = process.env.CLAWDBOT_LIVE_GATEWAY_MODELS?.trim(); + const rawModels = process.env.MOLTBOT_LIVE_GATEWAY_MODELS?.trim(); const useModern = !rawModels || rawModels === "modern" || rawModels === "all"; const useExplicit = Boolean(rawModels) && !useModern; const filter = useExplicit ? parseFilter(rawModels) : null; @@ -1044,21 +1044,21 @@ describeLive("gateway live (dev agent, profile keys)", () => { it("z.ai fallback handles anthropic tool history", async () => { if (!ZAI_FALLBACK) return; const previous = { - configPath: process.env.CLAWDBOT_CONFIG_PATH, - token: process.env.CLAWDBOT_GATEWAY_TOKEN, - skipChannels: process.env.CLAWDBOT_SKIP_CHANNELS, - skipGmail: process.env.CLAWDBOT_SKIP_GMAIL_WATCHER, - skipCron: process.env.CLAWDBOT_SKIP_CRON, - skipCanvas: process.env.CLAWDBOT_SKIP_CANVAS_HOST, + configPath: process.env.MOLTBOT_CONFIG_PATH, + token: process.env.MOLTBOT_GATEWAY_TOKEN, + skipChannels: process.env.MOLTBOT_SKIP_CHANNELS, + skipGmail: process.env.MOLTBOT_SKIP_GMAIL_WATCHER, + skipCron: process.env.MOLTBOT_SKIP_CRON, + skipCanvas: process.env.MOLTBOT_SKIP_CANVAS_HOST, }; - process.env.CLAWDBOT_SKIP_CHANNELS = "1"; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = "1"; - process.env.CLAWDBOT_SKIP_CRON = "1"; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = "1"; + process.env.MOLTBOT_SKIP_CHANNELS = "1"; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = "1"; + process.env.MOLTBOT_SKIP_CRON = "1"; + process.env.MOLTBOT_SKIP_CANVAS_HOST = "1"; const token = `test-${randomUUID()}`; - process.env.CLAWDBOT_GATEWAY_TOKEN = token; + process.env.MOLTBOT_GATEWAY_TOKEN = token; const cfg = loadConfig(); await ensureMoltbotModelsJson(cfg); @@ -1082,7 +1082,7 @@ describeLive("gateway live (dev agent, profile keys)", () => { await fs.mkdir(workspaceDir, { recursive: true }); const nonceA = randomUUID(); const nonceB = randomUUID(); - const toolProbePath = path.join(workspaceDir, `.clawdbot-live-zai-fallback.${nonceA}.txt`); + const toolProbePath = path.join(workspaceDir, `.moltbot-live-zai-fallback.${nonceA}.txt`); await fs.writeFile(toolProbePath, `nonceA=${nonceA}\nnonceB=${nonceB}\n`); const port = await getFreeGatewayPort(); @@ -1173,12 +1173,12 @@ describeLive("gateway live (dev agent, profile keys)", () => { await server.close({ reason: "live test complete" }); await fs.rm(toolProbePath, { force: true }); - process.env.CLAWDBOT_CONFIG_PATH = previous.configPath; - process.env.CLAWDBOT_GATEWAY_TOKEN = previous.token; - process.env.CLAWDBOT_SKIP_CHANNELS = previous.skipChannels; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = previous.skipGmail; - process.env.CLAWDBOT_SKIP_CRON = previous.skipCron; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = previous.skipCanvas; + process.env.MOLTBOT_CONFIG_PATH = previous.configPath; + process.env.MOLTBOT_GATEWAY_TOKEN = previous.token; + process.env.MOLTBOT_SKIP_CHANNELS = previous.skipChannels; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = previous.skipGmail; + process.env.MOLTBOT_SKIP_CRON = previous.skipCron; + process.env.MOLTBOT_SKIP_CANVAS_HOST = previous.skipCanvas; } }, 180_000); }); diff --git a/src/gateway/gateway.e2e.test.ts b/src/gateway/gateway.e2e.test.ts index 372432983..450373489 100644 --- a/src/gateway/gateway.e2e.test.ts +++ b/src/gateway/gateway.e2e.test.ts @@ -29,37 +29,37 @@ describe("gateway e2e", () => { async () => { const prev = { home: process.env.HOME, - configPath: process.env.CLAWDBOT_CONFIG_PATH, - token: process.env.CLAWDBOT_GATEWAY_TOKEN, - skipChannels: process.env.CLAWDBOT_SKIP_CHANNELS, - skipGmail: process.env.CLAWDBOT_SKIP_GMAIL_WATCHER, - skipCron: process.env.CLAWDBOT_SKIP_CRON, - skipCanvas: process.env.CLAWDBOT_SKIP_CANVAS_HOST, - skipBrowser: process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER, + configPath: process.env.MOLTBOT_CONFIG_PATH, + token: process.env.MOLTBOT_GATEWAY_TOKEN, + skipChannels: process.env.MOLTBOT_SKIP_CHANNELS, + skipGmail: process.env.MOLTBOT_SKIP_GMAIL_WATCHER, + skipCron: process.env.MOLTBOT_SKIP_CRON, + skipCanvas: process.env.MOLTBOT_SKIP_CANVAS_HOST, + skipBrowser: process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER, }; const { baseUrl: openaiBaseUrl, restore } = installOpenAiResponsesMock(); const tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-gw-mock-home-")); process.env.HOME = tempHome; - process.env.CLAWDBOT_SKIP_CHANNELS = "1"; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = "1"; - process.env.CLAWDBOT_SKIP_CRON = "1"; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = "1"; - process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER = "1"; + process.env.MOLTBOT_SKIP_CHANNELS = "1"; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = "1"; + process.env.MOLTBOT_SKIP_CRON = "1"; + process.env.MOLTBOT_SKIP_CANVAS_HOST = "1"; + process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER = "1"; const token = `test-${randomUUID()}`; - process.env.CLAWDBOT_GATEWAY_TOKEN = token; + process.env.MOLTBOT_GATEWAY_TOKEN = token; const workspaceDir = path.join(tempHome, "clawd"); await fs.mkdir(workspaceDir, { recursive: true }); const nonceA = randomUUID(); const nonceB = randomUUID(); - const toolProbePath = path.join(workspaceDir, `.clawdbot-tool-probe.${nonceA}.txt`); + const toolProbePath = path.join(workspaceDir, `.moltbot-tool-probe.${nonceA}.txt`); await fs.writeFile(toolProbePath, `nonceA=${nonceA}\nnonceB=${nonceB}\n`); - const configDir = path.join(tempHome, ".clawdbot"); + const configDir = path.join(tempHome, ".moltbot"); await fs.mkdir(configDir, { recursive: true }); const configPath = path.join(configDir, "moltbot.json"); @@ -91,7 +91,7 @@ describe("gateway e2e", () => { }; await fs.writeFile(configPath, `${JSON.stringify(cfg, null, 2)}\n`); - process.env.CLAWDBOT_CONFIG_PATH = configPath; + process.env.MOLTBOT_CONFIG_PATH = configPath; const port = await getFreeGatewayPort(); const server = await startGatewayServer(port, { @@ -141,13 +141,13 @@ describe("gateway e2e", () => { await fs.rm(tempHome, { recursive: true, force: true }); restore(); process.env.HOME = prev.home; - process.env.CLAWDBOT_CONFIG_PATH = prev.configPath; - process.env.CLAWDBOT_GATEWAY_TOKEN = prev.token; - process.env.CLAWDBOT_SKIP_CHANNELS = prev.skipChannels; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; - process.env.CLAWDBOT_SKIP_CRON = prev.skipCron; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = prev.skipCanvas; - process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER = prev.skipBrowser; + process.env.MOLTBOT_CONFIG_PATH = prev.configPath; + process.env.MOLTBOT_GATEWAY_TOKEN = prev.token; + process.env.MOLTBOT_SKIP_CHANNELS = prev.skipChannels; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; + process.env.MOLTBOT_SKIP_CRON = prev.skipCron; + process.env.MOLTBOT_SKIP_CANVAS_HOST = prev.skipCanvas; + process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER = prev.skipBrowser; } }, ); @@ -155,27 +155,27 @@ describe("gateway e2e", () => { it("runs wizard over ws and writes auth token config", { timeout: 90_000 }, async () => { const prev = { home: process.env.HOME, - stateDir: process.env.CLAWDBOT_STATE_DIR, - configPath: process.env.CLAWDBOT_CONFIG_PATH, - token: process.env.CLAWDBOT_GATEWAY_TOKEN, - skipChannels: process.env.CLAWDBOT_SKIP_CHANNELS, - skipGmail: process.env.CLAWDBOT_SKIP_GMAIL_WATCHER, - skipCron: process.env.CLAWDBOT_SKIP_CRON, - skipCanvas: process.env.CLAWDBOT_SKIP_CANVAS_HOST, - skipBrowser: process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER, + stateDir: process.env.MOLTBOT_STATE_DIR, + configPath: process.env.MOLTBOT_CONFIG_PATH, + token: process.env.MOLTBOT_GATEWAY_TOKEN, + skipChannels: process.env.MOLTBOT_SKIP_CHANNELS, + skipGmail: process.env.MOLTBOT_SKIP_GMAIL_WATCHER, + skipCron: process.env.MOLTBOT_SKIP_CRON, + skipCanvas: process.env.MOLTBOT_SKIP_CANVAS_HOST, + skipBrowser: process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER, }; - process.env.CLAWDBOT_SKIP_CHANNELS = "1"; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = "1"; - process.env.CLAWDBOT_SKIP_CRON = "1"; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = "1"; - process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER = "1"; - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + process.env.MOLTBOT_SKIP_CHANNELS = "1"; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = "1"; + process.env.MOLTBOT_SKIP_CRON = "1"; + process.env.MOLTBOT_SKIP_CANVAS_HOST = "1"; + process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER = "1"; + delete process.env.MOLTBOT_GATEWAY_TOKEN; const tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-wizard-home-")); process.env.HOME = tempHome; - delete process.env.CLAWDBOT_STATE_DIR; - delete process.env.CLAWDBOT_CONFIG_PATH; + delete process.env.MOLTBOT_STATE_DIR; + delete process.env.MOLTBOT_CONFIG_PATH; const wizardToken = `wiz-${randomUUID()}`; const port = await getFreeGatewayPort(); @@ -263,14 +263,14 @@ describe("gateway e2e", () => { await server2.close({ reason: "wizard auth verify" }); await fs.rm(tempHome, { recursive: true, force: true }); process.env.HOME = prev.home; - process.env.CLAWDBOT_STATE_DIR = prev.stateDir; - process.env.CLAWDBOT_CONFIG_PATH = prev.configPath; - process.env.CLAWDBOT_GATEWAY_TOKEN = prev.token; - process.env.CLAWDBOT_SKIP_CHANNELS = prev.skipChannels; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; - process.env.CLAWDBOT_SKIP_CRON = prev.skipCron; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = prev.skipCanvas; - process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER = prev.skipBrowser; + process.env.MOLTBOT_STATE_DIR = prev.stateDir; + process.env.MOLTBOT_CONFIG_PATH = prev.configPath; + process.env.MOLTBOT_GATEWAY_TOKEN = prev.token; + process.env.MOLTBOT_SKIP_CHANNELS = prev.skipChannels; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; + process.env.MOLTBOT_SKIP_CRON = prev.skipCron; + process.env.MOLTBOT_SKIP_CANVAS_HOST = prev.skipCanvas; + process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER = prev.skipBrowser; } }); }); diff --git a/src/gateway/server-browser.ts b/src/gateway/server-browser.ts index f525348bb..8c9a8480d 100644 --- a/src/gateway/server-browser.ts +++ b/src/gateway/server-browser.ts @@ -5,10 +5,10 @@ export type BrowserControlServer = { }; export async function startBrowserControlServerIfEnabled(): Promise { - if (isTruthyEnvValue(process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER)) return null; + if (isTruthyEnvValue(process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER)) return null; // Lazy import: keeps startup fast, but still bundles for the embedded // gateway (bun --compile) via the static specifier path. - const override = process.env.CLAWDBOT_BROWSER_CONTROL_MODULE?.trim(); + const override = process.env.MOLTBOT_BROWSER_CONTROL_MODULE?.trim(); const mod = override ? await import(override) : await import("../browser/control-service.js"); const start = typeof (mod as { startBrowserControlServiceFromConfig?: unknown }) diff --git a/src/gateway/server-constants.ts b/src/gateway/server-constants.ts index 015164475..4ac0d42c0 100644 --- a/src/gateway/server-constants.ts +++ b/src/gateway/server-constants.ts @@ -18,8 +18,8 @@ export const __setMaxChatHistoryMessagesBytesForTest = (value?: number) => { }; export const DEFAULT_HANDSHAKE_TIMEOUT_MS = 10_000; export const getHandshakeTimeoutMs = () => { - if (process.env.VITEST && process.env.CLAWDBOT_TEST_HANDSHAKE_TIMEOUT_MS) { - const parsed = Number(process.env.CLAWDBOT_TEST_HANDSHAKE_TIMEOUT_MS); + if (process.env.VITEST && process.env.MOLTBOT_TEST_HANDSHAKE_TIMEOUT_MS) { + const parsed = Number(process.env.MOLTBOT_TEST_HANDSHAKE_TIMEOUT_MS); if (Number.isFinite(parsed) && parsed > 0) return parsed; } return DEFAULT_HANDSHAKE_TIMEOUT_MS; diff --git a/src/gateway/server-cron.ts b/src/gateway/server-cron.ts index 9a0c0ca98..0f6e5d1dc 100644 --- a/src/gateway/server-cron.ts +++ b/src/gateway/server-cron.ts @@ -26,7 +26,7 @@ export function buildGatewayCronService(params: { }): GatewayCronState { const cronLogger = getChildLogger({ module: "cron" }); const storePath = resolveCronStorePath(params.cfg.cron?.store); - const cronEnabled = process.env.CLAWDBOT_SKIP_CRON !== "1" && params.cfg.cron?.enabled !== false; + const cronEnabled = process.env.MOLTBOT_SKIP_CRON !== "1" && params.cfg.cron?.enabled !== false; const resolveCronAgent = (requested?: string | null) => { const runtimeConfig = loadConfig(); diff --git a/src/gateway/server-discovery-runtime.ts b/src/gateway/server-discovery-runtime.ts index 2dec5883e..0e310c047 100644 --- a/src/gateway/server-discovery-runtime.ts +++ b/src/gateway/server-discovery-runtime.ts @@ -23,7 +23,7 @@ export async function startGatewayDiscovery(params: { // mDNS can be disabled via config (mdnsMode: off) or env var. const bonjourEnabled = mdnsMode !== "off" && - process.env.CLAWDBOT_DISABLE_BONJOUR !== "1" && + process.env.MOLTBOT_DISABLE_BONJOUR !== "1" && process.env.NODE_ENV !== "test" && !process.env.VITEST; const mdnsMinimal = mdnsMode !== "full"; @@ -32,7 +32,7 @@ export async function startGatewayDiscovery(params: { const tailnetDns = needsTailnetDns ? await resolveTailnetDnsHint({ enabled: tailscaleEnabled }) : undefined; - const sshPortEnv = mdnsMinimal ? undefined : process.env.CLAWDBOT_SSH_PORT?.trim(); + const sshPortEnv = mdnsMinimal ? undefined : process.env.MOLTBOT_SSH_PORT?.trim(); const sshPortParsed = sshPortEnv ? Number.parseInt(sshPortEnv, 10) : NaN; const sshPort = Number.isFinite(sshPortParsed) && sshPortParsed > 0 ? sshPortParsed : undefined; const cliPath = mdnsMinimal ? undefined : resolveBonjourCliPath(); diff --git a/src/gateway/server-discovery.test.ts b/src/gateway/server-discovery.test.ts index 3b7a62b90..5682edefa 100644 --- a/src/gateway/server-discovery.test.ts +++ b/src/gateway/server-discovery.test.ts @@ -10,21 +10,21 @@ describe("resolveTailnetDnsHint", () => { const prevTailnetDns = { value: undefined as string | undefined }; beforeEach(() => { - prevTailnetDns.value = process.env.CLAWDBOT_TAILNET_DNS; - delete process.env.CLAWDBOT_TAILNET_DNS; + prevTailnetDns.value = process.env.MOLTBOT_TAILNET_DNS; + delete process.env.MOLTBOT_TAILNET_DNS; getTailnetHostname.mockReset(); }); afterEach(() => { if (prevTailnetDns.value === undefined) { - delete process.env.CLAWDBOT_TAILNET_DNS; + delete process.env.MOLTBOT_TAILNET_DNS; } else { - process.env.CLAWDBOT_TAILNET_DNS = prevTailnetDns.value; + process.env.MOLTBOT_TAILNET_DNS = prevTailnetDns.value; } }); test("returns env hint when disabled", async () => { - process.env.CLAWDBOT_TAILNET_DNS = "studio.tailnet.ts.net."; + process.env.MOLTBOT_TAILNET_DNS = "studio.tailnet.ts.net."; const value = await resolveTailnetDnsHint({ enabled: false }); expect(value).toBe("studio.tailnet.ts.net"); expect(getTailnetHostname).not.toHaveBeenCalled(); diff --git a/src/gateway/server-discovery.ts b/src/gateway/server-discovery.ts index 94fd3f2d3..50ba78f23 100644 --- a/src/gateway/server-discovery.ts +++ b/src/gateway/server-discovery.ts @@ -20,7 +20,7 @@ export function formatBonjourInstanceName(displayName: string) { export function resolveBonjourCliPath(opts: ResolveBonjourCliPathOptions = {}): string | undefined { const env = opts.env ?? process.env; - const envPath = env.CLAWDBOT_CLI_PATH?.trim(); + const envPath = env.MOLTBOT_CLI_PATH?.trim(); if (envPath) return envPath; const statSync = opts.statSync ?? fs.statSync; @@ -58,7 +58,7 @@ export async function resolveTailnetDnsHint(opts?: { enabled?: boolean; }): Promise { const env = opts?.env ?? process.env; - const envRaw = env.CLAWDBOT_TAILNET_DNS?.trim(); + const envRaw = env.MOLTBOT_TAILNET_DNS?.trim(); const envValue = envRaw && envRaw.length > 0 ? envRaw.replace(/\.$/, "") : ""; if (envValue) return envValue; if (opts?.enabled === false) return undefined; diff --git a/src/gateway/server-reload-handlers.ts b/src/gateway/server-reload-handlers.ts index 6cea5ac02..74f60a66c 100644 --- a/src/gateway/server-reload-handlers.ts +++ b/src/gateway/server-reload-handlers.ts @@ -87,7 +87,7 @@ export function createGatewayReloadHandlers(params: { if (plan.restartGmailWatcher) { await stopGmailWatcher().catch(() => {}); - if (!isTruthyEnvValue(process.env.CLAWDBOT_SKIP_GMAIL_WATCHER)) { + if (!isTruthyEnvValue(process.env.MOLTBOT_SKIP_GMAIL_WATCHER)) { try { const gmailResult = await startGmailWatcher(nextConfig); if (gmailResult.started) { @@ -103,17 +103,17 @@ export function createGatewayReloadHandlers(params: { params.logHooks.error(`gmail watcher failed to start: ${String(err)}`); } } else { - params.logHooks.info("skipping gmail watcher restart (CLAWDBOT_SKIP_GMAIL_WATCHER=1)"); + params.logHooks.info("skipping gmail watcher restart (MOLTBOT_SKIP_GMAIL_WATCHER=1)"); } } if (plan.restartChannels.size > 0) { if ( - isTruthyEnvValue(process.env.CLAWDBOT_SKIP_CHANNELS) || - isTruthyEnvValue(process.env.CLAWDBOT_SKIP_PROVIDERS) + isTruthyEnvValue(process.env.MOLTBOT_SKIP_CHANNELS) || + isTruthyEnvValue(process.env.MOLTBOT_SKIP_PROVIDERS) ) { params.logChannels.info( - "skipping channel reload (CLAWDBOT_SKIP_CHANNELS=1 or CLAWDBOT_SKIP_PROVIDERS=1)", + "skipping channel reload (MOLTBOT_SKIP_CHANNELS=1 or MOLTBOT_SKIP_PROVIDERS=1)", ); } else { const restartChannel = async (name: ChannelKind) => { diff --git a/src/gateway/server-runtime-config.ts b/src/gateway/server-runtime-config.ts index 2d699988a..751dbffa4 100644 --- a/src/gateway/server-runtime-config.ts +++ b/src/gateway/server-runtime-config.ts @@ -77,12 +77,12 @@ export async function resolveGatewayRuntimeConfig(params: { (authMode === "token" && hasToken) || (authMode === "password" && hasPassword); const hooksConfig = resolveHooksConfig(params.cfg); const canvasHostEnabled = - process.env.CLAWDBOT_SKIP_CANVAS_HOST !== "1" && params.cfg.canvasHost?.enabled !== false; + process.env.MOLTBOT_SKIP_CANVAS_HOST !== "1" && params.cfg.canvasHost?.enabled !== false; assertGatewayAuthConfigured(resolvedAuth); if (tailscaleMode === "funnel" && authMode !== "password") { throw new Error( - "tailscale funnel requires gateway auth mode=password (set gateway.auth.password or CLAWDBOT_GATEWAY_PASSWORD)", + "tailscale funnel requires gateway auth mode=password (set gateway.auth.password or MOLTBOT_GATEWAY_PASSWORD)", ); } if (tailscaleMode !== "off" && !isLoopbackHost(bindHost)) { @@ -90,7 +90,7 @@ export async function resolveGatewayRuntimeConfig(params: { } if (!isLoopbackHost(bindHost) && !hasSharedSecret) { throw new Error( - `refusing to bind gateway to ${bindHost}:${params.port} without auth (set gateway.auth.token/password, or set CLAWDBOT_GATEWAY_TOKEN/CLAWDBOT_GATEWAY_PASSWORD)`, + `refusing to bind gateway to ${bindHost}:${params.port} without auth (set gateway.auth.token/password, or set MOLTBOT_GATEWAY_TOKEN/MOLTBOT_GATEWAY_PASSWORD)`, ); } diff --git a/src/gateway/server-startup.ts b/src/gateway/server-startup.ts index e6bdbb0dc..857a5e5f6 100644 --- a/src/gateway/server-startup.ts +++ b/src/gateway/server-startup.ts @@ -47,7 +47,7 @@ export async function startGatewaySidecars(params: { } // Start Gmail watcher if configured (hooks.gmail.account). - if (!isTruthyEnvValue(process.env.CLAWDBOT_SKIP_GMAIL_WATCHER)) { + if (!isTruthyEnvValue(process.env.MOLTBOT_SKIP_GMAIL_WATCHER)) { try { const gmailResult = await startGmailWatcher(params.cfg); if (gmailResult.started) { @@ -112,10 +112,10 @@ export async function startGatewaySidecars(params: { } // Launch configured channels so gateway replies via the surface the message came from. - // Tests can opt out via CLAWDBOT_SKIP_CHANNELS (or legacy CLAWDBOT_SKIP_PROVIDERS). + // Tests can opt out via MOLTBOT_SKIP_CHANNELS (or legacy MOLTBOT_SKIP_PROVIDERS). const skipChannels = - isTruthyEnvValue(process.env.CLAWDBOT_SKIP_CHANNELS) || - isTruthyEnvValue(process.env.CLAWDBOT_SKIP_PROVIDERS); + isTruthyEnvValue(process.env.MOLTBOT_SKIP_CHANNELS) || + isTruthyEnvValue(process.env.MOLTBOT_SKIP_PROVIDERS); if (!skipChannels) { try { await params.startChannels(); @@ -124,7 +124,7 @@ export async function startGatewaySidecars(params: { } } else { params.logChannels.info( - "skipping channel start (CLAWDBOT_SKIP_CHANNELS=1 or CLAWDBOT_SKIP_PROVIDERS=1)", + "skipping channel start (MOLTBOT_SKIP_CHANNELS=1 or MOLTBOT_SKIP_PROVIDERS=1)", ); } diff --git a/src/gateway/server.auth.e2e.test.ts b/src/gateway/server.auth.e2e.test.ts index ee700ead6..9d3b7c8c6 100644 --- a/src/gateway/server.auth.e2e.test.ts +++ b/src/gateway/server.auth.e2e.test.ts @@ -49,8 +49,8 @@ describe("gateway server auth/connect", () => { test("closes silent handshakes after timeout", { timeout: 60_000 }, async () => { vi.useRealTimers(); - const prevHandshakeTimeout = process.env.CLAWDBOT_TEST_HANDSHAKE_TIMEOUT_MS; - process.env.CLAWDBOT_TEST_HANDSHAKE_TIMEOUT_MS = "50"; + const prevHandshakeTimeout = process.env.MOLTBOT_TEST_HANDSHAKE_TIMEOUT_MS; + process.env.MOLTBOT_TEST_HANDSHAKE_TIMEOUT_MS = "50"; try { const ws = await openWs(port); const handshakeTimeoutMs = getHandshakeTimeoutMs(); @@ -58,9 +58,9 @@ describe("gateway server auth/connect", () => { expect(closed).toBe(true); } finally { if (prevHandshakeTimeout === undefined) { - delete process.env.CLAWDBOT_TEST_HANDSHAKE_TIMEOUT_MS; + delete process.env.MOLTBOT_TEST_HANDSHAKE_TIMEOUT_MS; } else { - process.env.CLAWDBOT_TEST_HANDSHAKE_TIMEOUT_MS = prevHandshakeTimeout; + process.env.MOLTBOT_TEST_HANDSHAKE_TIMEOUT_MS = prevHandshakeTimeout; } } }); @@ -220,8 +220,8 @@ describe("gateway server auth/connect", () => { let prevToken: string | undefined; beforeAll(async () => { - prevToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - process.env.CLAWDBOT_GATEWAY_TOKEN = "secret"; + prevToken = process.env.MOLTBOT_GATEWAY_TOKEN; + process.env.MOLTBOT_GATEWAY_TOKEN = "secret"; port = await getFreePort(); server = await startGatewayServer(port); }); @@ -229,9 +229,9 @@ describe("gateway server auth/connect", () => { afterAll(async () => { await server.close(); if (prevToken === undefined) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; + process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; } }); @@ -294,9 +294,9 @@ describe("gateway server auth/connect", () => { ws.close(); await server.close(); if (prevToken === undefined) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; + process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; } }); @@ -309,8 +309,8 @@ describe("gateway server auth/connect", () => { trustedProxies: ["127.0.0.1"], }, } as any); - const prevToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - process.env.CLAWDBOT_GATEWAY_TOKEN = "secret"; + const prevToken = process.env.MOLTBOT_GATEWAY_TOKEN; + process.env.MOLTBOT_GATEWAY_TOKEN = "secret"; const port = await getFreePort(); const server = await startGatewayServer(port); const ws = new WebSocket(`ws://127.0.0.1:${port}`, { @@ -359,17 +359,17 @@ describe("gateway server auth/connect", () => { ws.close(); await server.close(); if (prevToken === undefined) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; + process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; } }); test("allows control ui with stale device identity when device auth is disabled", async () => { testState.gatewayControlUi = { dangerouslyDisableDeviceAuth: true }; testState.gatewayAuth = { mode: "token", token: "secret" }; - const prevToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - process.env.CLAWDBOT_GATEWAY_TOKEN = "secret"; + const prevToken = process.env.MOLTBOT_GATEWAY_TOKEN; + process.env.MOLTBOT_GATEWAY_TOKEN = "secret"; const port = await getFreePort(); const server = await startGatewayServer(port); const ws = await openWs(port); @@ -407,9 +407,9 @@ describe("gateway server auth/connect", () => { ws.close(); await server.close(); if (prevToken === undefined) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; + process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; } }); @@ -443,9 +443,9 @@ describe("gateway server auth/connect", () => { ws2.close(); await server.close(); if (prevToken === undefined) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; + process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; } }); @@ -522,9 +522,9 @@ describe("gateway server auth/connect", () => { ws2.close(); await server.close(); if (prevToken === undefined) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; + process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; } }); @@ -560,9 +560,9 @@ describe("gateway server auth/connect", () => { ws2.close(); await server.close(); if (prevToken === undefined) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; + process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; } }); diff --git a/src/gateway/server.config-apply.e2e.test.ts b/src/gateway/server.config-apply.e2e.test.ts index 9547c3664..606e16887 100644 --- a/src/gateway/server.config-apply.e2e.test.ts +++ b/src/gateway/server.config-apply.e2e.test.ts @@ -19,16 +19,16 @@ let port = 0; let previousToken: string | undefined; beforeAll(async () => { - previousToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + previousToken = process.env.MOLTBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; port = await getFreePort(); server = await startGatewayServer(port); }); afterAll(async () => { await server.close(); - if (previousToken === undefined) delete process.env.CLAWDBOT_GATEWAY_TOKEN; - else process.env.CLAWDBOT_GATEWAY_TOKEN = previousToken; + if (previousToken === undefined) delete process.env.MOLTBOT_GATEWAY_TOKEN; + else process.env.MOLTBOT_GATEWAY_TOKEN = previousToken; }); const openClient = async () => { @@ -62,7 +62,7 @@ describe("gateway config.apply", () => { expect(res.ok).toBe(true); // Verify sentinel file was created (restart was scheduled) - const sentinelPath = path.join(os.homedir(), ".clawdbot", "restart-sentinel.json"); + const sentinelPath = path.join(os.homedir(), ".moltbot", "restart-sentinel.json"); // Wait for file to be written await new Promise((resolve) => setTimeout(resolve, 100)); diff --git a/src/gateway/server.config-patch.e2e.test.ts b/src/gateway/server.config-patch.e2e.test.ts index 193bb4f06..e12049f3d 100644 --- a/src/gateway/server.config-patch.e2e.test.ts +++ b/src/gateway/server.config-patch.e2e.test.ts @@ -190,7 +190,7 @@ describe("gateway config.patch", () => { ); expect(patchRes.ok).toBe(true); - const sentinelPath = path.join(os.homedir(), ".clawdbot", "restart-sentinel.json"); + const sentinelPath = path.join(os.homedir(), ".moltbot", "restart-sentinel.json"); await new Promise((resolve) => setTimeout(resolve, 100)); try { diff --git a/src/gateway/server.cron.e2e.test.ts b/src/gateway/server.cron.e2e.test.ts index f63efdd94..25fd4838a 100644 --- a/src/gateway/server.cron.e2e.test.ts +++ b/src/gateway/server.cron.e2e.test.ts @@ -50,8 +50,8 @@ async function waitForNonEmptyFile(pathname: string, timeoutMs = 2000) { describe("gateway server cron", () => { test("handles cron CRUD, normalization, and patch semantics", { timeout: 120_000 }, async () => { - const prevSkipCron = process.env.CLAWDBOT_SKIP_CRON; - process.env.CLAWDBOT_SKIP_CRON = "0"; + const prevSkipCron = process.env.MOLTBOT_SKIP_CRON; + process.env.MOLTBOT_SKIP_CRON = "0"; const dir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-gw-cron-")); testState.cronStorePath = path.join(dir, "cron", "jobs.json"); testState.sessionConfig = { mainKey: "primary" }; @@ -256,16 +256,16 @@ describe("gateway server cron", () => { testState.sessionConfig = undefined; testState.cronEnabled = undefined; if (prevSkipCron === undefined) { - delete process.env.CLAWDBOT_SKIP_CRON; + delete process.env.MOLTBOT_SKIP_CRON; } else { - process.env.CLAWDBOT_SKIP_CRON = prevSkipCron; + process.env.MOLTBOT_SKIP_CRON = prevSkipCron; } } }); test("writes cron run history and auto-runs due jobs", async () => { - const prevSkipCron = process.env.CLAWDBOT_SKIP_CRON; - process.env.CLAWDBOT_SKIP_CRON = "0"; + const prevSkipCron = process.env.MOLTBOT_SKIP_CRON; + process.env.MOLTBOT_SKIP_CRON = "0"; const dir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-gw-cron-log-")); testState.cronStorePath = path.join(dir, "cron", "jobs.json"); testState.cronEnabled = undefined; @@ -353,9 +353,9 @@ describe("gateway server cron", () => { testState.cronStorePath = undefined; testState.cronEnabled = undefined; if (prevSkipCron === undefined) { - delete process.env.CLAWDBOT_SKIP_CRON; + delete process.env.MOLTBOT_SKIP_CRON; } else { - process.env.CLAWDBOT_SKIP_CRON = prevSkipCron; + process.env.MOLTBOT_SKIP_CRON = prevSkipCron; } } }, 45_000); diff --git a/src/gateway/server.health.e2e.test.ts b/src/gateway/server.health.e2e.test.ts index 29511372e..77f24f883 100644 --- a/src/gateway/server.health.e2e.test.ts +++ b/src/gateway/server.health.e2e.test.ts @@ -28,16 +28,16 @@ let port = 0; let previousToken: string | undefined; beforeAll(async () => { - previousToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + previousToken = process.env.MOLTBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; port = await getFreePort(); server = await startGatewayServer(port); }); afterAll(async () => { await server.close(); - if (previousToken === undefined) delete process.env.CLAWDBOT_GATEWAY_TOKEN; - else process.env.CLAWDBOT_GATEWAY_TOKEN = previousToken; + if (previousToken === undefined) delete process.env.MOLTBOT_GATEWAY_TOKEN; + else process.env.MOLTBOT_GATEWAY_TOKEN = previousToken; }); const openClient = async (opts?: Parameters[1]) => { diff --git a/src/gateway/server.impl.ts b/src/gateway/server.impl.ts index f641c4076..68e49f0fe 100644 --- a/src/gateway/server.impl.ts +++ b/src/gateway/server.impl.ts @@ -149,13 +149,13 @@ export async function startGatewayServer( opts: GatewayServerOptions = {}, ): Promise { // Ensure all default port derivations (browser/canvas) see the actual runtime port. - process.env.CLAWDBOT_GATEWAY_PORT = String(port); + process.env.MOLTBOT_GATEWAY_PORT = String(port); logAcceptedEnvOption({ - key: "CLAWDBOT_RAW_STREAM", + key: "MOLTBOT_RAW_STREAM", description: "raw stream logging enabled", }); logAcceptedEnvOption({ - key: "CLAWDBOT_RAW_STREAM_PATH", + key: "MOLTBOT_RAW_STREAM_PATH", description: "raw stream log path override", }); diff --git a/src/gateway/server.models-voicewake-misc.e2e.test.ts b/src/gateway/server.models-voicewake-misc.e2e.test.ts index 775013e04..ed5a50762 100644 --- a/src/gateway/server.models-voicewake-misc.e2e.test.ts +++ b/src/gateway/server.models-voicewake-misc.e2e.test.ts @@ -93,12 +93,12 @@ const emptyRegistry = createRegistry([]); describe("gateway server models + voicewake", () => { const setTempHome = (homeDir: string) => { const prevHome = process.env.HOME; - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const prevUserProfile = process.env.USERPROFILE; const prevHomeDrive = process.env.HOMEDRIVE; const prevHomePath = process.env.HOMEPATH; process.env.HOME = homeDir; - process.env.CLAWDBOT_STATE_DIR = path.join(homeDir, ".clawdbot"); + process.env.MOLTBOT_STATE_DIR = path.join(homeDir, ".moltbot"); process.env.USERPROFILE = homeDir; if (process.platform === "win32") { const parsed = path.parse(homeDir); @@ -112,9 +112,9 @@ describe("gateway server models + voicewake", () => { process.env.HOME = prevHome; } if (prevStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = prevStateDir; + process.env.MOLTBOT_STATE_DIR = prevStateDir; } if (prevUserProfile === undefined) { delete process.env.USERPROFILE; @@ -171,7 +171,7 @@ describe("gateway server models + voicewake", () => { expect(after.payload?.triggers).toEqual(["hi", "there"]); const onDisk = JSON.parse( - await fs.readFile(path.join(homeDir, ".clawdbot", "settings", "voicewake.json"), "utf8"), + await fs.readFile(path.join(homeDir, ".moltbot", "settings", "voicewake.json"), "utf8"), ) as { triggers?: unknown; updatedAtMs?: unknown }; expect(onDisk.triggers).toEqual(["hi", "there"]); expect(typeof onDisk.updatedAtMs).toBe("number"); @@ -315,14 +315,14 @@ describe("gateway server models + voicewake", () => { describe("gateway server misc", () => { test("hello-ok advertises the gateway port for canvas host", async () => { - const prevToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - const prevCanvasPort = process.env.CLAWDBOT_CANVAS_HOST_PORT; - process.env.CLAWDBOT_GATEWAY_TOKEN = "secret"; + const prevToken = process.env.MOLTBOT_GATEWAY_TOKEN; + const prevCanvasPort = process.env.MOLTBOT_CANVAS_HOST_PORT; + process.env.MOLTBOT_GATEWAY_TOKEN = "secret"; testTailnetIPv4.value = "100.64.0.1"; testState.gatewayBind = "lan"; const canvasPort = await getFreePort(); testState.canvasHostPort = canvasPort; - process.env.CLAWDBOT_CANVAS_HOST_PORT = String(canvasPort); + process.env.MOLTBOT_CANVAS_HOST_PORT = String(canvasPort); const testPort = await getFreePort(); const canvasHostUrl = resolveCanvasHostUrl({ @@ -332,14 +332,14 @@ describe("gateway server misc", () => { }); expect(canvasHostUrl).toBe(`http://100.64.0.1:${canvasPort}`); if (prevToken === undefined) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; + process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; } if (prevCanvasPort === undefined) { - delete process.env.CLAWDBOT_CANVAS_HOST_PORT; + delete process.env.MOLTBOT_CANVAS_HOST_PORT; } else { - process.env.CLAWDBOT_CANVAS_HOST_PORT = prevCanvasPort; + process.env.MOLTBOT_CANVAS_HOST_PORT = prevCanvasPort; } }); @@ -375,8 +375,8 @@ describe("gateway server misc", () => { }); test("auto-enables configured channel plugins on startup", async () => { - const configPath = process.env.CLAWDBOT_CONFIG_PATH; - if (!configPath) throw new Error("Missing CLAWDBOT_CONFIG_PATH"); + const configPath = process.env.MOLTBOT_CONFIG_PATH; + if (!configPath) throw new Error("Missing MOLTBOT_CONFIG_PATH"); await fs.mkdir(path.dirname(configPath), { recursive: true }); await fs.writeFile( configPath, diff --git a/src/gateway/server.reload.e2e.test.ts b/src/gateway/server.reload.e2e.test.ts index b9fc76d98..338db539c 100644 --- a/src/gateway/server.reload.e2e.test.ts +++ b/src/gateway/server.reload.e2e.test.ts @@ -172,22 +172,22 @@ describe("gateway hot reload", () => { let prevSkipGmail: string | undefined; beforeEach(() => { - prevSkipChannels = process.env.CLAWDBOT_SKIP_CHANNELS; - prevSkipGmail = process.env.CLAWDBOT_SKIP_GMAIL_WATCHER; - process.env.CLAWDBOT_SKIP_CHANNELS = "0"; - delete process.env.CLAWDBOT_SKIP_GMAIL_WATCHER; + prevSkipChannels = process.env.MOLTBOT_SKIP_CHANNELS; + prevSkipGmail = process.env.MOLTBOT_SKIP_GMAIL_WATCHER; + process.env.MOLTBOT_SKIP_CHANNELS = "0"; + delete process.env.MOLTBOT_SKIP_GMAIL_WATCHER; }); afterEach(() => { if (prevSkipChannels === undefined) { - delete process.env.CLAWDBOT_SKIP_CHANNELS; + delete process.env.MOLTBOT_SKIP_CHANNELS; } else { - process.env.CLAWDBOT_SKIP_CHANNELS = prevSkipChannels; + process.env.MOLTBOT_SKIP_CHANNELS = prevSkipChannels; } if (prevSkipGmail === undefined) { - delete process.env.CLAWDBOT_SKIP_GMAIL_WATCHER; + delete process.env.MOLTBOT_SKIP_GMAIL_WATCHER; } else { - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = prevSkipGmail; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = prevSkipGmail; } }); diff --git a/src/gateway/server.roles-allowlist-update.e2e.test.ts b/src/gateway/server.roles-allowlist-update.e2e.test.ts index 275970c44..15ef1e446 100644 --- a/src/gateway/server.roles-allowlist-update.e2e.test.ts +++ b/src/gateway/server.roles-allowlist-update.e2e.test.ts @@ -176,7 +176,7 @@ describe("gateway update.run", () => { await waitForSignal(() => sigusr1.mock.calls.length > 0); expect(sigusr1).toHaveBeenCalled(); - const sentinelPath = path.join(os.homedir(), ".clawdbot", "restart-sentinel.json"); + const sentinelPath = path.join(os.homedir(), ".moltbot", "restart-sentinel.json"); const raw = await fs.readFile(sentinelPath, "utf-8"); const parsed = JSON.parse(raw) as { payload?: { kind?: string; stats?: { mode?: string } }; diff --git a/src/gateway/server.sessions-send.e2e.test.ts b/src/gateway/server.sessions-send.e2e.test.ts index 2829c531e..4e278b87f 100644 --- a/src/gateway/server.sessions-send.e2e.test.ts +++ b/src/gateway/server.sessions-send.e2e.test.ts @@ -19,25 +19,25 @@ let prevGatewayPort: string | undefined; let prevGatewayToken: string | undefined; beforeAll(async () => { - prevGatewayPort = process.env.CLAWDBOT_GATEWAY_PORT; - prevGatewayToken = process.env.CLAWDBOT_GATEWAY_TOKEN; + prevGatewayPort = process.env.MOLTBOT_GATEWAY_PORT; + prevGatewayToken = process.env.MOLTBOT_GATEWAY_TOKEN; gatewayPort = await getFreePort(); - process.env.CLAWDBOT_GATEWAY_PORT = String(gatewayPort); - process.env.CLAWDBOT_GATEWAY_TOKEN = "test-token"; + process.env.MOLTBOT_GATEWAY_PORT = String(gatewayPort); + process.env.MOLTBOT_GATEWAY_TOKEN = "test-token"; server = await startGatewayServer(gatewayPort); }); afterAll(async () => { await server.close(); if (prevGatewayPort === undefined) { - delete process.env.CLAWDBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; } else { - process.env.CLAWDBOT_GATEWAY_PORT = prevGatewayPort; + process.env.MOLTBOT_GATEWAY_PORT = prevGatewayPort; } if (prevGatewayToken === undefined) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = prevGatewayToken; + process.env.MOLTBOT_GATEWAY_TOKEN = prevGatewayToken; } }); diff --git a/src/gateway/server.sessions.gateway-server-sessions-a.e2e.test.ts b/src/gateway/server.sessions.gateway-server-sessions-a.e2e.test.ts index 5099081c1..e83b12f8e 100644 --- a/src/gateway/server.sessions.gateway-server-sessions-a.e2e.test.ts +++ b/src/gateway/server.sessions.gateway-server-sessions-a.e2e.test.ts @@ -48,16 +48,16 @@ let port = 0; let previousToken: string | undefined; beforeAll(async () => { - previousToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + previousToken = process.env.MOLTBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; port = await getFreePort(); server = await startGatewayServer(port); }); afterAll(async () => { await server.close(); - if (previousToken === undefined) delete process.env.CLAWDBOT_GATEWAY_TOKEN; - else process.env.CLAWDBOT_GATEWAY_TOKEN = previousToken; + if (previousToken === undefined) delete process.env.MOLTBOT_GATEWAY_TOKEN; + else process.env.MOLTBOT_GATEWAY_TOKEN = previousToken; }); const openClient = async (opts?: Parameters[1]) => { diff --git a/src/gateway/server/ws-connection/message-handler.ts b/src/gateway/server/ws-connection/message-handler.ts index d1f6ae511..66e47fafd 100644 --- a/src/gateway/server/ws-connection/message-handler.ts +++ b/src/gateway/server/ws-connection/message-handler.ts @@ -789,7 +789,7 @@ export function attachGatewayWsMessageHandler(params: { type: "hello-ok", protocol: PROTOCOL_VERSION, server: { - version: process.env.CLAWDBOT_VERSION ?? process.env.npm_package_version ?? "dev", + version: process.env.MOLTBOT_VERSION ?? process.env.npm_package_version ?? "dev", commit: process.env.GIT_COMMIT, host: os.hostname(), connId, diff --git a/src/gateway/session-utils.fs.ts b/src/gateway/session-utils.fs.ts index d6453ace6..83288c840 100644 --- a/src/gateway/session-utils.fs.ts +++ b/src/gateway/session-utils.fs.ts @@ -47,7 +47,7 @@ export function resolveSessionTranscriptCandidates( if (agentId) { candidates.push(resolveSessionTranscriptPath(sessionId, agentId)); } - candidates.push(path.join(os.homedir(), ".clawdbot", "sessions", `${sessionId}.jsonl`)); + candidates.push(path.join(os.homedir(), ".moltbot", "sessions", `${sessionId}.jsonl`)); return candidates; } diff --git a/src/gateway/test-helpers.mocks.ts b/src/gateway/test-helpers.mocks.ts index 298e52618..c8d4fe9be 100644 --- a/src/gateway/test-helpers.mocks.ts +++ b/src/gateway/test-helpers.mocks.ts @@ -193,7 +193,7 @@ const testConfigRoot = { export const setTestConfigRoot = (root: string) => { testConfigRoot.value = root; - process.env.CLAWDBOT_CONFIG_PATH = path.join(root, "moltbot.json"); + process.env.MOLTBOT_CONFIG_PATH = path.join(root, "moltbot.json"); }; export const testTailnetIPv4 = hoisted.testTailnetIPv4; @@ -560,5 +560,5 @@ vi.mock("../cli/deps.js", async () => { }; }); -process.env.CLAWDBOT_SKIP_CHANNELS = "1"; -process.env.CLAWDBOT_SKIP_CRON = "1"; +process.env.MOLTBOT_SKIP_CHANNELS = "1"; +process.env.MOLTBOT_SKIP_CRON = "1"; diff --git a/src/gateway/test-helpers.server.ts b/src/gateway/test-helpers.server.ts index 154116813..231b68bae 100644 --- a/src/gateway/test-helpers.server.ts +++ b/src/gateway/test-helpers.server.ts @@ -78,22 +78,22 @@ export async function writeSessionStore(params: { async function setupGatewayTestHome() { previousHome = process.env.HOME; previousUserProfile = process.env.USERPROFILE; - previousStateDir = process.env.CLAWDBOT_STATE_DIR; - previousConfigPath = process.env.CLAWDBOT_CONFIG_PATH; - previousSkipBrowserControl = process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER; - previousSkipGmailWatcher = process.env.CLAWDBOT_SKIP_GMAIL_WATCHER; - previousSkipCanvasHost = process.env.CLAWDBOT_SKIP_CANVAS_HOST; + previousStateDir = process.env.MOLTBOT_STATE_DIR; + previousConfigPath = process.env.MOLTBOT_CONFIG_PATH; + previousSkipBrowserControl = process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER; + previousSkipGmailWatcher = process.env.MOLTBOT_SKIP_GMAIL_WATCHER; + previousSkipCanvasHost = process.env.MOLTBOT_SKIP_CANVAS_HOST; tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-gateway-home-")); process.env.HOME = tempHome; process.env.USERPROFILE = tempHome; - process.env.CLAWDBOT_STATE_DIR = path.join(tempHome, ".clawdbot"); - delete process.env.CLAWDBOT_CONFIG_PATH; + process.env.MOLTBOT_STATE_DIR = path.join(tempHome, ".moltbot"); + delete process.env.MOLTBOT_CONFIG_PATH; } function applyGatewaySkipEnv() { - process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER = "1"; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = "1"; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = "1"; + process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER = "1"; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = "1"; + process.env.MOLTBOT_SKIP_CANVAS_HOST = "1"; } async function resetGatewayTestState(options: { uniqueConfigRoot: boolean }) { @@ -106,7 +106,7 @@ async function resetGatewayTestState(options: { uniqueConfigRoot: boolean }) { applyGatewaySkipEnv(); tempConfigRoot = options.uniqueConfigRoot ? await fs.mkdtemp(path.join(tempHome, "moltbot-test-")) - : path.join(tempHome, ".clawdbot-test"); + : path.join(tempHome, ".moltbot-test"); setTestConfigRoot(tempConfigRoot); sessionStoreSaveDelayMs.value = 0; testTailnetIPv4.value = undefined; @@ -152,17 +152,17 @@ async function cleanupGatewayTestHome(options: { restoreEnv: boolean }) { else process.env.HOME = previousHome; if (previousUserProfile === undefined) delete process.env.USERPROFILE; else process.env.USERPROFILE = previousUserProfile; - if (previousStateDir === undefined) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = previousStateDir; - if (previousConfigPath === undefined) delete process.env.CLAWDBOT_CONFIG_PATH; - else process.env.CLAWDBOT_CONFIG_PATH = previousConfigPath; + if (previousStateDir === undefined) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = previousStateDir; + if (previousConfigPath === undefined) delete process.env.MOLTBOT_CONFIG_PATH; + else process.env.MOLTBOT_CONFIG_PATH = previousConfigPath; if (previousSkipBrowserControl === undefined) - delete process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER; - else process.env.CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER = previousSkipBrowserControl; - if (previousSkipGmailWatcher === undefined) delete process.env.CLAWDBOT_SKIP_GMAIL_WATCHER; - else process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = previousSkipGmailWatcher; - if (previousSkipCanvasHost === undefined) delete process.env.CLAWDBOT_SKIP_CANVAS_HOST; - else process.env.CLAWDBOT_SKIP_CANVAS_HOST = previousSkipCanvasHost; + delete process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER; + else process.env.MOLTBOT_SKIP_BROWSER_CONTROL_SERVER = previousSkipBrowserControl; + if (previousSkipGmailWatcher === undefined) delete process.env.MOLTBOT_SKIP_GMAIL_WATCHER; + else process.env.MOLTBOT_SKIP_GMAIL_WATCHER = previousSkipGmailWatcher; + if (previousSkipCanvasHost === undefined) delete process.env.MOLTBOT_SKIP_CANVAS_HOST; + else process.env.MOLTBOT_SKIP_CANVAS_HOST = previousSkipCanvasHost; } if (options.restoreEnv && tempHome) { await fs.rm(tempHome, { @@ -259,7 +259,7 @@ export async function startGatewayServer(port: number, opts?: GatewayServerOptio export async function startServerWithClient(token?: string, opts?: GatewayServerOptions) { let port = await getFreePort(); - const prev = process.env.CLAWDBOT_GATEWAY_TOKEN; + const prev = process.env.MOLTBOT_GATEWAY_TOKEN; if (typeof token === "string") { testState.gatewayAuth = { mode: "token", token }; } @@ -269,9 +269,9 @@ export async function startServerWithClient(token?: string, opts?: GatewayServer ? (testState.gatewayAuth as { token?: string }).token : undefined); if (fallbackToken === undefined) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = fallbackToken; + process.env.MOLTBOT_GATEWAY_TOKEN = fallbackToken; } let server: Awaited> | null = null; @@ -348,13 +348,13 @@ export async function connectReq( ? undefined : typeof (testState.gatewayAuth as { token?: unknown } | undefined)?.token === "string" ? ((testState.gatewayAuth as { token?: string }).token ?? undefined) - : process.env.CLAWDBOT_GATEWAY_TOKEN; + : process.env.MOLTBOT_GATEWAY_TOKEN; const defaultPassword = opts?.skipDefaultAuth === true ? undefined : typeof (testState.gatewayAuth as { password?: unknown } | undefined)?.password === "string" ? ((testState.gatewayAuth as { password?: string }).password ?? undefined) - : process.env.CLAWDBOT_GATEWAY_PASSWORD; + : process.env.MOLTBOT_GATEWAY_PASSWORD; const token = opts?.token ?? defaultToken; const password = opts?.password ?? defaultPassword; const requestedScopes = Array.isArray(opts?.scopes) ? opts?.scopes : []; diff --git a/src/gateway/tools-invoke-http.test.ts b/src/gateway/tools-invoke-http.test.ts index 93a295fc8..c861fa65f 100644 --- a/src/gateway/tools-invoke-http.test.ts +++ b/src/gateway/tools-invoke-http.test.ts @@ -13,8 +13,8 @@ installGatewayTestHooks({ scope: "suite" }); beforeEach(() => { // Ensure these tests are not affected by host env vars. - delete process.env.CLAWDBOT_GATEWAY_TOKEN; - delete process.env.CLAWDBOT_GATEWAY_PASSWORD; + delete process.env.MOLTBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_PASSWORD; }); const resolveGatewayToken = (): string => { diff --git a/src/hooks/bundled-dir.ts b/src/hooks/bundled-dir.ts index 6ced545e3..ab7a1c125 100644 --- a/src/hooks/bundled-dir.ts +++ b/src/hooks/bundled-dir.ts @@ -3,7 +3,7 @@ import path from "node:path"; import { fileURLToPath } from "node:url"; export function resolveBundledHooksDir(): string | undefined { - const override = process.env.CLAWDBOT_BUNDLED_HOOKS_DIR?.trim(); + const override = process.env.MOLTBOT_BUNDLED_HOOKS_DIR?.trim(); if (override) return override; // bun --compile: ship a sibling `hooks/bundled/` next to the executable. diff --git a/src/hooks/bundled/command-logger/handler.ts b/src/hooks/bundled/command-logger/handler.ts index c89bfc0d1..1f9c5232a 100644 --- a/src/hooks/bundled/command-logger/handler.ts +++ b/src/hooks/bundled/command-logger/handler.ts @@ -39,7 +39,7 @@ const logCommand: HookHandler = async (event) => { try { // Create log directory - const logDir = path.join(os.homedir(), ".clawdbot", "logs"); + const logDir = path.join(os.homedir(), ".moltbot", "logs"); await fs.mkdir(logDir, { recursive: true }); // Append to command log file diff --git a/src/hooks/gmail-watcher.ts b/src/hooks/gmail-watcher.ts index bf1b08b35..6f8f470a4 100644 --- a/src/hooks/gmail-watcher.ts +++ b/src/hooks/gmail-watcher.ts @@ -96,7 +96,7 @@ function spawnGogServe(cfg: GmailHookRuntimeConfig): ChildProcess { if (addressInUse) { log.warn( "gog serve failed to bind (address already in use); stopping restarts. " + - "Another watcher is likely running. Set CLAWDBOT_SKIP_GMAIL_WATCHER=1 or stop the other process.", + "Another watcher is likely running. Set MOLTBOT_SKIP_GMAIL_WATCHER=1 or stop the other process.", ); watcherProcess = null; return; diff --git a/src/hooks/hooks-install.e2e.test.ts b/src/hooks/hooks-install.e2e.test.ts index 165f786cb..e2fdeb7ea 100644 --- a/src/hooks/hooks-install.e2e.test.ts +++ b/src/hooks/hooks-install.e2e.test.ts @@ -21,24 +21,24 @@ describe("hooks install (e2e)", () => { workspaceDir = path.join(baseDir, "workspace"); await fs.mkdir(workspaceDir, { recursive: true }); - prevStateDir = process.env.CLAWDBOT_STATE_DIR; - prevBundledDir = process.env.CLAWDBOT_BUNDLED_HOOKS_DIR; - process.env.CLAWDBOT_STATE_DIR = path.join(baseDir, "state"); - process.env.CLAWDBOT_BUNDLED_HOOKS_DIR = path.join(baseDir, "bundled-none"); + prevStateDir = process.env.MOLTBOT_STATE_DIR; + prevBundledDir = process.env.MOLTBOT_BUNDLED_HOOKS_DIR; + process.env.MOLTBOT_STATE_DIR = path.join(baseDir, "state"); + process.env.MOLTBOT_BUNDLED_HOOKS_DIR = path.join(baseDir, "bundled-none"); vi.resetModules(); }); afterEach(async () => { if (prevStateDir === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = prevStateDir; + process.env.MOLTBOT_STATE_DIR = prevStateDir; } if (prevBundledDir === undefined) { - delete process.env.CLAWDBOT_BUNDLED_HOOKS_DIR; + delete process.env.MOLTBOT_BUNDLED_HOOKS_DIR; } else { - process.env.CLAWDBOT_BUNDLED_HOOKS_DIR = prevBundledDir; + process.env.MOLTBOT_BUNDLED_HOOKS_DIR = prevBundledDir; } vi.resetModules(); diff --git a/src/hooks/loader.test.ts b/src/hooks/loader.test.ts index a812c2dc2..351077f7e 100644 --- a/src/hooks/loader.test.ts +++ b/src/hooks/loader.test.ts @@ -22,17 +22,17 @@ describe("loader", () => { await fs.mkdir(tmpDir, { recursive: true }); // Disable bundled hooks during tests by setting env var to non-existent directory - originalBundledDir = process.env.CLAWDBOT_BUNDLED_HOOKS_DIR; - process.env.CLAWDBOT_BUNDLED_HOOKS_DIR = "/nonexistent/bundled/hooks"; + originalBundledDir = process.env.MOLTBOT_BUNDLED_HOOKS_DIR; + process.env.MOLTBOT_BUNDLED_HOOKS_DIR = "/nonexistent/bundled/hooks"; }); afterEach(async () => { clearInternalHooks(); // Restore original env var if (originalBundledDir === undefined) { - delete process.env.CLAWDBOT_BUNDLED_HOOKS_DIR; + delete process.env.MOLTBOT_BUNDLED_HOOKS_DIR; } else { - process.env.CLAWDBOT_BUNDLED_HOOKS_DIR = originalBundledDir; + process.env.MOLTBOT_BUNDLED_HOOKS_DIR = originalBundledDir; } // Clean up temp directory try { diff --git a/src/infra/bonjour.ts b/src/infra/bonjour.ts index cc0d50c0e..874fbdeba 100644 --- a/src/infra/bonjour.ts +++ b/src/infra/bonjour.ts @@ -28,7 +28,7 @@ export type GatewayBonjourAdvertiseOpts = { }; function isDisabledByEnv() { - if (isTruthyEnvValue(process.env.CLAWDBOT_DISABLE_BONJOUR)) return true; + if (isTruthyEnvValue(process.env.MOLTBOT_DISABLE_BONJOUR)) return true; if (process.env.NODE_ENV === "test") return true; if (process.env.VITEST) return true; return false; diff --git a/src/infra/device-identity.ts b/src/infra/device-identity.ts index c5381785c..052344154 100644 --- a/src/infra/device-identity.ts +++ b/src/infra/device-identity.ts @@ -17,7 +17,7 @@ type StoredIdentity = { createdAtMs: number; }; -const DEFAULT_DIR = path.join(os.homedir(), ".clawdbot", "identity"); +const DEFAULT_DIR = path.join(os.homedir(), ".moltbot", "identity"); const DEFAULT_FILE = path.join(DEFAULT_DIR, "device.json"); function ensureDir(filePath: string) { diff --git a/src/infra/diagnostic-flags.test.ts b/src/infra/diagnostic-flags.test.ts index bdff0e567..82a818cc6 100644 --- a/src/infra/diagnostic-flags.test.ts +++ b/src/infra/diagnostic-flags.test.ts @@ -9,7 +9,7 @@ describe("diagnostic flags", () => { diagnostics: { flags: ["telegram.http", "cache.*"] }, } as MoltbotConfig; const env = { - CLAWDBOT_DIAGNOSTICS: "foo,bar", + MOLTBOT_DIAGNOSTICS: "foo,bar", } as NodeJS.ProcessEnv; const flags = resolveDiagnosticFlags(cfg, env); @@ -20,12 +20,12 @@ describe("diagnostic flags", () => { }); it("treats env true as wildcard", () => { - const env = { CLAWDBOT_DIAGNOSTICS: "1" } as NodeJS.ProcessEnv; + const env = { MOLTBOT_DIAGNOSTICS: "1" } as NodeJS.ProcessEnv; expect(isDiagnosticFlagEnabled("anything.here", undefined, env)).toBe(true); }); it("treats env false as disabled", () => { - const env = { CLAWDBOT_DIAGNOSTICS: "0" } as NodeJS.ProcessEnv; + const env = { MOLTBOT_DIAGNOSTICS: "0" } as NodeJS.ProcessEnv; expect(isDiagnosticFlagEnabled("telegram.http", undefined, env)).toBe(false); }); }); diff --git a/src/infra/diagnostic-flags.ts b/src/infra/diagnostic-flags.ts index 8ffd71b76..1056a388f 100644 --- a/src/infra/diagnostic-flags.ts +++ b/src/infra/diagnostic-flags.ts @@ -1,6 +1,6 @@ import type { MoltbotConfig } from "../config/config.js"; -const DIAGNOSTICS_ENV = "CLAWDBOT_DIAGNOSTICS"; +const DIAGNOSTICS_ENV = "MOLTBOT_DIAGNOSTICS"; function normalizeFlag(value: string): string { return value.trim().toLowerCase(); diff --git a/src/infra/dotenv.test.ts b/src/infra/dotenv.test.ts index 5aa753881..099ecfebf 100644 --- a/src/infra/dotenv.test.ts +++ b/src/infra/dotenv.test.ts @@ -12,7 +12,7 @@ async function writeEnvFile(filePath: string, contents: string) { } describe("loadDotEnv", () => { - it("loads ~/.clawdbot/.env as fallback without overriding CWD .env", async () => { + it("loads ~/.moltbot/.env as fallback without overriding CWD .env", async () => { const prevEnv = { ...process.env }; const prevCwd = process.cwd(); @@ -20,7 +20,7 @@ describe("loadDotEnv", () => { const cwdDir = path.join(base, "cwd"); const stateDir = path.join(base, "state"); - process.env.CLAWDBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_STATE_DIR = stateDir; await writeEnvFile(path.join(stateDir, ".env"), "FOO=from-global\nBAR=1\n"); await writeEnvFile(path.join(cwdDir, ".env"), "FOO=from-cwd\n"); @@ -52,7 +52,7 @@ describe("loadDotEnv", () => { const cwdDir = path.join(base, "cwd"); const stateDir = path.join(base, "state"); - process.env.CLAWDBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_STATE_DIR = stateDir; process.env.FOO = "from-shell"; await writeEnvFile(path.join(stateDir, ".env"), "FOO=from-global\n"); diff --git a/src/infra/dotenv.ts b/src/infra/dotenv.ts index 6a0669dec..e6a01e4f4 100644 --- a/src/infra/dotenv.ts +++ b/src/infra/dotenv.ts @@ -11,7 +11,7 @@ export function loadDotEnv(opts?: { quiet?: boolean }) { // Load from process CWD first (dotenv default). dotenv.config({ quiet }); - // Then load global fallback: ~/.clawdbot/.env (or CLAWDBOT_STATE_DIR/.env), + // Then load global fallback: ~/.moltbot/.env (or MOLTBOT_STATE_DIR/.env), // without overriding any env vars already present. const globalEnvPath = path.join(resolveConfigDir(process.env), ".env"); if (!fs.existsSync(globalEnvPath)) return; diff --git a/src/infra/exec-approvals.test.ts b/src/infra/exec-approvals.test.ts index d63be8c75..486e844e3 100644 --- a/src/infra/exec-approvals.test.ts +++ b/src/infra/exec-approvals.test.ts @@ -381,7 +381,7 @@ describe("exec approvals wildcard agent", () => { const homedirSpy = vi.spyOn(os, "homedir").mockReturnValue(dir); try { - const approvalsPath = path.join(dir, ".clawdbot", "exec-approvals.json"); + const approvalsPath = path.join(dir, ".moltbot", "exec-approvals.json"); fs.mkdirSync(path.dirname(approvalsPath), { recursive: true }); fs.writeFileSync( approvalsPath, diff --git a/src/infra/exec-approvals.ts b/src/infra/exec-approvals.ts index 0830ed89a..50819ef7d 100644 --- a/src/infra/exec-approvals.ts +++ b/src/infra/exec-approvals.ts @@ -61,8 +61,8 @@ const DEFAULT_SECURITY: ExecSecurity = "deny"; const DEFAULT_ASK: ExecAsk = "on-miss"; const DEFAULT_ASK_FALLBACK: ExecSecurity = "deny"; const DEFAULT_AUTO_ALLOW_SKILLS = false; -const DEFAULT_SOCKET = "~/.clawdbot/exec-approvals.sock"; -const DEFAULT_FILE = "~/.clawdbot/exec-approvals.json"; +const DEFAULT_SOCKET = "~/.moltbot/exec-approvals.sock"; +const DEFAULT_FILE = "~/.moltbot/exec-approvals.json"; export const DEFAULT_SAFE_BINS = ["jq", "grep", "cut", "sort", "uniq", "head", "tail", "tr", "wc"]; function hashExecApprovalsRaw(raw: string | null): string { diff --git a/src/infra/gateway-lock.test.ts b/src/infra/gateway-lock.test.ts index 54c1db6b9..e38307ce7 100644 --- a/src/infra/gateway-lock.test.ts +++ b/src/infra/gateway-lock.test.ts @@ -17,8 +17,8 @@ async function makeEnv() { return { env: { ...process.env, - CLAWDBOT_STATE_DIR: dir, - CLAWDBOT_CONFIG_PATH: configPath, + MOLTBOT_STATE_DIR: dir, + MOLTBOT_CONFIG_PATH: configPath, }, cleanup: async () => { await fs.rm(dir, { recursive: true, force: true }); diff --git a/src/infra/gateway-lock.ts b/src/infra/gateway-lock.ts index aa65e7d81..f64af6ff6 100644 --- a/src/infra/gateway-lock.ts +++ b/src/infra/gateway-lock.ts @@ -162,7 +162,7 @@ export async function acquireGatewayLock( const env = opts.env ?? process.env; const allowInTests = opts.allowInTests === true; if ( - env.CLAWDBOT_ALLOW_MULTI_GATEWAY === "1" || + env.MOLTBOT_ALLOW_MULTI_GATEWAY === "1" || (!allowInTests && (env.VITEST || env.NODE_ENV === "test")) ) { return null; diff --git a/src/infra/path-env.test.ts b/src/infra/path-env.test.ts index 9c54ff6d5..fb4dd9f8c 100644 --- a/src/infra/path-env.test.ts +++ b/src/infra/path-env.test.ts @@ -17,9 +17,9 @@ describe("ensureMoltbotCliOnPath", () => { await fs.chmod(cliPath, 0o755); const originalPath = process.env.PATH; - const originalFlag = process.env.CLAWDBOT_PATH_BOOTSTRAPPED; + const originalFlag = process.env.MOLTBOT_PATH_BOOTSTRAPPED; process.env.PATH = "/usr/bin"; - delete process.env.CLAWDBOT_PATH_BOOTSTRAPPED; + delete process.env.MOLTBOT_PATH_BOOTSTRAPPED; try { ensureMoltbotCliOnPath({ execPath: cliPath, @@ -31,8 +31,8 @@ describe("ensureMoltbotCliOnPath", () => { expect(updated.split(path.delimiter)[0]).toBe(appBinDir); } finally { process.env.PATH = originalPath; - if (originalFlag === undefined) delete process.env.CLAWDBOT_PATH_BOOTSTRAPPED; - else process.env.CLAWDBOT_PATH_BOOTSTRAPPED = originalFlag; + if (originalFlag === undefined) delete process.env.MOLTBOT_PATH_BOOTSTRAPPED; + else process.env.MOLTBOT_PATH_BOOTSTRAPPED = originalFlag; } } finally { await fs.rm(tmp, { recursive: true, force: true }); @@ -41,9 +41,9 @@ describe("ensureMoltbotCliOnPath", () => { it("is idempotent", () => { const originalPath = process.env.PATH; - const originalFlag = process.env.CLAWDBOT_PATH_BOOTSTRAPPED; + const originalFlag = process.env.MOLTBOT_PATH_BOOTSTRAPPED; process.env.PATH = "/bin"; - process.env.CLAWDBOT_PATH_BOOTSTRAPPED = "1"; + process.env.MOLTBOT_PATH_BOOTSTRAPPED = "1"; try { ensureMoltbotCliOnPath({ execPath: "/tmp/does-not-matter", @@ -54,15 +54,15 @@ describe("ensureMoltbotCliOnPath", () => { expect(process.env.PATH).toBe("/bin"); } finally { process.env.PATH = originalPath; - if (originalFlag === undefined) delete process.env.CLAWDBOT_PATH_BOOTSTRAPPED; - else process.env.CLAWDBOT_PATH_BOOTSTRAPPED = originalFlag; + if (originalFlag === undefined) delete process.env.MOLTBOT_PATH_BOOTSTRAPPED; + else process.env.MOLTBOT_PATH_BOOTSTRAPPED = originalFlag; } }); it("prepends mise shims when available", async () => { const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-path-")); const originalPath = process.env.PATH; - const originalFlag = process.env.CLAWDBOT_PATH_BOOTSTRAPPED; + const originalFlag = process.env.MOLTBOT_PATH_BOOTSTRAPPED; const originalMiseDataDir = process.env.MISE_DATA_DIR; try { const appBinDir = path.join(tmp, "AppBin"); @@ -82,7 +82,7 @@ describe("ensureMoltbotCliOnPath", () => { await fs.mkdir(shimsDir, { recursive: true }); process.env.MISE_DATA_DIR = miseDataDir; process.env.PATH = "/usr/bin"; - delete process.env.CLAWDBOT_PATH_BOOTSTRAPPED; + delete process.env.MOLTBOT_PATH_BOOTSTRAPPED; ensureMoltbotCliOnPath({ execPath: appCli, @@ -101,8 +101,8 @@ describe("ensureMoltbotCliOnPath", () => { expect(shimsIndex).toBeGreaterThan(localIndex); } finally { process.env.PATH = originalPath; - if (originalFlag === undefined) delete process.env.CLAWDBOT_PATH_BOOTSTRAPPED; - else process.env.CLAWDBOT_PATH_BOOTSTRAPPED = originalFlag; + if (originalFlag === undefined) delete process.env.MOLTBOT_PATH_BOOTSTRAPPED; + else process.env.MOLTBOT_PATH_BOOTSTRAPPED = originalFlag; if (originalMiseDataDir === undefined) delete process.env.MISE_DATA_DIR; else process.env.MISE_DATA_DIR = originalMiseDataDir; await fs.rm(tmp, { recursive: true, force: true }); @@ -112,7 +112,7 @@ describe("ensureMoltbotCliOnPath", () => { it("prepends Linuxbrew dirs when present", async () => { const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-path-")); const originalPath = process.env.PATH; - const originalFlag = process.env.CLAWDBOT_PATH_BOOTSTRAPPED; + const originalFlag = process.env.MOLTBOT_PATH_BOOTSTRAPPED; const originalHomebrewPrefix = process.env.HOMEBREW_PREFIX; const originalHomebrewBrewFile = process.env.HOMEBREW_BREW_FILE; const originalXdgBinHome = process.env.XDG_BIN_HOME; @@ -126,7 +126,7 @@ describe("ensureMoltbotCliOnPath", () => { await fs.mkdir(linuxbrewSbin, { recursive: true }); process.env.PATH = "/usr/bin"; - delete process.env.CLAWDBOT_PATH_BOOTSTRAPPED; + delete process.env.MOLTBOT_PATH_BOOTSTRAPPED; delete process.env.HOMEBREW_PREFIX; delete process.env.HOMEBREW_BREW_FILE; delete process.env.XDG_BIN_HOME; @@ -144,8 +144,8 @@ describe("ensureMoltbotCliOnPath", () => { expect(parts[1]).toBe(linuxbrewSbin); } finally { process.env.PATH = originalPath; - if (originalFlag === undefined) delete process.env.CLAWDBOT_PATH_BOOTSTRAPPED; - else process.env.CLAWDBOT_PATH_BOOTSTRAPPED = originalFlag; + if (originalFlag === undefined) delete process.env.MOLTBOT_PATH_BOOTSTRAPPED; + else process.env.MOLTBOT_PATH_BOOTSTRAPPED = originalFlag; if (originalHomebrewPrefix === undefined) delete process.env.HOMEBREW_PREFIX; else process.env.HOMEBREW_PREFIX = originalHomebrewPrefix; if (originalHomebrewBrewFile === undefined) delete process.env.HOMEBREW_BREW_FILE; diff --git a/src/infra/path-env.ts b/src/infra/path-env.ts index b079b36ec..2e38706c2 100644 --- a/src/infra/path-env.ts +++ b/src/infra/path-env.ts @@ -95,8 +95,8 @@ function candidateBinDirs(opts: EnsureMoltbotPathOpts): string[] { * under launchd/minimal environments (and inside the macOS app bundle). */ export function ensureMoltbotCliOnPath(opts: EnsureMoltbotPathOpts = {}) { - if (isTruthyEnvValue(process.env.CLAWDBOT_PATH_BOOTSTRAPPED)) return; - process.env.CLAWDBOT_PATH_BOOTSTRAPPED = "1"; + if (isTruthyEnvValue(process.env.MOLTBOT_PATH_BOOTSTRAPPED)) return; + process.env.MOLTBOT_PATH_BOOTSTRAPPED = "1"; const existing = opts.pathEnv ?? process.env.PATH ?? ""; const prepend = candidateBinDirs(opts); diff --git a/src/infra/provider-usage.test.ts b/src/infra/provider-usage.test.ts index 077e70918..5883e1d37 100644 --- a/src/infra/provider-usage.test.ts +++ b/src/infra/provider-usage.test.ts @@ -253,7 +253,7 @@ describe("provider usage loading", () => { await withTempHome( async (tempHome) => { const agentDir = path.join( - process.env.CLAWDBOT_STATE_DIR ?? path.join(tempHome, ".clawdbot"), + process.env.MOLTBOT_STATE_DIR ?? path.join(tempHome, ".moltbot"), "agents", "main", "agent", @@ -328,7 +328,7 @@ describe("provider usage loading", () => { }, { env: { - CLAWDBOT_STATE_DIR: (home) => path.join(home, ".clawdbot"), + MOLTBOT_STATE_DIR: (home) => path.join(home, ".moltbot"), }, prefix: "moltbot-provider-usage-", }, diff --git a/src/infra/restart-sentinel.test.ts b/src/infra/restart-sentinel.test.ts index cc4934774..534c11543 100644 --- a/src/infra/restart-sentinel.test.ts +++ b/src/infra/restart-sentinel.test.ts @@ -16,14 +16,14 @@ describe("restart sentinel", () => { let tempDir: string; beforeEach(async () => { - prevStateDir = process.env.CLAWDBOT_STATE_DIR; + prevStateDir = process.env.MOLTBOT_STATE_DIR; tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-sentinel-")); - process.env.CLAWDBOT_STATE_DIR = tempDir; + process.env.MOLTBOT_STATE_DIR = tempDir; }); afterEach(async () => { - if (prevStateDir) process.env.CLAWDBOT_STATE_DIR = prevStateDir; - else delete process.env.CLAWDBOT_STATE_DIR; + if (prevStateDir) process.env.MOLTBOT_STATE_DIR = prevStateDir; + else delete process.env.MOLTBOT_STATE_DIR; await fs.rm(tempDir, { recursive: true, force: true }); }); diff --git a/src/infra/restart.ts b/src/infra/restart.ts index 130029e53..85305e320 100644 --- a/src/infra/restart.ts +++ b/src/infra/restart.ts @@ -95,8 +95,8 @@ export function triggerMoltbotRestart(): RestartAttempt { if (process.platform !== "darwin") { if (process.platform === "linux") { const unit = normalizeSystemdUnit( - process.env.CLAWDBOT_SYSTEMD_UNIT, - process.env.CLAWDBOT_PROFILE, + process.env.MOLTBOT_SYSTEMD_UNIT, + process.env.MOLTBOT_PROFILE, ); const userArgs = ["--user", "restart", unit]; tried.push(`systemctl ${userArgs.join(" ")}`); @@ -130,8 +130,8 @@ export function triggerMoltbotRestart(): RestartAttempt { } const label = - process.env.CLAWDBOT_LAUNCHD_LABEL || - resolveGatewayLaunchAgentLabel(process.env.CLAWDBOT_PROFILE); + process.env.MOLTBOT_LAUNCHD_LABEL || + resolveGatewayLaunchAgentLabel(process.env.MOLTBOT_PROFILE); const uid = typeof process.getuid === "function" ? process.getuid() : undefined; const target = uid !== undefined ? `gui/${uid}/${label}` : label; const args = ["kickstart", "-k", target]; diff --git a/src/infra/session-cost-usage.test.ts b/src/infra/session-cost-usage.test.ts index 79b99b76d..1ab53cb4c 100644 --- a/src/infra/session-cost-usage.test.ts +++ b/src/infra/session-cost-usage.test.ts @@ -94,16 +94,16 @@ describe("session cost usage", () => { }, } as MoltbotConfig; - const originalState = process.env.CLAWDBOT_STATE_DIR; - process.env.CLAWDBOT_STATE_DIR = root; + const originalState = process.env.MOLTBOT_STATE_DIR; + process.env.MOLTBOT_STATE_DIR = root; try { const summary = await loadCostUsageSummary({ days: 30, config }); expect(summary.daily.length).toBe(1); expect(summary.totals.totalTokens).toBe(50); expect(summary.totals.totalCost).toBeCloseTo(0.03003, 5); } finally { - if (originalState === undefined) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = originalState; + if (originalState === undefined) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = originalState; } }); diff --git a/src/infra/shell-env.test.ts b/src/infra/shell-env.test.ts index 8c3d3f018..d5976c460 100644 --- a/src/infra/shell-env.test.ts +++ b/src/infra/shell-env.test.ts @@ -9,16 +9,16 @@ import { describe("shell env fallback", () => { it("is disabled by default", () => { expect(shouldEnableShellEnvFallback({} as NodeJS.ProcessEnv)).toBe(false); - expect(shouldEnableShellEnvFallback({ CLAWDBOT_LOAD_SHELL_ENV: "0" })).toBe(false); - expect(shouldEnableShellEnvFallback({ CLAWDBOT_LOAD_SHELL_ENV: "1" })).toBe(true); + expect(shouldEnableShellEnvFallback({ MOLTBOT_LOAD_SHELL_ENV: "0" })).toBe(false); + expect(shouldEnableShellEnvFallback({ MOLTBOT_LOAD_SHELL_ENV: "1" })).toBe(true); }); it("resolves timeout from env with default fallback", () => { expect(resolveShellEnvFallbackTimeoutMs({} as NodeJS.ProcessEnv)).toBe(15000); - expect(resolveShellEnvFallbackTimeoutMs({ CLAWDBOT_SHELL_ENV_TIMEOUT_MS: "42" })).toBe(42); + expect(resolveShellEnvFallbackTimeoutMs({ MOLTBOT_SHELL_ENV_TIMEOUT_MS: "42" })).toBe(42); expect( resolveShellEnvFallbackTimeoutMs({ - CLAWDBOT_SHELL_ENV_TIMEOUT_MS: "nope", + MOLTBOT_SHELL_ENV_TIMEOUT_MS: "nope", }), ).toBe(15000); }); diff --git a/src/infra/shell-env.ts b/src/infra/shell-env.ts index 11c7759aa..baeb5ca7f 100644 --- a/src/infra/shell-env.ts +++ b/src/infra/shell-env.ts @@ -95,15 +95,15 @@ export function loadShellEnvFallback(opts: ShellEnvFallbackOptions): ShellEnvFal } export function shouldEnableShellEnvFallback(env: NodeJS.ProcessEnv): boolean { - return isTruthyEnvValue(env.CLAWDBOT_LOAD_SHELL_ENV); + return isTruthyEnvValue(env.MOLTBOT_LOAD_SHELL_ENV); } export function shouldDeferShellEnvFallback(env: NodeJS.ProcessEnv): boolean { - return isTruthyEnvValue(env.CLAWDBOT_DEFER_SHELL_ENV_FALLBACK); + return isTruthyEnvValue(env.MOLTBOT_DEFER_SHELL_ENV_FALLBACK); } export function resolveShellEnvFallbackTimeoutMs(env: NodeJS.ProcessEnv): number { - const raw = env.CLAWDBOT_SHELL_ENV_TIMEOUT_MS?.trim(); + const raw = env.MOLTBOT_SHELL_ENV_TIMEOUT_MS?.trim(); if (!raw) return DEFAULT_TIMEOUT_MS; const parsed = Number.parseInt(raw, 10); if (!Number.isFinite(parsed)) return DEFAULT_TIMEOUT_MS; diff --git a/src/infra/state-migrations.ts b/src/infra/state-migrations.ts index f5e50740e..dc14b1506 100644 --- a/src/infra/state-migrations.ts +++ b/src/infra/state-migrations.ts @@ -316,7 +316,7 @@ export async function autoMigrateLegacyStateDir(params: { autoMigrateStateDirChecked = true; const env = params.env ?? process.env; - if (env.MOLTBOT_STATE_DIR?.trim() || env.CLAWDBOT_STATE_DIR?.trim()) { + if (env.MOLTBOT_STATE_DIR?.trim() || env.MOLTBOT_STATE_DIR?.trim()) { return { migrated: false, skipped: true, changes: [], warnings: [] }; } @@ -727,7 +727,7 @@ export async function autoMigrateLegacyState(params: { homedir: params.homedir, log: params.log, }); - if (env.CLAWDBOT_AGENT_DIR?.trim() || env.PI_CODING_AGENT_DIR?.trim()) { + if (env.MOLTBOT_AGENT_DIR?.trim() || env.PI_CODING_AGENT_DIR?.trim()) { return { migrated: stateDirResult.migrated, skipped: true, diff --git a/src/infra/system-presence.ts b/src/infra/system-presence.ts index 0e5d453ac..ca24e3134 100644 --- a/src/infra/system-presence.ts +++ b/src/infra/system-presence.ts @@ -59,7 +59,7 @@ function resolvePrimaryIPv4(): string | undefined { function initSelfPresence() { const host = os.hostname(); const ip = resolvePrimaryIPv4() ?? undefined; - const version = process.env.CLAWDBOT_VERSION ?? process.env.npm_package_version ?? "unknown"; + const version = process.env.MOLTBOT_VERSION ?? process.env.npm_package_version ?? "unknown"; const modelIdentifier = (() => { const p = os.platform(); if (p === "darwin") { diff --git a/src/infra/update-runner.ts b/src/infra/update-runner.ts index 0735edb39..2f8f25d7e 100644 --- a/src/infra/update-runner.ts +++ b/src/infra/update-runner.ts @@ -692,7 +692,7 @@ export async function runGatewayUpdate(opts: UpdateRunnerOptions = {}): Promise< "moltbot doctor", managerScriptArgs(manager, "moltbot", ["doctor", "--non-interactive"]), gitRoot, - { CLAWDBOT_UPDATE_IN_PROGRESS: "1" }, + { MOLTBOT_UPDATE_IN_PROGRESS: "1" }, ), ); steps.push(doctorStep); diff --git a/src/infra/update-startup.test.ts b/src/infra/update-startup.test.ts index 9a792b190..d2fdbe50f 100644 --- a/src/infra/update-startup.test.ts +++ b/src/infra/update-startup.test.ts @@ -31,7 +31,7 @@ describe("update-startup", () => { vi.useFakeTimers(); vi.setSystemTime(new Date("2026-01-17T10:00:00Z")); tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-update-check-")); - process.env.CLAWDBOT_STATE_DIR = tempDir; + process.env.MOLTBOT_STATE_DIR = tempDir; delete process.env.VITEST; process.env.NODE_ENV = "test"; }); diff --git a/src/macos/gateway-daemon.ts b/src/macos/gateway-daemon.ts index 686f705c2..3edad3f3e 100644 --- a/src/macos/gateway-daemon.ts +++ b/src/macos/gateway-daemon.ts @@ -2,11 +2,11 @@ import process from "node:process"; import type { GatewayLockHandle } from "../infra/gateway-lock.js"; -declare const __CLAWDBOT_VERSION__: string; +declare const __MOLTBOT_VERSION__: string; const BUNDLED_VERSION = - (typeof __CLAWDBOT_VERSION__ === "string" && __CLAWDBOT_VERSION__) || - process.env.CLAWDBOT_BUNDLED_VERSION || + (typeof __MOLTBOT_VERSION__ === "string" && __MOLTBOT_VERSION__) || + process.env.MOLTBOT_BUNDLED_VERSION || "0.0.0"; function argValue(args: string[], flag: string): string | undefined { @@ -75,7 +75,7 @@ async function main() { const cfg = loadConfig(); const portRaw = argValue(args, "--port") ?? - process.env.CLAWDBOT_GATEWAY_PORT ?? + process.env.MOLTBOT_GATEWAY_PORT ?? (typeof cfg.gateway?.port === "number" ? String(cfg.gateway.port) : "") ?? "18789"; const port = Number.parseInt(portRaw, 10); @@ -85,10 +85,7 @@ async function main() { } const bindRaw = - argValue(args, "--bind") ?? - process.env.CLAWDBOT_GATEWAY_BIND ?? - cfg.gateway?.bind ?? - "loopback"; + argValue(args, "--bind") ?? process.env.MOLTBOT_GATEWAY_BIND ?? cfg.gateway?.bind ?? "loopback"; const bind = bindRaw === "loopback" || bindRaw === "lan" || @@ -103,7 +100,7 @@ async function main() { } const token = argValue(args, "--token"); - if (token) process.env.CLAWDBOT_GATEWAY_TOKEN = token; + if (token) process.env.MOLTBOT_GATEWAY_TOKEN = token; let server: Awaited> | null = null; let lock: GatewayLockHandle | null = null; diff --git a/src/macos/relay-smoke.test.ts b/src/macos/relay-smoke.test.ts index 9d546a053..7cc19547a 100644 --- a/src/macos/relay-smoke.test.ts +++ b/src/macos/relay-smoke.test.ts @@ -15,8 +15,8 @@ describe("parseRelaySmokeTest", () => { }); it("parses env var smoke mode only when no args", () => { - expect(parseRelaySmokeTest([], { CLAWDBOT_SMOKE_QR: "1" })).toBe("qr"); - expect(parseRelaySmokeTest(["send"], { CLAWDBOT_SMOKE_QR: "1" })).toBe(null); + expect(parseRelaySmokeTest([], { MOLTBOT_SMOKE_QR: "1" })).toBe("qr"); + expect(parseRelaySmokeTest(["send"], { MOLTBOT_SMOKE_QR: "1" })).toBe(null); }); it("rejects unknown smoke values", () => { diff --git a/src/macos/relay-smoke.ts b/src/macos/relay-smoke.ts index 7d228cbf2..fa08daec1 100644 --- a/src/macos/relay-smoke.ts +++ b/src/macos/relay-smoke.ts @@ -15,7 +15,7 @@ export function parseRelaySmokeTest(args: string[], env: NodeJS.ProcessEnv): Rel // Back-compat: only run env-based smoke mode when no CLI args are present, // to avoid surprising early-exit when users set env vars globally. - if (args.length === 0 && (env.CLAWDBOT_SMOKE_QR === "1" || env.CLAWDBOT_SMOKE === "qr")) { + if (args.length === 0 && (env.MOLTBOT_SMOKE_QR === "1" || env.MOLTBOT_SMOKE === "qr")) { return "qr"; } diff --git a/src/macos/relay.ts b/src/macos/relay.ts index ec580760b..7d035af0c 100644 --- a/src/macos/relay.ts +++ b/src/macos/relay.ts @@ -1,11 +1,11 @@ #!/usr/bin/env node import process from "node:process"; -declare const __CLAWDBOT_VERSION__: string | undefined; +declare const __MOLTBOT_VERSION__: string | undefined; const BUNDLED_VERSION = - (typeof __CLAWDBOT_VERSION__ === "string" && __CLAWDBOT_VERSION__) || - process.env.CLAWDBOT_BUNDLED_VERSION || + (typeof __MOLTBOT_VERSION__ === "string" && __MOLTBOT_VERSION__) || + process.env.MOLTBOT_BUNDLED_VERSION || "0.0.0"; function hasFlag(args: string[], flag: string): boolean { diff --git a/src/media-understanding/providers/deepgram/audio.live.test.ts b/src/media-understanding/providers/deepgram/audio.live.test.ts index ad8bc020e..6847a1a3e 100644 --- a/src/media-understanding/providers/deepgram/audio.live.test.ts +++ b/src/media-understanding/providers/deepgram/audio.live.test.ts @@ -12,7 +12,7 @@ const SAMPLE_URL = const LIVE = isTruthyEnvValue(process.env.DEEPGRAM_LIVE_TEST) || isTruthyEnvValue(process.env.LIVE) || - isTruthyEnvValue(process.env.CLAWDBOT_LIVE_TEST); + isTruthyEnvValue(process.env.MOLTBOT_LIVE_TEST); const describeLive = LIVE && DEEPGRAM_KEY ? describe : describe.skip; diff --git a/src/media/image-ops.ts b/src/media/image-ops.ts index 9b07b69f4..9e056d511 100644 --- a/src/media/image-ops.ts +++ b/src/media/image-ops.ts @@ -17,8 +17,8 @@ function isBun(): boolean { function prefersSips(): boolean { return ( - process.env.CLAWDBOT_IMAGE_BACKEND === "sips" || - (process.env.CLAWDBOT_IMAGE_BACKEND !== "sharp" && isBun() && process.platform === "darwin") + process.env.MOLTBOT_IMAGE_BACKEND === "sips" || + (process.env.MOLTBOT_IMAGE_BACKEND !== "sharp" && isBun() && process.platform === "darwin") ); } diff --git a/src/media/store.test.ts b/src/media/store.test.ts index b2ecf56f2..96366343d 100644 --- a/src/media/store.test.ts +++ b/src/media/store.test.ts @@ -13,7 +13,7 @@ describe("media store", () => { const envSnapshot: Record = {}; const snapshotEnv = () => { - for (const key of ["HOME", "USERPROFILE", "HOMEDRIVE", "HOMEPATH", "CLAWDBOT_STATE_DIR"]) { + for (const key of ["HOME", "USERPROFILE", "HOMEDRIVE", "HOMEPATH", "MOLTBOT_STATE_DIR"]) { envSnapshot[key] = process.env[key]; } }; @@ -30,7 +30,7 @@ describe("media store", () => { home = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-test-home-")); process.env.HOME = home; process.env.USERPROFILE = home; - process.env.CLAWDBOT_STATE_DIR = path.join(home, ".clawdbot"); + process.env.MOLTBOT_STATE_DIR = path.join(home, ".moltbot"); if (process.platform === "win32") { const match = home.match(/^([A-Za-z]:)(.*)$/); if (match) { @@ -38,7 +38,7 @@ describe("media store", () => { process.env.HOMEPATH = match[2] || "\\"; } } - await fs.mkdir(path.join(home, ".clawdbot"), { recursive: true }); + await fs.mkdir(path.join(home, ".moltbot"), { recursive: true }); store = await import("./store.js"); }); @@ -61,7 +61,7 @@ describe("media store", () => { await withTempStore(async (store, home) => { const dir = await store.ensureMediaDir(); expect(isPathWithinBase(home, dir)).toBe(true); - expect(path.normalize(dir)).toContain(`${path.sep}.clawdbot${path.sep}media`); + expect(path.normalize(dir)).toContain(`${path.sep}.moltbot${path.sep}media`); const stat = await fs.stat(dir); expect(stat.isDirectory()).toBe(true); }); diff --git a/src/memory/batch-gemini.ts b/src/memory/batch-gemini.ts index 516b88fe7..a589cb5a8 100644 --- a/src/memory/batch-gemini.ts +++ b/src/memory/batch-gemini.ts @@ -34,7 +34,7 @@ export type GeminiBatchOutputLine = { }; const GEMINI_BATCH_MAX_REQUESTS = 50000; -const debugEmbeddings = isTruthyEnvValue(process.env.CLAWDBOT_DEBUG_MEMORY_EMBEDDINGS); +const debugEmbeddings = isTruthyEnvValue(process.env.MOLTBOT_DEBUG_MEMORY_EMBEDDINGS); const log = createSubsystemLogger("memory/embeddings"); const debugLog = (message: string, meta?: Record) => { diff --git a/src/memory/embeddings-gemini.ts b/src/memory/embeddings-gemini.ts index 244384df6..53aaab42d 100644 --- a/src/memory/embeddings-gemini.ts +++ b/src/memory/embeddings-gemini.ts @@ -12,7 +12,7 @@ export type GeminiEmbeddingClient = { const DEFAULT_GEMINI_BASE_URL = "https://generativelanguage.googleapis.com/v1beta"; export const DEFAULT_GEMINI_EMBEDDING_MODEL = "gemini-embedding-001"; -const debugEmbeddings = isTruthyEnvValue(process.env.CLAWDBOT_DEBUG_MEMORY_EMBEDDINGS); +const debugEmbeddings = isTruthyEnvValue(process.env.MOLTBOT_DEBUG_MEMORY_EMBEDDINGS); const log = createSubsystemLogger("memory/embeddings"); const debugLog = (message: string, meta?: Record) => { diff --git a/src/node-host/runner.ts b/src/node-host/runner.ts index e31ad3de3..000d021fd 100644 --- a/src/node-host/runner.ts +++ b/src/node-host/runner.ts @@ -151,9 +151,9 @@ const OUTPUT_EVENT_TAIL = 20_000; const DEFAULT_NODE_PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"; const BROWSER_PROXY_MAX_FILE_BYTES = 10 * 1024 * 1024; -const execHostEnforced = process.env.CLAWDBOT_NODE_EXEC_HOST?.trim().toLowerCase() === "app"; +const execHostEnforced = process.env.MOLTBOT_NODE_EXEC_HOST?.trim().toLowerCase() === "app"; const execHostFallbackAllowed = - process.env.CLAWDBOT_NODE_EXEC_FALLBACK?.trim().toLowerCase() !== "0"; + process.env.MOLTBOT_NODE_EXEC_FALLBACK?.trim().toLowerCase() !== "0"; const blockedEnvKeys = new Set([ "NODE_OPTIONS", @@ -513,10 +513,10 @@ export async function runNodeHost(opts: NodeHostRunOptions): Promise { const browserProxyEnabled = browserProxy.enabled && resolvedBrowser.enabled; const isRemoteMode = cfg.gateway?.mode === "remote"; const token = - process.env.CLAWDBOT_GATEWAY_TOKEN?.trim() || + process.env.MOLTBOT_GATEWAY_TOKEN?.trim() || (isRemoteMode ? cfg.gateway?.remote?.token : cfg.gateway?.auth?.token); const password = - process.env.CLAWDBOT_GATEWAY_PASSWORD?.trim() || + process.env.MOLTBOT_GATEWAY_PASSWORD?.trim() || (isRemoteMode ? cfg.gateway?.remote?.password : cfg.gateway?.auth?.password); const host = gateway.host ?? "127.0.0.1"; diff --git a/src/pairing/pairing-messages.test.ts b/src/pairing/pairing-messages.test.ts index 9884ac2f6..f22b68d27 100644 --- a/src/pairing/pairing-messages.test.ts +++ b/src/pairing/pairing-messages.test.ts @@ -6,16 +6,16 @@ describe("buildPairingReply", () => { let previousProfile: string | undefined; beforeEach(() => { - previousProfile = process.env.CLAWDBOT_PROFILE; - process.env.CLAWDBOT_PROFILE = "isolated"; + previousProfile = process.env.MOLTBOT_PROFILE; + process.env.MOLTBOT_PROFILE = "isolated"; }); afterEach(() => { if (previousProfile === undefined) { - delete process.env.CLAWDBOT_PROFILE; + delete process.env.MOLTBOT_PROFILE; return; } - process.env.CLAWDBOT_PROFILE = previousProfile; + process.env.MOLTBOT_PROFILE = previousProfile; }); const cases = [ @@ -51,7 +51,7 @@ describe("buildPairingReply", () => { const text = buildPairingReply(testCase); expect(text).toContain(testCase.idLine); expect(text).toContain(`Pairing code: ${testCase.code}`); - // CLI commands should respect CLAWDBOT_PROFILE when set (most tests run with isolated profile) + // CLI commands should respect MOLTBOT_PROFILE when set (most tests run with isolated profile) const commandRe = new RegExp( `(?:moltbot|moltbot) --profile isolated pairing approve ${testCase.channel} `, ); diff --git a/src/pairing/pairing-store.test.ts b/src/pairing/pairing-store.test.ts index a72264e16..8da2baa30 100644 --- a/src/pairing/pairing-store.test.ts +++ b/src/pairing/pairing-store.test.ts @@ -9,14 +9,14 @@ import { resolveOAuthDir } from "../config/paths.js"; import { listChannelPairingRequests, upsertChannelPairingRequest } from "./pairing-store.js"; async function withTempStateDir(fn: (stateDir: string) => Promise) { - const previous = process.env.CLAWDBOT_STATE_DIR; + const previous = process.env.MOLTBOT_STATE_DIR; const dir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-pairing-")); - process.env.CLAWDBOT_STATE_DIR = dir; + process.env.MOLTBOT_STATE_DIR = dir; try { return await fn(dir); } finally { - if (previous === undefined) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = previous; + if (previous === undefined) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = previous; await fs.rm(dir, { recursive: true, force: true }); } } diff --git a/src/plugins/bundled-dir.ts b/src/plugins/bundled-dir.ts index 33524c36f..4edfab6f9 100644 --- a/src/plugins/bundled-dir.ts +++ b/src/plugins/bundled-dir.ts @@ -3,7 +3,7 @@ import path from "node:path"; import { fileURLToPath } from "node:url"; export function resolveBundledPluginsDir(): string | undefined { - const override = process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR?.trim(); + const override = process.env.MOLTBOT_BUNDLED_PLUGINS_DIR?.trim(); if (override) return override; // bun --compile: ship a sibling `extensions/` next to the executable. diff --git a/src/plugins/discovery.test.ts b/src/plugins/discovery.test.ts index a5c40ceb1..d06d64c54 100644 --- a/src/plugins/discovery.test.ts +++ b/src/plugins/discovery.test.ts @@ -14,23 +14,23 @@ function makeTempDir() { } async function withStateDir(stateDir: string, fn: () => Promise) { - const prev = process.env.CLAWDBOT_STATE_DIR; - const prevBundled = process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR; - process.env.CLAWDBOT_STATE_DIR = stateDir; - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; + const prev = process.env.MOLTBOT_STATE_DIR; + const prevBundled = process.env.MOLTBOT_BUNDLED_PLUGINS_DIR; + process.env.MOLTBOT_STATE_DIR = stateDir; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; vi.resetModules(); try { return await fn(); } finally { if (prev === undefined) { - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; } else { - process.env.CLAWDBOT_STATE_DIR = prev; + process.env.MOLTBOT_STATE_DIR = prev; } if (prevBundled === undefined) { - delete process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR; + delete process.env.MOLTBOT_BUNDLED_PLUGINS_DIR; } else { - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = prevBundled; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = prevBundled; } vi.resetModules(); } @@ -55,7 +55,7 @@ describe("discoverMoltbotPlugins", () => { fs.mkdirSync(globalExt, { recursive: true }); fs.writeFileSync(path.join(globalExt, "alpha.ts"), "export default function () {}", "utf-8"); - const workspaceExt = path.join(workspaceDir, ".clawdbot", "extensions"); + const workspaceExt = path.join(workspaceDir, ".moltbot", "extensions"); fs.mkdirSync(workspaceExt, { recursive: true }); fs.writeFileSync(path.join(workspaceExt, "beta.ts"), "export default function () {}", "utf-8"); diff --git a/src/plugins/discovery.ts b/src/plugins/discovery.ts index a03e4f38b..833c2c2c1 100644 --- a/src/plugins/discovery.ts +++ b/src/plugins/discovery.ts @@ -306,7 +306,7 @@ export function discoverMoltbotPlugins(params: { } if (workspaceDir) { const workspaceRoot = resolveUserPath(workspaceDir); - const workspaceExt = path.join(workspaceRoot, ".clawdbot", "extensions"); + const workspaceExt = path.join(workspaceRoot, ".moltbot", "extensions"); discoverInDirectory({ dir: workspaceExt, origin: "workspace", diff --git a/src/plugins/install.test.ts b/src/plugins/install.test.ts index 8299100d6..39e2542a0 100644 --- a/src/plugins/install.test.ts +++ b/src/plugins/install.test.ts @@ -88,7 +88,7 @@ afterEach(() => { }); describe("installPluginFromArchive", () => { - it("installs into ~/.clawdbot/extensions and uses unscoped id", async () => { + it("installs into ~/.moltbot/extensions and uses unscoped id", async () => { const stateDir = makeTempDir(); const workDir = makeTempDir(); const pkgDir = path.join(workDir, "package"); diff --git a/src/plugins/loader.test.ts b/src/plugins/loader.test.ts index 7e9316171..d80f5781b 100644 --- a/src/plugins/loader.test.ts +++ b/src/plugins/loader.test.ts @@ -9,7 +9,7 @@ import { loadMoltbotPlugins } from "./loader.js"; type TempPlugin = { dir: string; file: string; id: string }; const tempDirs: string[] = []; -const prevBundledDir = process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR; +const prevBundledDir = process.env.MOLTBOT_BUNDLED_PLUGINS_DIR; const EMPTY_PLUGIN_SCHEMA = { type: "object", additionalProperties: false, properties: {} }; function makeTempDir() { @@ -53,9 +53,9 @@ afterEach(() => { } } if (prevBundledDir === undefined) { - delete process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR; + delete process.env.MOLTBOT_BUNDLED_PLUGINS_DIR; } else { - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = prevBundledDir; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = prevBundledDir; } }); @@ -68,7 +68,7 @@ describe("loadMoltbotPlugins", () => { dir: bundledDir, filename: "bundled.ts", }); - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = bundledDir; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = bundledDir; const registry = loadMoltbotPlugins({ cache: false, @@ -125,7 +125,7 @@ describe("loadMoltbotPlugins", () => { dir: bundledDir, filename: "telegram.ts", }); - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = bundledDir; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = bundledDir; const registry = loadMoltbotPlugins({ cache: false, @@ -152,7 +152,7 @@ describe("loadMoltbotPlugins", () => { dir: bundledDir, filename: "memory-core.ts", }); - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = bundledDir; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = bundledDir; const registry = loadMoltbotPlugins({ cache: false, @@ -191,7 +191,7 @@ describe("loadMoltbotPlugins", () => { filename: "index.ts", }); - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = bundledDir; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = bundledDir; const registry = loadMoltbotPlugins({ cache: false, @@ -211,7 +211,7 @@ describe("loadMoltbotPlugins", () => { expect(memory?.version).toBe("1.2.3"); }); it("loads plugins from config paths", () => { - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; const plugin = writePlugin({ id: "allowed", body: `export default { id: "allowed", register(api) { api.registerGatewayMethod("allowed.ping", ({ respond }) => respond(true, { ok: true })); } };`, @@ -234,7 +234,7 @@ describe("loadMoltbotPlugins", () => { }); it("denylist disables plugins even if allowed", () => { - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; const plugin = writePlugin({ id: "blocked", body: `export default { id: "blocked", register() {} };`, @@ -257,7 +257,7 @@ describe("loadMoltbotPlugins", () => { }); it("fails fast on invalid plugin config", () => { - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; const plugin = writePlugin({ id: "configurable", body: `export default { id: "configurable", register() {} };`, @@ -284,7 +284,7 @@ describe("loadMoltbotPlugins", () => { }); it("registers channel plugins", () => { - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; const plugin = writePlugin({ id: "channel-demo", body: `export default { id: "channel-demo", register(api) { @@ -325,7 +325,7 @@ describe("loadMoltbotPlugins", () => { }); it("registers http handlers", () => { - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; const plugin = writePlugin({ id: "http-demo", body: `export default { id: "http-demo", register(api) { @@ -351,7 +351,7 @@ describe("loadMoltbotPlugins", () => { }); it("registers http routes", () => { - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; const plugin = writePlugin({ id: "http-route-demo", body: `export default { id: "http-route-demo", register(api) { @@ -378,7 +378,7 @@ describe("loadMoltbotPlugins", () => { }); it("respects explicit disable in config", () => { - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; const plugin = writePlugin({ id: "config-disable", body: `export default { id: "config-disable", register() {} };`, @@ -401,7 +401,7 @@ describe("loadMoltbotPlugins", () => { }); it("enforces memory slot selection", () => { - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; const memoryA = writePlugin({ id: "memory-a", body: `export default { id: "memory-a", kind: "memory", register() {} };`, @@ -428,7 +428,7 @@ describe("loadMoltbotPlugins", () => { }); it("disables memory plugins when slot is none", () => { - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; const memory = writePlugin({ id: "memory-off", body: `export default { id: "memory-off", kind: "memory", register() {} };`, @@ -456,7 +456,7 @@ describe("loadMoltbotPlugins", () => { dir: bundledDir, filename: "shadow.js", }); - process.env.CLAWDBOT_BUNDLED_PLUGINS_DIR = bundledDir; + process.env.MOLTBOT_BUNDLED_PLUGINS_DIR = bundledDir; const override = writePlugin({ id: "shadow", diff --git a/src/plugins/loader.ts b/src/plugins/loader.ts index 174441bfc..573a134b8 100644 --- a/src/plugins/loader.ts +++ b/src/plugins/loader.ts @@ -209,7 +209,6 @@ export function loadMoltbotPlugins(options: PluginLoadOptions = {}): PluginRegis ...(pluginSdkAlias ? { alias: { - "clawdbot/plugin-sdk": pluginSdkAlias, "moltbot/plugin-sdk": pluginSdkAlias, }, } diff --git a/src/plugins/manifest-registry.ts b/src/plugins/manifest-registry.ts index 9a53c9d70..c200b76a8 100644 --- a/src/plugins/manifest-registry.ts +++ b/src/plugins/manifest-registry.ts @@ -36,7 +36,7 @@ const registryCache = new Map 0; } diff --git a/src/process/exec.test.ts b/src/process/exec.test.ts index eeb7cc7a7..4b278f6df 100644 --- a/src/process/exec.test.ts +++ b/src/process/exec.test.ts @@ -5,10 +5,10 @@ import { runCommandWithTimeout } from "./exec.js"; describe("runCommandWithTimeout", () => { it("passes env overrides to child", async () => { const result = await runCommandWithTimeout( - [process.execPath, "-e", 'process.stdout.write(process.env.CLAWDBOT_TEST_ENV ?? "")'], + [process.execPath, "-e", 'process.stdout.write(process.env.MOLTBOT_TEST_ENV ?? "")'], { timeoutMs: 5_000, - env: { CLAWDBOT_TEST_ENV: "ok" }, + env: { MOLTBOT_TEST_ENV: "ok" }, }, ); @@ -17,18 +17,18 @@ describe("runCommandWithTimeout", () => { }); it("merges custom env with process.env", async () => { - const previous = process.env.CLAWDBOT_BASE_ENV; - process.env.CLAWDBOT_BASE_ENV = "base"; + const previous = process.env.MOLTBOT_BASE_ENV; + process.env.MOLTBOT_BASE_ENV = "base"; try { const result = await runCommandWithTimeout( [ process.execPath, "-e", - 'process.stdout.write((process.env.CLAWDBOT_BASE_ENV ?? "") + "|" + (process.env.CLAWDBOT_TEST_ENV ?? ""))', + 'process.stdout.write((process.env.MOLTBOT_BASE_ENV ?? "") + "|" + (process.env.MOLTBOT_TEST_ENV ?? ""))', ], { timeoutMs: 5_000, - env: { CLAWDBOT_TEST_ENV: "ok" }, + env: { MOLTBOT_TEST_ENV: "ok" }, }, ); @@ -36,9 +36,9 @@ describe("runCommandWithTimeout", () => { expect(result.stdout).toBe("base|ok"); } finally { if (previous === undefined) { - delete process.env.CLAWDBOT_BASE_ENV; + delete process.env.MOLTBOT_BASE_ENV; } else { - process.env.CLAWDBOT_BASE_ENV = previous; + process.env.MOLTBOT_BASE_ENV = previous; } } }); diff --git a/src/security/audit-extra.ts b/src/security/audit-extra.ts index 3a92a30a8..55a2e3d0e 100644 --- a/src/security/audit-extra.ts +++ b/src/security/audit-extra.ts @@ -116,7 +116,7 @@ export function collectSyncedFolderFindings(params: { severity: "warn", title: "State/config path looks like a synced folder", detail: `stateDir=${params.stateDir}, configPath=${params.configPath}. Synced folders (iCloud/Dropbox/OneDrive/Google Drive) can leak tokens and transcripts onto other devices.`, - remediation: `Keep CLAWDBOT_STATE_DIR on a local-only volume and re-run "${formatCliCommand("moltbot security audit --fix")}".`, + remediation: `Keep MOLTBOT_STATE_DIR on a local-only volume and re-run "${formatCliCommand("moltbot security audit --fix")}".`, }); } return findings; @@ -139,7 +139,7 @@ export function collectSecretsInConfigFindings(cfg: MoltbotConfig): SecurityAudi detail: "gateway.auth.password is set in the config file; prefer environment variables for secrets when possible.", remediation: - "Prefer CLAWDBOT_GATEWAY_PASSWORD (env) and remove gateway.auth.password from disk.", + "Prefer MOLTBOT_GATEWAY_PASSWORD (env) and remove gateway.auth.password from disk.", }); } diff --git a/src/security/audit.test.ts b/src/security/audit.test.ts index 40124d39a..e5878f278 100644 --- a/src/security/audit.test.ts +++ b/src/security/audit.test.ts @@ -391,9 +391,9 @@ describe("security audit", () => { }); it("flags Discord native commands without a guild user allowlist", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-security-audit-discord-")); - process.env.CLAWDBOT_STATE_DIR = tmp; + process.env.MOLTBOT_STATE_DIR = tmp; await fs.mkdir(path.join(tmp, "credentials"), { recursive: true, mode: 0o700 }); try { const cfg: MoltbotConfig = { @@ -429,17 +429,17 @@ describe("security audit", () => { ]), ); } finally { - if (prevStateDir == null) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = prevStateDir; + if (prevStateDir == null) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = prevStateDir; } }); it("does not flag Discord slash commands when dm.allowFrom includes a Discord snowflake id", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const tmp = await fs.mkdtemp( path.join(os.tmpdir(), "moltbot-security-audit-discord-allowfrom-snowflake-"), ); - process.env.CLAWDBOT_STATE_DIR = tmp; + process.env.MOLTBOT_STATE_DIR = tmp; await fs.mkdir(path.join(tmp, "credentials"), { recursive: true, mode: 0o700 }); try { const cfg: MoltbotConfig = { @@ -475,15 +475,15 @@ describe("security audit", () => { ]), ); } finally { - if (prevStateDir == null) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = prevStateDir; + if (prevStateDir == null) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = prevStateDir; } }); it("flags Discord slash commands when access-group enforcement is disabled and no users allowlist exists", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-security-audit-discord-open-")); - process.env.CLAWDBOT_STATE_DIR = tmp; + process.env.MOLTBOT_STATE_DIR = tmp; await fs.mkdir(path.join(tmp, "credentials"), { recursive: true, mode: 0o700 }); try { const cfg: MoltbotConfig = { @@ -520,15 +520,15 @@ describe("security audit", () => { ]), ); } finally { - if (prevStateDir == null) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = prevStateDir; + if (prevStateDir == null) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = prevStateDir; } }); it("flags Slack slash commands without a channel users allowlist", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-security-audit-slack-")); - process.env.CLAWDBOT_STATE_DIR = tmp; + process.env.MOLTBOT_STATE_DIR = tmp; await fs.mkdir(path.join(tmp, "credentials"), { recursive: true, mode: 0o700 }); try { const cfg: MoltbotConfig = { @@ -559,15 +559,15 @@ describe("security audit", () => { ]), ); } finally { - if (prevStateDir == null) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = prevStateDir; + if (prevStateDir == null) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = prevStateDir; } }); it("flags Slack slash commands when access-group enforcement is disabled", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-security-audit-slack-open-")); - process.env.CLAWDBOT_STATE_DIR = tmp; + process.env.MOLTBOT_STATE_DIR = tmp; await fs.mkdir(path.join(tmp, "credentials"), { recursive: true, mode: 0o700 }); try { const cfg: MoltbotConfig = { @@ -599,15 +599,15 @@ describe("security audit", () => { ]), ); } finally { - if (prevStateDir == null) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = prevStateDir; + if (prevStateDir == null) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = prevStateDir; } }); it("flags Telegram group commands without a sender allowlist", async () => { - const prevStateDir = process.env.CLAWDBOT_STATE_DIR; + const prevStateDir = process.env.MOLTBOT_STATE_DIR; const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-security-audit-telegram-")); - process.env.CLAWDBOT_STATE_DIR = tmp; + process.env.MOLTBOT_STATE_DIR = tmp; await fs.mkdir(path.join(tmp, "credentials"), { recursive: true, mode: 0o700 }); try { const cfg: MoltbotConfig = { @@ -637,8 +637,8 @@ describe("security audit", () => { ]), ); } finally { - if (prevStateDir == null) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = prevStateDir; + if (prevStateDir == null) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = prevStateDir; } }); @@ -766,8 +766,8 @@ describe("security audit", () => { }); it("warns when hooks token reuses the gateway env token", async () => { - const prevToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - process.env.CLAWDBOT_GATEWAY_TOKEN = "shared-gateway-token-1234567890"; + const prevToken = process.env.MOLTBOT_GATEWAY_TOKEN; + process.env.MOLTBOT_GATEWAY_TOKEN = "shared-gateway-token-1234567890"; const cfg: MoltbotConfig = { hooks: { enabled: true, token: "shared-gateway-token-1234567890" }, }; @@ -785,8 +785,8 @@ describe("security audit", () => { ]), ); } finally { - if (prevToken === undefined) delete process.env.CLAWDBOT_GATEWAY_TOKEN; - else process.env.CLAWDBOT_GATEWAY_TOKEN = prevToken; + if (prevToken === undefined) delete process.env.MOLTBOT_GATEWAY_TOKEN; + else process.env.MOLTBOT_GATEWAY_TOKEN = prevToken; } }); @@ -797,8 +797,8 @@ describe("security audit", () => { config: cfg, includeFilesystem: false, includeChannelSecurity: false, - stateDir: "/Users/test/Dropbox/.clawdbot", - configPath: "/Users/test/Dropbox/.clawdbot/moltbot.json", + stateDir: "/Users/test/Dropbox/.moltbot", + configPath: "/Users/test/Dropbox/.moltbot/moltbot.json", }); expect(res.findings).toEqual( @@ -977,24 +977,24 @@ describe("security audit", () => { }); describe("maybeProbeGateway auth selection", () => { - const originalEnvToken = process.env.CLAWDBOT_GATEWAY_TOKEN; - const originalEnvPassword = process.env.CLAWDBOT_GATEWAY_PASSWORD; + const originalEnvToken = process.env.MOLTBOT_GATEWAY_TOKEN; + const originalEnvPassword = process.env.MOLTBOT_GATEWAY_PASSWORD; beforeEach(() => { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; - delete process.env.CLAWDBOT_GATEWAY_PASSWORD; + delete process.env.MOLTBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_PASSWORD; }); afterEach(() => { if (originalEnvToken == null) { - delete process.env.CLAWDBOT_GATEWAY_TOKEN; + delete process.env.MOLTBOT_GATEWAY_TOKEN; } else { - process.env.CLAWDBOT_GATEWAY_TOKEN = originalEnvToken; + process.env.MOLTBOT_GATEWAY_TOKEN = originalEnvToken; } if (originalEnvPassword == null) { - delete process.env.CLAWDBOT_GATEWAY_PASSWORD; + delete process.env.MOLTBOT_GATEWAY_PASSWORD; } else { - process.env.CLAWDBOT_GATEWAY_PASSWORD = originalEnvPassword; + process.env.MOLTBOT_GATEWAY_PASSWORD = originalEnvPassword; } }); @@ -1033,7 +1033,7 @@ describe("security audit", () => { }); it("prefers env token over local config token", async () => { - process.env.CLAWDBOT_GATEWAY_TOKEN = "env-token"; + process.env.MOLTBOT_GATEWAY_TOKEN = "env-token"; let capturedAuth: { token?: string; password?: string } | undefined; const cfg: MoltbotConfig = { gateway: { @@ -1139,7 +1139,7 @@ describe("security audit", () => { }); it("ignores env token when gateway.mode is remote", async () => { - process.env.CLAWDBOT_GATEWAY_TOKEN = "env-token"; + process.env.MOLTBOT_GATEWAY_TOKEN = "env-token"; let capturedAuth: { token?: string; password?: string } | undefined; const cfg: MoltbotConfig = { gateway: { @@ -1215,7 +1215,7 @@ describe("security audit", () => { }); it("prefers env password over remote password", async () => { - process.env.CLAWDBOT_GATEWAY_PASSWORD = "env-pass"; + process.env.MOLTBOT_GATEWAY_PASSWORD = "env-pass"; let capturedAuth: { token?: string; password?: string } | undefined; const cfg: MoltbotConfig = { gateway: { diff --git a/src/security/audit.ts b/src/security/audit.ts index 681d14c1d..01cf68182 100644 --- a/src/security/audit.ts +++ b/src/security/audit.ts @@ -818,10 +818,10 @@ async function maybeProbeGateway(params: { ? typeof remote?.token === "string" && remote.token.trim() ? remote.token.trim() : undefined - : process.env.CLAWDBOT_GATEWAY_TOKEN?.trim() || + : process.env.MOLTBOT_GATEWAY_TOKEN?.trim() || (typeof authToken === "string" && authToken.trim() ? authToken.trim() : undefined); const password = - process.env.CLAWDBOT_GATEWAY_PASSWORD?.trim() || + process.env.MOLTBOT_GATEWAY_PASSWORD?.trim() || (mode === "remote" ? typeof remote?.password === "string" && remote.password.trim() ? remote.password.trim() diff --git a/src/security/fix.test.ts b/src/security/fix.test.ts index 8dd2e5f2d..5e220011e 100644 --- a/src/security/fix.test.ts +++ b/src/security/fix.test.ts @@ -54,8 +54,8 @@ describe("security fix", () => { const env = { ...process.env, - CLAWDBOT_STATE_DIR: stateDir, - CLAWDBOT_CONFIG_PATH: "", + MOLTBOT_STATE_DIR: stateDir, + MOLTBOT_CONFIG_PATH: "", }; const res = await fixSecurityFootguns({ env }); @@ -123,8 +123,8 @@ describe("security fix", () => { const env = { ...process.env, - CLAWDBOT_STATE_DIR: stateDir, - CLAWDBOT_CONFIG_PATH: "", + MOLTBOT_STATE_DIR: stateDir, + MOLTBOT_CONFIG_PATH: "", }; const res = await fixSecurityFootguns({ env }); @@ -169,8 +169,8 @@ describe("security fix", () => { const env = { ...process.env, - CLAWDBOT_STATE_DIR: stateDir, - CLAWDBOT_CONFIG_PATH: "", + MOLTBOT_STATE_DIR: stateDir, + MOLTBOT_CONFIG_PATH: "", }; const res = await fixSecurityFootguns({ env }); @@ -194,8 +194,8 @@ describe("security fix", () => { const env = { ...process.env, - CLAWDBOT_STATE_DIR: stateDir, - CLAWDBOT_CONFIG_PATH: "", + MOLTBOT_STATE_DIR: stateDir, + MOLTBOT_CONFIG_PATH: "", }; const res = await fixSecurityFootguns({ env }); @@ -251,8 +251,8 @@ describe("security fix", () => { const env = { ...process.env, - CLAWDBOT_STATE_DIR: stateDir, - CLAWDBOT_CONFIG_PATH: "", + MOLTBOT_STATE_DIR: stateDir, + MOLTBOT_CONFIG_PATH: "", }; const res = await fixSecurityFootguns({ env }); diff --git a/src/telegram/accounts.ts b/src/telegram/accounts.ts index 80eb535a3..f1aff3730 100644 --- a/src/telegram/accounts.ts +++ b/src/telegram/accounts.ts @@ -6,7 +6,7 @@ import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/session-key.j import { resolveTelegramToken } from "./token.js"; const debugAccounts = (...args: unknown[]) => { - if (isTruthyEnvValue(process.env.CLAWDBOT_DEBUG_TELEGRAM_ACCOUNTS)) { + if (isTruthyEnvValue(process.env.MOLTBOT_DEBUG_TELEGRAM_ACCOUNTS)) { console.warn("[telegram:accounts]", ...args); } }; diff --git a/src/telegram/fetch.test.ts b/src/telegram/fetch.test.ts index 17cda1d00..e6a0e1e19 100644 --- a/src/telegram/fetch.test.ts +++ b/src/telegram/fetch.test.ts @@ -39,7 +39,7 @@ describe("resolveTelegramFetch", () => { }); it("honors env enable override", async () => { - vi.stubEnv("CLAWDBOT_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY", "1"); + vi.stubEnv("MOLTBOT_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY", "1"); globalThis.fetch = vi.fn(async () => ({})) as unknown as typeof fetch; const { resolveTelegramFetch, setDefaultAutoSelectFamily } = await loadModule(); resolveTelegramFetch(); @@ -54,7 +54,7 @@ describe("resolveTelegramFetch", () => { }); it("env disable override wins over config", async () => { - vi.stubEnv("CLAWDBOT_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY", "1"); + vi.stubEnv("MOLTBOT_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY", "1"); globalThis.fetch = vi.fn(async () => ({})) as unknown as typeof fetch; const { resolveTelegramFetch, setDefaultAutoSelectFamily } = await loadModule(); resolveTelegramFetch(undefined, { network: { autoSelectFamily: true } }); diff --git a/src/telegram/network-config.test.ts b/src/telegram/network-config.test.ts index cb4bc4c6e..9131ec740 100644 --- a/src/telegram/network-config.test.ts +++ b/src/telegram/network-config.test.ts @@ -6,25 +6,25 @@ describe("resolveTelegramAutoSelectFamilyDecision", () => { it("prefers env enable over env disable", () => { const decision = resolveTelegramAutoSelectFamilyDecision({ env: { - CLAWDBOT_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY: "1", - CLAWDBOT_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY: "1", + MOLTBOT_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY: "1", + MOLTBOT_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY: "1", }, nodeMajor: 22, }); expect(decision).toEqual({ value: true, - source: "env:CLAWDBOT_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY", + source: "env:MOLTBOT_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY", }); }); it("uses env disable when set", () => { const decision = resolveTelegramAutoSelectFamilyDecision({ - env: { CLAWDBOT_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY: "1" }, + env: { MOLTBOT_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY: "1" }, nodeMajor: 22, }); expect(decision).toEqual({ value: false, - source: "env:CLAWDBOT_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY", + source: "env:MOLTBOT_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY", }); }); diff --git a/src/telegram/network-config.ts b/src/telegram/network-config.ts index ac5dd05a7..21fa5413c 100644 --- a/src/telegram/network-config.ts +++ b/src/telegram/network-config.ts @@ -4,8 +4,8 @@ import { isTruthyEnvValue } from "../infra/env.js"; import type { TelegramNetworkConfig } from "../config/types.telegram.js"; export const TELEGRAM_DISABLE_AUTO_SELECT_FAMILY_ENV = - "CLAWDBOT_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY"; -export const TELEGRAM_ENABLE_AUTO_SELECT_FAMILY_ENV = "CLAWDBOT_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY"; + "MOLTBOT_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY"; +export const TELEGRAM_ENABLE_AUTO_SELECT_FAMILY_ENV = "MOLTBOT_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY"; export type TelegramAutoSelectFamilyDecision = { value: boolean | null; diff --git a/src/telegram/pairing-store.test.ts b/src/telegram/pairing-store.test.ts index 5a13e4658..910e9efe2 100644 --- a/src/telegram/pairing-store.test.ts +++ b/src/telegram/pairing-store.test.ts @@ -12,14 +12,14 @@ import { } from "./pairing-store.js"; async function withTempStateDir(fn: (stateDir: string) => Promise) { - const previous = process.env.CLAWDBOT_STATE_DIR; + const previous = process.env.MOLTBOT_STATE_DIR; const dir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-pairing-")); - process.env.CLAWDBOT_STATE_DIR = dir; + process.env.MOLTBOT_STATE_DIR = dir; try { return await fn(dir); } finally { - if (previous === undefined) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = previous; + if (previous === undefined) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = previous; await fs.rm(dir, { recursive: true, force: true }); } } diff --git a/src/telegram/update-offset-store.test.ts b/src/telegram/update-offset-store.test.ts index cab586173..8af580863 100644 --- a/src/telegram/update-offset-store.test.ts +++ b/src/telegram/update-offset-store.test.ts @@ -7,14 +7,14 @@ import { describe, expect, it } from "vitest"; import { readTelegramUpdateOffset, writeTelegramUpdateOffset } from "./update-offset-store.js"; async function withTempStateDir(fn: (dir: string) => Promise) { - const previous = process.env.CLAWDBOT_STATE_DIR; + const previous = process.env.MOLTBOT_STATE_DIR; const dir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-telegram-")); - process.env.CLAWDBOT_STATE_DIR = dir; + process.env.MOLTBOT_STATE_DIR = dir; try { return await fn(dir); } finally { - if (previous === undefined) delete process.env.CLAWDBOT_STATE_DIR; - else process.env.CLAWDBOT_STATE_DIR = previous; + if (previous === undefined) delete process.env.MOLTBOT_STATE_DIR; + else process.env.MOLTBOT_STATE_DIR = previous; await fs.rm(dir, { recursive: true, force: true }); } } diff --git a/src/tts/tts.test.ts b/src/tts/tts.test.ts index 8462cba01..6668443f3 100644 --- a/src/tts/tts.test.ts +++ b/src/tts/tts.test.ts @@ -449,8 +449,8 @@ describe("tts", () => { }; it("skips auto-TTS when inbound audio gating is on and the message is not audio", async () => { - const prevPrefs = process.env.CLAWDBOT_TTS_PREFS; - process.env.CLAWDBOT_TTS_PREFS = `/tmp/tts-test-${Date.now()}.json`; + const prevPrefs = process.env.MOLTBOT_TTS_PREFS; + process.env.MOLTBOT_TTS_PREFS = `/tmp/tts-test-${Date.now()}.json`; const originalFetch = globalThis.fetch; const fetchMock = vi.fn(async () => ({ ok: true, @@ -470,12 +470,12 @@ describe("tts", () => { expect(fetchMock).not.toHaveBeenCalled(); globalThis.fetch = originalFetch; - process.env.CLAWDBOT_TTS_PREFS = prevPrefs; + process.env.MOLTBOT_TTS_PREFS = prevPrefs; }); it("attempts auto-TTS when inbound audio gating is on and the message is audio", async () => { - const prevPrefs = process.env.CLAWDBOT_TTS_PREFS; - process.env.CLAWDBOT_TTS_PREFS = `/tmp/tts-test-${Date.now()}.json`; + const prevPrefs = process.env.MOLTBOT_TTS_PREFS; + process.env.MOLTBOT_TTS_PREFS = `/tmp/tts-test-${Date.now()}.json`; const originalFetch = globalThis.fetch; const fetchMock = vi.fn(async () => ({ ok: true, @@ -494,12 +494,12 @@ describe("tts", () => { expect(fetchMock).toHaveBeenCalledTimes(1); globalThis.fetch = originalFetch; - process.env.CLAWDBOT_TTS_PREFS = prevPrefs; + process.env.MOLTBOT_TTS_PREFS = prevPrefs; }); it("skips auto-TTS in tagged mode unless a tts tag is present", async () => { - const prevPrefs = process.env.CLAWDBOT_TTS_PREFS; - process.env.CLAWDBOT_TTS_PREFS = `/tmp/tts-test-${Date.now()}.json`; + const prevPrefs = process.env.MOLTBOT_TTS_PREFS; + process.env.MOLTBOT_TTS_PREFS = `/tmp/tts-test-${Date.now()}.json`; const originalFetch = globalThis.fetch; const fetchMock = vi.fn(async () => ({ ok: true, @@ -526,12 +526,12 @@ describe("tts", () => { expect(fetchMock).not.toHaveBeenCalled(); globalThis.fetch = originalFetch; - process.env.CLAWDBOT_TTS_PREFS = prevPrefs; + process.env.MOLTBOT_TTS_PREFS = prevPrefs; }); it("runs auto-TTS in tagged mode when tags are present", async () => { - const prevPrefs = process.env.CLAWDBOT_TTS_PREFS; - process.env.CLAWDBOT_TTS_PREFS = `/tmp/tts-test-${Date.now()}.json`; + const prevPrefs = process.env.MOLTBOT_TTS_PREFS; + process.env.MOLTBOT_TTS_PREFS = `/tmp/tts-test-${Date.now()}.json`; const originalFetch = globalThis.fetch; const fetchMock = vi.fn(async () => ({ ok: true, @@ -557,7 +557,7 @@ describe("tts", () => { expect(fetchMock).toHaveBeenCalledTimes(1); globalThis.fetch = originalFetch; - process.env.CLAWDBOT_TTS_PREFS = prevPrefs; + process.env.MOLTBOT_TTS_PREFS = prevPrefs; }); }); }); diff --git a/src/tts/tts.ts b/src/tts/tts.ts index faa83d3a6..1423dc7a4 100644 --- a/src/tts/tts.ts +++ b/src/tts/tts.ts @@ -304,7 +304,7 @@ export function resolveTtsConfig(cfg: MoltbotConfig): ResolvedTtsConfig { export function resolveTtsPrefsPath(config: ResolvedTtsConfig): string { if (config.prefsPath?.trim()) return resolveUserPath(config.prefsPath.trim()); - const envPath = process.env.CLAWDBOT_TTS_PREFS?.trim(); + const envPath = process.env.MOLTBOT_TTS_PREFS?.trim(); if (envPath) return resolveUserPath(envPath); return path.join(CONFIG_DIR, "settings", "tts.json"); } diff --git a/src/tui/gateway-chat.ts b/src/tui/gateway-chat.ts index c13d48ccf..f014d1b10 100644 --- a/src/tui/gateway-chat.ts +++ b/src/tui/gateway-chat.ts @@ -235,7 +235,7 @@ export function resolveGatewayConnection(opts: GatewayConnectionOptions) { ? typeof remote?.token === "string" && remote.token.trim().length > 0 ? remote.token.trim() : undefined - : process.env.CLAWDBOT_GATEWAY_TOKEN?.trim() || + : process.env.MOLTBOT_GATEWAY_TOKEN?.trim() || (typeof authToken === "string" && authToken.trim().length > 0 ? authToken.trim() : undefined)); @@ -244,7 +244,7 @@ export function resolveGatewayConnection(opts: GatewayConnectionOptions) { (typeof opts.password === "string" && opts.password.trim().length > 0 ? opts.password.trim() : undefined) || - process.env.CLAWDBOT_GATEWAY_PASSWORD?.trim() || + process.env.MOLTBOT_GATEWAY_PASSWORD?.trim() || (typeof remote?.password === "string" && remote.password.trim().length > 0 ? remote.password.trim() : undefined); diff --git a/src/utils.ts b/src/utils.ts index 7c441f4f1..f13be988a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -215,9 +215,9 @@ export function resolveConfigDir( env: NodeJS.ProcessEnv = process.env, homedir: () => string = os.homedir, ): string { - const override = env.MOLTBOT_STATE_DIR?.trim() || env.CLAWDBOT_STATE_DIR?.trim(); + const override = env.MOLTBOT_STATE_DIR?.trim() || env.MOLTBOT_STATE_DIR?.trim(); if (override) return resolveUserPath(override); - const legacyDir = path.join(homedir(), ".clawdbot"); + const legacyDir = path.join(homedir(), ".moltbot"); const newDir = path.join(homedir(), ".moltbot"); try { const hasLegacy = fs.existsSync(legacyDir); @@ -282,5 +282,5 @@ export function formatTerminalLink( return `\u001b]8;;${safeUrl}\u0007${safeLabel}\u001b]8;;\u0007`; } -// Configuration root; can be overridden via CLAWDBOT_STATE_DIR. +// Configuration root; can be overridden via MOLTBOT_STATE_DIR. export const CONFIG_DIR = resolveConfigDir(); diff --git a/src/version.ts b/src/version.ts index 18c3a3b73..5260cb86c 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1,6 +1,6 @@ import { createRequire } from "node:module"; -declare const __CLAWDBOT_VERSION__: string | undefined; +declare const __MOLTBOT_VERSION__: string | undefined; function readVersionFromPackageJson(): string | null { try { @@ -16,7 +16,7 @@ function readVersionFromPackageJson(): string | null { // - Embedded/bundled builds: injected define or env var. // - Dev/npm builds: package.json. export const VERSION = - (typeof __CLAWDBOT_VERSION__ === "string" && __CLAWDBOT_VERSION__) || - process.env.CLAWDBOT_BUNDLED_VERSION || + (typeof __MOLTBOT_VERSION__ === "string" && __MOLTBOT_VERSION__) || + process.env.MOLTBOT_BUNDLED_VERSION || readVersionFromPackageJson() || "0.0.0"; diff --git a/src/web/accounts.whatsapp-auth.test.ts b/src/web/accounts.whatsapp-auth.test.ts index b754a8982..13758a6d9 100644 --- a/src/web/accounts.whatsapp-auth.test.ts +++ b/src/web/accounts.whatsapp-auth.test.ts @@ -15,16 +15,16 @@ describe("hasAnyWhatsAppAuth", () => { }; beforeEach(() => { - previousOauthDir = process.env.CLAWDBOT_OAUTH_DIR; + previousOauthDir = process.env.MOLTBOT_OAUTH_DIR; tempOauthDir = fs.mkdtempSync(path.join(os.tmpdir(), "moltbot-oauth-")); - process.env.CLAWDBOT_OAUTH_DIR = tempOauthDir; + process.env.MOLTBOT_OAUTH_DIR = tempOauthDir; }); afterEach(() => { if (previousOauthDir === undefined) { - delete process.env.CLAWDBOT_OAUTH_DIR; + delete process.env.MOLTBOT_OAUTH_DIR; } else { - process.env.CLAWDBOT_OAUTH_DIR = previousOauthDir; + process.env.MOLTBOT_OAUTH_DIR = previousOauthDir; } if (tempOauthDir) { fs.rmSync(tempOauthDir, { recursive: true, force: true }); diff --git a/src/web/session.test.ts b/src/web/session.test.ts index db38c5893..7a2180fbb 100644 --- a/src/web/session.test.ts +++ b/src/web/session.test.ts @@ -106,7 +106,7 @@ describe("web session", () => { }); it("does not clobber creds backup when creds.json is corrupted", async () => { - const credsSuffix = path.join(".clawdbot", "credentials", "whatsapp", "default", "creds.json"); + const credsSuffix = path.join(".moltbot", "credentials", "whatsapp", "default", "creds.json"); const copySpy = vi.spyOn(fsSync, "copyFileSync").mockImplementation(() => {}); const existsSpy = vi.spyOn(fsSync, "existsSync").mockImplementation((p) => { @@ -182,9 +182,9 @@ describe("web session", () => { }); it("rotates creds backup when creds.json is valid JSON", async () => { - const credsSuffix = path.join(".clawdbot", "credentials", "whatsapp", "default", "creds.json"); + const credsSuffix = path.join(".moltbot", "credentials", "whatsapp", "default", "creds.json"); const backupSuffix = path.join( - ".clawdbot", + ".moltbot", "credentials", "whatsapp", "default", diff --git a/src/wizard/onboarding.finalize.ts b/src/wizard/onboarding.finalize.ts index 96a4a4bf6..6bb38d469 100644 --- a/src/wizard/onboarding.finalize.ts +++ b/src/wizard/onboarding.finalize.ts @@ -305,7 +305,7 @@ export async function finalizeOnboardingWizard(options: FinalizeOnboardingOption await prompter.note( [ "Gateway token: shared auth for the Gateway + Control UI.", - "Stored in: ~/.clawdbot/moltbot.json (gateway.auth.token) or CLAWDBOT_GATEWAY_TOKEN.", + "Stored in: ~/.moltbot/moltbot.json (gateway.auth.token) or MOLTBOT_GATEWAY_TOKEN.", "Web UI stores a copy in this browser's localStorage (moltbot.control.settings.v1).", `Get the tokenized link anytime: ${formatCliCommand("moltbot dashboard --no-open")}`, ].join("\n"), diff --git a/src/wizard/onboarding.test.ts b/src/wizard/onboarding.test.ts index df832391e..73c1b65a7 100644 --- a/src/wizard/onboarding.test.ts +++ b/src/wizard/onboarding.test.ts @@ -77,7 +77,7 @@ vi.mock("../tui/tui.js", () => ({ describe("runOnboardingWizard", () => { it("exits when config is invalid", async () => { readConfigFileSnapshot.mockResolvedValueOnce({ - path: "/tmp/.clawdbot/moltbot.json", + path: "/tmp/.moltbot/moltbot.json", exists: true, raw: "{}", parsed: {}, diff --git a/src/wizard/onboarding.ts b/src/wizard/onboarding.ts index 75543ca19..2f6cc15db 100644 --- a/src/wizard/onboarding.ts +++ b/src/wizard/onboarding.ts @@ -278,8 +278,8 @@ export async function runOnboardingWizard( const localUrl = `ws://127.0.0.1:${localPort}`; const localProbe = await probeGatewayReachable({ url: localUrl, - token: baseConfig.gateway?.auth?.token ?? process.env.CLAWDBOT_GATEWAY_TOKEN, - password: baseConfig.gateway?.auth?.password ?? process.env.CLAWDBOT_GATEWAY_PASSWORD, + token: baseConfig.gateway?.auth?.token ?? process.env.MOLTBOT_GATEWAY_TOKEN, + password: baseConfig.gateway?.auth?.password ?? process.env.MOLTBOT_GATEWAY_PASSWORD, }); const remoteUrl = baseConfig.gateway?.remote?.url?.trim() ?? ""; const remoteProbe = remoteUrl diff --git a/test/gateway.multi.e2e.test.ts b/test/gateway.multi.e2e.test.ts index 3885dfc02..96b4b8f23 100644 --- a/test/gateway.multi.e2e.test.ts +++ b/test/gateway.multi.e2e.test.ts @@ -127,13 +127,13 @@ const spawnGatewayInstance = async (name: string): Promise => { env: { ...process.env, HOME: homeDir, - CLAWDBOT_CONFIG_PATH: configPath, - CLAWDBOT_STATE_DIR: stateDir, - CLAWDBOT_GATEWAY_TOKEN: "", - CLAWDBOT_GATEWAY_PASSWORD: "", - CLAWDBOT_SKIP_CHANNELS: "1", - CLAWDBOT_SKIP_BROWSER_CONTROL_SERVER: "1", - CLAWDBOT_SKIP_CANVAS_HOST: "1", + MOLTBOT_CONFIG_PATH: configPath, + MOLTBOT_STATE_DIR: stateDir, + MOLTBOT_GATEWAY_TOKEN: "", + MOLTBOT_GATEWAY_PASSWORD: "", + MOLTBOT_SKIP_CHANNELS: "1", + MOLTBOT_SKIP_BROWSER_CONTROL_SERVER: "1", + MOLTBOT_SKIP_CANVAS_HOST: "1", }, stdio: ["ignore", "pipe", "pipe"], }, @@ -335,8 +335,8 @@ const waitForNodeStatus = async (inst: GatewayInstance, nodeId: string, timeoutM const list = (await runCliJson( ["nodes", "status", "--json", "--url", `ws://127.0.0.1:${inst.port}`], { - CLAWDBOT_GATEWAY_TOKEN: inst.gatewayToken, - CLAWDBOT_GATEWAY_PASSWORD: "", + MOLTBOT_GATEWAY_TOKEN: inst.gatewayToken, + MOLTBOT_GATEWAY_PASSWORD: "", }, )) as NodeListPayload; const match = list.nodes?.find((n) => n.nodeId === nodeId); @@ -370,14 +370,14 @@ describe("gateway multi-instance e2e", () => { const [healthA, healthB] = (await Promise.all([ runCliJson(["health", "--json", "--timeout", "10000"], { - CLAWDBOT_GATEWAY_PORT: String(gwA.port), - CLAWDBOT_GATEWAY_TOKEN: gwA.gatewayToken, - CLAWDBOT_GATEWAY_PASSWORD: "", + MOLTBOT_GATEWAY_PORT: String(gwA.port), + MOLTBOT_GATEWAY_TOKEN: gwA.gatewayToken, + MOLTBOT_GATEWAY_PASSWORD: "", }), runCliJson(["health", "--json", "--timeout", "10000"], { - CLAWDBOT_GATEWAY_PORT: String(gwB.port), - CLAWDBOT_GATEWAY_TOKEN: gwB.gatewayToken, - CLAWDBOT_GATEWAY_PASSWORD: "", + MOLTBOT_GATEWAY_PORT: String(gwB.port), + MOLTBOT_GATEWAY_TOKEN: gwB.gatewayToken, + MOLTBOT_GATEWAY_PASSWORD: "", }), ])) as [HealthPayload, HealthPayload]; expect(healthA.ok).toBe(true); diff --git a/test/helpers/temp-home.ts b/test/helpers/temp-home.ts index b33716d63..6b241f6fe 100644 --- a/test/helpers/temp-home.ts +++ b/test/helpers/temp-home.ts @@ -18,7 +18,7 @@ function snapshotEnv(): EnvSnapshot { userProfile: process.env.USERPROFILE, homeDrive: process.env.HOMEDRIVE, homePath: process.env.HOMEPATH, - stateDir: process.env.CLAWDBOT_STATE_DIR, + stateDir: process.env.MOLTBOT_STATE_DIR, }; } @@ -31,7 +31,7 @@ function restoreEnv(snapshot: EnvSnapshot) { restoreKey("USERPROFILE", snapshot.userProfile); restoreKey("HOMEDRIVE", snapshot.homeDrive); restoreKey("HOMEPATH", snapshot.homePath); - restoreKey("CLAWDBOT_STATE_DIR", snapshot.stateDir); + restoreKey("MOLTBOT_STATE_DIR", snapshot.stateDir); } function snapshotExtraEnv(keys: string[]): Record { @@ -50,7 +50,7 @@ function restoreExtraEnv(snapshot: Record) { function setTempHome(base: string) { process.env.HOME = base; process.env.USERPROFILE = base; - process.env.CLAWDBOT_STATE_DIR = path.join(base, ".clawdbot"); + process.env.MOLTBOT_STATE_DIR = path.join(base, ".clawdbot"); if (process.platform !== "win32") return; const match = base.match(/^([A-Za-z]:)(.*)$/); diff --git a/test/provider-timeout.e2e.test.ts b/test/provider-timeout.e2e.test.ts index 458c2136a..a63f598b8 100644 --- a/test/provider-timeout.e2e.test.ts +++ b/test/provider-timeout.e2e.test.ts @@ -118,12 +118,12 @@ describe("provider timeouts (e2e)", () => { async () => { const prev = { home: process.env.HOME, - configPath: process.env.CLAWDBOT_CONFIG_PATH, - token: process.env.CLAWDBOT_GATEWAY_TOKEN, - skipChannels: process.env.CLAWDBOT_SKIP_CHANNELS, - skipGmail: process.env.CLAWDBOT_SKIP_GMAIL_WATCHER, - skipCron: process.env.CLAWDBOT_SKIP_CRON, - skipCanvas: process.env.CLAWDBOT_SKIP_CANVAS_HOST, + configPath: process.env.MOLTBOT_CONFIG_PATH, + token: process.env.MOLTBOT_GATEWAY_TOKEN, + skipChannels: process.env.MOLTBOT_SKIP_CHANNELS, + skipGmail: process.env.MOLTBOT_SKIP_GMAIL_WATCHER, + skipCron: process.env.MOLTBOT_SKIP_CRON, + skipCanvas: process.env.MOLTBOT_SKIP_CANVAS_HOST, }; const originalFetch = globalThis.fetch; @@ -153,13 +153,13 @@ describe("provider timeouts (e2e)", () => { const tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-timeout-e2e-")); process.env.HOME = tempHome; - process.env.CLAWDBOT_SKIP_CHANNELS = "1"; - process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = "1"; - process.env.CLAWDBOT_SKIP_CRON = "1"; - process.env.CLAWDBOT_SKIP_CANVAS_HOST = "1"; + process.env.MOLTBOT_SKIP_CHANNELS = "1"; + process.env.MOLTBOT_SKIP_GMAIL_WATCHER = "1"; + process.env.MOLTBOT_SKIP_CRON = "1"; + process.env.MOLTBOT_SKIP_CANVAS_HOST = "1"; const token = `test-${randomUUID()}`; - process.env.CLAWDBOT_GATEWAY_TOKEN = token; + process.env.MOLTBOT_GATEWAY_TOKEN = token; const configDir = path.join(tempHome, ".clawdbot"); await fs.mkdir(configDir, { recursive: true }); @@ -217,7 +217,7 @@ describe("provider timeouts (e2e)", () => { }; await fs.writeFile(configPath, `${JSON.stringify(cfg, null, 2)}\n`); - process.env.CLAWDBOT_CONFIG_PATH = configPath; + process.env.MOLTBOT_CONFIG_PATH = configPath; const port = await getFreeGatewayPort(); const server = await startGatewayServer(port, { @@ -265,18 +265,18 @@ describe("provider timeouts (e2e)", () => { (globalThis as unknown as { fetch: unknown }).fetch = originalFetch; if (prev.home === undefined) delete process.env.HOME; else process.env.HOME = prev.home; - if (prev.configPath === undefined) delete process.env.CLAWDBOT_CONFIG_PATH; - else process.env.CLAWDBOT_CONFIG_PATH = prev.configPath; - if (prev.token === undefined) delete process.env.CLAWDBOT_GATEWAY_TOKEN; - else process.env.CLAWDBOT_GATEWAY_TOKEN = prev.token; - if (prev.skipChannels === undefined) delete process.env.CLAWDBOT_SKIP_CHANNELS; - else process.env.CLAWDBOT_SKIP_CHANNELS = prev.skipChannels; - if (prev.skipGmail === undefined) delete process.env.CLAWDBOT_SKIP_GMAIL_WATCHER; - else process.env.CLAWDBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; - if (prev.skipCron === undefined) delete process.env.CLAWDBOT_SKIP_CRON; - else process.env.CLAWDBOT_SKIP_CRON = prev.skipCron; - if (prev.skipCanvas === undefined) delete process.env.CLAWDBOT_SKIP_CANVAS_HOST; - else process.env.CLAWDBOT_SKIP_CANVAS_HOST = prev.skipCanvas; + if (prev.configPath === undefined) delete process.env.MOLTBOT_CONFIG_PATH; + else process.env.MOLTBOT_CONFIG_PATH = prev.configPath; + if (prev.token === undefined) delete process.env.MOLTBOT_GATEWAY_TOKEN; + else process.env.MOLTBOT_GATEWAY_TOKEN = prev.token; + if (prev.skipChannels === undefined) delete process.env.MOLTBOT_SKIP_CHANNELS; + else process.env.MOLTBOT_SKIP_CHANNELS = prev.skipChannels; + if (prev.skipGmail === undefined) delete process.env.MOLTBOT_SKIP_GMAIL_WATCHER; + else process.env.MOLTBOT_SKIP_GMAIL_WATCHER = prev.skipGmail; + if (prev.skipCron === undefined) delete process.env.MOLTBOT_SKIP_CRON; + else process.env.MOLTBOT_SKIP_CRON = prev.skipCron; + if (prev.skipCanvas === undefined) delete process.env.MOLTBOT_SKIP_CANVAS_HOST; + else process.env.MOLTBOT_SKIP_CANVAS_HOST = prev.skipCanvas; } }, ); diff --git a/test/test-env.ts b/test/test-env.ts index 308170f35..77992f165 100644 --- a/test/test-env.ts +++ b/test/test-env.ts @@ -43,8 +43,8 @@ function loadProfileEnv(): void { export function installTestEnv(): { cleanup: () => void; tempHome: string } { const live = process.env.LIVE === "1" || - process.env.CLAWDBOT_LIVE_TEST === "1" || - process.env.CLAWDBOT_LIVE_GATEWAY === "1"; + process.env.MOLTBOT_LIVE_TEST === "1" || + process.env.MOLTBOT_LIVE_GATEWAY === "1"; // Live tests must use the real user environment (keys, profiles, config). // The default test env isolates HOME to avoid touching real state. @@ -54,21 +54,21 @@ export function installTestEnv(): { cleanup: () => void; tempHome: string } { } const restore: RestoreEntry[] = [ - { key: "CLAWDBOT_TEST_FAST", value: process.env.CLAWDBOT_TEST_FAST }, + { key: "MOLTBOT_TEST_FAST", value: process.env.MOLTBOT_TEST_FAST }, { key: "HOME", value: process.env.HOME }, { key: "USERPROFILE", value: process.env.USERPROFILE }, { key: "XDG_CONFIG_HOME", value: process.env.XDG_CONFIG_HOME }, { key: "XDG_DATA_HOME", value: process.env.XDG_DATA_HOME }, { key: "XDG_STATE_HOME", value: process.env.XDG_STATE_HOME }, { key: "XDG_CACHE_HOME", value: process.env.XDG_CACHE_HOME }, - { key: "CLAWDBOT_STATE_DIR", value: process.env.CLAWDBOT_STATE_DIR }, - { key: "CLAWDBOT_CONFIG_PATH", value: process.env.CLAWDBOT_CONFIG_PATH }, - { key: "CLAWDBOT_GATEWAY_PORT", value: process.env.CLAWDBOT_GATEWAY_PORT }, - { key: "CLAWDBOT_BRIDGE_ENABLED", value: process.env.CLAWDBOT_BRIDGE_ENABLED }, - { key: "CLAWDBOT_BRIDGE_HOST", value: process.env.CLAWDBOT_BRIDGE_HOST }, - { key: "CLAWDBOT_BRIDGE_PORT", value: process.env.CLAWDBOT_BRIDGE_PORT }, - { key: "CLAWDBOT_CANVAS_HOST_PORT", value: process.env.CLAWDBOT_CANVAS_HOST_PORT }, - { key: "CLAWDBOT_TEST_HOME", value: process.env.CLAWDBOT_TEST_HOME }, + { key: "MOLTBOT_STATE_DIR", value: process.env.MOLTBOT_STATE_DIR }, + { key: "MOLTBOT_CONFIG_PATH", value: process.env.MOLTBOT_CONFIG_PATH }, + { key: "MOLTBOT_GATEWAY_PORT", value: process.env.MOLTBOT_GATEWAY_PORT }, + { key: "MOLTBOT_BRIDGE_ENABLED", value: process.env.MOLTBOT_BRIDGE_ENABLED }, + { key: "MOLTBOT_BRIDGE_HOST", value: process.env.MOLTBOT_BRIDGE_HOST }, + { key: "MOLTBOT_BRIDGE_PORT", value: process.env.MOLTBOT_BRIDGE_PORT }, + { key: "MOLTBOT_CANVAS_HOST_PORT", value: process.env.MOLTBOT_CANVAS_HOST_PORT }, + { key: "MOLTBOT_TEST_HOME", value: process.env.MOLTBOT_TEST_HOME }, { key: "TELEGRAM_BOT_TOKEN", value: process.env.TELEGRAM_BOT_TOKEN }, { key: "DISCORD_BOT_TOKEN", value: process.env.DISCORD_BOT_TOKEN }, { key: "SLACK_BOT_TOKEN", value: process.env.SLACK_BOT_TOKEN }, @@ -84,19 +84,19 @@ export function installTestEnv(): { cleanup: () => void; tempHome: string } { process.env.HOME = tempHome; process.env.USERPROFILE = tempHome; - process.env.CLAWDBOT_TEST_HOME = tempHome; - process.env.CLAWDBOT_TEST_FAST = "1"; + process.env.MOLTBOT_TEST_HOME = tempHome; + process.env.MOLTBOT_TEST_FAST = "1"; // Ensure test runs never touch the developer's real config/state, even if they have overrides set. - delete process.env.CLAWDBOT_CONFIG_PATH; + delete process.env.MOLTBOT_CONFIG_PATH; // Prefer deriving state dir from HOME so nested tests that change HOME also isolate correctly. - delete process.env.CLAWDBOT_STATE_DIR; + delete process.env.MOLTBOT_STATE_DIR; // Prefer test-controlled ports over developer overrides (avoid port collisions across tests/workers). - delete process.env.CLAWDBOT_GATEWAY_PORT; - delete process.env.CLAWDBOT_BRIDGE_ENABLED; - delete process.env.CLAWDBOT_BRIDGE_HOST; - delete process.env.CLAWDBOT_BRIDGE_PORT; - delete process.env.CLAWDBOT_CANVAS_HOST_PORT; + delete process.env.MOLTBOT_GATEWAY_PORT; + delete process.env.MOLTBOT_BRIDGE_ENABLED; + delete process.env.MOLTBOT_BRIDGE_HOST; + delete process.env.MOLTBOT_BRIDGE_PORT; + delete process.env.MOLTBOT_CANVAS_HOST_PORT; // Avoid leaking real GitHub/Copilot tokens into non-live test runs. delete process.env.TELEGRAM_BOT_TOKEN; delete process.env.DISCORD_BOT_TOKEN; @@ -111,7 +111,7 @@ export function installTestEnv(): { cleanup: () => void; tempHome: string } { // Windows: prefer the legacy default state dir so auth/profile tests match real paths. if (process.platform === "win32") { - process.env.CLAWDBOT_STATE_DIR = path.join(tempHome, ".clawdbot"); + process.env.MOLTBOT_STATE_DIR = path.join(tempHome, ".clawdbot"); } process.env.XDG_CONFIG_HOME = path.join(tempHome, ".config"); diff --git a/ui/src/ui/navigation.ts b/ui/src/ui/navigation.ts index 966abec96..5d7f0c90a 100644 --- a/ui/src/ui/navigation.ts +++ b/ui/src/ui/navigation.ts @@ -177,7 +177,7 @@ export function subtitleForTab(tab: Tab) { case "chat": return "Direct gateway chat session for quick interventions."; case "config": - return "Edit ~/.clawdbot/moltbot.json safely."; + return "Edit ~/.moltbot/moltbot.json safely."; case "debug": return "Gateway snapshots, events, and manual RPC calls."; case "logs":