Skip to content

修复 worker 线程 OOM 拖垮整个应用的崩溃(git 输出无上限撑爆 V8 地址笼)#94

Open
siyuan-123 wants to merge 9 commits into
Haleclipse:masterfrom
siyuan-123:fix/worker-oom-stability
Open

修复 worker 线程 OOM 拖垮整个应用的崩溃(git 输出无上限撑爆 V8 地址笼)#94
siyuan-123 wants to merge 9 commits into
Haleclipse:masterfrom
siyuan-123:fix/worker-oom-stability

Conversation

@siyuan-123

@siyuan-123 siyuan-123 commented Jul 4, 2026

Copy link
Copy Markdown

问题

Windows 版长时间使用中反复出现整个应用崩溃(进程直接消失)。对三次崩溃的 minidump 与自建取证日志分析后确认为同一根因:

  • 崩溃点均为 chrome.dll 同一条指令,属于 Chromium/V8 主动 OOM 崩溃(分配失败后写空指针自杀),且崩溃时系统内存充足(物理剩余 13GB、commit 剩余 22GB),进程自身 commit 仅 1.7~3GB;
  • 真凶是 worker.js(git/diff worker 线程):执行 review-summary 等任务时,git 命令输出没有大小上限——例如 git ls-files --others 在超大目录(用户授权扫描 C 盘一类场景)会把几十万个文件路径拼成几百 MB 的单条 stdout 巨型字符串读进 JS;
  • 巨型字符串直接进入 V8 大对象空间(取证记录到 worker 堆 52MB → 2.8GB,large_object_space 破 1GB),最终撑爆同进程全部 isolate 共享的 4GB 指针压缩地址笼(pointer compression cage),进程整体崩溃。

崩溃前最后的取证采样(任务归因直接点名):

wmem#3 heapUsedMB=718 ... task=[review-summary(49s),review-summary(42s)]
WORKER-HEAP-SPACES old_space=359MB large_object_space=348MB
(10 秒后进程崩溃)

修复(三层防线)

补丁 内容 效果
patch-git-output-cap.js git 执行器 maxOutputBytes 解构加兜底默认值 32MB(覆盖 worker.jssrc-*.js 共享库副本各一处) 未显式传上限的 git 命令(含肇事的 ls-files)超限即截停,走现成的 outputLimitExceeded 错误路径;正常仓库输出仅几 MB 无感
patch-diff-limits.js 单条 diff 输出上限 A1 从 32MB 收紧到 8MB 超大 diff 走已有 diff-too-large 分支被跳过/提示,不再全量入内存
patch-worker-limits.js worker 创建处加 resourceLimits(老生代 1024MB) 失控任务触发 worker 自身优雅 OOM 退出并被 worker-manager 自动重建,应用本体不死

三个补丁均:锚点唯一校验、注入前 acorn 语法校验、幂等可重复执行,并已加入 patch-all.js

附带:取证基础设施升级(定位本问题的关键手段)

  • patch-crash-forensics.js V3:主进程内存水位快照(2.2GB/2.8GB 双水位)、全进程矩阵、截图活动追踪、自适应采样频率;
  • patch-worker-forensics.js V3:worker 线程内存自采样、V8 堆空间分布、RPC 任务归因——每条采样带 task=[任务名(运行秒数)],高水位时补最近完成任务列表,内存暴涨瞬间即可从日志锁定肇事任务。

纯观测设计(额外 message listener + postMessage 透传包装),不改变业务行为;日志按天滚动,重负载一天约 700KB,开销可忽略。

验证

  • 同款 review 重负载(多个 review-summary 并行 + 超大目录):修复前 1~10 分钟内必崩;修复后 36 分钟稳定运行,日志可见超大输出被截停(任务取消、外部缓冲 510MB 峰值 5 秒内回收),单个任务从卡死 60 秒变为数百毫秒返回;
  • 全部补丁重复执行幂等,重打包后包内标记终验通过。

Summary by Sourcery

Harden Codex Desktop against worker-thread OOM crashes, add rich crash/forensics tooling, and improve build/CI workflows and packaging behavior across platforms.

New Features:

  • Introduce crash and worker forensics instrumentation to log memory usage, heap space distribution, and task attribution for both the main process and worker threads.
  • Add tooling to analyze Windows minidumps and a dedicated launcher for Chromium logging to simplify post-crash investigation.
  • Allow API-key users to access Fast mode by relaxing auth gates around the speed selector and service tier plumbing.
  • Ensure new local conversations honor the active workspace root by wiring composer behavior to the current workspace query.
  • Add a platform-aware build-current script to dispatch to the appropriate build target for the host OS/architecture.

Bug Fixes:

  • Cap git command stdout size by default and tighten diff output limits so runaway git/diff tasks cannot allocate multi-hundred-MB strings and crash the app.
  • Enforce worker-thread V8 heap limits so misbehaving tasks cause the worker to exit instead of bringing down the entire Electron process.
  • Guard CDP full-page screenshots to avoid multi-hundred-MB image payloads that previously caused main-process memory spikes.
  • Constrain Sentry breadcrumb volume so scope files do not grow to tens of megabytes and repeatedly stress main-process memory.
  • Make ASAR extraction and repacking more robust across platforms, correctly handling percent-encoded paths and missing unpacked files to avoid crash-prone builds.
  • Fix Windows packaging behavior by keeping the upstream codex.exe to stay protocol-aligned with bundled app-server binaries.
  • Handle percent-encoded scoped package directories and case-insensitive paths when resolving unpacked files so builds work against MSIX output and Windows file system quirks.

Enhancements:

  • Improve patch-all orchestration to run per-platform, include new patch scripts, and provide clearer summaries and dry-run support.
  • Refine statsig logger and archive-delete patches to support per-platform invocation and dry-run reporting without modifying bundles.
  • Update Electron Forge packaging metadata to derive homepage/icon URLs from the repository, and skip foreign-architecture Sky binaries in Linux RPM/DEB builds.
  • Improve sync-from-upstream and build-from-upstream workflows with resilient archive extraction (unzip/7zip/tar, PowerShell fallback) and portable ZIP creation without assuming specific tools.
  • Update bump-version logic to detect upstream package.json from any generated platform’s ASAR tree, matching the new src layout.
  • Switch the default build script to use the new platform-dispatcher and allow overriding the output directory via an environment variable when out/ is locked.
  • Upgrade better-sqlite3 to a newer version for improved stability and performance.

Build:

  • Adjust ASAR packing to use the local @electron/asar CLI with explicit unpack-dir rules for native modules across macOS and Windows.
  • Add environment-sensitive Forge and build configuration (repository URLs, icon URLs, CODEX_OUT_DIR, and platform-aware resource copying) for more reliable packaging.
  • Introduce helper scripts for platform-aware builds and crash-focused launches (build-current, launch-codex-forensics.cmd).

CI:

  • Strengthen the upstream sync workflow with concurrency controls, explicit permissions, unzip dependency installation, robust version detection, and conditional release triggering only on real upstream updates.
  • Revise the manual build workflow into a build-artifacts pipeline that runs on pushes and tags, adds concurrency controls, and respects platform selection for workflow_dispatch.

Deployment:

  • Ensure releases are published as non-draft by default when upstream updates are detected and all build jobs succeed.

Documentation:

  • Refresh README CI/CD section to reflect the new automated build and daily upstream sync behavior with conditional release creation.

Chores:

  • Bump the project version and align package-lock with the new dependency set and upstream sync.
  • Clarify CLI binary replacement behavior in sync-upstream and build-from-upstream comments, including the decision to keep upstream codex.exe on Windows.

siyuan-123 and others added 9 commits July 3, 2026 17:23
崩溃取证(三次同点崩溃 chrome.dll OOM 自杀,系统内存充足)锁定根因:
git/diff worker 线程执行 review-summary 等任务时,git 命令输出无上限
(如 ls-files 枚举超大目录的全部未跟踪文件),几百 MB 巨型字符串涌入
V8 堆,撑爆多 isolate 共享的 4GB 指针压缩地址笼,进程主动 OOM 崩溃。

新增三层防线补丁(均已加入 patch-all 常驻):
- patch-git-output-cap.js:git 执行器输出兜底上限 32MB,覆盖 worker.js
  与共享库副本,超限走现成的错误处理路径,任务报错但应用不死
- patch-diff-limits.js:单条 diff 输出上限 32MB 收紧到 8MB,超大 diff
  走已有 diff-too-large 分支
- patch-worker-limits.js:worker 线程加 resourceLimits 老生代 1024MB
  优雅上限,失控时 worker 自行 OOM 退出并被自动重建

取证增强(定位真凶的关键手段,保留用于后续诊断):
- patch-crash-forensics.js 升级 V3:主进程内存水位快照、进程矩阵、
  截图活动追踪、自适应采样
- patch-worker-forensics.js 升级 V3:worker 线程内存自采样、V8 堆
  空间分布、RPC 任务归因(内存暴涨时日志直接给出正在执行的任务名)

实测:同款 review 重负载下老包 2 分钟内崩溃,新包 36 分钟稳定运行,
超大输出被截停后内存即时回收。

Co-authored-by: Cursor <cursoragent@cursor.com>
@sourcery-ai

sourcery-ai Bot commented Jul 4, 2026

Copy link
Copy Markdown

Reviewer's Guide

Adds multi-layer protections and forensics around worker/main-process memory to prevent V8 OOM in git/diff workers, hardens build/sync pipelines and packaging, and introduces several targeted behavior patches (fast mode gating, workspace roots, Sentry scope, CDP screenshots, etc.) across scripts and CI.

Sequence diagram for review-summary worker with git output cap and worker limits

sequenceDiagram
  actor User
  participant MainProcess as main-*.js
  participant WorkerManager as ensureWorker
  participant Worker as worker.js
  participant Git as git
  participant Forensics as __codexWorkerForensics

  User->>MainProcess: Trigger review-summary
  MainProcess->>WorkerManager: ensureWorker()
  WorkerManager->>Worker: new Worker(worker.js,{...,resourceLimits})
  WorkerManager-->>MainProcess: worker ready

  MainProcess->>Worker: {type:worker-request, method:review-summary}
  Worker->>Forensics: track in-flight task
  Worker->>Git: $(cmd, {maxOutputBytes:l=33554432})

  alt git output <= 32MB & diff <= 8MB
    Git-->>Worker: stdout (<=32MB)
    Worker-->>MainProcess: {type:worker-response, result}
    Forensics-->>Forensics: sample wmem#, heapUsedMB
  else git output > 32MB or diff > 8MB
    Git-->>Worker: outputLimitExceeded
    Worker-->>MainProcess: diff-too-large / outputLimitExceeded
    Forensics-->>Forensics: WORKER-HIGH wmem#, WORKER-HEAP-SPACES
  end

  alt Worker heap > 1024MB old_space
    Worker--xWorker: ERR_WORKER_OUT_OF_MEMORY (resourceLimits)
    WorkerManager->>WorkerManager: worker exit handler
    WorkerManager->>WorkerManager: ensureWorker() (auto-recreate)
    Forensics-->>Forensics: log last tasks & heap spaces
  end
Loading

File-Level Changes

Change Details Files
Make archive extraction and ASAR unpacking more robust and platform-aware, including percent-decoding, case-insensitive resolution, scoped-package handling, and safer extraction fallbacks.
  • Replace simple 7zip-only archive extraction with a multi-tool strategy using unzip/7zz/7z/bsdtar/tar and PowerShell as fallbacks, collecting error details and tolerating metadata-related non-zero exits when app.asar is present.
  • Add decodePercentNames to recursively rename percent-encoded entries (e.g. %40scope) after extraction while validating decoded names.
  • Introduce findExistingPathCaseInsensitive and use it in copyRecursive to resolve paths on case-insensitive filesystems.
  • Implement extractAsarForPatching to read ASAR headers manually, extract packed/unpacked files safely, enforce that unpacked files exist, and preserve symlinks and executable bits.
scripts/sync-upstream.js
Refactor ASAR packing and build outputs to use explicit asar CLI invocation, per-platform unpack rules, optional output-dir override, and keep upstream codex.exe on Windows.
  • Introduce asarCliPath and packAsar helpers that call @electron/asar via execFileSync instead of npx, and clear existing .unpacked dirs before repacking.
  • Adjust mac and Windows build flows to use packAsar with tailored --unpack-dir/--unpack patterns for native modules and helper binaries.
  • Add CODEX_OUT_DIR env-based override for the out directory in build-from-upstream.js and use createZip for more robust ZIP creation with multiple tool fallbacks.
  • Replace codex CLI replacement on Windows with keepUpstreamCodex, leaving upstream codex.exe untouched to keep app-server and node_repl protocols aligned.
scripts/build-from-upstream.js
scripts/prepare-src.js
scripts/build-current.js
Expand fast mode auth gate patch to support both old and new gating shapes and allow API-key users while preserving a dry-run check mode.
  • Enhance AST walking in patch-fast-mode.js to pass parent nodes and add helpers for detecting 'chatgpt' literals and existing API-key expansion.
  • Patch BinaryExpression '!=="chatgpt"' gates by replacing them with !1, and extend '==="chatgpt"' gates to '...
Strengthen patch-all orchestration to support per-platform runs, Unix/mac-only patching, and expanded patch set including forensics and limit patches.
  • Add fs dependency and compute targetPlatforms based on CLI args, mapping 'unix' to available mac-arm64/mac-x64 _asar directories and handling no-unix-source cases gracefully.
  • Expand PATCHES list with new patch scripts such as crash/worker forensics, worker limits, diff limits, git output caps, Sentry scope, CDP screenshot guard, and workspace-root patch.
  • Iterate patches per target platform, passing the platform flag through, and adjust summary to account for platform multiplicity while failing the process on any patch error.
scripts/patch-all.js
Update forge configuration and packaging behavior to derive homepage/icon URLs from repository context and to avoid bundling foreign-arch sky binaries in Linux RPM/DEB.
  • Read GITHUB_REPOSITORY and GITHUB_REF_NAME to compute repositoryUrl and remoteIconUrl, and use withRepositoryHomepage helper to inject homepage for DEB/RPM makers when available.
  • Guard Windows maker iconUrl with remoteIconUrl, falling back when not set, and ensure Linux makers use dynamic homepage URLs instead of hardcoded GitHub links.
  • Introduce shouldSkipForeignLinuxBinary logic to omit sky_linux_arm64 or sky_linux_x64 when building for the opposite arch, tracking and logging skipped counts.
  • Log copied file counts and skipped foreign-arch binaries in forge config’s prepare hook.
forge.config.js
Modernize CI workflows to add concurrency controls, safer upstream version detection, unzip installation, and conditional release triggering only when an actual upstream update exists and builds succeed.
  • In sync.yml, add contents read permissions and concurrency group, change check job to parse scripts/check-update.js JSON output to compute has_update and latest_version, and respect workflow_dispatch force flag carefully.
  • Expose latest_version via job outputs, ensure apt-get installs unzip for Linux, and tighten release job conditions to require check success, has_update true, and no failed/cancelled build jobs, while publishing non-draft releases.
  • In build.yml, rename workflow to Build Artifacts, trigger on pushes to master/main and tags, add concurrency, set contents read permissions, gate job execution based on event/platform input, and install unzip for Linux builds.
.github/workflows/sync.yml
.github/workflows/build.yml
Enhance bump-version and build scripts to work with new src/{platform}/_asar layout and to support platform-specific build commands via a dispatcher.
  • Update bump-version.js to search for upstream package.json in src/{platform}/_asar/ or src/{platform}/ across multiple platforms before falling back to legacy src/package.json, and improve error messaging.
  • Introduce build-current.js to detect current OS/arch and run the appropriate npm run build:* script (mac-arm64/mac-x64/win-x64/linux-x64/linux-arm64), with basic error handling.
scripts/bump-version.js
scripts/build-current.js
Introduce crash forensics in the main process to log memory usage, webContents metrics, screenshot activity, child-process exits, and Chromium logging to dedicated per-day files, while remaining behavior-neutral.
  • Add patch-crash-forensics.js that injects a bootstrap.js IIFE (__codexForensics) guarded by markers, with robust detection/upgrading of previous versions using acorn-based AST stripping.
  • Within the injected function, enable Chromium logging via commandLine switches, log process/app version and loaded native modules, and attach uncaughtExceptionMonitor/unhandledRejection without altering default exit semantics.
  • Implement periodic memory sampling with dynamic interval (30s/5s), configurable HIGH/CRITICAL RSS waterlines, snapshots capturing webContents/appMetrics and recent screenshot activity, and cache purging at critical levels.
  • Hook WebContents.capturePage and debugger.sendCommand(Page.captureScreenshot) to track viewport vs beyond-viewport usage without modifying arguments/results, and ensure all failures fall back to writing a fatal log to a temp file.
scripts/patch-crash-forensics.js
Add worker forensics to capture uncaught exceptions, per-worker memory usage, V8 heap space stats, and RPC task attribution through parentPort message hooks, again without changing worker behavior.
  • Implement patch-worker-forensics.js to inject a self-contained __codexWorkerForensics IIFE into worker.js, upgrading legacy versions via AST-based stripping and validating Sentry worker identity before patching.
  • Within the injected code, log worker role and argv, attach uncaughtExceptionMonitor/unhandledRejection for logging only, and derive a role string via worker_threads to distinguish main vs worker-thread contexts.
  • Add worker memory sampling (heapUsed/heapTotal/external/arrayBuffers/rss) with HIGH threshold, accelerated sampling, and V8 heap space statistics at high watermarks, plus logging of recent tasks.
  • Hook worker_threads.parentPort to track worker-request/worker-request-cancel and decorate worker-response postMessage to maintain an inflight task map and recent task ring buffer, used to annotate wmem lines with current tasks and recent completions.
scripts/patch-worker-forensics.js
Add a minidump analysis helper to introspect crash dumps for streams, modules, exception context, pseudo-stack, and memory layout to support forensic work.
  • Implement analyze-minidump.js to parse the minidump header and stream directory, collect module list and system info, and print stream sizes.
  • Decode ExceptionStream to extract crash thread id, exception code, address, parameters, and x64 CONTEXT (RIP/RSP), mapping RIP to module+offset.
  • Parse ThreadListStream to find the crashing thread’s stack memory and produce a pseudo stack trace by scanning stack for addresses falling inside module ranges.
  • Parse MemoryInfoListStream to aggregate committed private/image/mapped and reserved bytes, list large private regions, and output non-system modules with base addresses and sizes.
scripts/analyze-minidump.js
Constrain worker-thread V8 heap via resourceLimits so runaway git/diff workloads OOM within the worker instead of crashing the entire Electron process, including upgrading older limits.
  • Add patch-worker-limits.js that locates the main bundle’s worker constructor via a regex anchor and injects resourceLimits with maxOldGenerationSizeMb:1024 and maxYoungGenerationSizeMb:128, upgrading any previous 1536MB limit strings.
  • Ensure only a single ctor anchor is patched per bundle, use acorn parse to validate post-patch syntax, and support a --check mode that reports would-be patches without writing.
  • Document the rationale for lowering old-gen limit below V8 pointer compression cage size to trigger graceful worker OOM before shared cage exhaustion.
scripts/patch-worker-limits.js
Introduce a default maxOutputBytes cap for git executor stdout (32MB) across worker and shared src bundles to prevent unbounded command output from building giant strings in V8.
  • Add patch-git-output-cap.js that scans worker.js and src-.js bundles for the git executor anchor 'maxOutputBytes:l,collectOutput:u=!0' and rewrites it to set maxOutputBytes:l=33554432.
  • Count anchors to enforce uniqueness per file, skip bundles without the executor, and validate patched code via acorn before writing, with a --check dry-run mode.
  • Ensure both worker.js and src- shared library copies are patched so any consumer using the git helper without a per-call limit still benefits from the default cap.
scripts/patch-git-output-cap.js
Guard CDP Page.captureScreenshot invocations to avoid full-page PNG beyond-viewport captures and instead prefer viewport JPEG screenshots to reduce memory pressure.
  • Introduce patch-cdp-screenshot.js which defines a global guard function (globalThis.__codexCdpGuard) that rewrites captureBeyondViewport=true screenshot params to captureBeyondViewport=false, removes full-page clip, and switches PNG to JPEG quality=60.
  • Patch the main bundle’s CDP forwarding call (sendDebuggerCommand) to wrap params via the guard, using either a string anchor or a more generic regex for different minified shapes.
  • Validate injections via acorn and support --check mode; log behavior-neutral modifications that only adjust screenshot parameters but leave all other CDP commands untouched.
scripts/patch-cdp-screenshot.js
Limit Sentry scope growth by capping breadcrumbs and truncating oversized data payloads in Sentry.init calls for worker and workspace bundles.
  • Add patch-sentry-scope.js that injects maxBreadcrumbs:20 and beforeBreadcrumb hook into Sentry.init options by patching dsn:... ,environment: anchors in worker.js and workspace-root-drop-handler-*.js.
  • Implement a beforeBreadcrumb function that JSON stringifies breadcrumb.data and replaces it with a marker and byte count when serialized size exceeds 4KB, swallowing errors and returning the breadcrumb unchanged otherwise.
  • Use acorn to validate patched bundles, support --check mode, and marker-based detection to avoid re-patching already trimmed bundles.
scripts/patch-sentry-scope.js
Tighten diff-related git output limits from 32MB to 8MB for individual diffs to prevent multi-diff batches from building hundreds of MB of in-memory payloads.
  • Add patch-diff-limits.js that rewrites the worker.js diff constants anchor 'k1=510241024,A1=3210241024,j1=6410241024' to use A1=810241024 while leaving other limits unchanged.
  • Ensure exactly one anchor exists before patching, use acorn to validate resulting code, and provide --check mode that reports proposed tightening without writing.
  • Leverage existing diff-too-large error handling path so diffs exceeding the new 8MB cap are skipped or surfaced to users without loading into memory.
scripts/patch-diff-limits.js
Make the composer’s workspace root selection prefer the active workspace root query for local conversations before falling back to the projectless '~' default.
  • In patch-composer-workspace-root.js, change the workspaceRoots derivation to: a.hostId, then a.workspaceRoots or n.workspaceRoots, then for local host use active-workspace-roots query roots filtered to exclude '', finally defaulting to [''] if empty.
  • Restrict patching to composer-*.js bundles that include projectlessPrewarmReservation and workspaceRoots, and ensure only one patch site is modified per bundle.
  • Add a --check mode that reports would-be patches, and log successful local workspace fallback rewrites.
scripts/patch-composer-workspace-root.js
Adjust dev/README docs and package metadata to reflect new CI behavior, build entry point, and dependency updates.
  • Update README.md CI/CD section to describe push/tag build artifacts and daily upstream sync workflow that creates a draft release on upstream version change.
  • Change package.json version to 26.623.101652, switch 'build' script to use scripts/build-current.js instead of hardcoded mac-arm64, and bump better-sqlite3 dependency to ^12.11.1.
  • Update patch-statsig-logger.js usage comment and platform argument parsing to modern platform names (mac-arm64/mac-x64/win).
README.md
package.json
scripts/patch-statsig-logger.js
package-lock.json
Add a Windows helper script to launch Codex with Chromium logging directed to the CodexForensics directory, preferring out-fix when out is locked.
  • Introduce launch-codex-forensics.cmd that creates %LOCALAPPDATA%\CodexForensics, sets ELECTRON_ENABLE_LOGGING=file and ELECTRON_LOG_FILE, resolves Codex.exe from out-fix or out, and starts the app.
  • Emit console messages indicating the binary used and the log path so testers can verify Chromium logging is active.
scripts/launch-codex-forensics.cmd
Enhance archive delete patch script to support --check mode for route/button injection without modifying bundles.
  • In patch-archive-delete.js, add isCheck argument and propagate to patchAppMain and patchDataControls so they only log would-be injections when in check mode.
  • Add detailed [?] logs that describe which wrapper/button variables would be injected, and compute summary counts for routes and buttons.
  • Wire --check flag parsing in main(), and adjust total patched counters accordingly.
scripts/patch-archive-delete.js

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!

Fixed security issues:

  • Command injection from untrusted input passed to child_process commands (link)

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant