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 presents the forensic synthetic code analysis of iOfficeAI/AionUi, a TypeScript project with 32,377 GitHub stars. SynthScan v2.0 examined 401,635 lines of code across 2155 source files, recording 1094 pattern matches distributed across 11 syntactic categories. The overall adjusted score of 5.0 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 1094 distinct pattern matches across 11 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 |
|---|---|---|---|---|
| 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 | COMMENT | |
| LOW | …renderer/pages/conversation/explorer/ExplorerPanel.tsx | 301 | <span dir='ltr' className='overflow-hidden text-ellipsis whitespace-nowrap'> | COMMENT |
| LOW | …erer/pages/conversation/explorer/ExplorerContainer.tsx | 141 | COMMENT | |
| LOW | …erer/pages/conversation/explorer/ExplorerContainer.tsx | 241 | Message.error(t('conversation.explorer.removeFailed')); | COMMENT |
| LOW | …erer/pages/conversation/explorer/ExplorerContainer.tsx | 341 | COMMENT | |
| LOW | …erer/pages/conversation/explorer/ExplorerContainer.tsx | 361 | // send box is mounted for the active conversation. | 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 |
| LOW | …ation/Preview/components/PreviewPanel/PreviewPanel.tsx | 561 | reportCopy(copyText(relative)); | COMMENT |
| 16 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 | 667 | "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 | 665 | "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 | 666 | "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 | 666 | "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 | 673 | "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 | 665 | "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 | 665 | "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 | 665 | "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 | 665 | "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 | 671 | "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 | 665 | "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 |