@mearl/native-host
Advanced tools
@@ -24,2 +24,3 @@ import type { AgentChatImageInput, AgentChatModelInfo, AgentChatProviderDescriptor, AgentInstalledSkill } from '@mearl/browser-core'; | ||
| getDescriptor(): Promise<AgentChatProviderDescriptor>; | ||
| prepare(): Promise<void>; | ||
| onEvent(listener: (event: AgentProviderEvent) => void): () => void; | ||
@@ -26,0 +27,0 @@ listSessions(options: AgentProviderListSessionsOptions): Promise<AgentProviderListSessionsResult>; |
@@ -1,2 +0,2 @@ | ||
| import type { AgentChatEvent, AgentChatCloseOptions, AgentChatEventsOptions, AgentChatEventsResult, AgentChatInterruptOptions, AgentChatListSessionsOptions, AgentChatListSessionsResult, AgentChatOpenOptions, AgentChatRefreshResult, AgentChatRespondOptions, AgentChatSendOptions, AgentChatSession, AgentChatStartOptions, AgentChatStatus, AgentInstalledSkill, AgentSkillReadResult } from '@mearl/browser-core'; | ||
| import type { AgentChatEvent, AgentChatEventsOptions, AgentChatEventsResult, AgentChatListSessionsOptions, AgentChatListSessionsResult, AgentChatPrepareOptions, AgentChatRefreshResult, AgentChatRespondOptions, AgentChatSendOptions, AgentChatSession, AgentChatSessionTarget, AgentChatStartOptions, AgentChatStatus, AgentInstalledSkill, AgentSkillInstalledListOptions, AgentSkillReadOptions, AgentSkillReadResult } from '@mearl/browser-core'; | ||
| import type { AgentProvider } from './provider.js'; | ||
@@ -17,11 +17,5 @@ export declare class AgentChatManager { | ||
| getStatus(): Promise<AgentChatStatus>; | ||
| listSkills(options: { | ||
| providerId?: unknown; | ||
| cwd?: unknown; | ||
| }): Promise<AgentInstalledSkill[]>; | ||
| readSkill(options: { | ||
| providerId?: unknown; | ||
| path?: unknown; | ||
| cwd?: unknown; | ||
| }): Promise<AgentSkillReadResult>; | ||
| prepare(options: AgentChatPrepareOptions): Promise<void>; | ||
| listSkills(options: AgentSkillInstalledListOptions): Promise<AgentInstalledSkill[]>; | ||
| readSkill(options: AgentSkillReadOptions): Promise<AgentSkillReadResult>; | ||
| listSessions(options: AgentChatListSessionsOptions): Promise<AgentChatListSessionsResult>; | ||
@@ -32,5 +26,5 @@ startSession(options: AgentChatStartOptions): Promise<AgentChatSession>; | ||
| }>; | ||
| interrupt(options: AgentChatInterruptOptions): Promise<void>; | ||
| openSession(options: AgentChatOpenOptions): Promise<void>; | ||
| closeSession(options: AgentChatCloseOptions): Promise<void>; | ||
| interrupt(options: AgentChatSessionTarget): Promise<void>; | ||
| openSession(options: AgentChatSessionTarget): Promise<void>; | ||
| closeSession(options: AgentChatSessionTarget): Promise<void>; | ||
| getEvents(options: AgentChatEventsOptions): AgentChatEventsResult; | ||
@@ -37,0 +31,0 @@ refreshSession(options: AgentChatEventsOptions): Promise<AgentChatRefreshResult>; |
@@ -1,2 +0,2 @@ | ||
| import type { AgentChatEventKind, AgentChatImageInput, AgentChatModelInfo, AgentChatProviderDescriptor, AgentInstalledSkill } from '@mearl/browser-core'; | ||
| import type { AgentChatEventKind, AgentChatImageInput, AgentChatListSessionsOptions, AgentChatModelInfo, AgentChatProviderDescriptor, AgentChatSessionSummary, AgentInstalledSkill } from '@mearl/browser-core'; | ||
| export interface AgentProviderEvent { | ||
@@ -15,12 +15,4 @@ providerSessionId?: string; | ||
| } | ||
| export interface AgentProviderSessionSummary { | ||
| providerSessionId: string; | ||
| title?: string; | ||
| cwd?: string; | ||
| updatedAt?: number; | ||
| ephemeral?: boolean; | ||
| } | ||
| export interface AgentProviderListSessionsOptions { | ||
| cwd?: string; | ||
| cursor?: string; | ||
| export type AgentProviderSessionSummary = Omit<AgentChatSessionSummary, 'providerId'>; | ||
| export interface AgentProviderListSessionsOptions extends Omit<AgentChatListSessionsOptions, 'providerId' | 'limit'> { | ||
| limit: number; | ||
@@ -40,2 +32,3 @@ } | ||
| getDescriptor(): Promise<AgentChatProviderDescriptor>; | ||
| prepare(): Promise<void>; | ||
| onEvent(listener: (event: AgentProviderEvent) => void): () => void; | ||
@@ -42,0 +35,0 @@ listSessions?(options: AgentProviderListSessionsOptions): Promise<AgentProviderListSessionsResult>; |
@@ -24,2 +24,3 @@ import * as acp from '@agentclientprotocol/sdk'; | ||
| getDescriptor(): Promise<AgentChatProviderDescriptor>; | ||
| prepare(): Promise<void>; | ||
| onEvent(listener: (event: AgentProviderEvent) => void): () => void; | ||
@@ -26,0 +27,0 @@ listSessions(options: AgentProviderListSessionsOptions): Promise<AgentProviderListSessionsResult>; |
@@ -1,2 +0,2 @@ | ||
| import type { AgentSkillCheckUpdatesResult, AgentSkillCliStatus, AgentSkillInstallOptions, AgentSkillMutationOptions, AgentSkillMutationResult, AgentSkillScope, AgentSkillUpdate } from '@mearl/browser-core'; | ||
| import type { AgentSkillCheckUpdatesResult, AgentSkillCheckUpdatesOptions, AgentSkillCliStatus, AgentSkillInstallOptions, AgentSkillMutationOptions, AgentSkillMutationResult, AgentSkillScope, AgentSkillUpdate } from '@mearl/browser-core'; | ||
| interface SkillCliOutput { | ||
@@ -20,6 +20,3 @@ stdout: string; | ||
| install(data: AgentSkillInstallOptions): Promise<AgentSkillMutationResult>; | ||
| checkUpdates(data: { | ||
| providerId?: unknown; | ||
| cwd?: unknown; | ||
| }): Promise<AgentSkillCheckUpdatesResult>; | ||
| checkUpdates(data: AgentSkillCheckUpdatesOptions): Promise<AgentSkillCheckUpdatesResult>; | ||
| update(data: AgentSkillMutationOptions): Promise<AgentSkillMutationResult>; | ||
@@ -26,0 +23,0 @@ uninstall(data: AgentSkillMutationOptions): Promise<AgentSkillMutationResult>; |
@@ -0,33 +1,7 @@ | ||
| import type { BrowserListResult } from '@mearl/browser-core'; | ||
| import { type BrowserRecord } from './browser-registry.js'; | ||
| import { type ManagedBrowserSummary } from './managed-browser.js'; | ||
| export type BrowserStatus = 'connected' | 'running_disconnected' | 'stopped'; | ||
| interface BrowserInventoryBase { | ||
| browserId: string; | ||
| name: string; | ||
| status: BrowserStatus; | ||
| extensionVersion?: string; | ||
| nativeHostVersion?: string; | ||
| transport?: 'extension' | 'cdp'; | ||
| } | ||
| export interface RegularBrowserInventoryItem extends BrowserInventoryBase { | ||
| type: 'regular'; | ||
| status: 'connected'; | ||
| } | ||
| export interface ManagedBrowserInventoryItem extends BrowserInventoryBase { | ||
| type: 'managed'; | ||
| headless: boolean; | ||
| persistent: boolean; | ||
| cdpPort: number; | ||
| createdAt: string; | ||
| account?: ManagedBrowserSummary['account']; | ||
| copiedCookies?: ManagedBrowserSummary['copiedCookies']; | ||
| } | ||
| export type BrowserInventoryItem = RegularBrowserInventoryItem | ManagedBrowserInventoryItem; | ||
| export interface BrowserInventoryResult { | ||
| count: number; | ||
| connectedCount: number; | ||
| browsers: BrowserInventoryItem[]; | ||
| } | ||
| type BrowserInventoryResult = Omit<BrowserListResult, 'defaultBrowserId'>; | ||
| export declare function mergeBrowserInventory(connected: BrowserRecord[], managed: ManagedBrowserSummary[]): BrowserInventoryResult; | ||
| export declare function listBrowserInventory(): BrowserInventoryResult; | ||
| export {}; |
@@ -11,6 +11,6 @@ /** | ||
| */ | ||
| import type { ControlSource } from '@mearl/browser-core'; | ||
| import type { BrowserCommandAction, ControlSource } from '@mearl/browser-core'; | ||
| import type { CdpSession, PageSession } from './cdp-session.js'; | ||
| export interface BrowserAction { | ||
| name: string; | ||
| name: BrowserCommandAction; | ||
| session: 'browser'; | ||
@@ -20,3 +20,3 @@ handler: (session: CdpSession, data: any, controlSource: ControlSource) => Promise<any>; | ||
| export interface PageAction { | ||
| name: string; | ||
| name: BrowserCommandAction; | ||
| session: 'page'; | ||
@@ -23,0 +23,0 @@ handler: (session: PageSession, data: any, controlSource: ControlSource) => Promise<any>; |
| /** | ||
| * CDP browser-level handlers: screenshot, selected element, user info. | ||
| */ | ||
| import type { GetUserInfoParams, PageScreenshotParams, PageSelectedElementParams } from '@mearl/browser-core'; | ||
| import type { PageSession } from './cdp-session.js'; | ||
| export declare function cdpPageScreenshot(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPageSelectedElement(session: PageSession, _data: any): Promise<any>; | ||
| export declare function cdpGetUserInfo(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPageScreenshot(session: PageSession, data: PageScreenshotParams): Promise<any>; | ||
| export declare function cdpPageSelectedElement(session: PageSession, _data: PageSelectedElementParams): Promise<any>; | ||
| export declare function cdpGetUserInfo(session: PageSession, data: GetUserInfoParams): Promise<any>; |
@@ -10,4 +10,4 @@ /** | ||
| import type { CdpSession } from './cdp-session.js'; | ||
| import { type ControlSource, type PageActAction } from '@mearl/browser-core'; | ||
| export declare function cdpRunActions(session: CdpSession, data: any, controlSource?: ControlSource): Promise<any>; | ||
| import { type ControlSource, type PageActAction, type RunActionsParams } from '@mearl/browser-core'; | ||
| export declare function cdpRunActions(session: CdpSession, data: RunActionsParams, controlSource?: ControlSource): Promise<any>; | ||
| /** | ||
@@ -14,0 +14,0 @@ * Runs a page interaction action with built-in observation: executes the raw |
| /** CDP handler for changing one named cookie in the current page scope. */ | ||
| import { type GetCookieParams, type SetCookieParams } from '@mearl/browser-core'; | ||
| import type { PageSession } from './cdp-session.js'; | ||
| export declare function cdpSetCookie(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpGetCookie(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpSetCookie(session: PageSession, data: SetCookieParams): Promise<any>; | ||
| export declare function cdpGetCookie(session: PageSession, data: GetCookieParams): Promise<any>; |
| /** | ||
| * CDP HTTP proxy / MTOP request / API schema handlers. | ||
| */ | ||
| import { type GetApiSchemaParams, type SendMtopRequestParams, type SendRequestParams } from '@mearl/browser-core'; | ||
| import type { PageSession } from './cdp-session.js'; | ||
| export declare function cdpSendRequest(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpSendMtopRequest(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpGetApiSchema(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpSendRequest(session: PageSession, data: SendRequestParams): Promise<any>; | ||
| export declare function cdpSendMtopRequest(session: PageSession, data: SendMtopRequestParams): Promise<any>; | ||
| export declare function cdpGetApiSchema(session: PageSession, data: GetApiSchemaParams): Promise<any>; |
@@ -6,12 +6,13 @@ /** | ||
| */ | ||
| import { type PageClickParams, type PageEvalParams, type PageHoverParams, type PageNavigateParams, type PagePressParams, type PageScrollParams, type PageTypeParams, type PageUploadParams, type PageWaitParams, type SetDeviceEmulationParams } from '@mearl/browser-core'; | ||
| import type { PageSession } from './cdp-session.js'; | ||
| export declare function cdpPageClick(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPageType(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPageScroll(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPageEval(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPagePress(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPageWait(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPageNavigate(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPageUpload(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpSetDeviceEmulation(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPageHover(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPageClick(session: PageSession, data: PageClickParams): Promise<any>; | ||
| export declare function cdpPageType(session: PageSession, data: PageTypeParams): Promise<any>; | ||
| export declare function cdpPageScroll(session: PageSession, data: PageScrollParams): Promise<any>; | ||
| export declare function cdpPageEval(session: PageSession, data: PageEvalParams): Promise<any>; | ||
| export declare function cdpPagePress(session: PageSession, data: PagePressParams): Promise<any>; | ||
| export declare function cdpPageWait(session: PageSession, data: PageWaitParams): Promise<any>; | ||
| export declare function cdpPageNavigate(session: PageSession, data: PageNavigateParams): Promise<any>; | ||
| export declare function cdpPageUpload(session: PageSession, data: PageUploadParams): Promise<any>; | ||
| export declare function cdpSetDeviceEmulation(session: PageSession, data: SetDeviceEmulationParams): Promise<any>; | ||
| export declare function cdpPageHover(session: PageSession, data: PageHoverParams): Promise<any>; |
| /** | ||
| * CDP mock interception handlers. | ||
| */ | ||
| import { type GetMocksParams, type SetMockParams } from '@mearl/browser-core'; | ||
| import type { PageSession } from './cdp-session.js'; | ||
| /** browser_release 使用:丢弃所有依赖当前 CDP 会话的 mock 状态。 */ | ||
| export declare function clearCdpMockState(): void; | ||
| export declare function cdpSetMock(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpGetMocks(_session: PageSession, _data: any): any; | ||
| export declare function cdpSetMock(session: PageSession, data: SetMockParams): Promise<any>; | ||
| export declare function cdpGetMocks(_session: PageSession, _data: GetMocksParams): any; |
@@ -7,6 +7,7 @@ /** | ||
| */ | ||
| import { type RecordParams } from '@mearl/browser-core'; | ||
| import type { PageSession } from './cdp-session.js'; | ||
| export declare function cdpRecordStart(session: PageSession, _data: any): Promise<any>; | ||
| export declare function cdpRecordStop(session: PageSession, _data: any): Promise<any>; | ||
| export declare function cdpRecordStart(session: PageSession, _data: RecordParams): Promise<any>; | ||
| export declare function cdpRecordStop(session: PageSession, _data: RecordParams): Promise<any>; | ||
| /** browser_release 使用:停止仍存活页面的录制,并丢弃已失效 target 的残留状态。 */ | ||
| export declare function releaseCdpRecordings(sessions: PageSession[]): Promise<void>; |
| /** | ||
| * CDP request/log/event buffer query handlers. | ||
| */ | ||
| import type { GetEventsParams, GetLogsParams, GetRequestsParams } from '@mearl/browser-core'; | ||
| import type { PageSession } from './cdp-session.js'; | ||
| export declare function cdpGetRequests(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpGetLogs(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpGetEvents(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpGetRequests(session: PageSession, data: GetRequestsParams): Promise<any>; | ||
| export declare function cdpGetLogs(session: PageSession, data: GetLogsParams): Promise<any>; | ||
| export declare function cdpGetEvents(session: PageSession, data: GetEventsParams): Promise<any>; |
| /** | ||
| * CDP accessibility tree snapshot and frame handlers. | ||
| */ | ||
| import { type PageFramesParams, type PageSnapshotParams } from '@mearl/browser-core'; | ||
| import type { PageSession } from './cdp-session.js'; | ||
| export declare function cdpPageSnapshot(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpPageFrames(session: PageSession, _data: any): Promise<any>; | ||
| export declare function cdpPageSnapshot(session: PageSession, data: PageSnapshotParams): Promise<any>; | ||
| export declare function cdpPageFrames(session: PageSession, _data: PageFramesParams): Promise<any>; |
| /** | ||
| * CDP tab management handlers. | ||
| */ | ||
| import { type ControlSource } from '@mearl/browser-core'; | ||
| import { type ControlSource, type TabCloseParams, type TabOpenParams } from '@mearl/browser-core'; | ||
| import type { CdpSession } from './cdp-session.js'; | ||
| export declare function cdpTabOpen(session: CdpSession, data: any, controlSource?: ControlSource): Promise<any>; | ||
| export declare function cdpTabClose(session: CdpSession, data: any): Promise<any>; | ||
| export declare function cdpTabOpen(session: CdpSession, data: TabOpenParams, controlSource?: ControlSource): Promise<any>; | ||
| export declare function cdpTabClose(session: CdpSession, data: TabCloseParams): Promise<any>; | ||
| export declare function cdpTabList(session: CdpSession, _data: any): Promise<any>; |
@@ -6,5 +6,6 @@ /** | ||
| */ | ||
| import { type TdbankAccountParams } from '@mearl/browser-core'; | ||
| import type { CdpSession } from './cdp-session.js'; | ||
| /** Prepare a TDBank SSO ticket without changing the controller browser account. */ | ||
| export declare function cdpPrepareTdbankSso(cdpSession: CdpSession, data: any): Promise<any>; | ||
| export declare function cdpPrepareTdbankSso(cdpSession: CdpSession, data: TdbankAccountParams): Promise<any>; | ||
| /** Consume a TDBank SSO ticket inside an isolated managed browser. */ | ||
@@ -14,2 +15,2 @@ export declare function cdpConsumeTdbankSso(cdpSession: CdpSession, ssoUrl: string, expectedLoginId?: string): Promise<{ | ||
| }>; | ||
| export declare function cdpTdbankAccount(cdpSession: CdpSession, data: any): Promise<any>; | ||
| export declare function cdpTdbankAccount(cdpSession: CdpSession, data: TdbankAccountParams): Promise<any>; |
| /** CDP timezone override handler. */ | ||
| import type { SetTimezoneParams } from '@mearl/browser-core'; | ||
| import type { PageSession } from './cdp-session.js'; | ||
| export declare function cdpSetTimezone(session: PageSession, data: any): Promise<any>; | ||
| export declare function cdpSetTimezone(session: PageSession, data: SetTimezoneParams): Promise<any>; |
@@ -31,7 +31,10 @@ /** | ||
| */ | ||
| export interface CloudConnectorListItem { | ||
| serverUrl: string; | ||
| pid: number; | ||
| connectorId?: string; | ||
| name?: string; | ||
| } | ||
| export interface CloudConnectorListResult { | ||
| connectors: Array<{ | ||
| serverUrl: string; | ||
| pid: number; | ||
| }>; | ||
| connectors: CloudConnectorListItem[]; | ||
| } | ||
@@ -50,2 +53,4 @@ /** | ||
| pid?: number; | ||
| connectorId?: string; | ||
| name?: string; | ||
| reused?: boolean; | ||
@@ -52,0 +57,0 @@ error?: string; |
| /** Managed Chrome lifecycle for isolated, optionally headless browser instances. */ | ||
| import { type DaemonRecord } from '@mearl/daemon-core'; | ||
| import { type TransferableCookie } from './cdp-backend/cookie-transfer.js'; | ||
| export type ManagedBrowserUserAgentMode = 'default' | 'desktop'; | ||
| export interface ManagedBrowserLaunchParams { | ||
| name: string; | ||
| headless?: boolean; | ||
| userAgentMode?: ManagedBrowserUserAgentMode; | ||
| persistent?: boolean; | ||
| executablePath?: string; | ||
| url?: string; | ||
| accountId?: string | number; | ||
| havanaId?: string | number; | ||
| site?: string | number; | ||
| query?: string; | ||
| tabId?: number; | ||
| copyCookieDomains?: string[]; | ||
| } | ||
| import type { BrowserLaunchParams } from '@mearl/browser-core'; | ||
| export type ManagedBrowserUserAgentMode = NonNullable<BrowserLaunchParams['userAgentMode']>; | ||
| export interface TdbankSsoTicket { | ||
@@ -62,3 +49,3 @@ ssoUrl: string; | ||
| nativeHostScript: string; | ||
| prepareTdbankSso: (data: ManagedBrowserLaunchParams) => Promise<TdbankSsoTicket>; | ||
| prepareTdbankSso: (data: BrowserLaunchParams) => Promise<TdbankSsoTicket>; | ||
| exportCookies: (domains: string[]) => Promise<TransferableCookie[]>; | ||
@@ -82,3 +69,3 @@ log: (...args: any[]) => void; | ||
| export declare function listManagedBrowsers(): ManagedBrowserSummary[]; | ||
| export declare function launchManagedBrowser(input: ManagedBrowserLaunchParams, deps: ManagedBrowserManagerDeps): Promise<Record<string, any>>; | ||
| export declare function launchManagedBrowser(input: BrowserLaunchParams, deps: ManagedBrowserManagerDeps): Promise<Record<string, any>>; | ||
| export declare function closeManagedBrowser(selector: string, options?: { | ||
@@ -85,0 +72,0 @@ deleteProfile?: boolean; |
+3
-3
| { | ||
| "name": "@mearl/native-host", | ||
| "version": "2.1.0", | ||
| "version": "2.2.0", | ||
| "description": "Native Messaging Host for Mearl — bridges Chrome Extension and local socket server", | ||
@@ -35,4 +35,4 @@ "type": "module", | ||
| "typescript": "^5.8.3", | ||
| "@mearl/browser-core": "2.1.0", | ||
| "@mearl/daemon-core": "2.1.0" | ||
| "@mearl/browser-core": "2.2.0", | ||
| "@mearl/daemon-core": "2.2.0" | ||
| }, | ||
@@ -39,0 +39,0 @@ "scripts": { |
+1
-1
@@ -88,3 +88,3 @@ # @mearl/native-host | ||
| 侧边栏中未选择本地目录时,Codex 对话使用只读沙箱且不允许提权,Qoder 对话通过首条提示词约束为只读模式;选择后才使用该目录作为可写工作区。`MEARL_AGENT_CWD` 仅用于 Codex 只读对话的默认浏览目录,不会开启写权限;Qoder 未选目录时从用户主目录开始浏览。Agent 接入由统一 Provider 接口承载,后续可新增 Claude 等实现而无需修改扩展与 native-host 之间的 Chat 协议。只安装 ChatGPT 等桌面聊天客户端不能替代 Provider CLI;侧边栏会在 CLI 缺失时展示安装与登录指引。 | ||
| 侧边栏 Agent 不使用只读或工作区沙箱限制,文件、命令和网络操作由 Provider 的审批机制控制。用户选择的本地目录只作为对话的参考上下文和相对路径起点,不限制 Agent 可访问的范围;未选择时从用户主目录开始,Codex 可通过 `MEARL_AGENT_CWD` 覆盖默认起点。Agent 接入由统一 Provider 接口承载,后续可新增 Claude 等实现而无需修改扩展与 native-host 之间的 Chat 协议。只安装 ChatGPT 等桌面聊天客户端不能替代 Provider CLI;侧边栏会在 CLI 缺失时展示安装与登录指引。 | ||
@@ -91,0 +91,0 @@ ## 构建 |
Sorry, the diff of this file is too big to display
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
1086302
0.5%30709
0.48%41
2.5%