skykoi 2026.3.9 → 2026.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/{chrome-lo-vJbVv.js → chrome-DSXXpnUw.js} +7 -7
  2. package/dist/{deliver-BMdhV7Q5.js → deliver-DCQNDGoo.js} +1 -1
  3. package/dist/extensionAPI.js +9 -9
  4. package/dist/{image-Dzd44KC_.js → image-DRpQid7M.js} +1 -1
  5. package/dist/{pi-embedded-helpers-CXrXpoUy.js → pi-embedded-helpers-Cy5Wq8I4.js} +4 -4
  6. package/dist/plugin-sdk/index.js +7 -7
  7. package/dist/{pw-ai-DTPSxyYq.js → pw-ai-Ctem9aZt.js} +1 -1
  8. package/package.json +1 -1
  9. /package/extensions/bluebubbles/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  10. /package/extensions/copilot-proxy/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  11. /package/extensions/diagnostics-otel/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  12. /package/extensions/discord/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  13. /package/extensions/feishu/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  14. /package/extensions/google-antigravity-auth/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  15. /package/extensions/google-gemini-cli-auth/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  16. /package/extensions/googlechat/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  17. /package/extensions/imessage/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  18. /package/extensions/line/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  19. /package/extensions/llm-task/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  20. /package/extensions/lobster/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  21. /package/extensions/matrix/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  22. /package/extensions/mattermost/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  23. /package/extensions/memory-core/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  24. /package/extensions/minimax-portal-auth/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  25. /package/extensions/msteams/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  26. /package/extensions/nextcloud-talk/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  27. /package/extensions/nostr/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  28. /package/extensions/open-prose/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  29. /package/extensions/qwen-portal-auth/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  30. /package/extensions/signal/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  31. /package/extensions/slack/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  32. /package/extensions/telegram/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  33. /package/extensions/tlon/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  34. /package/extensions/twitch/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  35. /package/extensions/voice-call/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  36. /package/extensions/whatsapp/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  37. /package/extensions/zalo/{synurex.plugin.json → skykoi.plugin.json} +0 -0
  38. /package/extensions/zalouser/{synurex.plugin.json → skykoi.plugin.json} +0 -0
@@ -7,7 +7,7 @@ import fs$1 from "node:fs/promises";
7
7
  import { execFileSync, spawn } from "node:child_process";
8
8
  import { randomBytes } from "node:crypto";
9
9
  import { createServer } from "node:http";
10
- import WebSocket$1, { WebSocketServer } from "ws";
10
+ import WebSocket, { WebSocketServer } from "ws";
11
11
  import { Buffer as Buffer$1 } from "node:buffer";
12
12
  import net from "node:net";
13
13
 
@@ -135,7 +135,7 @@ async function ensureChromeExtensionRelayServer(opts) {
135
135
  let nextExtensionId = 1;
136
136
  const sendToExtension = async (payload) => {
137
137
  const ws = extensionWs;
138
- if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
138
+ if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
139
139
  ws.send(JSON.stringify(payload));
140
140
  return await new Promise((resolve, reject) => {
141
141
  const timer = setTimeout(() => {
@@ -152,12 +152,12 @@ async function ensureChromeExtensionRelayServer(opts) {
152
152
  const broadcastToCdpClients = (evt) => {
153
153
  const msg = JSON.stringify(evt);
154
154
  for (const ws of cdpClients) {
155
- if (ws.readyState !== WebSocket$1.OPEN) continue;
155
+ if (ws.readyState !== WebSocket.OPEN) continue;
156
156
  ws.send(msg);
157
157
  }
158
158
  };
159
159
  const sendResponseToCdp = (ws, res) => {
160
- if (ws.readyState !== WebSocket$1.OPEN) return;
160
+ if (ws.readyState !== WebSocket.OPEN) return;
161
161
  ws.send(JSON.stringify(res));
162
162
  };
163
163
  const ensureTargetEventsForClient = (ws, mode) => {
@@ -377,7 +377,7 @@ async function ensureChromeExtensionRelayServer(opts) {
377
377
  wssExtension.on("connection", (ws) => {
378
378
  extensionWs = ws;
379
379
  const ping = setInterval(() => {
380
- if (ws.readyState !== WebSocket$1.OPEN) return;
380
+ if (ws.readyState !== WebSocket.OPEN) return;
381
381
  ws.send(JSON.stringify({ method: "ping" }));
382
382
  }, 5e3);
383
383
  ws.on("message", (data) => {
@@ -674,7 +674,7 @@ async function fetchJson(url, timeoutMs = 1500, init) {
674
674
  }
675
675
  async function withCdpSocket(wsUrl, fn, opts) {
676
676
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
677
- const ws = new WebSocket$1(wsUrl, {
677
+ const ws = new WebSocket(wsUrl, {
678
678
  handshakeTimeout: 5e3,
679
679
  ...Object.keys(headers).length ? { headers } : {}
680
680
  });
@@ -1808,7 +1808,7 @@ async function getChromeWebSocketUrl(cdpUrl, timeoutMs = 500) {
1808
1808
  async function canOpenWebSocket(wsUrl, timeoutMs = 800) {
1809
1809
  return await new Promise((resolve) => {
1810
1810
  const headers = getHeadersWithAuth(wsUrl);
1811
- const ws = new WebSocket$1(wsUrl, {
1811
+ const ws = new WebSocket(wsUrl, {
1812
1812
  handshakeTimeout: timeoutMs,
1813
1813
  ...Object.keys(headers).length ? { headers } : {}
1814
1814
  });
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { j as normalizeAccountId$1 } from "./agent-scope-DXSQVQ2A.js";
3
3
  import { H as logVerbose, N as resolveUserPath, W as shouldLogVerbose, b as getActivePluginRegistry } from "./exec-CwGfnRxa.js";
4
- import { At as hasAlphaChannel, En as mediaKindFromMime, G as appendAssistantMessageToSessionTranscript, It as closeDispatcher, K as resolveMirroredTranscriptText, Lt as createPinnedDispatcher, Mt as resizeToJpeg, On as resolveSignalAccount, Ot as convertHeicToJpeg, Pt as saveMediaBuffer, Rt as resolvePinnedHostname, Tn as maxBytesForKind, _n as detectMime, gt as getChannelDock, jn as normalizeChannelId, jt as optimizeImageToPng, kn as getChannelPlugin, m as isMessagingToolDuplicate, on as INTERNAL_MESSAGE_CHANNEL, vn as extensionForMime, zt as resolvePinnedHostnameWithPolicy } from "./pi-embedded-helpers-CXrXpoUy.js";
4
+ import { At as hasAlphaChannel, En as mediaKindFromMime, G as appendAssistantMessageToSessionTranscript, It as closeDispatcher, K as resolveMirroredTranscriptText, Lt as createPinnedDispatcher, Mt as resizeToJpeg, On as resolveSignalAccount, Ot as convertHeicToJpeg, Pt as saveMediaBuffer, Rt as resolvePinnedHostname, Tn as maxBytesForKind, _n as detectMime, gt as getChannelDock, jn as normalizeChannelId, jt as optimizeImageToPng, kn as getChannelPlugin, m as isMessagingToolDuplicate, on as INTERNAL_MESSAGE_CHANNEL, vn as extensionForMime, zt as resolvePinnedHostnameWithPolicy } from "./pi-embedded-helpers-Cy5Wq8I4.js";
5
5
  import { t as loadConfig } from "./config-C16s_5FY.js";
6
6
  import path from "node:path";
7
7
  import fs from "node:fs/promises";
@@ -4,14 +4,14 @@ import { A as normalizeE164, B as danger, C as CONFIG_DIR, D as formatTerminalLi
4
4
  import { B as resolveSkyKoiAgentDir, C as getShellPathFromLoginShell, F as resolveApiKeyForProfile, H as DEFAULT_CONTEXT_TOKENS, I as listProfilesForProvider, L as markAuthProfileGood, M as isProfileInCooldown, N as markAuthProfileFailure, O as isTruthyEnvValue, P as markAuthProfileUsed, R as ensureAuthProfileStore, S as resolveModelAuthMode, T as resolveShellEnvFallbackTimeoutMs, U as DEFAULT_MODEL, V as resolveAuthProfileDisplayLabel, W as DEFAULT_PROVIDER, _ as getApiKeyForModel, a as modelKey, b as resolveApiKeyForProvider, c as resolveConfiguredModelRef, d as resolveThinkingDefault, f as normalizeGoogleModelId, i as isCliProvider, j as resolveAuthProfileOrder, k as parseBooleanValue$1, l as resolveDefaultModelForAgent, n as buildConfiguredAllowlistKeys, o as normalizeProviderId, r as buildModelAliasIndex, t as buildAllowedModelSet, u as resolveModelRefFromString, v as getCustomProviderApiKey, x as resolveEnvApiKey, y as requireApiKey, z as resolveAuthStorePathForDisplay } from "./model-selection-DKxD5K5m.js";
5
5
  import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-7boTx1D-.js";
6
6
  import { n as resolveCliName, t as formatCliCommand } from "./command-format-BB7fwONf.js";
7
- import { A as MediaFetchError, B as resolveTextChunkLimit, C as resolveFetch, D as markdownToIRWithMeta, E as markdownToIR, F as chunkMarkdownText, G as SILENT_REPLY_TOKEN, H as isSafeFenceBreak, I as chunkMarkdownTextWithMode, K as isSilentReplyText, L as chunkText, M as fetchWithSsrFGuard, N as resolveMarkdownTableMode, O as loadWebMedia, P as chunkByNewline, R as chunkTextWithMode, S as parseInlineDirectives$1, T as chunkMarkdownIR, U as parseFenceSpans, V as findFenceSpanAt, W as HEARTBEAT_TOKEN, _ as buildTargetResolverSignature, a as applyReplyThreading, b as parseReplyDirectives, c as shouldSuppressMessagingToolReplies, d as sendMessageSignal, f as sendReadReceiptSignal, g as streamSignalEvents, h as signalRpcRequest, i as applyReplyTagsToPayload, j as fetchRemoteMedia, k as loadWebMediaRaw, l as createReplyToModeFilterForChannel, m as signalCheck, o as filterMessagingToolDuplicates, p as sendTypingSignal, r as normalizeReplyPayloadsForDelivery, s as isRenderablePayload, t as deliverOutboundPayloads, u as resolveReplyToMode, v as normalizeChannelTargetInput, w as wrapFetchWithAbortSignal, x as splitMediaFromOutput, y as normalizeTargetForProvider, z as resolveChunkMode } from "./deliver-BMdhV7Q5.js";
8
- import { $ as updateSessionStoreEntry, $t as normalizeToolName, A as isCloudCodeAssistFormatError, An as listChannelPlugins, B as parseImageSizeError, Bn as resolveSlackAppToken, Bt as buildWorkspaceSkillCommandSpecs, C as BILLING_ERROR_USER_MESSAGE, Cn as kindFromMime, Ct as resolveGroupSessionKey, D as getApiErrorPayloadFingerprint, Dn as listEnabledSignalAccounts, Dt as resolveProfile, E as formatRawAssistantErrorForUi, En as mediaKindFromMime, Et as resolveBrowserConfig, F as isLikelyContextOverflowError, Fn as listTelegramAccountIds, Ft as SsrFBlockedError, G as appendAssistantMessageToSessionTranscript, Gn as normalizeDiscordToken, Gt as applySkillEnvOverrides, H as ensureSandboxWorkspaceForSession, Hn as normalizeChatType, Ht as loadWorkspaceSkillEntries, I as isRateLimitAssistantError, In as resolveTelegramAccount, J as readSessionUpdatedAt, Jt as applyOwnerOnlyToolPolicy, Kt as applySkillEnvOverridesFromSnapshot, L as isRawApiErrorPayload, Ln as resolveTelegramToken, M as isContextOverflowError, Mn as isWhatsAppGroupJid, Mt as resizeToJpeg, N as isFailoverAssistantError, Nn as normalizeWhatsAppTarget, Nt as getMediaDir, O as isAuthAssistantError, On as resolveSignalAccount, P as isFailoverErrorMessage, Pn as listEnabledTelegramAccounts, Pt as saveMediaBuffer, Q as updateSessionStore, Qt as expandToolGroups, R as isTimeoutErrorMessage, Rn as listBindings, S as isGoogleModelApi, Sn as isGifMedia, St as resolveConversationLabel, T as formatAssistantErrorText, Tt as registerBrowserRoutes, U as resolveSandboxContext, Un as listEnabledDiscordAccounts, Ut as resolveSkillsPromptForRun, V as sanitizeUserFacingText, Vn as resolveSlackBotToken, Vt as buildWorkspaceSkillSnapshot, W as resolveSandboxRuntimeStatus, Wn as resolveDiscordAccount, Wt as resolvePluginSkillDirs, X as saveSessionStore, Xt as collectExplicitAllowlist, Y as recordSessionMetaFromInbound, Yt as buildPluginToolGroups, Z as updateLastRoute, Zt as expandPolicyWithPluginGroups, _ as sanitizeSessionMessagesImages, _n as detectMime, _t as listChannelDocks, a as formatXHighModelHint, an as sanitizeGoogleTurnOrdering, at as normalizeDeliveryContext, b as downgradeOpenAIReasoningBlocks, bn as imageMimeFromFormat, bt as resolveChannelGroupToolsPolicy, c as normalizeReasoningLevel, cn as isInternalMessageChannel, ct as evaluateSessionFreshness, d as normalizeVerboseLevel, dn as normalizeMessageChannel, dt as resolveSessionResetType, en as resolveToolProfilePolicy, et as isCacheEnabled, f as resolveResponseUsageMode, fn as resolveGatewayMessageChannel, ft as resolveThreadFlag, g as normalizeTextForComparison, gn as GATEWAY_CLIENT_NAMES, gt as getChannelDock, h as isMessagingToolDuplicateNormalized, hn as GATEWAY_CLIENT_MODES, ht as deriveSessionMetaPatch, i as formatThinkingLevels, in as resolveBootstrapMaxChars, it as mergeDeliveryContext, j as isCompactionFailureError, jn as normalizeChannelId$1, k as isBillingAssistantError, kn as getChannelPlugin, kt as getImageMetadata, l as normalizeThinkLevel, ln as isMarkdownCapableMessageChannel, lt as resolveChannelResetConfig, mn as GATEWAY_CLIENT_IDS, mt as resolveMainSessionKey, n as validateGeminiTurns, nn as buildBootstrapContextFiles, nt as deliveryContextFromSession, o as listThinkingLevels, on as INTERNAL_MESSAGE_CHANNEL, ot as normalizeSessionDeliveryFields, p as supportsXHighThinking, pn as resolveMessageChannel, pt as DEFAULT_RESET_TRIGGERS, q as loadSessionStore, qt as resolveSandboxConfigForAgent, r as pickFallbackThinkingLevel, rn as ensureSessionHeader, rt as deliveryContextKey, s as normalizeElevatedLevel, sn as isDeliverableMessageChannel, st as resolveSessionKey$1, t as validateAnthropicTurns, tn as stripPluginOnlyAllowlist, tt as resolveCacheTtlMs$1, u as normalizeUsageDisplay, un as listDeliverableMessageChannels, ut as resolveSessionResetPolicy, v as sanitizeImageBlocks, vn as extensionForMime, vt as resolveChannelGroupPolicy, w as classifyFailoverReason, wn as MAX_IMAGE_BYTES, wt as createBrowserRouteContext, x as isAntigravityClaude, xn as isAudioFileName, xt as resolveIMessageAccount, y as sanitizeToolResultImages, yn as getFileExtension, yt as resolveChannelGroupRequireMention, z as parseImageDimensionError, zn as resolveSlackAccount } from "./pi-embedded-helpers-CXrXpoUy.js";
7
+ import { A as MediaFetchError, B as resolveTextChunkLimit, C as resolveFetch, D as markdownToIRWithMeta, E as markdownToIR, F as chunkMarkdownText, G as SILENT_REPLY_TOKEN, H as isSafeFenceBreak, I as chunkMarkdownTextWithMode, K as isSilentReplyText, L as chunkText, M as fetchWithSsrFGuard, N as resolveMarkdownTableMode, O as loadWebMedia, P as chunkByNewline, R as chunkTextWithMode, S as parseInlineDirectives$1, T as chunkMarkdownIR, U as parseFenceSpans, V as findFenceSpanAt, W as HEARTBEAT_TOKEN, _ as buildTargetResolverSignature, a as applyReplyThreading, b as parseReplyDirectives, c as shouldSuppressMessagingToolReplies, d as sendMessageSignal, f as sendReadReceiptSignal, g as streamSignalEvents, h as signalRpcRequest, i as applyReplyTagsToPayload, j as fetchRemoteMedia, k as loadWebMediaRaw, l as createReplyToModeFilterForChannel, m as signalCheck, o as filterMessagingToolDuplicates, p as sendTypingSignal, r as normalizeReplyPayloadsForDelivery, s as isRenderablePayload, t as deliverOutboundPayloads, u as resolveReplyToMode, v as normalizeChannelTargetInput, w as wrapFetchWithAbortSignal, x as splitMediaFromOutput, y as normalizeTargetForProvider, z as resolveChunkMode } from "./deliver-DCQNDGoo.js";
8
+ import { $ as updateSessionStoreEntry, $t as normalizeToolName, A as isCloudCodeAssistFormatError, An as listChannelPlugins, B as parseImageSizeError, Bn as resolveSlackAppToken, Bt as buildWorkspaceSkillCommandSpecs, C as BILLING_ERROR_USER_MESSAGE, Cn as kindFromMime, Ct as resolveGroupSessionKey, D as getApiErrorPayloadFingerprint, Dn as listEnabledSignalAccounts, Dt as resolveProfile, E as formatRawAssistantErrorForUi, En as mediaKindFromMime, Et as resolveBrowserConfig, F as isLikelyContextOverflowError, Fn as listTelegramAccountIds, Ft as SsrFBlockedError, G as appendAssistantMessageToSessionTranscript, Gn as normalizeDiscordToken, Gt as applySkillEnvOverrides, H as ensureSandboxWorkspaceForSession, Hn as normalizeChatType, Ht as loadWorkspaceSkillEntries, I as isRateLimitAssistantError, In as resolveTelegramAccount, J as readSessionUpdatedAt, Jt as applyOwnerOnlyToolPolicy, Kt as applySkillEnvOverridesFromSnapshot, L as isRawApiErrorPayload, Ln as resolveTelegramToken, M as isContextOverflowError, Mn as isWhatsAppGroupJid, Mt as resizeToJpeg, N as isFailoverAssistantError, Nn as normalizeWhatsAppTarget, Nt as getMediaDir, O as isAuthAssistantError, On as resolveSignalAccount, P as isFailoverErrorMessage, Pn as listEnabledTelegramAccounts, Pt as saveMediaBuffer, Q as updateSessionStore, Qt as expandToolGroups, R as isTimeoutErrorMessage, Rn as listBindings, S as isGoogleModelApi, Sn as isGifMedia, St as resolveConversationLabel, T as formatAssistantErrorText, Tt as registerBrowserRoutes, U as resolveSandboxContext, Un as listEnabledDiscordAccounts, Ut as resolveSkillsPromptForRun, V as sanitizeUserFacingText, Vn as resolveSlackBotToken, Vt as buildWorkspaceSkillSnapshot, W as resolveSandboxRuntimeStatus, Wn as resolveDiscordAccount, Wt as resolvePluginSkillDirs, X as saveSessionStore, Xt as collectExplicitAllowlist, Y as recordSessionMetaFromInbound, Yt as buildPluginToolGroups, Z as updateLastRoute, Zt as expandPolicyWithPluginGroups, _ as sanitizeSessionMessagesImages, _n as detectMime, _t as listChannelDocks, a as formatXHighModelHint, an as sanitizeGoogleTurnOrdering, at as normalizeDeliveryContext, b as downgradeOpenAIReasoningBlocks, bn as imageMimeFromFormat, bt as resolveChannelGroupToolsPolicy, c as normalizeReasoningLevel, cn as isInternalMessageChannel, ct as evaluateSessionFreshness, d as normalizeVerboseLevel, dn as normalizeMessageChannel, dt as resolveSessionResetType, en as resolveToolProfilePolicy, et as isCacheEnabled, f as resolveResponseUsageMode, fn as resolveGatewayMessageChannel, ft as resolveThreadFlag, g as normalizeTextForComparison, gn as GATEWAY_CLIENT_NAMES, gt as getChannelDock, h as isMessagingToolDuplicateNormalized, hn as GATEWAY_CLIENT_MODES, ht as deriveSessionMetaPatch, i as formatThinkingLevels, in as resolveBootstrapMaxChars, it as mergeDeliveryContext, j as isCompactionFailureError, jn as normalizeChannelId$1, k as isBillingAssistantError, kn as getChannelPlugin, kt as getImageMetadata, l as normalizeThinkLevel, ln as isMarkdownCapableMessageChannel, lt as resolveChannelResetConfig, mn as GATEWAY_CLIENT_IDS, mt as resolveMainSessionKey, n as validateGeminiTurns, nn as buildBootstrapContextFiles, nt as deliveryContextFromSession, o as listThinkingLevels, on as INTERNAL_MESSAGE_CHANNEL, ot as normalizeSessionDeliveryFields, p as supportsXHighThinking, pn as resolveMessageChannel, pt as DEFAULT_RESET_TRIGGERS, q as loadSessionStore, qt as resolveSandboxConfigForAgent, r as pickFallbackThinkingLevel, rn as ensureSessionHeader, rt as deliveryContextKey, s as normalizeElevatedLevel, sn as isDeliverableMessageChannel, st as resolveSessionKey$1, t as validateAnthropicTurns, tn as stripPluginOnlyAllowlist, tt as resolveCacheTtlMs$1, u as normalizeUsageDisplay, un as listDeliverableMessageChannels, ut as resolveSessionResetPolicy, v as sanitizeImageBlocks, vn as extensionForMime, vt as resolveChannelGroupPolicy, w as classifyFailoverReason, wn as MAX_IMAGE_BYTES, wt as createBrowserRouteContext, x as isAntigravityClaude, xn as isAudioFileName, xt as resolveIMessageAccount, y as sanitizeToolResultImages, yn as getFileExtension, yt as resolveChannelGroupRequireMention, z as parseImageDimensionError, zn as resolveSlackAccount } from "./pi-embedded-helpers-Cy5Wq8I4.js";
9
9
  import { A as getWebAuthAgeMs, C as getConfigValueAtPath, D as resolveAgentMaxConcurrent, E as unsetConfigValueAtPath, M as logoutWeb, O as VERSION, P as readWebSelfId, R as webAuthExists, S as unsetConfigOverride, T as setConfigValueAtPath, _ as resolveEnableState, a as validateConfigObjectWithPlugins, b as resetConfigOverrides, c as resolveTelegramCustomCommands, d as validateJsonSchemaValue, f as loadPluginManifestRegistry, g as normalizePluginsConfig, i as writeConfigFile, j as logWebSelfId, k as resolveWhatsAppAccount, l as isSafeExecutableValue, n as readConfigFileSnapshot, o as TELEGRAM_COMMAND_NAME_PATTERN, p as discoverSkyKoiPlugins, r as resolveConfigSnapshotHash, s as normalizeTelegramCommandName, t as loadConfig, u as parseDurationMs, v as resolveMemorySlotDecision, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-C16s_5FY.js";
10
10
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-EhM2JAQo.js";
11
- import { C as DEFAULT_AI_SNAPSHOT_MAX_CHARS, _ as rawDataToString, b as formatUncaughtError, h as ensureChromeExtensionRelayServer, v as extractErrorCode, y as formatErrorMessage$1 } from "./chrome-lo-vJbVv.js";
11
+ import { C as DEFAULT_AI_SNAPSHOT_MAX_CHARS, _ as rawDataToString, b as formatUncaughtError, h as ensureChromeExtensionRelayServer, v as extractErrorCode, y as formatErrorMessage$1 } from "./chrome-DSXXpnUw.js";
12
12
  import { a as resolveStorePath, i as resolveSessionTranscriptsDirForAgent, n as resolveSessionFilePath, r as resolveSessionTranscriptPath } from "./paths-DNYJDWUD.js";
13
13
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-JLH5W4He.js";
14
- import { _ as stripThinkingTagsFromText, a as decodeDataUrl, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripMinimaxToolCallXml, h as stripDowngradedToolCallText, i as coerceImageModelConfig, l as extractAssistantThinking, m as promoteThinkingTagsToBlocks, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, t as describeImageWithModel, u as extractThinkingFromTaggedStream, v as resolveToolDisplay, y as ensureSkyKoiModelsJson } from "./image-Dzd44KC_.js";
14
+ import { _ as stripThinkingTagsFromText, a as decodeDataUrl, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripMinimaxToolCallXml, h as stripDowngradedToolCallText, i as coerceImageModelConfig, l as extractAssistantThinking, m as promoteThinkingTagsToBlocks, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, t as describeImageWithModel, u as extractThinkingFromTaggedStream, v as resolveToolDisplay, y as ensureSkyKoiModelsJson } from "./image-DRpQid7M.js";
15
15
  import { i as resolveMemorySearchConfig, n as resolveRetryConfig, r as retryAsync } from "./manager-VTzR4KLd.js";
16
16
  import { c as listMemoryFiles, l as normalizeExtraMemoryPaths } from "./sqlite-C_5n8NZI.js";
17
17
  import { t as redactSensitiveText } from "./redact-BIMJ3ntQ.js";
@@ -35,7 +35,7 @@ import { EdgeTTS } from "node-edge-tts";
35
35
  import AjvPkg from "ajv";
36
36
  import { createServer } from "node:http";
37
37
  import { ProxyAgent, fetch as fetch$1 } from "undici";
38
- import { WebSocket } from "ws";
38
+ import { WebSocket as WebSocket$1 } from "ws";
39
39
  import { Buffer as Buffer$1 } from "node:buffer";
40
40
  import * as net$1 from "node:net";
41
41
  import net from "node:net";
@@ -7183,7 +7183,7 @@ var GatewayClient = class {
7183
7183
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
7184
7184
  });
7185
7185
  }
7186
- this.ws = new WebSocket(url, wsOptions);
7186
+ this.ws = new WebSocket$1(url, wsOptions);
7187
7187
  this.ws.on("open", () => {
7188
7188
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
7189
7189
  const tlsError = this.validateTlsFingerprint();
@@ -7387,7 +7387,7 @@ var GatewayClient = class {
7387
7387
  return null;
7388
7388
  }
7389
7389
  async request(method, params, opts) {
7390
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
7390
+ if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
7391
7391
  const id = randomUUID();
7392
7392
  const frame = {
7393
7393
  type: "req",
@@ -9121,7 +9121,7 @@ async function routeReply(params) {
9121
9121
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
9122
9122
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
9123
9123
  try {
9124
- const { deliverOutboundPayloads } = await import("./deliver-BMdhV7Q5.js").then((n) => n.n);
9124
+ const { deliverOutboundPayloads } = await import("./deliver-DCQNDGoo.js").then((n) => n.n);
9125
9125
  return {
9126
9126
  ok: true,
9127
9127
  messageId: (await deliverOutboundPayloads({
@@ -44333,7 +44333,7 @@ async function describeStickerImage(params) {
44333
44333
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
44334
44334
  try {
44335
44335
  const buffer = await fs$1.readFile(imagePath);
44336
- const { describeImageWithModel } = await import("./image-Dzd44KC_.js").then((n) => n.n);
44336
+ const { describeImageWithModel } = await import("./image-DRpQid7M.js").then((n) => n.n);
44337
44337
  return (await describeImageWithModel({
44338
44338
  buffer,
44339
44339
  fileName: "sticker.webp",
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { P as shortenHomeInString } from "./exec-CwGfnRxa.js";
3
3
  import { B as resolveSkyKoiAgentDir, _ as getApiKeyForModel, g as resolveImplicitProviders, h as resolveImplicitCopilotProvider, m as resolveImplicitBedrockProvider, p as normalizeProviders, y as requireApiKey } from "./model-selection-DKxD5K5m.js";
4
- import { V as sanitizeUserFacingText } from "./pi-embedded-helpers-CXrXpoUy.js";
4
+ import { V as sanitizeUserFacingText } from "./pi-embedded-helpers-Cy5Wq8I4.js";
5
5
  import { t as loadConfig } from "./config-C16s_5FY.js";
6
6
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-EhM2JAQo.js";
7
7
  import { n as redactToolDetail } from "./redact-BIMJ3ntQ.js";
@@ -4,7 +4,7 @@ import { A as normalizeE164, C as CONFIG_DIR, N as resolveUserPath, _ as normali
4
4
  import { O as isTruthyEnvValue, k as parseBooleanValue } from "./model-selection-DKxD5K5m.js";
5
5
  import { t as formatCliCommand } from "./command-format-BB7fwONf.js";
6
6
  import { _ as resolveEnableState, f as loadPluginManifestRegistry, g as normalizePluginsConfig, h as MANIFEST_KEY, i as writeConfigFile, k as resolveWhatsAppAccount, m as LEGACY_MANIFEST_KEYS, t as loadConfig, v as resolveMemorySlotDecision } from "./config-C16s_5FY.js";
7
- import { C as DEFAULT_AI_SNAPSHOT_MAX_CHARS, D as DEFAULT_SKYKOI_BROWSER_ENABLED, E as DEFAULT_SKYKOI_BROWSER_COLOR, O as DEFAULT_SKYKOI_BROWSER_PROFILE_NAME, S as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, T as DEFAULT_BROWSER_EVALUATE_ENABLED, a as resolveSkyKoiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as stopChromeExtensionRelayServer, h as ensureChromeExtensionRelayServer, i as launchSkyKoiChrome, l as createTargetViaCdp, m as getHeadersWithAuth, n as isChromeCdpReady, o as stopSkyKoiChrome, p as appendCdpPath, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as extractErrorCode, w as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, x as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, y as formatErrorMessage } from "./chrome-lo-vJbVv.js";
7
+ import { C as DEFAULT_AI_SNAPSHOT_MAX_CHARS, D as DEFAULT_SKYKOI_BROWSER_ENABLED, E as DEFAULT_SKYKOI_BROWSER_COLOR, O as DEFAULT_SKYKOI_BROWSER_PROFILE_NAME, S as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, T as DEFAULT_BROWSER_EVALUATE_ENABLED, a as resolveSkyKoiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as stopChromeExtensionRelayServer, h as ensureChromeExtensionRelayServer, i as launchSkyKoiChrome, l as createTargetViaCdp, m as getHeadersWithAuth, n as isChromeCdpReady, o as stopSkyKoiChrome, p as appendCdpPath, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as extractErrorCode, w as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, x as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, y as formatErrorMessage } from "./chrome-DSXXpnUw.js";
8
8
  import { r as resolveSessionTranscriptPath, t as resolveDefaultSessionStorePath } from "./paths-DNYJDWUD.js";
9
9
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-JLH5W4He.js";
10
10
  import os from "node:os";
@@ -2042,7 +2042,7 @@ function isModuleNotFoundError(err) {
2042
2042
  }
2043
2043
  async function loadPwAiModule(mode) {
2044
2044
  try {
2045
- return await import("./pw-ai-DTPSxyYq.js");
2045
+ return await import("./pw-ai-Ctem9aZt.js");
2046
2046
  } catch (err) {
2047
2047
  if (mode === "soft") return null;
2048
2048
  if (isModuleNotFoundError(err)) return null;
@@ -4864,11 +4864,11 @@ function createProfileContext(opts, profile) {
4864
4864
  const userDataDir = resolveSkyKoiUserDataDir(profile.name);
4865
4865
  const profileState = getProfileState();
4866
4866
  if (await isHttpReachable(300) && !profileState.running) try {
4867
- await (await import("./pw-ai-DTPSxyYq.js")).closePlaywrightBrowserConnection();
4867
+ await (await import("./pw-ai-Ctem9aZt.js")).closePlaywrightBrowserConnection();
4868
4868
  } catch {}
4869
4869
  if (profileState.running) await stopRunningBrowser();
4870
4870
  try {
4871
- await (await import("./pw-ai-DTPSxyYq.js")).closePlaywrightBrowserConnection();
4871
+ await (await import("./pw-ai-Ctem9aZt.js")).closePlaywrightBrowserConnection();
4872
4872
  } catch {}
4873
4873
  if (!fs.existsSync(userDataDir)) return {
4874
4874
  moved: false,
@@ -5,7 +5,7 @@ import os, { homedir } from "node:os";
5
5
  import path from "node:path";
6
6
  import fs, { createWriteStream, existsSync, statSync } from "node:fs";
7
7
  import { Logger } from "tslog";
8
- import json5 from "json5";
8
+ import JSON5 from "json5";
9
9
  import chalk, { Chalk } from "chalk";
10
10
  import fs$1 from "node:fs/promises";
11
11
  import { execFile, execFileSync, spawn } from "node:child_process";
@@ -2250,7 +2250,7 @@ function readLoggingConfig() {
2250
2250
  try {
2251
2251
  if (!fs.existsSync(configPath)) return;
2252
2252
  const raw = fs.readFileSync(configPath, "utf-8");
2253
- const logging = json5.parse(raw)?.logging;
2253
+ const logging = JSON5.parse(raw)?.logging;
2254
2254
  if (!logging || typeof logging !== "object" || Array.isArray(logging)) return;
2255
2255
  return logging;
2256
2256
  } catch {
@@ -8054,7 +8054,7 @@ var IncludeProcessor = class IncludeProcessor {
8054
8054
  };
8055
8055
  const defaultResolver = {
8056
8056
  readFile: (p) => fs.readFileSync(p, "utf-8"),
8057
- parseJson: (raw) => json5.parse(raw)
8057
+ parseJson: (raw) => JSON5.parse(raw)
8058
8058
  };
8059
8059
  /**
8060
8060
  * Resolves all $include directives in a parsed config object.
@@ -10696,18 +10696,18 @@ function resolveConfigPathForDeps(deps) {
10696
10696
  function normalizeDeps(overrides = {}) {
10697
10697
  return {
10698
10698
  fs: overrides.fs ?? fs,
10699
- json5: overrides.json5 ?? json5,
10699
+ json5: overrides.json5 ?? JSON5,
10700
10700
  env: overrides.env ?? process.env,
10701
10701
  homedir: overrides.homedir ?? os.homedir,
10702
10702
  configPath: overrides.configPath ?? "",
10703
10703
  logger: overrides.logger ?? console
10704
10704
  };
10705
10705
  }
10706
- function parseConfigJson5(raw, json5$1 = json5) {
10706
+ function parseConfigJson5(raw, json5 = JSON5) {
10707
10707
  try {
10708
10708
  return {
10709
10709
  ok: true,
10710
- parsed: json5$1.parse(raw)
10710
+ parsed: json5.parse(raw)
10711
10711
  };
10712
10712
  } catch (err) {
10713
10713
  return {
@@ -11204,7 +11204,7 @@ function loadSessionStore(storePath, opts = {}) {
11204
11204
  let mtimeMs = getFileMtimeMs(storePath);
11205
11205
  try {
11206
11206
  const raw = fs.readFileSync(storePath, "utf-8");
11207
- const parsed = json5.parse(raw);
11207
+ const parsed = JSON5.parse(raw);
11208
11208
  if (isSessionStoreRecord(parsed)) store = parsed;
11209
11209
  mtimeMs = getFileMtimeMs(storePath) ?? mtimeMs;
11210
11210
  } catch {}
@@ -1,7 +1,7 @@
1
1
  import "./paths-DIgugNlf.js";
2
2
  import "./exec-CwGfnRxa.js";
3
3
  import { t as formatCliCommand } from "./command-format-BB7fwONf.js";
4
- import { m as getHeadersWithAuth, t as getChromeWebSocketUrl, u as formatAriaSnapshot, y as formatErrorMessage } from "./chrome-lo-vJbVv.js";
4
+ import { m as getHeadersWithAuth, t as getChromeWebSocketUrl, u as formatAriaSnapshot, y as formatErrorMessage } from "./chrome-DSXXpnUw.js";
5
5
  import path from "node:path";
6
6
  import fs from "node:fs/promises";
7
7
  import crypto from "node:crypto";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skykoi",
3
- "version": "2026.3.9",
3
+ "version": "2026.3.11",
4
4
  "description": "SkyKoi — AI agent runtime. Multi-channel gateway CLI with RPC agent. Forked from SkyKoi.",
5
5
  "keywords": [
6
6
  "skykoi",