Open-source 24/7 Cowork app for OpenClaw, Hermes, Claude Code, Codex, OpenCode and 20+ more CLI Agent | Customize your assistants | Team them up|Star if you like it!
This report summarizes scanner evidence for iOfficeAI/AionUi, a TypeScript project with 33,419 GitHub stars. SynthScan examined 402,219 lines of code across 2149 source files, recording 1097 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 5.0 (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? 766 finding(s).
Are imports declared and package/API names verified? 71 finding(s).
Are wrappers, guards, and repeated structures necessary? 581 finding(s).
Which changes need focused human review? 1097 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 1097 distinct pattern matches across 11 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 |
|---|---|---|---|---|
| MEDIUM | tests/unit/renderer/explorerModel.test.ts | 37 | // ── PeKey identity ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/renderer/explorerModel.test.ts | 67 | // ── ancestors / want ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/renderer/explorerModel.test.ts | 116 | // ── fact cache ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/renderer/explorerModel.test.ts | 214 | // ── anti-stale: descendant / subtree / migrate ─────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/renderer/explorerModel.test.ts | 252 | // ── projection ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/renderer/explorerModel.test.ts | 343 | // ── additional edge coverage (Reviewer ⚪) ──────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/renderer/explorerModel.test.ts | 540 | // ── Drag-to-copy/move (source B/C) ─────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/fixtures.ts | 338 | // ── Cleanup ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/feedback-scenarios.e2e.ts | 66 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/feedback-scenarios.e2e.ts | 68 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/e2e/specs/feedback-scenarios.e2e.ts | 84 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/e2e/specs/feedback-scenarios.e2e.ts | 92 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/e2e/specs/feedback-scenarios.e2e.ts | 94 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/e2e/specs/feedback-scenarios.e2e.ts | 100 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/e2e/specs/feedback-scenarios.e2e.ts | 102 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/e2e/specs/feedback-scenarios.e2e.ts | 104 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/feedback-scenarios.e2e.ts | 139 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/feedback-scenarios.e2e.ts | 141 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/feedback-scenarios.e2e.ts | 156 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/feedback-scenarios.e2e.ts | 158 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/e2e/specs/webui.e2e.ts | 20 | // ── Page loads ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/e2e/specs/webui.e2e.ts | 27 | // ── Enable toggle ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/e2e/specs/webui.e2e.ts | 36 | // ── Port & URL ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/webui.e2e.ts | 61 | // ── Allow remote toggle ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/webui.e2e.ts | 72 | // ── Start / Stop lifecycle ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/webui.e2e.ts | 122 | // ── Screenshot ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/cron-crud.e2e.ts | 57 | // ── Bridge helpers ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/cron-crud.e2e.ts | 71 | // ── Conversation helpers ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/cron-crud.e2e.ts | 118 | // ── UI helpers ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/cron-crud.e2e.ts | 133 | // ── Tests ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/navigation.e2e.ts | 10 | // ── Guid Page ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/navigation.e2e.ts | 40 | // ── Settings Pages ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/navigation.e2e.ts | 72 | // ── Cross-page navigation ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/ext-ipc-queries.e2e.ts | 14 | // ── ACP Adapters ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/ext-ipc-queries.e2e.ts | 43 | // ── MCP Servers ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/ext-ipc-queries.e2e.ts | 62 | // ── Assistants ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/ext-ipc-queries.e2e.ts | 82 | // ── Agents ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/ext-ipc-queries.e2e.ts | 106 | // ── Skills ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/ext-ipc-queries.e2e.ts | 126 | // ── Themes ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/ext-ipc-queries.e2e.ts | 146 | // ── Settings Tabs ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/ext-ipc-queries.e2e.ts | 177 | // ── WebUI Contributions ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/ext-ipc-queries.e2e.ts | 211 | // ── Channel Plugins ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/ext-ipc-queries.e2e.ts | 238 | // ── Performance Budget ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/team-describe-assistant.e2e.ts | 211 | // ── 1. Create team through the assistant-only UI flow ───────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/team-describe-assistant.e2e.ts | 226 | // ── 2. Read the port + auth token from the leader conversation ─────── | COMMENT |
| MEDIUM | tests/e2e/specs/team-describe-assistant.e2e.ts | 255 | // ── 3a. Resolve a preset that's currently enabled in this env ──────── | COMMENT |
| MEDIUM | tests/e2e/specs/team-describe-assistant.e2e.ts | 283 | // ── 3b. Reject bogus auth token (defence-in-depth smoke test) ──────── | COMMENT |
| MEDIUM | tests/e2e/specs/team-describe-assistant.e2e.ts | 303 | // ── 3c. Surface a useful error when preset id is unknown ───────────── | COMMENT |
| MEDIUM | tests/e2e/specs/team-describe-assistant.e2e.ts | 310 | // ── 4. team_spawn_agent using the same assistant_id ────────────────── | COMMENT |
| MEDIUM | tests/e2e/specs/ext-themes-stability.e2e.ts | 10 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e/specs/ext-themes-stability.e2e.ts | 12 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e/specs/ext-themes-stability.e2e.ts | 40 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e/specs/ext-themes-stability.e2e.ts | 42 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e/specs/ext-themes-stability.e2e.ts | 70 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e/specs/ext-themes-stability.e2e.ts | 72 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …sts/e2e/features/settings/system/timeout-config.e2e.ts | 66 | // ──────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …sts/e2e/features/settings/system/timeout-config.e2e.ts | 68 | // ──────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …sts/e2e/features/settings/system/timeout-config.e2e.ts | 88 | // ──────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …sts/e2e/features/settings/system/timeout-config.e2e.ts | 90 | // ──────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …sts/e2e/features/settings/system/timeout-config.e2e.ts | 110 | // ──────────────────────────────────────────────────────────────────────── | COMMENT |
| 200 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/e2e/features/settings/skills/batch-import.e2e.ts | 74 | // Step 2: Click "Import All" button | COMMENT |
| LOW | tests/e2e/features/settings/skills/edge-cases.e2e.ts | 152 | // Step 1: Add highlight parameter to current URL via history API | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 86 | // Step 2: Locate "My Skills" section | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 90 | // Step 4: Verify skill count badge (should show 2) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 147 | // Step 2: Locate target skill card in My Skills section | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 151 | // Step 3: Hover to show delete button (may require actual hover) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 158 | // Step 4: Click delete button | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 162 | // Step 5: Verify confirmation modal appears | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 172 | // Step 6: Click confirm button (Arco Modal confirm button) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 237 | // Step 2: Select two of the three skills by clicking their cards | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 245 | // Step 3: Click batch delete and confirm in the modal | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 315 | // Step 2: Locate the builtin skill card | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 319 | // Step 3: Hover to card to reveal buttons | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 356 | // Step 2: Locate "Discovered External Skills" section | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 363 | // Step 4: Click Tab button for this test's specific source. | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 417 | // Step 2: Locate external skill card | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 426 | // Step 3: Click the card to import (entire card is clickable) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 472 | // Step 2: Locate "Add Path" button in External Skills section | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 479 | // Step 3: Click "Add Path" button | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 489 | // Step 4: Enter source name and path | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 499 | // Step 5: Click confirm (Arco Modal OK button) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 572 | // Step 2: Locate skill card in "My Skills" | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 576 | // Step 3: Hover to show "Export" button and wait | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 583 | // Step 4: Click "Export" button to open Dropdown (force click to avoid hover issues) | COMMENT |
| LOW | tests/e2e/features/settings/skills/core-ui.e2e.ts | 224 | // Step 1: Enter batch mode | COMMENT |
| LOW | tests/e2e/features/settings/skills/core-ui.e2e.ts | 375 | // Step 5: Verify skill card is displayed | COMMENT |
| LOW | tests/e2e/features/settings/skills/core-ui.e2e.ts | 594 | // Step 5: Select target source from dropdown menu | COMMENT |
| LOW | tests/e2e/features/settings/skills/url-highlight.e2e.ts | 58 | // Step 1: Add highlight parameter via history API | COMMENT |
| LOW | tests/e2e/features/settings/skills/url-highlight.e2e.ts | 99 | // Step 2: Wait for highlight to disappear (2 seconds) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 72 | // Step 2: Dynamically add new skill to external source directory | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 79 | // Step 3: Click external refresh button | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 129 | // Step 3: Fill in duplicate path | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 136 | // Step 4: Click Confirm button (use Arco's OK button class) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 188 | // Step 2: Fill only Name field | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 197 | // Step 3: Clear Name, fill only Path field | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 207 | // Step 4: Fill both fields | COMMENT |
| LOW | tests/e2e/features/settings/skills/path-export.e2e.ts | 117 | // Step 2: Try to add the same path again via UI | COMMENT |
| LOW | tests/e2e/features/settings/skills/path-export.e2e.ts | 169 | // Step 1: Open add custom path modal | COMMENT |
| LOW | tests/e2e/features/settings/skills/path-export.e2e.ts | 250 | // Step 2: Try to export the skill | COMMENT |
| LOW | tests/e2e/features/settings/skills/path-export.e2e.ts | 263 | // Step 3: Select target source from dropdown | COMMENT |
| LOW | tests/e2e/features/settings/skills/manual-import.e2e.ts | 41 | // Step 1: Mock dialog.showOpenDialog to return test skill path | COMMENT |
| LOW | tests/e2e/features/settings/skills/manual-import.e2e.ts | 61 | // Step 2: Click "Import from Folder" button | COMMENT |
| LOW | tests/e2e/features/settings/skills/search.e2e.ts | 76 | // Step 2: Enter search keyword in My Skills search box | COMMENT |
| LOW | tests/e2e/features/settings/skills/search.e2e.ts | 118 | // Step 2: Search with non-existent keyword | COMMENT |
| LOW | tests/e2e/features/settings/skills/search.e2e.ts | 164 | // Step 2: Search external skills | COMMENT |
| LOW | tests/e2e/features/settings/skills/search.e2e.ts | 213 | // Step 2: Search with non-existent keyword | COMMENT |
| LOW | tests/e2e/features/settings/skills/special-cases.e2e.ts | 164 | // Step 1: Click refresh button rapidly 3 times | COMMENT |
| LOW⚡ | …e2e/features/settings/skills/refresh-empty-tabs.e2e.ts | 60 | // Step 2: Dynamically add new skill via Bridge | COMMENT |
| LOW⚡ | …e2e/features/settings/skills/refresh-empty-tabs.e2e.ts | 69 | // Step 3: Click refresh button | COMMENT |
| LOW | …e2e/features/settings/skills/refresh-empty-tabs.e2e.ts | 159 | // Step 2: Verify default tab (first source) is active | COMMENT |
| LOW | …e2e/features/settings/skills/refresh-empty-tabs.e2e.ts | 176 | // Step 3: Click tab B | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 85 | // Step 1: Screenshot initial guid page | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 90 | // Step 2: Create conversation via bridge (uses prioritized aionrs-compatible provider) | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 99 | // Step 3: Send simple message | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 103 | // Step 4: Wait for AI reply | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 159 | // Step 1: Create temp directory with test folder | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 167 | // Step 2: Create conversation via bridge with workspace pre-configured | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 175 | // Step 3: Send message asking about folder (via bridge, no UI interaction needed) | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 181 | // Step 4: Wait for AI reply | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 228 | // Step 1: Create test file in workspace | COMMENT |
| 133 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/renderer/messageMerging.dom.test.tsx | 72 | function createThinkingDoneMessage(msgId: string, duration: number): IMessageThinking { | CODE |
| LOW | tests/unit/renderer/cron/CreateTaskDialog.dom.test.tsx | 422 | function legacyJobWithoutAssistantId(): ICronJob { | CODE |
| LOW | tests/unit/bootstrap/buildWithBuilder.test.ts | 24 | function readInstallerErrorDefinitions(): Array<{ defineName: string; code: string }> { | CODE |
| LOW | tests/unit/bootstrap/buildWithBuilder.test.ts | 32 | function resolveAppBuilderInstallUtil(): string { | CODE |
| LOW | tests/unit/common/chatLib.test.ts | 37 | function createThinkingDoneMessage(msgId: string, duration: number): IMessageThinking { | CODE |
| LOW | tests/unit/previews/HTMLViewer.dom.test.tsx | 44 | function createConsoleMessageEvent({ | CODE |
| LOW | …sts/unit/assets/verifyBundledAioncoreResources.test.ts | 97 | function writeManagedResourcesContract( | CODE |
| LOW | tests/e2e/fixtures.ts | 46 | function attachRendererDiagnostics(page: Page): void { | CODE |
| LOW | tests/e2e/fixtures.ts | 65 | async function getRendererReadinessSnapshot(page: Page): Promise<Record<string, unknown>> { | CODE |
| LOW | tests/e2e/specs/ext-no-extensions.e2e.ts | 34 | async function launchAppWithoutExtensions(): Promise<ElectronApplication> { | CODE |
| LOW | tests/e2e/specs/ext-settings-tabs.e2e.ts | 25 | async function waitForExtensionSettingsTabs(page: Page, timeout = 10_000): Promise<string[]> { | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 54 | async function resolveFullAutoModeFromAgentMetadata( | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 122 | async function refreshAssistantForBackend( | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 136 | async function requireOnlineAssistantForBackend( | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 199 | async function selectPreferredCronDialogAgent( | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 206 | async function selectCronDialogAgentByPattern( | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 245 | async function waitForCronCreateDialogToClose( | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 376 | async function listAutoInjectBuiltinSkills( | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 385 | async function expectCronBuiltinAutoSkill(page: import('@playwright/test').Page): Promise<void> { | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 444 | async function waitForCronCreationConfirmation( | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 480 | async function waitForSkillSuggestMessage( | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 517 | async function assertNoSkillSuggestMessageWithin( | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 587 | async function waitForConversationWorkspace( | CODE |
| LOW | tests/e2e/specs/conversation-full-cycle.e2e.ts | 603 | async function removeConversationViaBridge( | CODE |
| LOW | …/specs/assistant-settings-conversation-defaults.e2e.ts | 186 | function querySnapshotByConversationId(dbPath: string, conversationId: string): SnapshotRow { | CODE |
| LOW | …/specs/assistant-settings-conversation-defaults.e2e.ts | 207 | function queryPreferencesByAssistantKey(dbPath: string, assistantKey: string): PreferenceRow { | CODE |
| LOW | …/specs/assistant-settings-conversation-defaults.e2e.ts | 225 | function queryOptionalPreferencesByAssistantKey(dbPath: string, assistantKey: string): PreferenceRow | null { | CODE |
| LOW | …/specs/assistant-settings-conversation-defaults.e2e.ts | 359 | async function sendGuidMessageCapturingCreateRequest( | CODE |
| LOW | …/specs/assistant-settings-conversation-defaults.e2e.ts | 405 | function locateConversationModelButton(page: Page) { | CODE |
| LOW | …/specs/assistant-settings-conversation-defaults.e2e.ts | 426 | async function captureConversationUiState(page: Page): Promise<ConversationUiState> { | CODE |
| LOW | …/specs/assistant-settings-conversation-defaults.e2e.ts | 443 | async function queryConversationLoadedState( | CODE |
| LOW | …/specs/assistant-settings-conversation-defaults.e2e.ts | 485 | async function reopenConversationFromHistory(page: Page, conversationId: string): Promise<void> { | CODE |
| LOW | …ts/e2e/features/settings/display/css-theme-crud.e2e.ts | 39 | async function deleteCustomThemeViaModal(page: import('@playwright/test').Page, name: string) { | CODE |
| LOW | …builtin-skill-migration/builtin-skill-migration.e2e.ts | 79 | async function listAutoInjectBuiltinSkills(page: Parameters<typeof httpGet>[0]): Promise<BuiltinAutoSkill[]> { | CODE |
| LOW | …es/conversations/message-list-real-conversation.e2e.ts | 35 | function createFakeClaudeConversation(id: string, assistantId: string) { | CODE |
| LOW | …es/conversations/message-list-real-conversation.e2e.ts | 239 | async function startScenarioInBackground( | CODE |
| LOW | …es/conversations/message-list-real-conversation.e2e.ts | 271 | async function waitForBackgroundScenario(page: Page): Promise<void> { | CODE |
| LOW | …es/conversations/message-list-real-conversation.e2e.ts | 297 | async function simulateManualScrollIntervention( | CODE |
| LOW | …/e2e/features/conversations/message-anchor-rail.e2e.ts | 43 | function createFakeClaudeConversation(id: string, assistantId: string) { | CODE |
| LOW | …features/conversations/acp/send-error-surfacing.e2e.ts | 101 | async function expectLatestErrorTipToContain( | CODE |
| LOW | …e/features/conversations/acp/empty-turn-warning.e2e.ts | 79 | async function waitForEmptyTurnController(page: Page, conversationId: string): Promise<void> { | CODE |
| LOW | tests/e2e/features/previews/preview-panel.e2e.ts | 34 | function makeExternalWorkspaceFile(ext: string, body: string): { filePath: string; workspace: string } { | CODE |
| LOW | …ts/e2e/features/previews/preview-oversized-gate.e2e.ts | 51 | async function createProjectConversation(page: import('@playwright/test').Page, workspace: string): Promise<string> { | CODE |
| LOW | tests/e2e/features/previews/preview-tab-identity.e2e.ts | 50 | async function createProjectConversation( | CODE |
| LOW | tests/e2e/features/previews/preview-refresh.e2e.ts | 39 | async function createProjectConversation( | CODE |
| LOW | tests/e2e/features/previews/preview-tab-close.e2e.ts | 39 | async function openConversationWithWorkspace(page: import('@playwright/test').Page, workspace: string): Promise<void> { | CODE |
| LOW | tests/e2e/features/previews/preview-file-types.e2e.ts | 77 | async function createProjectConversation(page: import('@playwright/test').Page, workspace: string): Promise<string> { | CODE |
| LOW | tests/e2e/cases/teams/team-tab-context.e2e.ts | 35 | async function waitForConversationMessage( | CODE |
| LOW | tests/e2e/helpers/navigation.ts | 163 | export async function resetGuidLastSelectedAgent(page: Page, _agentKey = 'aionrs'): Promise<void> { | CODE |
| LOW | tests/e2e/helpers/permissions.ts | 5 | async function clickPreferredPermissionOption(card: Locator): Promise<boolean> { | CODE |
| LOW | tests/e2e/helpers/permissions.ts | 52 | export function startAutoApprovePermissionMessages(page: Page, intervalMs = 500): () => void { | CODE |
| LOW | tests/e2e/helpers/permissions.ts | 81 | export async function waitForPermissionMessageCard( | CODE |
| LOW | tests/e2e/helpers/chatAionrs.ts | 155 | export async function resolveAionrsPreconditions(page: Page): Promise<{ | CODE |
| LOW | tests/e2e/helpers/chatAionrs.ts | 170 | export async function createAionrsConversationViaBridge( | CODE |
| LOW | tests/e2e/helpers/assistantSettings.ts | 10 | function waitForAssistantDetailResponse(page: Page, assistantId: string): Promise<unknown> { | CODE |
| LOW | tests/e2e/helpers/assistantSettings.ts | 199 | export async function waitForAssistantEditorClose(page: Page): Promise<void> { | CODE |
| LOW | tests/e2e/helpers/selectors.ts | 143 | export function assistantOverflowPillById(id: string): string { | CODE |
| LOW | tests/e2e/helpers/skillsHub.ts | 164 | export async function createTempExternalSourceDir(): Promise<{ path: string; cleanup: () => Promise<void> }> { | CODE |
| LOW | tests/e2e/helpers/conversation.ts | 149 | export async function findAssistantIdForBackend( | CODE |
| LOW | tests/e2e/helpers/conversation.ts | 158 | export async function selectAssistantForBackend(page: Page, backend: string): Promise<string | null> { | CODE |
| 261 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/e2e/features/settings/skills/batch-import.e2e.ts | 74 | // Step 2: Click "Import All" button | COMMENT |
| LOW | tests/e2e/features/settings/skills/edge-cases.e2e.ts | 152 | // Step 1: Add highlight parameter to current URL via history API | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 86 | // Step 2: Locate "My Skills" section | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 90 | // Step 4: Verify skill count badge (should show 2) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 147 | // Step 2: Locate target skill card in My Skills section | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 151 | // Step 3: Hover to show delete button (may require actual hover) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 158 | // Step 4: Click delete button | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 162 | // Step 5: Verify confirmation modal appears | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 172 | // Step 6: Click confirm button (Arco Modal confirm button) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 237 | // Step 2: Select two of the three skills by clicking their cards | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 245 | // Step 3: Click batch delete and confirm in the modal | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 315 | // Step 2: Locate the builtin skill card | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 319 | // Step 3: Hover to card to reveal buttons | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 356 | // Step 2: Locate "Discovered External Skills" section | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 363 | // Step 4: Click Tab button for this test's specific source. | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 417 | // Step 2: Locate external skill card | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 426 | // Step 3: Click the card to import (entire card is clickable) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 472 | // Step 2: Locate "Add Path" button in External Skills section | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 479 | // Step 3: Click "Add Path" button | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 489 | // Step 4: Enter source name and path | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 499 | // Step 5: Click confirm (Arco Modal OK button) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 572 | // Step 2: Locate skill card in "My Skills" | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 576 | // Step 3: Hover to show "Export" button and wait | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/core-ui.e2e.ts | 583 | // Step 4: Click "Export" button to open Dropdown (force click to avoid hover issues) | COMMENT |
| LOW | tests/e2e/features/settings/skills/core-ui.e2e.ts | 224 | // Step 1: Enter batch mode | COMMENT |
| LOW | tests/e2e/features/settings/skills/core-ui.e2e.ts | 375 | // Step 5: Verify skill card is displayed | COMMENT |
| LOW | tests/e2e/features/settings/skills/core-ui.e2e.ts | 594 | // Step 5: Select target source from dropdown menu | COMMENT |
| LOW | tests/e2e/features/settings/skills/url-highlight.e2e.ts | 58 | // Step 1: Add highlight parameter via history API | COMMENT |
| LOW | tests/e2e/features/settings/skills/url-highlight.e2e.ts | 99 | // Step 2: Wait for highlight to disappear (2 seconds) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 72 | // Step 2: Dynamically add new skill to external source directory | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 79 | // Step 3: Click external refresh button | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 129 | // Step 3: Fill in duplicate path | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 136 | // Step 4: Click Confirm button (use Arco's OK button class) | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 188 | // Step 2: Fill only Name field | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 197 | // Step 3: Clear Name, fill only Path field | COMMENT |
| LOW⚡ | tests/e2e/features/settings/skills/path-export.e2e.ts | 207 | // Step 4: Fill both fields | COMMENT |
| LOW | tests/e2e/features/settings/skills/path-export.e2e.ts | 117 | // Step 2: Try to add the same path again via UI | COMMENT |
| LOW | tests/e2e/features/settings/skills/path-export.e2e.ts | 169 | // Step 1: Open add custom path modal | COMMENT |
| LOW | tests/e2e/features/settings/skills/path-export.e2e.ts | 250 | // Step 2: Try to export the skill | COMMENT |
| LOW | tests/e2e/features/settings/skills/path-export.e2e.ts | 263 | // Step 3: Select target source from dropdown | COMMENT |
| LOW | tests/e2e/features/settings/skills/manual-import.e2e.ts | 41 | // Step 1: Mock dialog.showOpenDialog to return test skill path | COMMENT |
| LOW | tests/e2e/features/settings/skills/manual-import.e2e.ts | 61 | // Step 2: Click "Import from Folder" button | COMMENT |
| LOW | tests/e2e/features/settings/skills/search.e2e.ts | 76 | // Step 2: Enter search keyword in My Skills search box | COMMENT |
| LOW | tests/e2e/features/settings/skills/search.e2e.ts | 118 | // Step 2: Search with non-existent keyword | COMMENT |
| LOW | tests/e2e/features/settings/skills/search.e2e.ts | 164 | // Step 2: Search external skills | COMMENT |
| LOW | tests/e2e/features/settings/skills/search.e2e.ts | 213 | // Step 2: Search with non-existent keyword | COMMENT |
| LOW | tests/e2e/features/settings/skills/special-cases.e2e.ts | 164 | // Step 1: Click refresh button rapidly 3 times | COMMENT |
| LOW⚡ | …e2e/features/settings/skills/refresh-empty-tabs.e2e.ts | 60 | // Step 2: Dynamically add new skill via Bridge | COMMENT |
| LOW⚡ | …e2e/features/settings/skills/refresh-empty-tabs.e2e.ts | 69 | // Step 3: Click refresh button | COMMENT |
| LOW | …e2e/features/settings/skills/refresh-empty-tabs.e2e.ts | 159 | // Step 2: Verify default tab (first source) is active | COMMENT |
| LOW | …e2e/features/settings/skills/refresh-empty-tabs.e2e.ts | 176 | // Step 3: Click tab B | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 85 | // Step 1: Screenshot initial guid page | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 90 | // Step 2: Create conversation via bridge (uses prioritized aionrs-compatible provider) | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 99 | // Step 3: Send simple message | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 103 | // Step 4: Wait for AI reply | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 159 | // Step 1: Create temp directory with test folder | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 167 | // Step 2: Create conversation via bridge with workspace pre-configured | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 175 | // Step 3: Send message asking about folder (via bridge, no UI interaction needed) | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 181 | // Step 4: Wait for AI reply | COMMENT |
| LOW⚡ | …ts/e2e/features/conversations/aionrs/basic-flow.e2e.ts | 228 | // Step 1: Create test file in workspace | COMMENT |
| 105 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .pre-commit-config.yaml | 1 | # Pre-commit configuration for AionUi | COMMENT |
| LOW | …/unit/renderer/saveContentRefusalContract.dom.test.tsx | 1 | /** | COMMENT |
| LOW | tests/unit/renderer/previewLogoutCleanup.dom.test.tsx | 1 | /** | COMMENT |
| LOW | tests/unit/renderer/previewSizeLimitSetting.test.ts | 1 | /** | COMMENT |
| LOW | tests/unit/renderer/scmBadgeCss.test.ts | 141 | * "this has nothing to do with SCM" and drops it, the coupling becomes unguarded | COMMENT |
| LOW | tests/unit/renderer/scmBadgeCss.test.ts | 161 | // panel. Hence this assertion is on the pairing, not on one selector. | COMMENT |
| LOW | …unit/renderer/chatLayoutMobilePreviewHost.dom.test.tsx | 1 | import React from 'react'; | COMMENT |
| LOW | tests/unit/renderer/previewTabIdentity.dom.test.tsx | 1 | /** | COMMENT |
| LOW | tests/unit/renderer/previewWatchSubscription.test.ts | 1 | /** | COMMENT |
| LOW | tests/unit/renderer/previewWatchSubscription.test.ts | 281 | COMMENT | |
| LOW | tests/unit/renderer/previewSaveIfMatch.dom.test.tsx | 1 | /** | COMMENT |
| LOW | tests/unit/previews/previewPanelNotices.dom.test.tsx | 1 | /** | COMMENT |
| LOW | tests/unit/previews/fileTypeMatrix.test.ts | 1 | /** | COMMENT |
| LOW | …ts/unit/previews/previewScopePersistTypes.dom.test.tsx | 1 | /** | COMMENT |
| LOW | tests/unit/previews/editableSingleSource.dom.test.ts | 1 | /** | COMMENT |
| LOW | tests/unit/previews/previewWatchSignal.dom.test.tsx | 1 | /** | COMMENT |
| LOW | …nit/previews/markdownEditableFromExplorer.dom.test.tsx | 1 | /** | COMMENT |
| LOW | …sts/unit/previews/previewRefreshDirtyGate.dom.test.tsx | 1 | /** | COMMENT |
| LOW | tests/e2e/specs/feedback-scenarios.e2e.ts | 81 | await closeFeedbackModal(page); | COMMENT |
| LOW | …builtin-skill-migration/builtin-skill-migration.e2e.ts | 441 | }); | COMMENT |
| LOW | …builtin-skill-migration/builtin-skill-migration.e2e.ts | 461 | test('S8: legacy {cacheDir}/builtin-skills/ is gone after the current Electron boot', async () => { | COMMENT |
| LOW | …builtin-skill-migration/builtin-skill-migration.e2e.ts | 481 | COMMENT | |
| LOW | …e/features/conversations/antigravity/basic-flow.e2e.ts | 121 | // agy reports no window; a fabricated denominator would be worse than none. | COMMENT |
| LOW | tests/e2e/helpers/skillsHub.ts | 401 | * (TC-S-27 Option A - not used in current v1.3, uses Option B instead) | COMMENT |
| LOW | tests/e2e/helpers/skillsHub.ts | 421 | // } | COMMENT |
| LOW | tests/e2e/helpers/skillsHub.ts | 441 | // | COMMENT |
| LOW | public/pet-states/preview.html | 141 | <script> | COMMENT |
| LOW | scripts/install-web.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/prepare-release-assets.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/install-ubuntu.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packages/desktop/electron.vite.config.ts | 261 | if (warning.code === 'EVAL') return; | COMMENT |
| LOW | …top/src/renderer/components/Markdown/WavedromBlock.tsx | 41 | // Session-wide id allocation: each WavedromBlock instance reserves one number | COMMENT |
| LOW | …desktop/src/renderer/components/layout/Sider/index.tsx | 121 | closePreview(); | COMMENT |
| LOW | …ktop/src/renderer/components/layout/Titlebar/index.tsx | 21 | import './titlebar.css'; | COMMENT |
| LOW | …ktop/src/renderer/components/layout/Titlebar/index.tsx | 61 | <path d='M24 6C34 6 42 13 42 22C42 31 34 38 24 38C21.7 38 19.5 37.7 17.5 37.2L7 41L10 32C7.5 29 6 25.3 6 22C6 13 1 | COMMENT |
| LOW | …/desktop/src/renderer/components/media/WebviewHost.tsx | 101 | // 就跳过重置。完整说明与「为什么要记一组而不是最后一个」见 webviewHistory.ts。 | COMMENT |
| LOW | packages/desktop/src/renderer/pet/petHitRenderer.ts | 81 | document.addEventListener('contextmenu', (e) => e.preventDefault()); | COMMENT |
| LOW | …rer/pages/settings/AssistantSettings/assistantUtils.ts | 141 | /// | COMMENT |
| LOW | packages/desktop/src/renderer/pages/guid/GuidPage.tsx | 501 | return modelSelection.setCurrentModel(model, { persistPreference: !hasSelectedAssistant }); | COMMENT |
| LOW | …s/desktop/src/renderer/pages/guid/hooks/useGuidSend.ts | 141 | // CLI agent, which owns its own model list. Used as a blanket fallback it | COMMENT |
| LOW | …ages/desktop/src/renderer/pages/conversation/index.tsx | 41 | // in-memory list snapshot (every row carries project_id) — before the async | COMMENT |
| LOW | …nderer/pages/conversation/platforms/acp/AcpSendBox.tsx | 741 | }; | COMMENT |
| LOW | …c/renderer/pages/conversation/Messages/MessageList.tsx | 461 | COMMENT | |
| LOW | …nderer/pages/conversation/explorer/monitorTransport.ts | 61 | // Fan out directory changes to the preview panel as well. | COMMENT |
| LOW | …nderer/pages/conversation/explorer/monitorTransport.ts | 81 | // | COMMENT |
| LOW | …renderer/pages/conversation/explorer/ExplorerPanel.tsx | 161 | // leaf. loadMore makes arco honor `isLeaf: false` and show the expander; it also | COMMENT |
| LOW | …renderer/pages/conversation/explorer/ExplorerPanel.tsx | 301 | </span> | COMMENT |
| LOW | …erer/pages/conversation/explorer/ExplorerContainer.tsx | 181 | // Derive the project id from the SWR key, not the captured `projectId` | COMMENT |
| LOW | …erer/pages/conversation/explorer/ExplorerContainer.tsx | 241 | } catch { | COMMENT |
| LOW | …erer/pages/conversation/explorer/ExplorerContainer.tsx | 341 | const payload: FileOrFolderItem[] = [item]; | COMMENT |
| LOW | …erer/pages/conversation/explorer/ExplorerContainer.tsx | 461 | if (!projectId) return null; | COMMENT |
| LOW | …erer/pages/conversation/explorer/ExplorerContainer.tsx | 481 | // • Files — refresh every pe root. Two independent staleness sources are | COMMENT |
| LOW | …rer/pages/conversation/components/ChatLayout/index.tsx | 81 | const previewHosted = Boolean(props.previewHosted) && !isMobile; | COMMENT |
| LOW | …/pages/conversation/Preview/context/PreviewContext.tsx | 41 | fileRef?: ChatFileRef; | COMMENT |
| LOW | …/pages/conversation/Preview/context/PreviewContext.tsx | 561 | if (!prev.has(tabId)) return prev; | COMMENT |
| LOW | …/pages/conversation/Preview/context/PreviewContext.tsx | 641 | // Reconciliation diffs wanted against subscribed, so the extra passes this causes | COMMENT |
| LOW | …ation/Preview/components/PreviewPanel/PreviewPanel.tsx | 201 | } | COMMENT |
| LOW | …ation/Preview/components/PreviewPanel/PreviewPanel.tsx | 401 | // Save every unsaved tab in the batch before closing any of them: closing | COMMENT |
| LOW | …ation/Preview/components/PreviewPanel/PreviewPanel.tsx | 481 | ); | COMMENT |
| LOW | …ation/Preview/components/PreviewPanel/PreviewPanel.tsx | 521 | // 这项在非 Electron 下置灰,这里再挡一次,避免调用路径被别处复用时漏掉。 | COMMENT |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/renderer/hooks/teamCreateModal.dom.test.tsx | 209 | expect(searchInput).toHaveAttribute('placeholder', 'Search'); | CODE |
| LOW | scripts/install-web.sh | 167 | # reliable marker of "placeholder". We avoid literal "__VERSION__" here | COMMENT |
| LOW | …sktop/src/renderer/components/base/AionSearchInput.tsx | 42 | 'value' | 'onChange' | 'placeholder' | 'disabled' | 'autoFocus' | 'className' | CODE |
| LOW | …src/renderer/components/base/AionInlineSearchInput.tsx | 41 | 'value' | 'onChange' | 'placeholder' | 'disabled' | 'autoFocus' | 'className' | CODE |
| LOW | …renderer/services/i18n/locales/tr-TR/conversation.json | 4 | "placeholder": "Mesaj gönder, dosya yükle, klasör aç veya komutlar için / yaz...", | CODE |
| LOW | …renderer/services/i18n/locales/tr-TR/conversation.json | 99 | "placeholder": "Mesaj içeriğini ara...", | CODE |
| LOW | …renderer/services/i18n/locales/tr-TR/conversation.json | 669 | "placeholder": "Dosya adına göre ara", | CODE |
| LOW | …top/src/renderer/services/i18n/locales/tr-TR/team.json | 37 | "placeholder": "Takım lideri asistana mesaj gönder..." | CODE |
| LOW | …ktop/src/renderer/services/i18n/locales/tr-TR/acp.json | 11 | "placeholder": "{{backend}}'a mesaj gönder..." | CODE |
| LOW | …renderer/services/i18n/locales/fr-FR/conversation.json | 4 | "placeholder": "Envoyez un message, téléversez des fichiers, ouvrez un dossier, créez une tâche planifiée ou tapez / | CODE |
| LOW | …renderer/services/i18n/locales/fr-FR/conversation.json | 99 | "placeholder": "Rechercher dans le contenu des messages...", | CODE |
| LOW | …renderer/services/i18n/locales/fr-FR/conversation.json | 667 | "placeholder": "Rechercher des fichiers par nom", | CODE |
| LOW | …top/src/renderer/services/i18n/locales/fr-FR/team.json | 37 | "placeholder": "Envoyer un message à l'agent coordinateur..." | CODE |
| LOW | …ktop/src/renderer/services/i18n/locales/fr-FR/acp.json | 11 | "placeholder": "Envoyer un message à {{backend}}..." | CODE |
| LOW | …renderer/services/i18n/locales/de-DE/conversation.json | 4 | "placeholder": "Nachricht senden, Dateien hochladen, Ordner öffnen, eine geplante Aufgabe erstellen oder / für Befeh | CODE |
| LOW | …renderer/services/i18n/locales/de-DE/conversation.json | 99 | "placeholder": "Nachrichteninhalt suchen...", | CODE |
| LOW | …renderer/services/i18n/locales/de-DE/conversation.json | 668 | "placeholder": "Dateien nach Name suchen", | CODE |
| LOW | …top/src/renderer/services/i18n/locales/de-DE/team.json | 37 | "placeholder": "Nachricht an Dispatch-Agenten..." | CODE |
| LOW | …ktop/src/renderer/services/i18n/locales/de-DE/acp.json | 11 | "placeholder": "Nachricht an {{backend}} senden..." | CODE |
| LOW | …renderer/services/i18n/locales/es-ES/conversation.json | 4 | "placeholder": "Envía un mensaje, sube archivos, abre una carpeta, crea una tarea programada o escribe / para ver lo | CODE |
| LOW | …renderer/services/i18n/locales/es-ES/conversation.json | 99 | "placeholder": "Buscar en el contenido de mensajes...", | CODE |
| LOW | …renderer/services/i18n/locales/es-ES/conversation.json | 668 | "placeholder": "Buscar archivos por nombre", | CODE |
| LOW | …top/src/renderer/services/i18n/locales/es-ES/team.json | 37 | "placeholder": "Mensaje al agente coordinador..." | CODE |
| LOW | …ktop/src/renderer/services/i18n/locales/es-ES/acp.json | 11 | "placeholder": "Enviar mensaje a {{backend}}..." | CODE |
| LOW | …renderer/services/i18n/locales/ru-RU/conversation.json | 4 | "placeholder": "Отправьте сообщение, загрузите файлы, откройте папку, создайте запланированную задачу или введите / | CODE |
| LOW | …renderer/services/i18n/locales/ru-RU/conversation.json | 103 | "placeholder": "Поиск по сообщениям...", | CODE |
| LOW | …renderer/services/i18n/locales/ru-RU/conversation.json | 675 | "placeholder": "Поиск файлов по имени", | CODE |
| LOW | …top/src/renderer/services/i18n/locales/ru-RU/team.json | 37 | "placeholder": "Сообщение ассистенту-лидеру команды..." | CODE |
| LOW | …ktop/src/renderer/services/i18n/locales/ru-RU/acp.json | 11 | "placeholder": "Отправить сообщение {{backend}}..." | CODE |
| LOW | …renderer/services/i18n/locales/ja-JP/conversation.json | 4 | "placeholder": "メッセージの送信、ファイルの追加、フォルダーの追加、スケジュールタスクの作成、または / でコマンド呼び出し...", | CODE |
| LOW | …renderer/services/i18n/locales/ja-JP/conversation.json | 99 | "placeholder": "メッセージ内容を検索...", | CODE |
| LOW | …renderer/services/i18n/locales/ja-JP/conversation.json | 667 | "placeholder": "ファイル名で検索", | CODE |
| LOW | …top/src/renderer/services/i18n/locales/ja-JP/team.json | 37 | "placeholder": "チームリーダーアシスタントにメッセージを送信..." | CODE |
| LOW | …ktop/src/renderer/services/i18n/locales/ja-JP/acp.json | 11 | "placeholder": "{{backend}}にメッセージを送信..." | CODE |
| LOW | …renderer/services/i18n/locales/zh-CN/conversation.json | 4 | "placeholder": "发消息、上传文件、打开文件夹、创建定时任务,或输入 / 唤起命令...", | CODE |
| LOW | …renderer/services/i18n/locales/zh-CN/conversation.json | 99 | "placeholder": "搜索消息内容...", | CODE |
| LOW | …renderer/services/i18n/locales/zh-CN/conversation.json | 667 | "placeholder": "按文件名搜索", | CODE |
| LOW | …top/src/renderer/services/i18n/locales/zh-CN/team.json | 37 | "placeholder": "向团队 Leader 助手发消息..." | CODE |
| LOW | …ktop/src/renderer/services/i18n/locales/zh-CN/acp.json | 11 | "placeholder": "发送消息到 {{backend}}..." | CODE |
| LOW | …renderer/services/i18n/locales/zh-TW/conversation.json | 4 | "placeholder": "發送訊息、上傳檔案、開啟資料夾、建立定時任務,或輸入 / 喚起命令...", | CODE |
| LOW | …renderer/services/i18n/locales/zh-TW/conversation.json | 99 | "placeholder": "搜尋訊息內容...", | CODE |
| LOW | …renderer/services/i18n/locales/zh-TW/conversation.json | 667 | "placeholder": "依檔名搜尋", | CODE |
| LOW | …top/src/renderer/services/i18n/locales/zh-TW/team.json | 37 | "placeholder": "向團隊 Leader 助手發訊息..." | CODE |
| LOW | …ktop/src/renderer/services/i18n/locales/zh-TW/acp.json | 11 | "placeholder": "發送訊息到 {{backend}}..." | CODE |
| LOW | …renderer/services/i18n/locales/ko-KR/conversation.json | 4 | "placeholder": "메시지 전송, 파일 업로드, 폴더 열기, 예약 작업 만들기 또는 / 로 명령 호출...", | CODE |
| LOW | …renderer/services/i18n/locales/ko-KR/conversation.json | 99 | "placeholder": "메시지 내용 검색...", | CODE |
| LOW | …renderer/services/i18n/locales/ko-KR/conversation.json | 667 | "placeholder": "파일 이름으로 검색", | CODE |
| LOW | …top/src/renderer/services/i18n/locales/ko-KR/team.json | 37 | "placeholder": "팀 리더 어시스턴트에게 메시지 보내기..." | CODE |
| LOW | …ktop/src/renderer/services/i18n/locales/ko-KR/acp.json | 11 | "placeholder": "{{backend}}에게 메시지 보내기..." | CODE |
| LOW | …renderer/services/i18n/locales/pt-BR/conversation.json | 4 | "placeholder": "Envie uma mensagem, faça upload de arquivos, abra uma pasta, crie uma tarefa agendada ou digite / pa | CODE |
| LOW | …renderer/services/i18n/locales/pt-BR/conversation.json | 99 | "placeholder": "Pesquisar conteúdo da mensagem...", | CODE |
| LOW | …renderer/services/i18n/locales/pt-BR/conversation.json | 673 | "placeholder": "Buscar arquivos por nome", | CODE |
| LOW | …top/src/renderer/services/i18n/locales/pt-BR/team.json | 37 | "placeholder": "Enviar mensagem ao assistente líder da equipe..." | CODE |
| LOW | …ktop/src/renderer/services/i18n/locales/pt-BR/acp.json | 11 | "placeholder": "Enviar mensagem para {{backend}}..." | CODE |
| LOW | …renderer/services/i18n/locales/en-US/conversation.json | 4 | "placeholder": "Send a message, upload files, open a folder, create a scheduled task, or type / for commands...", | CODE |
| LOW | …renderer/services/i18n/locales/en-US/conversation.json | 99 | "placeholder": "Search message content...", | CODE |
| LOW | …renderer/services/i18n/locales/en-US/conversation.json | 667 | "placeholder": "Search files by name", | CODE |
| LOW | …top/src/renderer/services/i18n/locales/en-US/team.json | 37 | "placeholder": "Message the team leader assistant..." | CODE |
| LOW | …ktop/src/renderer/services/i18n/locales/en-US/acp.json | 11 | "placeholder": "Send message to {{backend}}..." | CODE |
| LOW | …renderer/services/i18n/locales/uk-UA/conversation.json | 4 | "placeholder": "Надішліть повідомлення, завантажте файли, відкрийте папку, створіть заплановане завдання або введіть | CODE |
| 9 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | .github/workflows/project-automation.yml | 131 | const item = result.organization.projectV2.items.nodes.find(i => i.content?.id === contentId); | CODE |
| CRITICAL | .github/workflows/project-automation.yml | 197 | const item = result.organization.projectV2.items.nodes.find(i => i.content?.id === contentId); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .github/workflows/gpt-review.yml | 219 | '*🤖 This review was generated by AI and may contain inaccuracies. Please focus on issues you agree with an | CODE |
| HIGH | .github/workflows/gpt-pr-assessment.yml | 304 | '*🤖 This assessment was generated by AI and serves as a reference for maintainers. Please use your own jud | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/install-web.sh | 5 | # Usage: | COMMENT |
| LOW | scripts/prepare-release-assets.sh | 7 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/e2e/specs/team-describe-assistant.e2e.ts | 257 | // payload wins. This keeps the test robust against user config drift. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/install-web.sh | 371 | # Check if BIN_DIR is already in PATH | COMMENT |
| LOW | scripts/install-web.sh | 412 | # Check if configuration already exists | COMMENT |
| LOW | .github/workflows/_build-reusable.yml | 472 | # Check if DMG was created (most important artifact) | COMMENT |