Let's use AI to Earn!
This report summarizes scanner evidence for yikart/AiToEarn, a TypeScript project with 27,111 GitHub stars. SynthScan examined 369,647 lines of code across 2142 source files, recording 617 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 2.6 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 544 finding(s).
Are imports declared and package/API names verified? 61 finding(s).
Are wrappers, guards, and repeated structures necessary? 396 finding(s).
Which changes need focused human review? 617 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 617 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4507 | function isSvelteComponentManifestPath(filePath) { | CODE |
| LOW⚡ | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4511 | function parseOriginalMarkupElement(originalMarkup) { | CODE |
| LOW⚡ | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4517 | function findLiveElementForOriginalMarkup(originalMarkup) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 924 | function buildAnnotationsForCapture(rect, snapshot) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 964 | function stripManualEditRuntimeState(root) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 987 | function sanitizedContextOuterHTML(el, maxLength) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1039 | function contextElementForManualEdit(selectedEl, rows, ops) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1063 | function isUsefulManualEditContext(candidate, leafEl, editedTexts) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1069 | function collectManualContextPieces(rootEl, editedTexts) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1093 | function isMeaningfulManualContextPiece(text, editedTexts) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1099 | function normalizeManualContextText(value) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1242 | function detectInsertAxisFromStyle(style) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1412 | function placeholderWidthIsImplicit(kind) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1416 | function applyPlaceholderSizingStyles(placeholder, sizing) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1433 | function materializePlaceholderWidth(placeholder) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1454 | function insertCreateDisabledReason({ prompt, comments, strokes }) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1473 | function resizePlaceholderFromEdge(start, edge, dx, dy, parentWidth) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1560 | function syncPageInteractionCursor() { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1601 | function removeInsertPlaceholderDom() { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1619 | function buildInsertPlaceholderSnapshotFromDom(anchor, placeholder) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1650 | function isInsertGeneratingSession() { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1685 | function applyPlaceholderDimensions({ width, height, marginLeft, marginTop }) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1702 | function buildPlaceholderResizeHandles() { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1732 | function syncPlaceholderResizeHandles() { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1743 | function startPlaceholderEdgeResize(edge, e) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 1816 | function ensureInsertCreateTooltip() { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 2707 | function getMountedSvelteComponentAnchor(session = svelteComponentSession) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 2713 | function resolveSvelteComponentAnchor(session = svelteComponentSession) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 2960 | function wrapMixedContentTextNodes(rootEl) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 2985 | function unwrapMixedContentTextNodes(rootEl) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3209 | function normalizeDocumentRefToken(value) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3241 | function nearbyEditableTextsForManualEdit(rows, activeEl, originalText, newText) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3355 | function schedulePendingDockPosition() { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3370 | function playPendingIntroAnimation() { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3417 | function readStoredManualApplyState() { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3461 | function clearStoredManualApplyState() { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3469 | function shouldResumeManualApplyLoading(count) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3503 | function updateManualApplyProgressFromChunk(chunk) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3518 | function updateManualApplyRepairState(repair, phase) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3529 | function refreshLiveControlsForManualApply() { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3786 | function manualEditEventForCurrentPage(msg) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3881 | function restoreDiscardedManualEdits(entries) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3900 | function canRestoreManualEditElement(el, op) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3917 | function restoreMixedTextNodeManualEdit(op) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3935 | function directMixedTextRestoreNodes(parent) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3945 | function findManualEditRestoreElement(op) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 3984 | function parseManualEditRefSegment(segment) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4000 | function elementMatchesManualRefSegment(el, segment) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4546 | function findLiveElementForSvelteManifest(manifest) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4567 | async function loadSvelteComponentParams(manifest) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4587 | function buildSveltePropValuesFromLiveElement(liveEl, manifest) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4601 | async function mountSvelteComponentVariant(variantNum) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4653 | function teardownSvelteComponentSession(restoreOriginal) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4668 | function applyOriginalAttrsToSvelteAnchor(el, originalMarkup) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4683 | function commitAcceptedSvelteComponentToDom(sessionId) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4702 | async function injectSvelteComponentsFromManifest(manifestPath, sessionId) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4830 | function waitForSvelteComponentTargetAndRetry({ manifestPath, sessionId, manifest }) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4830 | function waitForSvelteComponentTargetAndRetry({ manifestPath, sessionId, manifest }) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4850 | function abortSvelteComponentInjection(sessionId, message) { | CODE |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 4973 | function buildSvelteExpressionTextMap(sourceOriginal, liveOriginal) { | CODE |
| 324 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rn-web/.agents/skills/impeccable/reference/document.md | 80 | ### Step 1: Find the design assets | COMMENT |
| LOW | …rn-web/.agents/skills/impeccable/reference/document.md | 92 | ### Step 2: Auto-extract what can be auto-extracted | COMMENT |
| LOW | …rn-web/.agents/skills/impeccable/reference/document.md | 113 | ### Step 3: Ask the user for qualitative language | COMMENT |
| LOW | …rn-web/.agents/skills/impeccable/reference/document.md | 125 | ### Step 4: Write DESIGN.md | COMMENT |
| LOW | …rn-web/.agents/skills/impeccable/reference/document.md | 331 | ### Step 5: Confirm and refine | COMMENT |
| LOW | …rn-web/.agents/skills/impeccable/reference/document.md | 343 | ### Step 1: Confirm seed mode | COMMENT |
| LOW | …rn-web/.agents/skills/impeccable/reference/document.md | 349 | ### Step 2: Five questions | COMMENT |
| LOW | …rn-web/.agents/skills/impeccable/reference/document.md | 377 | ### Step 3: Write seed DESIGN.md | COMMENT |
| LOW | …rn-web/.agents/skills/impeccable/reference/document.md | 398 | ### Step 4: Confirm | COMMENT |
| LOW⚡ | …toearn-web/.agents/skills/impeccable/reference/live.md | 426 | ### Step 1: Identify where the element actually lives | COMMENT |
| LOW⚡ | …toearn-web/.agents/skills/impeccable/reference/live.md | 436 | ### Step 2: Show three variants in the DOM for preview | COMMENT |
| LOW⚡ | …toearn-web/.agents/skills/impeccable/reference/live.md | 446 | ### Step 3: On accept, write to true source | COMMENT |
| LOW⚡ | …toearn-web/.agents/skills/impeccable/reference/live.md | 456 | ### Step 4: On discard, clean up the served file | COMMENT |
| LOW | …arn-web/.agents/skills/impeccable/reference/extract.md | 5 | ## Step 1: Discover the Design System | COMMENT |
| LOW | …arn-web/.agents/skills/impeccable/reference/extract.md | 11 | ## Step 2: Identify Patterns | COMMENT |
| LOW | …arn-web/.agents/skills/impeccable/reference/extract.md | 24 | ## Step 3: Plan Extraction | COMMENT |
| LOW⚡ | …arn-web/.agents/skills/impeccable/reference/extract.md | 36 | ## Step 4: Extract & Enrich | COMMENT |
| LOW⚡ | …arn-web/.agents/skills/impeccable/reference/extract.md | 44 | ## Step 5: Migrate | COMMENT |
| LOW⚡ | …arn-web/.agents/skills/impeccable/reference/extract.md | 53 | ## Step 6: Document | COMMENT |
| LOW | …toearn-web/.agents/skills/impeccable/reference/init.md | 11 | ## Step 1: Load current state | COMMENT |
| LOW | …toearn-web/.agents/skills/impeccable/reference/init.md | 26 | ## Step 2: Explore the codebase | COMMENT |
| LOW | …toearn-web/.agents/skills/impeccable/reference/init.md | 46 | ## Step 3: Ask strategic questions (for PRODUCT.md) | COMMENT |
| LOW | …toearn-web/.agents/skills/impeccable/reference/init.md | 91 | ## Step 4: Write PRODUCT.md | COMMENT |
| LOW | …toearn-web/.agents/skills/impeccable/reference/init.md | 127 | ## Step 5: Decide on DESIGN.md | COMMENT |
| LOW | …toearn-web/.agents/skills/impeccable/reference/init.md | 138 | ## Step 6: Configure live mode (when code exists) | COMMENT |
| LOW | …toearn-web/.agents/skills/impeccable/reference/init.md | 154 | ## Step 7: Recommend starting points, then wrap up | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/craft.md | 22 | ## Step 0: Project Foundation | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/craft.md | 43 | ## Step 1: Shape the Design | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/craft.md | 55 | ## Step 2: Load References | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/craft.md | 69 | ## Step 3: Visual Direction & Assets (Harness-Gated) | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/craft.md | 77 | ## Step 4: Build to Production Quality | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/craft.md | 101 | ## Step 5: Iterate Visually | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/craft.md | 115 | ## Step 6: Present | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/teach.md | 10 | ## Step 1: Load current state | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/teach.md | 31 | ## Step 2: Explore the codebase | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/teach.md | 51 | ## Step 3: Ask strategic questions (for PRODUCT.md) | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/teach.md | 97 | ## Step 4: Write PRODUCT.md | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/teach.md | 133 | ## Step 5: Decide on DESIGN.md | COMMENT |
| LOW | …oearn-web/.agents/skills/impeccable/reference/teach.md | 144 | ## Step 6: Confirm and wrap up | COMMENT |
| LOW⚡ | …at/wechat-official/wechat-official-publish.provider.ts | 74 | // Step 1: Upload cover image for thumb_media_id | COMMENT |
| LOW⚡ | …at/wechat-official/wechat-official-publish.provider.ts | 84 | // Step 2: Upload inline images and replace URLs with media IDs | COMMENT |
| LOW | …at/wechat-official/wechat-official-publish.provider.ts | 96 | // Step 3: Build article | COMMENT |
| LOW⚡ | …at/wechat-official/wechat-official-publish.provider.ts | 108 | // Step 4: Create draft | COMMENT |
| LOW⚡ | …at/wechat-official/wechat-official-publish.provider.ts | 111 | // Step 5: Submit for free publish | COMMENT |
| LOW | …/core/channels/platforms/kwai/kwai-publish.provider.ts | 61 | // Step 1: Initialize upload | COMMENT |
| LOW⚡ | …/core/channels/platforms/kwai/kwai-publish.provider.ts | 93 | // Step 4: Build caption with topics | COMMENT |
| LOW⚡ | …/core/channels/platforms/kwai/kwai-publish.provider.ts | 96 | // Step 5: Fetch cover image | COMMENT |
| LOW | …/core/channels/platforms/kwai/kwai-publish.provider.ts | 124 | // Step 6: Publish the video | COMMENT |
| LOW | …rc/core/channels/publish/flows/publish-flow.service.ts | 142 | // Step 1: common content validation | COMMENT |
| LOW | …rc/core/channels/publish/flows/publish-flow.service.ts | 159 | // Step 2: platform-specific validation (only if step 1 passed) | COMMENT |
| LOW | …rc/core/channels/publish/flows/publish-flow.service.ts | 171 | // Step 3: media probe + validation (only if step 1+2 passed) | COMMENT |
| LOW⚡ | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 75 | ### Step 0: Understand Requirements | COMMENT |
| LOW⚡ | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 79 | ### Step 1: Analyze and Load Skills (MANDATORY) | COMMENT |
| LOW | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 128 | ### Step 2: Execution Plan (MANDATORY - ALWAYS SHOW) | COMMENT |
| LOW | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 200 | ### Step 3: Content Metadata (MANDATORY) | COMMENT |
| LOW | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 220 | ### Step 4: Media Generation | COMMENT |
| LOW⚡ | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 256 | ### Step 5: Async Task Handling | COMMENT |
| LOW⚡ | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 264 | ### Step 6: Content Saving | COMMENT |
| LOW⚡ | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 272 | ### Step 7: Publishing | COMMENT |
| LOW⚡ | …nd/apps/aitoearn-ai/src/core/agent/mcp/subtitle.mcp.ts | 143 | // Step 1: 使用 FFmpeg 提取音频 | COMMENT |
| 54 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …/src/core/draft-generation/draft-generation.service.ts | 231 | const modelConfig = config.ai.models.video.generation.find(m => m.name === model) | CODE |
| CRITICAL | …/src/core/draft-generation/draft-generation.service.ts | 328 | const generationModel = config.ai.models.image.generation.find(model => model.name === imageModel) | CODE |
| CRITICAL | …/src/core/draft-generation/draft-generation.service.ts | 329 | const editModel = config.ai.models.image.edit.find(model => model.name === imageModel) | CODE |
| CRITICAL | …/src/core/draft-generation/draft-generation.service.ts | 373 | const modelConfig = config.ai.models.video.generation.find(m => m.name === dto.model) | CODE |
| CRITICAL | …nd/apps/aitoearn-ai/src/core/ai/video/video.service.ts | 70 | const modelConfig = this.modelsConfigService.config.video.generation.find(m => m.name === model) | CODE |
| CRITICAL | …rn-ai/src/core/ai/video/dashscope/dashscope.service.ts | 59 | const modelConfig = this.modelsConfigService.config.video.generation.find(m => m.name === model) | CODE |
| CRITICAL | …earn-ai/src/core/ai/video/relay/relay-video.service.ts | 32 | const modelConfig = this.modelsConfigService.config.video.generation.find(m => m.name === request.model) | CODE |
| CRITICAL⚡ | …nd/apps/aitoearn-ai/src/core/ai/image/image.service.ts | 43 | ? this.modelsConfigService.config.image.generation.find(item => item.name === model) | CODE |
| CRITICAL⚡ | …nd/apps/aitoearn-ai/src/core/ai/image/image.service.ts | 44 | : this.modelsConfigService.config.image.edit.find(item => item.name === model) | CODE |
| CRITICAL⚡ | …nd/apps/aitoearn-ai/src/core/ai/image/image.service.ts | 51 | ? this.modelsConfigService.config.image.generation.find(item => item.name === model) | CODE |
| CRITICAL⚡ | …nd/apps/aitoearn-ai/src/core/ai/image/image.service.ts | 52 | : this.modelsConfigService.config.image.edit.find(item => item.name === model) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …at/wechat-official/wechat-official-publish.provider.ts | 74 | // Step 1: Upload cover image for thumb_media_id | COMMENT |
| LOW⚡ | …at/wechat-official/wechat-official-publish.provider.ts | 84 | // Step 2: Upload inline images and replace URLs with media IDs | COMMENT |
| LOW | …at/wechat-official/wechat-official-publish.provider.ts | 96 | // Step 3: Build article | COMMENT |
| LOW⚡ | …at/wechat-official/wechat-official-publish.provider.ts | 108 | // Step 4: Create draft | COMMENT |
| LOW⚡ | …at/wechat-official/wechat-official-publish.provider.ts | 111 | // Step 5: Submit for free publish | COMMENT |
| LOW | …/core/channels/platforms/kwai/kwai-publish.provider.ts | 61 | // Step 1: Initialize upload | COMMENT |
| LOW⚡ | …/core/channels/platforms/kwai/kwai-publish.provider.ts | 93 | // Step 4: Build caption with topics | COMMENT |
| LOW⚡ | …/core/channels/platforms/kwai/kwai-publish.provider.ts | 96 | // Step 5: Fetch cover image | COMMENT |
| LOW | …/core/channels/platforms/kwai/kwai-publish.provider.ts | 124 | // Step 6: Publish the video | COMMENT |
| LOW | …rc/core/channels/publish/flows/publish-flow.service.ts | 142 | // Step 1: common content validation | COMMENT |
| LOW | …rc/core/channels/publish/flows/publish-flow.service.ts | 159 | // Step 2: platform-specific validation (only if step 1 passed) | COMMENT |
| LOW | …rc/core/channels/publish/flows/publish-flow.service.ts | 171 | // Step 3: media probe + validation (only if step 1+2 passed) | COMMENT |
| LOW⚡ | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 75 | ### Step 0: Understand Requirements | COMMENT |
| LOW⚡ | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 79 | ### Step 1: Analyze and Load Skills (MANDATORY) | COMMENT |
| LOW | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 128 | ### Step 2: Execution Plan (MANDATORY - ALWAYS SHOW) | COMMENT |
| LOW | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 200 | ### Step 3: Content Metadata (MANDATORY) | COMMENT |
| LOW | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 220 | ### Step 4: Media Generation | COMMENT |
| LOW⚡ | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 256 | ### Step 5: Async Task Handling | COMMENT |
| LOW⚡ | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 264 | ### Step 6: Content Saving | COMMENT |
| LOW⚡ | …end/apps/aitoearn-ai/src/core/agent/agent.constants.ts | 272 | ### Step 7: Publishing | COMMENT |
| LOW⚡ | …nd/apps/aitoearn-ai/src/core/agent/mcp/subtitle.mcp.ts | 143 | // Step 1: 使用 FFmpeg 提取音频 | COMMENT |
| LOW⚡ | …nd/apps/aitoearn-ai/src/core/agent/mcp/subtitle.mcp.ts | 148 | // Step 2: 构建提示词 | COMMENT |
| LOW⚡ | …nd/apps/aitoearn-ai/src/core/agent/mcp/subtitle.mcp.ts | 151 | // Step 3: 调用 Gemini 进行转录 | COMMENT |
| LOW | …nd/apps/aitoearn-ai/src/core/agent/mcp/subtitle.mcp.ts | 174 | // Step 4: 解析响应 | COMMENT |
| LOW⚡ | …nd/apps/aitoearn-ai/src/core/agent/mcp/subtitle.mcp.ts | 187 | // Step 5: 生成 SRT 格式 | COMMENT |
| LOW⚡ | …nd/apps/aitoearn-ai/src/core/agent/mcp/subtitle.mcp.ts | 190 | // Step 6: 上传 SRT 文件 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …oject/aitoearn-web/.agents/skills/taste-skill/SKILL.md | 615 | ### 9.D Content & Data ("Jane Doe" Effect) | COMMENT |
| LOW | …oject/aitoearn-web/.agents/skills/taste-skill/SKILL.md | 616 | * **NO generic names.** "John Doe", "Sarah Chan", "Jack Su" → use creative, realistic, locale-appropriate names. | COMMENT |
| LOW | project/aitoearn-web/src/app/i18n/locales/ja/chat.json | 3 | "placeholder": "新しい寿司盛り合わせの8秒縦型プロモーション動画を作成してください。アップテンポなジャズ音楽、新鮮なサーモンのクローズアップ、字幕を生成、最後にロゴを表示。", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/ja/welcome.json | 23 | "placeholder": "レストランを検索", | CODE |
| LOW | …oject/aitoearn-web/src/app/i18n/locales/ja/common.json | 72 | "placeholder": "選択してください...", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/ja/account.json | 467 | "placeholder": "プロキシアドレスを入力", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/ja/publish.json | 306 | "placeholder": "プライバシーレベルを選択", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/ja/publish.json | 340 | "placeholder": "申告タイプを選択", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/ja/publish.json | 437 | "placeholder": "Paste an extension link", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/zh-CN/chat.json | 3 | "placeholder": "为我们的新品寿司拼盘制作一个8秒的竖屏宣传视频。使用欢快的爵士乐,新鲜三文鱼的特写镜头,生成字幕,最后展示我们的logo。", | CODE |
| LOW | …t/aitoearn-web/src/app/i18n/locales/zh-CN/welcome.json | 23 | "placeholder": "输入您的餐厅名称", | CODE |
| LOW | …ct/aitoearn-web/src/app/i18n/locales/zh-CN/common.json | 74 | "placeholder": "请选择...", | CODE |
| LOW | …oject/aitoearn-web/src/app/i18n/locales/zh-CN/dev.json | 179 | "placeholder": "粘贴扩展链接", | CODE |
| LOW | …t/aitoearn-web/src/app/i18n/locales/zh-CN/account.json | 466 | "placeholder": "请输入代理地址", | CODE |
| LOW | …t/aitoearn-web/src/app/i18n/locales/zh-CN/publish.json | 315 | "placeholder": "请选择隐私级别", | CODE |
| LOW | …t/aitoearn-web/src/app/i18n/locales/zh-CN/publish.json | 349 | "placeholder": "请选择声明类型", | CODE |
| LOW | …t/aitoearn-web/src/app/i18n/locales/zh-CN/publish.json | 483 | "placeholder": "粘贴扩展链接", | CODE |
| LOW | project/aitoearn-web/src/app/i18n/locales/de/chat.json | 3 | "placeholder": "Erstellen Sie ein 8-Sekunden-Hochformat-Werbevideo für unsere neue Sushi-Platte. Verwenden Sie fröhl | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/de/welcome.json | 23 | "placeholder": "Finden Sie Ihr Restaurant", | CODE |
| LOW | …oject/aitoearn-web/src/app/i18n/locales/de/common.json | 72 | "placeholder": "Auswählen...", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/de/account.json | 467 | "placeholder": "Proxy-Adresse eingeben", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/de/publish.json | 307 | "placeholder": "Datenschutzstufe auswählen", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/de/publish.json | 341 | "placeholder": "Erklärungstyp auswählen", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/de/publish.json | 438 | "placeholder": "Paste an extension link", | CODE |
| LOW | project/aitoearn-web/src/app/i18n/locales/ko/chat.json | 3 | "placeholder": "새로운 스시 플래터를 위한 8초 세로형 홍보 영상을 만들어주세요. 경쾌한 재즈 음악, 신선한 연어 클로즈업, 자막 생성, 마지막에 로고를 표시해주세요.", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/ko/welcome.json | 23 | "placeholder": "레스토랑 찾기", | CODE |
| LOW | …oject/aitoearn-web/src/app/i18n/locales/ko/common.json | 72 | "placeholder": "선택...", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/ko/account.json | 467 | "placeholder": "프록시 주소 입력", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/ko/publish.json | 307 | "placeholder": "공개 수준 선택", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/ko/publish.json | 341 | "placeholder": "신고 유형 선택", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/ko/publish.json | 438 | "placeholder": "Paste an extension link", | CODE |
| LOW | project/aitoearn-web/src/app/i18n/locales/fr/chat.json | 3 | "placeholder": "Créez une vidéo promotionnelle verticale de 8 secondes pour notre nouveau plateau de sushi. Utilisez | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/fr/welcome.json | 23 | "placeholder": "Trouvez votre restaurant", | CODE |
| LOW | …oject/aitoearn-web/src/app/i18n/locales/fr/common.json | 72 | "placeholder": "Sélectionner...", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/fr/account.json | 467 | "placeholder": "Entrez l'adresse proxy", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/fr/publish.json | 307 | "placeholder": "Sélectionnez le niveau de confidentialité", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/fr/publish.json | 341 | "placeholder": "Sélectionnez le type de déclaration", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/fr/publish.json | 438 | "placeholder": "Paste an extension link", | CODE |
| LOW | project/aitoearn-web/src/app/i18n/locales/en/chat.json | 3 | "placeholder": "Create an 8-second vertical promo video for our new Sushi Platter. Use upbeat jazz music, close-up s | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/en/welcome.json | 23 | "placeholder": "Find your restaurant", | CODE |
| LOW | …oject/aitoearn-web/src/app/i18n/locales/en/common.json | 74 | "placeholder": "Select...", | CODE |
| LOW | project/aitoearn-web/src/app/i18n/locales/en/dev.json | 179 | "placeholder": "https://example.com", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/en/account.json | 467 | "placeholder": "Enter proxy address", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/en/publish.json | 314 | "placeholder": "Select privacy level", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/en/publish.json | 348 | "placeholder": "Select declaration type", | CODE |
| LOW | …ject/aitoearn-web/src/app/i18n/locales/en/publish.json | 482 | "placeholder": "Paste an extension link", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ccable/scripts/detector/detect-antipatterns-browser.js | 104 | // ── AI slop: tells that something was AI-generated ── | COMMENT |
| HIGH | …ccable/scripts/detector/detect-antipatterns-browser.js | 1375 | // (the "card-icon" pattern from many AI-generated demos). | COMMENT |
| HIGH | …ect/aitoearn-web/src/app/i18n/locales/en/material.json | 9 | "description": "Images and videos automatically generated by AI", | CODE |
| HIGH | …ct/aitoearn-web/src/app/[lng]/accounts/accountCore.tsx | 104 | // Handle AI-generated content params | COMMENT |
| HIGH | …ct/aitoearn-web/src/app/[lng]/accounts/accountCore.tsx | 245 | // Fill AI-generated data after publish dialog opens | COMMENT |
| HIGH | …ct/aitoearn-web/src/app/[lng]/accounts/accountCore.tsx | 494 | ossUrl: media.url, // AI-generated images already have ossUrl | CODE |
| HIGH | project/aitoearn-backend/.agents/skills/triage/SKILL.md | 13 | > *This was generated by AI during triage.* | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | …ccable/scripts/detector/detect-antipatterns-browser.js | 2756 | // ─── Clipped overflow container ─────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ccable/scripts/detector/detect-antipatterns-browser.js | 2792 | // ─── Text overflow (browser-only: needs scrollWidth/clientWidth) ────────────── | COMMENT |
| MEDIUM | …ccable/scripts/detector/detect-antipatterns-browser.js | 15 | // ─── Section 1: Constants ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ccable/scripts/detector/detect-antipatterns-browser.js | 477 | // ─── Section 2: Color Utilities ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …ccable/scripts/detector/detect-antipatterns-browser.js | 594 | // ─── Section 3: Pure Detection ────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ccable/scripts/detector/detect-antipatterns-browser.js | 1173 | // ─── Section 4: resolveBackground (unified) ───────────────────────────────── | COMMENT |
| MEDIUM | …ccable/scripts/detector/detect-antipatterns-browser.js | 1317 | // ─── Section 5: Element Adapters ──────────────────────────────────────────── | COMMENT |
| MEDIUM | …ccable/scripts/detector/detect-antipatterns-browser.js | 2358 | // ─── Section 6: Page-Level Checks ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …ccable/scripts/detector/detect-antipatterns-browser.js | 2612 | // ─── Cream / beige palette (the default "tasteful" AI surface) ──────────────── | COMMENT |
| MEDIUM | …ccable/scripts/detector/detect-antipatterns-browser.js | 2679 | // ─── Oversized hero headline ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ccable/scripts/detector/detect-antipatterns-browser.js | 2711 | // ─── GPT tell: hairline border + wide diffuse shadow (gated --gpt) ──────────── | COMMENT |
| MEDIUM | …ccable/scripts/detector/detect-antipatterns-browser.js | 2819 | // ─── Section 7: Browser UI (IS_BROWSER only) ──────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README_JA.md | 127 | "x-api-key": "your-api-key" | CODE |
| HIGH | README_JA.md | 136 | MCP 設定に **MCP アドレス** と **認証ヘッダー**(`x-api-key: your-api-key`)を入力してください。各ツールの手順とスクリーンショット入り解説は [docs の MCP ガイド](https://do | CODE |
| HIGH | README_EN.md | 135 | "x-api-key": "your-api-key" | CODE |
| HIGH | README_EN.md | 144 | In your MCP settings, fill in the **MCP URL** and the **Auth Header** (`x-api-key: your-api-key`). Step-by-step instruct | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 341 | // Two host-page behaviors break us when the picked element lives inside a | COMMENT |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 2621 | } | COMMENT |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 6441 | // background fills with ink and the lighter content punches holes instead. | COMMENT |
| LOW | …-web/.agents/skills/impeccable/scripts/live-browser.js | 6461 | // transparent region stays transparent (the live backdrop shows through the | COMMENT |
| LOW | …ccable/scripts/detector/detect-antipatterns-browser.js | 881 | siblingTag, siblingText, siblingTextTransform, | COMMENT |
| LOW | …ccable/scripts/detector/detect-antipatterns-browser.js | 1861 | } else if (hMin < hThresh) { | COMMENT |
| LOW | …ccable/scripts/detector/detect-antipatterns-browser.js | 1941 | const PAD_THRESHOLD = 2; | COMMENT |
| LOW | …ccable/scripts/detector/detect-antipatterns-browser.js | 2021 | // is the absence of the container entirely. | COMMENT |
| LOW | …ccable/scripts/detector/detect-antipatterns-browser.js | 2821 | if (IS_BROWSER) { | COMMENT |
| LOW | …/.agents/skills/diagnose/scripts/hitl-loop.template.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …rver/src/core/publish-record/publish-record.service.ts | 21 | @Injectable() | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/.agents/skills/diagnose/scripts/hitl-loop.template.sh | 6 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/backend-build.yml | 121 | # Check if manual mode | COMMENT |