ClawX is a desktop app that provides a graphical interface for OpenClaw AI agents. It turns CLI-based AI orchestration into a desktop experience without using the terminal. China website is https://clawx.com.cn.
This report presents the forensic synthetic code analysis of ValueCell-ai/ClawX, a TypeScript project with 7,599 GitHub stars. SynthScan v2.0 examined 182,094 lines of code across 817 source files, recording 791 pattern matches distributed across 9 syntactic categories. The overall adjusted score of 5.9 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 791 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/acp-chat-service.test.ts | 69 | function createPassthroughAccessRegistry() { | CODE |
| LOW | tests/unit/provider-runtime-sync.test.ts | 114 | function expectNoGatewayLifecycleCalls(gateway: ReturnType<typeof createGateway>): void { | CODE |
| LOW | tests/unit/openclaw-restart-recovery-patch.test.ts | 15 | function assertValidUnifiedDiffHunks(patch: string): void { | CODE |
| LOW | tests/unit/openclaw-restart-recovery-patch.test.ts | 440 | const start = bundle.indexOf('function buildExecApprovalRequestToolParams(params)'); | CODE |
| LOW | tests/unit/chat-history-reply-while-sending.test.tsx | 115 | function timelineWithAssistantReply(): AcpTimelineSnapshot { | CODE |
| LOW | tests/unit/office-file-viewers.test.tsx | 408 | function ResolveFirstAfterReplacementCommit({ replaced }: { replaced: boolean }) { | CODE |
| LOW | tests/unit/attachment-open-with-native.test.ts | 64 | function isWindowsNativeHandlerRecord(value: unknown): value is WindowsNativeHandlerRecord { | CODE |
| LOW | tests/unit/comms-scripts.test.ts | 9 | function buildPassingScenarioMetrics() { | CODE |
| LOW | tests/unit/whatsapp-login.test.ts | 66 | function cleanupWhatsAppLoginCredentials(accountId: string): void { | CODE |
| LOW | tests/unit/chat-acp-inline-timeline.test.tsx | 152 | function timelineWithProcessBlocks(): AcpTimelineSnapshot { | CODE |
| LOW | tests/unit/chat-input.test.tsx | 163 | function configureAgentAndModelPickers() { | CODE |
| LOW | tests/unit/e2e-parallel-policy.test.ts | 74 | function untaggedGlobalClipboardCalls(file: string, source: string): string[] { | CODE |
| LOW⚡ | tests/e2e/chat-new-session-date.spec.ts | 13 | function defaultWorkspaceSessionGroupTestId(): string { | CODE |
| LOW⚡ | tests/e2e/chat-new-session-date.spec.ts | 17 | function defaultWorkspaceSessionGroupToggleTestId(): string { | CODE |
| LOW⚡ | tests/e2e/chat-new-session-date.spec.ts | 21 | function defaultWorkspaceSessionLoadMoreTestId(): string { | CODE |
| LOW | tests/e2e/chat-new-session-date.spec.ts | 34 | async function installDynamicAcpPromptMocks(app: ElectronApplication): Promise<void> { | CODE |
| LOW | tests/e2e/chat-new-session-date.spec.ts | 114 | async function emitAcpSessionDisplayName(app: ElectronApplication, sessionKey: string): Promise<void> { | CODE |
| LOW | tests/e2e/token-usage.spec.ts | 12 | async function seedTokenUsageTranscripts(homeDir: string): Promise<void> { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 34 | function defaultWorkspaceSessionGroupTestId(): string { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 131 | async function installAcpLoadRecorderMock(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 177 | async function getRecordedAcpLoadSessionKeys(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 208 | async function getRecordedMediaSaveImagePayloads(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 214 | async function installAcpPromptSuccessMock(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 230 | async function installAcpPromptTimingMock( | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 270 | async function installAcpPromptFailureMock(app: ElectronApplication, error: string) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 286 | async function installTargetAgentRequestRecorder(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 330 | async function installAcpPromptDeferredMock(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 354 | async function installAcpReactivationWithPartialTimingMock( | CODE |
| LOW | tests/e2e/chat-workspace-context.spec.ts | 43 | function workspaceSessionGroupTestId(workspacePath: string): string { | CODE |
| LOW | tests/e2e/chat-acp-slash-command-replies.spec.ts | 18 | async function installSlashCommandReplyMock(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-run-state-events.spec.ts | 65 | function generatedImageHostApiMocks(generatedPath: string, identity: string): Record<string, unknown> { | CODE |
| LOW | tests/e2e/chat-skill-trigger-i18n.spec.ts | 15 | async function openChatWithInstalledMocks(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/dialog-transitions.spec.ts | 11 | function defaultWorkspaceSessionGroupTestId(): string { | CODE |
| LOW | tests/e2e/dialog-transitions.spec.ts | 24 | async function expectSubtleDialogAnimation(locator: Locator): Promise<void> { | CODE |
| LOW | tests/e2e/office-document-preview.spec.ts | 132 | async function waitForChangedStableCanvasBacking( | CODE |
| LOW | tests/e2e/chat-question-directory.spec.ts | 47 | async function installQuestionDirectoryMocks( | CODE |
| LOW | tests/e2e/chat-sidebar-session-attention.spec.ts | 36 | async function installSessionAttentionMocks(app: ElectronApplication): Promise<void> { | CODE |
| LOW⚡ | shared/sidebar-layout.ts | 30 | export function getMacTrafficLightFrameHeight(darwinMajor: number): number { | CODE |
| LOW⚡ | shared/sidebar-layout.ts | 37 | export function getMacTrafficLightChromeOffset( | CODE |
| LOW⚡ | shared/sidebar-layout.ts | 44 | export function getMacTrafficLightPosition(options: { | CODE |
| LOW | shared/web-browser.ts | 8 | export function normalizeWebBrowserHtmlFileUrl(input: string): string | null { | CODE |
| LOW⚡ | shared/chat/openclaw-internal.ts | 4 | export function containsOpenClawHeartbeatPollSentinel(value: string | null | undefined): boolean { | CODE |
| LOW⚡ | shared/chat/openclaw-internal.ts | 8 | export function isOpenClawHeartbeatPollText(value: string | null | undefined): boolean { | CODE |
| LOW⚡ | shared/chat/openclaw-internal.ts | 12 | export function isOpenClawHeartbeatAckText(value: string | null | undefined): boolean { | CODE |
| LOW⚡ | shared/chat/session-title.ts | 13 | export function stripAcpWorkingDirectoryPrefix(text: string): string { | CODE |
| LOW⚡ | shared/chat/session-title.ts | 17 | export function isAcpWorkingDirectoryTruncatedTitle(text: string): boolean { | CODE |
| LOW⚡ | shared/chat/session-title.ts | 21 | export function isOpenClawSessionIdFallbackTitle( | CODE |
| LOW | shared/host-events/contract.ts | 154 | export function buildHostChannelEventName( | CODE |
| LOW | electron/utils/control-ui-device-pairing.ts | 57 | export function isControlUiBrowserPairingRequest(request: PendingDevicePairingRequest): boolean { | CODE |
| LOW | electron/utils/control-ui-device-pairing.ts | 62 | export function isLocalLoopbackDeviceAutoApprovalRequest(request: PendingDevicePairingRequest): boolean { | CODE |
| LOW | electron/utils/control-ui-device-pairing.ts | 86 | export async function readLocalPendingPairingRequests(): Promise<PendingDevicePairingRequest[]> { | CODE |
| LOW | electron/utils/control-ui-device-pairing.ts | 98 | async function listPendingPairingRequests(gateway: GatewayPairingRpcClient): Promise<PendingDevicePairingRequest[]> { | CODE |
| LOW | electron/utils/control-ui-device-pairing.ts | 230 | export async function approvePendingLocalDeviceRequests( | CODE |
| LOW | electron/utils/control-ui-device-pairing.ts | 267 | export async function approvePendingControlUiPairingRequests( | CODE |
| LOW | electron/utils/control-ui-device-pairing.ts | 274 | async function watchLocalDeviceApprovals( | CODE |
| LOW | electron/utils/control-ui-device-pairing.ts | 294 | export function cancelLocalDeviceAutoApproval(): void { | CODE |
| LOW | electron/utils/control-ui-device-pairing.ts | 303 | export function scheduleLocalDeviceAutoApproval( | CODE |
| LOW | electron/utils/control-ui-device-pairing.ts | 339 | export function scheduleControlUiDeviceAutoApproval( | CODE |
| LOW | electron/utils/uv-env.ts | 159 | export async function warmupNetworkOptimization(): Promise<void> { | CODE |
| LOW | electron/utils/openclaw-upgrade-snapshot.ts | 76 | async function resolveAvailableBackupPath(basePath: string): Promise<string> { | CODE |
| 561 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tailwind.config.js | 229 | // ── B. ClawX brand tokens ──────────────────────────────────── | COMMENT |
| MEDIUM | tailwind.config.js | 250 | // ── C. ClawX neutral surfaces ──────────────────────────────── | COMMENT |
| MEDIUM | tailwind.config.js | 262 | // ── D. ClawX usage accents ────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/sanitize-config.test.ts | 850 | // ── plugins.load.paths regression tests (issue #607) ────────── | COMMENT |
| MEDIUM | tests/unit/sanitize-config.test.ts | 850 | // ── plugins.load.paths regression tests (issue #607) ────────── | COMMENT |
| MEDIUM | tests/unit/sanitize-config.test.ts | 1083 | // ── bundled plugin allowlist reconciliation tests ────────────── | COMMENT |
| MEDIUM | .github/workflows/release.yml | 295 | # ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/release.yml | 297 | # ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/release.yml | 379 | # ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/release.yml | 390 | # ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/release.yml | 569 | # ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/release.yml | 576 | # ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | electron/utils/plugin-install.ts | 903 | // ── Per-channel plugin helpers ─────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | electron/utils/plugin-install.ts | 945 | // ── Bulk startup installer ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/plugin-install.ts | 121 | // ── Known plugin-ID corrections ───────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/plugin-install.ts | 255 | // ── Plugin npm name mapping ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/plugin-install.ts | 641 | // ── pnpm-aware node_modules copy helpers ───────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/plugin-install.ts | 749 | // ── Core install / upgrade logic ───────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/plugin-install.ts | 882 | // ── Candidate source path builder ──────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-cli.ts | 20 | // ── Quoting helpers ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-cli.ts | 40 | // ── CLI command string (for display / copy) ────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-cli.ts | 253 | // ── Packaged CLI wrapper path ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-cli.ts | 289 | // ── macOS / Linux install ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-cli.ts | 334 | // ── Auto-install on first launch ───────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-cli.ts | 494 | // ── Completion helpers ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/minimax-oauth.ts | 16 | // ── Constants ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/minimax-oauth.ts | 44 | // ── Types ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/minimax-oauth.ts | 87 | // ── OAuth flow steps ───────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/minimax-oauth.ts | 211 | // ── Public API ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-workspace.ts | 19 | // ── Helpers ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-workspace.ts | 119 | // ── Pure helpers (no I/O) ──────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-workspace.ts | 196 | // ── Workspace directory resolution ─────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-workspace.ts | 263 | // ── Bootstrap file repair ──────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-workspace.ts | 307 | // ── Context merging ────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/logger.ts | 46 | // ── Async write buffer ─────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/logger.ts | 86 | // ── Initialisation ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/logger.ts | 115 | // ── Level / path accessors ─────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/logger.ts | 129 | // ── Formatting ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/logger.ts | 150 | // ── Core write ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/logger.ts | 178 | // ── Public log methods ─────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/logger.ts | 212 | // ── Log retrieval (for UI / diagnostics) ───────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 294 | // ── Helpers ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 330 | // ── Types ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 427 | // ── Auth Profiles I/O ──────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 523 | // ── Agent Discovery ────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 535 | // ── OpenClaw Config Helpers ────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 970 | // ── Exported Functions (all async) ─────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 2954 | // ── skills section ────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 2973 | // ── plugins section ────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3061 | // ── tools.web.search.kimi ───────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3102 | // ── tools.profile & sessions.visibility ─────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3170 | // ── tools.exec approvals (OpenClaw 3.28+) ────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3190 | // ── session.dmScope ───────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3208 | // ── Skill Workshop hard-disable (OpenClaw 6.10+) ───────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3315 | // ── plugins.entries.feishu cleanup ────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3335 | // ── MiniMax merged-plugin compatibility cleanup ───────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3363 | // ── acpx legacy config/install cleanup ───────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3471 | // ── wecom-openclaw-plugin → wecom migration ──────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3496 | // ── external channel plugin registration cleanup ──────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3590 | // ── qwen-portal → modelstudio migration ──────────────────── | COMMENT |
| 37 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | tests/unit/gateway-events.test.ts | 106 | expect(hostApiMock.gateway.rpc.mock.calls.some(([method]) => method === 'sessions.list')).toBe(true); | CODE |
| CRITICAL⚡ | tests/unit/gateway-events.test.ts | 108 | const initialSubscribeCalls = hostApiMock.gateway.rpc.mock.calls.filter( | CODE |
| CRITICAL⚡ | tests/unit/gateway-events.test.ts | 111 | const initialListCalls = hostApiMock.gateway.rpc.mock.calls.filter( | CODE |
| CRITICAL⚡ | tests/unit/gateway-events.test.ts | 118 | expect(hostApiMock.gateway.rpc.mock.calls.filter( | CODE |
| CRITICAL⚡ | tests/unit/gateway-events.test.ts | 121 | expect(hostApiMock.gateway.rpc.mock.calls.filter( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/provider-runtime-sync.test.ts | 261 | email: 'user@example.com', | CODE |
| LOW | tests/unit/attachment-open-with.test.ts | 268 | const loadIcon = vi.fn(async () => ({ isEmpty: () => false, toPNG: () => Buffer.from('placeholder') })); | CODE |
| LOW | tests/e2e/chat-workspace-context.spec.ts | 378 | observer.observe(input, { attributes: true, attributeFilter: ['placeholder'] }); | CODE |
| LOW | tests/e2e/image-generation-settings.spec.ts | 105 | await expect(page.getByTestId('image-generation-relay-api-key')).toHaveAttribute('placeholder', /.+/); | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 142 | "placeholder": "123456:ABC-DEF..." | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 146 | "placeholder": "例: 123456789, 987654321", | CODE |
| LOW⚡ | shared/i18n/locales/ja/channels.json | 164 | "placeholder": "Discord ボットトークン" | CODE |
| LOW⚡ | shared/i18n/locales/ja/channels.json | 168 | "placeholder": "例: 123456789012345678", | CODE |
| LOW⚡ | shared/i18n/locales/ja/channels.json | 173 | "placeholder": "例: 123456789012345678", | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 212 | "placeholder": "dingxxxxxx" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 216 | "placeholder": "アプリのシークレット" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 231 | "placeholder": "cli_xxxxxx" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 235 | "placeholder": "アプリのシークレット" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 251 | "placeholder": "ww_xxxxxx" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 255 | "placeholder": "WeCom Bot のシークレット" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 269 | "placeholder": "QQ ボットの App ID" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 273 | "placeholder": "QQ ボットの Client Secret" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 142 | "placeholder": "123456:ABC-DEF..." | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 146 | "placeholder": "напр., 123456789, 987654321", | CODE |
| LOW⚡ | shared/i18n/locales/ru/channels.json | 164 | "placeholder": "Токен вашего Discord-бота" | CODE |
| LOW⚡ | shared/i18n/locales/ru/channels.json | 168 | "placeholder": "напр., 123456789012345678", | CODE |
| LOW⚡ | shared/i18n/locales/ru/channels.json | 173 | "placeholder": "напр., 123456789012345678", | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 212 | "placeholder": "dingxxxxxx" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 216 | "placeholder": "Секрет вашего приложения" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 231 | "placeholder": "cli_xxxxxx" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 235 | "placeholder": "Секрет вашего приложения" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 251 | "placeholder": "ww_xxxxxx" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 255 | "placeholder": "Секрет вашего WeCom бота" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 270 | "placeholder": "Ваш QQ Bot App ID" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 274 | "placeholder": "Ваш QQ Bot Client Secret" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 142 | "placeholder": "123456:ABC-DEF..." | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 146 | "placeholder": "例如 123456789, 987654321", | CODE |
| LOW⚡ | shared/i18n/locales/zh/channels.json | 164 | "placeholder": "您的 Discord 机器人令牌" | CODE |
| LOW⚡ | shared/i18n/locales/zh/channels.json | 168 | "placeholder": "例如 123456789012345678", | CODE |
| LOW⚡ | shared/i18n/locales/zh/channels.json | 173 | "placeholder": "例如 123456789012345678", | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 212 | "placeholder": "dingxxxxxx" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 216 | "placeholder": "您的应用密钥" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 231 | "placeholder": "cli_xxxxxx" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 235 | "placeholder": "您的应用密钥" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 252 | "placeholder": "ww_xxxxxx" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 256 | "placeholder": "您的企业微信机器人 Secret" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 271 | "placeholder": "您的 QQ 机器人 App ID" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 275 | "placeholder": "您的 QQ 机器人 Client Secret" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 142 | "placeholder": "123456:ABC-DEF..." | CODE |
| LOW | shared/i18n/locales/en/channels.json | 146 | "placeholder": "e.g. 123456789, 987654321", | CODE |
| LOW⚡ | shared/i18n/locales/en/channels.json | 164 | "placeholder": "Your Discord bot token" | CODE |
| LOW⚡ | shared/i18n/locales/en/channels.json | 168 | "placeholder": "e.g., 123456789012345678", | CODE |
| LOW⚡ | shared/i18n/locales/en/channels.json | 173 | "placeholder": "e.g., 123456789012345678", | CODE |
| LOW | shared/i18n/locales/en/channels.json | 212 | "placeholder": "dingxxxxxx" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 216 | "placeholder": "Your app secret" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 231 | "placeholder": "cli_xxxxxx" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 235 | "placeholder": "Your app secret" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 251 | "placeholder": "ww_xxxxxx" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 255 | "placeholder": "Your WeCom Bot secret" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 270 | "placeholder": "Your QQ Bot App ID" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 274 | "placeholder": "Your QQ Bot Client Secret" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/crop_qr.py | 46 | except Exception as e: | CODE |
| MEDIUM | scripts/crop_qr.py | 47 | print(f"Error processing {path}: {e}") | CODE |
| MEDIUM | scripts/crop_qr.py | 14 | def process_image(path): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/pages/Setup/index.tsx | 676 | // Step 1: Initialize all skills to 'installing' state for UI | COMMENT |
| LOW⚡ | src/pages/Setup/index.tsx | 680 | // Step 2: Call the backend to install uv and setup Python | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/pages/Setup/index.tsx | 676 | // Step 1: Initialize all skills to 'installing' state for UI | COMMENT |
| LOW⚡ | src/pages/Setup/index.tsx | 680 | // Step 2: Call the backend to install uv and setup Python | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | electron-builder.yml | 41 | # lru-cache CJS/ESM interop: older CJS versions (v5, v6, v7) don't export | COMMENT |
| LOW | .github/workflows/release.yml | 201 | } | COMMENT |
| LOW | electron/main/ipc-handlers.ts | 1241 | COMMENT | |
| LOW | electron/gateway/process-launcher.ts | 141 | // which causes: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | electron/utils/uv-env.ts | 22 | '# This file is managed by ClawX.', | CODE |