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 summarizes scanner evidence for ValueCell-ai/ClawX, a TypeScript project with 7,607 GitHub stars. SynthScan examined 214,822 lines of code across 944 source files, recording 876 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 5.4 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 709 finding(s).
Are imports declared and package/API names verified? 66 finding(s).
Are wrappers, guards, and repeated structures necessary? 801 finding(s).
Which changes need focused human review? 876 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 876 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/wecom-plugin-account-fallback.test.ts | 27 | async function executeWithoutCredentials(accountId?: string): Promise<string> { | CODE |
| LOW | tests/unit/acp-chat-service.test.ts | 73 | 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 | 458 | 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/openclaw-acp-stream-patch.test.ts | 165 | function extractFinalStreamReconciler(bundle: string): FinalStreamReconciler { | CODE |
| LOW | tests/unit/openclaw-acp-stream-patch.test.ts | 191 | function extractPostLedgerTranscriptSelector(bundle: string): PostLedgerTranscriptSelector { | CODE |
| LOW | tests/unit/openclaw-acp-stream-patch.test.ts | 192 | const start = bundle.indexOf('function selectPostLedgerTranscript('); | CODE |
| LOW | tests/unit/openclaw-acp-stream-patch.test.ts | 210 | function extractAmbientChatHandler(bundle: string): AmbientChatHandler { | CODE |
| LOW⚡ | tests/unit/openclaw-acp-stream-patch.test.ts | 242 | .replace('getOrCreateAmbientChatRun', 'function getOrCreateAmbientChatRun'); | CODE |
| LOW⚡ | tests/unit/openclaw-acp-stream-patch.test.ts | 249 | function extractAmbientReplayBaselineResolver(bundle: string): AmbientReplayBaselineResolver { | CODE |
| LOW⚡ | tests/unit/openclaw-acp-stream-patch.test.ts | 250 | const start = bundle.indexOf('function resolveAmbientReplayBaseline('); | CODE |
| LOW | tests/unit/openclaw-acp-stream-patch.test.ts | 308 | function extractGatewayEventHandler(bundle: string): GatewayEventHandler { | CODE |
| LOW | tests/unit/openclaw-acp-stream-patch.test.ts | 321 | function extractAmbientSessionLifecycle(bundle: string): AmbientSessionLifecycle { | 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 | 210 | function timelineWithProcessBlocks(): AcpTimelineSnapshot { | CODE |
| LOW | tests/unit/chat-input.test.tsx | 203 | 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 | 36 | function defaultWorkspaceSessionGroupTestId(): string { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 138 | async function installAcpLoadReplayBySessionMock( | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 195 | async function installAcpLoadRecorderMock(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 241 | async function getRecordedAcpLoadSessionKeys(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 272 | async function getRecordedMediaSaveImagePayloads(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 278 | async function installAcpPromptSuccessMock(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 294 | async function installAcpPromptTimingMock( | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 334 | async function installAcpPromptFailureMock( | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 377 | async function installSettledAcpHydrationMock( | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 451 | async function installTargetAgentRequestRecorder(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 495 | async function installAcpPromptDeferredMock(app: ElectronApplication) { | CODE |
| LOW | tests/e2e/chat-acp-inline-timeline.spec.ts | 519 | 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 | 37 | 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 | 14 | export function stripAcpWorkingDirectoryPrefix(text: string): string { | CODE |
| LOW⚡ | shared/chat/session-title.ts | 18 | export function isAcpWorkingDirectoryTruncatedTitle(text: string): boolean { | CODE |
| LOW⚡ | shared/chat/session-title.ts | 22 | export function isGatewayAcpPlaceholderDisplayName(text: string): boolean { | CODE |
| LOW⚡ | shared/chat/session-title.ts | 26 | export function isOpenClawSessionIdFallbackTitle( | CODE |
| 640 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 | 1117 | // ── Bulk startup installer ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/plugin-install.ts | 131 | // ── Known plugin-ID corrections ───────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/plugin-install.ts | 376 | // ── Plugin npm name mapping ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/plugin-install.ts | 798 | // ── pnpm-aware node_modules copy helpers ───────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/plugin-install.ts | 906 | // ── Core install / upgrade logic ───────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/plugin-install.ts | 1046 | // ── Candidate source path builder ──────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/plugin-install.ts | 1067 | // ── Per-channel plugin helpers ─────────────────────────────────────────────── | 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 | 303 | // ── Helpers ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 339 | // ── Types ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 462 | // ── Auth Profiles I/O ──────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 558 | // ── Agent Discovery ────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 570 | // ── OpenClaw Config Helpers ────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 1006 | // ── Exported Functions (all async) ─────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3152 | // ── skills section ────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3171 | // ── plugins section ────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3268 | // ── tools.web.search.kimi ───────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3331 | // ── tools.profile & sessions.visibility ─────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3399 | // ── tools.exec approvals (OpenClaw 3.28+) ────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3419 | // ── session.dmScope ───────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3437 | // ── Skill Workshop hard-disable (OpenClaw 6.10+) ───────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3544 | // ── plugins.entries.feishu cleanup ────────────────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3564 | // ── MiniMax merged-plugin compatibility cleanup ───────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3592 | // ── acpx legacy config/install cleanup ───────────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3700 | // ── wecom-openclaw-plugin → wecom migration ──────────────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3725 | // ── official DingTalk connector → dingtalk identity ───────── | COMMENT |
| MEDIUM | electron/utils/openclaw-auth.ts | 3765 | // ── external channel plugin registration cleanup ──────────── | COMMENT |
| 38 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/asr-settings.test.tsx | 135 | 'placeholder', | CODE |
| LOW | tests/unit/asr-settings.test.tsx | 148 | expect(screen.getByTestId('asr-api-key-input')).not.toHaveAttribute('placeholder'); | CODE |
| LOW | tests/unit/asr-settings.test.tsx | 211 | 'placeholder', | CODE |
| LOW | tests/unit/provider-runtime-sync.test.ts | 305 | 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/provider-lifecycle.spec.ts | 533 | await expect(modelIdInput).toHaveAttribute('placeholder', 'deepseek-flash'); | CODE |
| LOW | tests/e2e/provider-lifecycle.spec.ts | 563 | await expect(modelIdInput).toHaveAttribute('placeholder', expectedModelId); | CODE |
| LOW | tests/e2e/image-generation-settings.spec.ts | 135 | await expect(page.getByTestId('image-generation-relay-api-key')).toHaveAttribute('placeholder', /.+/); | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 181 | "placeholder": "123456:ABC-DEF..." | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 185 | "placeholder": "例: 123456789, 987654321", | CODE |
| LOW⚡ | shared/i18n/locales/ja/channels.json | 203 | "placeholder": "Discord ボットトークン" | CODE |
| LOW⚡ | shared/i18n/locales/ja/channels.json | 207 | "placeholder": "例: 123456789012345678", | CODE |
| LOW⚡ | shared/i18n/locales/ja/channels.json | 212 | "placeholder": "例: 123456789012345678", | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 251 | "placeholder": "dingxxxxxx" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 255 | "placeholder": "アプリのシークレット" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 271 | "placeholder": "cli_xxxxxx" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 275 | "placeholder": "アプリのシークレット" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 291 | "placeholder": "ww_xxxxxx" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 295 | "placeholder": "WeCom Bot のシークレット" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 309 | "placeholder": "QQ ボットの App ID" | CODE |
| LOW | shared/i18n/locales/ja/channels.json | 313 | "placeholder": "QQ ボットの Client Secret" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 181 | "placeholder": "123456:ABC-DEF..." | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 185 | "placeholder": "напр., 123456789, 987654321", | CODE |
| LOW⚡ | shared/i18n/locales/ru/channels.json | 203 | "placeholder": "Токен вашего Discord-бота" | CODE |
| LOW⚡ | shared/i18n/locales/ru/channels.json | 207 | "placeholder": "напр., 123456789012345678", | CODE |
| LOW⚡ | shared/i18n/locales/ru/channels.json | 212 | "placeholder": "напр., 123456789012345678", | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 251 | "placeholder": "dingxxxxxx" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 255 | "placeholder": "Секрет вашего приложения" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 271 | "placeholder": "cli_xxxxxx" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 275 | "placeholder": "Секрет вашего приложения" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 291 | "placeholder": "ww_xxxxxx" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 295 | "placeholder": "Секрет вашего WeCom бота" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 310 | "placeholder": "Ваш QQ Bot App ID" | CODE |
| LOW | shared/i18n/locales/ru/channels.json | 314 | "placeholder": "Ваш QQ Bot Client Secret" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 181 | "placeholder": "123456:ABC-DEF..." | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 185 | "placeholder": "例如 123456789, 987654321", | CODE |
| LOW⚡ | shared/i18n/locales/zh/channels.json | 203 | "placeholder": "您的 Discord 机器人令牌" | CODE |
| LOW⚡ | shared/i18n/locales/zh/channels.json | 207 | "placeholder": "例如 123456789012345678", | CODE |
| LOW⚡ | shared/i18n/locales/zh/channels.json | 212 | "placeholder": "例如 123456789012345678", | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 251 | "placeholder": "dingxxxxxx" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 255 | "placeholder": "您的应用密钥" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 271 | "placeholder": "cli_xxxxxx" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 275 | "placeholder": "您的应用密钥" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 292 | "placeholder": "ww_xxxxxx" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 296 | "placeholder": "您的企业微信机器人 Secret" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 311 | "placeholder": "您的 QQ 机器人 App ID" | CODE |
| LOW | shared/i18n/locales/zh/channels.json | 315 | "placeholder": "您的 QQ 机器人 Client Secret" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 181 | "placeholder": "123456:ABC-DEF..." | CODE |
| LOW | shared/i18n/locales/en/channels.json | 185 | "placeholder": "e.g. 123456789, 987654321", | CODE |
| LOW⚡ | shared/i18n/locales/en/channels.json | 203 | "placeholder": "Your Discord bot token" | CODE |
| LOW⚡ | shared/i18n/locales/en/channels.json | 207 | "placeholder": "e.g., 123456789012345678", | CODE |
| LOW⚡ | shared/i18n/locales/en/channels.json | 212 | "placeholder": "e.g., 123456789012345678", | CODE |
| LOW | shared/i18n/locales/en/channels.json | 251 | "placeholder": "dingxxxxxx" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 255 | "placeholder": "Your app secret" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 271 | "placeholder": "cli_xxxxxx" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 275 | "placeholder": "Your app secret" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 291 | "placeholder": "ww_xxxxxx" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 295 | "placeholder": "Your WeCom Bot secret" | CODE |
| LOW | shared/i18n/locales/en/channels.json | 310 | "placeholder": "Your QQ Bot App ID" | CODE |
| 1 more matches not shown… | ||||
| 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 | # CUA's UniFFI loader resolves its adjacent platform library relative to its | COMMENT |
| LOW | resources/skills/computer-use/EMBEDDING.md | 321 | // SPDX-License-Identifier: MIT | COMMENT |
| LOW | .github/workflows/release.yml | 201 | } | 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 |