Open-source, desktop-grade AI agent that gets real work done — data analysis, slides, docs, video & web research. Built on OpenClaw; runs tools on your real desktop and takes commands from your phone via WeChat, Feishu, DingTalk & Telegram.
This report summarizes scanner evidence for netease-youdao/LobsterAI, a TypeScript project with 6,158 GitHub stars. SynthScan examined 697,241 lines of code across 2911 source files, recording 1741 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 3.7 (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? 1416 finding(s).
Are imports declared and package/API names verified? 41 finding(s).
Are wrappers, guards, and repeated structures necessary? 1414 finding(s).
Which changes need focused human review? 1741 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 1741 distinct pattern matches across 19 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 | …ts/2026-06-17-markdown-mermaid-share-preview-design.md | 577 | function getHtmlShareSourceTypeForArtifact(artifact: Artifact): HtmlShareSourceType | null { | CODE |
| LOW | …ts/2026-06-17-markdown-mermaid-share-preview-design.md | 621 | function collectMarkdownLocalAssets(markdown: string, baseDir: string, allowedRoot: string): MarkdownAsset[] | CODE |
| LOW | …ifacts/2026-07-01-auto-open-artifact-preview-design.md | 179 | export function selectAutoPreviewArtifact( | CODE |
| LOW | …ures/kit/2026-05-29-kit-capability-reference-design.md | 253 | function normalizeMarketplaceKitForInstall( | CODE |
| LOW | …ures/kit/2026-05-29-kit-capability-reference-design.md | 362 | function resolveSelectedKitCapabilities( | CODE |
| LOW | …terprise-config/2026-03-23-enterprise-config-design.md | 250 | export function resolveEnterpriseConfigPath(): string | null | CODE |
| LOW | …terprise-config/2026-03-23-enterprise-config-design.md | 403 | export function resolveEnterpriseConfigPath(): string | null { | CODE |
| LOW | …ocal-callback/2026-06-05-auth-local-callback-design.md | 318 | function resolveElectronCallbackUrl(authCode: string): string { | CODE |
| LOW | …sync/2026-08-24-im-session-list-channel-icon-design.md | 289 | export function getIMSessionPlatformLabel(platform?: Platform | null): string | null; | CODE |
| LOW | …eatures/cowork-steer/2026-07-06-cowork-steer-design.md | 524 | function resolveCoworkSubmitIntent(state: PromptState): SubmitIntent { | CODE |
| LOW | …viders/2026-03-31-refactor-build-provider-selection.md | 201 | function getEffectiveProviderApiFormat(providerName: string, apiFormat: unknown): AnthropicApiFormat { | CODE |
| LOW | …viders/2026-03-31-refactor-build-provider-selection.md | 1002 | function getEffectiveProviderApiFormat(providerName: string, apiFormat: unknown): AnthropicApiFormat { | CODE |
| LOW | …viders/2026-03-31-refactor-build-provider-selection.md | 1017 | function getEffectiveProviderApiFormat(providerName: string, apiFormat: unknown): AnthropicApiFormat { | CODE |
| LOW | …-proxy/2026-10-17-remove-cowork-compat-proxy-design.md | 110 | export async function startCopilotLoopbackProxy(options: { | CODE |
| LOW | …-proxy/2026-10-17-remove-cowork-compat-proxy-design.md | 116 | export function getCopilotLoopbackBaseUrl(): string | null; // http://127.0.0.1:<port> | CODE |
| LOW | …del-invalid/2026-04-03-agent-model-selection-design.md | 349 | export function resolveAgentModelSelection({ | CODE |
| LOW | …5-26-windows-update-vbscript-deprecation-fix-design.md | 181 | async function spawnDetachedWindowsUpdateLauncher(scriptPath: string): Promise<number | undefined> | CODE |
| LOW | …/2026-05-22-qwen-coding-plan-qwen36-plus-fix-design.md | 176 | export function buildQwenModelCatalogForBaseUrl( | CODE |
| LOW | …/2026-05-22-qwen-coding-plan-qwen36-plus-fix-design.md | 192 | export function buildQwenModelCatalogForBaseUrl( | CODE |
| LOW | …026-07-05-agent-identity-agents-md-migration-design.md | 268 | export function removeLegacyAgentsMdIdentityBlock(content: string): { | CODE |
| LOW | tests/openclaw-plugin-patches-popo-sdk.test.ts | 23 | 'export function createChannelReplyPipeline(params) { state.replies.push(params); return { state, params }; }', | CODE |
| LOW | tests/openclawWindowsPayload.test.ts | 31 | function createOpenClawWindowsPayloadFilter(root: string, target: string | undefined) { | CODE |
| LOW | tests/openclaw-plugin-patches-popo.test.ts | 14 | function createFabricManagerFixture(filePath: string): void { | CODE |
| LOW | tests/openclaw-plugin-patches-popo.test.ts | 23 | 'function getFabricCliTestOverrides() { return undefined; }', | CODE |
| LOW | tests/xlsx/test_recalc.py | 24 | def test_timeout_preserves_original_and_stops_only_its_process_tree(self, popen, _which): | CODE |
| LOW | tests/xlsx/test_recalc.py | 36 | def test_unsupported_format_is_not_converted_or_overwritten(self): | CODE |
| LOW⚡ | tests/xlsx/test_recalc.py | 61 | def test_success_validates_and_replaces_the_workbook(self): | CODE |
| LOW⚡ | tests/xlsx/test_recalc.py | 66 | def test_concurrent_user_edit_is_preserved(self): | CODE |
| LOW⚡ | tests/xlsx/test_recalc.py | 70 | def test_invalid_converted_workbook_never_replaces_source(self): | CODE |
| LOW | tests/helpers/openclawGatewayRepairSmoke.ts | 7 | export async function readRepairedGatewayHistory(params: { | CODE |
| LOW | scripts/setup-mingit.js | 183 | function ensurePortableGitRuntimeDirs(required) { | CODE |
| LOW | scripts/setup-python-runtime.js | 529 | async function bootstrapRuntimeOnWindows() { | CODE |
| LOW | scripts/setup-python-runtime.js | 609 | function findPortablePythonExecutable(baseDir = OUTPUT_DIR) { | CODE |
| LOW | scripts/setup-python-runtime.js | 622 | async function ensurePortablePythonRuntime(options = {}) { | CODE |
| LOW | SKILLs/imap-smtp-email/scripts/attachment-storage.js | 28 | function sanitizeAttachmentFilename(filename, fallbackIndex = 1) { | CODE |
| LOW | SKILLs/imap-smtp-email/scripts/attachment-storage.js | 62 | function assertSafeDirectorySegment(value, label) { | CODE |
| LOW | SKILLs/imap-smtp-email/scripts/imap.js | 35 | function formatAttachmentFilenameForLog(value) { | CODE |
| LOW | SKILLs/pdf/scripts/fill_fillable_fields.py | 59 | def validation_error_for_field_value(field_info, field_value): | CODE |
| LOW | SKILLs/pdf/scripts/extract_form_field_info.py | 12 | def get_full_annotation_field_id(annotation): | CODE |
| LOW | SKILLs/pdf/scripts/check_bounding_boxes.py | 18 | def get_bounding_box_messages(fields_json_stream) -> list[str]: | CODE |
| LOW | SKILLs/pdf/scripts/check_bounding_boxes_test.py | 38 | def test_label_entry_intersection_same_field(self): | CODE |
| LOW | SKILLs/pdf/scripts/check_bounding_boxes_test.py | 56 | def test_intersection_between_different_fields(self): | CODE |
| LOW | SKILLs/pdf/scripts/check_bounding_boxes_test.py | 80 | def test_different_pages_no_intersection(self): | CODE |
| LOW | SKILLs/pdf/scripts/check_bounding_boxes_test.py | 104 | def test_entry_height_too_small(self): | CODE |
| LOW | SKILLs/pdf/scripts/check_bounding_boxes_test.py | 125 | def test_entry_height_adequate(self): | CODE |
| LOW | SKILLs/pdf/scripts/check_bounding_boxes_test.py | 183 | def test_multiple_errors_limit(self): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/docx.py | 72 | def validate_whitespace_preservation(self): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/docx.py | 173 | def count_paragraphs_in_unpacked(self): | CODE |
| LOW⚡ | SKILLs/pptx/ooxml/scripts/validation/docx.py | 192 | def count_paragraphs_in_original(self): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/redlining.py | 217 | def _remove_claude_tracked_changes(self, root): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/pptx.py | 128 | def validate_slide_layout_ids(self): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/pptx.py | 203 | def validate_no_duplicate_slide_layouts(self): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/pptx.py | 243 | def validate_notes_slide_references(self): | CODE |
| LOW⚡ | SKILLs/pptx/ooxml/scripts/validation/base.py | 765 | def _clean_ignorable_namespaces(self, xml_doc): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 388 | def validate_all_relationship_ids(self): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 486 | def _get_expected_relationship_type(self, element_name): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 641 | def validate_file_against_xsd(self, xml_file, verbose=False): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 791 | def _remove_ignorable_elements(self, root): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 815 | def _preprocess_for_mc_ignorable(self, xml_doc): | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 826 | def _validate_single_file_xsd(self, xml_file, base_path): | CODE |
| 1070 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …viders/2026-03-31-refactor-build-provider-selection.md | 74 | // ─── Provider Name ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …viders/2026-03-31-refactor-build-provider-selection.md | 96 | // ─── OpenClaw Provider ID ─────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …viders/2026-03-31-refactor-build-provider-selection.md | 119 | // ─── OpenClaw API Protocol ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …viders/2026-03-31-refactor-build-provider-selection.md | 128 | // ─── API Format (provider 默认协议格式) ───────────────────────────────── | COMMENT |
| MEDIUM⚡ | …viders/2026-03-31-refactor-build-provider-selection.md | 136 | // ─── Auth Type ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/build-openclaw-runtime.sh | 98 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/build-openclaw-runtime.sh | 103 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-explorer/scripts/quote.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-explorer/scripts/quote.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | SKILLs/stock-explorer/scripts/quote.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | SKILLs/stock-explorer/scripts/quote.py | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | SKILLs/stock-explorer/scripts/quote.py | 82 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | SKILLs/stock-explorer/scripts/quote.py | 84 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-explorer/scripts/quote.py | 209 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-explorer/scripts/quote.py | 211 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/technology-news-search/scripts/search_news.js | 105 | // ── web-search skill integration ────────────────────────────────── | COMMENT |
| MEDIUM | SKILLs/technology-news-search/scripts/search_news.js | 214 | // ── end web-search integration ──────────────────────────────────── | COMMENT |
| MEDIUM | SKILLs/skill-creator/eval-viewer/generate_review.py | 284 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/skill-creator/eval-viewer/generate_review.py | 286 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-announcements/scripts/announcements.py | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-announcements/scripts/announcements.py | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-announcements/scripts/announcements.py | 89 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-announcements/scripts/announcements.py | 91 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | SKILLs/stock-announcements/scripts/announcements.py | 130 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | SKILLs/stock-announcements/scripts/announcements.py | 132 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-announcements/scripts/announcements.py | 157 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-announcements/scripts/announcements.py | 159 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-analyzer/scripts/analyze.py | 20 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-analyzer/scripts/analyze.py | 22 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-analyzer/scripts/analyze.py | 51 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-analyzer/scripts/analyze.py | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-analyzer/scripts/analyze.py | 139 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-analyzer/scripts/analyze.py | 141 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-analyzer/scripts/analyze.py | 170 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-analyzer/scripts/analyze.py | 172 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-analyzer/scripts/analyze.py | 307 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | SKILLs/stock-analyzer/scripts/analyze.py | 309 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | src/renderer/types/cowork.ts | 501 | // ── Dreaming content display types ────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageFileAttachments.test.ts | 5 | // ─── Passthrough ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageFileAttachments.test.ts | 45 | // ─── Extraction ───────────────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageDisplay.test.ts | 5 | // ─── Helpers ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageDisplay.test.ts | 18 | // ─── Passthrough ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageDisplay.test.ts | 47 | // ─── LobsterAI goal mode ──────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageDisplay.test.ts | 73 | // ─── Pattern A: NIM/DingTalk ──────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageDisplay.test.ts | 158 | // ─── Pattern B: OpenClaw gateway ──────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageDisplay.test.ts | 263 | // ─── System: timestamp lines ──────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageDisplay.test.ts | 300 | // ─── Mac compatibility ────────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageDisplay.test.ts | 321 | // ─── False positive safety ────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageDisplay.test.ts | 346 | // ─── \\r\\n handling ───────────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/utils/userMessageDisplay.test.ts | 375 | // ─── Non-image media ──────────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/components/CodeBlock.tsx | 275 | // ── First pass: probe whether this really looks like a diff ────────── | COMMENT |
| MEDIUM | src/renderer/components/CodeBlock.tsx | 317 | // ── Second pass: split into original / modified ────────────────────── | COMMENT |
| MEDIUM | src/renderer/components/CodeBlock.tsx | 465 | // ── DOM structure ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/components/CodeBlock.tsx | 532 | // ── Helpers ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/components/CodeBlock.tsx | 572 | // ── Event listeners ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/components/CodeBlock.tsx | 591 | // ── Panel interface ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/renderer/components/CodeBlock.tsx | 1229 | // ── Static extensions (never reconfigured) ────────────────────── | COMMENT |
| MEDIUM | src/renderer/components/CodeBlock.tsx | 1268 | // ── Dynamic compartments (reconfigured on prop changes) ───────── | COMMENT |
| MEDIUM | …/renderer/components/artifacts/ArtifactPreviewCard.tsx | 41 | // ── Dropdown Menu for Document Artifacts ────────────────────────── | COMMENT |
| MEDIUM | …/renderer/components/artifacts/ArtifactPreviewCard.tsx | 336 | // ── Main Card Component ────────────────────────────────────────── | COMMENT |
| 129 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …viders/2026-03-31-refactor-build-provider-selection.md | 616 | ### Step 1: 定义类型和 Registry(不改变行为) | COMMENT |
| LOW | …viders/2026-03-31-refactor-build-provider-selection.md | 631 | ### Step 2: 重写 `buildProviderSelection` | COMMENT |
| LOW | …viders/2026-03-31-refactor-build-provider-selection.md | 642 | ### Step 3: 保留 `lobsterai-server` 的日志 | COMMENT |
| LOW | …viders/2026-03-31-refactor-build-provider-selection.md | 650 | ### Step 4: 补充测试 | COMMENT |
| LOW | …ve-migration/2026-05-14-mcp-native-migration-design.md | 144 | ### Step 1: 提取 resolveStdioCommand 为独立模块 | COMMENT |
| LOW | …ve-migration/2026-05-14-mcp-native-migration-design.md | 155 | ### Step 2: 修改 openclawConfigSync.ts | COMMENT |
| LOW | …ve-migration/2026-05-14-mcp-native-migration-design.md | 180 | ### Step 3: 简化 McpBridgeServer | COMMENT |
| LOW | …ve-migration/2026-05-14-mcp-native-migration-design.md | 193 | ### Step 4: 重写 main.ts MCP 逻辑 | COMMENT |
| LOW | …ve-migration/2026-05-14-mcp-native-migration-design.md | 214 | ### Step 5: 简化 Renderer 层 | COMMENT |
| LOW | …ve-migration/2026-05-14-mcp-native-migration-design.md | 221 | ### Step 6: 删除废弃文件 | COMMENT |
| LOW⚡ | …l-invalid/2026-04-28-fix-agent-model-invalid-design.md | 141 | ### Step 1: 核心模型选择逻辑重构 (`7153cd2`) | COMMENT |
| LOW⚡ | …l-invalid/2026-04-28-fix-agent-model-invalid-design.md | 149 | ### Step 2: 合并冲突解决 (`6144ff1`) | COMMENT |
| LOW⚡ | …l-invalid/2026-04-28-fix-agent-model-invalid-design.md | 153 | ### Step 3: 新建 session 时持久化 modelOverride (`18a33b5`) | COMMENT |
| LOW⚡ | …l-invalid/2026-04-28-fix-agent-model-invalid-design.md | 157 | ### Step 4: 阻止 session.modelOverride 被 normalization 改写 (`2500d89`) | COMMENT |
| LOW⚡ | …l-invalid/2026-04-28-fix-agent-model-invalid-design.md | 161 | ### Step 5: Home 页模型选择解耦 (`0cb02d6`) | COMMENT |
| LOW⚡ | …l-invalid/2026-04-28-fix-agent-model-invalid-design.md | 165 | ### Step 6: 清理 (`0d96884`) | COMMENT |
| LOW | scripts/generate-app-icon.js | 26 | // Step 1: Use PowerShell + System.Drawing to resize the source PNG | COMMENT |
| LOW | scripts/generate-app-icon.js | 57 | // Step 2: Read resized PNGs and pack into ICO | COMMENT |
| LOW | SKILLs/pdf/forms.md | 85 | ## Step 1: Visual Analysis (REQUIRED) | COMMENT |
| LOW | SKILLs/pdf/forms.md | 130 | ### Step 2: Create fields.json and validation images (REQUIRED) | COMMENT |
| LOW | SKILLs/pdf/forms.md | 184 | ### Step 3: Validate Bounding Boxes (REQUIRED) | COMMENT |
| LOW | SKILLs/pdf/forms.md | 203 | ### Step 4: Add annotations to the PDF | COMMENT |
| LOW | SKILLs/content-planner/SKILL.md | 56 | ### Step 1: Clarify Planning Scope | COMMENT |
| LOW | SKILLs/content-planner/SKILL.md | 68 | ### Step 2: Trending Scan | COMMENT |
| LOW | SKILLs/content-planner/SKILL.md | 87 | ### Step 3: Competitor Analysis | COMMENT |
| LOW | SKILLs/content-planner/SKILL.md | 98 | ### Step 4: Generate Topic Recommendations | COMMENT |
| LOW | SKILLs/content-planner/SKILL.md | 114 | ### Step 5: User Approval | COMMENT |
| LOW | SKILLs/content-planner/SKILL.md | 120 | ### Step 6: Generate Content Calendar | COMMENT |
| LOW | SKILLs/content-planner/SKILL.md | 145 | ### Step 7: Output Confirmation | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 30 | ### Step 1: Read the Brief | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 42 | ### Step 2: Determine Writing Style | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 56 | ### Step 3: Material Collection | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 71 | ### Step 4: Generate Outline | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 130 | ### Step 5: User Approval of Outline | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 136 | ### Step 6: Write the Content | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 165 | ### Step 7: Formatting Optimization | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 181 | ### Step 8: Output Draft | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 200 | ### Step 9: Quality Checklist | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 214 | ### Step 1: Generate 10 Candidate Titles | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 227 | ### Step 2: Score and Filter | COMMENT |
| LOW⚡ | SKILLs/technology-news-search/scripts/search_news.js | 277 | // Step 1: Filter by network accessibility (silent, automatic) | COMMENT |
| LOW⚡ | SKILLs/technology-news-search/scripts/search_news.js | 280 | // Step 2: Smart routing - filter sources by detected domains | COMMENT |
| LOW | SKILLs/skill-creator/SKILL.md | 171 | ### Step 1: Spawn all runs (with-skill AND baseline) in the same turn | COMMENT |
| LOW | SKILLs/skill-creator/SKILL.md | 201 | ### Step 2: While runs are in progress, draft assertions | COMMENT |
| LOW | SKILLs/skill-creator/SKILL.md | 209 | ### Step 3: As runs complete, capture timing data | COMMENT |
| LOW | SKILLs/skill-creator/SKILL.md | 223 | ### Step 4: Grade, aggregate, and launch the viewer | COMMENT |
| LOW | SKILLs/skill-creator/SKILL.md | 269 | ### Step 5: Read the feedback | COMMENT |
| LOW | SKILLs/skill-creator/SKILL.md | 339 | ### Step 1: Generate trigger eval queries | COMMENT |
| LOW | SKILLs/skill-creator/SKILL.md | 362 | ### Step 2: Review with user | COMMENT |
| LOW | SKILLs/skill-creator/SKILL.md | 377 | ### Step 3: Run the optimization loop | COMMENT |
| LOW | SKILLs/skill-creator/SKILL.md | 404 | ### Step 4: Apply the result | COMMENT |
| LOW⚡ | SKILLs/skill-creator/agents/grader.md | 21 | ### Step 1: Read the Transcript | COMMENT |
| LOW⚡ | SKILLs/skill-creator/agents/grader.md | 27 | ### Step 2: Examine Output Files | COMMENT |
| LOW⚡ | SKILLs/skill-creator/agents/grader.md | 33 | ### Step 3: Evaluate Each Assertion | COMMENT |
| LOW⚡ | SKILLs/skill-creator/agents/grader.md | 43 | ### Step 4: Extract and Verify Claims | COMMENT |
| LOW | SKILLs/skill-creator/agents/grader.md | 61 | ### Step 5: Read User Notes | COMMENT |
| LOW | SKILLs/skill-creator/agents/grader.md | 68 | ### Step 6: Critique the Evals | COMMENT |
| LOW | SKILLs/skill-creator/agents/grader.md | 81 | ### Step 7: Write Grading Results | COMMENT |
| LOW | SKILLs/skill-creator/agents/grader.md | 101 | ### Step 8: Read Executor Metrics and Timing | COMMENT |
| LOW⚡ | SKILLs/skill-creator/agents/comparator.md | 22 | ### Step 1: Read Both Outputs | COMMENT |
| 48 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | SKILLs/xlsx/recalc.py | 150 | except (FileNotFoundError, subprocess.TimeoutExpired): | CODE |
| HIGH | SKILLs/skill-creator/eval-viewer/generate_review.py | 303 | except subprocess.TimeoutExpired: | CODE |
| HIGH | SKILLs/skill-creator/eval-viewer/generate_review.py | 231 | except (json.JSONDecodeError, OSError, KeyError): | CODE |
| HIGH | SKILLs/skill-creator/eval-viewer/generate_review.py | 428 | except (json.JSONDecodeError, OSError): | CODE |
| HIGH | SKILLs/skill-creator/eval-viewer/generate_review.py | 97 | except (json.JSONDecodeError, OSError): | CODE |
| HIGH | SKILLs/skill-creator/eval-viewer/generate_review.py | 135 | except (json.JSONDecodeError, OSError): | CODE |
| HIGH | SKILLs/skill-creator/eval-viewer/generate_review.py | 111 | except OSError: | CODE |
| HIGH | SKILLs/skill-creator/eval-viewer/generate_review.py | 299 | except (ProcessLookupError, ValueError): | CODE |
| HIGH | SKILLs/skill-creator/eval-viewer/generate_review.py | 340 | except (json.JSONDecodeError, OSError): | CODE |
| HIGH | SKILLs/skill-creator/scripts/aggregate_benchmark.py | 146 | except json.JSONDecodeError: | CODE |
| HIGH | SKILLs/pptx/ooxml/scripts/validation/redlining.py | 59 | except Exception: | CODE |
| HIGH | SKILLs/pptx/ooxml/scripts/validation/redlining.py | 211 | except (subprocess.CalledProcessError, FileNotFoundError, Exception): | CODE |
| HIGH | SKILLs/pptx/scripts/rearrange.py | 124 | except Exception: | CODE |
| HIGH | SKILLs/pptx/scripts/inventory.py | 384 | except Exception: | CODE |
| HIGH | SKILLs/pptx/scripts/inventory.py | 504 | except Exception: | CODE |
| HIGH | SKILLs/pptx/scripts/inventory.py | 219 | except (AttributeError, TypeError): | CODE |
| HIGH | SKILLs/docx/ooxml/scripts/validation/redlining.py | 59 | except Exception: | CODE |
| HIGH | SKILLs/docx/ooxml/scripts/validation/redlining.py | 211 | except (subprocess.CalledProcessError, FileNotFoundError, Exception): | CODE |
| HIGH | SKILLs/docx/scripts/document.py | 900 | except ValueError: | CODE |
| HIGH | SKILLs/docx/scripts/document.py | 85 | except ValueError: | CODE |
| HIGH | SKILLs/docx/scripts/utilities.py | 298 | except ValueError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | SKILLs/stock-explorer/scripts/quote.py | 78 | except Exception: | CODE |
| LOW | SKILLs/xlsx/recalc.py | 103 | except Exception: | CODE |
| LOW | SKILLs/xlsx/recalc.py | 129 | except Exception as exc: | CODE |
| LOW | SKILLs/xlsx/recalc.py | 221 | except Exception as e: | CODE |
| LOW | SKILLs/pdf/reference.md | 484 | except Exception as e: | CODE |
| LOW | SKILLs/pdf/reference.md | 504 | except Exception as e: | CODE |
| LOW | SKILLs/pdf/reference.md | 578 | except Exception as e: | CODE |
| MEDIUM | SKILLs/skill-creator/eval-viewer/generate_review.py | 408 | print(f"Error: {workspace} is not a directory", file=sys.stderr) | CODE |
| LOW | SKILLs/skill-creator/scripts/run_eval.py | 223 | except Exception as e: | CODE |
| MEDIUM | SKILLs/skill-creator/scripts/run_eval.py | 276 | print(f"Error: No SKILL.md found at {skill_path}", file=sys.stderr) | CODE |
| LOW | SKILLs/skill-creator/scripts/package_skill.py | 106 | except Exception as e: | CODE |
| MEDIUM | SKILLs/skill-creator/scripts/improve_description.py | 204 | print(f"Error: No SKILL.md found at {skill_path}", file=sys.stderr) | CODE |
| MEDIUM | SKILLs/skill-creator/scripts/run_loop.py | 269 | print(f"Error: No SKILL.md found at {skill_path}", file=sys.stderr) | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/pack.py | 128 | except Exception as e: | CODE |
| MEDIUM | SKILLs/pptx/ooxml/scripts/validate.py | 52 | print(f"Error: Validation not supported for file type {file_extension}") | CODE |
| LOW⚡ | SKILLs/pptx/ooxml/scripts/validation/docx.py | 187 | except Exception as e: | CODE |
| MEDIUM⚡ | SKILLs/pptx/ooxml/scripts/validation/docx.py | 188 | print(f"Error counting paragraphs in unpacked document: {e}") | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/docx.py | 211 | except Exception as e: | CODE |
| MEDIUM | SKILLs/pptx/ooxml/scripts/validation/docx.py | 212 | print(f"Error counting paragraphs in original document: {e}") | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/redlining.py | 59 | except Exception: | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/redlining.py | 71 | except Exception as e: | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/pptx.py | 228 | except Exception as e: | CODE |
| LOW⚡ | SKILLs/pptx/ooxml/scripts/validation/base.py | 471 | except Exception as e: | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 140 | except Exception as e: | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 359 | except Exception as e: | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 604 | except Exception: | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 626 | except Exception as e: | CODE |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 866 | except Exception as e: | CODE |
| MEDIUM | SKILLs/pptx/scripts/thumbnail.py | 100 | print(f"Error: Invalid PowerPoint file: {args.input}") | CODE |
| MEDIUM | SKILLs/pptx/scripts/thumbnail.py | 124 | print("Error: No slides found") | CODE |
| LOW⚡ | SKILLs/pptx/scripts/thumbnail.py | 144 | except Exception as e: | CODE |
| MEDIUM⚡ | SKILLs/pptx/scripts/thumbnail.py | 145 | print(f"Error: {e}") | CODE |
| LOW | SKILLs/pptx/scripts/thumbnail.py | 351 | except Exception: | CODE |
| MEDIUM⚡ | SKILLs/pptx/scripts/rearrange.py | 58 | print(f"Error: Template file not found: {args.template}") | STRING |
| MEDIUM⚡ | SKILLs/pptx/scripts/rearrange.py | 68 | print(f"Error: {e}") | STRING |
| LOW⚡ | SKILLs/pptx/scripts/rearrange.py | 70 | except Exception as e: | STRING |
| MEDIUM⚡ | SKILLs/pptx/scripts/rearrange.py | 71 | print(f"Error processing presentation: {e}") | STRING |
| LOW | SKILLs/pptx/scripts/rearrange.py | 124 | except Exception: | CODE |
| MEDIUM | SKILLs/pptx/scripts/inventory.py | 84 | print(f"Error: Input file not found: {args.input}") | STRING |
| MEDIUM | SKILLs/pptx/scripts/inventory.py | 88 | print("Error: Input must be a PowerPoint file (.pptx)") | STRING |
| LOW | SKILLs/pptx/scripts/inventory.py | 120 | except Exception as e: | STRING |
| MEDIUM | SKILLs/pptx/scripts/inventory.py | 121 | print(f"Error processing presentation: {e}") | STRING |
| LOW | SKILLs/pptx/scripts/inventory.py | 384 | except Exception: | CODE |
| LOW | SKILLs/pptx/scripts/inventory.py | 504 | except Exception: | CODE |
| LOW | SKILLs/pptx/scripts/inventory.py | 601 | except Exception: | CODE |
| MEDIUM⚡ | SKILLs/pptx/scripts/replace.py | 367 | print(f"Error: Input file '{input_pptx}' not found") | CODE |
| MEDIUM⚡ | SKILLs/pptx/scripts/replace.py | 371 | print(f"Error: Replacements JSON file '{replacements_json}' not found") | CODE |
| LOW⚡ | SKILLs/pptx/scripts/replace.py | 376 | except Exception as e: | CODE |
| MEDIUM⚡ | SKILLs/pptx/scripts/replace.py | 377 | print(f"Error applying replacements: {e}") | CODE |
| LOW | SKILLs/stock-announcements/scripts/announcements.py | 52 | except Exception as exc: | CODE |
| LOW⚡ | SKILLs/stock-announcements/scripts/announcements.py | 125 | except Exception as exc: | CODE |
| LOW | SKILLs/docx/ooxml/scripts/pack.py | 128 | except Exception as e: | CODE |
| MEDIUM | SKILLs/docx/ooxml/scripts/validate.py | 52 | print(f"Error: Validation not supported for file type {file_extension}") | CODE |
| LOW⚡ | SKILLs/docx/ooxml/scripts/validation/docx.py | 187 | except Exception as e: | CODE |
| MEDIUM⚡ | SKILLs/docx/ooxml/scripts/validation/docx.py | 188 | print(f"Error counting paragraphs in unpacked document: {e}") | CODE |
| LOW | SKILLs/docx/ooxml/scripts/validation/docx.py | 211 | except Exception as e: | CODE |
| MEDIUM | SKILLs/docx/ooxml/scripts/validation/docx.py | 212 | print(f"Error counting paragraphs in original document: {e}") | CODE |
| LOW | SKILLs/docx/ooxml/scripts/validation/redlining.py | 59 | except Exception: | CODE |
| LOW | SKILLs/docx/ooxml/scripts/validation/redlining.py | 71 | except Exception as e: | CODE |
| LOW | SKILLs/docx/ooxml/scripts/validation/pptx.py | 228 | except Exception as e: | CODE |
| 6 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/betterSqlite3MacPayload.test.ts | 191 | context.packager.info.options.targets.set(Platform.MAC, new Map([[Arch.universal, ['dmg']]])); | CODE |
| CRITICAL | …erer/components/settings/BrowserCredentialSettings.tsx | 93 | const response = await window.electron.openclaw.browser.credentials.requestAccess(); | CODE |
| CRITICAL | …erer/components/settings/BrowserCredentialSettings.tsx | 129 | const response = await window.electron.openclaw.browser.credentials.save({ | CODE |
| CRITICAL | …erer/components/settings/BrowserCredentialSettings.tsx | 154 | const response = await window.electron.openclaw.browser.credentials.delete({ | CODE |
| CRITICAL | …/artifacts/renderers/markdownPreviewReferences.test.ts | 95 | expect(marks.every(decoration => decoration.value.spec.attributes.title.startsWith('Reference title\n'))).toBe(true); | CODE |
| CRITICAL | src/main/libs/agentBrowserHost.test.ts | 476 | const popupView = mainWindow.contentView.addChildView.mock.calls.at(-1)?.[0]; | CODE |
| CRITICAL | src/main/desktopCompanion/companionSelection.test.ts | 106 | const calls = win.webContents.send.mock.calls.filter(([channel]) => channel === DesktopCompanionIpc.Selection); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/fix-mac-icon-display.sh | 31 | # Check if CFBundleIconName is already set | COMMENT |
| LOW | scripts/regenerate-mac-icon.sh | 16 | # Check if source PNG exists | COMMENT |
| LOW | SKILLs/xlsx/recalc.py | 146 | # Check if gtimeout is available on macOS | COMMENT |
| LOW | SKILLs/pptx/ooxml/scripts/validation/docx.py | 90 | # Check if text starts or ends with whitespace | COMMENT |
| LOW | SKILLs/pptx/ooxml/scripts/validation/docx.py | 92 | # Check if xml:space="preserve" attribute exists | COMMENT |
| LOW | SKILLs/pptx/ooxml/scripts/validation/pptx.py | 94 | # Check if this is an ID attribute | COMMENT |
| LOW | SKILLs/pptx/ooxml/scripts/validation/pptx.py | 97 | # Check if value looks like a UUID (has the right length and pattern structure) | COMMENT |
| LOW | SKILLs/pptx/ooxml/scripts/validation/pptx.py | 125 | # Check if it's 32 hex-like characters (could include invalid hex chars) | COMMENT |
| LOW⚡ | SKILLs/pptx/ooxml/scripts/validation/base.py | 449 | # Check if the ID exists | COMMENT |
| LOW⚡ | SKILLs/pptx/ooxml/scripts/validation/base.py | 456 | # Check if we have type expectations for this element | COMMENT |
| LOW⚡ | SKILLs/pptx/ooxml/scripts/validation/base.py | 463 | # Check if the actual type matches or contains the expected type | COMMENT |
| LOW⚡ | SKILLs/pptx/ooxml/scripts/validation/base.py | 759 | # Check if file is in a main content folder and use appropriate schema | COMMENT |
| LOW⚡ | SKILLs/pptx/ooxml/scripts/validation/base.py | 776 | # Check if attribute is from a namespace other than allowed ones | COMMENT |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 212 | # Check if this element type has ID uniqueness requirements | COMMENT |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 503 | # Check if this might be a compound like "sldMasterId" | COMMENT |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 619 | # Check if it's a known media extension that should be declared | COMMENT |
| LOW | SKILLs/pptx/scripts/inventory.py | 873 | # Check if there's meaningful overlap (more than tolerance) | COMMENT |
| LOW | SKILLs/pptx/scripts/replace.py | 173 | # Check if slide exists | COMMENT |
| LOW | SKILLs/pptx/scripts/replace.py | 306 | # Check if any text overflow got worse | COMMENT |
| LOW | SKILLs/web-search/scripts/stop-server.sh | 8 | # Check if PID file exists | COMMENT |
| LOW | SKILLs/web-search/scripts/stop-server.sh | 17 | # Check if process is running | COMMENT |
| LOW | SKILLs/web-search/scripts/search.sh | 227 | # Check if server is running | COMMENT |
| LOW | SKILLs/web-search/scripts/start-server.sh | 186 | # Check if server is already running | COMMENT |
| LOW | SKILLs/local-tools/scripts/calendar.sh | 512 | # Check if error is permission-related | COMMENT |
| LOW | SKILLs/local-tools/scripts/calendar.sh | 569 | # Check if result indicates permission error | COMMENT |
| LOW | SKILLs/docx/ooxml/scripts/validation/docx.py | 90 | # Check if text starts or ends with whitespace | COMMENT |
| LOW | SKILLs/docx/ooxml/scripts/validation/docx.py | 92 | # Check if xml:space="preserve" attribute exists | COMMENT |
| LOW | SKILLs/docx/ooxml/scripts/validation/pptx.py | 94 | # Check if this is an ID attribute | COMMENT |
| LOW | SKILLs/docx/ooxml/scripts/validation/pptx.py | 97 | # Check if value looks like a UUID (has the right length and pattern structure) | COMMENT |
| LOW | SKILLs/docx/ooxml/scripts/validation/pptx.py | 125 | # Check if it's 32 hex-like characters (could include invalid hex chars) | COMMENT |
| LOW⚡ | SKILLs/docx/ooxml/scripts/validation/base.py | 449 | # Check if the ID exists | COMMENT |
| LOW⚡ | SKILLs/docx/ooxml/scripts/validation/base.py | 456 | # Check if we have type expectations for this element | COMMENT |
| LOW⚡ | SKILLs/docx/ooxml/scripts/validation/base.py | 463 | # Check if the actual type matches or contains the expected type | COMMENT |
| LOW⚡ | SKILLs/docx/ooxml/scripts/validation/base.py | 759 | # Check if file is in a main content folder and use appropriate schema | COMMENT |
| LOW⚡ | SKILLs/docx/ooxml/scripts/validation/base.py | 776 | # Check if attribute is from a namespace other than allowed ones | COMMENT |
| LOW | SKILLs/docx/ooxml/scripts/validation/base.py | 212 | # Check if this element type has ID uniqueness requirements | COMMENT |
| LOW | SKILLs/docx/ooxml/scripts/validation/base.py | 503 | # Check if this might be a compound like "sldMasterId" | COMMENT |
| LOW | SKILLs/docx/ooxml/scripts/validation/base.py | 619 | # Check if it's a known media extension that should be declared | COMMENT |
| LOW | SKILLs/docx/scripts/document.py | 539 | # Check if it's a numbered list item | COMMENT |
| LOW | SKILLs/docx/scripts/document.py | 1055 | # Check if this rsid already exists | COMMENT |
| LOW | SKILLs/docx/scripts/document.py | 1192 | # Check if author already exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | SKILLs/stock-explorer/scripts/quote.py | 213 | CODE | |
| LOW | SKILLs/xlsx/recalc.py | 107 | CODE | |
| LOW | SKILLs/pdf/scripts/fill_fillable_fields.py | 12 | CODE | |
| LOW | SKILLs/pdf/scripts/fill_fillable_fields.py | 59 | CODE | |
| LOW | SKILLs/pdf/scripts/extract_form_field_info.py | 22 | CODE | |
| LOW | SKILLs/pdf/scripts/extract_form_field_info.py | 62 | CODE | |
| LOW | SKILLs/pdf/scripts/check_bounding_boxes.py | 18 | CODE | |
| LOW | SKILLs/skill-creator/eval-viewer/generate_review.py | 85 | CODE | |
| LOW | SKILLs/skill-creator/eval-viewer/generate_review.py | 149 | CODE | |
| LOW | SKILLs/skill-creator/eval-viewer/generate_review.py | 288 | CODE | |
| LOW | SKILLs/skill-creator/scripts/run_eval.py | 35 | CODE | |
| LOW | SKILLs/skill-creator/scripts/package_skill.py | 42 | CODE | |
| LOW | SKILLs/skill-creator/scripts/improve_description.py | 19 | CODE | |
| LOW | SKILLs/skill-creator/scripts/aggregate_benchmark.py | 67 | CODE | |
| LOW | SKILLs/skill-creator/scripts/generate_report.py | 16 | CODE | |
| LOW | SKILLs/skill-creator/scripts/utils.py | 7 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/pack.py | 45 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/docx.py | 72 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/docx.py | 124 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/redlining.py | 139 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/redlining.py | 217 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/pptx.py | 77 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/pptx.py | 128 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/pptx.py | 243 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 186 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 277 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 388 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 486 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 522 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 688 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/base.py | 765 | CODE | |
| LOW | SKILLs/pptx/scripts/thumbnail.py | 67 | CODE | |
| LOW | SKILLs/pptx/scripts/thumbnail.py | 321 | CODE | |
| LOW | SKILLs/pptx/scripts/rearrange.py | 149 | CODE | |
| LOW | SKILLs/pptx/scripts/inventory.py | 140 | CODE | |
| LOW | SKILLs/pptx/scripts/inventory.py | 280 | CODE | |
| LOW | SKILLs/pptx/scripts/inventory.py | 362 | CODE | |
| LOW | SKILLs/pptx/scripts/inventory.py | 480 | CODE | |
| LOW | SKILLs/pptx/scripts/replace.py | 143 | CODE | |
| LOW | SKILLs/pptx/scripts/replace.py | 162 | CODE | |
| LOW | SKILLs/pptx/scripts/replace.py | 214 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/pack.py | 45 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/docx.py | 72 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/docx.py | 124 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/redlining.py | 139 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/redlining.py | 217 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/pptx.py | 77 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/pptx.py | 128 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/pptx.py | 243 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/base.py | 186 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/base.py | 277 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/base.py | 388 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/base.py | 486 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/base.py | 522 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/base.py | 688 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/base.py | 765 | CODE | |
| LOW | SKILLs/docx/scripts/document.py | 75 | CODE | |
| LOW | SKILLs/docx/scripts/document.py | 116 | CODE | |
| LOW | SKILLs/docx/scripts/document.py | 264 | CODE | |
| LOW | SKILLs/docx/scripts/document.py | 342 | CODE | |
| 3 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/generate-app-icon.js | 26 | // Step 1: Use PowerShell + System.Drawing to resize the source PNG | COMMENT |
| LOW | scripts/generate-app-icon.js | 57 | // Step 2: Read resized PNGs and pack into ICO | COMMENT |
| LOW⚡ | SKILLs/technology-news-search/scripts/search_news.js | 277 | // Step 1: Filter by network accessibility (silent, automatic) | COMMENT |
| LOW⚡ | SKILLs/technology-news-search/scripts/search_news.js | 280 | // Step 2: Smart routing - filter sources by detected domains | COMMENT |
| LOW | SKILLs/pptx/scripts/rearrange.py | 176 | # Step 1: DUPLICATE repeated slides | COMMENT |
| LOW⚡ | SKILLs/pptx/scripts/rearrange.py | 200 | # Step 2: DELETE unwanted slides (work backwards) | COMMENT |
| LOW⚡ | SKILLs/pptx/scripts/rearrange.py | 209 | # Step 3: REORDER to final sequence | COMMENT |
| LOW⚡ | SKILLs/web-search/scripts/test-basic.js | 18 | // Step 1: Launch browser | COMMENT |
| LOW⚡ | SKILLs/web-search/scripts/test-basic.js | 23 | // Step 2: Connect via Playwright | COMMENT |
| LOW⚡ | SKILLs/web-search/scripts/test-basic.js | 28 | // Step 3: Get page | COMMENT |
| LOW⚡ | SKILLs/web-search/scripts/test-basic.js | 33 | // Step 4: Navigate to a test URL | COMMENT |
| LOW⚡ | SKILLs/web-search/scripts/test-basic.js | 38 | // Step 5: Get page title | COMMENT |
| LOW⚡ | SKILLs/web-search/scripts/test-basic.js | 43 | // Step 6: Take screenshot | COMMENT |
| LOW⚡ | SKILLs/web-search/scripts/test-basic.js | 48 | // Step 7: Get text content | COMMENT |
| LOW | SKILLs/seedance/scripts/generate_video.js | 510 | // Step 1: 创建任务 | COMMENT |
| LOW⚡ | SKILLs/seedance/scripts/generate_video.js | 521 | // Step 2: 轮询状态 | COMMENT |
| LOW⚡ | SKILLs/seedance/scripts/generate_video.js | 524 | // Step 3: 下载视频 | COMMENT |
| LOW | src/renderer/components/Settings.tsx | 3344 | // Step 1: Request device code | COMMENT |
| LOW | src/renderer/components/Settings.tsx | 3355 | // Step 2: Poll for token | COMMENT |
| LOW⚡ | src/main/libs/githubCopilotAuth.ts | 296 | // Step 1: Get device code | COMMENT |
| LOW⚡ | src/main/libs/githubCopilotAuth.ts | 300 | // Step 2: Poll for access token | COMMENT |
| LOW⚡ | src/main/libs/githubCopilotAuth.ts | 308 | // Step 3: Get user info | COMMENT |
| LOW⚡ | src/main/libs/githubCopilotAuth.ts | 311 | // Step 4: Get Copilot token (includes derived base URL) | COMMENT |
| LOW | src/main/im/imGatewayManager.ts | 2665 | // Step 1: init — obtain nonce | COMMENT |
| LOW | src/main/im/imGatewayManager.ts | 2676 | // Step 2: begin — obtain device_code + QR url | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | SKILLs/pptx/ooxml/scripts/validation/base.py | 767 | # Create a clean copy | COMMENT |
| MEDIUM | SKILLs/pptx/ooxml/scripts/validation/base.py | 919 | # Create a copy of the document to avoid modifying the original | COMMENT |
| MEDIUM | SKILLs/pptx/ooxml/scripts/validation/base.py | 298 | ): # This file is not referenced by .rels | CODE |
| MEDIUM | SKILLs/pptx/scripts/thumbnail.py | 401 | # Create a highlight overlay | COMMENT |
| MEDIUM | SKILLs/pptx/scripts/rearrange.py | 108 | # Create a new relationship in the destination slide for this image | COMMENT |
| MEDIUM | SKILLs/local-tools/scripts/calendar.sh | 71 | # Create a new event | COMMENT |
| MEDIUM⚡ | SKILLs/docx/ooxml/scripts/validation/base.py | 767 | # Create a clean copy | COMMENT |
| MEDIUM | SKILLs/docx/ooxml/scripts/validation/base.py | 919 | # Create a copy of the document to avoid modifying the original | COMMENT |
| MEDIUM | SKILLs/docx/ooxml/scripts/validation/base.py | 298 | ): # This file is not referenced by .rels | CODE |
| MEDIUM | SKILLs/docx/scripts/document.py | 984 | # Create the relationship entry | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | SKILLs/docx/scripts/document.py | 265 | Reject an insertion by wrapping its content in a deletion. Wraps all runs inside w:ins in w:del, converting w:t | STRING |
| HIGH | SKILLs/docx/scripts/document.py | 343 | Reject a deletion by re-inserting the deleted content. Creates w:ins elements after each w:del, copying deleted | STRING |
| HIGH | SKILLs/docx/scripts/document.py | 483 | Mark a w:r or w:p element as deleted with tracked changes (in-place DOM manipulation). For w:r: wraps in <w:del | STRING |
| HIGH | SKILLs/docx/scripts/document.py | 681 | Get or create a DocxXMLEditor for the specified XML file. Enables lazy-loaded editors with bracket not | STRING |
| HIGH | SKILLs/docx/scripts/utilities.py | 83 | Get a DOM element by tag and identifier. Finds an element by either its line number in the original fi | STRING |
| HIGH | SKILLs/docx/scripts/utilities.py | 313 | Parse XML fragment and return list of imported nodes. Args: xml_content: String containing | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | SKILLs/pptx/ooxml/scripts/validation/docx.py | 0 | run all validation checks and return true if all pass. | STRING |
| HIGH | SKILLs/pptx/ooxml/scripts/validation/pptx.py | 0 | run all validation checks and return true if all pass. | STRING |
| HIGH | SKILLs/pptx/ooxml/scripts/validation/base.py | 0 | run all validation checks and return true if all pass. | STRING |
| HIGH | SKILLs/docx/ooxml/scripts/validation/docx.py | 0 | run all validation checks and return true if all pass. | STRING |
| HIGH | SKILLs/docx/ooxml/scripts/validation/pptx.py | 0 | run all validation checks and return true if all pass. | STRING |
| HIGH | SKILLs/docx/ooxml/scripts/validation/base.py | 0 | run all validation checks and return true if all pass. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …viders/2026-03-31-refactor-build-provider-selection.md | 681 | // 场景 1b: lobsterai-server without proxy port | COMMENT |
| LOW | …viders/2026-03-31-refactor-build-provider-selection.md | 701 | // 断言: | COMMENT |
| LOW | …viders/2026-03-31-refactor-build-provider-selection.md | 721 | // baseUrl 不包含 '/openai' 后缀 | COMMENT |
| LOW | …viders/2026-03-31-refactor-build-provider-selection.md | 741 | COMMENT | |
| LOW | SKILLs/article-writer/SKILL.md | 81 | ## 分析维度2 (400-600字) — 对比/反面论证 | COMMENT |
| LOW | SKILLs/article-writer/SKILL.md | 101 | ## 开头 (150-200字) — 场景切入 + 悬念 | COMMENT |
| LOW | SKILLs/pptx/scripts/thumbnail.py | 21 | Usage: | COMMENT |
| LOW | src/renderer/services/dshAnalytics.ts | 41 | // Query strings and fragments are where URLs carry tokens; the origin and | COMMENT |
| LOW | src/shared/cowork/text.ts | 1 | // The OpenClaw gateway hard-rejects chat.send messages containing U+0000 | COMMENT |
| LOW | src/main/main.ts | 11901 | // Dual-dispatch pattern: permission responses arrive through one IPC channel | COMMENT |
| LOW | src/main/main.ts | 15601 | // Store may not have been initialized — safe to ignore. | COMMENT |
| LOW | src/main/libs/coworkUtil.ts | 961 | COMMENT | |
| LOW | src/main/libs/coworkUtil.ts | 1001 | coworkLog('INFO', 'applyPackagedEnvOverrides', `Set BASH_ENV for UTF-8 console code page: ${env.BASH_ENV}`); | COMMENT |
| LOW | src/main/libs/coworkUtil.ts | 1061 | } | COMMENT |
| LOW | src/main/libs/openclawConfigSync.ts | 1801 | // Internal launchers only: child env key -> gateway env variable name. | COMMENT |
| LOW | src/main/libs/openclawConfigSync.ts | 2581 | // Start with explicit bindings; configured channels receive a fallback | COMMENT |
| LOW | src/main/libs/openclawConfigSync.ts | 2841 | plugins: { | COMMENT |
| LOW | src/main/libs/dshConfigSync.ts | 1 | // Renders LobsterAI provider configuration into the dsh settings file | COMMENT |
| LOW | src/main/libs/dshEngineManager.ts | 41 | pruneInstalledDshRuntimes, | COMMENT |
| LOW | src/main/libs/dshWebAuth.ts | 1 | // dsh 0.1.5 serves its web UI only to browsers holding a session cookie. Once | COMMENT |
| LOW | src/main/libs/openclawUserConfigOverlay.ts | 81 | // | COMMENT |
| LOW | src/main/libs/dshSharedHome.ts | 1 | // Single-writer protection for the shared dsh home. | COMMENT |
| LOW | src/main/libs/openclawEngineManager.ts | 1181 | // are discovered separately via plugins.load.paths in openclaw.json. | COMMENT |
| LOW | src/main/libs/dshRuntimeInstaller.ts | 1 | // Installs a packed dsh runtime archive into a writable base directory (the | COMMENT |
| LOW | src/main/libs/agentEngine/openclawRuntimeAdapter.ts | 12161 | // content-based strategies for detecting a sliding history window. If both | COMMENT |
| LOW | src/main/libs/agentEngine/openclawRuntimeAdapter.ts | 12261 | // | COMMENT |
| LOW | src/main/libs/agentEngine/openclawRuntimeAdapter.ts | 12681 | console.debug('[OpenClawRuntime] suppressed active turn creation for a closed run.'); | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …channel/2026-04-09-email-channel-integration-design.md | 168 | allowFrom?: string[]; // Whitelist: ["user@example.com", "*.trusted.com"] | CODE |
| LOW | …channel/2026-04-09-email-channel-integration-design.md | 1255 | allowFrom?: string[]; // Whitelist: ["user@example.com", "*.trusted.com"] | CODE |
| LOW | …channel/2026-04-09-email-channel-integration-design.md | 1916 | emailAddressPlaceholder: 'user@example.com', | CODE |
| LOW | …channel/2026-04-09-email-channel-integration-design.md | 2011 | emailAddressPlaceholder: 'user@example.com', | CODE |
| LOW | SKILLs/playwright/SKILL.md | 99 | "$PWCLI" fill e1 "user@example.com" | CODE |
| LOW | SKILLs/playwright/references/workflows.md | 21 | pwcli fill e1 "user@example.com" | CODE |
| LOW | SKILLs/playwright/references/cli.md | 29 | pwcli fill e5 "user@example.com" | CODE |
| LOW | SKILLs/pptx/SKILL.md | 155 | - Use `class="placeholder"` for areas where charts/tables will be added (render with gray background for visibility) | CODE |
| LOW | SKILLs/pptx/html2pptx.md | 34 | - `class="placeholder"` - Reserved space for charts (returns `{ id, x, y, w, h }`) | CODE |
| LOW | SKILLs/pptx/html2pptx.md | 172 | <div id="chart" class="placeholder" style="width: 350pt; height: 200pt;"></div> | CODE |
| LOW | SKILLs/pptx/scripts/html2pptx.js | 16 | * - Extracts placeholder elements (class="placeholder") with positions | COMMENT |
| LOW | SKILLs/pptx/scripts/html2pptx.js | 558 | if (el.className && el.className.includes('placeholder')) { | CODE |
| LOW | SKILLs/docx/ooxml.md | 298 | doc = Document('unpacked', author="John Doe", initials="JD") | CODE |
| LOW | SKILLs/docx/scripts/document.py | 10 | doc = Document('workspace/unpacked', author="John Doe", initials="JD") | STRING |
| LOW | src/renderer/services/auth.test.ts | 954 | yid: 'user@example.com', | CODE |
| LOW | src/renderer/services/i18n.ts | 4597 | emailAddressPlaceholder: 'user@example.com', | CODE |
| LOW | src/renderer/services/i18n.ts | 9546 | emailAddressPlaceholder: 'user@example.com', | CODE |
| LOW | src/main/i18n.ts | 374 | emailAddressPlaceholder: 'user@example.com', | CODE |
| LOW | src/main/i18n.ts | 836 | emailAddressPlaceholder: 'user@example.com', | CODE |
| LOW | src/main/libs/openclawConfigSync.runtime.test.ts | 4047 | email: 'user@example.com', | CODE |
| LOW | src/main/computerUse/computerUseKit.test.ts | 93 | fs.writeFileSync(archivePath, 'placeholder'); | CODE |
| LOW | src/main/computerUse/computerUseKit.test.ts | 114 | fs.writeFileSync(archivePath, 'placeholder'); | CODE |
| LOW | src/main/im/types.ts | 536 | allowFrom?: string[]; // Whitelist: ["user@example.com", "*.trusted.com"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | SKILLs/skill-creator/scripts/quick_validate.py | 7 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/__init__.py | 5 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/__init__.py | 6 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/__init__.py | 7 | CODE | |
| LOW | SKILLs/pptx/ooxml/scripts/validation/__init__.py | 8 | CODE | |
| LOW | SKILLs/stock-announcements/scripts/announcements.py | 17 | CODE | |
| LOW | SKILLs/stock-analyzer/scripts/analyze.py | 11 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/__init__.py | 5 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/__init__.py | 6 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/__init__.py | 7 | CODE | |
| LOW | SKILLs/docx/ooxml/scripts/validation/__init__.py | 8 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/main/office/core/officeMcpServer.ts | 78 | async function handleRequest(message) { | CODE |
| LOW | src/main/libs/htmlPreviewServer.ts | 242 | function handleRequest(req: http.IncomingMessage, res: http.ServerResponse): void { | CODE |
| LOW | src/main/libs/openclawTokenProxy.ts | 500 | async function handleRequest(req: http.IncomingMessage, res: http.ServerResponse): Promise<void> { | CODE |
| LOW | src/main/libs/lobsterBrowserMcpServer.ts | 209 | async function handleRequest(message) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …work-context-compaction-quality-optimization-design.md | 85 | #### 不能默认降低未知模型 context window | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | SKILLs/pptx/ooxml/scripts/validation/__init__.py | 10 | __all__ = [ | CODE |
| LOW | SKILLs/docx/ooxml/scripts/validation/__init__.py | 10 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/build-openclaw-runtime.sh | 5 | # Usage: | COMMENT |