App for Codex / Claude Code / Pi / OpenCode / Kimi Code / Grok Build, vibe coding anytime, anywhere
This report presents the forensic synthetic code analysis of tiann/hapi, a TypeScript project with 4,897 GitHub stars. SynthScan v2.0 examined 467,730 lines of code across 2344 source files, recording 1323 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 4.1 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1323 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web/e2e-fixtures/file-md-preview-fixture.tsx | 33 | function FileMarkdownPreviewFixture() { | CODE |
| LOW | web/src/test/setup.ts | 9 | function installMemoryLocalStorage(): void { | CODE |
| LOW | web/src/chat/reconcile.ts | 165 | function areAgentReasoningBlocksEqual(left: AgentReasoningBlock, right: AgentReasoningBlock): boolean { | CODE |
| LOW | web/src/chat/reconcile.ts | 182 | function areGeneratedImageBlocksEqual(left: GeneratedImageBlock, right: GeneratedImageBlock): boolean { | CODE |
| LOW | web/src/chat/reconcile.ts | 193 | function areCodexReviewBlocksEqual(left: CodexReviewBlock, right: CodexReviewBlock): boolean { | CODE |
| LOW | web/src/chat/modelConfig.ts | 25 | function parseCursorWireContextWindow(model: string): number | null { | CODE |
| LOW | web/src/chat/reducerTools.ts | 182 | export function collectToolIdsFromMessages(messages: NormalizedMessage[]): Set<string> { | CODE |
| LOW | web/src/chat/reducerTools.ts | 201 | export function extractTitleFromChangeTitleInput(input: unknown): string | null { | CODE |
| LOW | web/src/chat/reducerTimeline.ts | 59 | function mapAgentRunStatusToToolState(status: string | null): ToolCallBlock['tool']['state'] { | CODE |
| LOW | web/src/chat/reducerTimeline.ts | 77 | function isNonTerminalAgentRunState(state: ToolCallBlock['tool']['state']): boolean { | CODE |
| LOW | web/src/chat/reducerTimeline.ts | 81 | function shouldIgnoreAgentRunNonTerminalUpdateAfterTerminal( | CODE |
| LOW | web/src/chat/reducerTimeline.ts | 93 | function isCloseAgentCleanupUpdate(event: Record<string, unknown>): boolean { | CODE |
| LOW | web/src/chat/reducerTimeline.ts | 105 | function shouldIgnoreAgentRunCloseCleanupAfterTerminal( | CODE |
| LOW | web/src/chat/outline.ts | 53 | export function getConversationMessageAnchorId(messageId: string): string { | CODE |
| LOW | web/src/chat/presentation.ts | 74 | export function formatMessageTimestampTitle(date: Date): string { | CODE |
| LOW | web/src/chat/normalizeAgent.ts | 7 | function normalizeToolResultPermissions(value: unknown): ToolResultPermission | undefined { | CODE |
| LOW | web/src/chat/normalizeAgent.ts | 219 | function normalizeCodexReviewFinding(value: unknown): CodexReviewFinding | null { | CODE |
| LOW | web/src/chat/reducer.ts | 28 | function isUsageVisibleInParentContext(msg: NormalizedMessage): boolean { | CODE |
| LOW | web/src/chat/reducer.ts | 78 | function isRedundantGoalStatusMessage(event: AgentEvent): boolean { | CODE |
| LOW | web/src/chat/normalize.ts | 8 | export function normalizeDecryptedMessage(message: DecryptedMessage): NormalizedMessage | null { | CODE |
| LOW | web/src/chat/sessionStatus.ts | 76 | function backgroundTaskCompletions(messages: readonly NormalizedMessage[]): { | CODE |
| LOW | web/src/chat/inlineMediaSource.ts | 11 | export function inlineMediaSourceFromWire(value: unknown): InlineMediaSource | undefined { | CODE |
| LOW | web/src/chat/inlineMediaSource.ts | 31 | export function areInlineMediaSourcesEqual(left?: InlineMediaSource, right?: InlineMediaSource): boolean { | CODE |
| LOW | web/src/chat/toolGroups.ts | 225 | export function isEligibleForToolGrouping(block: ToolCallBlock): boolean { | CODE |
| LOW | web/src/utils/terminalSupport.ts | 7 | export function isRemoteTerminalSupported(metadata: SessionMetadataSummary | null | undefined): boolean { | CODE |
| LOW | web/src/realtime/RealtimeSession.ts | 62 | export function resetRealtimeSessionState() { | CODE |
| LOW | web/src/realtime/RealtimeSession.ts | 82 | export function getCurrentRealtimeSessionId(): string | null { | CODE |
| LOW | web/src/realtime/gemini/toolAdapter.ts | 68 | export async function handleGeminiFunctionCalls( | CODE |
| LOW | web/src/realtime/hooks/voiceContextPlan.ts | 73 | export function buildSessionVoiceContextPlan( | CODE |
| LOW | web/src/realtime/hooks/contextFormatters.ts | 149 | function extractSpeakableFromContent(content: unknown): string | null { | CODE |
| LOW | web/src/realtime/hooks/contextFormatters.ts | 182 | function isNonSpeakableAgentPayload(content: unknown): boolean { | CODE |
| LOW | web/src/realtime/hooks/contextFormatters.ts | 198 | export function extractLastAssistantSpeakable(messages: DecryptedMessage[]): string | null { | CODE |
| LOW | web/src/components/PwaUpdateBanner.tsx | 59 | export function PwaUpdateBannerWithStatusOffset({ | CODE |
| LOW | web/src/components/SessionRowSummary.tsx | 65 | function formatCodexImportedRelativeTime( | CODE |
| LOW | web/src/components/SessionExportDialog.tsx | 39 | function parseSessionExportTooLarge(error: unknown): HapiSessionExportTooLarge | null { | CODE |
| LOW | web/src/components/SessionList.tsx | 81 | function isPinnedInProgressSession(session: SessionSummary): boolean { | CODE |
| LOW | web/src/components/SessionList.tsx | 197 | export function deduplicateSessionsByAgentId(sessions: SessionSummary[], selectedSessionId?: string | null): SessionSumm | CODE |
| LOW | web/src/components/SessionList.tsx | 233 | export function isSidebarEmptySessionStub(session: SessionSummary): boolean { | CODE |
| LOW | web/src/components/SessionList.tsx | 242 | export function shouldShowSessionInSidebar(session: SessionSummary, selectedSessionId?: string | null): boolean { | CODE |
| LOW | web/src/components/SessionList.tsx | 275 | export function getNextSessionVisibleCount(current: number, step: number, total: number): number { | CODE |
| LOW | web/src/components/SessionList.tsx | 279 | export function getPreviousSessionVisibleCount(current: number, step: number): number { | CODE |
| LOW | web/src/components/SessionList.tsx | 341 | export function expandSelectedSessionCollapseOverrides( | CODE |
| LOW | web/src/components/SessionList.tsx | 1160 | export function getPullRefreshIndicatorRotation(state: PullToRefreshState): number { | CODE |
| LOW | web/src/components/SessionHeader.tsx | 33 | export function resolveSessionHeaderMachineLabel( | CODE |
| LOW | web/src/components/SessionAttentionIndicator.tsx | 21 | export function SessionAttentionIndicator(props: { | CODE |
| LOW | web/src/components/MarkdownRenderer.tsx | 61 | function StandaloneMarkdownContent(props: MarkdownRendererProps) { | CODE |
| LOW | web/src/components/LazyRainbowText.tsx | 96 | function processChildrenForRainbow(children: React.ReactNode): React.ReactNode { | CODE |
| LOW | web/src/components/SessionChat.tsx | 133 | export async function applyModelChangeWithReasoningRollback(args: { | CODE |
| LOW | web/src/components/SessionChat.tsx | 167 | export function shouldAutoClearPendingSchedule(pending: PendingSchedule | null): boolean { | CODE |
| LOW | web/src/components/SessionChat.tsx | 179 | export function isScratchlistToggleHotkey(e: { | CODE |
| LOW | web/src/components/SessionChat.tsx | 214 | export function isScratchlistHotkeyBlockedTarget(target: EventTarget | null): boolean { | CODE |
| LOW | web/src/components/SessionChat.tsx | 316 | export function mergeStagedAttachmentsInOrder( | CODE |
| LOW | web/src/components/SessionChat.tsx | 324 | function isUninvokedScheduledMessage(message: DecryptedMessage): boolean { | CODE |
| LOW | web/src/components/SessionChat.tsx | 464 | export function resolveLatestCompletedBoundaryIdForView( | CODE |
| LOW | web/src/components/Fue.tsx | 51 | export function computeFueCalloutPlacement(params: { | CODE |
| LOW | web/src/components/WorkspaceBrowser.tsx | 93 | function normalizePathForComparison(path: string): string { | CODE |
| LOW | web/src/components/MachineFilterBar.tsx | 173 | export function getMachineFilterMenuClampStyle(anchor: { right: number; bottom: number }): CSSProperties { | CODE |
| LOW | web/src/components/CursorMigrationBanner.tsx | 28 | export function isCursorMigrationInProgress(metadata: Metadata | undefined | null): boolean { | CODE |
| LOW | web/src/components/CursorMigrationBanner.tsx | 42 | export function isCursorMigrationAmbiguous(metadata: Metadata | undefined | null): boolean { | CODE |
| LOW | web/src/components/AssistantChat/claudeEffortOptions.ts | 8 | function normalizeClaudeComposerEffort(effort?: string | null): string | null { | CODE |
| 826 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | cli/src/codex/runCodex.test.ts | 258 | const registration = harness.session.rpcHandlerManager.registerHandler.mock.calls.find( | CODE |
| CRITICAL | cli/src/codex/runCodex.test.ts | 274 | const registration = harness.session.rpcHandlerManager.registerHandler.mock.calls.find( | CODE |
| CRITICAL | cli/src/agent/__tests__/runAgentPty.test.ts | 638 | expect(harness.m.resize.mock.calls.at(-1)).toEqual([120, 40]) | CODE |
| CRITICAL | cli/src/agent/__tests__/runAgentPty.test.ts | 841 | const crWrites = harness.m.write.mock.calls.filter((c) => c[0] === '\r').length | CODE |
| CRITICAL | cli/src/agent/__tests__/runAgentPty.test.ts | 874 | const textWrites = harness.m.write.mock.calls.filter((c) => c[0] === 'hi').length | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 281 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as ( | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 336 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as ( | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 384 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: { | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 410 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: any, localId: string) => | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 411 | const cancelQueued = harness.session.onCancelQueuedMessage.mock.calls.at(-1)![0] as (localId: string) => boolean | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 431 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: ReturnType<typeof userMes | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 456 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: ReturnType<typeof userMes | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 509 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: ReturnType<typeof userMes | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 567 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: ReturnType<typeof userMes | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 612 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: ReturnType<typeof userMes | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 660 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: { | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 733 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: ReturnType<typeof userMes | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 773 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: ReturnType<typeof userMes | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 832 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: ReturnType<typeof userMes | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 885 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: { | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 941 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: { | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 1111 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as ( | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 1142 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as ( | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 1164 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as ( | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 1195 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as ( | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 1230 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as ( | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 1241 | const onCancelQueuedMessage = harness.session.onCancelQueuedMessage.mock.calls.at(-1)![0] as (localId: string) = | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 1300 | const onUserMessage = harness.session.onUserMessage.mock.calls.at(-1)![0] as (message: { | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 1755 | const onCancelQueuedMessage = harness.session.onCancelQueuedMessage.mock.calls.at(-1)![0] as (localId: string) = | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 1803 | const metadataUpdater = harness.session.updateMetadata.mock.calls.at(-1)![0] as (meta: Record<string, unknown>) | CODE |
| CRITICAL | cli/src/pi/runPi.test.ts | 1896 | const onCancelQueuedMessage = harness.session.onCancelQueuedMessage.mock.calls.at(-1)![0] as (localId: string) = | CODE |
| CRITICAL | cli/src/opencode/runOpencode.test.ts | 697 | const messages = harness.session.sendAgentMessage.mock.calls.map((call) => (call[0] as { message: string }).mess | CODE |
| CRITICAL | cli/src/opencode/runOpencode.test.ts | 733 | const messages = harness.session.sendAgentMessage.mock.calls.map((call) => (call[0] as { message: string }).mess | CODE |
| CRITICAL | …/main/kotlin/app/hapi/protocol/window/WindowMessage.kt | 143 | app.hapi.protocol.wire.HapiJson.encodeToJsonElement( | CODE |
| CRITICAL | …pp/hapi/companion/feature/newsession/NewSessionForm.kt | 278 | copilotAgentMode = app.hapi.protocol.catalog.CopilotAgentMode.normalize(base.copilotAgentMode).wireId, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web/src/router.tsx | 381 | // covers the inactive-session resume race: useSendMessage can resolve | COMMENT |
| LOW | web/src/chat/normalizeAgent.ts | 541 | COMMENT | |
| LOW | web/src/components/SessionChat.tsx | 1621 | // Route through the scratchlist-aware wrapper. When scratchlistMode | COMMENT |
| LOW | web/src/components/CodeBlock.tsx | 61 | const scrollHeight = props.maxHeight ?? DEFAULT_SCROLL_HEIGHT | COMMENT |
| LOW | web/src/components/assistant-ui/markdown-text.tsx | 41 | // remarkNonHttpsAutolink must run BEFORE remarkStripCjkAutolink so that the | COMMENT |
| LOW | web/src/components/assistant-ui/markdown-text.tsx | 241 | COMMENT | |
| LOW | web/src/components/assistant-ui/markdown-a.test.tsx | 421 | expect(document.querySelector('.aui-md-a-inert')).toBeNull() | COMMENT |
| LOW | web/src/hooks/useSSE.ts | 81 | const HEARTBEAT_STALE_MS = 90_000 | COMMENT |
| LOW | web/src/hooks/mutations/useSendMessage.ts | 241 | options?.onSuccess?.(input.sessionId) | COMMENT |
| LOW | web/src/lib/use-hub-scratchlist.ts | 221 | setMigrationStatus('idle') | COMMENT |
| LOW | web/src/lib/use-hub-scratchlist.ts | 261 | migrationAttemptedRef.current = true | COMMENT |
| LOW | web/src/lib/use-hub-scratchlist.ts | 521 | }) | COMMENT |
| LOW | shared/src/schemas.ts | 401 | permissionMode: PermissionModeSchema.optional(), | COMMENT |
| LOW | cli/src/cursor/cursorAcpRemoteLauncher.ts | 541 | return { steered: false, error: 'Failed to soft-steer into active turn' }; | COMMENT |
| LOW | cli/src/runner/runner.integration.test.ts | 101 | beforeEach(async () => { | COMMENT |
| LOW | cli/src/runner/runner.integration.test.ts | 141 | // exhaust the hook budget before the marker sweep runs. Bound it: if the | COMMENT |
| LOW | cli/src/runner/runner.integration.test.ts | 601 | // TODO: Test npm uninstall scenario - runner should gracefully handle when hapi is uninstalled | COMMENT |
| LOW | cli/src/runner/run.ts | 201 | // writing its own state. `/stop` resolved the parent's shutdown, | COMMENT |
| LOW | cli/src/runner/run.ts | 461 | // (orphaned / ghost-session case). | COMMENT |
| LOW | cli/src/runner/run.ts | 1081 | onHappySessionWebhook | COMMENT |
| LOW | cli/src/runner/run.ts | 1101 | // of starting the runner. `getCliArgs()` strips runtime + entrypoint | COMMENT |
| LOW | cli/src/runner/run.ts | 1321 | // cleared the heartbeat interval and process.exit(0)'d unconditionally, | COMMENT |
| LOW | cli/src/claude/claudeRemoteLauncher.ts | 341 | this.abortFuture = new Future<void>(); | COMMENT |
| LOW | cli/src/claude/claudeRemoteLauncher.ts | 361 | // following onReady(). If claudeRemote() throws while a | COMMENT |
| LOW | cli/src/claude/claudeRemoteLauncher.ts | 401 | // turn. Without this, scheduleProcessing()'s setTimeout(fn,0) fires | COMMENT |
| LOW | cli/src/claude/claudeRemoteLauncher.ts | 441 | if ((modeHash && msg.hash !== modeHash) || msg.isolate) { | COMMENT |
| LOW | cli/src/claude/claudeRemoteLauncher.ts | 541 | } | COMMENT |
| LOW | cli/src/claude/claudeRemoteLauncher.ts | 561 | // that case would clear the streak every other attempt | COMMENT |
| LOW | …/src/claude/claudeRemoteLauncher.launchFailure.test.ts | 321 | // call 2 = reaches onReady, then throws -> streak resets to 0 (NOT | COMMENT |
| LOW | …/src/claude/claudeRemoteLauncher.launchFailure.test.ts | 381 | const { claudeRemoteLauncher } = await import('./claudeRemoteLauncher'); | COMMENT |
| LOW | cli/src/claude/utils/sdkToLogConverter.ts | 301 | COMMENT | |
| LOW | cli/src/claude/utils/sdkToLogConverter.ts | 361 | // Best-effort 1M-vs-200k seed for turn 1, before any authoritative | COMMENT |
| LOW | cli/src/claude/utils/sessionHookForwarder.ts | 301 | COMMENT | |
| LOW | cli/src/claude/utils/sessionHookForwarder.ts | 321 | // ({ decision, reason, permissionOverrides }). | COMMENT |
| LOW | cli/src/codex/utils/permissionHandler.ts | 121 | } | COMMENT |
| LOW | cli/src/agent/bracketedPaste.ts | 1 | // Bracketed-paste (DECSET 2004) framing for PTY input. | COMMENT |
| LOW | cli/src/agent/runnerLifecycle.ts | 21 | cleanupConfirmed: (options?: { timeoutMs?: number }) => Promise<void> | COMMENT |
| LOW | cli/src/agent/backends/acp/AcpMessageHandler.test.ts | 1941 | // Each fixture was captured from a live Gemini CLI session via ACP stdio. | COMMENT |
| LOW | cli/src/agent/backends/acp/AcpMessageHandler.ts | 601 | COMMENT | |
| LOW | cli/src/pi/runPi.test.ts | 1321 | type: 'compact', customInstructions: 'focus on the API design', | COMMENT |
| LOW | cli/src/pi/runPi.ts | 401 | // LocalIds whose owner pressed Steer while image preparation was still in | COMMENT |
| LOW | cli/src/pi/runPi.ts | 541 | if (dequeued.command.type === 'compact') { | COMMENT |
| LOW | cli/src/pi/runPi.ts | 1001 | } | COMMENT |
| LOW | cli/src/agy/utils/agyTranscriptTypes.ts | 21 | // Raw agy tool arguments. Values are usually strings (CommandLine, | COMMENT |
| LOW | cli/src/agy/headless/agyHeadlessDriver.ts | 521 | // can parse buffered records. | COMMENT |
| LOW | cli/src/agy/headless/agyHeadlessDriver.ts | 701 | // established by that record. | COMMENT |
| LOW | cli/src/agy/headless/agyHeadlessDriver.ts | 821 | // already removed it from the queue and the hub delivery stays | COMMENT |
| LOW | cli/src/modules/common/piModels.ts | 141 | // The probe child has no further use once the response (or a | COMMENT |
| LOW | cli/src/opencode/loop.ts | 61 | } | COMMENT |
| LOW | cli/src/opencode/opencodeRemoteLauncher.test.ts | 21 | // Lets a test take full manual control of when a given prompt() call | COMMENT |
| LOW | cli/src/opencode/opencodeRemoteLauncher.test.ts | 661 | // handlers. What actually changed with the fix — runOpencode.ts no | COMMENT |
| LOW | cli/src/opencode/opencodeRemoteLauncher.test.ts | 781 | // is awaited with no way to interrupt it, so Stop/switch-to-local had | COMMENT |
| LOW | cli/src/opencode/opencodeRemoteLauncher.test.ts | 1041 | // UI's onExit/onSwitchToLocal callbacks (wired up by | COMMENT |
| LOW | cli/src/opencode/opencodeRemoteLauncher.test.ts | 1201 | // loop gets here, a true result unconditionally means this compact | COMMENT |
| LOW | cli/src/opencode/opencodeRemoteLauncher.test.ts | 1261 | COMMENT | |
| LOW | cli/src/opencode/opencodeRemoteLauncher.test.ts | 1281 | // triggerImpl only ever settles when the test explicitly resolves | COMMENT |
| LOW | cli/src/opencode/opencodeRemoteLauncher.test.ts | 1461 | // runCompactOperation()'s isCancelled()), it does not stop | COMMENT |
| LOW | cli/src/opencode/runOpencode.test.ts | 361 | } | COMMENT |
| LOW | cli/src/opencode/runOpencode.test.ts | 641 | // Reproduces a hostile-review finding: compactSupported alone | COMMENT |
| LOW | cli/src/opencode/runOpencode.test.ts | 701 | expect(messageQueue.queue).toEqual([]); | COMMENT |
| 168 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | web/src/chat/tracer.ts | 91 | // robust even when the SDK never emits a prompt-holding sidechain root | COMMENT |
| MEDIUM | cli/src/modules/common/agyModels.ts | 144 | // Build the env for the one-shot `agy models` probe. Auth must be as robust as | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 126 | #expect(harness.interactor.composerText == "note text") | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 135 | #expect(harness.interactor.composerText == "draft\nnote") | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 144 | #expect(harness.interactor.composerText == "draft") | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 159 | #expect(harness.scratchlist.createCalls.count == 1) | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 160 | #expect(harness.scratchlist.createCalls[0].sessionId == "sess-1") | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 161 | #expect(harness.scratchlist.createCalls[0].text == "park me") | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 162 | #expect(harness.scratchlist.createCalls[0].attachments.isEmpty) | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 163 | #expect(harness.notices == ["Draft parked to scratchlist"]) | COMMENT |
| MEDIUM | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 180 | #expect(harness.interactor.composerText == "draft more") | COMMENT |
| MEDIUM | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 191 | #expect(harness.interactor.composerText == "keep me") | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 204 | #expect(harness.interactor.composerText == "keep me too") | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 214 | #expect(harness.scratchlist.createCalls.isEmpty) | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 215 | #expect(harness.interactor.composerText == " ") | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 225 | #expect(harness.interactor.composerText == "stranded draft") | COMMENT |
| MEDIUM⚡ | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 226 | #expect(harness.events.isEmpty) | COMMENT |
| MEDIUM | …iClientTests/Chat/ChatInteractorScratchlistTests.swift | 240 | #expect(harness.interactor.scratchlistCount == 2) | COMMENT |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 367 | #expect(await harness.row(localId: "local-1")?.id == "local-1") | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 368 | #expect(harness.interactor.composerText.isEmpty) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 369 | #expect(harness.drafts.storage[chatSessionID] == nil) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 501 | let row = try #require(await harness.row(localId: "local-1")) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 510 | #expect(harness.interactor.attachments.items.isEmpty) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 517 | #expect(await eventually { harness.interactor.attachments.allReady }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 549 | #expect(harness.interactor.composerText == "hold on") | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 550 | #expect(harness.interactor.attachments.items.count == 1) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 554 | #expect(await eventually { harness.interactor.attachments.allReady }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 595 | #expect(await eventually { harness.interactor.attachments.allReady }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 601 | #expect(harness.interactor.attachments.items.isEmpty) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 605 | #expect(await eventually { harness.interactor.attachments.allReady }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 610 | #expect(harness.interactor.attachments.items.isEmpty) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 695 | #expect(await eventually { await harness.performer.count("POST", pathSuffix: "/approve") == 1 }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 697 | #expect(await eventually { await harness.performer.count("POST", pathSuffix: "/approve") == 2 }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 699 | #expect(await eventually { await harness.performer.count("POST", pathSuffix: "/approve") == 3 }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 701 | #expect(await eventually { await harness.performer.count("POST", pathSuffix: "/deny") == 1 }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 730 | #expect(await eventually { await harness.performer.count("POST", pathSuffix: "/approve") == 1 }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 732 | #expect(await eventually { await harness.performer.count("POST", pathSuffix: "/approve") == 2 }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 734 | #expect(await eventually { await harness.performer.count("POST", pathSuffix: "/deny") == 1 }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 800 | #expect(await eventually { await harness.performer.count("POST", pathSuffix: "/approve") == 1 }) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 802 | #expect(harness.interactor.permissionOverrides["r-live"] == .resolving) | STRING |
| MEDIUM⚡ | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 807 | #expect(harness.interactor.permissionOverrides.isEmpty) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 432 | #expect(harness.store.detail(for: chatSessionID)?.active == true) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 459 | #expect(await harness.row(localId: "local-1") == nil) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 461 | #expect(harness.drafts.storage["sess-2"] == nil) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 489 | #expect(await eventually { harness.interactor.attachments.allReady }) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 571 | #expect(await eventually { harness.interactor.attachments.allReady }) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 630 | #expect(await eventually { harness.interactor.queuedRows.isEmpty }) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 676 | #expect(await eventually { harness.interactor.composerText == "edit me" }) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 760 | #expect(await eventually { await harness.performer.count("POST", pathSuffix: "/approve") == 1 }) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 765 | #expect(await eventually { await harness.performer.count("POST", pathSuffix: "/approve") == 2 }) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 788 | #expect(harness.events.contains(.notice("Request was already handled"))) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 821 | #expect(harness.store.detail(for: chatSessionID)?.permissionMode == .acceptEdits) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 845 | #expect(harness.store.detail(for: chatSessionID)?.model == "opus") | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 854 | #expect(harness.store.detail(for: chatSessionID)?.effort == "high") | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 872 | #expect(harness.store.detail(for: chatSessionID)?.modelReasoningEffort == "medium") | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 906 | #expect(await eventually { harness.interactor.composerText == "restored draft" }) | STRING |
| MEDIUM | …t/Tests/HapiClientTests/Chat/ChatInteractorTests.swift | 910 | #expect(await eventually { harness.drafts.storage[chatSessionID] == "newer draft" }) | STRING |
| MEDIUM | …s/HapiClientTests/Voice/DictationControllerTests.swift | 150 | #expect(harness.recorder.startCalls == 1) | COMMENT |
| MEDIUM | …s/HapiClientTests/Voice/DictationControllerTests.swift | 153 | #expect(await eventually { harness.controller.state == .idle }) | COMMENT |
| MEDIUM | …s/HapiClientTests/Voice/DictationControllerTests.swift | 164 | #expect(harness.events == [.transcribed("hello world")]) | COMMENT |
| 30 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | web/src/components/assistant-ui/markdown-text.tsx | 37 | // ── Plugin array ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-text.tsx | 120 | // ── URI scheme policy (inlined from url-scheme-policy.ts) ─────────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-text.tsx | 215 | // ── URL sanitize transform (deny-only) ────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-text.tsx | 242 | // ── Allowed-schemes state (inlined from useAllowedSchemes.ts) ─────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-text.tsx | 336 | // ── UriConfirmContext — one dialog per markdown root ──────────────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-text.tsx | 404 | // ── Components ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-a.test.tsx | 76 | // ── classifyScheme ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-a.test.tsx | 141 | // ── denyOnlyTransform ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-a.test.tsx | 161 | // ── useAllowedSchemes (inlined hook, tested via A component) ────────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-a.test.tsx | 212 | // ── <A> component — click handler ──────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-a.test.tsx | 250 | // ── relative / no-scheme hrefs — fail-closed (#1452) ───────────────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-a.test.tsx | 250 | // ── relative / no-scheme hrefs — fail-closed (#1452) ───────────────────────── | COMMENT |
| MEDIUM | web/src/components/assistant-ui/markdown-a.test.tsx | 425 | // ── intra-tab cross-provider sync (schemeListeners emitter) ────────────────── | COMMENT |
| MEDIUM | web/src/hooks/useReasoningCollapse.ts | 46 | // ── Module-level singleton store ──────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-non-https-autolink.test.ts | 24 | // ── Basic autolink ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-non-https-autolink.test.ts | 52 | // ── http/https NOT converted (GFM handles those) ───────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-non-https-autolink.test.ts | 64 | // ── Existing link nodes not touched ────────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-non-https-autolink.test.ts | 76 | // ── Code blocks / inline code not touched ──────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-non-https-autolink.test.ts | 91 | // ── Trailing punctuation handling ──────────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-non-https-autolink.test.ts | 142 | // ── Multiple URIs in one text node ─────────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-non-https-autolink.test.ts | 155 | // ── Scheme-only / edge cases ───────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-file-path-links.test.ts | 96 | // ── inlineCode autolinking (prong 2) ───────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-file-path-links.test.ts | 157 | // ── explicit markdown link rewriting (prong 3) ─────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-file-path-links.test.ts | 228 | // ── standalone gate: rewriteExplicitLinks:false (file-preview surface) ──────── | COMMENT |
| MEDIUM | web/src/lib/remark-repair-tables.test.ts | 29 | // ── String-level function ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-repair-tables.test.ts | 158 | // ── Plugin (parse + transform + stringify) ──────────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-repair-tables.ts | 18 | // ── Helpers ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-repair-tables.ts | 81 | // ── String-level preprocessor ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | web/src/lib/remark-repair-tables.ts | 144 | // ── Plugin ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cli/src/agent/backends/acp/AcpMessageHandler.test.ts | 2043 | // ── tool_call: at least one must have been emitted ──────────────── | COMMENT |
| MEDIUM | cli/src/agent/backends/acp/AcpMessageHandler.test.ts | 2052 | // a typed object from the human-readable title. ─────────────── | COMMENT |
| MEDIUM | cli/src/agent/backends/acp/AcpMessageHandler.test.ts | 2077 | // ── reasoning: at least one prose thought must have surfaced ─────── | COMMENT |
| MEDIUM | cli/src/agent/backends/acp/AcpMessageHandler.test.ts | 2091 | // ── text messages: none should be a raw JSON blob ───────────────── | COMMENT |
| MEDIUM | cli/src/agent/backends/acp/AcpMessageHandler.test.ts | 2102 | // ── optional: assert text messages exist for complete captures ───── | COMMENT |
| MEDIUM | cli/src/modules/pingPeer/pingPeer.ts | 545 | // ── inspect_peer (read twin; no resume) ───────────────────────────────────── | COMMENT |
| MEDIUM | …kotlin/app/hapi/protocol/markdown/FilePathLinksTest.kt | 10 | // ── detectFilePathLinks ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …kotlin/app/hapi/protocol/markdown/FilePathLinksTest.kt | 102 | // ── matchWholeFilePath (inline code spans) ─────────────────────────────── | COMMENT |
| MEDIUM | …kotlin/app/hapi/protocol/markdown/FilePathLinksTest.kt | 128 | // ── rewriteExplicitLinkTarget ──────────────────────────────────────────── | COMMENT |
| MEDIUM | …n/app/hapi/protocol/markdown/MarkdownTransformsTest.kt | 20 | // ── repairTables (remark-repair-tables parity) ─────────────────────────── | COMMENT |
| MEDIUM | …n/app/hapi/protocol/markdown/MarkdownTransformsTest.kt | 100 | // ── Parser configuration (disableIndentedCode + extensions) ────────────── | COMMENT |
| MEDIUM | …n/app/hapi/protocol/markdown/MarkdownTransformsTest.kt | 153 | // ── stripCjkAutolinkArtifacts ──────────────────────────────────────────── | COMMENT |
| MEDIUM | …otlin/app/hapi/protocol/markdown/MarkdownTransforms.kt | 32 | // ── Table repair (remark-repair-tables port) ───────────────────────────── | COMMENT |
| MEDIUM | …otlin/app/hapi/protocol/markdown/MarkdownTransforms.kt | 163 | // ── Indented-code disable + parser factory ─────────────────────────────── | COMMENT |
| MEDIUM | …otlin/app/hapi/protocol/markdown/MarkdownTransforms.kt | 205 | // ── CJK autolink artifact strip (remark-strip-cjk-autolink port) ───────── | COMMENT |
| MEDIUM | …otlin/app/hapi/protocol/markdown/MarkdownTransforms.kt | 230 | // ── File path link detection (remark-file-path-links port) ─────────────── | COMMENT |
| MEDIUM | …main/kotlin/app/hapi/companion/ui/markdown/Markdown.kt | 82 | // ── Link handling ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …main/kotlin/app/hapi/companion/ui/markdown/Markdown.kt | 108 | // ── Entry point ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …main/kotlin/app/hapi/companion/ui/markdown/Markdown.kt | 164 | // ── Block rendering ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …main/kotlin/app/hapi/companion/ui/markdown/Markdown.kt | 286 | // ── Table rendering ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …main/kotlin/app/hapi/companion/ui/markdown/Markdown.kt | 426 | // ── Inline rendering ───────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/guide/notifications.md | 66 | export ELEVENLABS_API_KEY="your-api-key" | CODE |
| HIGH | docs/guide/voice-assistant.md | 63 | export ELEVENLABS_API_KEY="your-api-key" | CODE |
| HIGH | docs/guide/voice-assistant.md | 84 | export GEMINI_API_KEY="your-api-key" # or GOOGLE_API_KEY | CODE |
| HIGH | docs/guide/voice-assistant.md | 91 | export DASHSCOPE_API_KEY="your-api-key" # or QWEN_API_KEY | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/scripts/release-all.ts | 136 | // Step 1: Update package.json version | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 148 | // Step 2: Build all platform binaries (with embedded web assets) | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 156 | // Step 3: Prepare and publish platform packages | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 165 | // Step 4: Verify all platform packages are live on npm before publishing the main package. | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 175 | // Step 5: Publish main package | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 186 | // Step 6: bun install to get complete lockfile | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 190 | // Step 7: Git commit + tag + push | COMMENT |
| LOW | hub/src/cursor/cursorLegacyMigrator.ts | 302 | // Step 1: canonical-path fast path. Skip readdir entirely if we hit. | COMMENT |
| LOW | hub/src/cursor/cursorLegacyMigrator.ts | 322 | // Step 2: scan every <wsh>/<cursorSessionId>/store.db. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/scripts/release-all.ts | 136 | // Step 1: Update package.json version | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 148 | // Step 2: Build all platform binaries (with embedded web assets) | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 156 | // Step 3: Prepare and publish platform packages | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 165 | // Step 4: Verify all platform packages are live on npm before publishing the main package. | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 175 | // Step 5: Publish main package | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 186 | // Step 6: bun install to get complete lockfile | COMMENT |
| LOW⚡ | cli/scripts/release-all.ts | 190 | // Step 7: Git commit + tag + push | COMMENT |
| LOW | hub/src/cursor/cursorLegacyMigrator.ts | 302 | // Step 1: canonical-path fast path. Skip readdir entirely if we hit. | COMMENT |
| LOW | hub/src/cursor/cursorLegacyMigrator.ts | 322 | // Step 2: scan every <wsh>/<cursorSessionId>/store.db. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | cli/src/claude/claudeLocalLauncher.ts | 15 | // Preserve the AI-generated title emitted by Claude Code's native | COMMENT |
| HIGH | …acp/__fixtures__/gemini-3-flash-preview-edit-file.json | 26 | "text": "## 📂 Topic: **Updating demo-write.txt**\n\n**Summary:**\nThe user requested to replace the first li | CODE |
| HIGH | …acp/__fixtures__/gemini-3-flash-preview-read-file.json | 26 | "text": "## 📂 Topic: **Initial Project Overview**\n\n**Summary:**\nI will start by reading the README.md fil | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | shared/src/voicePromptLayers.ts | 151 | export const VOICE_PROVIDER_GUARDRAILS = `# Provider guardrails | CODE |
| MEDIUM | …ges/HapiKit/Sources/HapiClient/HapiClientVersion.swift | 10 | /// Version of the HapiKit client scaffold. | COMMENT |
| MEDIUM | android/gradle/libs.versions.toml | 2 | # All versions verified to exist on Google Maven / Maven Central at scaffold time. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rc/components/ToolCard/RequestUserInputFooter.test.tsx | 61 | expect(textarea).toHaveAttribute('placeholder', 'Describe the change') | CODE |
| LOW | cli/src/cursor/utils/cursorLegacyEventConverter.test.ts | 200 | 'Lorem ipsum ... Questions skipped by the user, continue with the information you alread | CODE |
| LOW | …HapiKit/Sources/HapiClient/Chat/PermissionInputs.swift | 184 | placeholder: object["placeholder"]?.stringValue, | CODE |
| LOW | …companion/feature/chat/permissions/PermissionInputs.kt | 143 | placeholder = obj["placeholder"].stringOrNull, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ios/scripts/linux-test.sh | 8 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ios/scripts/pbxproj-audit.py | 28 | CODE |