AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs
This report presents the forensic synthetic code analysis of CherryHQ/cherry-studio, a TypeScript project with 48,538 GitHub stars. SynthScan v2.0 examined 1,108,103 lines of code across 5896 source files, recording 3026 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 3.6 places this repository in the Likely human-written 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 3026 distinct pattern matches across 17 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 | …es/skills/skill-creator/eval-viewer/generate_review.py | 284 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …es/skills/skill-creator/eval-viewer/generate_review.py | 286 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docs/references/ai/stream-manager.md | 415 | // ── Single dispatch entry ───────────────────────────────────────── | COMMENT |
| MEDIUM | docs/references/ai/stream-manager.md | 434 | // ── Subscription management ─────────────────────────────────────── | COMMENT |
| MEDIUM | docs/references/ai/stream-manager.md | 440 | // ── Control ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | docs/references/ai/stream-manager.md | 454 | // ── Inspection (read-only snapshot) ─────────────────────────────── | COMMENT |
| MEDIUM | …s/data/best-practice-default-values-and-nullability.md | 181 | // ─── DB schema ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …s/data/best-practice-default-values-and-nullability.md | 199 | // ─── Zod schema ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …s/data/best-practice-default-values-and-nullability.md | 231 | // ─── Service ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …s/data/best-practice-default-values-and-nullability.md | 252 | // ─── Row → Entity ───────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/download-binaries.js | 14 | // ── Tool definitions ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/download-binaries.js | 227 | // ── Core logic ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/download-binaries.js | 328 | // ── Main ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/scripts/generate-avatars.ts | 273 | // ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/scripts/generate-avatars.ts | 275 | // ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/scripts/__tests__/svgo-convert-to-mono.test.ts | 19 | // ─── Helpers ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/scripts/__tests__/svgo-convert-to-mono.test.ts | 46 | // ─── Single-color fill conversion ──────────────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/scripts/__tests__/svgo-convert-to-mono.test.ts | 82 | // ─── Multi-color opacity mapping ───────────────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/scripts/__tests__/svgo-convert-to-mono.test.ts | 103 | // ─── Narrow luminance range opacity spread ──────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/scripts/__tests__/svgo-convert-to-mono.test.ts | 136 | // ─── White fill handling: backgroundWasDark ────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/scripts/__tests__/svgo-convert-to-mono.test.ts | 189 | // ─── url(#gradient) fills ──────────────────────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/scripts/__tests__/svgo-convert-to-mono.test.ts | 189 | // ─── url(#gradient) fills ──────────────────────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/scripts/__tests__/svgo-convert-to-mono.test.ts | 203 | // ─── Removal of defs/clipPath/attributes ───────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/scripts/__tests__/svgo-convert-to-mono.test.ts | 264 | // ─── Phase 0: Mask-based shape extraction ──────────────────────────── | COMMENT |
| MEDIUM | …ages/ui/scripts/__tests__/svgo-convert-to-mono.test.ts | 347 | // ─── Integration: backgroundWasDark threshold ──────────────────────── | COMMENT |
| MEDIUM | …ages/ui/scripts/__tests__/svgo-convert-to-mono.test.ts | 387 | // ─── Cutout / luminance mask preservation ───────────────────────────── | COMMENT |
| MEDIUM | packages/ui/scripts/__tests__/svg-utils.test.ts | 13 | // ─── colorToLuminance ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/scripts/__tests__/svg-utils.test.ts | 64 | // ─── isWhiteFill ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/scripts/__tests__/svg-utils.test.ts | 96 | // ─── parseSvgPathBounds ───────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/scripts/__tests__/svg-utils.test.ts | 153 | // ─── parseViewBox ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/scripts/__tests__/svg-utils.test.ts | 177 | // ─── isLargeShape ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/scripts/__tests__/svg-utils.test.ts | 195 | // ─── normalizeColor ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/ui/scripts/__tests__/svg-utils.test.ts | 213 | // ─── isMonochromeSvg ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …es/ui/scripts/__tests__/svgo-remove-background.test.ts | 18 | // ─── Helpers ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …es/ui/scripts/__tests__/svgo-remove-background.test.ts | 35 | // ─── Rule 1: <rect> background ────────────────────────────────────── | COMMENT |
| MEDIUM | …es/ui/scripts/__tests__/svgo-remove-background.test.ts | 106 | // ─── Rule 2: Rounded-rect path background ─────────────────────────── | COMMENT |
| MEDIUM | …es/ui/scripts/__tests__/svgo-remove-background.test.ts | 177 | // ─── Rule 3: Large dark traced background ──────────────────────────── | COMMENT |
| MEDIUM | …es/ui/scripts/__tests__/svgo-remove-background.test.ts | 285 | // ─── Rule 4: Large white background path ───────────────────────────── | COMMENT |
| MEDIUM | …es/ui/scripts/__tests__/svgo-remove-background.test.ts | 301 | // ─── detectOnly mode ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …es/ui/scripts/__tests__/svgo-remove-background.test.ts | 341 | // ─── Element collection: skip mask/clipPath/defs ───────────────────── | COMMENT |
| MEDIUM | …es/ui/scripts/__tests__/svgo-remove-background.test.ts | 374 | // ─── Preserves non-background elements ─────────────────────────────── | COMMENT |
| MEDIUM | …ponents/composites/entity-selector/entity-selector.tsx | 97 | // ── Keyboard navigation ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/provider-registry/scripts/upstream.ts | 56 | // ── models.dev ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/provider-registry/scripts/upstream.ts | 146 | // ── OpenRouter ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/provider-registry/scripts/upstream.ts | 187 | // ── merge across sources (the fix for the minimax-m3 video gap) ─────────────── | COMMENT |
| MEDIUM | packages/provider-registry/scripts/upstream.ts | 225 | // ── raw upstream API shapes ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/provider-registry/src/utils/normalize.ts | 9 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/provider-registry/src/utils/normalize.ts | 11 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/provider-registry/src/utils/normalize.ts | 131 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/provider-registry/src/utils/normalize.ts | 133 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ges/provider-registry/src/schemas/imageParamCatalog.ts | 33 | // ── Value-type helpers ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kages/provider-registry/src/schemas/provider-models.ts | 27 | // ═══════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | …kages/provider-registry/src/schemas/provider-models.ts | 29 | // ═══════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | packages/provider-registry/src/schemas/provider.ts | 15 | // ═══════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | packages/provider-registry/src/schemas/provider.ts | 17 | // ═══════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | packages/provider-registry/src/schemas/provider.ts | 38 | // ═══════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | packages/provider-registry/src/schemas/provider.ts | 44 | // ═══════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | packages/provider-registry/src/schemas/provider.ts | 169 | // ═══════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | packages/provider-registry/src/schemas/provider.ts | 171 | // ═══════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | packages/provider-registry/src/schemas/enums.ts | 11 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| 376 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …s/data-classify/scripts/DO-NOT-USE-check-duplicates.js | 6 | function checkDuplicatesAndChildren() { | CODE |
| LOW | scripts/skills-common.ts | 53 | export function buildAgentsSkillsGitignore(skillNames: string[]): string { | CODE |
| LOW | scripts/skills-common.ts | 71 | export function buildClaudeSkillsGitignore(skillNames: string[]): string { | CODE |
| LOW | scripts/update-app-upgrade-config.ts | 485 | async function ensureReleaseAvailability(releaseInfo: ReleaseInfo): Promise<ReleaseAvailability> { | CODE |
| LOW | scripts/skills-check.ts | 65 | function checkTrackedFilesAgainstWhitelist(skillNames: string[], errors: string[]) { | CODE |
| LOW | scripts/check-legacy-css-vars.ts | 204 | export function findLegacyVarHitsInContent(content: string, filePath: string): Finding[] { | CODE |
| LOW | scripts/check-pr-style-reminders.ts | 79 | function isCanonicalClassCheckFile(filePath: string): boolean { | CODE |
| LOW | scripts/check-pr-style-reminders.ts | 95 | function getChangedCanonicalClassFiles(baseRef: string, headRef: string): string[] { | CODE |
| LOW | scripts/check-pr-style-reminders.ts | 105 | export function parseAddedLineNumbersFromDiff(diff: string): Set<number> { | CODE |
| LOW | scripts/check-pr-style-reminders.ts | 155 | export function parseAddedLegacyVarFindingsFromDiff(diff: string, filePath: string): PullRequestLegacyFinding[] { | CODE |
| LOW | scripts/check-pr-style-reminders.ts | 204 | export function checkPullRequestLegacyVars({ | CODE |
| LOW | scripts/check-pr-style-reminders.ts | 216 | export async function checkPullRequestTailwindCanonicalClasses({ | CODE |
| LOW | scripts/check-pr-style-reminders.ts | 240 | export function buildPullRequestStyleRemindersComment( | CODE |
| LOW | scripts/check-pr-style-reminders.ts | 261 | function buildLegacyVarsCommentSection(findings: PullRequestLegacyFinding[]): string { | CODE |
| LOW | scripts/check-pr-style-reminders.ts | 301 | function buildCanonicalClassesCommentSection(findings: PullRequestTailwindCanonicalFinding[]): string { | CODE |
| LOW | scripts/check-unused-i18n.ts | 115 | function getJsxAttributeStringValue(node: Node): string | null { | CODE |
| LOW | scripts/check-unused-i18n.ts | 161 | function collectTemplateExpressionMatches( | CODE |
| LOW | scripts/check-unused-i18n.ts | 204 | function collectExactSourceTextReferences( | CODE |
| LOW | scripts/check-unused-i18n.ts | 218 | function collectShortcutReferences(localeKeys: Set<string>, usedKeys: Set<string>): void { | CODE |
| LOW | scripts/check-unused-i18n.ts | 226 | function collectTranslationNamespaceAliases( | CODE |
| LOW | scripts/fix-tailwind-canonical-classes.ts | 97 | function canonicalizeCssVariableToken(originalToken: string, canonicalToken: string): string { | CODE |
| LOW | scripts/fix-tailwind-canonical-classes.ts | 122 | function collectCanonicalClassFindings( | CODE |
| LOW | scripts/fix-tailwind-canonical-classes.ts | 196 | export function findTailwindCanonicalClassFindingsInContent( | CODE |
| LOW | scripts/update-languages.ts | 48 | function generateLanguagesFileContent(languages: Record<string, LanguageData>): string { | CODE |
| LOW | packages/extension-table-plus/src/cell/table-cell.ts | 31 | function createCellSelectionDecorationSet(doc: ProseMirrorNode, selection: Selection): DecorationSet { | CODE |
| LOW | …ries/components/composites/composite-input.stories.tsx | 433 | render: function SelectVariantInteractiveExample() { | CODE |
| LOW | …ries/components/composites/composite-input.stories.tsx | 778 | render: function EmailVariantInteractiveExample() { | CODE |
| LOW | …ries/components/composites/composite-input.stories.tsx | 978 | render: function SubscribeNewsletterExample() { | CODE |
| LOW | …ui/stories/components/composites/menu-list.stories.tsx | 210 | function SmallMenuWithGroupsExample() { | CODE |
| LOW | …ui/stories/components/composites/menu-list.stories.tsx | 270 | function SettingsSubmenuActiveBoldExample() { | CODE |
| LOW | …ges/ui/stories/components/primitives/input.stories.tsx | 316 | render: function RealTimeValidationExample() { | CODE |
| LOW | …es/ui/stories/components/primitives/switch.stories.tsx | 520 | render: function InteractiveLoadingExample() { | CODE |
| LOW | …/ui/stories/components/primitives/textarea.stories.tsx | 97 | render: function WithCharacterCountExample() { | CODE |
| LOW | …/ui/stories/components/primitives/combobox.stories.tsx | 497 | render: function TriggerSearchFontListExample() { | CODE |
| LOW | …/ui/stories/components/primitives/combobox.stories.tsx | 535 | render: function CustomFilterOptionExample() { | CODE |
| LOW | …s/components/primitives/description-switch.stories.tsx | 271 | render: function NotificationSettingsExample() { | CODE |
| LOW | …s/components/primitives/description-switch.stories.tsx | 384 | render: function ApplicationSettingsExample() { | CODE |
| LOW | …s/components/primitives/description-switch.stories.tsx | 557 | render: function ComplexSettingsPanelExample() { | CODE |
| LOW | packages/ui/scripts/generate-icons.ts | 149 | function collectStaticSvgReferences(jsCode: string): Set<string> { | CODE |
| LOW | packages/ui/scripts/svgo-remove-background.ts | 61 | export function createRemoveBackgroundPlugin(options: RemoveBackgroundOptions = {}) { | CODE |
| LOW | packages/ui/scripts/svgo-convert-to-mono.ts | 78 | export function createConvertToMonoPlugin(options: ConvertToMonoOptions = {}) { | CODE |
| LOW | …ges/ui/src/components/composites/markdown/internal.tsx | 43 | function resolveDefaultRehypePlugins(): ResolvedDefaultRehypePlugins { | CODE |
| LOW | …/composites/markdown/plugins/rehype-prefix-svg-refs.ts | 56 | export function rehypePrefixSvgReferences(clobberPrefix = 'user-content-') { | CODE |
| LOW | …i/src/components/composites/markdown/utils/sanitize.ts | 194 | export function createMarkdownSanitizeSchema(schema: MarkdownSanitizeSchema): MarkdownSanitizeSchema { | CODE |
| LOW | …ages/ui/src/components/primitives/portal-container.tsx | 31 | export function DialogPortalContainerProvider({ | CODE |
| LOW | packages/ui/src/components/primitives/calendar.tsx | 128 | function handleCalendarDropdownChange(value: string | number, onChange: DropdownProps['onChange']) { | CODE |
| LOW | …i/src/components/primitives/__tests__/popover.test.tsx | 23 | function ControlledForceMountPopover({ onOutsideClick }: { onOutsideClick: () => void }) { | CODE |
| LOW | packages/ui/src/components/icons/loader.ts | 27 | function loadProviderCatalogModule(): Promise<ProviderCatalogModule> { | CODE |
| LOW | packages/ui/src/components/icons/registry.ts | 259 | export function resolveModelToProviderIconRef(modelId: string): IconRef | undefined { | CODE |
| LOW | packages/provider-registry/src/registry-utils.ts | 62 | export function buildRuntimeEndpointConfigs( | CODE |
| LOW | packages/provider-registry/src/registry-utils.ts | 137 | export function endpointImpliedCapability(endpointType: EndpointType | undefined | null): ModelCapability | undefined { | CODE |
| LOW | packages/provider-registry/src/registry-loader.ts | 38 | export function readProviderModelRegistry(jsonPath: string): { version: string; overrides: ProviderModelOverride[] } { | CODE |
| LOW | packages/provider-registry/src/utils/normalize.ts | 240 | export function normalizeVersionSeparators(modelId: string): string { | CODE |
| LOW | packages/provider-registry/src/utils/normalize.ts | 264 | export function stripVariantQuantDateSuffixes(modelId: string): string { | CODE |
| LOW | …-sdk-provider/src/openai-compatible-reranking-model.ts | 108 | export function createOpenAICompatibleRerankingModel( | CODE |
| LOW | packages/aiCore/test_utils/helpers/common.ts | 14 | export function createTestStreamingProvider(chunks: any[]) { | CODE |
| LOW | packages/aiCore/test_utils/helpers/common.ts | 62 | export function createDelayedAbortController(delayMs: number): AbortController { | CODE |
| LOW | packages/aiCore/test_utils/helpers/common.ts | 228 | export function createRateLimitedProvider(limitPerSecond: number) { | CODE |
| LOW | packages/aiCore/src/core/runtime/index.ts | 121 | export async function createOpenAICompatibleExecutor( | CODE |
| LOW | src/renderer/types/mcp.ts | 258 | export function safeValidateMcpServerConfig(config: unknown) { | CODE |
| 1082 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/e2e/README.md | 136 | this.someInput = page.locator('input[placeholder*="placeholder"]') | CODE |
| LOW | tests/e2e/pages/home.page.ts | 108 | return input.first().getAttribute('placeholder') | CODE |
| LOW | scripts/check-hardcoded-strings.ts | 18 | 'placeholder', | CODE |
| LOW | scripts/check-hardcoded-strings.ts | 34 | const UI_PROPERTIES = ['message', 'text', 'title', 'label', 'placeholder', 'description', 'detail'] | CODE |
| LOW | …ui/stories/components/composites/scrollbar.stories.tsx | 24 | Line {i + 1}: Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | …ui/stories/components/composites/scrollbar.stories.tsx | 24 | Line {i + 1}: Lorem ipsum dolor sit amet, consectetur adipiscing elit. | CODE |
| LOW | …ries/components/composites/composite-input.stories.tsx | 1173 | placeholder="John Doe" | CODE |
| LOW | …ges/ui/stories/components/primitives/input.stories.tsx | 283 | <Input type="email" placeholder="email@example.com" defaultValue="user@example.com" /> | CODE |
| LOW | …ges/ui/stories/components/primitives/input.stories.tsx | 573 | <Input id="profile-name" placeholder="John Doe" /> | CODE |
| LOW | …es/ui/stories/components/primitives/drawer.stories.tsx | 154 | defaultValue="John Doe" | CODE |
| LOW | …es/ui/stories/components/primitives/drawer.stories.tsx | 195 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | …es/ui/stories/components/primitives/drawer.stories.tsx | 195 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | …es/ui/stories/components/primitives/dialog.stories.tsx | 196 | defaultValue="John Doe" | CODE |
| LOW | …es/ui/stories/components/primitives/dialog.stories.tsx | 264 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | …es/ui/stories/components/primitives/dialog.stories.tsx | 264 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | …/stories/components/primitives/input-group.stories.tsx | 516 | <InputGroupInput type="email" placeholder="email@example.com" defaultValue="user@example.com" /> | CODE |
| LOW | …/ui/stories/components/primitives/combobox.stories.tsx | 65 | label: 'John Doe', | CODE |
| LOW | …omposites/search-input/__tests__/search-input.test.tsx | 18 | expect(screen.getByRole('searchbox')).toHaveAttribute('placeholder', '搜索') | CODE |
| LOW | …/src/components/primitives/__tests__/combobox.test.tsx | 49 | expect(input).toHaveAttribute('placeholder', 'Beta') | CODE |
| LOW | …nderer/components/RichEditor/extensions/placeholder.ts | 15 | name: 'placeholder', | CODE |
| LOW | …nderer/components/RichEditor/extensions/placeholder.ts | 29 | key: new PluginKey('placeholder'), | CODE |
| LOW | …nderer/components/RichEditor/extensions/placeholder.ts | 54 | const classes = ['placeholder'] | CODE |
| LOW | …r/components/composer/__tests__/composerPreset.test.ts | 15 | 'placeholder', | CODE |
| LOW | src/renderer/components/popups/PromptPopup.tsx | 10 | 'defaultValue' | 'onValueChange' | 'placeholder' | 'ref' | 'value' | CODE |
| LOW | …rceCatalog/dialogs/edit/__tests__/EditDialogs.test.tsx | 698 | expect(instructionsInput).toHaveAttribute('placeholder', 'Tell this agent how to work') | CODE |
| LOW | …dows/quickAssistant/home/__tests__/HomeWindow.test.tsx | 143 | expect(screen.getByTestId('quick-input')).toHaveAttribute('placeholder', 'Ask Qwen') | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 1073 | "placeholder": "选择知识库" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 1077 | "placeholder": "输入名称" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 1081 | "placeholder": "输入提示词", | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 5798 | "placeholder": "请输入备份文件名" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 5807 | "placeholder": "Bucket, 例如: example" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 5811 | "placeholder": "https://s3.example.com" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 5874 | "placeholder": "请选择要恢复的备份文件" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 5882 | "placeholder": "例如:/cherry-studio" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 5886 | "placeholder": "Secret Access Key" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 6638 | "placeholder": "例如 128000" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 6642 | "placeholder": "选择端点类型", | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 6649 | "placeholder": "例如 ChatGPT", | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 6654 | "placeholder": "例如 128000" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 6658 | "placeholder": "例如 4096" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 6662 | "placeholder": "例如 gpt-5.5", | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 6665 | "placeholder": "选择模型" | CODE |
| LOW⚡ | src/renderer/i18n/locales/zh-cn.json | 6671 | "placeholder": "例如 GPT-5.5", | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 16 | "placeholder": "选择智能体类型" | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 191 | "placeholder": "选择 bash.exe 路径", | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 202 | "placeholder": "输入消息,按 {{key}} 发送,输入 / 搜索路径或命令" | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 361 | "placeholder": "选择预先授权的工具" | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 431 | "placeholder": "搜索任务", | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 464 | "placeholder": "选择工作目录", | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 493 | "placeholder": "选择权限模式" | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 545 | "placeholder": "搜索插件..." | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 604 | "placeholder": "选择权限模式", | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 654 | "placeholder": "选择接收结果的频道" | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 696 | "placeholder": "例如:每日代码审查" | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 704 | "placeholder": "此任务运行时智能体应该做什么?" | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 727 | "placeholder": "无限制" | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 1005 | "placeholder": "API 密钥将自动生成" | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 1343 | "placeholder": "搜索" | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 1414 | "placeholder": "输入消息,按 {{key}} 发送,输入 / 选择工具或操作", | CODE |
| LOW | src/renderer/i18n/locales/zh-cn.json | 1635 | "placeholder": "请选择知识库", | CODE |
| 1072 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | resources/skills/find-skills/SKILL.md | 60 | ### Step 1: Understand What They Need | COMMENT |
| LOW⚡ | resources/skills/find-skills/SKILL.md | 68 | ### Step 2: Check the Leaderboard First | COMMENT |
| LOW⚡ | resources/skills/find-skills/SKILL.md | 76 | ### Step 3: Search for Skills | COMMENT |
| LOW | resources/skills/find-skills/SKILL.md | 90 | ### Step 4: Verify Quality Before Recommending | COMMENT |
| LOW | resources/skills/find-skills/SKILL.md | 98 | ### Step 5: Present Options to the User | COMMENT |
| LOW | resources/skills/find-skills/SKILL.md | 120 | ### Step 6: Install (Requires User Confirmation) | COMMENT |
| LOW | resources/skills/skill-creator/SKILL.md | 201 | ### Step 1: Spawn all runs (with-skill AND baseline) in the same turn | COMMENT |
| LOW | resources/skills/skill-creator/SKILL.md | 231 | ### Step 2: While runs are in progress, draft assertions | COMMENT |
| LOW | resources/skills/skill-creator/SKILL.md | 239 | ### Step 3: As runs complete, capture timing data | COMMENT |
| LOW | resources/skills/skill-creator/SKILL.md | 253 | ### Step 4: Grade, aggregate, and launch the viewer | COMMENT |
| LOW | resources/skills/skill-creator/SKILL.md | 299 | ### Step 5: Read the feedback | COMMENT |
| LOW | resources/skills/skill-creator/SKILL.md | 369 | ### Step 1: Generate trigger eval queries | COMMENT |
| LOW | resources/skills/skill-creator/SKILL.md | 392 | ### Step 2: Review with user | COMMENT |
| LOW | resources/skills/skill-creator/SKILL.md | 407 | ### Step 3: Run the optimization loop | COMMENT |
| LOW | resources/skills/skill-creator/SKILL.md | 434 | ### Step 4: Apply the result | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/grader.md | 21 | ### Step 1: Read the Transcript | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/grader.md | 27 | ### Step 2: Examine Output Files | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/grader.md | 33 | ### Step 3: Evaluate Each Assertion | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/grader.md | 43 | ### Step 4: Extract and Verify Claims | COMMENT |
| LOW | resources/skills/skill-creator/agents/grader.md | 61 | ### Step 5: Read User Notes | COMMENT |
| LOW | resources/skills/skill-creator/agents/grader.md | 68 | ### Step 6: Critique the Evals | COMMENT |
| LOW | resources/skills/skill-creator/agents/grader.md | 81 | ### Step 7: Write Grading Results | COMMENT |
| LOW | resources/skills/skill-creator/agents/grader.md | 101 | ### Step 8: Read Executor Metrics and Timing | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/comparator.md | 22 | ### Step 1: Read Both Outputs | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/comparator.md | 29 | ### Step 2: Understand the Task | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/comparator.md | 37 | ### Step 3: Generate Evaluation Rubric | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/comparator.md | 60 | ### Step 4: Evaluate Each Output Against the Rubric | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/comparator.md | 68 | ### Step 5: Check Assertions (if provided) | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/comparator.md | 77 | ### Step 6: Determine the Winner | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/comparator.md | 87 | ### Step 7: Write Comparison Results | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 23 | ### Step 1: Read Comparison Result | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 29 | ### Step 2: Read Both Skills | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 39 | ### Step 3: Read Both Transcripts | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 49 | ### Step 4: Analyze Instruction Following | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 59 | ### Step 5: Identify Winner Strengths | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 69 | ### Step 6: Identify Loser Weaknesses | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 77 | ### Step 7: Generate Improvement Suggestions | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 87 | ### Step 8: Write Analysis Results | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 205 | ### Step 1: Read Benchmark Data | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 211 | ### Step 2: Analyze Per-Assertion Patterns | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 220 | ### Step 3: Analyze Cross-Eval Patterns | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 227 | ### Step 4: Analyze Metrics Patterns | COMMENT |
| LOW⚡ | resources/skills/skill-creator/agents/analyzer.md | 234 | ### Step 5: Generate Notes | COMMENT |
| LOW | resources/skills/skill-creator/agents/analyzer.md | 249 | ### Step 6: Write Notes | COMMENT |
| LOW⚡ | .agents/skills/gh-create-issue/SKILL.md | 12 | ### Step 1: Determine Template Type | COMMENT |
| LOW⚡ | .agents/skills/gh-create-issue/SKILL.md | 22 | ### Step 2: Read the Selected Template | COMMENT |
| LOW⚡ | .agents/skills/gh-create-issue/SKILL.md | 27 | ### Step 3: Collect Information | COMMENT |
| LOW⚡ | .agents/skills/gh-create-issue/SKILL.md | 31 | ### Step 4: Build and Preview Issue Content | COMMENT |
| LOW | .agents/skills/gh-create-issue/SKILL.md | 43 | ### Step 5: Create Issue | COMMENT |
| LOW | .agents/skills/create-skill/SKILL.md | 12 | ### Step 1: Gather Intent | COMMENT |
| LOW | .agents/skills/create-skill/SKILL.md | 23 | ### Step 2: Read Guidelines | COMMENT |
| LOW | .agents/skills/create-skill/SKILL.md | 27 | ### Step 3: Create Skill Structure | COMMENT |
| LOW | .agents/skills/create-skill/SKILL.md | 53 | ### Step 4: Sync (if public) | COMMENT |
| LOW | .agents/skills/create-skill/SKILL.md | 67 | ### Step 5: Validate | COMMENT |
| LOW | .agents/skills/create-skill/SKILL.md | 77 | ### Step 6: Summary | COMMENT |
| LOW | .agents/skills/prepare-release/SKILL.md | 23 | ### Step 1: Determine Version | COMMENT |
| LOW | .agents/skills/prepare-release/SKILL.md | 34 | ### Step 2: Collect Commits | COMMENT |
| LOW | .agents/skills/prepare-release/SKILL.md | 53 | ### Step 3: Generate Bilingual Release Notes | COMMENT |
| LOW | .agents/skills/prepare-release/SKILL.md | 126 | ### Step 4: Update Files | COMMENT |
| LOW | .agents/skills/prepare-release/SKILL.md | 131 | ### Step 5: Present for Review | COMMENT |
| 78 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | dev-app-update.yml | 1 | # provider: generic | COMMENT |
| LOW | vitest.config.ts | 21 | extends: true, | COMMENT |
| LOW | docs/references/file/file-manager-architecture.md | 941 | // orphans not present in the file_entry snapshot. | COMMENT |
| LOW | …kages/ui/stories/components/primitives/kbd.stories.tsx | 221 | // <Tooltip> | COMMENT |
| LOW | …kages/ui/stories/components/primitives/kbd.stories.tsx | 241 | // <TooltipContent> | COMMENT |
| LOW | …nents/chat/messages/tools/shared/ClickableFilePath.tsx | 61 | ) | COMMENT |
| LOW | …mponents/chat/messages/list/chatVirtualizerRuntime.tsx | 161 | // During a programmatic bottom-follow, scroll events fire as the viewport | COMMENT |
| LOW | …mponents/chat/messages/list/chatVirtualizerRuntime.tsx | 201 | const atBottom = useAtBottomTracker() | COMMENT |
| LOW | …mponents/chat/messages/list/chatVirtualizerRuntime.tsx | 681 | // pinned, the spacer is monotonic: it grows to keep the user message at the | COMMENT |
| LOW | …mponents/chat/messages/list/chatVirtualizerRuntime.tsx | 921 | // live edge but keep the frozen viewport as the sole writer until | COMMENT |
| LOW | …derer/components/chat/messages/list/useScrollAnchor.ts | 321 | if (smoothScroll.isAnimating()) return | COMMENT |
| LOW | src/renderer/components/chat/shell/RightPaneHost.tsx | 61 | COMMENT | |
| LOW | src/renderer/components/layout/TabsProvider.tsx | 81 | if (tab.type !== 'route') return tab | COMMENT |
| LOW | src/renderer/windows/main/MainApp.tsx | 21 | // TabRouter/<Activity>, so these window-scoped subscriptions and DOM sync are never | COMMENT |
| LOW | src/renderer/windows/subWindow/SubWindowAppShell.tsx | 81 | // Chat / agent pages merge the window chrome into their own navbar (ConversationShell, | COMMENT |
| LOW | src/renderer/data/hooks/__tests__/useDataApi.test.ts | 501 | }) | COMMENT |
| LOW | …derer/pages/settings/McpSettings/AddMcpServerModal.tsx | 61 | // "command": "npx", | COMMENT |
| LOW | …pages/miniApps/MiniAppSettings/useMiniAppVisibility.ts | 41 | * `disabled` whenever the user touched the Global view. | COMMENT |
| LOW | src/renderer/pages/notes/NotesPage.tsx | 181 | }, | COMMENT |
| LOW | …c/renderer/pages/knowledge/panels/dataSource/styles.ts | 1 | // The checkbox is an inline-level box, so by default it aligns to its text baseline. | COMMENT |
| LOW | src/shared/IpcChannel.ts | 181 | // as enum members. They should be collected here in a future | COMMENT |
| LOW | src/shared/utils/model.ts | 1101 | } | COMMENT |
| LOW | src/shared/data/types/file.ts | 241 | * get a value typed exactly as they need it, with the canonical | COMMENT |
| LOW | src/shared/data/types/file.ts | 441 | COMMENT | |
| LOW | src/shared/data/types/file.ts | 561 | // | COMMENT |
| LOW | src/shared/data/cache/cacheSchemas.ts | 161 | // Painting in-flight generation state, keyed by paintingId. Survives page | COMMENT |
| LOW | src/main/core/power/PowerService.ts | 241 | // reuse the main window: the main window is a singleton that can be destroyed and | COMMENT |
| LOW | src/main/core/preboot/userDataLocation.ts | 121 | // Step 1: process pending relocation, if any. | COMMENT |
| LOW | src/main/core/preboot/userDataLocation.ts | 261 | // renderer/IPC layer is responsible for ensuring `to` is safe | COMMENT |
| LOW | src/main/core/preboot/chromiumFlags.ts | 41 | app.commandLine.appendSwitch('enable-features', 'GlobalShortcutsPortal') | COMMENT |
| LOW | …c/main/core/preboot/__tests__/userDataLocation.test.ts | 141 | setPathMock.mockReset() | COMMENT |
| LOW | src/main/core/paths/constants.ts | 1 | // EARLIEST path constants for the Electron main process. | COMMENT |
| LOW | src/main/core/paths/pathRegistry.ts | 141 | // Version log | COMMENT |
| LOW | src/main/core/window/windowRegistry.ts | 41 | // (no longer injected by the service). showMode 'manual' lets MainWindowService decide | COMMENT |
| LOW | src/main/core/window/windowRegistry.ts | 141 | // initial position was provided at Tab_Detach time (drop-at-cursor detach | COMMENT |
| LOW | src/main/core/window/windowRegistry.ts | 201 | // REQUIRED: SubWindow hosts streaming LLM responses and WebSocket heartbeats; | COMMENT |
| LOW | src/main/core/window/windowRegistry.ts | 261 | webviewTag: true | COMMENT |
| LOW | src/main/core/window/windowRegistry.ts | 321 | roundedCorners: false, | COMMENT |
| LOW | src/main/core/window/windowRegistry.ts | 361 | behavior: { | COMMENT |
| LOW | src/main/core/window/windowRegistry.ts | 421 | // logic (see ActionWindow.tsx) — too case-specific for a WM default. | COMMENT |
| LOW | src/main/core/window/WindowManager.ts | 1061 | // - clear behavior override: user-pinned alwaysOnTop / hideOnBlur survives. | COMMENT |
| LOW | src/main/core/window/WindowManager.ts | 1421 | applyWindowQuirks(managedWindow.window, managedWindow.metadata.quirks, managedWindow.metadata.behavior) | COMMENT |
| LOW | src/main/core/window/WindowManager.ts | 1561 | // with state changes that bypass IPC: double-click titlebar, Win+↑/↓, Windows | COMMENT |
| LOW | src/main/core/window/quirks.ts | 81 | // setAlwaysOnTop(true, level, relativeLevel) with values read from | COMMENT |
| LOW | …main/core/job/__tests__/JobManager.integration.test.ts | 141 | // schedules a setTimeout (60s "quiet window") and returns synchronously (the | COMMENT |
| LOW | src/main/core/job/__tests__/JobManager.pause.test.ts | 1181 | handlers: [['pause.debt', handler]], | COMMENT |
| LOW | …core/application/__tests__/Application.getPath.test.ts | 21 | // implementation (and its `NoEnsureEntry` template-literal type machinery) | COMMENT |
| LOW | …in/features/knowledge/vectorstore/indexStore/schema.ts | 161 | // rejects any duplicate loudly (the assignment is race-free only because all writes to a base's | COMMENT |
| LOW | …nowledge/vectorstore/indexStore/KnowledgeIndexStore.ts | 161 | // failure modes: | COMMENT |
| LOW | src/main/ai/AiService.ts | 201 | @ServicePhase(Phase.WhenReady) | COMMENT |
| LOW | src/main/ai/AiService.ts | 281 | COMMENT | |
| LOW | …ools/adapters/aiSdk/exposition/applyDeferExposition.ts | 41 | // Approval-gated tools are kept out of the deferred set at their source: each entry carries | COMMENT |
| LOW | src/main/ai/streamManager/AiStreamManager.ts | 321 | // (those legitimate producers reach here with `models.length === 0`). | COMMENT |
| LOW | src/main/ai/runtime/claudeCode/settingsBuilder.ts | 281 | ) | COMMENT |
| LOW | src/main/ai/runtime/claudeCode/settingsBuilder.ts | 1081 | addMcpToolMetadataAlias(metadataByName, `mcp__${server.name}__${tool.name}`, metadata) | COMMENT |
| LOW | src/main/ai/provider/custom/wire/wireProfile.ts | 181 | azure: { profile: OPENAI_WIRE_PROFILE, dualOpenAI: true }, | COMMENT |
| LOW | …main/ai/provider/custom/aihubmix/aihubmixImageModel.ts | 341 | // Canonical AI-SDK options. Renderer's canonicalGenerate routes: | COMMENT |
| LOW | src/main/ai/skills/SkillService.ts | 581 | COMMENT | |
| LOW | src/main/data/CacheService.ts | 541 | // through the read API. The tier therefore models presence as *deviation from | COMMENT |
| LOW | src/main/data/db/schemas/file.ts | 61 | index('fe_created_at_idx').on(t.createdAt), | COMMENT |
| 34 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/sync-to-gitcode.yml | 254 | # Step 1: Create release | COMMENT |
| LOW | .github/workflows/sync-to-gitcode.yml | 285 | # Step 2: Upload files to release | COMMENT |
| LOW | …dialogs/create/__tests__/ResourceCreateWizard.test.tsx | 114 | // Step 1: Next is blocked until name + model are set. | COMMENT |
| LOW | src/main/core/preboot/userDataLocation.ts | 121 | // Step 1: process pending relocation, if any. | COMMENT |
| LOW⚡ | src/main/core/preboot/userDataLocation.ts | 138 | // Step 2: BootConfig as single source of truth. | COMMENT |
| LOW⚡ | src/main/core/preboot/userDataLocation.ts | 147 | // Step 3: portable fallback. | COMMENT |
| LOW⚡ | src/main/core/preboot/userDataLocation.ts | 156 | // Step 4: Electron default. | COMMENT |
| LOW | src/main/core/preboot/v2MigrationGate.ts | 77 | // Step 0: Resolve all migration-critical paths, including v1 legacy | COMMENT |
| LOW⚡ | src/main/ai/channels/security/ExternalContentGuard.ts | 80 | // Step 1: Normalize angle brackets to prevent boundary spoofing | COMMENT |
| LOW⚡ | src/main/ai/channels/security/ExternalContentGuard.ts | 83 | // Step 2: Strip invisible Unicode characters | COMMENT |
| LOW⚡ | src/main/ai/channels/security/ExternalContentGuard.ts | 86 | // Step 3: Detect suspicious patterns (advisory) | COMMENT |
| LOW⚡ | src/main/ai/channels/security/ExternalContentGuard.ts | 96 | // Step 4: Generate random boundary ID (8 bytes hex = 16 chars) | COMMENT |
| LOW⚡ | src/main/ai/channels/security/ExternalContentGuard.ts | 99 | // Step 5: Build security-wrapped message | COMMENT |
| LOW⚡ | …n/ai/channels/adapters/feishu/FeishuAppRegistration.ts | 57 | // Step 1: init — check supported auth methods | COMMENT |
| LOW⚡ | …n/ai/channels/adapters/feishu/FeishuAppRegistration.ts | 61 | // Step 2: begin — start device flow | COMMENT |
| LOW | src/main/ai/channels/adapters/wechat/WeChatProtocol.ts | 311 | // Step 1: get upload URL | COMMENT |
| LOW | src/main/ai/channels/adapters/wechat/WeChatProtocol.ts | 332 | // Step 2: encrypt and upload | COMMENT |
| LOW | src/main/data/migration/v2/migrators/ChatMigrator.ts | 274 | // Step 1: Verify export files exist | COMMENT |
| LOW | src/main/data/migration/v2/migrators/ChatMigrator.ts | 290 | // Step 2: Load assistant data for model lookup | COMMENT |
| LOW | src/main/data/migration/v2/migrators/ChatMigrator.ts | 334 | // Step 3: Count topics and estimate messages | COMMENT |
| LOW | src/main/data/migration/v2/migrators/ChatMigrator.ts | 348 | // Step 4: Validate sample data | COMMENT |
| LOW | …ain/data/migration/v2/migrators/PreferencesMigrator.ts | 103 | // Step 1: Detect conflicts between simple and complex mappings (strict mode) | COMMENT |
| LOW | …ain/data/migration/v2/migrators/PreferencesMigrator.ts | 118 | // Step 2: Process simple mappings | COMMENT |
| LOW | …ain/data/migration/v2/migrators/PreferencesMigrator.ts | 159 | // Step 3: Process complex mappings | COMMENT |
| LOW⚡ | src/main/data/services/MessageService.ts | 968 | // Step 1: Verify topic exists and fetch its current state. | COMMENT |
| LOW⚡ | src/main/data/services/MessageService.ts | 976 | // Step 2: Resolve parentId based on the three possible input states: | COMMENT |
| LOW | src/main/data/services/MessageService.ts | 1006 | // Step 3: Insert the message using the resolved parentId. | COMMENT |
| LOW | src/main/services/LegacyBackupManager.ts | 196 | // Step 2: Copy IndexedDB and Local Storage directories | COMMENT |
| LOW⚡ | src/main/services/LegacyBackupManager.ts | 219 | // Step 3: Write metadata.json | COMMENT |
| LOW⚡ | src/main/services/LegacyBackupManager.ts | 224 | // Step 4: Copy Data directory (if not skipped) | COMMENT |
| LOW | src/main/services/LegacyBackupManager.ts | 245 | // Step 5: Create ZIP archive | COMMENT |
| LOW⚡ | src/main/services/lanTransfer/LanTransferService.ts | 577 | // Step 1: Send file_start | COMMENT |
| LOW⚡ | src/main/services/lanTransfer/LanTransferService.ts | 580 | // Step 2: Wait for file_start_ack | COMMENT |
| LOW⚡ | src/main/services/lanTransfer/LanTransferService.ts | 587 | // Step 3: Stream file chunks | COMMENT |
| LOW⚡ | src/main/services/lanTransfer/LanTransferService.ts | 592 | // Step 4: Send file_end | COMMENT |
| LOW⚡ | src/main/services/lanTransfer/LanTransferService.ts | 595 | // Step 5: Wait for file_complete | COMMENT |
| LOW⚡ | src/main/services/__tests__/AppUpdaterService.test.ts | 987 | // Step 1: 1.6.3 -> 1.7.5 | COMMENT |
| LOW⚡ | src/main/services/__tests__/AppUpdaterService.test.ts | 992 | // Step 2: 1.7.5 -> 2.0.0 | COMMENT |
| LOW⚡ | src/main/services/__tests__/AppUpdaterService.test.ts | 997 | // Step 3: 2.0.0 -> 2.1.6 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | src/main/ai/channels/adapters/feishu/FeishuAdapter.ts | 174 | await this.client.cardkit.v1.card.settings({ | CODE |
| CRITICAL | src/main/ai/channels/adapters/feishu/FeishuAdapter.ts | 187 | await this.client.cardkit.v1.card.update({ | CODE |
| CRITICAL | src/main/ai/channels/adapters/feishu/FeishuAdapter.ts | 229 | await this.client.cardkit.v1.card.settings({ | CODE |
| CRITICAL | src/main/ai/channels/adapters/feishu/FeishuAdapter.ts | 245 | await this.client.cardkit.v1.card.update({ | CODE |
| CRITICAL | src/main/ai/channels/adapters/feishu/FeishuAdapter.ts | 290 | await this.client.cardkit.v1.card.create({ | CODE |
| CRITICAL | src/main/ai/channels/adapters/feishu/FeishuAdapter.ts | 339 | await this.client.cardkit.v1.cardElement.content({ | CODE |
| CRITICAL | src/main/services/__tests__/MainWindowService.test.ts | 167 | const call = win.webContents.on.mock.calls.find(([event]) => event === 'render-process-gone') | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/auto-translate-i18n.ts | 75 | console.log('💡 Edit the script and replace "your-api-key-here" with your real API key') | CODE |
| HIGH | packages/aiCore/README.md | 109 | apiKey: 'your-api-key' | CODE |
| HIGH | packages/aiCore/README.md | 130 | apiKey: 'your-api-key' | CODE |
| HIGH | …nderer/pages/settings/McpSettings/builtinMcpServers.ts | 75 | BRAVE_API_KEY: 'YOUR_API_KEY' | CODE |
| HIGH | …ToolSettings/ApiGatewaySettings/ApiGatewaySettings.tsx | 223 | value={`Authorization: Bearer ${apiKey || 'your-api-key'}`} | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …/components/chat/panes/__tests__/ArtifactPane.test.tsx | 501 | // re-bind via `mockImplementation` (more robust than `mockResolvedValue` | COMMENT |
| MEDIUM | …r/components/composer/__tests__/ComposerToken.test.tsx | 1073 | // Absolutely positioned so it overlays the icon instead of taking flow space in | COMMENT |
| MEDIUM | src/renderer/hooks/useSmoothStream.ts | 148 | // median (median over GAP_SAMPLES is already robust to the ~few-percent | COMMENT |
| MEDIUM | src/main/core/preboot/__tests__/chromiumFlags.test.ts | 81 | // each test is the robust pattern. | COMMENT |
| MEDIUM | src/main/core/preboot/__tests__/v2MigrationGate.test.ts | 165 | // is the robust pattern, no explicit doUnmock needed. | COMMENT |
| MEDIUM | …c/main/core/preboot/__tests__/userDataLocation.test.ts | 156 | // The robust pattern is: resetModules() in beforeEach + fresh | COMMENT |
| MEDIUM | …ain/ai/streamManager/__tests__/AiStreamManager.test.ts | 1458 | // transport-owned `exec.timings` — keeps manager robust to AI SDK | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/__mocks__/renderer/CacheService.ts | 355 | // Test scaffold: seed a shared cache entry with an arbitrary string key, | COMMENT |
| MEDIUM | …026-04-23-web-search-remove-local-providers-and-rag.md | 1 | # Web Search 移除本地搜索引擎与 RAG 压缩配置 | COMMENT |
| MEDIUM | v2-refactor-temp/docs/knowledge/knowledge-todo.md | 7 | ## 1. 模型与 RAG 配置 | COMMENT |
| MEDIUM | packages/provider-registry/src/creators/cohere.ts | 211 | // ── North (agentic code) ── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …es/skills/skill-creator/eval-viewer/generate_review.py | 409 | print(f"Error: {workspace} is not a directory", file=sys.stderr) | CODE |
| LOW | resources/skills/skill-creator/scripts/run_eval.py | 225 | except Exception as e: | CODE |
| MEDIUM | resources/skills/skill-creator/scripts/run_eval.py | 278 | print(f"Error: No SKILL.md found at {skill_path}", file=sys.stderr) | CODE |
| LOW | resources/skills/skill-creator/scripts/package_skill.py | 106 | except Exception as e: | CODE |
| MEDIUM | …es/skills/skill-creator/scripts/improve_description.py | 206 | print(f"Error: No SKILL.md found at {skill_path}", file=sys.stderr) | CODE |
| MEDIUM | resources/skills/skill-creator/scripts/run_loop.py | 265 | print(f"Error: No SKILL.md found at {skill_path}", file=sys.stderr) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …es/skills/skill-creator/eval-viewer/generate_review.py | 85 | CODE | |
| LOW | …es/skills/skill-creator/eval-viewer/generate_review.py | 149 | CODE | |
| LOW | …es/skills/skill-creator/eval-viewer/generate_review.py | 288 | CODE | |
| LOW | resources/skills/skill-creator/scripts/run_eval.py | 36 | CODE | |
| LOW | resources/skills/skill-creator/scripts/package_skill.py | 42 | CODE | |
| LOW | …es/skills/skill-creator/scripts/improve_description.py | 51 | CODE | |
| LOW | …es/skills/skill-creator/scripts/aggregate_benchmark.py | 67 | CODE | |
| LOW | …ources/skills/skill-creator/scripts/generate_report.py | 16 | CODE | |
| LOW | resources/skills/skill-creator/scripts/utils.py | 7 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ata-classify/scripts/DO-NOT-USE-validate-generation.js | 6 | * Validates the quality and correctness of auto-generated code files. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/main/ai/mcp/servers/python.ts | 55 | print('python code here')`, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …nts/composites/horizontal-scroll-container.stories.tsx | 121 | <p className="text-sm text-gray-600">This is a sample card content for demonstration purposes.</p> | CODE |
| LOW | .github/ISSUE_TEMPLATE/2_question.yml | 60 | placeholder: "For example: use case, solutions you've tried, etc. Don't forget to include relevant screenshots/rec | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/auto-i18n.yml | 65 | # Check if there are any uncommitted changes | COMMENT |
| LOW | .github/workflows/github-issue-tracker.yml | 33 | # Check if time is between 00:00 and 08:30 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …sources/skills/skill-creator/scripts/quick_validate.py | 7 | CODE |