runs anywhere. uses anything
This report summarizes scanner evidence for Twigpine/openclaude, a TypeScript project with 33,740 GitHub stars. SynthScan examined 936,312 lines of code across 3385 source files, recording 4195 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 5.0 (Moderate 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.
Can maintainers explain intent, assumptions, and trade-offs? 3883 finding(s).
Are imports declared and package/API names verified? 142 finding(s).
Are wrappers, guards, and repeated structures necessary? 3395 finding(s).
Which changes need focused human review? 4195 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
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 4195 distinct pattern matches across 12 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 | tests/sdk/sdk-preserved-segment.test.ts | 37 | function createCompactTranscriptWithPreservedSegment( | CODE |
| LOW | tests/sdk/permissions.test.ts | 43 | function toolUseContextForPermissionMode(mode: string) { | CODE |
| LOW | tests/sdk/permissions.test.ts | 57 | function mutableToolUseContextForPermissionMode(initialMode: string) { | CODE |
| LOW | tests/sdk/helpers/query-test-doubles.ts | 91 | export function createMinimalConversation(sessionId: string): Array<Record<string, unknown>> { | CODE |
| LOW | tests/sdk/helpers/query-test-doubles.ts | 118 | export function createMultiTurnConversation( | CODE |
| LOW | scripts/provider-recommend.ts | 38 | export function getOpenAIConfigurationState( | CODE |
| LOW | scripts/system-check.test.ts | 373 | function useOpenAICompatibleProvider() { | CODE |
| LOW | scripts/system-check.test.ts | 379 | function useOpenAICompatibleProviderWithoutModel() { | CODE |
| LOW | scripts/no-raw-abort-signal-timeout.test.ts | 45 | function isAllowedDocumentationLine(line: string): boolean { | CODE |
| LOW | scripts/no-raw-abort-signal-timeout.test.ts | 82 | function findRawTimeoutSignalUsages(): Finding[] { | CODE |
| LOW | scripts/verify-clean-install.ts | 241 | function collectInstalledManifests(dir: string, out: string[] = []): string[] { | CODE |
| LOW | scripts/verify-clean-install.ts | 297 | export function parseInstalledChromeSetupLaunches( | CODE |
| LOW | scripts/verify-clean-install.ts | 330 | function getExpectedWrapperContent( | CODE |
| LOW | scripts/verify-clean-install.ts | 355 | export function getInstalledChromeSetupProblems({ | CODE |
| LOW | scripts/verify-clean-install.ts | 447 | export function checkInstalledChromeEntrypoint( | CODE |
| LOW | scripts/verify-clean-install.ts | 608 | export function getTarballPayloadProblems( | CODE |
| LOW | scripts/verify-clean-install.ts | 686 | export function resolvePreviousPublishedVersion(options: { | CODE |
| LOW | scripts/externalsValidation.ts | 52 | export function validateRuntimeDependencyContract( | CODE |
| LOW | scripts/externalsValidation.ts | 99 | export function validateInstallHygieneFields(pkg: PkgInstallHygiene): ValidationResult { | CODE |
| LOW | scripts/externalsValidation.ts | 175 | export function validateIntentionallyBundled( | CODE |
| LOW | scripts/externalsValidation.ts | 257 | export function validateOptionalRuntimeExternals( | CODE |
| LOW | scripts/openclaude-bin-heap.test.ts | 26 | function expectSuccessfulLauncherSpawn( | CODE |
| LOW⚡ | scripts/system-check.ts | 252 | function formatDuckDuckGoReliabilityDetail(providerMode: string): string { | CODE |
| LOW⚡ | scripts/system-check.ts | 256 | function vertexModelSupportsNativeWebSearch(model: string): boolean { | CODE |
| LOW⚡ | scripts/system-check.ts | 264 | function isCodexResponsesWebSearchEnabledForDoctor(): boolean { | CODE |
| LOW⚡ | scripts/system-check.ts | 272 | function buildNativeWebSearchCheck(): CheckResult { | CODE |
| LOW⚡ | scripts/system-check.ts | 509 | function appendAutoOllamaConfigDetail(result: CheckResult): CheckResult { | CODE |
| LOW⚡ | scripts/system-check.ts | 519 | function getAutoFirecrawlMissingCredentialDetail(): string | undefined { | CODE |
| LOW⚡ | scripts/system-check.ts | 527 | function appendAutoFirecrawlMissingCredentialDetail(result: CheckResult): CheckResult { | CODE |
| LOW⚡ | scripts/system-check.ts | 537 | function isWebSearchApiProviderConfiguredForDoctor(providerName: string): boolean { | CODE |
| LOW⚡ | scripts/system-check.ts | 541 | function buildCustomWebSearchCheck(providerConfigured: boolean): CheckResult { | CODE |
| LOW⚡ | scripts/system-check.ts | 610 | function formatWebSearchTimeoutSeconds(): string { | CODE |
| LOW⚡ | scripts/system-check.ts | 614 | function appendWebSearchTimeoutDetail(result: CheckResult): CheckResult { | CODE |
| LOW⚡ | scripts/system-check.ts | 622 | function appendWebSearchTimeoutDetails(results: CheckResult[]): CheckResult[] { | CODE |
| LOW | scripts/system-check.ts | 108 | function formatActiveHardCapDetail( | CODE |
| LOW | scripts/system-check.ts | 309 | function buildAutoNativeWebSearchCheck(): CheckResult | undefined { | CODE |
| LOW | scripts/system-check.ts | 343 | function getConfiguredWebSearchApiProviderNames(): string[] { | CODE |
| LOW | scripts/system-check.ts | 350 | function appendConfiguredWebSearchApiProviderDetail(result: CheckResult): CheckResult { | CODE |
| LOW | scripts/system-check.ts | 361 | function hasFirecrawlRunnableConfig(): boolean { | CODE |
| LOW | scripts/system-check.ts | 366 | function buildFirecrawlWebSearchCheck(): CheckResult { | CODE |
| LOW | scripts/system-check.ts | 450 | function buildOllamaWebSearchCheck(providerConfigured: boolean): CheckResult { | CODE |
| LOW | scripts/system-check.ts | 493 | function getAutoOllamaConfigDetail(): string | undefined { | CODE |
| LOW | scripts/system-check.ts | 738 | export function formatReachabilityFailureDetail( | CODE |
| LOW | scripts/system-check.ts | 768 | export function readNodeExecutableVersion( | CODE |
| LOW | scripts/system-check.ts | 838 | export function isCliSandboxRuntimeStubbed(bundleText: string): boolean { | CODE |
| LOW | scripts/system-check.ts | 958 | function getOpenAICompatibleRouteId(baseUrl: string): string { | CODE |
| LOW | scripts/system-check.ts | 966 | function getOpenAICompatibleCredentialContext(baseUrl: string): { | CODE |
| LOW | scripts/system-check.ts | 1292 | async function checkProviderGenerationReadiness(): Promise<CheckResult> { | CODE |
| LOW | scripts/pr-intent-scan.ts | 178 | function hasSuspiciousDownloadIndicators(url: URL): boolean { | CODE |
| LOW | scripts/pr-intent-scan.ts | 246 | function findSensitivePathFindings(line: DiffLine): Finding[] { | CODE |
| LOW⚡ | scripts/no-telemetry-plugin.ts | 33 | export async function checkGlobalInstallPermissions() { return { hasPermissions: false, npmPrefix: null }; } | CODE |
| LOW⚡ | scripts/no-telemetry-plugin.ts | 58 | export async function logPermissionContextForAnts() {} | CODE |
| LOW | scripts/no-telemetry-plugin.ts | 76 | export function getUndercoverInstructions() { return ''; } | CODE |
| LOW | scripts/no-telemetry-plugin.ts | 77 | export function shouldShowUndercoverAutoNotice() { return false; } | CODE |
| LOW | scripts/no-telemetry-plugin.ts | 117 | function escapeForResolvedPathRegex(modulePath: string): string { | CODE |
| LOW | scripts/provider-launch.ts | 88 | async function resolveOllamaDefaultModel( | CODE |
| LOW | scripts/provider-launch.ts | 96 | async function resolveAtomicChatDefaultModel(): Promise<string | null> { | CODE |
| LOW | scripts/provider-launch.ts | 145 | function hasUsableGeminiLaunchAuth(env: NodeJS.ProcessEnv): boolean { | CODE |
| LOW | scripts/provider-launch.ts | 160 | export function hasUsableOpenAILaunchCredential( | CODE |
| LOW | scripts/provider-launch.ts | 166 | export function getOpenAILaunchCredentialError( | CODE |
| 3165 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | web/scripts/verify-dist.ts | 55 | // ── legacy route continues on the canonical GitHub Releases page ───────── | COMMENT |
| MEDIUM⚡ | web/scripts/verify-dist.ts | 61 | // ── /buddy/: every hero renders with its sprite ────────────────────────── | COMMENT |
| MEDIUM⚡ | web/scripts/verify-dist.ts | 70 | // ── landing: partner and community links render ────────────────────────── | COMMENT |
| MEDIUM⚡ | web/scripts/verify-dist.ts | 77 | // ── sitemap covers the new routes ──────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 61 | // ── sessions & conversations ───────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 81 | // ── context & memory ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 96 | // ── models & providers ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 109 | // ── code review & git ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 122 | // ── tools & integrations ───────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 135 | // ── ui & customization ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/commands.ts | 149 | // ── help & diagnostics ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/providers.ts | 51 | // ── sign-in & subscription plans ───────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/providers.ts | 116 | // ── gateways ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/providers.ts | 232 | // ── direct vendor apis ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/providers.ts | 339 | // ── local inference ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/data/providers.ts | 363 | // ── cloud routes & custom endpoints ────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 59 | // ── File absent ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 69 | // ── Valid JSON object ──────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 91 | // ── Malformed / non-object JSON ────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 111 | // ── Cache invalidation ─────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 126 | // ── Security gate ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 136 | // ── All getter variants return default ─────────────────────────── | COMMENT |
| MEDIUM | scripts/no-telemetry-growthbook-stub.test.ts | 147 | // ── Gate helpers route through _getFlagValue ────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/no-telemetry-plugin.ts | 25 | // ─── Auto-updater (phones home to GCS + npm) ────────────────── | COMMENT |
| MEDIUM⚡ | scripts/no-telemetry-plugin.ts | 42 | // ─── Plugin fetch telemetry (not the marketplace itself) ─────── | COMMENT |
| MEDIUM⚡ | scripts/no-telemetry-plugin.ts | 49 | // ─── Transcript / feedback sharing ───────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/no-telemetry-plugin.ts | 55 | // ─── Internal employee logging (not needed in the external build) ───── | COMMENT |
| MEDIUM⚡ | scripts/no-telemetry-plugin.ts | 62 | // ─── Deleted Anthropic-internal modules ─────────────────────────────── | COMMENT |
| MEDIUM | scripts/build.ts | 85 | // ── Disabled: require Anthropic infrastructure or missing source ───── | COMMENT |
| MEDIUM⚡ | scripts/build.ts | 103 | // ── Disabled by default, opt-in via runtime env var ───────────────── | COMMENT |
| MEDIUM⚡ | scripts/build.ts | 106 | // ── Enabled: upstream defaults ────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | scripts/build.ts | 114 | // ── Enabled: new activations ──────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/build.ts | 134 | // ── Pre-process: replace feature() calls with boolean literals ────── | COMMENT |
| MEDIUM | scripts/build.ts | 531 | // ── SDK Bundle Build ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/build.ts | 968 | // ── Validate SDK bundle for React/Ink leakage ────────────────────────────── | COMMENT |
| MEDIUM | scripts/build.ts | 991 | // ── Validate external lists ────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/build.ts | 1003 | // ── Guard: no unexpected missing-module stubs in the shipped CLI bundle ───── | COMMENT |
| MEDIUM | src/tools/AgentTool/built-in/codeReviewerAgent.test.ts | 36 | // ── Shared env snapshot ──────────────────────────────────────── | COMMENT |
| MEDIUM | src/tools/AgentTool/built-in/codeReviewerAgent.test.ts | 117 | // ── Definition ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/tools/AgentTool/built-in/codeReviewerAgent.test.ts | 151 | // ── System prompt — non-embedded ───────────────────────────── | COMMENT |
| MEDIUM | src/tools/AgentTool/built-in/codeReviewerAgent.test.ts | 208 | // ── System prompt — embedded search ────────────────────────── | COMMENT |
| MEDIUM | src/tools/PowerShellTool/pathValidation.ts | 134 | // ─── Write/create operations ────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/tools/PowerShellTool/pathValidation.ts | 384 | // ─── Read operations ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/tools/BashTool/pathValidation.ts | 1204 | // ─────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/tools/BashTool/pathValidation.ts | 1224 | // ─────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 169 | // ── 1. Create session (POST /v1/code/sessions, no env_id) ─────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 219 | // ── 3. Build v2 transport (SSETransport + CCRClient) ──────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 261 | // ── 4. State ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 314 | // ── 5. JWT refresh scheduler ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 382 | // ── 6. Wire callbacks (extracted so transport-rebuild can re-wire) ────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 533 | // ── 8. 401 recovery (OAuth refresh + rebuild) ─────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 610 | // ── 8. History flush + drain helpers ──────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 662 | // ── 9. Teardown ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 773 | // ── 10. Handle ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/remoteBridgeCore.ts | 900 | // ─── Session API (v2 /code/sessions, no env) ───────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/initReplBridge.ts | 408 | // ── GrowthBook gate: env-less bridge ────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/initReplBridge.ts | 465 | // ── v1 path: env-based (register/poll/ack/heartbeat) ────────────────── | COMMENT |
| MEDIUM | src/bridge/bridgeMessaging.ts | 31 | // ─── Type guards ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/bridgeMessaging.ts | 124 | // ─── Ingress routing ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/bridge/bridgeMessaging.ts | 213 | // ─── Server-initiated control requests ─────────────────────────────────────── | COMMENT |
| 110 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/sdk/query-methods.test.ts | 241 | // setPermissionMode is tested via buildPermissionContext in permissions.test.ts | COMMENT |
| LOW | scripts/generate-sdk-types.ts | 41 | UUIDPlaceholder: 'string', | COMMENT |
| LOW | scripts/stubMarkerGuard.ts | 21 | return fromSrc.replace(/\.(?:[cm]?[jt]sx?)$/, '') | COMMENT |
| LOW | scripts/externals.ts | 81 | // Anthropic Foundry client — also loaded only via the runtime importer in | COMMENT |
| LOW | scripts/externals.ts | 101 | // (the `new Function` indirection in src/utils/optionalRuntimeModule.ts), so | COMMENT |
| LOW | scripts/externals.ts | 121 | ] | COMMENT |
| LOW | scripts/build.ts | 1001 | } | COMMENT |
| LOW | scripts/build.ts | 1021 | // expected — the regression class above — which is worth a human look before it | COMMENT |
| LOW | .github/workflows/install-hygiene.yml | 1 | # Daily zero-warning-install watch on the PUBLISHED package. | COMMENT |
| LOW | src/main.tsx | 1 | // These side-effects must run before all other imports: | COMMENT |
| LOW | src/main.tsx | 861 | // gh-33508: --plugin-dir is a top-level program option. The default | COMMENT |
| LOW | src/main.tsx | 981 | // | COMMENT |
| LOW | src/main.tsx | 1881 | // Callers who inject and also want those injections visible in the | COMMENT |
| LOW | src/main.tsx | 1901 | // applySafeConfigEnvironmentVariables in init() called | COMMENT |
| LOW | src/main.tsx | 1921 | // startDeferredPrefetches becomes a memoize cache-hit. | COMMENT |
| LOW | src/main.tsx | 2461 | }); | COMMENT |
| LOW | src/main.tsx | 2521 | COMMENT | |
| LOW | src/main.tsx | 2561 | advisorModel | COMMENT |
| LOW | src/main.tsx | 2641 | tools: uniqBy([...prev.mcp.tools, ...tools], 'name'), | COMMENT |
| LOW | src/QueryEngine.ts | 501 | COMMENT | |
| LOW | src/query.ts | 761 | // sites. | COMMENT |
| LOW | src/query.ts | 1001 | : undefined | COMMENT |
| LOW | src/query.ts | 1341 | // validated to be under the threshold, and tokenCountWithEstimation would use | COMMENT |
| LOW | src/query.ts | 1361 | // hasActiveReduction() (not mere enablement) means a turn where collapse | COMMENT |
| LOW | src/query.ts | 2081 | COMMENT | |
| LOW | src/query.ts | 2421 | const fallback = resolveNextFallbackProviderFromState() | COMMENT |
| LOW | src/query.ts | 2981 | messagesForQueryCount: messagesForQuery.length, | COMMENT |
| LOW | src/interactiveHelpers.tsx | 161 | COMMENT | |
| LOW | src/interactiveHelpers.tsx | 261 | COMMENT | |
| LOW | src/interactiveHelpers.tsx | 281 | if (devChannels && devChannels.length > 0) { | COMMENT |
| LOW | src/ink/dom.ts | 41 | // Used to skip empty renders during React 19's effect double-invoke in test mode | COMMENT |
| LOW | src/ink/dom.ts | 61 | // naturally cancels (pure accumulator, no target tracking). | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 561 | // parent) AND a sibling lands at the same y. Skip rendering — both would | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 661 | output.write(x, y, text, softWrap) | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 761 | // scrollAnchor: scroll so the anchored element's top is at the | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 781 | // previous max, pin to the new max. Scroll away → stop following; | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 841 | let cur = node.scrollTop ?? 0 | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 921 | } | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 1001 | COMMENT | |
| LOW | src/ink/render-node-to-output.ts | 1021 | const spaces = ' '.repeat(w) | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 1281 | // conservatively disable blit for all. | COMMENT |
| LOW | src/ink/render-node-to-output.ts | 1481 | } | COMMENT |
| LOW | src/ink/searchHighlight.ts | 41 | const rowOff = row * w | COMMENT |
| LOW | src/ink/ink.tsx | 121 | // pass in onRender can read it and App.tsx can update it from mouse | COMMENT |
| LOW | src/ink/ink.tsx | 141 | private readonly selectionListeners = new Set<() => void>(); | COMMENT |
| LOW | src/ink/ink.tsx | 161 | // INSIDE the BSU/ESU block so clear+paint is atomic. Writing ERASE_SCREEN | COMMENT |
| LOW | src/ink/ink.tsx | 321 | // Physical cursor position is unknown after the shell took over during | COMMENT |
| LOW | src/ink/ink.tsx | 481 | // before they're overwritten — the text stays copyable until the | COMMENT |
| LOW | src/ink/ink.tsx | 501 | // to scroll off, shift moves the selection endpoint so the same rows | COMMENT |
| LOW | src/ink/ink.tsx | 521 | // the highlight, and getSelectedText reads the CURRENT screen | COMMENT |
| LOW | src/ink/ink.tsx | 541 | // LogUpdate remains a pure diff engine. | COMMENT |
| LOW | src/ink/ink.tsx | 581 | // Selection/highlight overlays write via setCellStyleId which doesn't | COMMENT |
| LOW | src/ink/ink.tsx | 641 | }); | COMMENT |
| LOW | src/ink/ink.tsx | 661 | // After resize, prepend ERASE_SCREEN too. The diff only writes cells | COMMENT |
| LOW | src/ink/ink.tsx | 761 | const skipSyncMarkers = this.altScreenActive ? !SYNC_OUTPUT_SUPPORTED : rewriteMainScreen || shouldSkipMainScreenSyn | COMMENT |
| LOW | src/ink/ink.tsx | 1501 | // so we must reset terminal modes here to prevent escape sequence leakage. | COMMENT |
| LOW | src/ink/parse-keypress.ts | 21 | // Modifier is optional - when absent, defaults to 1 (no modifiers) | COMMENT |
| LOW | src/ink/parse-keypress.ts | 41 | // eslint-disable-next-line no-control-regex | COMMENT |
| LOW | src/ink/log-update.ts | 161 | // finds only the rows that scrolled IN as diffs. prev.screen is | COMMENT |
| LOW | src/ink/log-update.ts | 201 | // Additionally, the cursor-restore scroll pushes 1 more row into scrollback. | COMMENT |
| 477 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/utils/plugins/pluginLoader.ts | 1121 | * "name": "John Doe", | COMMENT |
| LOW | src/utils/plugins/marketplaceManager.ts | 1325 | * "owner": { "name": "John Doe", "email": "john@example.com" }, | COMMENT |
| LOW | src/utils/mcp/elicitationValidation.ts | 24 | example: 'user@example.com', | CODE |
| LOW | src/cli/aimlapiCommand.test.ts | 17 | 'user@example.com', | CODE |
| LOW | src/cli/aimlapiCommand.test.ts | 25 | email: 'user@example.com', | CODE |
| LOW | src/cli/aimlapiCommand.test.ts | 45 | 'user@example.com', | CODE |
| LOW | src/cli/aimlapiCommand.test.ts | 54 | email: 'user@example.com', | CODE |
| LOW | src/cli/aimlapiCommand.test.ts | 74 | 'user@example.com', | CODE |
| LOW | src/cli/aimlapiCommand.test.ts | 98 | 'user@example.com', | CODE |
| LOW | src/cli/aimlapiCommand.test.ts | 107 | expect.objectContaining({ email: 'user@example.com', code: '123456' }), | CODE |
| LOW | src/cli/aimlapiCommand.test.ts | 125 | 'user@example.com', | CODE |
| LOW | src/cli/handlers/aimlapi.test.ts | 62 | aimlapiTopup({ email: 'user@example.com', amountUsd: '25', noOpen: true }), | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 389 | const acquired = await acquireAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-a') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 397 | staleStore['user@example.com'].at = Date.now() - 149_000 | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 402 | expect(await refreshAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-a')).toBe(true) | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 406 | const peerAttempt = await acquireAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-b') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 418 | const acquired = await acquireAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-a') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 422 | await commitAimlapiSignInKeyAsync('user@example.com', 'minted-key', 'minted-id', 'owner-a') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 430 | clearAimlapiSignInKey('user@example.com', 'minted-id') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 431 | const reacquired = await acquireAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-b') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 438 | await acquireAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-a') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 443 | staleStore['user@example.com'].at = Date.now() - 151_000 | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 445 | const reclaimed = await acquireAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-b') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 452 | await commitAimlapiSignInKeyAsync('user@example.com', 'stale-owner-key', 'stale-owner-id', 'owner-a') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 455 | expect(leaseAfterCommit['user@example.com'].owner).toBe('owner-b') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 460 | await acquireAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-a') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 461 | expect(await refreshAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-b')).toBe(false) | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 462 | const stillHeld = await acquireAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-c') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 469 | await acquireAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-a') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 479 | store['user@example.com'].at = Date.now() - 90_000 | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 482 | const peerAttempt = await acquireAimlapiSignInKeyLeaseAsync('user@example.com', 'owner-b') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1354 | expect(loadAimlapiSignInKey('user@example.com')).toEqual({ | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1361 | clearAimlapiSignInKey('user@example.com', 'id_signin') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1362 | expect(loadAimlapiSignInKey('user@example.com')).toBeNull() | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1369 | saveAimlapiSignInKey('user@example.com', 'key-a', 'id-a') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1372 | saveAimlapiSignInKey('user@example.com', 'key-b', 'id-b') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1376 | expect(loadAimlapiSignInKey('user@example.com')).toEqual({ | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1389 | JSON.stringify({ email: 'user@example.com', apiKey: 'k_signin', apiKeyId: '' }), | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1391 | expect(loadAimlapiSignInKey('user@example.com')).toBeNull() | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1395 | JSON.stringify({ email: 'user@example.com', apiKey: 'k_signin' }), | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1397 | expect(loadAimlapiSignInKey('user@example.com')).toBeNull() | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1401 | saveAimlapiSignInKey('user@example.com', 'k_signin', ' ') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1402 | expect(loadAimlapiSignInKey('user@example.com')).toBeNull() | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1444 | saveAimlapiSignInKey('user@example.com', 'k_signin', 'id_signin') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1448 | clearAimlapiSignInKey('user@example.com', 'id_signin') | CODE |
| LOW⚡ | src/integrations/aimlapi/topupState.test.ts | 1449 | expect(loadAimlapiSignInKey('user@example.com')).toBeNull() | CODE |
| LOW | src/integrations/aimlapi/topupState.test.ts | 73 | email: 'user@example.com', | CODE |
| LOW | src/integrations/aimlapi/topupState.test.ts | 1426 | expect(loadAimlapiSignInKey('user@example.com')).toEqual({ | CODE |
| LOW | src/integrations/aimlapi/topupState.test.ts | 1432 | expect(loadAimlapiSignInKey('user@example.com')).toEqual({ | CODE |
| LOW⚡ | src/integrations/aimlapi/onboarding.test.ts | 451 | expect(loadAimlapiSignInKey('user@example.com')).toBeNull() | CODE |
| LOW⚡ | src/integrations/aimlapi/onboarding.test.ts | 456 | const retryLease = await acquireAimlapiSignInKeyLeaseAsync('user@example.com', 'retry-owner') | CODE |
| LOW | src/integrations/aimlapi/onboarding.test.ts | 80 | expect(await beginAimlapiEmailOnboarding('user@example.com')).toEqual({ | CODE |
| LOW | src/integrations/aimlapi/onboarding.test.ts | 83 | expect(await completeAimlapiCodeSignIn('user@example.com', '123456')).toEqual({ | CODE |
| LOW | src/integrations/aimlapi/onboarding.test.ts | 110 | const result = await completeAimlapiCodeSignIn('user@example.com', '123456') | CODE |
| LOW | src/integrations/aimlapi/onboarding.test.ts | 139 | 'user@example.com', | CODE |
| LOW | src/integrations/aimlapi/onboarding.test.ts | 204 | await expect(beginAimlapiEmailOnboarding('user@example.com')).rejects.toThrow( | CODE |
| LOW | src/integrations/aimlapi/onboarding.test.ts | 224 | 'user@example.com', | CODE |
| LOW | src/integrations/aimlapi/onboarding.test.ts | 243 | saveAimlapiSignInKey('user@example.com', 'revoked-key', 'revoked-id') | CODE |
| LOW | src/integrations/aimlapi/onboarding.test.ts | 262 | 'user@example.com', | CODE |
| LOW | src/integrations/aimlapi/onboarding.test.ts | 277 | expect(loadAimlapiSignInKey('user@example.com')).toEqual({ | CODE |
| 80 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/sdk/session-functions.test.ts | 316 | // Step 1: Create session with conversation | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 338 | // Step 2: Read messages — should find 2 | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 342 | // Step 3: Rename — should append title entry | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 348 | // Step 4: Tag — should append tag entry | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 354 | // Step 5: Fork — should create new session with remapped UUIDs | COMMENT |
| LOW | tests/sdk/session-functions.test.ts | 376 | // Step 6: Delete original — forked should still exist | COMMENT |
| LOW⚡ | tests/sdk/permissions.test.ts | 965 | // Step 1: Timeout fires first — resolves with deny | COMMENT |
| LOW⚡ | tests/sdk/permissions.test.ts | 970 | // Step 2: Host responds late with allow — must be ignored | COMMENT |
| LOW | src/tasks/LocalShellTask/LocalShellTask.tsx | 294 | // Step 1: Get the task and shell command from current state | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 110 | // Step 3: primitives short-circuit (post-toJSON the value may now be one). | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 113 | // Step 4: arrays — element key is the index as a string. | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 118 | // Step 5: cycle check on the post-toJSON value. | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 715 | // Step 1: Migrate to single file format (consolidates V1/V2 files, cleans up legacy cache) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 718 | // Step 2: Sync enabledPlugins from settings.json to installed_plugins.json | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 726 | // Step 3: Initialize in-memory session state | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1131 | // Step 2: Start with existing data (or start empty if no file exists) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1140 | // Step 3: Update V2 scopes based on settings.json (settings is source of truth) | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1096 | // Step 1: Build a map of pluginId -> scope from all settings.json files | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1260 | // Step 4: Save to single file (V2 format) | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1452 | // Step 1: Load or create the plugin manifest | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1457 | // Step 2: Create the base plugin object | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1468 | // Step 3: Auto-detect optional directories in parallel | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1686 | // Step 4: Process additional agent paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1708 | // Step 5: Process additional skill paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1730 | // Step 6: Process additional output style paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1752 | // Step 7: Load hooks configuration | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1934 | // Step 8: Load plugin settings | COMMENT |
| LOW | src/utils/permissions/permissionSetup.ts | 1053 | // We need to check if base tools were explicitly provided (not just empty default) | COMMENT |
| LOW | src/components/MarkdownTable.tsx | 107 | // Step 1: Get minimum (longest word) and ideal (full content) widths | COMMENT |
| LOW⚡ | src/components/MarkdownTable.tsx | 123 | // Step 2: Calculate available space | COMMENT |
| LOW⚡ | src/components/MarkdownTable.tsx | 130 | // Step 3: Calculate column widths that fit available space | COMMENT |
| LOW | src/components/MarkdownTable.tsx | 158 | // Step 4: Calculate max row lines to determine if vertical format is needed | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 353 | // Step 1: Transform lines to line objects with type information | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 356 | // Step 2: Group adjacent add/remove lines for word-level diffing | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 359 | // Step 3: Number the diff lines | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 368 | // Step 4: Render formatting | COMMENT |
| LOW | src/entrypoints/sdk/v2.ts | 703 | // Step 1: Index ALL non-sidechain entries by UUID (user, assistant, system, etc.) | COMMENT |
| LOW | src/entrypoints/sdk/v2.ts | 759 | // Step 2: Only user/assistant entries can be conversation leaves | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 245 | // Step 1: Read entries — compact-aware for large files | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 266 | // Step 2: Index ALL non-sidechain entries by UUID (user, assistant, system, etc.) | COMMENT |
| LOW⚡ | src/entrypoints/sdk/query.ts | 281 | // Step 3: Apply preserved segment relinks if segment exists | COMMENT |
| LOW⚡ | src/entrypoints/sdk/query.ts | 287 | // Step 4: Prune pre-boundary entries (keep only preserved + post-boundary) | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 327 | // Step 5: Select leaf — either upToUuid target, or latest USER/ASSISTANT entry | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 361 | // Step 5: Build conversation chain and strip internal fields | COMMENT |
| LOW⚡ | src/services/compact/sessionMemoryCompact.ts | 242 | // Step 1: Handle tool_use/tool_result pairs | COMMENT |
| LOW | src/services/compact/sessionMemoryCompact.ts | 288 | // Step 2: Handle thinking blocks that share message.id with kept assistant messages | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/sdk/session-functions.test.ts | 316 | // Step 1: Create session with conversation | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 338 | // Step 2: Read messages — should find 2 | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 342 | // Step 3: Rename — should append title entry | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 348 | // Step 4: Tag — should append tag entry | COMMENT |
| LOW⚡ | tests/sdk/session-functions.test.ts | 354 | // Step 5: Fork — should create new session with remapped UUIDs | COMMENT |
| LOW | tests/sdk/session-functions.test.ts | 376 | // Step 6: Delete original — forked should still exist | COMMENT |
| LOW⚡ | tests/sdk/permissions.test.ts | 965 | // Step 1: Timeout fires first — resolves with deny | COMMENT |
| LOW⚡ | tests/sdk/permissions.test.ts | 970 | // Step 2: Host responds late with allow — must be ignored | COMMENT |
| LOW | src/tasks/LocalShellTask/LocalShellTask.tsx | 294 | // Step 1: Get the task and shell command from current state | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 110 | // Step 3: primitives short-circuit (post-toJSON the value may now be one). | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 113 | // Step 4: arrays — element key is the index as a string. | COMMENT |
| LOW⚡ | src/utils/stableStringify.ts | 118 | // Step 5: cycle check on the post-toJSON value. | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 715 | // Step 1: Migrate to single file format (consolidates V1/V2 files, cleans up legacy cache) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 718 | // Step 2: Sync enabledPlugins from settings.json to installed_plugins.json | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 726 | // Step 3: Initialize in-memory session state | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1131 | // Step 2: Start with existing data (or start empty if no file exists) | COMMENT |
| LOW⚡ | src/utils/plugins/installedPluginsManager.ts | 1140 | // Step 3: Update V2 scopes based on settings.json (settings is source of truth) | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1096 | // Step 1: Build a map of pluginId -> scope from all settings.json files | COMMENT |
| LOW | src/utils/plugins/installedPluginsManager.ts | 1260 | // Step 4: Save to single file (V2 format) | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1452 | // Step 1: Load or create the plugin manifest | COMMENT |
| LOW⚡ | src/utils/plugins/pluginLoader.ts | 1457 | // Step 2: Create the base plugin object | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1468 | // Step 3: Auto-detect optional directories in parallel | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1686 | // Step 4: Process additional agent paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1708 | // Step 5: Process additional skill paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1730 | // Step 6: Process additional output style paths from manifest | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1752 | // Step 7: Load hooks configuration | COMMENT |
| LOW | src/utils/plugins/pluginLoader.ts | 1934 | // Step 8: Load plugin settings | COMMENT |
| LOW | src/components/MarkdownTable.tsx | 107 | // Step 1: Get minimum (longest word) and ideal (full content) widths | COMMENT |
| LOW⚡ | src/components/MarkdownTable.tsx | 123 | // Step 2: Calculate available space | COMMENT |
| LOW⚡ | src/components/MarkdownTable.tsx | 130 | // Step 3: Calculate column widths that fit available space | COMMENT |
| LOW | src/components/MarkdownTable.tsx | 158 | // Step 4: Calculate max row lines to determine if vertical format is needed | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 353 | // Step 1: Transform lines to line objects with type information | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 356 | // Step 2: Group adjacent add/remove lines for word-level diffing | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 359 | // Step 3: Number the diff lines | COMMENT |
| LOW⚡ | src/components/StructuredDiff/Fallback.tsx | 368 | // Step 4: Render formatting | COMMENT |
| LOW | src/entrypoints/sdk/v2.ts | 703 | // Step 1: Index ALL non-sidechain entries by UUID (user, assistant, system, etc.) | COMMENT |
| LOW | src/entrypoints/sdk/v2.ts | 759 | // Step 2: Only user/assistant entries can be conversation leaves | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 245 | // Step 1: Read entries — compact-aware for large files | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 266 | // Step 2: Index ALL non-sidechain entries by UUID (user, assistant, system, etc.) | COMMENT |
| LOW⚡ | src/entrypoints/sdk/query.ts | 281 | // Step 3: Apply preserved segment relinks if segment exists | COMMENT |
| LOW⚡ | src/entrypoints/sdk/query.ts | 287 | // Step 4: Prune pre-boundary entries (keep only preserved + post-boundary) | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 327 | // Step 5: Select leaf — either upToUuid target, or latest USER/ASSISTANT entry | COMMENT |
| LOW | src/entrypoints/sdk/query.ts | 361 | // Step 5: Build conversation chain and strip internal fields | COMMENT |
| LOW⚡ | src/services/compact/sessionMemoryCompact.ts | 242 | // Step 1: Handle tool_use/tool_result pairs | COMMENT |
| LOW | src/services/compact/sessionMemoryCompact.ts | 288 | // Step 2: Handle thinking blocks that share message.id with kept assistant messages | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/main.tsx | 3198 | // of a remote assistant session. The agentic loop runs remotely; this | COMMENT |
| MEDIUM | src/query.ts | 557 | // budget for the whole agentic turn; `remaining` is computed per iteration | COMMENT |
| MEDIUM | src/tools/WebSearchTool/README_SEARCH_PROVIDERS.md | 62 | # Tavily (fast, RAG-ready) | COMMENT |
| MEDIUM | src/tools/WebSearchTool/providers/custom.ts | 164 | // Security guardrails | COMMENT |
| MEDIUM | src/tools/AgentTool/loadAgentsDir.ts | 122 | maxTurns?: number // Maximum number of agentic turns before stopping | CODE |
| MEDIUM | src/utils/betas.ts | 451 | // excluded by getAllModelBetas() since non-agentic Haiku calls don't need them. | COMMENT |
| MEDIUM | src/utils/statusNoticeDefinitions.tsx | 289 | // guardrails remain: | COMMENT |
| MEDIUM | src/utils/statusNoticeDefinitions.tsx | 292 | // content-specific ask rules, and safety-check guardrails (e.g. .git/, | COMMENT |
| MEDIUM | src/utils/attachments.ts | 1123 | // During proactive agentic loops, task-notification commands would otherwise | COMMENT |
| MEDIUM | src/utils/attachments.ts | 1357 | // long agentic sessions, where this accumulated 60-105× per session. | COMMENT |
| MEDIUM | src/services/api/geminiVertexClient.ts | 661 | // this, any agentic prompt (which always declares tools) returns | COMMENT |
| MEDIUM | src/services/api/claude.ts | 751 | // (query.ts decrements across the agentic loop). | COMMENT |
| MEDIUM | src/services/api/claude.ts | 1240 | // non-agentic queries (compact, side_question, extract_memories, etc.) | COMMENT |
| MEDIUM | src/services/api/claude.ts | 1620 | // per-call so non-agentic queries keep their own stable header set. | COMMENT |
| MEDIUM | src/services/api/claude.ts | 1655 | // Only latch from agentic queries so a classifier call doesn't flip the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/verify-clean-install.test.ts | 307 | REM Generated by Claude Code - do not edit manually | CODE |
| HIGH | scripts/verify-clean-install.test.ts | 312 | # Generated by Claude Code - do not edit manually | COMMENT |
| HIGH | scripts/verify-clean-install.test.ts | 383 | # Generated by Claude Code - do not edit manually | COMMENT |
| HIGH | scripts/verify-clean-install.test.ts | 446 | REM Generated by Claude Code - do not edit manually | CODE |
| HIGH | src/utils/claudeInChrome/launch.ts | 130 | REM Generated by Claude Code - do not edit manually | CODE |
| HIGH | src/utils/claudeInChrome/launch.ts | 135 | # Generated by Claude Code - do not edit manually | COMMENT |
| HIGH | src/utils/claudeInChrome/launch.test.ts | 162 | REM Generated by Claude Code - do not edit manually | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/assistant/sessionHistory.ts | 94 | // More robust extraction - handle various URL formats | COMMENT |
| MEDIUM | src/tools/PowerShellTool/commandSemantics.ts | 216 | // robocopy.exe: Windows native robust file copy | COMMENT |
| MEDIUM | src/utils/swarm/backends/PaneBackendExecutor.ts | 341 | // A more robust check would query the backend for pane existence | COMMENT |
| MEDIUM | src/utils/powershell/parser.ts | 1068 | // and extracting .Redirections) is both simpler and more robust: it catches | COMMENT |
| MEDIUM | src/screens/replFallbackModelProp.test.ts | 111 | // The robust fix: walk the braces explicitly to find the matching | COMMENT |
| MEDIUM | src/hooks/useVoiceIntegration.tsx | 176 | // the gap is seamless once transcript text arrives. | COMMENT |
| MEDIUM | src/services/api/geminiVertexClient.ts | 219 | // everything else is dropped. This is robust against future JSON Schema | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | src/tools/AgentTool/UI.tsx | 727 | const toolResultBlock = lastToolResult.data.message.message.content.find(c => c.type === 'tool_result'); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/tools/TodoWriteTool/prompt.ts | 100 | print("Hello World") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/utils/hooks.ts | 1389 | // TODO: Add tests for EPIPE handling. | COMMENT |