SYMBOL INDEX (6343 symbols across 964 files) FILE: .design-system/src/App.tsx function App (line 37) | function App() { FILE: .design-system/src/components/Avatar.tsx type AvatarProps (line 4) | interface AvatarProps { function Avatar (line 11) | function Avatar({ src, name = 'User', size = 'md', color }: AvatarProps) { type AvatarGroupProps (line 46) | interface AvatarGroupProps { function AvatarGroup (line 51) | function AvatarGroup({ avatars, max = 4 }: AvatarGroupProps) { FILE: .design-system/src/components/Badge.tsx type BadgeProps (line 4) | interface BadgeProps { function Badge (line 9) | function Badge({ children, variant = 'default' }: BadgeProps) { FILE: .design-system/src/components/Button.tsx type ButtonProps (line 4) | interface ButtonProps extends React.ButtonHTMLAttributes { function closeElectronApp (line 42) | async function closeElectronApp(app: ElectronApplication): Promise { function waitForAppReady (line 49) | async function waitForAppReady(page: Page): Promise { function takeDebugScreenshot (line 63) | async function takeDebugScreenshot(page: Page, name: string): Promise; type SentryScope (line 3) | type SentryScope = { type SentryInitOptions (line 7) | type SentryInitOptions = { function init (line 18) | function init(_options: SentryInitOptions): void { function captureException (line 22) | function captureException(_error: Error): void { function withScope (line 26) | function withScope(callback: (scope: SentryScope) => void): void { FILE: apps/desktop/src/__tests__/e2e/smoke.test.ts constant TEST_DIR (line 19) | let TEST_DIR: string; constant TEST_PROJECT_PATH (line 20) | let TEST_PROJECT_PATH: string; type TestProjectData (line 47) | interface TestProjectData { type TestTaskData (line 59) | interface TestTaskData { type TestSettingsData (line 72) | interface TestSettingsData { function createTestProject (line 84) | function createTestProject(overrides: Partial = {}): Te... function createTestTask (line 100) | function createTestTask(overrides: Partial = {}): TestTask... function createTestSettings (line 114) | function createTestSettings(overrides: Partial = {}): ... function setupTestDirs (line 125) | function setupTestDirs(): void { function cleanupTestDirs (line 134) | function cleanupTestDirs(): void { FILE: apps/desktop/src/__tests__/integration/claude-profile-ipc.test.ts constant TEST_DIR (line 12) | let TEST_DIR: string; constant TEST_CONFIG_DIR (line 13) | let TEST_CONFIG_DIR: string; function initTestDirectories (line 15) | function initTestDirectories(): void { function createTestProfile (line 111) | function createTestProfile(overrides: Partial = {}): Clau... function setupTestDirs (line 123) | function setupTestDirs(): void { function cleanupTestDirs (line 129) | function cleanupTestDirs(): void { FILE: apps/desktop/src/__tests__/integration/file-watcher.test.ts constant TEST_DIR (line 12) | let TEST_DIR: string; constant TEST_SPEC_DIR (line 13) | let TEST_SPEC_DIR: string; function createTestPlan (line 30) | function createTestPlan(overrides: Record = {}): object { function setupTestDirs (line 54) | function setupTestDirs(): void { function cleanupTestDirs (line 61) | function cleanupTestDirs(): void { FILE: apps/desktop/src/__tests__/integration/rate-limit-subtask-recovery.test.ts constant TEST_DIR (line 19) | let TEST_DIR: string; constant TEST_SPEC_DIR (line 20) | let TEST_SPEC_DIR: string; constant PLAN_PATH (line 21) | let PLAN_PATH: string; function setupTestDirs (line 24) | function setupTestDirs(): void { function createMixedStatePlan (line 32) | function createMixedStatePlan() { function readPlan (line 101) | function readPlan() { type Subtask (line 107) | interface Subtask { type Phase (line 116) | interface Phase { type Plan (line 123) | interface Plan { function findSubtask (line 135) | function findSubtask(plan: Plan, subtaskId: string): Subtask | null { FILE: apps/desktop/src/__tests__/integration/subprocess-spawn.test.ts class MockBridge (line 16) | class MockBridge extends EventEmitter { method isActive (line 21) | get isActive() { class MockWorkerBridgeClass (line 30) | class MockWorkerBridgeClass extends MockBridge { method constructor (line 31) | constructor() { FILE: apps/desktop/src/__tests__/integration/task-lifecycle.test.ts constant TEST_DIR (line 11) | let TEST_DIR: string; constant TEST_PROJECT_PATH (line 12) | let TEST_PROJECT_PATH: string; constant TEST_SPEC_DIR (line 13) | let TEST_SPEC_DIR: string; function createTestPlan (line 40) | function createTestPlan(overrides: Record = {}): object { function createIncompletePlan (line 79) | function createIncompletePlan(): object { function setupTestDirs (line 93) | function setupTestDirs(): void { function cleanupTestDirs (line 102) | function cleanupTestDirs(): void { FILE: apps/desktop/src/__tests__/setup.ts constant TEST_DATA_DIR (line 51) | const TEST_DATA_DIR = '/tmp/auto-claude-ui-tests'; FILE: apps/desktop/src/main/__tests__/app-logger.test.ts constant TEST_BASE_DIR (line 12) | let TEST_BASE_DIR: string; constant TEST_LOGS_DIR (line 13) | let TEST_LOGS_DIR: string; constant TEST_LOG_FILE (line 14) | let TEST_LOG_FILE: string; function setupTestEnvironment (line 55) | function setupTestEnvironment(): void { function createTestLogFile (line 73) | function createTestLogFile(content: string): void { function cleanupTestDirs (line 77) | function cleanupTestDirs(): void { FILE: apps/desktop/src/main/__tests__/claude-code-handlers.test.ts type IpcHandler (line 11) | type IpcHandler = (event: unknown, ...args: unknown[]) => Promise; FILE: apps/desktop/src/main/__tests__/cli-tool-manager.test.ts type SpawnOptions (line 25) | type SpawnOptions = Parameters<(typeof import('../env-utils'))['getSpawn... type MockDirent (line 26) | type MockDirent = import('fs').Dirent FILE: apps/desktop/src/main/__tests__/ensure-onboarding-complete.test.ts function claudeJsonPath (line 112) | function claudeJsonPath(configDir: string): string { constant TEST_DIR (line 119) | const TEST_DIR = '/tmp/test-profile'; FILE: apps/desktop/src/main/__tests__/file-watcher.test.ts class MockFSWatcher (line 15) | class MockFSWatcher extends EventEmitter { method constructor (line 17) | constructor(closeImpl?: () => Promise) { FILE: apps/desktop/src/main/__tests__/ipc-handlers.test.ts constant TEST_DIR (line 12) | const TEST_DIR = mkdtempSync(path.join(tmpdir(), "ipc-handlers-test-")); constant TEST_PROJECT_PATH (line 13) | const TEST_PROJECT_PATH = path.join(TEST_DIR, "test-project"); method handle (line 100) | handle(channel: string, handler: Function): void { method removeHandler (line 104) | removeHandler(channel: string): void { method invokeHandler (line 108) | async invokeHandler(channel: string, event: unknown, ...args: unknown[])... method getHandler (line 116) | getHandler(channel: string): Function | undefined { function setupTestProject (line 144) | function setupTestProject(): void { function cleanupTestDirs (line 150) | function cleanupTestDirs(): void { FILE: apps/desktop/src/main/__tests__/ndjson-parser.test.ts type ProgressData (line 12) | interface ProgressData { function parseNDJSON (line 34) | function parseNDJSON(chunk: string, bufferRef: { current: string }): Pro... FILE: apps/desktop/src/main/__tests__/pr-review-state-manager.test.ts function createMockGetMainWindow (line 11) | function createMockGetMainWindow() { function createMockProgress (line 15) | function createMockProgress(overrides: Partial = {}): ... function createMockResult (line 24) | function createMockResult(overrides: Partial = {}): PRRe... FILE: apps/desktop/src/main/__tests__/project-store.test.ts constant TEST_DIR (line 11) | let TEST_DIR: string; constant USER_DATA_PATH (line 12) | let USER_DATA_PATH: string; constant TEST_PROJECT_PATH (line 13) | let TEST_PROJECT_PATH: string; function setupTestDirs (line 26) | function setupTestDirs(): void { function cleanupTestDirs (line 38) | function cleanupTestDirs(): void { FILE: apps/desktop/src/main/__tests__/rate-limit-auto-recovery.test.ts function createMockProfileManager (line 40) | function createMockProfileManager(options: { function simulateRateLimitRecovery (line 213) | function simulateRateLimitRecovery( FILE: apps/desktop/src/main/__tests__/settings-onboarding.test.ts type IpcHandler (line 13) | type IpcHandler = (event: unknown, ...args: unknown[]) => Promise; type MockFn (line 247) | type MockFn = ReturnType; type ExistsSyncFn (line 252) | type ExistsSyncFn = (path: string) => boolean; type ReadFileSyncFn (line 253) | type ReadFileSyncFn = (path: string) => string; FILE: apps/desktop/src/main/__tests__/task-state-manager.test.ts function createMockTask (line 24) | function createMockTask(overrides: Partial = {}): Task { function createMockProject (line 40) | function createMockProject(overrides: Partial = {}): Project { FILE: apps/desktop/src/main/__tests__/terminal-session-store.test.ts constant TEST_DIR (line 12) | let TEST_DIR: string; constant USER_DATA_PATH (line 13) | let USER_DATA_PATH: string; constant SESSIONS_DIR (line 14) | let SESSIONS_DIR: string; constant STORE_PATH (line 15) | let STORE_PATH: string; constant TEMP_PATH (line 16) | let TEMP_PATH: string; constant BACKUP_PATH (line 17) | let BACKUP_PATH: string; constant TEST_PROJECT_PATH (line 18) | let TEST_PROJECT_PATH: string; function initTestPaths (line 20) | function initTestPaths(): void { function setupTestDirs (line 44) | function setupTestDirs(): void { function cleanupTestDirs (line 52) | function cleanupTestDirs(): void { function createValidStoreData (line 60) | function createValidStoreData(sessionsByDate: Record { method registerTaskWithOperationRegistry (line 275) | private registerTaskWithOperationRegistry( method startSpecCreation (line 313) | async startSpecCreation( method startTaskExecution (line 435) | async startTaskExecution( method startQAProcess (line 559) | async startQAProcess( method startRoadmapGeneration (line 656) | startRoadmapGeneration( method startIdeationGeneration (line 670) | startIdeationGeneration( method killTask (line 682) | killTask(taskId: string): boolean { method stopIdeation (line 689) | stopIdeation(projectId: string): boolean { method isIdeationRunning (line 696) | isIdeationRunning(projectId: string): boolean { method stopRoadmap (line 703) | stopRoadmap(projectId: string): boolean { method isRoadmapRunning (line 710) | isRoadmapRunning(projectId: string): boolean { method killAll (line 717) | async killAll(): Promise { method isRunning (line 724) | isRunning(taskId: string): boolean { method getRunningTasks (line 731) | getRunningTasks(): string[] { method storeTaskContext (line 738) | private storeTaskContext( method restartTask (line 776) | restartTask(taskId: string, newProfileId?: string): boolean { method getRunningTasksByProfile (line 876) | getRunningTasksByProfile(): { byProfile: Record; tot... method assignProfileToTask (line 884) | assignProfileToTask( method getTaskProfileAssignment (line 896) | getTaskProfileAssignment(taskId: string): { profileId: string; profile... method updateTaskSession (line 903) | updateTaskSession(taskId: string, sessionId: string): void { method getTaskSessionId (line 910) | getTaskSessionId(taskId: string): string | undefined { method serializeSecurityProfile (line 922) | private serializeSecurityProfile(projectDir: string): SerializedSecuri... method resolveTaskModelId (line 942) | private async resolveTaskModelId(specDir: string, phase: 'planning' | ... method resolveTaskPhaseProvider (line 1014) | private resolveTaskPhaseProvider(specDir: string, phase: 'planning' | ... method loadPrompt (line 1039) | private loadPrompt(promptName: string): string | null { method buildDefaultSpecPrompt (line 1047) | private buildDefaultSpecPrompt(taskDescription: string, specDir?: stri... method buildDefaultPlannerPrompt (line 1055) | private buildDefaultPlannerPrompt(specId: string, projectPath: string)... method buildDefaultQAPrompt (line 1063) | private buildDefaultQAPrompt(specId: string, projectPath: string): str... method buildTaskExecutionMessages (line 1071) | private buildTaskExecutionMessages( method buildQAInitialMessages (line 1122) | private buildQAInitialMessages( FILE: apps/desktop/src/main/agent/agent-process.test.ts function createMockProcess (line 12) | function createMockProcess() { FILE: apps/desktop/src/main/agent/agent-process.ts type CliTool (line 31) | type CliTool = 'claude' | 'gh' | 'glab'; constant CLI_TOOL_ENV_MAP (line 37) | const CLI_TOOL_ENV_MAP: Readonly> = { function deriveGitBashPath (line 44) | function deriveGitBashPath(gitExePath: string): string | null { class AgentProcessManager (line 101) | class AgentProcessManager { method constructor (line 107) | constructor(state: AgentState, events: AgentEvents, emitter: EventEmit... method configure (line 113) | configure(_pythonPath?: string, autoBuildSourcePath?: string): void { method getAutoBuildSourcePath (line 119) | getAutoBuildSourcePath(): string { method detectAndSetCliPath (line 134) | private detectAndSetCliPath(toolName: CliTool): Record { method setupProcessEnvironment (line 164) | private setupProcessEnvironment( method handleProcessFailure (line 259) | private handleProcessFailure( method handleRateLimitWithAutoSwap (line 293) | private handleRateLimitWithAutoSwap( method handleAuthFailure (line 346) | private handleAuthFailure(taskId: string, allOutput: string): boolean { method handleAuthFailureWithAutoSwap (line 378) | private handleAuthFailureWithAutoSwap( method getProjectEnvVars (line 433) | private getProjectEnvVars(projectPath: string): Record { method parseEnvFile (line 454) | private parseEnvFile(envPath: string): Record { method loadProjectEnv (line 499) | private loadProjectEnv(projectPath: string): Record { method loadAutoBuildEnv (line 515) | loadAutoBuildEnv(): Record { method spawnProcess (line 528) | async spawnProcess( method spawnWorkerProcess (line 836) | async spawnWorkerProcess( method killProcess (line 944) | killProcess(taskId: string): boolean { method killAllProcesses (line 985) | async killAllProcesses(): Promise { method getCombinedEnv (line 1042) | getCombinedEnv(projectPath: string): Record { FILE: apps/desktop/src/main/agent/agent-queue.ts class AgentQueueManager (line 27) | class AgentQueueManager { method constructor (line 41) | constructor( method persistRoadmapProgress (line 77) | private async persistRoadmapProgress( method clearRoadmapProgress (line 116) | private clearRoadmapProgress(projectPath: string): void { method startRoadmapGeneration (line 143) | async startRoadmapGeneration( method startIdeationGeneration (line 166) | async startIdeationGeneration( method runIdeationRunner (line 186) | private async runIdeationRunner( method runRoadmapRunner (line 353) | private async runRoadmapRunner( method stopIdeation (line 527) | stopIdeation(projectId: string): boolean { method isIdeationRunning (line 557) | isIdeationRunning(projectId: string): boolean { method stopRoadmap (line 566) | stopRoadmap(projectId: string): boolean { method isRoadmapRunning (line 596) | isRoadmapRunning(projectId: string): boolean { FILE: apps/desktop/src/main/agent/agent-state.ts type TaskProfileAssignment (line 6) | interface TaskProfileAssignment { class AgentState (line 16) | class AgentState { method generateSpawnId (line 27) | generateSpawnId(): number { method addProcess (line 34) | addProcess(taskId: string, process: AgentProcess): void { method getProcess (line 41) | getProcess(taskId: string): AgentProcess | undefined { method deleteProcess (line 48) | deleteProcess(taskId: string): boolean { method hasProcess (line 55) | hasProcess(taskId: string): boolean { method getRunningTaskIds (line 62) | getRunningTaskIds(): string[] { method markSpawnAsKilled (line 69) | markSpawnAsKilled(spawnId: number): void { method wasSpawnKilled (line 76) | wasSpawnKilled(spawnId: number): boolean { method clearKilledSpawn (line 83) | clearKilledSpawn(spawnId: number): void { method updateProcess (line 94) | updateProcess(taskId: string, updates: Partial): void { method getAllProcesses (line 104) | getAllProcesses(): Map { method clear (line 111) | clear(): void { method getRunningTasksByProfile (line 124) | getRunningTasksByProfile(): { byProfile: Record; tot... method assignProfileToTask (line 145) | assignProfileToTask( method getTaskProfileAssignment (line 163) | getTaskProfileAssignment(taskId: string): TaskProfileAssignment | unde... method updateTaskSession (line 174) | updateTaskSession( method getTaskSessionId (line 197) | getTaskSessionId(taskId: string): string | undefined { method clearTaskProfileAssignment (line 204) | clearTaskProfileAssignment(taskId: string): void { FILE: apps/desktop/src/main/agent/env-utils.ts function normalizeEnvPathKey (line 17) | function normalizeEnvPathKey(env: Record): R... function mergePythonEnvPath (line 62) | function mergePythonEnvPath( function getOAuthModeClearVars (line 103) | function getOAuthModeClearVars(apiProfileEnv: Record): R... FILE: apps/desktop/src/main/agent/parsers/base-phase-parser.ts type PhaseParseResult (line 12) | interface PhaseParseResult { type PhaseParserContext (line 26) | interface PhaseParserContext { method wouldRegress (line 56) | protected wouldRegress(currentPhase: TPhase, newPhase: TPhase): boolean { method isTerminal (line 69) | protected isTerminal(phase: TPhase): boolean { FILE: apps/desktop/src/main/agent/parsers/execution-phase-parser.ts type ExecutionParserContext (line 21) | interface ExecutionParserContext extends PhaseParserContext { method parse (line 40) | parse(log: string, context: ExecutionParserContext): PhaseParseResult<... method parseFallbackPatterns (line 80) | private parseFallbackPatterns( method parseSpecRunnerPhase (line 105) | private parseSpecRunnerPhase(lowerLog: string): PhaseParseResult = new Set(['c... type IdeationParserContext (line 32) | interface IdeationParserContext extends PhaseParserContext { type IdeationParseResult (line 40) | interface IdeationParseResult extends PhaseParseResult { class IdeationPhaseParser (line 47) | class IdeationPhaseParser extends BasePhaseParser { method parse (line 58) | parse(log: string, context: IdeationParserContext): IdeationParseResul... method calculateGeneratingProgress (line 94) | private calculateGeneratingProgress(completedCount: number, totalTypes... method parsePhaseFromLog (line 104) | private parsePhaseFromLog(log: string): IdeationParseResult | null { FILE: apps/desktop/src/main/agent/parsers/roadmap-phase-parser.ts constant ROADMAP_PHASES (line 13) | const ROADMAP_PHASES = ['idle', 'analyzing', 'discovering', 'generating'... type RoadmapPhase (line 15) | type RoadmapPhase = (typeof ROADMAP_PHASES)[number]; constant ROADMAP_TERMINAL_PHASES (line 20) | const ROADMAP_TERMINAL_PHASES: ReadonlySet = new Set(['com... type RoadmapParseResult (line 25) | interface RoadmapParseResult extends PhaseParseResult { class RoadmapPhaseParser (line 32) | class RoadmapPhaseParser extends BasePhaseParser { method parse (line 43) | parse(log: string, context: PhaseParserContext): Roadmap... method parsePhaseFromLog (line 62) | private parsePhaseFromLog(log: string): RoadmapParseResult | null { FILE: apps/desktop/src/main/agent/phase-event-parser.ts constant DEBUG (line 12) | const DEBUG = process.env.DEBUG?.toLowerCase() === 'true' || process.env... function parsePhaseEvent (line 14) | function parsePhaseEvent(line: string): PhaseEventPayload | null { function hasPhaseMarker (line 69) | function hasPhaseMarker(line: string): boolean { function extractJsonObject (line 77) | function extractJsonObject(str: string): string | null { FILE: apps/desktop/src/main/agent/phase-event-schema.ts type PhaseEventPayload (line 16) | type PhaseEventPayload = z.infer; type ValidationResult (line 18) | interface ValidationResult { type ValidationError (line 23) | interface ValidationError { type ParseResult (line 28) | type ParseResult = ValidationResult | ValidationError; function validatePhaseEvent (line 30) | function validatePhaseEvent(data: unknown): ParseResult { function isValidPhasePayload (line 38) | function isValidPhasePayload(data: unknown): data is PhaseEventPayload { FILE: apps/desktop/src/main/agent/task-event-parser.ts constant TASK_EVENT_PREFIX (line 8) | const TASK_EVENT_PREFIX = '__TASK_EVENT__:'; constant DEBUG (line 10) | const DEBUG = process.env.DEBUG?.toLowerCase() === 'true' || process.env... type TaskEvent (line 12) | type TaskEvent = TaskEventPayload; function parseTaskEvent (line 14) | function parseTaskEvent(line: string): TaskEventPayload | null { function hasTaskMarker (line 69) | function hasTaskMarker(line: string): boolean { function extractJsonObject (line 77) | function extractJsonObject(str: string): string | null { FILE: apps/desktop/src/main/agent/task-event-schema.ts type TaskEventPayload (line 13) | type TaskEventPayload = z.infer; type ValidationResult (line 15) | interface ValidationResult { type ValidationError (line 20) | interface ValidationError { type ParseResult (line 25) | type ParseResult = ValidationResult | ValidationError; function validateTaskEvent (line 27) | function validateTaskEvent(data: unknown): ParseResult { FILE: apps/desktop/src/main/agent/types.ts type QueueProcessType (line 10) | type QueueProcessType = 'ideation' | 'roadmap'; type AgentProcess (line 12) | interface AgentProcess { type ExecutionProgressData (line 23) | interface ExecutionProgressData { type ProcessType (line 33) | type ProcessType = 'spec-creation' | 'task-execution' | 'qa-process'; type AgentManagerEvents (line 35) | interface AgentManagerEvents { type RoadmapConfig (line 45) | interface RoadmapConfig { type TaskExecutionOptions (line 50) | interface TaskExecutionOptions { type SpecCreationMetadata (line 59) | interface SpecCreationMetadata { type IdeationProgressData (line 87) | interface IdeationProgressData { type RoadmapProgressData (line 94) | interface RoadmapProgressData { FILE: apps/desktop/src/main/ai/agent/__tests__/executor.test.ts method isActive (line 24) | get isActive() { function createConfig (line 37) | function createConfig(overrides: Partial = {}): Age... FILE: apps/desktop/src/main/ai/agent/__tests__/worker-bridge.test.ts class MockWorkerImpl (line 17) | class MockWorkerImpl extends EE { method constructor (line 21) | constructor(_path: string, opts?: { workerData?: unknown }) { function getWorker (line 31) | function getWorker(): EventEmitter & { postMessage: ReturnType = {}): Age... function createSessionResult (line 86) | function createSessionResult(overrides: Partial = {}): Se... FILE: apps/desktop/src/main/ai/agent/executor.ts class AgentExecutor (line 25) | class AgentExecutor extends EventEmitter { method constructor (line 29) | constructor(config: AgentExecutorConfig) { method start (line 40) | start(): void { method stop (line 58) | async stop(): Promise { method retry (line 69) | async retry(): Promise { method updateConfig (line 78) | updateConfig(config: Partial): void { method isRunning (line 83) | get isRunning(): boolean { method taskId (line 88) | get taskId(): string { method forwardEvents (line 99) | private forwardEvents(bridge: WorkerBridge): void { FILE: apps/desktop/src/main/ai/agent/types.ts type WorkerConfig (line 22) | interface WorkerConfig { type SerializableSessionConfig (line 38) | interface SerializableSessionConfig { type WorkerMessage (line 98) | type WorkerMessage = type WorkerLogMessage (line 106) | interface WorkerLogMessage { type WorkerErrorMessage (line 113) | interface WorkerErrorMessage { type WorkerProgressMessage (line 120) | interface WorkerProgressMessage { type WorkerStreamEventMessage (line 127) | interface WorkerStreamEventMessage { type WorkerResultMessage (line 134) | interface WorkerResultMessage { type WorkerTaskEventMessage (line 141) | interface WorkerTaskEventMessage { type MainToWorkerMessage (line 153) | type MainToWorkerMessage = type SerializedSecurityProfile (line 164) | interface SerializedSecurityProfile { type AgentExecutorConfig (line 181) | interface AgentExecutorConfig { FILE: apps/desktop/src/main/ai/agent/worker-bridge.ts function resolveWorkerPath (line 41) | function resolveWorkerPath(): string { class WorkerBridge (line 67) | class WorkerBridge extends EventEmitter { method spawn (line 80) | spawn(config: AgentExecutorConfig): void { method terminate (line 126) | async terminate(): Promise { method isActive (line 148) | get isActive(): boolean { method workerInstance (line 153) | get workerInstance(): Worker | null { method handleWorkerMessage (line 161) | private handleWorkerMessage(message: WorkerMessage): void { method emitProgressFromTracker (line 199) | private emitProgressFromTracker(taskId: string, projectId?: string): v... method handleResult (line 216) | private handleResult(taskId: string, result: SessionResult, projectId?... method emitTyped (line 240) | private emitTyped( method cleanup (line 247) | private cleanup(): void { FILE: apps/desktop/src/main/ai/agent/worker.ts function postMessage (line 79) | function postMessage(message: WorkerMessage): void { function postLog (line 83) | function postLog(data: string): void { function postError (line 87) | function postError(data: string): void { function postTaskEvent (line 91) | function postTaskEvent(eventType: string, extra?: Record { function runDefaultSession (line 444) | async function runDefaultSession( function mapExecutionPhaseToPhase (line 542) | function mapExecutionPhaseToPhase(executionPhase: ExecutionPhase): Phase... function runBuildOrchestrator (line 556) | async function runBuildOrchestrator( function runQALoop (line 740) | async function runQALoop( function runSpecOrchestrator (line 826) | async function runSpecOrchestrator( function runAgenticSpecOrchestrator (line 983) | async function runAgenticSpecOrchestrator( function specPhaseToPromptName (line 1142) | function specPhaseToPromptName(phase: SpecPhase): string { function buildSpecKickoffMessage (line 1163) | function buildSpecKickoffMessage( function buildKickoffMessage (line 1231) | function buildKickoffMessage(agentType: AgentType, specDir: string, proj... function buildFallbackPrompt (line 1249) | function buildFallbackPrompt(agentType: AgentType, specDir: string, proj... FILE: apps/desktop/src/main/ai/auth/__tests__/resolver.test.ts function clearSettingsAccessor (line 59) | function clearSettingsAccessor() { FILE: apps/desktop/src/main/ai/auth/codex-oauth.ts function getElectronApp (line 29) | async function getElectronApp() { function getElectronShell (line 37) | async function getElectronShell() { constant DEBUG (line 49) | const DEBUG = process.env.DEBUG === 'true' || process.argv.includes('--d... constant VERBOSE (line 50) | const VERBOSE = process.env.VERBOSE === 'true'; function debugLog (line 52) | function debugLog(message: string, data?: unknown): void { function verboseLog (line 63) | function verboseLog(message: string, data?: unknown): void { constant CLIENT_ID (line 78) | const CLIENT_ID = 'app_EMoamEEZ73f0CkXaXp7hrann'; constant AUTH_ENDPOINT (line 79) | const AUTH_ENDPOINT = 'https://auth.openai.com/oauth/authorize'; constant TOKEN_ENDPOINT (line 80) | const TOKEN_ENDPOINT = 'https://auth.openai.com/oauth/token'; constant REDIRECT_URI (line 81) | const REDIRECT_URI = 'http://localhost:1455/auth/callback'; constant SCOPES (line 82) | const SCOPES = 'openid profile email offline_access'; constant REFRESH_THRESHOLD_MS (line 85) | const REFRESH_THRESHOLD_MS = 5 * 60 * 1000; constant OAUTH_FLOW_TIMEOUT_MS (line 88) | const OAUTH_FLOW_TIMEOUT_MS = 30 * 60 * 1000; type CodexAuthResult (line 94) | interface CodexAuthResult { type CodexAuthState (line 101) | interface CodexAuthState { type StoredTokens (line 106) | interface StoredTokens { function getTokenFilePath (line 116) | async function getTokenFilePath(): Promise { function readStoredTokens (line 121) | async function readStoredTokens(explicitPath?: string): Promise { function generateCodeVerifier (line 155) | function generateCodeVerifier(): string { function generateCodeChallenge (line 161) | function generateCodeChallenge(verifier: string): string { function generateState (line 167) | function generateState(): string { function startCodexOAuthFlow (line 184) | async function startCodexOAuthFlow(): Promise { function exchangeCodeForTokens (line 346) | async function exchangeCodeForTokens(code: string, codeVerifier: string)... function refreshCodexToken (line 413) | async function refreshCodexToken(refreshToken: string): Promise { function clearCodexAuth (line 557) | async function clearCodexAuth(): Promise { FILE: apps/desktop/src/main/ai/auth/resolver.ts constant ZAI_GENERAL_API (line 38) | const ZAI_GENERAL_API = 'https://api.z.ai/api/paas/v4'; constant ZAI_CODING_API (line 40) | const ZAI_CODING_API = 'https://api.z.ai/api/coding/paas/v4'; type SettingsAccessor (line 50) | type SettingsAccessor = (key: string) => string | undefined; function registerSettingsAccessor (line 60) | function registerSettingsAccessor(accessor: SettingsAccessor): void { function resolveFromProviderAccount (line 72) | async function resolveFromProviderAccount(ctx: AuthResolverContext): Pro... function resolveFromProfileOAuth (line 144) | async function resolveFromProfileOAuth(ctx: AuthResolverContext): Promis... function refreshOAuthTokenReactive (line 180) | async function refreshOAuthTokenReactive(configDir: string | undefined):... function resolveFromProfileApiKey (line 199) | function resolveFromProfileApiKey(ctx: AuthResolverContext): ResolvedAut... function resolveFromEnvironment (line 232) | function resolveFromEnvironment(ctx: AuthResolverContext): ResolvedAuth ... constant NO_AUTH_PROVIDERS (line 258) | const NO_AUTH_PROVIDERS = new Set([ function resolveDefaultCredentials (line 268) | function resolveDefaultCredentials(ctx: AuthResolverContext): ResolvedAu... function resolveAuth (line 293) | async function resolveAuth(ctx: AuthResolverContext): Promise { constant BUILTIN_TO_SUPPORTED (line 323) | const BUILTIN_TO_SUPPORTED: Record = { function resolveAuthFromQueue (line 348) | async function resolveAuthFromQueue( function buildDefaultQueueConfig (line 438) | function buildDefaultQueueConfig( function resolveZaiBaseUrl (line 486) | function resolveZaiBaseUrl(account: ProviderAccount): string { function resolveCredentialsForAccount (line 495) | async function resolveCredentialsForAccount( FILE: apps/desktop/src/main/ai/auth/types.ts type AuthSource (line 20) | type AuthSource = type ResolvedAuth (line 35) | interface ResolvedAuth { type AuthResolverContext (line 55) | interface AuthResolverContext { constant PROVIDER_ENV_VARS (line 71) | const PROVIDER_ENV_VARS: Record = { constant PROVIDER_SETTINGS_KEY (line 89) | const PROVIDER_SETTINGS_KEY: Partial> = { constant PROVIDER_BASE_URL_ENV (line 104) | const PROVIDER_BASE_URL_ENV: Partial> = { type QueueResolvedAuth (line 118) | interface QueueResolvedAuth extends ResolvedAuth { FILE: apps/desktop/src/main/ai/client/__tests__/factory.test.ts constant FAKE_MODEL (line 80) | const FAKE_MODEL = { type: 'language-model', modelId: 'mock-model-id' }; FILE: apps/desktop/src/main/ai/client/factory.ts constant DEFAULT_MAX_STEPS (line 43) | const DEFAULT_MAX_STEPS = 200; constant DEFAULT_SIMPLE_MAX_STEPS (line 46) | const DEFAULT_SIMPLE_MAX_STEPS = 1; function createAgentClient (line 75) | async function createAgentClient( function createSimpleClient (line 211) | async function createSimpleClient( FILE: apps/desktop/src/main/ai/client/types.ts type AgentClientConfig (line 28) | interface AgentClientConfig { type SimpleClientConfig (line 63) | interface SimpleClientConfig { type AgentClientResult (line 95) | interface AgentClientResult { type SimpleClientResult (line 118) | interface SimpleClientResult { FILE: apps/desktop/src/main/ai/config/__tests__/agent-configs.test.ts constant ALL_AGENT_TYPES (line 21) | const ALL_AGENT_TYPES: AgentType[] = [ FILE: apps/desktop/src/main/ai/config/agent-configs.ts constant BASE_READ_TOOLS (line 24) | const BASE_READ_TOOLS = ['Read', 'Glob', 'Grep'] as const; constant BASE_WRITE_TOOLS (line 27) | const BASE_WRITE_TOOLS = ['Write', 'Edit', 'Bash'] as const; constant WEB_TOOLS (line 30) | const WEB_TOOLS = ['WebFetch', 'WebSearch'] as const; constant ALL_BUILTIN_TOOLS (line 33) | const ALL_BUILTIN_TOOLS = [...BASE_READ_TOOLS, ...BASE_WRITE_TOOLS, ...W... constant SPEC_TOOLS (line 36) | const SPEC_TOOLS = [...BASE_READ_TOOLS, 'Write', ...WEB_TOOLS] as const; constant TOOL_UPDATE_SUBTASK_STATUS (line 42) | const TOOL_UPDATE_SUBTASK_STATUS = 'mcp__auto-claude__update_subtask_sta... constant TOOL_GET_BUILD_PROGRESS (line 43) | const TOOL_GET_BUILD_PROGRESS = 'mcp__auto-claude__get_build_progress'; constant TOOL_RECORD_DISCOVERY (line 44) | const TOOL_RECORD_DISCOVERY = 'mcp__auto-claude__record_discovery'; constant TOOL_RECORD_GOTCHA (line 45) | const TOOL_RECORD_GOTCHA = 'mcp__auto-claude__record_gotcha'; constant TOOL_GET_SESSION_CONTEXT (line 46) | const TOOL_GET_SESSION_CONTEXT = 'mcp__auto-claude__get_session_context'; constant TOOL_UPDATE_QA_STATUS (line 47) | const TOOL_UPDATE_QA_STATUS = 'mcp__auto-claude__update_qa_status'; constant CONTEXT7_TOOLS (line 54) | const CONTEXT7_TOOLS = [ constant LINEAR_TOOLS (line 60) | const LINEAR_TOOLS = [ constant MEMORY_MCP_TOOLS (line 80) | const MEMORY_MCP_TOOLS = [ constant GRAPHITI_MCP_TOOLS (line 89) | const GRAPHITI_MCP_TOOLS = MEMORY_MCP_TOOLS; constant PUPPETEER_TOOLS (line 96) | const PUPPETEER_TOOLS = [ constant ELECTRON_TOOLS (line 108) | const ELECTRON_TOOLS = [ type AgentType (line 120) | type AgentType = type AgentConfig (line 156) | interface AgentConfig { constant AGENT_CONFIGS (line 177) | const AGENT_CONFIGS: Record = { function getAgentConfig (line 454) | function getAgentConfig(agentType: AgentType): AgentConfig { function getDefaultThinkingLevel (line 470) | function getDefaultThinkingLevel(agentType: AgentType): ThinkingLevel { constant MCP_SERVER_NAME_MAP (line 477) | const MCP_SERVER_NAME_MAP: Record = { function mapMcpServerName (line 495) | function mapMcpServerName( type McpServerResolveOptions (line 510) | interface McpServerResolveOptions { function getRequiredMcpServers (line 547) | function getRequiredMcpServers( FILE: apps/desktop/src/main/ai/config/phase-config.ts constant SPEC_PHASE_THINKING_LEVELS (line 34) | const SPEC_PHASE_THINKING_LEVELS: Record = { constant VALID_THINKING_LEVELS (line 54) | const VALID_THINKING_LEVELS = new Set(['low', 'medium', 'high', ... constant LEGACY_THINKING_LEVEL_MAP (line 56) | const LEGACY_THINKING_LEVEL_MAP: Record = { function sanitizeThinkingLevel (line 66) | function sanitizeThinkingLevel(thinkingLevel: string): ThinkingLevel { constant ENV_VAR_MAP (line 78) | const ENV_VAR_MAP: Partial> = { function resolveModelId (line 95) | function resolveModelId(model: string): string { function getModelBetas (line 113) | function getModelBetas(modelShort: string): string[] { function getThinkingBudget (line 124) | function getThinkingBudget(thinkingLevel: string): number { type TaskMetadataConfig (line 137) | interface TaskMetadataConfig { function loadTaskMetadata (line 152) | async function loadTaskMetadata( function getPhaseModel (line 177) | async function getPhaseModel( function getPhaseThinking (line 210) | async function getPhaseThinking( function isAdaptiveModel (line 236) | function isAdaptiveModel(modelId: string): boolean { type ThinkingKwargs (line 241) | interface ThinkingKwargs { function getThinkingKwargsForModel (line 252) | function getThinkingKwargsForModel( function getPhaseConfig (line 271) | async function getPhaseConfig( function getPhaseClientThinkingKwargs (line 286) | async function getPhaseClientThinkingKwargs( function getSpecPhaseThinkingBudget (line 299) | function getSpecPhaseThinkingBudget(phaseName: string): number { function getFastMode (line 307) | async function getFastMode(specDir: string): Promise { function getPhaseModelBetas (line 315) | async function getPhaseModelBetas( FILE: apps/desktop/src/main/ai/config/types.ts type ModelShorthand (line 16) | type ModelShorthand = 'opus' | 'opus-1m' | 'opus-4.5' | 'sonnet' | 'haiku'; type ThinkingLevel (line 19) | type ThinkingLevel = 'low' | 'medium' | 'high' | 'xhigh'; type EffortLevel (line 22) | type EffortLevel = 'low' | 'medium' | 'high' | 'xhigh'; type Phase (line 25) | type Phase = 'spec' | 'planning' | 'coding' | 'qa'; constant MODEL_ID_MAP (line 37) | const MODEL_ID_MAP: Record = { constant MODEL_BETAS_MAP (line 49) | const MODEL_BETAS_MAP: Partial> = { constant THINKING_BUDGET_MAP (line 63) | const THINKING_BUDGET_MAP: Record = { constant EFFORT_LEVEL_MAP (line 74) | const EFFORT_LEVEL_MAP: Record = { constant ADAPTIVE_THINKING_MODELS (line 85) | const ADAPTIVE_THINKING_MODELS: ReadonlySet = new Set([ type PhaseModelConfig (line 94) | interface PhaseModelConfig { type PhaseThinkingConfig (line 102) | interface PhaseThinkingConfig { constant DEFAULT_PHASE_MODELS (line 114) | const DEFAULT_PHASE_MODELS: PhaseModelConfig = { constant DEFAULT_PHASE_THINKING (line 122) | const DEFAULT_PHASE_THINKING: PhaseThinkingConfig = { constant MODEL_PROVIDER_MAP (line 137) | const MODEL_PROVIDER_MAP: Record = { function resolveReasoningParams (line 158) | function resolveReasoningParams(config: ReasoningConfig): Record): CodePattern[] { function toServiceMatches (line 93) | function toServiceMatches( type BuildContextConfig (line 119) | interface BuildContextConfig { function buildContext (line 149) | async function buildContext(config: BuildContextConfig): Promise = {}): Memory { function makeChunk (line 48) | function makeChunk(overrides: Partial = {}): ASTChunk { FILE: apps/desktop/src/main/ai/memory/__tests__/graph/ast-chunker.test.ts type MockNode (line 16) | type MockNode = { function makeMockNode (line 28) | function makeMockNode( function makeIdentifier (line 50) | function makeIdentifier(name: string, startRow = 0, endRow = 0): MockNode { FILE: apps/desktop/src/main/ai/memory/__tests__/graph/ast-extractor.test.ts type MockNode (line 15) | type MockNode = { function makeNode (line 27) | function makeNode( function identifier (line 50) | function identifier(name: string, row = 0): MockNode { function makeTree (line 54) | function makeTree(children: MockNode[]): Tree { FILE: apps/desktop/src/main/ai/memory/__tests__/graph/graph-database.test.ts constant PROJECT_ID (line 14) | const PROJECT_ID = 'test-project'; FILE: apps/desktop/src/main/ai/memory/__tests__/injection/memory-stop-condition.test.ts function makeCalibrationMemory (line 15) | function makeCalibrationMemory(ratio: number): Memory { function makeMemoryService (line 35) | function makeMemoryService(calibrations: Memory[] = []): MemoryService { FILE: apps/desktop/src/main/ai/memory/__tests__/injection/planner-memory-context.test.ts function makeMemory (line 15) | function makeMemory(id: string, content: string, type: Memory['type'] = ... function makeMemoryService (line 35) | function makeMemoryService(): MemoryService { FILE: apps/desktop/src/main/ai/memory/__tests__/injection/qa-context.test.ts function makeMemory (line 9) | function makeMemory(id: string, content: string, type: Memory['type'] = ... function makeMemoryService (line 29) | function makeMemoryService(): MemoryService { FILE: apps/desktop/src/main/ai/memory/__tests__/injection/step-injection-decider.test.ts function makeMemory (line 20) | function makeMemory(overrides: Partial = {}): Memory { function makeScratchpad (line 41) | function makeScratchpad(newEntries: AcuteCandidate[] = []): Scratchpad { function makeMemoryService (line 47) | function makeMemoryService(overrides: Partial = {}): Memo... FILE: apps/desktop/src/main/ai/memory/__tests__/ipc/worker-observer-proxy.test.ts function makeMemory (line 17) | function makeMemory(): Memory { function makeMockPort (line 41) | function makeMockPort() { function setupResponseMock (line 67) | function setupResponseMock( FILE: apps/desktop/src/main/ai/memory/__tests__/memory-service.test.ts function makeMemoryRow (line 44) | function makeMemoryRow(overrides: Partial> = {})... function makeMemoryResult (line 85) | function makeMemoryResult(overrides: Partial = {}): Memory { FILE: apps/desktop/src/main/ai/memory/__tests__/observer/promotion.test.ts function makeCandidate (line 11) | function makeCandidate(overrides: Partial = {}): Memory... FILE: apps/desktop/src/main/ai/memory/__tests__/observer/trust-gate.test.ts function makeCandidate (line 11) | function makeCandidate(originatingStep: number, confidence = 0.8): Memor... FILE: apps/desktop/src/main/ai/memory/__tests__/retrieval/bm25-search.test.ts function seedMemory (line 14) | async function seedMemory( FILE: apps/desktop/src/main/ai/memory/__tests__/retrieval/context-packer.test.ts function makeMemory (line 17) | function makeMemory(overrides: Partial = {}): Memory { FILE: apps/desktop/src/main/ai/memory/__tests__/retrieval/pipeline.test.ts function seedMemory (line 16) | async function seedMemory( function makeMockEmbeddingService (line 39) | function makeMockEmbeddingService(): EmbeddingService { FILE: apps/desktop/src/main/ai/memory/db.ts function loadCreateClient (line 29) | function loadCreateClient(): (config: Config) => Client { function getMemoryClient (line 64) | async function getMemoryClient( function closeMemoryClient (line 103) | async function closeMemoryClient(): Promise { function getWebMemoryClient (line 117) | async function getWebMemoryClient( function getInMemoryClient (line 139) | async function getInMemoryClient(): Promise { FILE: apps/desktop/src/main/ai/memory/embedding-service.ts type EmbeddingProvider (line 30) | type EmbeddingProvider = type EmbeddingConfig (line 35) | interface EmbeddingConfig { type ASTChunk (line 51) | interface ASTChunk { function buildContextualText (line 70) | function buildContextualText(chunk: ASTChunk): string { function buildMemoryContextualText (line 86) | function buildMemoryContextualText(memory: Memory): string { function serializeEmbedding (line 102) | function serializeEmbedding(embedding: number[]): Buffer { function deserializeEmbedding (line 110) | function deserializeEmbedding(buf: ArrayBuffer | Buffer | Uint8Array): n... class EmbeddingCache (line 123) | class EmbeddingCache { method constructor (line 127) | constructor(db: Client) { method cacheKey (line 131) | private cacheKey(text: string, modelId: string, dims: number): string { method get (line 135) | async get(text: string, modelId: string, dims: number): Promise { constant OLLAMA_BASE_URL (line 180) | const OLLAMA_BASE_URL = 'http://localhost:11434'; type OllamaTagsResponse (line 182) | interface OllamaTagsResponse { function checkOllamaAvailable (line 186) | async function checkOllamaAvailable(baseUrl = OLLAMA_BASE_URL): Promise<... function getSystemRamGb (line 200) | async function getSystemRamGb(): Promise { function ollamaEmbed (line 210) | async function ollamaEmbed(model: string, text: string, baseUrl = OLLAMA... function ollamaEmbedBatch (line 226) | async function ollamaEmbedBatch(model: string, texts: string[], baseUrl ... function truncateToDim (line 239) | function truncateToDim(embedding: number[], targetDim: number): number[] { class EmbeddingService (line 252) | class EmbeddingService { method constructor (line 259) | constructor(dbClient: Client, config?: EmbeddingConfig) { method initialize (line 268) | async initialize(): Promise { method getProvider (line 345) | getProvider(): EmbeddingProvider { method embed (line 356) | async embed(text: string, dims: 256 | 1024 = 1024): Promise { method embedBatch (line 375) | async embedBatch(texts: string[], dims: 256 | 1024 = 1024): Promise { method embedChunk (line 424) | async embedChunk(chunk: ASTChunk): Promise { method getModelId (line 433) | private getModelId(dims: 256 | 1024): string { method createEmbeddingModel (line 456) | private createEmbeddingModel() { method computeEmbed (line 483) | private async computeEmbed(text: string, dims: 256 | 1024): Promise> = { function isArrowFunctionDecl (line 164) | function isArrowFunctionDecl(node: Node): { name: string } | null { function chunkFileByAST (line 185) | async function chunkFileByAST( function collectUncoveredLines (line 285) | function collectUncoveredLines( function groupLinesIntoChunks (line 302) | function groupLinesIntoChunks( function buildModuleChunk (line 327) | function buildModuleChunk( FILE: apps/desktop/src/main/ai/memory/graph/ast-extractor.ts type ExtractedNode (line 11) | interface ExtractedNode { type ExtractedEdge (line 21) | interface ExtractedEdge { type ExtractionResult (line 28) | interface ExtractionResult { function extractIdentifier (line 36) | function extractIdentifier(node: Node): string | null { function extractImportSource (line 62) | function extractImportSource(node: Node): string | null { function extractNamedImports (line 81) | function extractNamedImports(node: Node): string[] { function extractCallTarget (line 108) | function extractCallTarget(node: Node): string | null { class ASTExtractor (line 120) | class ASTExtractor { method extract (line 121) | extract(tree: Tree, filePath: string, language: string): ExtractionRes... method walkAndExtract (line 160) | private walkAndExtract( method walkChildren (line 452) | private walkChildren( FILE: apps/desktop/src/main/ai/memory/graph/graph-database.ts constant MAX_CLOSURE_DEPTH (line 28) | const MAX_CLOSURE_DEPTH = 5; function makeNodeId (line 33) | function makeNodeId(projectId: string, filePath: string, label: string, ... function makeEdgeId (line 43) | function makeEdgeId(projectId: string, fromId: string, toId: string, typ... function rowToNode (line 52) | function rowToNode(row: Record): GraphNode { function rowToEdge (line 73) | function rowToEdge(row: Record): GraphEdge { function rowToClosure (line 91) | function rowToClosure(row: Record): ClosureEntry { class GraphDatabase (line 102) | class GraphDatabase { method constructor (line 103) | constructor(private db: Client) {} method upsertNode (line 109) | async upsertNode(node: Omit): Promise { method getNode (line 155) | async getNode(id: string): Promise { method getNodesByFile (line 165) | async getNodesByFile(projectId: string, filePath: string): Promise): Promise { method getEdgesFrom (line 230) | async getEdgesFrom(nodeId: string): Promise { method getEdgesTo (line 239) | async getEdgesTo(nodeId: string): Promise { method markFileEdgesStale (line 248) | async markFileEdgesStale(projectId: string, filePath: string): Promise... method clearFileEdgesStale (line 261) | async clearFileEdgesStale(projectId: string, filePath: string): Promis... method deleteStaleEdgesForFile (line 273) | async deleteStaleEdgesForFile(projectId: string, filePath: string): Pr... method rebuildClosure (line 292) | async rebuildClosure(projectId: string): Promise { method updateClosureForNode (line 412) | async updateClosureForNode(nodeId: string): Promise { method computeAndInsertDescendants (line 435) | private async computeAndInsertDescendants(startNodeId: string, project... method computeAndInsertAncestorPaths (line 497) | private async computeAndInsertAncestorPaths(targetNodeId: string, proj... method getDescendants (line 556) | async getDescendants(nodeId: string, maxDepth: number): Promise { method updateIndexState (line 733) | async updateIndexState(projectId: string, state: Partial { method indexFile (line 95) | async indexFile(filePath: string): Promise { method coldStartIndex (line 199) | async coldStartIndex(): Promise { method stopWatching (line 236) | stopWatching(): void { method resolveOrCreateNode (line 250) | private async resolveOrCreateNode( method collectSupportedFiles (line 313) | private collectSupportedFiles(dir: string, extensions: string[]): stri... FILE: apps/desktop/src/main/ai/memory/graph/tree-sitter-loader.ts constant GRAMMAR_FILES (line 11) | const GRAMMAR_FILES: Record = { class TreeSitterLoader (line 21) | class TreeSitterLoader { method getInstance (line 26) | static getInstance(): TreeSitterLoader { method getWasmDir (line 33) | private getWasmDir(): string { method initialize (line 47) | async initialize(): Promise { method loadGrammar (line 59) | async loadGrammar(lang: string): Promise { method getParser (line 81) | async getParser(lang: string): Promise { method detectLanguage (line 93) | static detectLanguage(filePath: string): string | null { FILE: apps/desktop/src/main/ai/memory/injection/memory-stop-condition.ts constant MAX_ABSOLUTE_STEPS (line 15) | const MAX_ABSOLUTE_STEPS = 2000; function buildMemoryAwareStopCondition (line 27) | function buildMemoryAwareStopCondition( function getCalibrationFactor (line 44) | async function getCalibrationFactor( FILE: apps/desktop/src/main/ai/memory/injection/planner-memory-context.ts function buildPlannerMemoryContext (line 24) | async function buildPlannerMemoryContext( type PlannerSections (line 71) | interface PlannerSections { function formatPlannerSections (line 79) | function formatPlannerSections(sections: PlannerSections): string { FILE: apps/desktop/src/main/ai/memory/injection/prefetch-builder.ts type PrefetchPlan (line 14) | interface PrefetchPlan { function buildPrefetchPlan (line 36) | async function buildPrefetchPlan( FILE: apps/desktop/src/main/ai/memory/injection/qa-context.ts function buildQaSessionContext (line 24) | async function buildQaSessionContext( type QaSections (line 65) | interface QaSections { function formatQaSections (line 72) | function formatQaSections(sections: QaSections): string { FILE: apps/desktop/src/main/ai/memory/injection/step-injection-decider.ts type RecentToolCallContext (line 16) | interface RecentToolCallContext { type StepInjection (line 21) | interface StepInjection { class StepInjectionDecider (line 31) | class StepInjectionDecider { method constructor (line 32) | constructor( method decide (line 44) | async decide( method formatGotchas (line 121) | private formatGotchas(memories: Memory[]): string { method formatScratchpadEntries (line 135) | private formatScratchpadEntries(entries: AcuteCandidate[]): string { FILE: apps/desktop/src/main/ai/memory/injection/step-memory-state.ts class StepMemoryState (line 14) | class StepMemoryState { method recordToolCall (line 21) | recordToolCall(toolName: string, args: Record): void { method markInjected (line 31) | markInjected(memoryIds: string[]): void { method getRecentContext (line 42) | getRecentContext(windowSize = 5): RecentToolCallContext { method reset (line 52) | reset(): void { FILE: apps/desktop/src/main/ai/memory/ipc/worker-observer-proxy.ts constant IPC_TIMEOUT_MS (line 34) | const IPC_TIMEOUT_MS = 3_000; type MemoryToolIpcRequest (line 44) | type MemoryToolIpcRequest = type SerializableRecentContext (line 65) | interface SerializableRecentContext { type MemoryIpcMessage (line 70) | type MemoryIpcMessage = MemoryIpcRequest | MemoryToolIpcRequest; class WorkerObserverProxy (line 80) | class WorkerObserverProxy { method constructor (line 91) | constructor(port: MessagePort) { method onToolCall (line 107) | onToolCall(toolName: string, args: Record, stepNumber... method onToolResult (line 120) | onToolResult(toolName: string, result: unknown, stepNumber: number): v... method onReasoning (line 133) | onReasoning(text: string, stepNumber: number): void { method onStepComplete (line 145) | onStepComplete(stepNumber: number): void { method searchMemory (line 160) | async searchMemory(filters: MemorySearchFilters): Promise { method recordMemory (line 180) | async recordMemory(entry: MemoryRecordEntry): Promise { method requestStepInjection (line 201) | async requestStepInjection( method postFireAndForget (line 246) | private postFireAndForget(message: MemoryIpcMessage): void { method sendRequest (line 254) | private sendRequest(message: MemoryIpcMessage, requestId: string): ... method handleResponse (line 277) | private handleResponse(msg: MemoryIpcResponse): void { FILE: apps/desktop/src/main/ai/memory/memory-service.ts function rowToMemory (line 29) | function rowToMemory(row: Record): Memory { class MemoryServiceImpl (line 86) | class MemoryServiceImpl implements MemoryService { method constructor (line 87) | constructor( method store (line 98) | async store(entry: MemoryRecordEntry): Promise { method search (line 227) | async search(filters: MemorySearchFilters): Promise { method searchByPattern (line 286) | async searchByPattern(pattern: string): Promise { method insertUserTaught (line 309) | async insertUserTaught(content: string, projectId: string, tags: strin... method searchWorkflowRecipe (line 325) | async searchWorkflowRecipe( method updateAccessCount (line 349) | async updateAccessCount(memoryId: string): Promise { method deprecateMemory (line 366) | async deprecateMemory(memoryId: string): Promise { method verifyMemory (line 382) | async verifyMemory(memoryId: string): Promise { method pinMemory (line 392) | async pinMemory(memoryId: string, pinned: boolean): Promise { method deleteMemory (line 402) | async deleteMemory(memoryId: string): Promise { method directSearch (line 414) | private async directSearch(filters: MemorySearchFilters): Promise { method onToolCall (line 132) | private onToolCall( method onToolResult (line 153) | private onToolResult( method onReasoning (line 160) | private onReasoning( method onStepComplete (line 206) | private onStepComplete(stepNumber: number): void { method finalizeCoAccess (line 216) | private finalizeCoAccess(): MemoryCandidate[] { method finalizeErrorRetry (line 238) | private finalizeErrorRetry(): MemoryCandidate[] { method finalizeAcuteCandidates (line 260) | private finalizeAcuteCandidates(): MemoryCandidate[] { method finalizeRepeatedGrep (line 294) | private finalizeRepeatedGrep(): MemoryCandidate[] { method synthesizeCoAccessWithLLM (line 320) | private async synthesizeCoAccessWithLLM( FILE: apps/desktop/src/main/ai/memory/observer/promotion.ts constant SESSION_TYPE_PROMOTION_LIMITS (line 17) | const SESSION_TYPE_PROMOTION_LIMITS: Record = { type EarlyTrigger (line 31) | interface EarlyTrigger { constant EARLY_TRIGGERS (line 37) | const EARLY_TRIGGERS: EarlyTrigger[] = [ class PromotionPipeline (line 64) | class PromotionPipeline { method promote (line 77) | async promote( method validationFilter (line 114) | private validationFilter( method frequencyFilter (line 130) | private frequencyFilter( method noveltyFilter (line 149) | private noveltyFilter(candidates: MemoryCandidate[]): MemoryCandidate[] { method scoreFilter (line 156) | private scoreFilter(candidates: MemoryCandidate[]): MemoryCandidate[] { FILE: apps/desktop/src/main/ai/memory/observer/scratchpad-merger.ts type MergedScratchpadEntry (line 19) | interface MergedScratchpadEntry { type MergedScratchpad (line 25) | interface MergedScratchpad { class ParallelScratchpadMerger (line 42) | class ParallelScratchpadMerger { method merge (line 52) | merge(scratchpads: Scratchpad[]): MergedScratchpad { method deduplicateSignals (line 122) | private deduplicateSignals(signals: ObserverSignal[]): ObserverSignal[] { method deduplicateAcuteCandidates (line 142) | private deduplicateAcuteCandidates(candidates: AcuteCandidate[]): Acut... method extractWords (line 159) | private extractWords(text: string): Set { method mergeAnalytics (line 169) | private mergeAnalytics( function jaccardSimilarity (line 203) | function jaccardSimilarity(a: Set, b: Set): number { FILE: apps/desktop/src/main/ai/memory/observer/scratchpad.ts type ScratchpadAnalytics (line 22) | interface ScratchpadAnalytics { constant CONFIG_FILE_PATTERNS (line 44) | const CONFIG_FILE_PATTERNS = [ function isConfigFile (line 66) | function isConfigFile(filePath: string): boolean { function computeErrorFingerprint (line 79) | function computeErrorFingerprint(errorMessage: string): string { function makeEmptyAnalytics (line 101) | function makeEmptyAnalytics(): ScratchpadAnalytics { class Scratchpad (line 121) | class Scratchpad { method constructor (line 130) | constructor(sessionId: string, sessionType: SessionType) { method recordToolCall (line 142) | recordToolCall(toolName: string, args: Record, stepNu... method recordToolResult (line 192) | recordToolResult(toolName: string, result: unknown, stepNumber: number... method recordFileEdit (line 221) | recordFileEdit(filePath: string): void { method recordSelfCorrection (line 231) | recordSelfCorrection(stepNumber: number): void { method recordTokenUsage (line 239) | recordTokenUsage(inputTokens: number): void { method addSignal (line 249) | addSignal(signal: ObserverSignal): void { method getNewSince (line 258) | getNewSince(stepNumber: number): AcuteCandidate[] { method checkpoint (line 265) | async checkpoint(workUnitRef: WorkUnitRef, dbClient: Client): Promise<... method restore (line 307) | static async restore(sessionId: string, dbClient: Client): Promise { FILE: apps/desktop/src/main/ai/memory/observer/signals.ts type BaseSignal (line 14) | interface BaseSignal { type FileAccessSignal (line 24) | interface FileAccessSignal extends BaseSignal { type CoAccessSignal (line 31) | interface CoAccessSignal extends BaseSignal { type ErrorRetrySignal (line 42) | interface ErrorRetrySignal extends BaseSignal { type BacktrackSignal (line 52) | interface BacktrackSignal extends BaseSignal { type ReadAbandonSignal (line 60) | interface ReadAbandonSignal extends BaseSignal { type RepeatedGrepSignal (line 68) | interface RepeatedGrepSignal extends BaseSignal { type ToolSequenceSignal (line 76) | interface ToolSequenceSignal extends BaseSignal { type TimeAnomalySignal (line 83) | interface TimeAnomalySignal extends BaseSignal { type SelfCorrectionSignal (line 91) | interface SelfCorrectionSignal extends BaseSignal { type ExternalReferenceSignal (line 102) | interface ExternalReferenceSignal extends BaseSignal { type GlobIgnoreSignal (line 110) | interface GlobIgnoreSignal extends BaseSignal { type ImportChaseSignal (line 118) | interface ImportChaseSignal extends BaseSignal { type TestOrderSignal (line 126) | interface TestOrderSignal extends BaseSignal { type ConfigTouchSignal (line 134) | interface ConfigTouchSignal extends BaseSignal { type StepOverrunSignal (line 142) | interface StepOverrunSignal extends BaseSignal { type ParallelConflictSignal (line 151) | interface ParallelConflictSignal extends BaseSignal { type ContextTokenSpikeSignal (line 159) | interface ContextTokenSpikeSignal extends BaseSignal { type ObserverSignal (line 172) | type ObserverSignal = type SignalValueEntry (line 195) | interface SignalValueEntry { constant SIGNAL_VALUES (line 205) | const SIGNAL_VALUES: Record = { constant SELF_CORRECTION_PATTERNS (line 229) | const SELF_CORRECTION_PATTERNS: RegExp[] = [ FILE: apps/desktop/src/main/ai/memory/observer/trust-gate.ts function applyTrustGate (line 17) | function applyTrustGate( FILE: apps/desktop/src/main/ai/memory/retrieval/bm25-search.ts type BM25Result (line 10) | interface BM25Result { function searchBM25 (line 26) | async function searchBM25( function sanitizeFtsQuery (line 63) | function sanitizeFtsQuery(query: string): string { FILE: apps/desktop/src/main/ai/memory/retrieval/context-packer.ts type ContextPackingConfig (line 17) | interface ContextPackingConfig { constant DEFAULT_PACKING_CONFIG (line 22) | const DEFAULT_PACKING_CONFIG: Record { function computeTypeBudgets (line 170) | function computeTypeBudgets( type PackResult (line 181) | interface PackResult { function packTypeMemories (line 186) | function packTypeMemories( function formatMemory (line 212) | function formatMemory(memory: Memory, memoryType: MemoryType): string { function formatTypeLabel (line 235) | function formatTypeLabel(type: MemoryType): string { function isTooSimilar (line 262) | function isTooSimilar(content: string, included: string[]): boolean { function tokenize (line 280) | function tokenize(text: string): string[] { function estimateTokens (line 287) | function estimateTokens(text: string): number { FILE: apps/desktop/src/main/ai/memory/retrieval/dense-search.ts type DenseResult (line 12) | interface DenseResult { function searchDense (line 30) | async function searchDense( function searchDenseJsFallback (line 72) | async function searchDenseJsFallback( function serializeEmbedding (line 111) | function serializeEmbedding(embedding: number[]): Buffer { function deserializeEmbedding (line 119) | function deserializeEmbedding(buf: ArrayBuffer | Buffer | Uint8Array): n... function cosineDistance (line 132) | function cosineDistance(a: number[], b: number[]): number { FILE: apps/desktop/src/main/ai/memory/retrieval/graph-boost.ts constant GRAPH_BOOST_FACTOR (line 19) | const GRAPH_BOOST_FACTOR = 0.3; function applyGraphNeighborhoodBoost (line 29) | async function applyGraphNeighborhoodBoost( FILE: apps/desktop/src/main/ai/memory/retrieval/graph-search.ts type GraphSearchResult (line 12) | interface GraphSearchResult { function searchGraph (line 26) | async function searchGraph( function collectFileScopedMemories (line 63) | async function collectFileScopedMemories( function collectCoAccessMemories (line 96) | async function collectCoAccessMemories( function collectClosureNeighborMemories (line 142) | async function collectClosureNeighborMemories( FILE: apps/desktop/src/main/ai/memory/retrieval/hyde.ts function hydeSearch (line 24) | async function hydeSearch( FILE: apps/desktop/src/main/ai/memory/retrieval/pipeline.ts type RetrievalConfig (line 28) | interface RetrievalConfig { type RetrievalResult (line 36) | interface RetrievalResult { class RetrievalPipeline (line 45) | class RetrievalPipeline { method constructor (line 46) | constructor( method search (line 58) | async search(query: string, config: RetrievalConfig): Promise { method rowToMemory (line 153) | private rowToMemory(row: Record): Memory { FILE: apps/desktop/src/main/ai/memory/retrieval/query-classifier.ts type QueryType (line 8) | type QueryType = 'identifier' | 'semantic' | 'structural'; function detectQueryType (line 17) | function detectQueryType(query: string, recentToolCalls?: string[]): Que... constant QUERY_TYPE_WEIGHTS (line 39) | const QUERY_TYPE_WEIGHTS: Record< FILE: apps/desktop/src/main/ai/memory/retrieval/reranker.ts constant OLLAMA_BASE_URL (line 12) | const OLLAMA_BASE_URL = 'http://localhost:11434'; constant COHERE_RERANK_URL (line 13) | const COHERE_RERANK_URL = 'https://api.cohere.com/v2/rerank'; constant QWEN3_RERANKER_MODEL (line 14) | const QWEN3_RERANKER_MODEL = 'qwen3-reranker:0.6b'; type RerankerProvider (line 16) | type RerankerProvider = 'ollama' | 'cohere' | 'none'; type RerankerCandidate (line 18) | interface RerankerCandidate { type RerankerResult (line 23) | interface RerankerResult { class Reranker (line 28) | class Reranker { method constructor (line 31) | constructor(provider?: RerankerProvider) { method initialize (line 39) | async initialize(): Promise { method getProvider (line 68) | getProvider(): RerankerProvider { method rerank (line 80) | async rerank( method rerankOllama (line 117) | private async rerankOllama( method rerankCohere (line 170) | private async rerankCohere( method passthroughRerank (line 213) | private passthroughRerank( function buildQwen3RerankerPrompt (line 230) | function buildQwen3RerankerPrompt(query: string, document: string): stri... FILE: apps/desktop/src/main/ai/memory/retrieval/rrf-fusion.ts type RankedResult (line 11) | interface RankedResult { type RRFPath (line 17) | interface RRFPath { function weightedRRF (line 32) | function weightedRRF(paths: RRFPath[], k: number = 60): RankedResult[] { FILE: apps/desktop/src/main/ai/memory/schema.ts constant MEMORY_PRAGMA_SQL (line 9) | const MEMORY_PRAGMA_SQL = ` constant MEMORY_SCHEMA_SQL (line 15) | const MEMORY_SCHEMA_SQL = ` FILE: apps/desktop/src/main/ai/memory/tools/record-memory.ts type RecordMemoryInput (line 60) | type RecordMemoryInput = z.infer; function createRecordMemoryTool (line 73) | function createRecordMemoryTool( function createRecordMemoryStub (line 111) | function createRecordMemoryStub(): AITool { FILE: apps/desktop/src/main/ai/memory/tools/search-memory.ts type SearchMemoryInput (line 65) | type SearchMemoryInput = z.infer; function createSearchMemoryTool (line 77) | function createSearchMemoryTool( function createSearchMemoryStub (line 118) | function createSearchMemoryStub(): AITool { FILE: apps/desktop/src/main/ai/memory/types.ts type MemoryType (line 11) | type MemoryType = type MemorySource (line 32) | type MemorySource = type MemoryScope (line 40) | type MemoryScope = 'global' | 'module' | 'work_unit' | 'session'; type UniversalPhase (line 42) | type UniversalPhase = type SignalType (line 50) | type SignalType = type SessionOutcome (line 69) | type SessionOutcome = 'success' | 'failure' | 'abandoned' | 'partial'; type SessionType (line 71) | type SessionType = type WorkUnitRef (line 84) | interface WorkUnitRef { type MemoryRelation (line 90) | interface MemoryRelation { type Memory (line 98) | interface Memory { type WorkflowRecipe (line 155) | interface WorkflowRecipe extends Memory { type DeadEndMemory (line 169) | interface DeadEndMemory extends Memory { type PrefetchPattern (line 178) | interface PrefetchPattern extends Memory { type TaskCalibration (line 187) | interface TaskCalibration extends Memory { type MemoryTypeDefinition (line 201) | interface MemoryTypeDefinition { type RelayTransition (line 207) | interface RelayTransition { type ExecutionContext (line 213) | interface ExecutionContext { type WorkUnitResult (line 220) | interface WorkUnitResult { type MemoryService (line 226) | interface MemoryService { type MemoryMethodologyPlugin (line 239) | interface MemoryMethodologyPlugin { type MemorySearchFilters (line 288) | interface MemorySearchFilters { type MemoryRecordEntry (line 304) | interface MemoryRecordEntry { type MemoryCandidate (line 332) | interface MemoryCandidate { type AcuteCandidate (line 348) | interface AcuteCandidate { type MemoryIpcRequest (line 360) | type MemoryIpcRequest = type MemoryIpcResponse (line 383) | type MemoryIpcResponse = type GraphNodeType (line 404) | type GraphNodeType = type GraphEdgeType (line 414) | type GraphEdgeType = type GraphNodeSource (line 423) | type GraphNodeSource = 'ast' | 'scip' | 'llm' | 'agent'; type GraphNodeConfidence (line 424) | type GraphNodeConfidence = 'confirmed' | 'inferred' | 'speculative'; type GraphNode (line 426) | interface GraphNode { type GraphEdge (line 445) | interface GraphEdge { type ClosureEntry (line 461) | interface ClosureEntry { type GraphIndexState (line 470) | interface GraphIndexState { type ImpactResult (line 480) | interface ImpactResult { FILE: apps/desktop/src/main/ai/merge/auto-merger.ts type MergeContext (line 35) | interface MergeContext { function getExtension (line 46) | function getExtension(filePath: string): string { function isImportLine (line 50) | function isImportLine(line: string, ext: string): boolean { function findImportSectionEnd (line 58) | function findImportSectionEnd(lines: string[], ext: string): number { function findFunctionInsertPosition (line 77) | function findFunctionInsertPosition(content: string): number | null { function insertMethodsIntoClass (line 88) | function insertMethodsIntoClass(content: string, className: string, meth... function insertHooksIntoFunction (line 113) | function insertHooksIntoFunction(content: string, funcName: string, hook... function wrapFunctionReturn (line 135) | function wrapFunctionReturn( function extractHookCall (line 149) | function extractHookCall(change: SemanticChange): string | null { function extractJsxWrapper (line 165) | function extractJsxWrapper(change: SemanticChange): [string, string] | n... function extractNewProps (line 172) | function extractNewProps(change: SemanticChange): Array<[string, string]> { function applyContentChange (line 188) | function applyContentChange(content: string, oldContent: string | undefi... function topologicalSortChanges (line 195) | function topologicalSortChanges(snapshots: TaskSnapshot[]): SemanticChan... function escapeRegex (line 215) | function escapeRegex(str: string): string { function executeImportStrategy (line 223) | function executeImportStrategy(context: MergeContext): MergeResult { function executeHooksStrategy (line 279) | function executeHooksStrategy(context: MergeContext): MergeResult { function executeHooksThenWrapStrategy (line 312) | function executeHooksThenWrapStrategy(context: MergeContext): MergeResult { function executeAppendFunctionsStrategy (line 354) | function executeAppendFunctionsStrategy(context: MergeContext): MergeRes... function executeAppendMethodsStrategy (line 395) | function executeAppendMethodsStrategy(context: MergeContext): MergeResult { function executeCombinePropsStrategy (line 428) | function executeCombinePropsStrategy(context: MergeContext): MergeResult { function executeOrderByDependencyStrategy (line 453) | function executeOrderByDependencyStrategy(context: MergeContext): MergeR... function executeOrderByTimeStrategy (line 487) | function executeOrderByTimeStrategy(context: MergeContext): MergeResult { function executeAppendStatementsStrategy (line 514) | function executeAppendStatementsStrategy(context: MergeContext): MergeRe... type StrategyHandler (line 546) | type StrategyHandler = (context: MergeContext) => MergeResult; class AutoMerger (line 554) | class AutoMerger { method constructor (line 557) | constructor() { method merge (line 574) | merge(context: MergeContext, strategy: MergeStrategy): MergeResult { method canHandle (line 606) | canHandle(strategy: MergeStrategy): boolean { FILE: apps/desktop/src/main/ai/merge/conflict-detector.ts type CompatibilityRule (line 29) | interface CompatibilityRule { type RuleIndex (line 38) | type RuleIndex = Map; function ruleKey (line 40) | function ruleKey(a: ChangeType, b: ChangeType): string { function buildDefaultRules (line 48) | function buildDefaultRules(): CompatibilityRule[] { function indexRules (line 716) | function indexRules(rules: CompatibilityRule[]): RuleIndex { function rangesOverlap (line 731) | function rangesOverlap(ranges: Array<[number, number]>): boolean { function assessSeverity (line 739) | function assessSeverity(changeTypes: ChangeType[], changes: SemanticChan... function analyzeLocationConflict (line 763) | function analyzeLocationConflict( function detectConflictsInternal (line 815) | function detectConflictsInternal( function analyzeCompatibility (line 845) | function analyzeCompatibility( function explainConflict (line 857) | function explainConflict(conflict: ConflictRegion): string { function getCompatiblePairs (line 870) | function getCompatiblePairs(rules: CompatibilityRule[]): Array<[ChangeTy... class ConflictDetector (line 887) | class ConflictDetector { method constructor (line 891) | constructor() { method addRule (line 896) | addRule(rule: CompatibilityRule): void { method detectConflicts (line 904) | detectConflicts(taskAnalyses: Map): ConflictRegi... method analyzeCompatibility (line 908) | analyzeCompatibility( method getCompatiblePairs (line 915) | getCompatiblePairs(): Array<[ChangeType, ChangeType, MergeStrategy]> { method explainConflict (line 919) | explainConflict(conflict: ConflictRegion): string { function analyzeChangeCompatibility (line 925) | function analyzeChangeCompatibility( FILE: apps/desktop/src/main/ai/merge/file-evolution.ts constant DEFAULT_EXTENSIONS (line 36) | const DEFAULT_EXTENSIONS = new Set([ class EvolutionStorage (line 47) | class EvolutionStorage { method constructor (line 53) | constructor(projectDir: string, storageDir: string) { method loadEvolutions (line 63) | loadEvolutions(): Map { method saveEvolutions (line 78) | saveEvolutions(evolutions: Map): void { method storeBaselineContent (line 90) | storeBaselineContent(filePath: string, content: string, taskId: string... method readBaselineContent (line 101) | readBaselineContent(baselineSnapshotPath: string): string | undefined { method readFileContent (line 112) | readFileContent(filePath: string): string | undefined { method getRelativePath (line 121) | getRelativePath(filePath: string): string { function runGit (line 141) | function runGit(args: string[], cwd: string): string { function tryRunGit (line 149) | function tryRunGit(args: string[], cwd: string): string | null { function getCurrentCommit (line 157) | function getCurrentCommit(cwd: string): string { function discoverTrackableFiles (line 161) | function discoverTrackableFiles(projectDir: string, extensions: Set { method getFilesModifiedByTasks (line 438) | getFilesModifiedByTasks(taskIds: string[]): Map { method getConflictingFiles (line 457) | getConflictingFiles(taskIds: string[]): string[] { method markTaskCompleted (line 467) | markTaskCompleted(taskId: string): void { method cleanupTask (line 481) | cleanupTask(taskId: string, removeBaselines = true): void { method getActiveTasks (line 506) | getActiveTasks(): Set { method getEvolutionSummary (line 519) | getEvolutionSummary(): Record { FILE: apps/desktop/src/main/ai/merge/orchestrator.ts type TaskMergeRequest (line 39) | interface TaskMergeRequest { type MergeStats (line 45) | interface MergeStats { type MergeReport (line 59) | interface MergeReport { type ProgressStage (line 69) | type ProgressStage = type ProgressCallback (line 77) | type ProgressCallback = ( type AiResolverFn (line 88) | type AiResolverFn = ( function getFileFromBranch (line 97) | function getFileFromBranch( function findWorktree (line 110) | function findWorktree(projectDir: string, taskId: string): string | unde... function buildFileAnalysis (line 126) | function buildFileAnalysis(filePath: string, snapshot: TaskSnapshot): Fi... function mergeWithAi (line 136) | async function mergeWithAi( function createEmptyStats (line 193) | function createEmptyStats(): MergeStats { function updateStats (line 209) | function updateStats(stats: MergeStats, result: MergeResult): void { class MergeOrchestrator (line 238) | class MergeOrchestrator { method constructor (line 249) | constructor(options: { method mergeTask (line 271) | async mergeTask( method mergeTasks (line 384) | async mergeTasks( method mergeFile (line 504) | private async mergeFile( method previewMerge (line 604) | previewMerge(taskIds: string[]): Record { method writeMergedFiles (line 657) | writeMergedFiles(report: MergeReport, outputDir?: string): string[] { method applyToProject (line 676) | applyToProject(report: MergeReport): boolean { method saveReport (line 694) | private saveReport(report: MergeReport, name: string): void { FILE: apps/desktop/src/main/ai/merge/semantic-analyzer.ts function getImportPattern (line 26) | function getImportPattern(ext: string): RegExp | null { function getFunctionPattern (line 41) | function getFunctionPattern(ext: string): RegExp | null { function extractFunctionNames (line 56) | function extractFunctionNames(content: string, pattern: RegExp): Set { function mainBranchEventToDict (line 151) | function mainBranchEventToDict(event: MainBranchEvent): Record): FileTimeli... function taskFileViewFromDict (line 180) | function taskFileViewFromDict(data: Record): TaskFileVi... function mainBranchEventFromDict (line 207) | function mainBranchEventFromDict(data: Record): MainBra... class TimelinePersistence (line 224) | class TimelinePersistence { method constructor (line 229) | constructor(storagePath: string) { method saveTimeline (line 237) | saveTimeline(filePath: string, timeline: FileTimeline): void { method loadAllTimelines (line 248) | loadAllTimelines(): Map { method updateIndex (line 271) | updateIndex(filePaths: string[]): void { function tryRunGit (line 284) | function tryRunGit(args: string[], cwd: string): string | null { function getFileContentAtCommit (line 290) | function getFileContentAtCommit(filePath: string, commitHash: string, cw... function getCurrentMainCommit (line 295) | function getCurrentMainCommit(cwd: string): string { function getFilesChangedInCommit (line 299) | function getFilesChangedInCommit(commitHash: string, cwd: string): strin... function getCommitInfo (line 305) | function getCommitInfo(commitHash: string, cwd: string): Record { method hasTimeline (line 558) | hasTimeline(filePath: string): boolean { method getTimeline (line 562) | getTimeline(filePath: string): FileTimeline | undefined { method captureWorktreeState (line 570) | captureWorktreeState(taskId: string, worktreePath: string): void { method initializeFromWorktree (line 590) | initializeFromWorktree( method getOrCreateTimeline (line 628) | private getOrCreateTimeline(filePath: string): FileTimeline { method persistTimeline (line 635) | private persistTimeline(filePath: string): void { FILE: apps/desktop/src/main/ai/merge/types.ts type ChangeType (line 16) | enum ChangeType { type ConflictSeverity (line 69) | enum ConflictSeverity { type MergeStrategy (line 78) | enum MergeStrategy { type MergeDecision (line 102) | enum MergeDecision { type SemanticChange (line 115) | interface SemanticChange { function isAdditiveChange (line 126) | function isAdditiveChange(change: SemanticChange): boolean { function overlapsWithChange (line 145) | function overlapsWithChange(a: SemanticChange, b: SemanticChange): boole... function semanticChangeToDict (line 151) | function semanticChangeToDict(change: SemanticChange): Record): Semantic... type FileAnalysis (line 178) | interface FileAnalysis { function createFileAnalysis (line 189) | function createFileAnalysis(filePath: string): FileAnalysis { function isAdditiveOnly (line 202) | function isAdditiveOnly(analysis: FileAnalysis): boolean { function locationsChanged (line 206) | function locationsChanged(analysis: FileAnalysis): Set { function getChangesAtLocation (line 210) | function getChangesAtLocation(analysis: FileAnalysis, location: string):... type ConflictRegion (line 215) | interface ConflictRegion { function conflictRegionToDict (line 226) | function conflictRegionToDict(conflict: ConflictRegion): Record): TaskSnapsh... type FileEvolution (line 289) | interface FileEvolution { function fileEvolutionToDict (line 298) | function fileEvolutionToDict(evolution: FileEvolution): Record): FileEvolu... function getTaskSnapshot (line 322) | function getTaskSnapshot(evolution: FileEvolution, taskId: string): Task... function addTaskSnapshot (line 326) | function addTaskSnapshot(evolution: FileEvolution, snapshot: TaskSnapsho... function getTasksInvolved (line 332) | function getTasksInvolved(evolution: FileEvolution): string[] { type MergeResult (line 337) | interface MergeResult { function mergeResultSuccess (line 349) | function mergeResultSuccess(result: MergeResult): boolean { function mergeResultNeedsHumanReview (line 355) | function mergeResultNeedsHumanReview(result: MergeResult): boolean { function computeContentHash (line 364) | function computeContentHash(content: string): string { function sanitizePathForStorage (line 369) | function sanitizePathForStorage(filePath: string): string { FILE: apps/desktop/src/main/ai/orchestration/__tests__/parallel-executor.test.ts function makeSubtask (line 12) | function makeSubtask(id: string): SubtaskInfo { function makeResult (line 20) | function makeResult(outcome: SessionResult['outcome']): SessionResult { function runWithFakeTimers (line 33) | async function runWithFakeTimers(fn: () => Promise): Promise { FILE: apps/desktop/src/main/ai/orchestration/__tests__/qa-loop.test.ts constant SPEC_DIR (line 52) | const SPEC_DIR = '/project/.auto-claude/specs/001-feature'; constant PROJECT_DIR (line 53) | const PROJECT_DIR = '/project'; function completedPlan (line 55) | function completedPlan(qaStatus?: 'approved' | 'rejected' | 'unknown') { function makeSessionResult (line 72) | function makeSessionResult(outcome: SessionResult['outcome']): SessionRe... function makeConfig (line 81) | function makeConfig(overrides: Partial = {}): QALoopConfig { FILE: apps/desktop/src/main/ai/orchestration/__tests__/qa-reports.test.ts function makeRecord (line 33) | function makeRecord( function makeIssue (line 48) | function makeIssue(title: string, opts: Partial = {}): QAIssue { FILE: apps/desktop/src/main/ai/orchestration/__tests__/recovery-manager.test.ts constant PROJECT_DIR (line 35) | const PROJECT_DIR = path.join(path.sep, 'project'); constant SPEC_DIR (line 36) | const SPEC_DIR = path.join(PROJECT_DIR, '.auto-claude', 'specs', '001-fe... constant MEMORY_DIR (line 37) | const MEMORY_DIR = path.join(SPEC_DIR, 'memory'); constant ATTEMPT_HISTORY_PATH (line 38) | const ATTEMPT_HISTORY_PATH = path.join(MEMORY_DIR, 'attempt_history.json'); function makeHistory (line 40) | function makeHistory( function recentTimestamp (line 51) | function recentTimestamp() { function oldTimestamp (line 55) | function oldTimestamp() { function createManager (line 60) | function createManager() { FILE: apps/desktop/src/main/ai/orchestration/build-orchestrator.ts constant AUTO_CONTINUE_DELAY_MS (line 44) | const AUTO_CONTINUE_DELAY_MS = 3_000; constant MAX_PLANNING_VALIDATION_RETRIES (line 47) | const MAX_PLANNING_VALIDATION_RETRIES = 3; constant MAX_SUBTASK_RETRIES (line 50) | const MAX_SUBTASK_RETRIES = 3; constant ERROR_RETRY_DELAY_MS (line 53) | const ERROR_RETRY_DELAY_MS = 5_000; type BuildPhase (line 60) | type BuildPhase = 'planning' | 'coding' | 'qa_review' | 'qa_fixing'; constant PHASE_AGENT_MAP (line 63) | const PHASE_AGENT_MAP: Record = { constant PHASE_CONFIG_MAP (line 71) | const PHASE_CONFIG_MAP: Record = { type BuildOrchestratorConfig (line 79) | interface BuildOrchestratorConfig { type PromptContext (line 105) | interface PromptContext { type SubtaskInfo (line 119) | interface SubtaskInfo { type SessionRunConfig (line 129) | interface SessionRunConfig { type BuildOrchestratorEvents (line 145) | interface BuildOrchestratorEvents { type BuildOutcome (line 161) | interface BuildOutcome { type ImplementationPlan (line 181) | interface ImplementationPlan { type PlanPhase (line 187) | interface PlanPhase { type PlanSubtask (line 194) | interface PlanSubtask { class BuildOrchestrator (line 212) | class BuildOrchestrator extends EventEmitter { method constructor (line 219) | constructor(config: BuildOrchestratorConfig) { method run (line 241) | async run(): Promise { method runPlanningPhase (line 305) | private async runPlanningPhase(): Promise<{ success: boolean; error?: ... method runCodingPhase (line 425) | private async runCodingPhase(): Promise<{ success: boolean; error?: st... method runQAPhase (line 493) | private async runQAPhase(): Promise<{ success: boolean; error?: string... method transitionPhase (line 592) | private transitionPhase(phase: ExecutionPhase, message: string): void { method markPhaseCompleted (line 609) | private markPhaseCompleted(phase: CompletablePhase): void { method resetSubtaskStatuses (line 635) | private async resetSubtaskStatuses(): Promise { method isFirstRun (line 677) | private async isFirstRun(): Promise { method isBuildComplete (line 690) | private async isBuildComplete(): Promise { method readQAStatus (line 714) | private async readQAStatus(): Promise<'passed' | 'failed' | 'unknown'> { method resetQAReport (line 748) | private async resetQAReport(): Promise { method buildOutcome (line 761) | private buildOutcome(success: boolean, durationMs: number, error?: str... method emitTyped (line 782) | private emitTyped( FILE: apps/desktop/src/main/ai/orchestration/parallel-executor.ts constant DEFAULT_MAX_CONCURRENCY (line 24) | const DEFAULT_MAX_CONCURRENCY = 3; constant RATE_LIMIT_BASE_DELAY_MS (line 27) | const RATE_LIMIT_BASE_DELAY_MS = 30_000; constant RATE_LIMIT_MAX_DELAY_MS (line 30) | const RATE_LIMIT_MAX_DELAY_MS = 300_000; constant STAGGER_DELAY_MS (line 33) | const STAGGER_DELAY_MS = 1_000; type ParallelExecutorConfig (line 40) | interface ParallelExecutorConfig { type SubtaskSessionRunner (line 56) | type SubtaskSessionRunner = (subtask: SubtaskInfo) => Promise(items: T[], batchSize: number): T[][] { function isRateLimitError (line 249) | function isRateLimitError(message: string): boolean { function delay (line 257) | function delay(ms: number, signal?: AbortSignal): Promise { FILE: apps/desktop/src/main/ai/orchestration/pause-handler.ts constant RATE_LIMIT_PAUSE_FILE (line 21) | const RATE_LIMIT_PAUSE_FILE = 'RATE_LIMIT_PAUSE'; constant AUTH_FAILURE_PAUSE_FILE (line 24) | const AUTH_FAILURE_PAUSE_FILE = 'AUTH_PAUSE'; constant RESUME_FILE (line 27) | const RESUME_FILE = 'RESUME'; constant HUMAN_INTERVENTION_FILE (line 30) | const HUMAN_INTERVENTION_FILE = 'PAUSE'; constant MAX_RATE_LIMIT_WAIT_MS (line 33) | const MAX_RATE_LIMIT_WAIT_MS = 7_200_000; constant RATE_LIMIT_CHECK_INTERVAL_MS (line 36) | const RATE_LIMIT_CHECK_INTERVAL_MS = 30_000; constant AUTH_RESUME_CHECK_INTERVAL_MS (line 39) | const AUTH_RESUME_CHECK_INTERVAL_MS = 10_000; constant AUTH_RESUME_MAX_WAIT_MS (line 42) | const AUTH_RESUME_MAX_WAIT_MS = 86_400_000; type RateLimitPauseData (line 49) | interface RateLimitPauseData { type AuthPauseData (line 56) | interface AuthPauseData { function checkAndClearResumeFile (line 72) | function checkAndClearResumeFile( function sleep (line 96) | function sleep(ms: number, signal?: AbortSignal): Promise { function writeRateLimitPauseFile (line 113) | function writeRateLimitPauseFile( function writeAuthPauseFile (line 130) | function writeAuthPauseFile(specDir: string, error: string): void { function readPauseFile (line 143) | function readPauseFile(specDir: string, fileName: string): Record { method readQASignoff (line 369) | private async readQASignoff(): Promise { method resolveQAStatus (line 387) | private resolveQAStatus(signoff: QASignoff | null): QAStatus { method isBuildComplete (line 399) | private async isBuildComplete(): Promise { method hasHumanFeedback (line 425) | private async hasHumanFeedback(): Promise { method processHumanFeedback (line 437) | private async processHumanFeedback(): Promise { method hasRecurringIssues (line 479) | private hasRecurringIssues(currentIssues: QAIssue[]): boolean { method recordIteration (line 506) | private async recordIteration( method getRecurringIssues (line 554) | private getRecurringIssues(currentIssues: QAIssue[]): QAIssue[] { method writeReports (line 579) | private async writeReports(finalStatus: 'approved' | 'escalated' | 'ma... method outcome (line 602) | private outcome( method emitTyped (line 624) | private emitTyped( FILE: apps/desktop/src/main/ai/orchestration/qa-reports.ts constant RECURRING_ISSUE_THRESHOLD (line 24) | const RECURRING_ISSUE_THRESHOLD = 3; constant ISSUE_SIMILARITY_THRESHOLD (line 25) | const ISSUE_SIMILARITY_THRESHOLD = 0.8; constant MAX_QA_ITERATIONS (line 26) | const MAX_QA_ITERATIONS = 50; function normalizeIssueKey (line 36) | function normalizeIssueKey(issue: QAIssue): string { function tokenize (line 52) | function tokenize(text: string): Set { function tokenOverlap (line 64) | function tokenOverlap(a: string, b: string): number { function issuesSimilar (line 87) | function issuesSimilar(a: QAIssue, b: QAIssue, threshold = ISSUE_SIMILAR... function generateQAReport (line 109) | function generateQAReport( function generateEscalationReport (line 206) | function generateEscalationReport( function generateManualTestPlan (line 300) | async function generateManualTestPlan(specDir: string, projectDir: strin... function isNoTestProject (line 430) | function isNoTestProject(specDir: string, projectDir: string): boolean { FILE: apps/desktop/src/main/ai/orchestration/recovery-manager.ts constant ATTEMPT_WINDOW_MS (line 24) | const ATTEMPT_WINDOW_MS = 2 * 60 * 60 * 1_000; constant MAX_ATTEMPTS_PER_SUBTASK (line 27) | const MAX_ATTEMPTS_PER_SUBTASK = 50; constant CIRCULAR_FIX_THRESHOLD (line 30) | const CIRCULAR_FIX_THRESHOLD = 3; type FailureType (line 37) | type FailureType = type RecoveryAction (line 47) | interface RecoveryAction { type AttemptRecord (line 57) | interface AttemptRecord { type AttemptHistory (line 66) | interface AttemptHistory { type BuildCheckpoint (line 76) | interface BuildCheckpoint { class RecoveryManager (line 104) | class RecoveryManager { method constructor (line 110) | constructor(specDir: string, projectDir: string) { method init (line 120) | async init(): Promise { method classifyFailure (line 138) | classifyFailure(error: string, subtaskId: string): FailureType { method recordAttempt (line 186) | async recordAttempt(subtaskId: string, error: string): Promise { method getAttemptCount (line 213) | async getAttemptCount(subtaskId: string): Promise { method isCircularFix (line 225) | async isCircularFix(subtaskId: string): Promise { method markStuck (line 247) | async markStuck(subtaskId: string): Promise { method isStuck (line 258) | async isStuck(subtaskId: string): Promise { method determineRecoveryAction (line 270) | async determineRecoveryAction( method saveCheckpoint (line 340) | async saveCheckpoint(checkpoint: BuildCheckpoint): Promise { method loadCheckpoint (line 363) | async loadCheckpoint(): Promise { method loadAttemptHistory (line 378) | private async loadAttemptHistory(): Promise { method saveAttemptHistory (line 392) | private async saveAttemptHistory(history: AttemptHistory): Promise = { constant COMPLEXITY_PHASES (line 91) | const COMPLEXITY_PHASES: Record = { constant PHASE_OUTPUTS (line 107) | const PHASE_OUTPUTS: Partial> = { type SpecOrchestratorConfig (line 120) | interface SpecOrchestratorConfig { type SpecPromptContext (line 146) | interface SpecPromptContext { type SpecSessionRunConfig (line 168) | interface SpecSessionRunConfig { type SpecPhaseResult (line 189) | interface SpecPhaseResult { type SpecOrchestratorEvents (line 197) | interface SpecOrchestratorEvents { type SpecOutcome (line 213) | interface SpecOutcome { type ComplexityAssessment (line 222) | interface ComplexityAssessment { class SpecOrchestrator (line 241) | class SpecOrchestrator extends EventEmitter { method constructor (line 248) | constructor(config: SpecOrchestratorConfig) { method run (line 267) | async run(): Promise { method assessComplexityHeuristic (line 379) | private assessComplexityHeuristic(taskDescription: string): Complexity... method runPhase (line 407) | private async runPhase( method runComplexityAssessment (line 573) | private async runComplexityAssessment( method validatePhaseOutputs (line 656) | private async validatePhaseOutputs(phase: SpecPhase): Promise { method validatePhaseSchema (line 677) | private async validatePhaseSchema( method capturePhaseOutput (line 692) | private async capturePhaseOutput(phase: SpecPhase): Promise { method outcome (line 715) | private outcome( method emitTyped (line 736) | private emitTyped( FILE: apps/desktop/src/main/ai/orchestration/subagent-executor.ts constant SUBAGENT_MAX_STEPS (line 32) | const SUBAGENT_MAX_STEPS = 100; function resolveAgentType (line 42) | function resolveAgentType(subagentType: string): AgentType { function resolvePromptName (line 62) | function resolvePromptName(subagentType: string): string { constant STRUCTURED_OUTPUT_AGENTS (line 80) | const STRUCTURED_OUTPUT_AGENTS: Partial> = { type SubagentExecutorConfig (line 88) | interface SubagentExecutorConfig { class SubagentExecutorImpl (line 110) | class SubagentExecutorImpl implements SubagentExecutor { method constructor (line 113) | constructor(config: SubagentExecutorConfig) { method spawn (line 117) | async spawn(params: SubagentSpawnParams): Promise { FILE: apps/desktop/src/main/ai/orchestration/subtask-iterator.ts type SubtaskIteratorConfig (line 30) | interface SubtaskIteratorConfig { type SubtaskIteratorResult (line 64) | interface SubtaskIteratorResult { type SubtaskResult (line 76) | interface SubtaskResult { type ImplementationPlan (line 88) | interface ImplementationPlan { type PlanPhase (line 94) | interface PlanPhase { type PlanSubtask (line 101) | interface PlanSubtask { function iterateSubtasks (line 124) | async function iterateSubtasks( function ensureSubtaskMarkedCompleted (line 284) | async function ensureSubtaskMarkedCompleted( function restampExecutionPhase (line 335) | async function restampExecutionPhase( function syncPhasesToMain (line 363) | async function syncPhasesToMain( function loadImplementationPlan (line 400) | async function loadImplementationPlan( function getNextPendingSubtask (line 417) | function getNextPendingSubtask( function countTotalSubtasks (line 444) | function countTotalSubtasks(plan: ImplementationPlan): number { function countCompletedSubtasks (line 455) | function countCompletedSubtasks(plan: ImplementationPlan): number { constant MAX_RATE_LIMIT_WAIT_MS_DEFAULT (line 472) | const MAX_RATE_LIMIT_WAIT_MS_DEFAULT = 7_200_000; function extractInsightsAfterSession (line 480) | async function extractInsightsAfterSession( function delay (line 510) | function delay(ms: number, signal?: AbortSignal): Promise { FILE: apps/desktop/src/main/ai/project/analyzer.ts constant PROFILE_FILENAME (line 43) | const PROFILE_FILENAME = '.auto-claude-security.json'; constant CUSTOM_ALLOWLIST_FILENAME (line 44) | const CUSTOM_ALLOWLIST_FILENAME = '.auto-claude-allowlist'; constant HASH_FILES (line 46) | const HASH_FILES = [ function readTextFile (line 82) | function readTextFile(filePath: string): string | null { function readJsonFile (line 90) | function readJsonFile(filePath: string): Record | null { function getFileMtime (line 98) | function getFileMtime(filePath: string): number | null { function getFileSize (line 106) | function getFileSize(filePath: string): number | null { function collectGlobFiles (line 114) | function collectGlobFiles(dir: string, ext: string, depth: number): stri... function detectNpmScripts (line 138) | function detectNpmScripts(projectDir: string): string[] { function detectMakefileTargets (line 150) | function detectMakefileTargets(projectDir: string): string[] { function detectPoetryScripts (line 164) | function detectPoetryScripts(projectDir: string): string[] { function detectShellScripts (line 188) | function detectShellScripts(projectDir: string): string[] { function loadCustomAllowlist (line 203) | function loadCustomAllowlist(projectDir: string): Set { function analyzeStructure (line 217) | function analyzeStructure(projectDir: string): { function profileToDict (line 253) | function profileToDict(profile: ProjectSecurityProfile): SerializedSecur... function profileFromDict (line 288) | function profileFromDict(data: SerializedSecurityProfile): ProjectSecuri... class ProjectAnalyzer (line 344) | class ProjectAnalyzer { method constructor (line 349) | constructor(projectDir: string, specDir?: string) { method getProfilePath (line 355) | getProfilePath(): string { method loadProfile (line 360) | loadProfile(): ProjectSecurityProfile | null { method saveProfile (line 373) | saveProfile(profile: ProjectSecurityProfile): void { method computeProjectHash (line 379) | computeProjectHash(): string { method isDescendantOf (line 419) | private isDescendantOf(child: string, parent: string): boolean { method shouldReanalyze (line 429) | shouldReanalyze(profile: ProjectSecurityProfile): boolean { method analyze (line 446) | analyze(force = false): ProjectSecurityProfile { method buildStackCommands (line 482) | private buildStackCommands(): void { function analyzeProject (line 515) | async function analyzeProject( function buildSecurityProfile (line 530) | function buildSecurityProfile(profile: ProjectSecurityProfile): { FILE: apps/desktop/src/main/ai/project/command-registry.ts constant BASE_COMMANDS (line 16) | const BASE_COMMANDS: Set = new Set([ constant LANGUAGE_COMMANDS (line 157) | const LANGUAGE_COMMANDS: Record = { constant FRAMEWORK_COMMANDS (line 192) | const FRAMEWORK_COMMANDS: Record = { constant DATABASE_COMMANDS (line 341) | const DATABASE_COMMANDS: Record = { constant INFRASTRUCTURE_COMMANDS (line 368) | const INFRASTRUCTURE_COMMANDS: Record = { constant CLOUD_COMMANDS (line 392) | const CLOUD_COMMANDS: Record = { constant PACKAGE_MANAGER_COMMANDS (line 414) | const PACKAGE_MANAGER_COMMANDS: Record = { constant CODE_QUALITY_COMMANDS (line 445) | const CODE_QUALITY_COMMANDS: Record = { constant VERSION_MANAGER_COMMANDS (line 474) | const VERSION_MANAGER_COMMANDS: Record = { FILE: apps/desktop/src/main/ai/project/framework-detector.ts function readJsonFile (line 18) | function readJsonFile(projectDir: string, filename: string): Record | null { function isDirectory (line 88) | function isDirectory(filePath: string): boolean { function listDirectory (line 96) | function listDirectory(dirPath: string): fs.Dirent[] { type DetectedService (line 108) | interface DetectedService { function detectLanguageAndFramework (line 118) | function detectLanguageAndFramework(serviceDir: string): DetectedService { function inferTypeFromName (line 357) | function inferTypeFromName( function detectEntryPoint (line 389) | function detectEntryPoint(serviceDir: string): string | undefined { function detectKeyDirectories (line 432) | function detectKeyDirectories( function detectDependencies (line 477) | function detectDependencies(serviceDir: string): { function detectTestDirectory (line 513) | function detectTestDirectory(serviceDir: string): string | undefined { function detectDockerfile (line 526) | function detectDockerfile(serviceDir: string, serviceName: string): stri... function analyzeService (line 546) | function analyzeService(serviceDir: string, serviceName: string): Servic... function analyzeInfrastructure (line 582) | function analyzeInfrastructure(projectDir: string): InfrastructureInfo { function parseComposeServices (line 655) | function parseComposeServices(content: string): string[] { function detectConventions (line 679) | function detectConventions(projectDir: string): ConventionsInfo { function detectProjectType (line 750) | function detectProjectType(projectDir: string): 'single' | 'monorepo' { function findAndAnalyzeServices (line 784) | function findAndAnalyzeServices( function mapDependencies (line 831) | function mapDependencies(services: Record): void { function buildProjectIndex (line 874) | function buildProjectIndex(projectDir: string): ProjectIndex { function runProjectIndexer (line 900) | function runProjectIndexer(projectDir: string, outputPath: string): Proj... FILE: apps/desktop/src/main/ai/project/stack-detector.ts function fileExistsInDir (line 21) | function fileExistsInDir(projectDir: string, ...patterns: string[]): boo... function globMatchesAny (line 38) | function globMatchesAny(projectDir: string, pattern: string): boolean { function findFileRecursive (line 65) | function findFileRecursive(dir: string, ext: string, depth: number): boo... function readJsonFile (line 86) | function readJsonFile(projectDir: string, filename: string): Record | null { method readText (line 155) | private readText(filename: string): string | null { method detectAll (line 159) | detectAll(): TechnologyStack { method detectLanguages (line 170) | detectLanguages(): void { method detectPackageManagers (line 252) | detectPackageManagers(): void { method detectDatabases (line 323) | detectDatabases(): void { method detectInfrastructure (line 374) | detectInfrastructure(): void { method detectCloudProviders (line 431) | detectCloudProviders(): void { method detectCodeQualityTools (line 483) | detectCodeQualityTools(): void { method detectVersionManagers (line 503) | detectVersionManagers(): void { FILE: apps/desktop/src/main/ai/project/types.ts type TechnologyStack (line 15) | interface TechnologyStack { function createTechnologyStack (line 26) | function createTechnologyStack(): TechnologyStack { type CustomScripts (line 43) | interface CustomScripts { function createCustomScripts (line 51) | function createCustomScripts(): CustomScripts { type ProjectSecurityProfile (line 65) | interface ProjectSecurityProfile { function createProjectSecurityProfile (line 79) | function createProjectSecurityProfile(): ProjectSecurityProfile { type SerializedSecurityProfile (line 106) | interface SerializedSecurityProfile { FILE: apps/desktop/src/main/ai/prompts/prompt-loader.ts constant EXPECTED_PROMPT_FILES (line 23) | const EXPECTED_PROMPT_FILES = [ function resolvePromptsDir (line 53) | function resolvePromptsDir(): string { function loadPrompt (line 111) | function loadPrompt(promptName: string): string { function tryLoadPrompt (line 129) | function tryLoadPrompt(promptName: string): string | null { function tryReadFile (line 144) | async function tryReadFile(filePath: string): Promise { type ProjectInstructionsResult (line 159) | interface ProjectInstructionsResult { function loadProjectInstructions (line 176) | async function loadProjectInstructions(projectDir: string): Promise { function loadAgentsMd (line 191) | async function loadAgentsMd(projectDir: string): Promise { function injectContext (line 212) | function injectContext(promptTemplate: string, context: PromptContext): ... function buildSpecLocationHeader (line 255) | function buildSpecLocationHeader(context: PromptContext): string { function getQaToolsSection (line 282) | function getQaToolsSection(capabilities: ProjectCapabilities): string { function getMcpToolFilesForCapabilities (line 307) | function getMcpToolFilesForCapabilities(capabilities: ProjectCapabilitie... function detectBaseBranch (line 342) | function detectBaseBranch(specDir: string, projectDir: string): string { function validateBranchName (line 391) | function validateBranchName(branch: string | null | undefined): string |... function loadProjectIndex (line 407) | function loadProjectIndex(projectDir: string): Record { function detectProjectCapabilities (line 421) | function detectProjectCapabilities(projectIndex: Record... function validatePromptFiles (line 520) | function validatePromptFiles(): PromptValidationResult { FILE: apps/desktop/src/main/ai/prompts/subtask-prompt-generator.ts constant WORKTREE_PATH_PATTERNS (line 30) | const WORKTREE_PATH_PATTERNS = [ function detectWorktreeIsolation (line 41) | function detectWorktreeIsolation(projectDir: string): [boolean, string |... function generateWorktreeIsolationWarning (line 59) | function generateWorktreeIsolationWarning( function getRelativeSpecPath (line 98) | function getRelativeSpecPath(specDir: string, projectDir: string): string { function generateEnvironmentContext (line 116) | function generateEnvironmentContext(projectDir: string, specDir: string)... function generatePlannerPrompt (line 159) | async function generatePlannerPrompt(config: PlannerPromptConfig): Promi... function generateSubtaskPrompt (line 215) | async function generateSubtaskPrompt(config: SubtaskPromptConfig): Promi... function loadSubtaskContext (line 386) | async function loadSubtaskContext( function formatContextForPrompt (line 441) | function formatContextForPrompt(context: SubtaskContext): string { function readFileTruncated (line 468) | async function readFileTruncated(filePath: string, maxLines: number): Pr... function validateAndResolvePath (line 486) | function validateAndResolvePath(filePath: string, projectRoot: string): ... function fuzzyFindFile (line 501) | async function fuzzyFindFile( function collectFiles (line 533) | function collectFiles( function stringSimilarity (line 578) | function stringSimilarity(a: string, b: string): number { function levenshteinDistance (line 602) | function levenshteinDistance(a: string, b: string): number { FILE: apps/desktop/src/main/ai/prompts/types.ts type PromptContext (line 14) | interface PromptContext { type ProjectCapabilities (line 42) | interface ProjectCapabilities { type SubtaskPromptInfo (line 68) | interface SubtaskPromptInfo { type SubtaskVerification (line 90) | interface SubtaskVerification { type PlannerPromptConfig (line 108) | interface PlannerPromptConfig { type SubtaskPromptConfig (line 126) | interface SubtaskPromptConfig { type SubtaskContext (line 148) | interface SubtaskContext { type QAPromptConfig (line 162) | interface QAPromptConfig { type PromptValidationResult (line 182) | interface PromptValidationResult { FILE: apps/desktop/src/main/ai/providers/factory.ts function isOAuthToken (line 36) | function isOAuthToken(token: string | undefined): boolean { function createProviderInstance (line 49) | function createProviderInstance(config: ProviderConfig) { function isCodexModel (line 174) | function isCodexModel(modelId: string): boolean { type CreateProviderOptions (line 183) | interface CreateProviderOptions { function createProvider (line 204) | function createProvider(options: CreateProviderOptions): LanguageModel { function detectProviderFromModel (line 240) | function detectProviderFromModel(modelId: string): SupportedProvider | u... function createProviderFromModelId (line 258) | function createProviderFromModelId( FILE: apps/desktop/src/main/ai/providers/oauth-fetch.ts constant DEBUG (line 17) | const DEBUG = process.env.DEBUG === 'true' || process.argv.includes('--d... function debugLog (line 19) | function debugLog(message: string, data?: unknown): void { type OAuthProviderSpec (line 33) | interface OAuthProviderSpec { constant CODEX_API_ENDPOINT (line 42) | const CODEX_API_ENDPOINT = 'https://chatgpt.com/backend-api/codex/respon... constant OAUTH_PROVIDER_REGISTRY (line 44) | const OAUTH_PROVIDER_REGISTRY: Record = { type StoredTokens (line 63) | interface StoredTokens { constant REFRESH_THRESHOLD_MS (line 70) | const REFRESH_THRESHOLD_MS = 5 * 60 * 1000; function readTokenFile (line 72) | function readTokenFile(tokenFilePath: string): StoredTokens | null { function writeTokenFile (line 84) | function writeTokenFile(tokenFilePath: string, tokens: StoredTokens): vo... function refreshOAuthToken (line 104) | async function refreshOAuthToken( function detectProvider (line 172) | function detectProvider(provider?: string): OAuthProviderSpec | undefined { function ensureValidOAuthToken (line 186) | async function ensureValidOAuthToken( function createOAuthProviderFetch (line 233) | function createOAuthProviderFetch( FILE: apps/desktop/src/main/ai/providers/registry.ts type RegistryConfig (line 31) | interface RegistryConfig { function createProviderSDKInstance (line 45) | function createProviderSDKInstance( function buildRegistry (line 124) | function buildRegistry(config: RegistryConfig) { type ProviderRegistry (line 146) | type ProviderRegistry = ReturnType; function resolveModel (line 157) | function resolveModel( FILE: apps/desktop/src/main/ai/providers/transforms.ts type ThinkingConfig (line 26) | interface ThinkingConfig { function isAdaptiveModel (line 46) | function isAdaptiveModel(modelId: string): boolean { function getThinkingKwargsForModel (line 62) | function getThinkingKwargsForModel( function transformThinkingConfig (line 90) | function transformThinkingConfig( constant ANTHROPIC_TOOL_ID_RE (line 125) | const ANTHROPIC_TOOL_ID_RE = /^[a-zA-Z0-9_-]+$/; constant OPENAI_TOOL_ID_MAX_LENGTH (line 128) | const OPENAI_TOOL_ID_MAX_LENGTH = 64; function normalizeToolId (line 142) | function normalizeToolId(provider: SupportedProvider, toolId: string): s... constant PROMPT_CACHE_THRESHOLDS (line 178) | const PROMPT_CACHE_THRESHOLDS = { type CacheableContentType (line 192) | type CacheableContentType = 'toolDefinitions' | 'systemPrompt' | 'firstB... function meetsCacheThreshold (line 202) | function meetsCacheThreshold( function getCacheBreakpoints (line 226) | function getCacheBreakpoints( constant VALID_THINKING_LEVELS (line 253) | const VALID_THINKING_LEVELS: ReadonlySet = new Set(['low', 'medi... constant LEGACY_THINKING_LEVEL_MAP (line 256) | const LEGACY_THINKING_LEVEL_MAP: Record = { function sanitizeThinkingLevel (line 272) | function sanitizeThinkingLevel(thinkingLevel: string): ThinkingLevel { FILE: apps/desktop/src/main/ai/providers/types.ts type SupportedProvider (line 26) | type SupportedProvider = (typeof SupportedProvider)[keyof typeof Support... type ProviderConfig (line 32) | interface ProviderConfig { type ModelResolution (line 52) | interface ModelResolution { type ProviderCapabilities (line 64) | interface ProviderCapabilities { FILE: apps/desktop/src/main/ai/runners/__tests__/changelog.test.ts function makeMockClient (line 33) | function makeMockClient(systemPrompt = 'You are a technical writer.') { function baseConfig (line 37) | function baseConfig(overrides: Partial = {}): Changelog... FILE: apps/desktop/src/main/ai/runners/__tests__/commit-message.test.ts function makeMockClient (line 52) | function makeMockClient(systemPrompt = 'You are a Git expert.') { function baseConfig (line 56) | function baseConfig(overrides: Partial = {}): Commi... FILE: apps/desktop/src/main/ai/runners/__tests__/ideation.test.ts function makeMockClient (line 49) | function makeMockClient() { function makeStream (line 61) | function makeStream(parts: Array>) { function baseConfig (line 71) | function baseConfig(overrides: Partial = {}): IdeationCo... FILE: apps/desktop/src/main/ai/runners/__tests__/insight-extractor.test.ts function makeMockClient (line 50) | function makeMockClient() { function makeValidOutput (line 54) | function makeValidOutput() { function baseConfig (line 70) | function baseConfig(overrides: Partial = {}): I... FILE: apps/desktop/src/main/ai/runners/__tests__/insights.test.ts function makeMockClient (line 72) | function makeMockClient(systemPrompt = 'You are an AI assistant.') { function makeStream (line 81) | function makeStream(parts: Array>) { function baseConfig (line 91) | function baseConfig(overrides: Partial = {}): InsightsCo... FILE: apps/desktop/src/main/ai/runners/__tests__/merge-resolver.test.ts function makeMockClient (line 32) | function makeMockClient(systemPrompt = 'Resolve merge conflicts.') { function baseConfig (line 36) | function baseConfig(overrides: Partial = {}): Merge... FILE: apps/desktop/src/main/ai/runners/__tests__/roadmap.test.ts function makeMockClient (line 71) | function makeMockClient() { function makeStream (line 80) | function makeStream(parts: Array>) { constant VALID_DISCOVERY_JSON (line 91) | const VALID_DISCOVERY_JSON = JSON.stringify({ constant VALID_ROADMAP_JSON (line 101) | const VALID_ROADMAP_JSON = JSON.stringify({ function baseConfig (line 124) | function baseConfig(overrides: Partial = {}): RoadmapConf... FILE: apps/desktop/src/main/ai/runners/changelog.ts type ChangelogTask (line 24) | interface ChangelogTask { type ChangelogConfig (line 36) | interface ChangelogConfig { type ChangelogResult (line 56) | interface ChangelogResult { constant SYSTEM_PROMPT (line 69) | const SYSTEM_PROMPT = `You are a technical writer who creates clear, pro... function buildChangelogPrompt (line 84) | function buildChangelogPrompt(config: ChangelogConfig): string { function generateChangelog (line 123) | async function generateChangelog( FILE: apps/desktop/src/main/ai/runners/commit-message.ts constant CATEGORY_TO_COMMIT_TYPE (line 29) | const CATEGORY_TO_COMMIT_TYPE: Record = { constant SYSTEM_PROMPT (line 48) | const SYSTEM_PROMPT = `You are a Git expert who writes clear, concise co... type SpecContext (line 73) | interface SpecContext { type CommitMessageConfig (line 81) | interface CommitMessageConfig { function getSpecContext (line 106) | function getSpecContext(specDir: string): SpecContext { function buildPrompt (line 171) | function buildPrompt( function generateCommitMessage (line 225) | async function generateCommitMessage( FILE: apps/desktop/src/main/ai/runners/github/batch-processor.ts type BatchSuggestion (line 23) | interface BatchSuggestion { type BatchStatus (line 31) | type BatchStatus = type IssueBatch (line 39) | interface IssueBatch { type BatchResult (line 50) | interface BatchResult { type BatchProcessorConfig (line 59) | interface BatchProcessorConfig { type BatchProgressUpdate (line 71) | interface BatchProgressUpdate { type BatchProgressCallback (line 78) | type BatchProgressCallback = (update: BatchProgressUpdate) => void; function fallbackBatches (line 85) | function fallbackBatches(issues: GitHubIssue[]): BatchSuggestion[] { function parseJsonResponse (line 95) | function parseJsonResponse(text: string): unknown { function analyzeAndBatchIssues (line 126) | async function analyzeAndBatchIssues( class Semaphore (line 223) | class Semaphore { method constructor (line 227) | constructor(limit: number) { method acquire (line 231) | async acquire(): Promise { method release (line 240) | release(): void { method use (line 249) | async use(fn: () => Promise): Promise { class BatchProcessor (line 271) | class BatchProcessor { method constructor (line 274) | constructor(config: BatchProcessorConfig = {}) { method groupIssues (line 289) | async groupIssues(issues: GitHubIssue[]): Promise { method buildBatches (line 296) | buildBatches(issues: GitHubIssue[], suggestions: BatchSuggestion[]): I... method processBatches (line 323) | async processBatches( method processIndividually (line 407) | async processIndividually( FILE: apps/desktop/src/main/ai/runners/github/bot-detector.ts type BotDetectionStateData (line 25) | interface BotDetectionStateData { type PRData (line 32) | interface PRData { type CommitData (line 38) | interface CommitData { constant COOLING_OFF_MINUTES (line 51) | const COOLING_OFF_MINUTES = 1; constant IN_PROGRESS_TIMEOUT_MINUTES (line 54) | const IN_PROGRESS_TIMEOUT_MINUTES = 30; constant STATE_FILE (line 57) | const STATE_FILE = 'bot_detection_state.json'; class BotDetectionState (line 63) | class BotDetectionState { method constructor (line 68) | constructor(data: Partial = {}) { method toJSON (line 74) | toJSON(): BotDetectionStateData { method fromJSON (line 82) | static fromJSON(data: BotDetectionStateData): BotDetectionState { method save (line 86) | save(stateDir: string): void { method load (line 92) | static load(stateDir: string): BotDetectionState { type BotDetectorConfig (line 111) | interface BotDetectorConfig { class BotDetector (line 123) | class BotDetector { method constructor (line 129) | constructor(config: BotDetectorConfig) { method isBotPr (line 137) | isBotPr(prData: PRData): boolean { method isBotCommit (line 144) | isBotCommit(commitData: CommitData): boolean { method getLastCommitSha (line 152) | getLastCommitSha(commits: CommitData[]): string | undefined { method isWithinCoolingOff (line 159) | isWithinCoolingOff(prNumber: number): [boolean, string] { method hasReviewedCommit (line 182) | hasReviewedCommit(prNumber: number, commitSha: string): boolean { method isReviewInProgress (line 188) | isReviewInProgress(prNumber: number): [boolean, string] { method markReviewStarted (line 213) | markReviewStarted(prNumber: number): void { method markReviewFinished (line 223) | markReviewFinished(prNumber: number, success = true): void { method markReviewed (line 236) | markReviewed(prNumber: number, commitSha: string): void { method shouldSkipPrReview (line 261) | shouldSkipPrReview( method reloadState (line 300) | reloadState(): void { method resetState (line 305) | resetState(): void { FILE: apps/desktop/src/main/ai/runners/github/duplicate-detector.ts constant DUPLICATE_THRESHOLD (line 18) | const DUPLICATE_THRESHOLD = 0.85; constant SIMILAR_THRESHOLD (line 21) | const SIMILAR_THRESHOLD = 0.70; type GitHubIssue (line 27) | interface GitHubIssue { type EntityExtraction (line 36) | interface EntityExtraction { type SimilarityResult (line 44) | interface SimilarityResult { type DuplicateGroup (line 56) | interface DuplicateGroup { constant ERROR_CODE_RE (line 66) | const ERROR_CODE_RE = /\b(?:E|ERR|ERROR|WARN|WARNING|FATAL)[-_]?\d{3,5}\... constant FILE_PATH_RE (line 67) | const FILE_PATH_RE = /(?:^|\s|["'`])([a-zA-Z0-9_./-]+\.[a-zA-Z]{1,5})(?:... constant FUNCTION_NAME_RE (line 68) | const FUNCTION_NAME_RE = /\b([a-zA-Z_][a-zA-Z0-9_]*)\s*\(|\bfunction\s+(... constant URL_RE (line 69) | const URL_RE = /https?:\/\/[^\s<>"')]+/gi; constant VERSION_RE (line 70) | const VERSION_RE = /\bv?\d+\.\d+(?:\.\d+)?(?:-[a-zA-Z0-9.]+)?\b/g; function extractEntities (line 72) | function extractEntities(content: string): EntityExtraction { function tokenize (line 101) | function tokenize(text: string): Map { function cosineSimilarity (line 111) | function cosineSimilarity(a: Map, b: Map... function jaccardSimilarity (line 133) | function jaccardSimilarity(a: string[], b: string[]): number { class DuplicateDetector (line 155) | class DuplicateDetector { method compareIssues (line 159) | compareIssues(issueA: GitHubIssue, issueB: GitHubIssue): SimilarityRes... method findDuplicateGroups (line 216) | findDuplicateGroups(issues: GitHubIssue[]): DuplicateGroup[] { method deduplicateIssues (line 260) | deduplicateIssues(issues: GitHubIssue[]): { method findDuplicateOf (line 284) | findDuplicateOf( FILE: apps/desktop/src/main/ai/runners/github/parallel-followup.ts type PreviousReviewResult (line 43) | interface PreviousReviewResult { type FollowupReviewContext (line 51) | interface FollowupReviewContext { type FollowupReviewResult (line 68) | interface FollowupReviewResult { type FollowupReviewerConfig (line 86) | interface FollowupReviewerConfig { constant SEVERITY_MAP (line 97) | const SEVERITY_MAP: Record = { function mapSeverity (line 104) | function mapSeverity(s: string): PRReviewFinding['severity'] { constant CATEGORY_MAP (line 108) | const CATEGORY_MAP: Record = { function mapCategory (line 118) | function mapCategory(c: string): PRReviewFinding['category'] { function generateFindingId (line 122) | function generateFindingId(file: string, line: number, title: string): s... function parseJsonResponse (line 132) | function parseJsonResponse(text: string): unknown { function formatPreviousFindings (line 147) | function formatPreviousFindings(context: FollowupReviewContext): string { function formatCommits (line 158) | function formatCommits(context: FollowupReviewContext): string { function formatComments (line 173) | function formatComments(context: FollowupReviewContext): string { function formatCIStatus (line 187) | function formatCIStatus(context: FollowupReviewContext): string { function buildResolutionVerifierPrompt (line 217) | function buildResolutionVerifierPrompt(context: FollowupReviewContext): ... function buildNewCodeReviewerPrompt (line 251) | function buildNewCodeReviewerPrompt(context: FollowupReviewContext): str... function buildCommentAnalyzerPrompt (line 286) | function buildCommentAnalyzerPrompt(context: FollowupReviewContext): str... class ParallelFollowupReviewer (line 327) | class ParallelFollowupReviewer { method constructor (line 331) | constructor(config: FollowupReviewerConfig, progressCallback?: Progres... method reportProgress (line 336) | private reportProgress(update: ProgressUpdate): void { method review (line 343) | async review( method runSpecialist (line 604) | private async runSpecialist( method deduplicateFindings (line 652) | private deduplicateFindings(findings: PRReviewFinding[]): PRReviewFind... method determineVerdict (line 665) | private determineVerdict( method buildVerdictReasoning (line 678) | private buildVerdictReasoning( method generateSummary (line 693) | private generateSummary( FILE: apps/desktop/src/main/ai/runners/github/parallel-orchestrator.ts type MergeVerdict (line 63) | type MergeVerdict = (typeof MergeVerdict)[keyof typeof MergeVerdict]; type SpecialistConfig (line 66) | interface SpecialistConfig { type ParallelOrchestratorResult (line 74) | interface ParallelOrchestratorResult { type ParallelOrchestratorConfig (line 85) | interface ParallelOrchestratorConfig { constant SPECIALIST_CONFIGS (line 97) | const SPECIALIST_CONFIGS: SpecialistConfig[] = [ constant SEVERITY_MAP (line 128) | const SEVERITY_MAP: Record = { constant CATEGORY_MAP (line 135) | const CATEGORY_MAP: Record = { function mapSeverity (line 145) | function mapSeverity(s: string): PRReviewFinding['severity'] { function mapCategory (line 149) | function mapCategory(c: string): PRReviewFinding['category'] { function generateFindingId (line 153) | function generateFindingId(file: string, line: number, title: string): s... function buildPRContextMessage (line 167) | function buildPRContextMessage(context: PRContext): string { function parseSpecialistOutput (line 223) | function parseSpecialistOutput( function buildSynthesisPrompt (line 264) | function buildSynthesisPrompt( function buildGenerateTextOptions (line 318) | function buildGenerateTextOptions( class ParallelOrchestratorReviewer (line 352) | class ParallelOrchestratorReviewer { method constructor (line 358) | constructor(config: ParallelOrchestratorConfig, progressCallback?: Pro... method reportProgress (line 365) | private reportProgress(update: ProgressUpdate): void { method review (line 378) | async review( method runSpecialist (line 501) | private async runSpecialist( method crossValidateFindings (line 638) | private crossValidateFindings( method runFindingValidator (line 690) | private async runFindingValidator( method synthesizeFindings (line 877) | private async synthesizeFindings( method deduplicateFindings (line 977) | private deduplicateFindings(findings: PRReviewFinding[]): PRReviewFind... method generateSummary (line 993) | private generateSummary( FILE: apps/desktop/src/main/ai/runners/github/pr-creator.ts constant SYSTEM_PROMPT (line 30) | const SYSTEM_PROMPT = `You are a senior software engineer writing a GitH... type CreatePRConfig (line 51) | interface CreatePRConfig { type CreatePRResult (line 77) | interface CreatePRResult { function gatherPRContext (line 92) | function gatherPRContext( function extractSpecSummary (line 143) | function extractSpecSummary(projectDir: string, specId: string): string { function generatePRBody (line 167) | async function generatePRBody( function pushBranch (line 219) | function pushBranch( function getExistingPRUrl (line 246) | function getExistingPRUrl( function createPR (line 284) | async function createPR(config: CreatePRConfig): Promise { FILE: apps/desktop/src/main/ai/runners/github/pr-review-engine.ts type ReviewPass (line 45) | type ReviewPass = (typeof ReviewPass)[keyof typeof ReviewPass]; type ReviewSeverity (line 55) | type ReviewSeverity = (typeof ReviewSeverity)[keyof typeof ReviewSeverity]; type ReviewCategory (line 69) | type ReviewCategory = (typeof ReviewCategory)[keyof typeof ReviewCategory]; type AICommentVerdict (line 81) | type AICommentVerdict = (typeof AICommentVerdict)[keyof typeof AIComment... type PRReviewFinding (line 84) | interface PRReviewFinding { type AICommentTriage (line 108) | interface AICommentTriage { type StructuralIssue (line 118) | interface StructuralIssue { type ChangedFile (line 129) | interface ChangedFile { type AIBotComment (line 138) | interface AIBotComment { type PRContext (line 149) | interface PRContext { type ScanResult (line 170) | interface ScanResult { type ProgressUpdate (line 178) | interface ProgressUpdate { type ProgressCallback (line 186) | type ProgressCallback = (update: ProgressUpdate) => void; type PRReviewEngineConfig (line 189) | interface PRReviewEngineConfig { type MultiPassReviewResult (line 198) | interface MultiPassReviewResult { constant REVIEW_PASS_PROMPTS (line 209) | const REVIEW_PASS_PROMPTS: Record = { function parseScanResult (line 291) | function parseScanResult(text: string): ScanResult { function parseFindings (line 297) | function parseFindings(text: string): PRReviewFinding[] { function parseStructuralIssues (line 303) | function parseStructuralIssues(text: string): StructuralIssue[] { function parseAICommentTriages (line 309) | function parseAICommentTriages(text: string): AICommentTriage[] { function formatChangedFiles (line 319) | function formatChangedFiles(files: ChangedFile[], limit = 20): string { function formatCommits (line 330) | function formatCommits(commits: Array>): string { function buildDiffContent (line 345) | function buildDiffContent(context: PRContext): { diff: string; warning: ... function buildReviewContext (line 373) | function buildReviewContext(context: PRContext): string { function buildAICommentsContext (line 399) | function buildAICommentsContext(context: PRContext): string { function needsDeepAnalysis (line 448) | function needsDeepAnalysis(scanResult: ScanResult, context: PRContext): ... function deduplicateFindings (line 462) | function deduplicateFindings(findings: PRReviewFinding[]): PRReviewFindi... function runReviewPass (line 480) | async function runReviewPass( function runStructuralPass (line 548) | async function runStructuralPass( function runAITriagePass (line 581) | async function runAITriagePass( function runMultiPassReview (line 620) | async function runMultiPassReview( FILE: apps/desktop/src/main/ai/runners/github/rate-limiter.ts class RateLimitExceeded (line 18) | class RateLimitExceeded extends Error { method constructor (line 19) | constructor(message: string) { class CostLimitExceeded (line 25) | class CostLimitExceeded extends Error { method constructor (line 26) | constructor(message: string) { class TokenBucket (line 43) | class TokenBucket { method constructor (line 47) | constructor( method refill (line 55) | private refill(): void { method tryAcquire (line 64) | tryAcquire(tokens = 1): boolean { method acquire (line 77) | async acquire(tokens = 1, timeoutMs?: number): Promise { method available (line 95) | available(): number { method timeUntilAvailableMs (line 101) | timeUntilAvailableMs(tokens = 1): number { constant AI_PRICING (line 114) | const AI_PRICING: Record = { type CostOperation (line 121) | interface CostOperation { class CostTracker (line 131) | class CostTracker { method constructor (line 135) | constructor(private readonly costLimit: number = 10.0) {} method calculateCost (line 138) | static calculateCost(inputTokens: number, outputTokens: number, model:... method addOperation (line 149) | addOperation( method total (line 176) | get total(): number { method remainingBudget (line 180) | get remainingBudget(): number { method usageReport (line 184) | usageReport(): string { type RateLimiterConfig (line 215) | interface RateLimiterConfig { class RateLimiter (line 234) | class RateLimiter { method constructor (line 245) | private constructor(config: Required) { method getInstance (line 252) | static getInstance(config: RateLimiterConfig = {}): RateLimiter { method resetInstance (line 265) | static resetInstance(): void { method acquireGithub (line 273) | async acquireGithub(timeoutMs?: number): Promise { method checkGithubAvailable (line 281) | checkGithubAvailable(): { available: boolean; message: string } { method trackAiCost (line 297) | trackAiCost( method withGithubRetry (line 313) | async withGithubRetry(operation: () => Promise, maxRetries = 3):... method getStats (line 342) | getStats(): { function sleep (line 365) | function sleep(ms: number): Promise { FILE: apps/desktop/src/main/ai/runners/github/triage-engine.ts type TriageCategory (line 34) | type TriageCategory = (typeof TriageCategory)[keyof typeof TriageCategory]; type TriageResult (line 37) | interface TriageResult { type GitHubIssue (line 54) | interface GitHubIssue { type TriageEngineConfig (line 64) | interface TriageEngineConfig { type TriageProgressUpdate (line 72) | interface TriageProgressUpdate { type TriageProgressCallback (line 78) | type TriageProgressCallback = (update: TriageProgressUpdate) => void; constant TRIAGE_SYSTEM_PROMPT (line 84) | const TRIAGE_SYSTEM_PROMPT = constant TRIAGE_PROMPT (line 87) | const TRIAGE_PROMPT = `Analyze the following GitHub issue and triage it. function buildTriageContext (line 121) | function buildTriageContext(issue: GitHubIssue, allIssues: GitHubIssue[]... function parseTriageResult (line 168) | function parseTriageResult( function triageSingleIssue (line 218) | async function triageSingleIssue( function triageBatchIssues (line 283) | async function triageBatchIssues( FILE: apps/desktop/src/main/ai/runners/gitlab/mr-review-engine.ts type ReviewSeverity (line 31) | type ReviewSeverity = (typeof ReviewSeverity)[keyof typeof ReviewSeverity]; type ReviewCategory (line 44) | type ReviewCategory = (typeof ReviewCategory)[keyof typeof ReviewCategory]; type MergeVerdict (line 54) | type MergeVerdict = (typeof MergeVerdict)[keyof typeof MergeVerdict]; type MRReviewFinding (line 57) | interface MRReviewFinding { type MRContext (line 71) | interface MRContext { type MRProgressUpdate (line 85) | interface MRProgressUpdate { type MRProgressCallback (line 92) | type MRProgressCallback = (update: MRProgressUpdate) => void; type MRReviewEngineConfig (line 95) | interface MRReviewEngineConfig { function sanitizeUserContent (line 109) | function sanitizeUserContent(content: string, maxLength = 100_000): stri... constant MR_REVIEW_PROMPT (line 129) | const MR_REVIEW_PROMPT = `You are a senior code reviewer analyzing a Git... class MRReviewEngine (line 177) | class MRReviewEngine { method constructor (line 181) | constructor(config: MRReviewEngineConfig, progressCallback?: MRProgres... method reportProgress (line 186) | private reportProgress(phase: string, progress: number, message: strin... method runReview (line 195) | async runReview( method parseReviewResult (line 281) | private parseReviewResult(resultText: string): { method generateSummary (line 339) | generateSummary( FILE: apps/desktop/src/main/ai/runners/ideation.ts constant IDEATION_TYPES (line 28) | const IDEATION_TYPES = [ type IdeationType (line 37) | type IdeationType = (typeof IDEATION_TYPES)[number]; constant IDEATION_TYPE_LABELS (line 40) | const IDEATION_TYPE_LABELS: Record = { constant IDEATION_TYPE_PROMPTS (line 50) | const IDEATION_TYPE_PROMPTS: Record = { type IdeationConfig (line 64) | interface IdeationConfig { type IdeationResult (line 84) | interface IdeationResult { type IdeationStreamCallback (line 94) | type IdeationStreamCallback = (event: IdeationStreamEvent) => void; type IdeationStreamEvent (line 97) | type IdeationStreamEvent = function runIdeation (line 116) | async function runIdeation( FILE: apps/desktop/src/main/ai/runners/insight-extractor.ts constant DEFAULT_MODEL (line 29) | const DEFAULT_MODEL: ModelShorthand = 'haiku'; constant MAX_DIFF_CHARS (line 32) | const MAX_DIFF_CHARS = 15000; constant MAX_ATTEMPTS_TO_INCLUDE (line 35) | const MAX_ATTEMPTS_TO_INCLUDE = 3; type InsightExtractionConfig (line 42) | interface InsightExtractionConfig { type AttemptRecord (line 66) | interface AttemptRecord { type ExtractedInsights (line 73) | interface ExtractedInsights { type FileInsight (line 92) | interface FileInsight { type ApproachOutcome (line 99) | interface ApproachOutcome { constant SYSTEM_PROMPT (line 111) | const SYSTEM_PROMPT = function buildExtractionPrompt (line 119) | function buildExtractionPrompt(config: InsightExtractionConfig): string { function formatAttemptHistory (line 167) | function formatAttemptHistory(attempts: AttemptRecord[]): string { function parseInsights (line 193) | function parseInsights(responseText: string): Record | ... function getGenericInsights (line 205) | function getGenericInsights(subtaskId: string, success: boolean): Extrac... function extractSessionInsights (line 238) | async function extractSessionInsights( FILE: apps/desktop/src/main/ai/runners/insights.ts type InsightsMessage (line 32) | interface InsightsMessage { type InsightsConfig (line 38) | interface InsightsConfig { type InsightsResult (line 54) | interface InsightsResult { type TaskSuggestion (line 64) | interface TaskSuggestion { type ToolCallInfo (line 75) | interface ToolCallInfo { type InsightsStreamCallback (line 81) | type InsightsStreamCallback = (event: InsightsStreamEvent) => void; type InsightsStreamEvent (line 84) | type InsightsStreamEvent = function loadProjectContext (line 98) | function loadProjectContext(projectDir: string): string { function buildSystemPrompt (line 159) | function buildSystemPrompt(projectDir: string): string { constant TASK_SUGGESTION_PREFIX (line 188) | const TASK_SUGGESTION_PREFIX = '__TASK_SUGGESTION__:'; function extractTaskSuggestion (line 193) | function extractTaskSuggestion(text: string): TaskSuggestion | null { function runInsightsQuery (line 221) | async function runInsightsQuery( function extractToolInput (line 339) | function extractToolInput(args: Record): string { FILE: apps/desktop/src/main/ai/runners/merge-resolver.ts type MergeResolverConfig (line 24) | interface MergeResolverConfig { type MergeResolverResult (line 36) | interface MergeResolverResult { type MergeResolverCallFn (line 46) | type MergeResolverCallFn = (system: string, user: string) => Promise void; type RoadmapStreamEvent (line 84) | type RoadmapStreamEvent = function runDiscoveryPhase (line 99) | async function runDiscoveryPhase( function runFeaturesPhase (line 213) | async function runFeaturesPhase( function loadPreservedFeatures (line 366) | function loadPreservedFeatures(roadmapFile: string): Record; type ValidatedPlanPhase (line 273) | type ValidatedPlanPhase = z.infer; type ValidatedImplementationPlan (line 274) | type ValidatedImplementationPlan = z.infer; type ValidatedTaskSuggestion (line 109) | type ValidatedTaskSuggestion = z.infer; FILE: apps/desktop/src/main/ai/schema/output/complexity-assessment.output.ts type ComplexityAssessmentOutput (line 25) | type ComplexityAssessmentOutput = z.infer; type SubtaskOutput (line 37) | type SubtaskOutput = z.infer; FILE: apps/desktop/src/main/ai/schema/output/index.ts function getOutputSchemaForAgent (line 70) | function getOutputSchemaForAgent(agentType: string): ZodSchema | undefin... FILE: apps/desktop/src/main/ai/schema/output/insight-extractor.output.ts type ExtractedInsightsOutput (line 36) | type ExtractedInsightsOutput = z.infer; type ReviewFindingsOutput (line 54) | type ReviewFindingsOutput = z.infer; type StructuralIssuesOutput (line 75) | type StructuralIssuesOutput = z.infer; type AICommentTriagesOutput (line 95) | type AICommentTriagesOutput = z.infer; type SpecialistOutputOutput (line 107) | type SpecialistOutputOutput = z.infer; type SynthesisResultOutput (line 122) | type SynthesisResultOutput = z.infer; type FindingValidationsOutput (line 140) | type FindingValidationsOutput = z.infer; FILE: apps/desktop/src/main/ai/schema/output/qa-signoff.output.ts type QASignoffOutput (line 25) | type QASignoffOutput = z.infer; type QAIssueOutput (line 26) | type QAIssueOutput = z.infer; FILE: apps/desktop/src/main/ai/schema/output/triage.output.ts type TriageResultOutput (line 36) | type TriageResultOutput = z.infer; FILE: apps/desktop/src/main/ai/schema/pr-review.ts function coerceScanResult (line 18) | function coerceScanResult(input: unknown): unknown { type ValidatedScanResult (line 38) | type ValidatedScanResult = z.infer; function coerceReviewFinding (line 44) | function coerceReviewFinding(input: unknown): unknown { type ValidatedReviewFinding (line 77) | type ValidatedReviewFinding = z.infer; type ValidatedReviewFindingsArray (line 103) | type ValidatedReviewFindingsArray = z.infer; function coerceAICommentTriage (line 139) | function coerceAICommentTriage(input: unknown): unknown { type ValidatedAICommentTriage (line 168) | type ValidatedAICommentTriage = z.infer; function coerceMRReviewResult (line 174) | function coerceMRReviewResult(input: unknown): unknown { type ValidatedMRReviewResult (line 202) | type ValidatedMRReviewResult = z.infer; function coerceSynthesisResult (line 208) | function coerceSynthesisResult(input: unknown): unknown { type ValidatedSynthesisResult (line 236) | type ValidatedSynthesisResult = z.infer; function coerceVerificationItem (line 242) | function coerceVerificationItem(input: unknown): unknown { type ValidatedVerificationItem (line 262) | type ValidatedVerificationItem = z.infer; type ValidatedResolutionVerification (line 268) | type ValidatedResolutionVerification = z.infer; function coerceFindingValidationResult (line 292) | function coerceFindingValidationResult(input: unknown): unknown { type ValidatedFindingValidation (line 328) | type ValidatedFindingValidation = z.infer; type ValidatedQAIssue (line 109) | type ValidatedQAIssue = z.infer; FILE: apps/desktop/src/main/ai/schema/structured-output.ts function parseLLMJson (line 46) | function parseLLMJson(text: string, schema: ZodSchema): T | null { type StructuredOutputValidation (line 69) | interface StructuredOutputValidation { function validateStructuredOutput (line 88) | function validateStructuredOutput( function validateJsonFile (line 113) | async function validateJsonFile( function validateAndNormalizeJsonFile (line 154) | async function validateAndNormalizeJsonFile( function formatZodErrors (line 190) | function formatZodErrors(error: ZodError): string[] { function buildValidationRetryPrompt (line 231) | function buildValidationRetryPrompt( constant MAX_REPAIR_ATTEMPTS (line 273) | const MAX_REPAIR_ATTEMPTS = 2; function repairJsonWithLLM (line 294) | async function repairJsonWithLLM( constant IMPLEMENTATION_PLAN_SCHEMA_HINT (line 368) | const IMPLEMENTATION_PLAN_SCHEMA_HINT = `\`\`\` FILE: apps/desktop/src/main/ai/schema/triage.ts function coerceTriageResult (line 21) | function coerceTriageResult(input: unknown): unknown { type ValidatedTriageResult (line 65) | type ValidatedTriageResult = z.infer; FILE: apps/desktop/src/main/ai/security/bash-validator.ts type ValidationResult (line 49) | type ValidationResult = [boolean, string]; type ValidatorFunction (line 52) | type ValidatorFunction = (commandSegment: string) => ValidationResult; type SecurityProfile (line 60) | interface SecurityProfile { type HookInputData (line 72) | interface HookInputData { type HookDenyResult (line 79) | interface HookDenyResult { type HookResult (line 88) | type HookResult = Record | HookDenyResult; constant VALIDATORS (line 101) | const VALIDATORS: Record = { function getValidator (line 133) | function getValidator( function isCommandAllowed (line 151) | function isCommandAllowed( function bashSecurityHook (line 169) | function bashSecurityHook( function validateCommand (line 269) | function validateCommand( FILE: apps/desktop/src/main/ai/security/command-parser.ts constant SHELL_KEYWORDS (line 16) | const SHELL_KEYWORDS = new Set([ constant SHELL_OPERATORS (line 33) | const SHELL_OPERATORS = new Set(['|', '||', '&&', '&']); constant SHELL_STRUCTURE_TOKENS (line 35) | const SHELL_STRUCTURE_TOKENS = new Set([ constant REDIRECT_TOKENS (line 57) | const REDIRECT_TOKENS = new Set(['<<', '<<<', '>>', '>', '<', '2>', '2>&... function crossPlatformBasename (line 65) | function crossPlatformBasename(filePath: string): string { function containsWindowsPath (line 85) | function containsWindowsPath(commandString: string): boolean { function shlexSplit (line 98) | function shlexSplit(input: string): string[] { function fallbackExtractCommands (line 188) | function fallbackExtractCommands(commandString: string): string[] { function splitCommandSegments (line 239) | function splitCommandSegments(commandString: string): string[] { function extractCommands (line 267) | function extractCommands(commandString: string): string[] { function getCommandForValidation (line 347) | function getCommandForValidation(cmd: string, segments: string[]): string { FILE: apps/desktop/src/main/ai/security/denylist.ts type ValidationResult (line 18) | type ValidationResult = [boolean, string]; constant BLOCKED_COMMANDS (line 23) | const BLOCKED_COMMANDS: Set = new Set([ function isCommandBlocked (line 79) | function isCommandBlocked(command: string): ValidationResult { FILE: apps/desktop/src/main/ai/security/path-containment.ts type PathContainmentResult (line 24) | interface PathContainmentResult { function normalizePath (line 41) | function normalizePath(filePath: string, projectDir: string): string { function resolveSymlinks (line 58) | function resolveSymlinks(filePath: string): string { function assertPathContained (line 87) | function assertPathContained( function isPathContained (line 134) | function isPathContained( FILE: apps/desktop/src/main/ai/security/secret-scanner.ts constant GENERIC_PATTERNS (line 19) | const GENERIC_PATTERNS: Array<[RegExp, string]> = [ constant SERVICE_PATTERNS (line 47) | const SERVICE_PATTERNS: Array<[RegExp, string]> = [ constant PRIVATE_KEY_PATTERNS (line 111) | const PRIVATE_KEY_PATTERNS: Array<[RegExp, string]> = [ constant DATABASE_PATTERNS (line 124) | const DATABASE_PATTERNS: Array<[RegExp, string]> = [ constant ALL_PATTERNS (line 148) | const ALL_PATTERNS: Array<[RegExp, string]> = [ type SecretMatch (line 160) | interface SecretMatch { constant DEFAULT_IGNORE_PATTERNS (line 173) | const DEFAULT_IGNORE_PATTERNS: RegExp[] = [ constant BINARY_EXTENSIONS (line 197) | const BINARY_EXTENSIONS = new Set([ constant FALSE_POSITIVE_PATTERNS (line 208) | const FALSE_POSITIVE_PATTERNS: RegExp[] = [ function loadSecretsIgnore (line 236) | function loadSecretsIgnore(projectDir: string): RegExp[] { function shouldSkipFile (line 262) | function shouldSkipFile( function isFalsePositive (line 285) | function isFalsePositive(line: string, matchedText: string): boolean { function maskSecret (line 315) | function maskSecret(text: string, visibleChars = 8): string { function scanContent (line 325) | function scanContent( function scanFiles (line 372) | function scanFiles( FILE: apps/desktop/src/main/ai/security/security-profile.ts constant PROFILE_FILENAME (line 26) | const PROFILE_FILENAME = '.auto-claude-security.json'; constant ALLOWLIST_FILENAME (line 27) | const ALLOWLIST_FILENAME = '.auto-claude-allowlist'; function getProfilePath (line 42) | function getProfilePath(projectDir: string): string { function getAllowlistPath (line 46) | function getAllowlistPath(projectDir: string): string { function getFileMtime (line 50) | function getFileMtime(filePath: string): number | null { function parseProfileFile (line 61) | function parseProfileFile(filePath: string): SecurityProfile | null { function parseAllowlistFile (line 75) | function parseAllowlistFile(filePath: string): string[] { function profileFromDict (line 90) | function profileFromDict(data: Record): SecurityProfile { function createDefaultProfile (line 128) | function createDefaultProfile(): SecurityProfile { function getSecurityProfile (line 161) | function getSecurityProfile(projectDir: string): SecurityProfile { function resetProfileCache (line 205) | function resetProfileCache(): void { FILE: apps/desktop/src/main/ai/security/tool-input-validator.ts constant TOOL_REQUIRED_KEYS (line 16) | const TOOL_REQUIRED_KEYS: Record = { type ToolValidationResult (line 32) | type ToolValidationResult = [boolean, string | null]; function validateToolInput (line 39) | function validateToolInput( function getSafeToolInput (line 91) | function getSafeToolInput( FILE: apps/desktop/src/main/ai/security/validators/database-validators.ts constant DESTRUCTIVE_SQL_PATTERNS (line 17) | const DESTRUCTIVE_SQL_PATTERNS: RegExp[] = [ constant SAFE_DATABASE_PATTERNS (line 26) | const SAFE_DATABASE_PATTERNS: RegExp[] = [ function shellSplit (line 47) | function shellSplit(input: string): string[] | null { function isSafeDatabaseName (line 99) | function isSafeDatabaseName(dbName: string): boolean { function containsDestructiveSql (line 112) | function containsDestructiveSql(sql: string): [boolean, string] { function validateDropdbCommand (line 131) | function validateDropdbCommand(commandString: string): ValidationResult { function validateDropuserCommand (line 187) | function validateDropuserCommand( function validatePsqlCommand (line 257) | function validatePsqlCommand(commandString: string): ValidationResult { function validateMysqlCommand (line 304) | function validateMysqlCommand(commandString: string): ValidationResult { function validateMysqladminCommand (line 350) | function validateMysqladminCommand( function validateRedisCliCommand (line 388) | function validateRedisCliCommand( function validateMongoshCommand (line 454) | function validateMongoshCommand( FILE: apps/desktop/src/main/ai/security/validators/filesystem-validators.ts constant DANGEROUS_CHMOD_PATTERNS (line 23) | const DANGEROUS_CHMOD_PATTERNS: RegExp[] = [ constant DANGEROUS_RM_PATTERNS (line 35) | const DANGEROUS_RM_PATTERNS: RegExp[] = [ function shellSplit (line 55) | function shellSplit(input: string): string[] | null { function validateChmodCommand (line 115) | function validateChmodCommand(commandString: string): ValidationResult { function validateRmCommand (line 171) | function validateRmCommand(commandString: string): ValidationResult { function validateInitScript (line 204) | function validateInitScript(commandString: string): ValidationResult { FILE: apps/desktop/src/main/ai/security/validators/git-validators.ts constant BLOCKED_GIT_CONFIG_KEYS (line 22) | const BLOCKED_GIT_CONFIG_KEYS = new Set([ function shellSplit (line 35) | function shellSplit(input: string): string[] | null { function validateGitConfig (line 91) | function validateGitConfig(commandString: string): ValidationResult { function validateGitInlineConfig (line 142) | function validateGitInlineConfig(tokens: string[]): ValidationResult { function validateGitCommand (line 211) | function validateGitCommand(commandString: string): ValidationResult { FILE: apps/desktop/src/main/ai/security/validators/process-validators.ts constant BLOCKED_PROCESS_NAMES (line 24) | const BLOCKED_PROCESS_NAMES = new Set([ function shellSplit (line 101) | function shellSplit(input: string): string[] | null { function validatePkillCommand (line 186) | function validatePkillCommand(commandString: string): ValidationResult { function validateKillCommand (line 244) | function validateKillCommand(commandString: string): ValidationResult { function validateKillallCommand (line 268) | function validateKillallCommand( FILE: apps/desktop/src/main/ai/security/validators/shell-validators.ts constant SHELL_INTERPRETERS (line 27) | const SHELL_INTERPRETERS = new Set(['bash', 'sh', 'zsh']); function shellSplit (line 33) | function shellSplit(input: string): string[] | null { constant PARSE_FAILURE (line 93) | const PARSE_FAILURE = Symbol('PARSE_FAILURE'); function extractCArgument (line 95) | function extractCArgument(commandString: string): string | null | typeof... function validateShellCCommand (line 133) | function validateShellCCommand(commandString: string): ValidationResult { FILE: apps/desktop/src/main/ai/session/__tests__/runner.test.ts function createMockConfig (line 24) | function createMockConfig(overrides: Partial = {}): Sessi... function createMockStreamResult (line 41) | function createMockStreamResult( FILE: apps/desktop/src/main/ai/session/continuation.ts constant DEFAULT_MAX_CONTINUATIONS (line 30) | const DEFAULT_MAX_CONTINUATIONS = 5; constant MAX_SUMMARY_INPUT_CHARS (line 33) | const MAX_SUMMARY_INPUT_CHARS = 30_000; constant SUMMARY_TARGET_WORDS (line 36) | const SUMMARY_TARGET_WORDS = 800; constant RAW_TRUNCATION_CHARS (line 39) | const RAW_TRUNCATION_CHARS = 3000; constant SUMMARIZER_SYSTEM_PROMPT (line 41) | const SUMMARIZER_SYSTEM_PROMPT = type ContinuationConfig (line 54) | interface ContinuationConfig { type ContinuationResult (line 70) | interface ContinuationResult extends SessionResult { function runContinuableSession (line 95) | async function runContinuableSession( function compactSessionMessages (line 207) | async function compactSessionMessages( function serializeMessages (line 262) | function serializeMessages(messages: SessionMessage[]): string { function rawTruncation (line 271) | function rawTruncation(messages: SessionMessage[]): string { function buildContinuationPrompt (line 288) | function buildContinuationPrompt(summary: string, continuationNumber: nu... function addUsage (line 302) | function addUsage(cumulative: TokenUsage, addition: TokenUsage): void { FILE: apps/desktop/src/main/ai/session/error-classifier.ts type ErrorCode (line 33) | type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode]; constant WORD_BOUNDARY_429 (line 39) | const WORD_BOUNDARY_429 = /\b429\b/; constant WORD_BOUNDARY_401 (line 40) | const WORD_BOUNDARY_401 = /\b401\b/; constant BILLING_ERROR_PATTERNS (line 50) | const BILLING_ERROR_PATTERNS = [ constant RATE_LIMIT_PATTERNS (line 60) | const RATE_LIMIT_PATTERNS = [ constant AUTH_PATTERNS (line 68) | const AUTH_PATTERNS = [ function isBillingError (line 88) | function isBillingError(error: unknown): boolean { function isRateLimitError (line 97) | function isRateLimitError(error: unknown): boolean { function isAuthenticationError (line 107) | function isAuthenticationError(error: unknown): boolean { function isToolConcurrencyError (line 116) | function isToolConcurrencyError(error: unknown): boolean { function isAbortError (line 129) | function isAbortError(error: unknown): boolean { type ClassifiedError (line 139) | interface ClassifiedError { function classifyError (line 158) | function classifyError(error: unknown): ClassifiedError { function classifyToolError (line 237) | function classifyToolError( function errorToString (line 257) | function errorToString(error: unknown): string { function sanitizeErrorMessage (line 266) | function sanitizeErrorMessage(message: string): string { FILE: apps/desktop/src/main/ai/session/progress-tracker.ts type PhaseDetection (line 32) | interface PhaseDetection { type ProgressTrackerState (line 44) | interface ProgressTrackerState { constant TOOL_FILE_PHASE_PATTERNS (line 63) | const TOOL_FILE_PHASE_PATTERNS: ReadonlyArray<{ constant TOOL_NAME_PHASE_PATTERNS (line 88) | const TOOL_NAME_PHASE_PATTERNS: ReadonlyArray<{ constant TEXT_PHASE_PATTERNS (line 114) | const TEXT_PHASE_PATTERNS: ReadonlyArray<{ class ProgressTracker (line 152) | class ProgressTracker { method state (line 159) | get state(): ProgressTrackerState { method currentPhase (line 169) | get currentPhase(): ExecutionPhase { method processEvent (line 179) | processEvent(event: StreamEvent): PhaseDetection | null { method forcePhase (line 200) | forcePhase(phase: ExecutionPhase, message: string, subtask?: string): ... method reset (line 207) | reset(): void { method processToolCall (line 222) | private processToolCall(event: ToolCallEvent): PhaseDetection | null { method processToolResult (line 258) | private processToolResult(event: ToolResultEvent): PhaseDetection | nu... method processTextDelta (line 283) | private processTextDelta(text: string): PhaseDetection | null { method tryTransition (line 325) | private tryTransition( method transitionTo (line 352) | private transitionTo(phase: ExecutionPhase, message: string, subtask?:... method extractFilePath (line 377) | private extractFilePath(args: Record): string | null { method extractSubtaskId (line 385) | private extractSubtaskId(args: Record): string | null { FILE: apps/desktop/src/main/ai/session/runner.ts constant MAX_AUTH_RETRIES (line 47) | const MAX_AUTH_RETRIES = 1; constant DEFAULT_MAX_STEPS (line 50) | const DEFAULT_MAX_STEPS = 500; constant CONTEXT_WINDOW_THRESHOLD (line 53) | const CONTEXT_WINDOW_THRESHOLD = 0.85; constant CONTEXT_WINDOW_ABORT_THRESHOLD (line 56) | const CONTEXT_WINDOW_ABORT_THRESHOLD = 0.90; constant CONTEXT_WINDOW_ABORT_REASON (line 59) | const CONTEXT_WINDOW_ABORT_REASON = '__context_window_exhausted__'; constant CONVERGENCE_NUDGE_AGENT_TYPES (line 63) | const CONVERGENCE_NUDGE_AGENT_TYPES = new Set([ constant POST_STREAM_TIMEOUT_MS (line 73) | const POST_STREAM_TIMEOUT_MS = 10_000; constant STREAM_INACTIVITY_TIMEOUT_MS (line 79) | const STREAM_INACTIVITY_TIMEOUT_MS = 60_000; type MemorySessionContext (line 90) | interface MemorySessionContext { type RunnerOptions (line 100) | interface RunnerOptions { function runAgentSession (line 148) | async function runAgentSession( constant MEMORY_INJECTION_WARMUP_STEPS (line 252) | const MEMORY_INJECTION_WARMUP_STEPS = 5; function executeStream (line 263) | async function executeStream( function buildErrorResult (line 645) | function buildErrorResult( function withTimeout (line 672) | function withTimeout(thenable: PromiseLike, ms: number, label: str... FILE: apps/desktop/src/main/ai/session/stream-handler.ts type TextDeltaPart (line 42) | interface TextDeltaPart { type ReasoningDeltaPart (line 47) | interface ReasoningDeltaPart { type ToolCallPart (line 52) | interface ToolCallPart { type ToolResultPart (line 59) | interface ToolResultPart { type ToolErrorPart (line 67) | interface ToolErrorPart { type FinishStepPart (line 74) | interface FinishStepPart { type ErrorPart (line 83) | interface ErrorPart { type FullStreamPart (line 88) | type FullStreamPart = type StreamHandlerState (line 102) | interface StreamHandlerState { function createInitialState (line 112) | function createInitialState(): StreamHandlerState { function createStreamHandler (line 143) | function createStreamHandler(onEvent: SessionEventCallback) { type StreamHandler (line 292) | type StreamHandler = ReturnType; FILE: apps/desktop/src/main/ai/session/types.ts type SessionConfig (line 30) | interface SessionConfig { type MessageRole (line 86) | type MessageRole = 'user' | 'assistant'; type SessionMessage (line 89) | interface SessionMessage { type SessionOutcome (line 99) | type SessionOutcome = type SessionResult (line 111) | interface SessionResult { type TokenUsage (line 134) | interface TokenUsage { type SessionError (line 147) | interface SessionError { type StreamEvent (line 166) | type StreamEvent = type TextDeltaEvent (line 176) | interface TextDeltaEvent { type ThinkingDeltaEvent (line 182) | interface ThinkingDeltaEvent { type ToolCallEvent (line 188) | interface ToolCallEvent { type ToolResultEvent (line 196) | interface ToolResultEvent { type StepFinishEvent (line 206) | interface StepFinishEvent { type ErrorEvent (line 213) | interface ErrorEvent { type UsageUpdateEvent (line 219) | interface UsageUpdateEvent { type ProgressState (line 232) | interface ProgressState { type SessionEventCallback (line 255) | type SessionEventCallback = (event: StreamEvent) => void; FILE: apps/desktop/src/main/ai/spec/conversation-compactor.ts constant MAX_INPUT_CHARS (line 23) | const MAX_INPUT_CHARS = 15000; constant MAX_FILE_CHARS (line 26) | const MAX_FILE_CHARS = 10000; constant DEFAULT_TARGET_WORDS (line 29) | const DEFAULT_TARGET_WORDS = 500; constant PHASE_OUTPUT_FILES (line 32) | const PHASE_OUTPUT_FILES: Record = { constant COMPACTOR_SYSTEM_PROMPT (line 44) | const COMPACTOR_SYSTEM_PROMPT = function gatherPhaseOutputs (line 57) | function gatherPhaseOutputs(specDir: string, phaseName: string): string { function formatPhaseSummaries (line 83) | function formatPhaseSummaries(summaries: Record): string { function summarizePhaseOutput (line 112) | async function summarizePhaseOutput( function compactPhase (line 177) | async function compactPhase( FILE: apps/desktop/src/main/ai/spec/spec-validator.ts constant IMPLEMENTATION_PLAN_REQUIRED_FIELDS (line 25) | const IMPLEMENTATION_PLAN_REQUIRED_FIELDS = ['feature', 'workflow_type',... constant IMPLEMENTATION_PLAN_WORKFLOW_TYPES (line 27) | const IMPLEMENTATION_PLAN_WORKFLOW_TYPES = [ constant PHASE_REQUIRED_FIELDS (line 37) | const PHASE_REQUIRED_FIELDS = ['name', 'subtasks']; constant PHASE_REQUIRED_FIELDS_EITHER (line 38) | const PHASE_REQUIRED_FIELDS_EITHER = [['phase', 'id']]; constant PHASE_TYPES (line 39) | const PHASE_TYPES = ['setup', 'implementation', 'investigation', 'integr... constant SUBTASK_REQUIRED_FIELDS (line 41) | const SUBTASK_REQUIRED_FIELDS = ['id', 'description', 'status']; constant SUBTASK_STATUS_VALUES (line 42) | const SUBTASK_STATUS_VALUES = ['pending', 'in_progress', 'completed', 'b... constant VERIFICATION_TYPES (line 44) | const VERIFICATION_TYPES = ['command', 'api', 'browser', 'component', 'e... constant CONTEXT_REQUIRED_FIELDS (line 46) | const CONTEXT_REQUIRED_FIELDS = ['task_description']; constant CONTEXT_RECOMMENDED_FIELDS (line 47) | const CONTEXT_RECOMMENDED_FIELDS = ['files_to_modify', 'files_to_referen... constant SPEC_REQUIRED_SECTIONS (line 49) | const SPEC_REQUIRED_SECTIONS = ['Overview', 'Workflow Type', 'Task Scope... constant SPEC_RECOMMENDED_SECTIONS (line 50) | const SPEC_RECOMMENDED_SECTIONS = [ type ValidationResult (line 61) | interface ValidationResult { type ValidationSummary (line 69) | interface ValidationSummary { function repairJsonSyntax (line 84) | function repairJsonSyntax(content: string): string | null { function normalizeStatus (line 139) | function normalizeStatus(value: unknown): string { function autoFixPlan (line 159) | function autoFixPlan(specDir: string): boolean { function validatePrereqs (line 305) | function validatePrereqs(specDir: string): ValidationResult { function validateContext (line 329) | function validateContext(specDir: string): ValidationResult { function validateSpecDocument (line 374) | function validateSpecDocument(specDir: string): ValidationResult { function validateImplementationPlan (line 423) | function validateImplementationPlan(specDir: string): ValidationResult { function validatePhase (line 492) | function validatePhase(phase: Record, index: number): s... function validateSubtask (line 521) | function validateSubtask( function validateDependencies (line 562) | function validateDependencies(phases: Record[]): string... class SpecValidator (line 601) | class SpecValidator { method constructor (line 602) | constructor(private specDir: string) {} method validateAll (line 604) | validateAll(): ValidationResult[] { method validatePrereqs (line 613) | validatePrereqs(): ValidationResult { method validateContext (line 617) | validateContext(): ValidationResult { method validateSpecDocument (line 621) | validateSpecDocument(): ValidationResult { method validateImplementationPlan (line 625) | validateImplementationPlan(): ValidationResult { method summarize (line 632) | summarize(): ValidationSummary { constant MAX_AUTO_FIX_RETRIES (line 646) | const MAX_AUTO_FIX_RETRIES = 3; constant VALIDATION_FIXER_SYSTEM_PROMPT (line 648) | const VALIDATION_FIXER_SYSTEM_PROMPT = `You are the Validation Fixer Age... function runValidationFixer (line 675) | async function runValidationFixer( function buildFixerPrompt (line 740) | function buildFixerPrompt(specDir: string, checkpoint: string, errors: s... function recheckValidation (line 773) | function recheckValidation(specDir: string, checkpoint: string): Validat... function formatValidationResult (line 796) | function formatValidationResult(result: ValidationResult): string { FILE: apps/desktop/src/main/ai/tools/__tests__/registry.test.ts function createMockDefinedTool (line 26) | function createMockDefinedTool(name: string): DefinedTool { function createMockContext (line 37) | function createMockContext(): ToolContext { FILE: apps/desktop/src/main/ai/tools/auto-claude/get-build-progress.ts type PlanSubtask (line 29) | interface PlanSubtask { type PlanPhase (line 36) | interface PlanPhase { type ImplementationPlan (line 43) | interface ImplementationPlan { FILE: apps/desktop/src/main/ai/tools/auto-claude/get-session-context.ts type CodebaseMap (line 33) | interface CodebaseMap { FILE: apps/desktop/src/main/ai/tools/auto-claude/record-discovery.ts type CodebaseMap (line 36) | interface CodebaseMap { FILE: apps/desktop/src/main/ai/tools/auto-claude/update-qa-status.ts type QAIssue (line 45) | interface QAIssue { type QASignoff (line 50) | interface QASignoff { type ImplementationPlan (line 59) | interface ImplementationPlan { FILE: apps/desktop/src/main/ai/tools/auto-claude/update-subtask-status.ts type PlanSubtask (line 35) | interface PlanSubtask { type PlanPhase (line 43) | interface PlanPhase { type ImplementationPlan (line 47) | interface ImplementationPlan { function writeJsonAtomic (line 52) | function writeJsonAtomic(filePath: string, data: unknown): void { function updateSubtaskInPlan (line 58) | function updateSubtaskInPlan( FILE: apps/desktop/src/main/ai/tools/build-registry.ts function buildToolRegistry (line 28) | function buildToolRegistry(): ToolRegistry { FILE: apps/desktop/src/main/ai/tools/builtin/__tests__/bash.test.ts function setupExecFile (line 51) | function setupExecFile(stdout: string, stderr: string, exitCode: number) { FILE: apps/desktop/src/main/ai/tools/builtin/__tests__/glob.test.ts function setupGlobMatches (line 52) | function setupGlobMatches(absolutePaths: string[], mtimes?: number[]) { FILE: apps/desktop/src/main/ai/tools/builtin/__tests__/grep.test.ts function setupRg (line 51) | function setupRg(stdout: string, stderr: string, exitCode: number) { FILE: apps/desktop/src/main/ai/tools/builtin/__tests__/read.test.ts function setupTextFile (line 44) | function setupTextFile(content: string, isDir = false) { FILE: apps/desktop/src/main/ai/tools/builtin/bash.ts constant DEFAULT_TIMEOUT_MS (line 22) | const DEFAULT_TIMEOUT_MS = 120_000; constant MAX_TIMEOUT_MS (line 23) | const MAX_TIMEOUT_MS = 600_000; constant MAX_OUTPUT_LENGTH (line 24) | const MAX_OUTPUT_LENGTH = 30_000; function truncateOutput (line 50) | function truncateOutput(output: string): string { function resolveShell (line 57) | function resolveShell(): string { function executeCommand (line 65) | function executeCommand( FILE: apps/desktop/src/main/ai/tools/builtin/glob.ts constant MAX_RESULTS (line 34) | const MAX_RESULTS = 2000; FILE: apps/desktop/src/main/ai/tools/builtin/grep.ts constant DEFAULT_OUTPUT_MODE (line 23) | const DEFAULT_OUTPUT_MODE = 'files_with_matches'; constant MAX_OUTPUT_LENGTH (line 24) | const MAX_OUTPUT_LENGTH = 30_000; function buildRgArgs (line 62) | function buildRgArgs( function runRipgrep (line 101) | function runRipgrep( FILE: apps/desktop/src/main/ai/tools/builtin/read.ts constant DEFAULT_LINE_LIMIT (line 27) | const DEFAULT_LINE_LIMIT = 2000; constant MAX_LINE_LENGTH (line 28) | const MAX_LINE_LENGTH = 2000; constant IMAGE_EXTENSIONS (line 30) | const IMAGE_EXTENSIONS = new Set([ constant PDF_EXTENSION (line 41) | const PDF_EXTENSION = '.pdf'; function formatWithLineNumbers (line 67) | function formatWithLineNumbers( function isImageFile (line 87) | function isImageFile(filePath: string): boolean { function isPdfFile (line 91) | function isPdfFile(filePath: string): boolean { FILE: apps/desktop/src/main/ai/tools/builtin/spawn-subagent.ts type SpawnSubagentInput (line 52) | type SpawnSubagentInput = z.infer; type SubagentExecutor (line 62) | interface SubagentExecutor { type SubagentSpawnParams (line 66) | interface SubagentSpawnParams { type SubagentResult (line 73) | interface SubagentResult { FILE: apps/desktop/src/main/ai/tools/builtin/web-fetch.ts constant FETCH_TIMEOUT_MS (line 20) | const FETCH_TIMEOUT_MS = 30_000; FILE: apps/desktop/src/main/ai/tools/builtin/web-search.ts constant SEARCH_TIMEOUT_MS (line 22) | const SEARCH_TIMEOUT_MS = 15_000; constant MAX_RESULTS (line 23) | const MAX_RESULTS = 10; constant MAX_SNIPPET_LENGTH (line 24) | const MAX_SNIPPET_LENGTH = 300; FILE: apps/desktop/src/main/ai/tools/define.ts type DefinedTool (line 44) | interface DefinedTool< function runSecurityHooks (line 64) | function runSecurityHooks( constant TRAILING_JSON_ARTIFACT_RE (line 93) | const TRAILING_JSON_ARTIFACT_RE = /['"}\],{]+$/; function sanitizeFilePathArg (line 104) | function sanitizeFilePathArg(input: Record): void { function define (line 122) | function define( FILE: apps/desktop/src/main/ai/tools/providers/__tests__/jina-browse.test.ts function mockFetchResponse (line 13) | function mockFetchResponse(body: string, status = 200, statusText = 'OK') { FILE: apps/desktop/src/main/ai/tools/providers/__tests__/serper-search.test.ts function mockFetchResponse (line 13) | function mockFetchResponse(body: unknown, status = 200, statusText = 'OK... function makeSerperResponse (line 23) | function makeSerperResponse( FILE: apps/desktop/src/main/ai/tools/providers/__tests__/tavily-search.test.ts function makeTavilyResponse (line 19) | function makeTavilyResponse( FILE: apps/desktop/src/main/ai/tools/providers/fetch-browse.ts constant DEFAULT_TIMEOUT (line 12) | const DEFAULT_TIMEOUT = 30_000; constant MAX_CONTENT_LENGTH (line 13) | const MAX_CONTENT_LENGTH = 100_000; class FetchBrowseProvider (line 15) | class FetchBrowseProvider implements BrowseProvider { method browse (line 18) | async browse(url: string, options?: BrowseOptions): Promise { function getLogsPath (line 98) | function getLogsPath(): string { function getRecentLogs (line 115) | function getRecentLogs(maxLines: number = 200): string[] { function getRecentErrors (line 134) | function getRecentErrors(maxCount: number = 20): string[] { function generateDebugReport (line 147) | function generateDebugReport(): string { function listLogFiles (line 170) | function listLogFiles(): Array<{ name: string; path: string; size: numbe... function safeStderrWrite (line 223) | function safeStderrWrite(message: string): void { function safeLogUnhandled (line 234) | function safeLogUnhandled(prefix: string, value: unknown): void { function setupErrorLogging (line 250) | function setupErrorLogging(): void { FILE: apps/desktop/src/main/app-updater.ts constant GITHUB_OWNER (line 32) | const GITHUB_OWNER = 'AndyMik90'; constant GITHUB_REPO (line 33) | const GITHUB_REPO = 'Aperant'; constant DEBUG_UPDATER (line 36) | const DEBUG_UPDATER = process.env.DEBUG_UPDATER === 'true' || process.en... type UpdateChannel (line 43) | type UpdateChannel = 'latest' | 'beta'; function htmlToMarkdown (line 52) | function htmlToMarkdown(html: string): string { function formatReleaseNotes (line 117) | function formatReleaseNotes(releaseNotes: UpdateInfo['releaseNotes']): s... function setUpdateChannel (line 165) | function setUpdateChannel(channel: UpdateChannel): void { function initializeAppUpdater (line 203) | function initializeAppUpdater(window: BrowserWindow, betaUpdates = false... function checkForUpdates (line 350) | async function checkForUpdates(): Promise { function downloadUpdate (line 387) | async function downloadUpdate(): Promise { function isRunningFromReadOnlyVolume (line 401) | function isRunningFromReadOnlyVolume(): boolean { function quitAndInstall (line 432) | function quitAndInstall(): boolean { function getCurrentVersion (line 453) | function getCurrentVersion(): string { function getDownloadedUpdateInfo (line 462) | function getDownloadedUpdateInfo(): AppUpdateInfo | null { function isPrerelease (line 469) | function isPrerelease(version: string): boolean { constant GITHUB_API_TIMEOUT (line 474) | const GITHUB_API_TIMEOUT = 10000; function fetchLatestStableRelease (line 480) | async function fetchLatestStableRelease(): Promise { function checkForStableDowngrade (line 599) | async function checkForStableDowngrade(): Promise { function setUpdateChannelWithDowngradeCheck (line 629) | async function setUpdateChannelWithDowngradeCheck( function downloadStableVersion (line 655) | async function downloadStableVersion(): Promise { function stopPeriodicUpdates (line 682) | function stopPeriodicUpdates(): void { FILE: apps/desktop/src/main/changelog/changelog-service.ts class ChangelogService (line 41) | class ChangelogService extends EventEmitter { method constructor (line 48) | constructor() { method isDebugEnabled (line 59) | private isDebugEnabled(): boolean { method debug (line 83) | private debug(...args: unknown[]): void { method configure (line 89) | configure(_pythonPath?: string, autoBuildSourcePath?: string): void { method getAutoBuildSourcePath (line 98) | private getAutoBuildSourcePath(): string | null { method loadAutoBuildEnv (line 121) | private loadAutoBuildEnv(): Record { method ensurePrerequisites (line 162) | private ensurePrerequisites(): { autoBuildSource: string; claudePath: ... method getGenerator (line 182) | private getGenerator(): ChangelogGenerator { method getVersionSuggester (line 220) | private getVersionSuggester(): VersionSuggester { method getCompletedTasks (line 242) | getCompletedTasks(projectPath: string, tasks: Task[], specsBaseDir?: s... method loadTaskSpecs (line 266) | async loadTaskSpecs(projectPath: string, taskIds: string[], tasks: Tas... method getBranches (line 328) | getBranches(projectPath: string): GitBranchInfo[] { method getTags (line 332) | getTags(projectPath: string): GitTagInfo[] { method getCurrentBranch (line 336) | getCurrentBranch(projectPath: string): string { method getDefaultBranch (line 340) | getDefaultBranch(projectPath: string): string { method getCommits (line 344) | getCommits(projectPath: string, options: import('../../shared/types').... method getBranchDiffCommits (line 348) | getBranchDiffCommits(projectPath: string, options: import('../../share... method generateChangelog (line 356) | generateChangelog( method cancelGeneration (line 372) | cancelGeneration(projectId: string): boolean { method saveChangelog (line 386) | saveChangelog( method readExistingChangelog (line 416) | readExistingChangelog(projectPath: string): ExistingChangelog { method suggestVersion (line 429) | suggestVersion(specs: TaskSpecContent[], currentVersion?: string): str... method suggestVersionFromCommits (line 472) | async suggestVersionFromCommits( FILE: apps/desktop/src/main/changelog/formatter.ts constant FORMAT_TEMPLATES (line 11) | const FORMAT_TEMPLATES = { constant AUDIENCE_INSTRUCTIONS (line 62) | const AUDIENCE_INSTRUCTIONS = { function getEmojiInstructions (line 71) | function getEmojiInstructions(emojiLevel?: string, format?: string): str... function buildChangelogPrompt (line 139) | function buildChangelogPrompt( function buildGitPrompt (line 207) | function buildGitPrompt( function createGenerationScript (line 329) | function createGenerationScript(prompt: string, claudePath: string): str... FILE: apps/desktop/src/main/changelog/generator.ts class ChangelogGenerator (line 23) | class ChangelogGenerator extends EventEmitter { method constructor (line 28) | constructor( method debug (line 39) | private debug(...args: unknown[]): void { method generate (line 49) | async generate( method buildSpawnEnvironment (line 289) | private buildSpawnEnvironment(): Record { method cancel (line 333) | cancel(projectId: string): boolean { method emitProgress (line 353) | private emitProgress(projectId: string, progress: ChangelogGenerationP... method emitError (line 360) | private emitError(projectId: string, error: string): void { FILE: apps/desktop/src/main/changelog/git-integration.ts function debug (line 15) | function debug(enabled: boolean, ...args: unknown[]): void { function getBranches (line 24) | function getBranches(projectPath: string, debugEnabled = false): GitBran... function getTags (line 89) | function getTags(projectPath: string, debugEnabled = false): GitTagInfo[] { function getCurrentBranch (line 128) | function getCurrentBranch(projectPath: string): string { function getDefaultBranch (line 142) | function getDefaultBranch(projectPath: string): string { function getCommits (line 175) | function getCommits( function getBranchDiffCommits (line 232) | function getBranchDiffCommits( FILE: apps/desktop/src/main/changelog/parser.ts function extractSpecOverview (line 7) | function extractSpecOverview(spec: string): string { function extractChangelog (line 44) | function extractChangelog(output: string): string { function parseExistingChangelog (line 89) | function parseExistingChangelog(filePath: string): ExistingChangelog { function parseGitLogOutput (line 125) | function parseGitLogOutput(output: string): Array<{ FILE: apps/desktop/src/main/changelog/types.ts type ChangelogConfig (line 6) | interface ChangelogConfig { type PromptBuildOptions (line 12) | interface PromptBuildOptions { type VersionSuggestion (line 20) | interface VersionSuggestion { type GenerationScriptParams (line 27) | interface GenerationScriptParams { FILE: apps/desktop/src/main/changelog/version-suggester.ts type VersionSuggestion (line 9) | interface VersionSuggestion { class VersionSuggester (line 19) | class VersionSuggester { method constructor (line 22) | constructor( method debug (line 31) | private debug(...args: unknown[]): void { method suggestVersionBump (line 40) | async suggestVersionBump( method buildPrompt (line 103) | private buildPrompt(commits: GitCommit[], currentVersion: string): str... method createAnalysisScript (line 134) | private createAnalysisScript(prompt: string): string { method parseAIResponse (line 179) | private parseAIResponse(output: string, currentVersion: string): Versi... method fallbackSuggestion (line 216) | private fallbackSuggestion(currentVersion: string): VersionSuggestion { method buildSpawnEnvironment (line 228) | private buildSpawnEnvironment(): Record { FILE: apps/desktop/src/main/claude-code-settings/__tests__/reader.test.ts constant HOME (line 40) | const HOME = '/home/testuser'; constant USER_SETTINGS (line 41) | const USER_SETTINGS = path.join(HOME, '.claude', 'settings.json'); constant LINUX_MANAGED (line 42) | const LINUX_MANAGED = '/etc/claude-code/managed-settings.json'; FILE: apps/desktop/src/main/claude-code-settings/env-sanitizer.ts constant LOG_PREFIX (line 21) | const LOG_PREFIX = '[EnvSanitizer]'; constant DANGEROUS_ENV_VARS (line 36) | const DANGEROUS_ENV_VARS = new Set([ constant WARNING_ENV_VARS (line 108) | const WARNING_ENV_VARS = new Set([ function sanitizeEnvVars (line 122) | function sanitizeEnvVars( function isDangerousEnvVar (line 191) | function isDangerousEnvVar(key: string): boolean { function isWarningEnvVar (line 199) | function isWarningEnvVar(key: string): boolean { function getDangerousEnvVars (line 207) | function getDangerousEnvVars(): string[] { function getWarningEnvVars (line 215) | function getWarningEnvVars(): string[] { FILE: apps/desktop/src/main/claude-code-settings/index.ts function getClaudeCodeEnv (line 52) | function getClaudeCodeEnv(projectPath?: string): Record { FILE: apps/desktop/src/main/claude-code-settings/merger.ts function mergeEnv (line 36) | function mergeEnv( function mergeArrays (line 56) | function mergeArrays( function mergeTwoLevels (line 77) | function mergeTwoLevels( function mergeClaudeCodeSettings (line 158) | function mergeClaudeCodeSettings( FILE: apps/desktop/src/main/claude-code-settings/reader.ts constant LOG_PREFIX (line 23) | const LOG_PREFIX = '[ClaudeCodeSettings]'; function isPlainObject (line 28) | function isPlainObject(value: unknown): value is Record { function sanitizeEnv (line 36) | function sanitizeEnv(env: unknown): Record | undefined { function sanitizePermissions (line 60) | function sanitizePermissions(permissions: unknown): ClaudeCodeSettings['... function isValidSettings (line 99) | function isValidSettings(obj: unknown): obj is ClaudeCodeSettings { function readJsonFile (line 167) | function readJsonFile(filePath: string): ClaudeCodeSettings | undefined { function getUserConfigDir (line 198) | function getUserConfigDir(): string { function readUserGlobalSettings (line 238) | function readUserGlobalSettings(): ClaudeCodeSettings | undefined { function readProjectSharedSettings (line 249) | function readProjectSharedSettings(projectPath: string): ClaudeCodeSetti... function readProjectLocalSettings (line 259) | function readProjectLocalSettings(projectPath: string): ClaudeCodeSettin... function getManagedSettingsPath (line 272) | function getManagedSettingsPath(): string { function readManagedSettings (line 290) | function readManagedSettings(): ClaudeCodeSettings | undefined { function readAllSettings (line 303) | function readAllSettings(projectPath?: string): ClaudeCodeSettingsHierar... FILE: apps/desktop/src/main/claude-code-settings/types.ts type ClaudeCodePermissions (line 12) | interface ClaudeCodePermissions { type ClaudeCodeSettings (line 29) | interface ClaudeCodeSettings { type ClaudeCodeSettingsHierarchy (line 42) | interface ClaudeCodeSettingsHierarchy { FILE: apps/desktop/src/main/claude-profile-manager.ts class ClaudeProfileManager (line 66) | class ClaudeProfileManager { method constructor (line 72) | constructor() { method initialize (line 85) | async initialize(): Promise { method migrateCorruptedEmails (line 123) | private migrateCorruptedEmails(): void { method populateSubscriptionMetadata (line 156) | private populateSubscriptionMetadata(): void { method isInitialized (line 212) | isInitialized(): boolean { method createDefaultData (line 223) | private createDefaultData(): ProfileStoreData { method save (line 250) | private save(): void { method getSettings (line 258) | getSettings(): ClaudeProfileSettings { method getAutoSwitchSettings (line 275) | getAutoSwitchSettings(): ClaudeAutoSwitchSettings { method updateAutoSwitchSettings (line 282) | updateAutoSwitchSettings(settings: Partial):... method getAccountPriorityOrder (line 295) | getAccountPriorityOrder(): string[] { method setAccountPriorityOrder (line 303) | setAccountPriorityOrder(order: string[]): void { method getProfile (line 311) | getProfile(profileId: string): ClaudeProfile | undefined { method getActiveProfile (line 318) | getActiveProfile(): ClaudeProfile { method saveProfile (line 359) | saveProfile(profile: ClaudeProfile): ClaudeProfile { method deleteProfile (line 382) | deleteProfile(profileId: string): boolean { method renameProfile (line 414) | renameProfile(profileId: string, newName: string): boolean { method setActiveProfile (line 433) | setActiveProfile(profileId: string): boolean { method markProfileUsed (line 458) | markProfileUsed(profileId: string): void { method getActiveProfileToken (line 470) | getActiveProfileToken(): string | undefined { method getProfileToken (line 482) | getProfileToken(profileId: string): string | undefined { method setProfileToken (line 494) | setProfileToken(profileId: string, token: string, email?: string): boo... method hasValidToken (line 518) | hasValidToken(profileId: string): boolean { method getActiveProfileEnv (line 541) | getActiveProfileEnv(): Record { method updateProfileUsage (line 588) | updateProfileUsage(profileId: string, usageOutput: string): ClaudeUsag... method updateProfileUsageFromAPI (line 604) | updateProfileUsageFromAPI(profileId: string, sessionPercent: number, w... method batchUpdateProfileUsageFromAPI (line 632) | batchUpdateProfileUsageFromAPI( method recordRateLimitEvent (line 668) | recordRateLimitEvent(profileId: string, resetTimeStr: string): ClaudeR... method isProfileRateLimited (line 682) | isProfileRateLimited(profileId: string): { limited: boolean; type?: 's... method getBestAvailableProfile (line 700) | getBestAvailableProfile(excludeProfileId?: string): ClaudeProfile | nu... method loadProfilesFileSafe (line 710) | private async loadProfilesFileSafe(): Promise<{ profiles: APIProfile[]... method loadAPIProfiles (line 724) | async loadAPIProfiles(): Promise { method getBestAvailableUnifiedAccount (line 736) | async getBestAvailableUnifiedAccount(excludeAccountId?: string): Promi... method shouldProactivelySwitch (line 760) | shouldProactivelySwitch(profileId: string): { shouldSwitch: boolean; r... method generateProfileId (line 774) | generateProfileId(name: string): string { method createProfileDirectory (line 781) | async createProfileDirectory(profileName: string): Promise { method isProfileAuthenticated (line 789) | isProfileAuthenticated(profile: ClaudeProfile): boolean { method hasValidAuth (line 802) | hasValidAuth(profileId?: string): boolean { method getProfileEnv (line 831) | getProfileEnv(profileId: string): Record { method clearRateLimitEvents (line 903) | clearRateLimitEvents(profileId: string): void { method getProfilesSortedByAvailability (line 914) | getProfilesSortedByAvailability(): ClaudeProfile[] { method getMigratedProfileIds (line 922) | getMigratedProfileIds(): string[] { method clearMigratedProfile (line 932) | clearMigratedProfile(profileId: string): void { method isProfileMigrated (line 954) | isProfileMigrated(profileId: string): boolean { function getClaudeProfileManager (line 967) | function getClaudeProfileManager(): ClaudeProfileManager { function initializeClaudeProfileManager (line 980) | async function initializeClaudeProfileManager(): Promise( function getCredentialsFromFile (line 430) | function getCredentialsFromFile( function getFullCredentialsFromFile (line 538) | function getFullCredentialsFromFile( function getCredentialsFromMacOSKeychain (line 612) | function getCredentialsFromMacOSKeychain(configDir?: string, forceRefres... constant LINUX_SECRET_TOOL_TIMEOUT_MS (line 707) | const LINUX_SECRET_TOOL_TIMEOUT_MS = 5000; function findSecretToolPath (line 713) | function findSecretToolPath(): string | null { function getSecretServiceAttribute (line 733) | function getSecretServiceAttribute(configDir?: string): string { function getCredentialsFromLinuxSecretService (line 750) | function getCredentialsFromLinuxSecretService(configDir?: string, forceR... function getCredentialsFromLinux (line 833) | function getCredentialsFromLinux(configDir?: string, forceRefresh = fals... function getLinuxCredentialsPath (line 862) | function getLinuxCredentialsPath(configDir?: string): string { function getCredentialsFromLinuxFile (line 870) | function getCredentialsFromLinuxFile(configDir?: string, forceRefresh = ... function getCredentialsFromWindowsCredentialManager (line 888) | function getCredentialsFromWindowsCredentialManager(configDir?: string, ... function findPowerShellPath (line 1054) | function findPowerShellPath(): string | null { function getWindowsCredentialsPath (line 1079) | function getWindowsCredentialsPath(configDir?: string): string { function getCredentialsFromWindowsFile (line 1088) | function getCredentialsFromWindowsFile(configDir?: string, forceRefresh ... function getCredentialsFromWindows (line 1099) | function getCredentialsFromWindows(configDir?: string, forceRefresh = fa... function getCredentialsFromKeychain (line 1153) | function getCredentialsFromKeychain(configDir?: string, forceRefresh = f... function clearKeychainCache (line 1181) | function clearKeychainCache(configDir?: string): void { function getFullCredentialsFromMacOSKeychain (line 1212) | function getFullCredentialsFromMacOSKeychain(configDir?: string): FullOA... function getFullCredentialsFromLinuxSecretService (line 1276) | function getFullCredentialsFromLinuxSecretService(configDir?: string): F... function getFullCredentialsFromLinux (line 1334) | function getFullCredentialsFromLinux(configDir?: string): FullOAuthCrede... function getFullCredentialsFromLinuxFile (line 1357) | function getFullCredentialsFromLinuxFile(configDir?: string): FullOAuthC... function getFullCredentialsFromWindowsCredentialManager (line 1365) | function getFullCredentialsFromWindowsCredentialManager(configDir?: stri... function getFullCredentialsFromWindowsFile (line 1495) | function getFullCredentialsFromWindowsFile(configDir?: string): FullOAut... function getFullCredentialsFromWindows (line 1505) | function getFullCredentialsFromWindows(configDir?: string): FullOAuthCre... function getFullCredentialsFromKeychain (line 1549) | function getFullCredentialsFromKeychain(configDir?: string): FullOAuthCr... function updateMacOSKeychainCredentials (line 1569) | function updateMacOSKeychainCredentials( function updateLinuxSecretServiceCredentials (line 1681) | function updateLinuxSecretServiceCredentials( function updateLinuxCredentials (line 1755) | function updateLinuxCredentials( function updateLinuxFileCredentials (line 1785) | function updateLinuxFileCredentials( function updateWindowsCredentialManagerCredentials (line 1854) | function updateWindowsCredentialManagerCredentials( function restrictWindowsFilePermissions (line 1996) | function restrictWindowsFilePermissions(filePath: string): void { function updateWindowsFileCredentials (line 2044) | function updateWindowsFileCredentials( function updateWindowsCredentials (line 2147) | function updateWindowsCredentials( function updateKeychainCredentials (line 2194) | function updateKeychainCredentials( type UpdateSubscriptionMetadataResult (line 2225) | interface UpdateSubscriptionMetadataResult { type UpdateSubscriptionMetadataOptions (line 2239) | interface UpdateSubscriptionMetadataOptions { function updateProfileSubscriptionMetadata (line 2281) | function updateProfileSubscriptionMetadata( FILE: apps/desktop/src/main/claude-profile/operation-registry.ts type OperationType (line 25) | type OperationType = type RegisteredOperation (line 63) | interface RegisteredOperation { type OperationRegistryEvents (line 102) | interface OperationRegistryEvents { class ClaudeOperationRegistry (line 155) | class ClaudeOperationRegistry extends EventEmitter { method constructor (line 159) | constructor() { method debugLog (line 164) | private debugLog(...args: unknown[]): void { method registerOperation (line 173) | registerOperation( method unregisterOperation (line 210) | unregisterOperation(id: string): void { method getOperationsByProfile (line 222) | getOperationsByProfile(profileId: string): RegisteredOperation[] { method getAllOperationsByProfile (line 235) | getAllOperationsByProfile(): Record { method getOperation (line 254) | getOperation(id: string): RegisteredOperation | undefined { method hasOperation (line 265) | hasOperation(id: string): boolean { method getOperationCount (line 272) | getOperationCount(): number { method getSummary (line 279) | getSummary(): { method restartOperationsOnProfile (line 330) | async restartOperationsOnProfile( method updateOperationProfile (line 406) | updateOperationProfile(id: string, newProfileId: string, newProfileNam... method clear (line 424) | clear(): void { method onOperationRegistered (line 433) | onOperationRegistered(callback: (operation: RegisteredOperation) => vo... method onOperationUnregistered (line 442) | onOperationUnregistered(callback: (operationId: string, type: Operatio... method onOperationRestarted (line 451) | onOperationRestarted(callback: (operationId: string, oldProfileId: str... method onOperationsRestarted (line 460) | onOperationsRestarted(callback: (count: number, oldProfileId: string, ... method onOperationProfileUpdated (line 469) | onOperationProfileUpdated(callback: (operationId: string, oldProfileId... function getOperationRegistry (line 481) | function getOperationRegistry(): ClaudeOperationRegistry { function resetOperationRegistry (line 491) | function resetOperationRegistry(): void { FILE: apps/desktop/src/main/claude-profile/profile-scorer.ts type ScoredProfile (line 33) | interface ScoredProfile { function checkProfileAvailability (line 44) | function checkProfileAvailability( function calculateFallbackScore (line 91) | function calculateFallbackScore( type ScoredUnifiedAccount (line 140) | interface ScoredUnifiedAccount { type UnifiedAccountSelectionOptions (line 151) | interface UnifiedAccountSelectionOptions { function scoreUnifiedAccount (line 169) | function scoreUnifiedAccount( function getBestAvailableUnifiedAccount (line 252) | function getBestAvailableUnifiedAccount( function getBestAvailableProfile (line 381) | function getBestAvailableProfile( function shouldProactivelySwitch (line 471) | function shouldProactivelySwitch( function scoreProviderAccount (line 523) | function scoreProviderAccount( function getProfilesSortedByAvailability (line 564) | function getProfilesSortedByAvailability(profiles: ClaudeProfile[]): Cla... FILE: apps/desktop/src/main/claude-profile/profile-storage.ts constant DEFAULT_CLAUDE_CONFIG_DIR (line 15) | const DEFAULT_CLAUDE_CONFIG_DIR = join(homedir(), '.claude'); constant CLAUDE_PROFILES_DIR (line 16) | const CLAUDE_PROFILES_DIR = join(homedir(), '.claude-profiles'); constant STORE_VERSION (line 18) | const STORE_VERSION = 3; constant DEFAULT_AUTO_SWITCH_SETTINGS (line 23) | const DEFAULT_AUTO_SWITCH_SETTINGS: ClaudeAutoSwitchSettings = { type ProfileStoreData (line 36) | interface ProfileStoreData { function usesLegacySharedDirectory (line 54) | function usesLegacySharedDirectory(profile: ClaudeProfile): boolean { function migrateProfileToIsolatedDirectory (line 72) | function migrateProfileToIsolatedDirectory(profile: ClaudeProfile): stri... function parseAndMigrateProfileData (line 138) | function parseAndMigrateProfileData(data: Record): Prof... function loadProfileStore (line 211) | function loadProfileStore(storePath: string): ProfileStoreData | null { function loadProfileStoreAsync (line 229) | async function loadProfileStoreAsync(storePath: string): Promise { method checkUsageAndSwap (line 1312) | private async checkUsageAndSwap(): Promise { method shouldUseApiMethod (line 1429) | private shouldUseApiMethod(profileId: string): boolean { method getProfileIdFamily (line 1459) | private getProfileIdFamily(profileId: string): string[] { method determineActiveProfile (line 1493) | private async determineActiveProfile(): Promise { method getClaudeCliPathForSdkAsync (line 1205) | async getClaudeCliPathForSdkAsync(): Promise { method detectToolPathAsync (line 1228) | private async detectToolPathAsync(tool: CLITool): Promise { method validateGitHubCLIAsync (line 1415) | private async validateGitHubCLIAsync(ghCmd: string): Promise { method detectPythonAsync (line 1585) | private async detectPythonAsync(): Promise { method detectGitAsync (line 1703) | private async detectGitAsync(): Promise { method detectGitHubCLIAsync (line 1809) | private async detectGitHubCLIAsync(): Promise { method detectGitLabCLIAsync (line 1907) | private async detectGitLabCLIAsync(): Promise { method getBundledPythonPath (line 2000) | private getBundledPythonPath(): string | null { method findHomebrewPython (line 2019) | private findHomebrewPython(): string | null { method clearCache (line 2032) | clearCache(): void { method getToolInfo (line 2046) | getToolInfo(tool: CLITool): ToolDetectionResult { function getToolPath (line 2074) | function getToolPath(tool: CLITool): string { function getClaudeCliPathForSdk (line 2099) | function getClaudeCliPathForSdk(): string | null { function configureTools (line 2123) | function configureTools(config: ToolConfig): void { function getToolInfo (line 2147) | function getToolInfo(tool: CLITool): ToolDetectionResult { function clearToolCache (line 2165) | function clearToolCache(): void { function isPathFromWrongPlatform (line 2185) | function isPathFromWrongPlatform(pathStr: string | undefined): boolean { function getToolPathAsync (line 2209) | async function getToolPathAsync(tool: CLITool): Promise { function getClaudeCliPathForSdkAsync (line 2229) | async function getClaudeCliPathForSdkAsync(): Promise { function preWarmToolCache (line 2252) | async function preWarmToolCache(tools: CLITool[] = ['claude']): Promise<... FILE: apps/desktop/src/main/cli-utils.ts type ClaudeCliInvocation (line 6) | type ClaudeCliInvocation = { function ensureCommandDirInPath (line 11) | function ensureCommandDirInPath(command: string, env: Record { function getNpmGlobalPrefix (line 70) | function getNpmGlobalPrefix(): string | null { constant COMMON_BIN_PATHS (line 116) | const COMMON_BIN_PATHS: Record = { constant ESSENTIAL_SYSTEM_PATHS (line 153) | const ESSENTIAL_SYSTEM_PATHS: Record = { function getExpandedPlatformPaths (line 169) | function getExpandedPlatformPaths(additionalPaths?: string[]): string[] { function buildPathsToAdd (line 202) | function buildPathsToAdd( function getAugmentedEnv (line 235) | function getAugmentedEnv(additionalPaths?: string[]): Record { function getAugmentedEnvAsync (line 410) | async function getAugmentedEnvAsync(additionalPaths?: string[]): Promise... function findExecutableAsync (line 471) | async function findExecutableAsync(command: string): Promise { method unwatch (line 145) | async unwatch(taskId: string): Promise { method unwatchAll (line 163) | async unwatchAll(): Promise { method isWatching (line 187) | isWatching(taskId: string): boolean { method getWatchedSpecDir (line 194) | getWatchedSpecDir(taskId: string): string | null { method getCurrentPlan (line 203) | getCurrentPlan(taskId: string): ImplementationPlan | null { method normalizePlanStatuses (line 222) | private normalizePlanStatuses(plan: ImplementationPlan): Implementatio... FILE: apps/desktop/src/main/fs-utils.ts function ensureDir (line 19) | function ensureDir(dirPath: string): boolean { function ensureAppDirectories (line 35) | function ensureAppDirectories(): void { function getWritablePath (line 56) | function getWritablePath(originalPath: string, filename: string): string { function safeWriteFile (line 95) | function safeWriteFile(filePath: string, content: string): string { function safeReadFile (line 114) | function safeReadFile(originalPath: string): string | null { FILE: apps/desktop/src/main/index.ts constant WINDOW_PREFERRED_WIDTH (line 98) | const WINDOW_PREFERRED_WIDTH: number = 1400; constant WINDOW_PREFERRED_HEIGHT (line 100) | const WINDOW_PREFERRED_HEIGHT: number = 900; constant WINDOW_MIN_WIDTH (line 102) | const WINDOW_MIN_WIDTH: number = 800; constant WINDOW_MIN_HEIGHT (line 104) | const WINDOW_MIN_HEIGHT: number = 500; constant WINDOW_SCREEN_MARGIN (line 106) | const WINDOW_SCREEN_MARGIN: number = 20; constant DEFAULT_SCREEN_WIDTH (line 108) | const DEFAULT_SCREEN_WIDTH: number = 1920; constant DEFAULT_SCREEN_HEIGHT (line 109) | const DEFAULT_SCREEN_HEIGHT: number = 1080; function loadSettingsSync (line 129) | function loadSettingsSync(): AppSettings { function cleanupStaleUpdateMetadata (line 141) | function cleanupStaleUpdateMetadata(): void { function getIconPath (line 161) | function getIconPath(): string { function createWindow (line 198) | function createWindow(): void { FILE: apps/desktop/src/main/insights-service.ts class InsightsService (line 26) | class InsightsService extends EventEmitter { method constructor (line 33) | constructor() { method configure (line 61) | configure(pythonPath?: string, autoBuildSourcePath?: string): void { method loadSession (line 68) | loadSession(projectId: string, projectPath: string): InsightsSession |... method listSessions (line 75) | listSessions(projectPath: string, includeArchived = false): InsightsSe... method createNewSession (line 82) | createNewSession(projectId: string, projectPath: string): InsightsSess... method switchSession (line 89) | switchSession(projectId: string, projectPath: string, sessionId: strin... method deleteSession (line 96) | deleteSession(projectId: string, projectPath: string, sessionId: strin... method archiveSession (line 103) | archiveSession(projectId: string, projectPath: string, sessionId: stri... method unarchiveSession (line 110) | unarchiveSession(projectPath: string, sessionId: string): boolean { method deleteSessions (line 117) | deleteSessions(projectId: string, projectPath: string, sessionIds: str... method archiveSessions (line 124) | archiveSessions(projectId: string, projectPath: string, sessionIds: st... method renameSession (line 131) | renameSession(projectPath: string, sessionId: string, newTitle: string... method clearSession (line 138) | clearSession(projectId: string, projectPath: string): void { method sendMessage (line 145) | async sendMessage( method updateSessionModelConfig (line 244) | updateSessionModelConfig(projectPath: string, sessionId: string, model... FILE: apps/desktop/src/main/insights/config.ts class InsightsConfig (line 14) | class InsightsConfig { method configure (line 17) | configure(_pythonPath?: string, autoBuildSourcePath?: string): void { method getAutoBuildSourcePath (line 27) | getAutoBuildSourcePath(): string | null { method loadAutoBuildEnv (line 48) | loadAutoBuildEnv(): Record { method getProcessEnv (line 88) | async getProcessEnv(): Promise> { FILE: apps/desktop/src/main/insights/insights-executor.ts type ProcessorResult (line 19) | interface ProcessorResult { class InsightsExecutor (line 29) | class InsightsExecutor extends EventEmitter { method constructor (line 33) | constructor(config: InsightsConfig) { method isSessionActive (line 41) | isSessionActive(projectId: string): boolean { method cancelSession (line 48) | cancelSession(projectId: string): boolean { method execute (line 60) | async execute( method handleRateLimit (line 212) | private handleRateLimit(projectId: string, output: string): void { FILE: apps/desktop/src/main/insights/paths.ts constant INSIGHTS_DIR (line 3) | const INSIGHTS_DIR = '.auto-claude/insights'; constant SESSIONS_DIR (line 4) | const SESSIONS_DIR = 'sessions'; constant CURRENT_SESSION_FILE (line 5) | const CURRENT_SESSION_FILE = 'current_session.json'; class InsightsPaths (line 11) | class InsightsPaths { method getInsightsDir (line 15) | getInsightsDir(projectPath: string): string { method getSessionsDir (line 22) | getSessionsDir(projectPath: string): string { method validateSessionId (line 30) | private validateSessionId(sessionId: string): void { method getSessionPath (line 39) | getSessionPath(projectPath: string, sessionId: string): string { method getCurrentSessionPath (line 47) | getCurrentSessionPath(projectPath: string): string { method getOldSessionPath (line 54) | getOldSessionPath(projectPath: string): string { FILE: apps/desktop/src/main/insights/session-manager.ts class SessionManager (line 9) | class SessionManager { method constructor (line 13) | constructor(storage: SessionStorage, _paths: InsightsPaths) { method loadSession (line 21) | loadSession(projectId: string, projectPath: string): InsightsSession |... method listSessions (line 44) | listSessions(projectPath: string, includeArchived = false): InsightsSe... method createNewSession (line 53) | createNewSession(projectId: string, projectPath: string): InsightsSess... method switchSession (line 75) | switchSession(projectId: string, projectPath: string, sessionId: strin... method deleteSession (line 87) | deleteSession(projectId: string, projectPath: string, sessionId: strin... method archiveSession (line 112) | archiveSession(projectId: string, projectPath: string, sessionId: stri... method unarchiveSession (line 135) | unarchiveSession(projectPath: string, sessionId: string): boolean { method deleteSessions (line 142) | deleteSessions(projectId: string, projectPath: string, sessionIds: str... method archiveSessions (line 164) | archiveSessions(projectId: string, projectPath: string, sessionIds: st... method renameSession (line 186) | renameSession(projectPath: string, sessionId: string, newTitle: string... method updateSessionModelConfig (line 210) | updateSessionModelConfig(projectPath: string, sessionId: string, model... method saveSession (line 234) | saveSession(projectPath: string, session: InsightsSession): void { method clearSession (line 242) | clearSession(projectId: string, projectPath: string): void { method getCachedSession (line 250) | getCachedSession(projectId: string): InsightsSession | null { method clearCache (line 257) | clearCache(projectId: string): void { FILE: apps/desktop/src/main/insights/session-storage.ts class SessionStorage (line 10) | class SessionStorage { method constructor (line 13) | constructor(paths: InsightsPaths) { method generateTitle (line 20) | generateTitle(message: string): string { method loadSessionById (line 29) | loadSessionById(projectPath: string, sessionId: string): InsightsSessi... method saveSession (line 60) | saveSession(projectPath: string, session: InsightsSession): void { method archiveSession (line 78) | archiveSession(projectPath: string, sessionId: string): boolean { method unarchiveSession (line 95) | unarchiveSession(projectPath: string, sessionId: string): boolean { method deleteSessions (line 112) | deleteSessions(projectPath: string, sessionIds: string[]): { deletedId... method archiveSessions (line 130) | archiveSessions(projectPath: string, sessionIds: string[]): { archived... method deleteSession (line 148) | deleteSession(projectPath: string, sessionId: string): boolean { method listSessions (line 163) | listSessions(projectPath: string, includeArchived = false): InsightsSe... method getCurrentSessionId (line 217) | getCurrentSessionId(projectPath: string): string | null { method saveCurrentSessionId (line 233) | saveCurrentSessionId(projectPath: string, sessionId: string): void { method clearCurrentSessionId (line 246) | clearCurrentSessionId(projectPath: string): void { method stripImageDataForPersistence (line 257) | private stripImageDataForPersistence(session: InsightsSession): Insigh... method migrateOldSession (line 273) | migrateOldSession(projectPath: string): void { FILE: apps/desktop/src/main/integrations/types.ts type FeedbackItem (line 14) | interface FeedbackItem { type ProviderConnection (line 30) | interface ProviderConnection { type ProviderConfig (line 41) | interface ProviderConfig { type IntegrationAdapter (line 55) | interface IntegrationAdapter { constant CANNY_STATUS_MAP (line 92) | const CANNY_STATUS_MAP = { constant GITHUB_ISSUES_STATUS_MAP (line 113) | const GITHUB_ISSUES_STATUS_MAP = { FILE: apps/desktop/src/main/ipc-handlers/__tests__/settled-state-guard.test.ts function shouldBlockExecutionProgress (line 42) | function shouldBlockExecutionProgress(currentXState: string | undefined)... FILE: apps/desktop/src/main/ipc-handlers/agent-events-handlers.ts constant STUCK_TASK_FALLBACK_TIMEOUT_MS (line 25) | const STUCK_TASK_FALLBACK_TIMEOUT_MS = 500; function registerAgenteventsHandlers (line 33) | function registerAgenteventsHandlers( function cancelFallbackTimer (line 455) | function cancelFallbackTimer(taskId: string): void { FILE: apps/desktop/src/main/ipc-handlers/app-update-handlers.ts function registerAppUpdateHandlers (line 23) | function registerAppUpdateHandlers(): void { FILE: apps/desktop/src/main/ipc-handlers/changelog-handlers.ts function registerChangelogHandlers (line 31) | function registerChangelogHandlers( FILE: apps/desktop/src/main/ipc-handlers/claude-code-handlers.ts constant CACHE_DURATION_MS (line 35) | const CACHE_DURATION_MS = 24 * 60 * 60 * 1000; constant VERSION_LIST_CACHE_DURATION_MS (line 36) | const VERSION_LIST_CACHE_DURATION_MS = 60 * 60 * 1000; function validateClaudeCliAsync (line 43) | async function validateClaudeCliAsync(cliPath: string): Promise<[boolean... function scanClaudeInstallations (line 106) | async function scanClaudeInstallations(activePath: string | null): Promi... function fetchLatestVersion (line 220) | async function fetchLatestVersion(currentInstalled?: string | null): Pro... function fetchAvailableVersions (line 285) | async function fetchAvailableVersions(): Promise { function getInstallVersionCommand (line 338) | function getInstallVersionCommand(version: string): string { function getInstallCommand (line 352) | function getInstallCommand(isUpdate: boolean): string { function escapeAppleScriptString (line 377) | function escapeAppleScriptString(str: string): string { function escapePowerShellCommand (line 388) | function escapePowerShellCommand(str: string): string { function escapeGitBashCommand (line 405) | function escapeGitBashCommand(str: string): string { function escapeBashCommand (line 425) | function escapeBashCommand(str: string): string { function openTerminalWithCommand (line 435) | async function openTerminalWithCommand(command: string): Promise { type AuthCheckResult (line 840) | interface AuthCheckResult { function checkProfileAuthentication (line 862) | function checkProfileAuthentication(configDir: string): AuthCheckResult { function registerClaudeCodeHandlers (line 957) | function registerClaudeCodeHandlers(): void { FILE: apps/desktop/src/main/ipc-handlers/codex-auth-handlers.ts function registerCodexAuthHandlers (line 4) | function registerCodexAuthHandlers(): void { FILE: apps/desktop/src/main/ipc-handlers/context-handlers.ts function setupContextHandlers (line 25) | function setupContextHandlers( FILE: apps/desktop/src/main/ipc-handlers/context/index.ts function registerContextHandlers (line 9) | function registerContextHandlers( FILE: apps/desktop/src/main/ipc-handlers/context/memory-data-handlers.ts function toRendererMemory (line 18) | function toRendererMemory(m: Memory): RendererMemory { function registerMemoryDataHandlers (line 48) | function registerMemoryDataHandlers( FILE: apps/desktop/src/main/ipc-handlers/context/memory-service-factory.ts function buildEmbeddingConfig (line 20) | function buildEmbeddingConfig(): EmbeddingConfig | undefined { function getMemoryService (line 43) | async function getMemoryService(): Promise { function getEmbeddingProvider (line 66) | function getEmbeddingProvider(): string | null { function resetMemoryService (line 73) | function resetMemoryService(): void { FILE: apps/desktop/src/main/ipc-handlers/context/memory-status-handlers.ts function buildMemoryStatus (line 12) | async function buildMemoryStatus(): Promise { function registerMemoryStatusHandlers (line 39) | function registerMemoryStatusHandlers( FILE: apps/desktop/src/main/ipc-handlers/context/project-context-handlers.ts function toRendererMemory (line 23) | function toRendererMemory(m: Memory): RendererMemory { function loadProjectIndex (line 49) | function loadProjectIndex(projectPath: string): ProjectIndex | null { function loadRecentMemories (line 66) | async function loadRecentMemories(projectId: string): Promise, key: string, defaultVal: ... function registerEnvHandlers (line 30) | function registerEnvHandlers( FILE: apps/desktop/src/main/ipc-handlers/feature-settings-helper.ts type FeatureKey (line 26) | type FeatureKey = keyof FeatureModelConfig; type FeatureSettings (line 28) | interface FeatureSettings { function resolveActiveProvider (line 38) | function resolveActiveProvider(settings: Record): Built... function getActiveProviderFeatureSettings (line 62) | function getActiveProviderFeatureSettings(featureKey: FeatureKey): Featu... FILE: apps/desktop/src/main/ipc-handlers/file-handlers.ts constant MAX_FILE_SIZE (line 9) | const MAX_FILE_SIZE = 1024 * 1024; function validatePath (line 15) | function validatePath(filePath: string): { valid: true; path: string } |... constant IGNORED_DIRS (line 35) | const IGNORED_DIRS = new Set([ function registerFileHandlers (line 45) | function registerFileHandlers(): void { FILE: apps/desktop/src/main/ipc-handlers/github-handlers.ts function registerGithubHandlers (line 28) | function registerGithubHandlers( FILE: apps/desktop/src/main/ipc-handlers/github/__tests__/oauth-handlers.spec.ts method handle (line 32) | handle(channel: string, handler: Function): void { method removeHandler (line 36) | removeHandler(channel: string): void { method invokeHandler (line 40) | async invokeHandler(channel: string, event: unknown, ...args: unknown[])... method getHandler (line 48) | getHandler(channel: string): Function | undefined { function createMockProcess (line 99) | function createMockProcess(): EventEmitter & { FILE: apps/desktop/src/main/ipc-handlers/github/__tests__/runner-env-handlers.test.ts class HoistedMockIpcMain (line 12) | class HoistedMockIpcMain { method handle (line 16) | handle(channel: string, handler: Function): void { method on (line 20) | on(channel: string, listener: Function): void { method invokeHandler (line 24) | async invokeHandler(channel: string, ...args: unknown[]): Promise { method reset (line 40) | reset(): void { type CreateIPCCommunicators (line 57) | type CreateIPCCommunicators = typeof createIPCCommunicatorsType; class MockBrowserWindow (line 71) | class MockBrowserWindow {} class MockAgentManager (line 81) | class MockAgentManager { class MockParallelOrchestratorReviewer (line 114) | class MockParallelOrchestratorReviewer { method review (line 115) | review(...args: unknown[]) { class MockBatchProcessorClass (line 129) | class MockBatchProcessorClass { method groupIssues (line 130) | groupIssues(...args: unknown[]) { method analyzeBatch (line 133) | analyzeBatch(...args: unknown[]) { class MockPRReviewStateManager (line 176) | class MockPRReviewStateManager { function createMockWindow (line 234) | function createMockWindow(): BrowserWindow { function createProject (line 238) | function createProject(): Project { FILE: apps/desktop/src/main/ipc-handlers/github/autofix-handlers.ts type AutoFixConfig (line 33) | interface AutoFixConfig { type AutoFixQueueItem (line 45) | interface AutoFixQueueItem { type AutoFixProgress (line 59) | interface AutoFixProgress { type IssueBatch (line 69) | interface IssueBatch { type BatchProgress (line 90) | interface BatchProgress { function getGitHubDir (line 101) | function getGitHubDir(project: Project): string { function getAutoFixConfig (line 108) | function getAutoFixConfig(project: Project): AutoFixConfig { function saveAutoFixConfig (line 138) | function saveAutoFixConfig(project: Project, config: AutoFixConfig): void { function getAutoFixQueue (line 168) | function getAutoFixQueue(project: Project): AutoFixQueueItem[] { function checkAutoFixLabels (line 210) | async function checkAutoFixLabels(project: Project): Promise { function checkNewIssues (line 262) | async function checkNewIssues(project: Project): Promise { constant DEBUG (line 79) | const DEBUG = process.env.DEBUG === 'true' || process.env.NODE_ENV === '... function debugLog (line 81) | function debugLog(message: string, data?: unknown): void { constant GITHUB_REPO_PATTERN (line 93) | const GITHUB_REPO_PATTERN = /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/; function isValidGitHubRepo (line 99) | function isValidGitHubRepo(repo: string): boolean { constant DEVICE_CODE_PATTERN (line 109) | const DEVICE_CODE_PATTERN = /(?:one-time code|verification code|code):\s... constant DEVICE_URL_PATTERN (line 112) | const DEVICE_URL_PATTERN = /https:\/\/github\.com\/login\/device/i; constant GITHUB_DEVICE_URL (line 115) | const GITHUB_DEVICE_URL = 'https://github.com/login/device'; function parseDeviceCode (line 122) | function parseDeviceCode(output: string): string | null { function parseDeviceUrl (line 137) | function parseDeviceUrl(output: string): string { type DeviceFlowInfo (line 150) | interface DeviceFlowInfo { function parseDeviceFlowOutput (line 159) | function parseDeviceFlowOutput(stdout: string, stderr: string): DeviceFl... function registerCheckGhCli (line 172) | function registerCheckGhCli(): void { function registerCheckGhAuth (line 218) | function registerCheckGhAuth(): void { type GitHubAuthStartResult (line 265) | interface GitHubAuthStartResult { function registerStartGhAuth (line 286) | function registerStartGhAuth(): void { function registerGetGhToken (line 469) | function registerGetGhToken(): void { function registerGetGhUser (line 509) | function registerGetGhUser(): void { function registerListUserRepos (line 547) | function registerListUserRepos(): void { function registerDetectGitHubRepo (line 592) | function registerDetectGitHubRepo(): void { function registerGetGitHubBranches (line 642) | function registerGetGitHubBranches(): void { function registerCreateGitHubRepo (line 693) | function registerCreateGitHubRepo(): void { function registerAddGitRemote (line 776) | function registerAddGitRemote(): void { function registerListGitHubOrgs (line 843) | function registerListGitHubOrgs(): void { function registerGithubOAuthHandlers (line 893) | function registerGithubOAuthHandlers(): void { FILE: apps/desktop/src/main/ipc-handlers/github/pr-handlers.ts type GraphQLPRNode (line 60) | interface GraphQLPRNode { type GraphQLPRListResponse (line 77) | interface GraphQLPRListResponse { function mapGraphQLPRToData (line 96) | function mapGraphQLPRToData(pr: GraphQLPRNode): PRData { function githubGraphQL (line 119) | async function githubGraphQL( constant LIST_PRS_QUERY (line 158) | const LIST_PRS_QUERY = ` function sanitizeNetworkData (line 188) | function sanitizeNetworkData(data: string, maxLength = 1000000): string { constant CI_WAIT_PLACEHOLDER (line 236) | const CI_WAIT_PLACEHOLDER = Symbol("CI_WAIT_PLACEHOLDER"); type CIWaitPlaceholder (line 237) | type CIWaitPlaceholder = typeof CI_WAIT_PLACEHOLDER; function getReviewKey (line 257) | function getReviewKey(projectId: string, prNumber: number): string { function getClaudeMdEnv (line 264) | function getClaudeMdEnv(project: Project): Record | unde... type PRReviewFinding (line 271) | interface PRReviewFinding { type PRReviewResult (line 291) | interface PRReviewResult { type NewCommitsCheck (line 320) | interface NewCommitsCheck { type MergeReadiness (line 339) | interface MergeReadiness { type PRReviewMemory (line 356) | interface PRReviewMemory { function savePRReviewToMemory (line 392) | async function savePRReviewToMemory( type PRData (line 502) | interface PRData { type PRListResult (line 528) | interface PRListResult { type PRReviewProgress (line 537) | interface PRReviewProgress { type CIWaitResult (line 547) | interface CIWaitResult { function waitForCIChecks (line 581) | async function waitForCIChecks( function performCIWaitCheck (line 763) | async function performCIWaitCheck( function getGitHubDir (line 824) | function getGitHubDir(project: Project): string { type PRLogPhase (line 831) | type PRLogPhase = "context" | "analysis" | "synthesis"; type PRLogEntryType (line 836) | type PRLogEntryType = type PRLogEntry (line 849) | interface PRLogEntry { type PRPhaseLog (line 862) | interface PRPhaseLog { type PRLogs (line 873) | interface PRLogs { function parseLogLine (line 890) | function parseLogLine(line: string): { source: string; content: string; ... function getPhaseFromSource (line 1015) | function getPhaseFromSource(source: string): PRLogPhase { function createEmptyPRLogs (line 1057) | function createEmptyPRLogs(prNumber: number, repo: string, isFollowup: b... function getPRLogsPath (line 1087) | function getPRLogsPath(project: Project, prNumber: number): string { function loadPRLogs (line 1102) | function loadPRLogs(project: Project, prNumber: number): PRLogs | null { function savePRLogs (line 1126) | function savePRLogs(project: Project, logs: PRLogs): void { function addLogEntry (line 1142) | function addLogEntry(logs: PRLogs, entry: PRLogEntry): boolean { class PRLogCollector (line 1180) | class PRLogCollector { method constructor (line 1188) | constructor( method processLine (line 1213) | processLine(line: string): void { method markPhaseComplete (line 1265) | markPhaseComplete(phase: PRLogPhase, success: boolean): void { method save (line 1298) | save(): void { method finalize (line 1329) | finalize(success: boolean): void { function getReviewResult (line 1347) | function getReviewResult(project: Project, prNumber: number): PRReviewRe... function sendReviewStateUpdate (line 1405) | function sendReviewStateUpdate( function getGitHubPRSettings (line 1443) | function getGitHubPRSettings(): { model: string; thinkingLevel: string } { function fetchPRContext (line 1465) | async function fetchPRContext( function saveReviewResultToDisk (line 1601) | function saveReviewResultToDisk( function runPRReview (line 1656) | async function runPRReview( function fetchPRsFromGraphQL (line 1800) | async function fetchPRsFromGraphQL( function registerPRHandlers (line 1861) | function registerPRHandlers(getMainWindow: () => BrowserWindow | null): ... FILE: apps/desktop/src/main/ipc-handlers/github/release-handlers.ts function checkGhCli (line 20) | function checkGhCli(): { installed: boolean; error?: string } { function checkGhAuth (line 35) | function checkGhAuth(projectPath: string): { authenticated: boolean; err... function buildReleaseArgs (line 50) | function buildReleaseArgs(version: string, releaseNotes: string, options... function registerCreateRelease (line 67) | function registerCreateRelease(): void { function getLatestTag (line 127) | function getLatestTag(projectPath: string): string | null { function getCommitsSinceTag (line 142) | function getCommitsSinceTag(projectPath: string, tag: string | null): Gi... function getCurrentVersion (line 172) | function getCurrentVersion(projectPath: string): string { function registerSuggestVersion (line 188) | function registerSuggestVersion(): void { function registerReleaseHandlers (line 263) | function registerReleaseHandlers(): void { FILE: apps/desktop/src/main/ipc-handlers/github/repository-handlers.ts function registerCheckConnection (line 15) | function registerCheckConnection(): void { function registerGetRepositories (line 88) | function registerGetRepositories(): void { function registerRepositoryHandlers (line 138) | function registerRepositoryHandlers(): void { FILE: apps/desktop/src/main/ipc-handlers/github/spec-utils.ts type SpecCreationData (line 14) | interface SpecCreationData { function slugifyTitle (line 24) | function slugifyTitle(title: string): string { function determineCategoryFromLabels (line 36) | function determineCategoryFromLabels(labels: string[]): 'feature' | 'bug... function createSpecForIssue (line 95) | async function createSpecForIssue( function buildIssueContext (line 191) | function buildIssueContext( function buildInvestigationTask (line 215) | function buildInvestigationTask( function updateImplementationPlanStatus (line 236) | function updateImplementationPlanStatus(specDir: string, status: string)... FILE: apps/desktop/src/main/ipc-handlers/github/triage-handlers.ts type TriageCategory (line 39) | type TriageCategory = type TriageResult (line 51) | interface TriageResult { type TriageConfig (line 71) | interface TriageConfig { type TriageProgress (line 82) | interface TriageProgress { function getGitHubDir (line 94) | function getGitHubDir(project: Project): string { function getTriageConfig (line 101) | function getTriageConfig(project: Project): TriageConfig { function saveTriageConfig (line 129) | function saveTriageConfig(project: Project, config: TriageConfig): void { function getTriageResults (line 157) | function getTriageResults(project: Project): TriageResult[] { function saveTriageResultToDisk (line 202) | function saveTriageResultToDisk(project: Project, result: TriageResult):... function getGitHubIssuesSettings (line 234) | function getGitHubIssuesSettings(): { modelShorthand: ModelShorthand; th... function convertEngineResult (line 253) | function convertEngineResult( function runTriage (line 278) | async function runTriage( function registerTriageHandlers (line 412) | function registerTriageHandlers(getMainWindow: () => BrowserWindow | nul... FILE: apps/desktop/src/main/ipc-handlers/github/types.ts type GitHubConfig (line 5) | interface GitHubConfig { type GitHubAPIIssue (line 10) | interface GitHubAPIIssue { type GitHubAPIRepository (line 29) | interface GitHubAPIRepository { type GitHubAPIComment (line 40) | interface GitHubAPIComment { type ReleaseOptions (line 48) | interface ReleaseOptions { FILE: apps/desktop/src/main/ipc-handlers/github/utils.ts type ETagCacheEntry (line 20) | interface ETagCacheEntry { type ETagCache (line 29) | interface ETagCache { type RateLimitInfo (line 36) | interface RateLimitInfo { type GitHubFetchWithETagResult (line 45) | interface GitHubFetchWithETagResult { constant ETAG_CACHE_TTL_MS (line 54) | const ETAG_CACHE_TTL_MS = 30 * 60 * 1000; constant ETAG_CACHE_MAX_SIZE (line 59) | const ETAG_CACHE_MAX_SIZE = 200; constant ETAG_EVICTION_INTERVAL (line 64) | const ETAG_EVICTION_INTERVAL = 10; function getETagCache (line 79) | function getETagCache(): ETagCache { function clearETagCache (line 86) | function clearETagCache(): void { function clearETagCacheForProject (line 97) | function clearETagCacheForProject(ownerRepo: string): void { function evictStaleCacheEntries (line 109) | function evictStaleCacheEntries(): void { function extractRateLimitInfo (line 136) | function extractRateLimitInfo(response: Response): RateLimitInfo | null { function getTokenFromGhCliAsync (line 156) | async function getTokenFromGhCliAsync(): Promise { function getTokenFromGhCliSync (line 173) | function getTokenFromGhCliSync(): string | null { function getGitHubTokenForSubprocess (line 191) | async function getGitHubTokenForSubprocess(): Promise { function getGitHubConfig (line 199) | function getGitHubConfig(project: Project): GitHubConfig | null { function normalizeRepoReference (line 233) | function normalizeRepoReference(repo: string): string { function githubFetch (line 254) | async function githubFetch( function githubFetchWithETag (line 288) | async function githubFetchWithETag( FILE: apps/desktop/src/main/ipc-handlers/github/utils/ipc-communicator.ts function createProgressSender (line 13) | function createProgressSender( function createErrorSender (line 26) | function createErrorSender( function createCompleteSender (line 40) | function createCompleteSender( function createIPCCommunicators (line 53) | function createIPCCommunicators( FILE: apps/desktop/src/main/ipc-handlers/github/utils/logger.ts constant DEBUG (line 5) | const DEBUG = process.env.DEBUG === 'true' || process.env.NODE_ENV === '... constant VERBOSE (line 6) | const VERBOSE = process.env.VERBOSE === 'true'; function createContextLogger (line 11) | function createContextLogger(context: string): { function debugLog (line 40) | function debugLog(context: string, message: string, data?: unknown): void { function traceLog (line 53) | function traceLog(context: string, message: string, data?: unknown): void { FILE: apps/desktop/src/main/ipc-handlers/github/utils/project-middleware.ts function validateProjectPath (line 16) | function validateProjectPath(projectPath: string): void { function withProject (line 52) | async function withProject( function withProjectOrNull (line 80) | async function withProjectOrNull( function withProjectOrDefault (line 102) | async function withProjectOrDefault( function withProjectSync (line 117) | function withProjectSync( function withProjectSyncOrNull (line 131) | function withProjectSyncOrNull( FILE: apps/desktop/src/main/ipc-handlers/gitlab-handlers.ts function setupGitlabHandlers (line 17) | function setupGitlabHandlers( FILE: apps/desktop/src/main/ipc-handlers/gitlab/__tests__/autofix-handlers.test.ts function sanitizeIssueUrl (line 11) | function sanitizeIssueUrl(rawUrl: unknown, instanceUrl: string): string { FILE: apps/desktop/src/main/ipc-handlers/gitlab/__tests__/issue-handlers.test.ts type GitLabAPIIssue (line 8) | interface GitLabAPIIssue { type GitLabIssue (line 25) | interface GitLabIssue { function transformIssue (line 46) | function transformIssue(apiIssue: GitLabAPIIssue, projectPath: string): ... FILE: apps/desktop/src/main/ipc-handlers/gitlab/__tests__/merge-request-handlers.test.ts constant VALID_MR_STATES (line 13) | const VALID_MR_STATES = ['opened', 'closed', 'merged', 'locked', 'all'] ... type MergeRequestState (line 14) | type MergeRequestState = typeof VALID_MR_STATES[number]; function isValidMrState (line 16) | function isValidMrState(state: string): state is MergeRequestState { type GitLabAPIMergeRequest (line 21) | interface GitLabAPIMergeRequest { type GitLabMergeRequest (line 39) | interface GitLabMergeRequest { function transformMergeRequest (line 61) | function transformMergeRequest(apiMr: GitLabAPIMergeRequest): GitLabMerg... FILE: apps/desktop/src/main/ipc-handlers/gitlab/__tests__/mr-review-handlers.test.ts type MRReviewFinding (line 8) | interface MRReviewFinding { type MRReviewResult (line 21) | interface MRReviewResult { type RawReviewData (line 39) | interface RawReviewData { function parseReviewResult (line 71) | function parseReviewResult(data: RawReviewData): MRReviewResult { function formatReviewBody (line 105) | function formatReviewBody(result: MRReviewResult, selectedFindingIds?: s... FILE: apps/desktop/src/main/ipc-handlers/gitlab/__tests__/oauth-handlers.test.ts constant GITLAB_PROJECT_PATTERN (line 11) | const GITLAB_PROJECT_PATTERN = /^[A-Za-z0-9_.-]+(?:\/[A-Za-z0-9_.-]+)+$/; function isValidGitLabProject (line 16) | function isValidGitLabProject(project: string): boolean { function getHostnameFromUrl (line 25) | function getHostnameFromUrl(instanceUrl: string): string { function redactSensitiveData (line 36) | function redactSensitiveData(data: unknown): unknown { FILE: apps/desktop/src/main/ipc-handlers/gitlab/autofix-handlers.ts function debugLog (line 28) | function debugLog(message: string, ...args: unknown[]): void { function sanitizeIssueUrl (line 32) | function sanitizeIssueUrl(rawUrl: unknown, instanceUrl: string): string { function validatePathWithinProject (line 58) | function validatePathWithinProject(projectPath: string, resolvedPath: st... function getGitLabDir (line 70) | function getGitLabDir(project: Project): string { function getAutoFixConfig (line 79) | function getAutoFixConfig(project: Project): GitLabAutoFixConfig { function saveAutoFixConfig (line 109) | function saveAutoFixConfig(project: Project, config: GitLabAutoFixConfig... function getAutoFixQueue (line 137) | function getAutoFixQueue(project: Project): GitLabAutoFixQueueItem[] { function getBatches (line 173) | function getBatches(project: Project): GitLabIssueBatch[] { function checkAutoFixLabels (line 210) | async function checkAutoFixLabels(project: Project): Promise { function checkNewIssues (line 260) | async function checkNewIssues(project: Project): Promise { function sanitizeMilestone (line 134) | function sanitizeMilestone(value: unknown): { title: string } | undefined { function sanitizeIsoDate (line 140) | function sanitizeIsoDate(value: unknown): string { function sanitizeIssueUrl (line 148) | function sanitizeIssueUrl(rawUrl: unknown, instanceUrl: string): string { function sanitizeInstanceUrl (line 163) | function sanitizeInstanceUrl(value: unknown): string { function sanitizeIssueForSpec (line 175) | function sanitizeIssueForSpec(issue: IssueLike, instanceUrl: string): Sa... function generateSpecDirName (line 195) | function generateSpecDirName(issueIid: number, title: string): string { function buildIssueContext (line 211) | function buildIssueContext( function pathExists (line 265) | async function pathExists(filePath: string): Promise { function fetchAllIssueNotes (line 283) | async function fetchAllIssueNotes( function createSpecForIssue (line 374) | async function createSpecForIssue( FILE: apps/desktop/src/main/ipc-handlers/gitlab/triage-handlers.ts function debugLog (line 26) | function debugLog(message: string, ...args: unknown[]): void { constant TRIAGE_CATEGORIES (line 30) | const TRIAGE_CATEGORIES: GitLabTriageCategory[] = [ function sanitizeIssueIid (line 40) | function sanitizeIssueIid(value: unknown): number | null { function sanitizeCategory (line 48) | function sanitizeCategory(value: unknown): GitLabTriageCategory { function sanitizeLabels (line 52) | function sanitizeLabels(values: string[]): string[] { function sanitizeConfidence (line 56) | function sanitizeConfidence(value: number): number { function sanitizePriority (line 61) | function sanitizePriority(value: unknown): 'high' | 'medium' | 'low' { function sanitizeTriagedAt (line 66) | function sanitizeTriagedAt(value: unknown): string { function sanitizeTriageResult (line 72) | function sanitizeTriageResult(result: GitLabTriageResult): { function getGitLabDir (line 97) | function getGitLabDir(project: Project): string { function getTriageConfig (line 104) | function getTriageConfig(project: Project): GitLabTriageConfig { function saveTriageConfig (line 134) | function saveTriageConfig(project: Project, config: GitLabTriageConfig):... function getTriageResults (line 162) | function getTriageResults(project: Project): GitLabTriageResult[] { function applyLabels (line 201) | async function applyLabels( function sendProgress (line 247) | function sendProgress( function sendError (line 258) | function sendError( function sendComplete (line 269) | function sendComplete( function registerTriageHandlers (line 280) | function registerTriageHandlers( FILE: apps/desktop/src/main/ipc-handlers/gitlab/types.ts type GitLabConfig (line 5) | interface GitLabConfig { type GitLabAPIProject (line 11) | interface GitLabAPIProject { type GitLabAPIIssue (line 28) | interface GitLabAPIIssue { type GitLabAPINote (line 45) | interface GitLabAPINote { type GitLabAPINoteBasic (line 55) | interface GitLabAPINoteBasic { type GitLabAPIMergeRequest (line 61) | interface GitLabAPIMergeRequest { type GitLabAPIGroup (line 79) | interface GitLabAPIGroup { type GitLabAPIUser (line 88) | interface GitLabAPIUser { type GitLabReleaseOptions (line 96) | interface GitLabReleaseOptions { type GitLabAuthStartResult (line 102) | interface GitLabAuthStartResult { type CreateMergeRequestOptions (line 108) | interface CreateMergeRequestOptions { type MRReviewFinding (line 123) | interface MRReviewFinding { type MRReviewResult (line 136) | interface MRReviewResult { type MRReviewProgress (line 154) | interface MRReviewProgress { type NewCommitsCheck (line 161) | interface NewCommitsCheck { type GitLabAutoFixConfig (line 172) | interface GitLabAutoFixConfig { type GitLabAutoFixQueueItem (line 180) | interface GitLabAutoFixQueueItem { type GitLabIssueBatch (line 191) | interface GitLabIssueBatch { type GitLabBatchProgress (line 199) | interface GitLabBatchProgress { type GitLabAutoFixProgress (line 207) | interface GitLabAutoFixProgress { type GitLabAnalyzePreviewResult (line 214) | interface GitLabAnalyzePreviewResult { type GitLabTriageCategory (line 247) | type GitLabTriageCategory = 'bug' | 'feature' | 'documentation' | 'quest... type GitLabTriageConfig (line 249) | interface GitLabTriageConfig { type GitLabTriageResult (line 257) | interface GitLabTriageResult { FILE: apps/desktop/src/main/ipc-handlers/gitlab/utils.ts constant DEFAULT_GITLAB_URL (line 14) | const DEFAULT_GITLAB_URL = 'https://gitlab.com'; class GitLabAPIError (line 19) | class GitLabAPIError extends Error { method constructor (line 22) | constructor(message: string, statusCode: number) { function parseInstanceUrl (line 29) | function parseInstanceUrl(value: string): string | null { function normalizeInstanceUrl (line 49) | function normalizeInstanceUrl(value: string | undefined): string | null { function sanitizeToken (line 54) | function sanitizeToken(value: string | undefined): string | null { constant MAX_PROJECT_REF_LENGTH (line 71) | const MAX_PROJECT_REF_LENGTH = 1024; function sanitizeProjectRef (line 73) | function sanitizeProjectRef(value: string | undefined): string | null { function getTokenFromGlabCli (line 94) | function getTokenFromGlabCli(instanceUrl?: string): string | null { constant GITLAB_ENV_KEYS (line 121) | const GITLAB_ENV_KEYS = { function fileExists (line 131) | async function fileExists(filePath: string): Promise { function getGitLabConfig (line 145) | async function getGitLabConfig(project: Project): Promise = new Set([ function isValidIdeationType (line 30) | function isValidIdeationType(value: unknown): value is IdeationType { function validateEnabledTypes (line 34) | function validateEnabledTypes(rawTypes: unknown): IdeationType[] { function transformIdeaFromSnakeCase (line 56) | function transformIdeaFromSnakeCase(idea: RawIdea): Idea { type RawIdeationSession (line 184) | interface RawIdeationSession { function transformSessionFromSnakeCase (line 214) | function transformSessionFromSnakeCase( FILE: apps/desktop/src/main/ipc-handlers/ideation/types.ts type RawIdea (line 5) | interface RawIdea extends Record { type RawIdeationData (line 77) | interface RawIdeationData { FILE: apps/desktop/src/main/ipc-handlers/index.ts function setupIpcHandlers (line 47) | function setupIpcHandlers( FILE: apps/desktop/src/main/ipc-handlers/insights-handlers.ts function getInsightsFeatureSettings (line 28) | function getInsightsFeatureSettings(): InsightsModelConfig { function registerInsightsHandlers (line 40) | function registerInsightsHandlers(getMainWindow: () => BrowserWindow | n... FILE: apps/desktop/src/main/ipc-handlers/linear-handlers.ts function registerLinearHandlers (line 17) | function registerLinearHandlers( FILE: apps/desktop/src/main/ipc-handlers/mcp-handlers.ts constant SAFE_COMMANDS (line 20) | const SAFE_COMMANDS = new Set(['npx', 'npm', 'node', 'python', 'python3'... constant DANGEROUS_FLAGS (line 26) | const DANGEROUS_FLAGS = new Set([ constant SHELL_METACHARACTERS (line 37) | const SHELL_METACHARACTERS = ['&', '|', '>', '<', '^', '%', ';', '$', '`... function isCommandSafe (line 42) | function isCommandSafe(command: string | undefined): boolean { function areArgsSafe (line 52) | function areArgsSafe(args: string[] | undefined): boolean { function checkMcpHealth (line 73) | async function checkMcpHealth(server: CustomMcpServer): Promise = { function normalizeFeatureStatus (line 134) | function normalizeFeatureStatus(status: string | undefined): RoadmapFeat... function transformFeature (line 150) | function transformFeature(raw: RawRoadmapFeature): RoadmapFeature { function transformRoadmapFromSnakeCase (line 170) | function transformRoadmapFromSnakeCase( FILE: apps/desktop/src/main/ipc-handlers/screenshot-handlers.ts function registerScreenshotHandlers (line 19) | function registerScreenshotHandlers(): void { FILE: apps/desktop/src/main/ipc-handlers/settings-handlers.ts function migrateToProviderAccounts (line 31) | async function migrateToProviderAccounts(settings: AppSettings): Promise... function registerSettingsHandlers (line 275) | function registerSettingsHandlers( FILE: apps/desktop/src/main/ipc-handlers/shared/label-utils.ts function escapeRegExp (line 13) | function escapeRegExp(str: string): string { function labelMatchesWholeWord (line 28) | function labelMatchesWholeWord(label: string, term: string): boolean { FILE: apps/desktop/src/main/ipc-handlers/shared/sanitize.ts function stripControlChars (line 11) | function stripControlChars(value: string, allowNewlines: boolean): string { function sanitizeText (line 32) | function sanitizeText(value: unknown, maxLength: number, allowNewlines =... function sanitizeStringArray (line 45) | function sanitizeStringArray(value: unknown, maxItems: number, maxLength... function sanitizeUrl (line 64) | function sanitizeUrl(value: unknown, maxLength = 2000): string { FILE: apps/desktop/src/main/ipc-handlers/task/__tests__/find-task-and-project.test.ts function createTask (line 21) | function createTask(overrides: Partial = {}): Task { function createProject (line 37) | function createProject(overrides: Partial = {}): Project { FILE: apps/desktop/src/main/ipc-handlers/task/archive-handlers.ts function registerTaskArchiveHandlers (line 9) | function registerTaskArchiveHandlers(): void { FILE: apps/desktop/src/main/ipc-handlers/task/crud-handlers.ts function sanitizeThinkingLevels (line 24) | function sanitizeThinkingLevels(metadata: TaskMetadata): void { function generateTitleWithFallback (line 48) | async function generateTitleWithFallback( function truncateToTitle (line 101) | function truncateToTitle(description: string): string { function updateLinkedRoadmapFeature (line 111) | async function updateLinkedRoadmapFeature( function registerTaskCRUDHandlers (line 123) | function registerTaskCRUDHandlers(agentManager: AgentManager): void { FILE: apps/desktop/src/main/ipc-handlers/task/execution-handlers.ts function hasAnyProviderAccount (line 33) | function hasAnyProviderAccount(): boolean { function safeReadFileSync (line 43) | function safeReadFileSync(filePath: string): string | null { function checkSubtasksCompletion (line 58) | function checkSubtasksCompletion(plan: Record | null): { function ensureProfileManagerInitialized (line 80) | async function ensureProfileManagerInitialized(): Promise< function getSpecDirForWatcher (line 103) | function getSpecDirForWatcher(projectPath: string, specsBaseDir: string,... function registerTaskExecutionHandlers (line 117) | function registerTaskExecutionHandlers( FILE: apps/desktop/src/main/ipc-handlers/task/index.ts function registerTaskHandlers (line 22) | function registerTaskHandlers( FILE: apps/desktop/src/main/ipc-handlers/task/logs-handlers.ts function registerTaskLogsHandlers (line 14) | function registerTaskLogsHandlers(getMainWindow: () => BrowserWindow | n... FILE: apps/desktop/src/main/ipc-handlers/task/plan-file-utils.ts function withPlanLock (line 37) | async function withPlanLock(planPath: string, operation: () => Promis... function isFileNotFoundError (line 64) | function isFileNotFoundError(err: unknown): boolean { function getPlanPath (line 71) | function getPlanPath(project: Project, task: Task): string { function mapStatusToPlanStatus (line 80) | function mapStatusToPlanStatus(status: TaskStatus): string { function persistPlanStatus (line 105) | async function persistPlanStatus(planPath: string, status: TaskStatus, p... function persistPlanStatusSync (line 167) | function persistPlanStatusSync(planPath: string, status: TaskStatus, pro... function persistPlanLastEventSync (line 205) | function persistPlanLastEventSync(planPath: string, event: TaskEventPayl... function persistPlanStatusAndReasonSync (line 241) | function persistPlanStatusAndReasonSync( function persistPlanPhaseSync (line 304) | function persistPlanPhaseSync( function updatePlanFile (line 374) | async function updatePlanFile>( function createPlanIfNotExists (line 416) | async function createPlanIfNotExists( function resetStuckSubtasks (line 473) | async function resetStuckSubtasks(planPath: string, projectId?: string):... function updateTaskMetadataPrUrl (line 543) | function updateTaskMetadataPrUrl(metadataPath: string, prUrl: string): b... function syncPlanPhasesToMainSync (line 581) | function syncPlanPhasesToMainSync( function hasPlanWithSubtasks (line 621) | function hasPlanWithSubtasks(project: Project, task: Task): boolean { FILE: apps/desktop/src/main/ipc-handlers/task/worktree-handlers.ts constant GIT_BRANCH_REGEX (line 31) | const GIT_BRANCH_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9._/-]*[a-zA-Z0-9]$|^[a-z... function validateWorktreeBranch (line 47) | function validateWorktreeBranch( constant MAX_PR_TITLE_LENGTH (line 89) | const MAX_PR_TITLE_LENGTH = 256; constant PRINTABLE_CHARS_REGEX (line 92) | const PRINTABLE_CHARS_REGEX = /^[\x20-\x7E\u00A0-\uFFFF]*$/; constant PR_CREATION_TIMEOUT_MS (line 95) | const PR_CREATION_TIMEOUT_MS = 120000; function getUtilitySettings (line 100) | function getUtilitySettings(): { model: string; modelId: string; thinkin... function fixMisconfiguredBareRepo (line 149) | function fixMisconfiguredBareRepo(projectPath: string): boolean { function isGitWorkTree (line 262) | function isGitWorkTree(projectPath: string): boolean { type DetectedTool (line 281) | interface DetectedTool { type DetectedTools (line 288) | interface DetectedTools { constant IDE_DETECTION (line 296) | const IDE_DETECTION: Partial> { function detectWindowsApps (line 1018) | async function detectWindowsApps(): Promise> { function detectLinuxApps (line 1060) | async function detectLinuxApps(): Promise> { function isAppInstalled (line 1119) | function isAppInstalled( function detectInstalledTools (line 1157) | async function detectInstalledTools(): Promise { function openInIDE (line 1282) | async function openInIDE(dirPath: string, ide: SupportedIDE, customPath?... function openInTerminal (line 1342) | async function openInTerminal(dirPath: string, terminal: SupportedTermin... function getTaskBaseBranch (line 1433) | function getTaskBaseBranch(specDir: string): string | undefined { function getEffectiveBaseBranch (line 1471) | function getEffectiveBaseBranch(projectPath: string, specId: string, pro... type ParsedPRResult (line 1519) | interface ParsedPRResult { function isValidGitHubUrl (line 1532) | function isValidGitHubUrl(url: string): boolean { function parsePRJsonOutput (line 1549) | function parsePRJsonOutput(stdout: string): ParsedPRResult | null { type TaskStatusUpdateResult (line 1590) | interface TaskStatusUpdateResult { function updateTaskStatusAfterPRCreation (line 1602) | async function updateTaskStatusAfterPRCreation( function buildCreatePRArgs (line 1658) | function buildCreatePRArgs( function withRetry (line 1709) | async function withRetry( function registerWorktreeHandlers (line 1753) | function registerWorktreeHandlers( FILE: apps/desktop/src/main/ipc-handlers/terminal-handlers.ts function registerTerminalHandlers (line 20) | function registerTerminalHandlers( function initializeUsageMonitorForwarding (line 739) | function initializeUsageMonitorForwarding(mainWindow: BrowserWindow): vo... FILE: apps/desktop/src/main/ipc-handlers/terminal/index.ts function registerTerminalWorktreeIpcHandlers (line 13) | function registerTerminalWorktreeIpcHandlers(): void { FILE: apps/desktop/src/main/ipc-handlers/terminal/worktree-handlers.ts constant WORKTREE_NAME_REGEX (line 34) | const WORKTREE_NAME_REGEX = /^[a-z0-9][a-z0-9_-]*[a-z0-9]$|^[a-z0-9]$/; constant GIT_BRANCH_REGEX (line 37) | const GIT_BRANCH_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9._/-]*[a-zA-Z0-9]$|^[a-z... constant GIT_PORCELAIN (line 40) | const GIT_PORCELAIN = { function isTimeoutError (line 52) | function isTimeoutError(error: unknown): boolean { function isSymlinkOrJunction (line 64) | function isSymlinkOrJunction(targetPath: string): boolean { function fixMisconfiguredBareRepo (line 82) | function fixMisconfiguredBareRepo(projectPath: string): boolean { function isValidProjectPath (line 181) | function isValidProjectPath(projectPath: string): boolean { function getDefaultBranch (line 191) | function getDefaultBranch(projectPath: string): string { function shouldPushNewBranches (line 243) | function shouldPushNewBranches(projectPath: string): boolean { type DependencyConfig (line 251) | interface DependencyConfig { constant DEFAULT_STRATEGY_MAP (line 270) | const DEFAULT_STRATEGY_MAP: Record void | Promise { FILE: apps/desktop/src/main/ipc-setup.ts function setupIpcHandlers (line 39) | function setupIpcHandlers( FILE: apps/desktop/src/main/log-service.ts type LogSession (line 4) | interface LogSession { type LogEntry (line 13) | interface LogEntry { class LogService (line 25) | class LogService { method startSession (line 38) | startSession(taskId: string, specDir: string): string { method appendLog (line 90) | appendLog(taskId: string, content: string): void { method flushBuffer (line 118) | private flushBuffer(taskId: string): void { method endSession (line 138) | endSession(taskId: string, exitCode?: number | null): void { method getSessions (line 188) | getSessions(specDir: string): LogSession[] { method loadSessionLogs (line 232) | loadSessionLogs(specDir: string, sessionId?: string): string { method loadRecentLogs (line 268) | loadRecentLogs(specDir: string, maxLines: number = 1000): string[] { method cleanupOldSessions (line 281) | private cleanupOldSessions(logsDir: string): void { method formatDuration (line 308) | private formatDuration(ms: number): string { method hasActiveSession (line 325) | hasActiveSession(taskId: string): boolean { method getCurrentLogPath (line 332) | getCurrentLogPath(taskId: string): string | null { FILE: apps/desktop/src/main/notification-service.ts type NotificationType (line 5) | type NotificationType = 'task-complete' | 'task-failed' | 'review-needed'; type NotificationOptions (line 7) | interface NotificationOptions { class NotificationService (line 17) | class NotificationService { method initialize (line 23) | initialize(getMainWindow: () => BrowserWindow | null): void { method notifyTaskComplete (line 30) | notifyTaskComplete(taskTitle: string, projectId: string, taskId: strin... method notifyTaskFailed (line 42) | notifyTaskFailed(taskTitle: string, projectId: string, taskId: string)... method notifyReviewNeeded (line 54) | notifyReviewNeeded(taskTitle: string, projectId: string, taskId: strin... method sendNotification (line 66) | private sendNotification(type: NotificationType, options: Notification... method playNotificationSound (line 106) | private playNotificationSound(): void { method getNotificationSettings (line 114) | private getNotificationSettings(projectId?: string): { method isNotificationEnabled (line 141) | private isNotificationEnabled( FILE: apps/desktop/src/main/platform/__tests__/platform.test.ts function mockPlatform (line 35) | function mockPlatform(platform: NodeJS.Platform) { FILE: apps/desktop/src/main/platform/__tests__/process-kill.test.ts function mockPlatform (line 32) | function mockPlatform(platform: NodeJS.Platform) { FILE: apps/desktop/src/main/platform/index.ts function getCurrentOS (line 30) | function getCurrentOS(): OS { function isWindows (line 42) | function isWindows(): boolean { function isMacOS (line 49) | function isMacOS(): boolean { function isLinux (line 56) | function isLinux(): boolean { function isUnix (line 63) | function isUnix(): boolean { function getPathConfig (line 70) | function getPathConfig(): PathConfig { function getPathDelimiter (line 89) | function getPathDelimiter(): string { function getExecutableExtension (line 96) | function getExecutableExtension(): string { function withExecutableExtension (line 103) | function withExecutableExtension(baseName: string): string { function getBinaryDirectories (line 117) | function getBinaryDirectories(): BinaryDirectories { function getHomebrewPath (line 166) | function getHomebrewPath(): string | null { function getShellConfig (line 186) | function getShellConfig(preferredShell?: ShellType): ShellConfig { function getWindowsShellConfig (line 197) | function getWindowsShellConfig(preferredShell?: ShellType): ShellConfig { function getUnixShellConfig (line 247) | function getUnixShellConfig(_preferredShell?: ShellType): ShellConfig { function requiresShell (line 262) | function requiresShell(command: string): boolean { function getNpmCommand (line 272) | function getNpmCommand(): string { function getNpxCommand (line 279) | function getNpxCommand(): string { function isSecurePath (line 289) | function isSecurePath(candidatePath: string): boolean { function normalizePath (line 321) | function normalizePath(inputPath: string): string { function joinPaths (line 328) | function joinPaths(...parts: string[]): string { function getEnvVar (line 335) | function getEnvVar(name: string): string | undefined { function findExecutable (line 357) | function findExecutable( function getPlatformDescription (line 393) | function getPlatformDescription(): string { constant GRACEFUL_KILL_TIMEOUT_MS (line 409) | const GRACEFUL_KILL_TIMEOUT_MS = 5000; type KillProcessOptions (line 411) | interface KillProcessOptions { function killProcessGracefully (line 429) | function killProcessGracefully( FILE: apps/desktop/src/main/platform/paths.ts function getClaudeExecutablePath (line 22) | function getClaudeExecutablePath(): string[] { function getPythonCommands (line 64) | function getPythonCommands(): string[][] { function expandDirPattern (line 75) | function expandDirPattern(parentDir: string, pattern: string): string[] { function getPythonPaths (line 98) | function getPythonPaths(): string[] { function getGitExecutablePath (line 128) | function getGitExecutablePath(): string { function getNodeExecutablePath (line 150) | function getNodeExecutablePath(): string { function getNpmExecutablePath (line 160) | function getNpmExecutablePath(): string { function getWindowsShellPaths (line 173) | function getWindowsShellPaths(): Record { function expandWindowsEnvVars (line 215) | function expandWindowsEnvVars(pathPattern: string): string { function getOllamaExecutablePaths (line 251) | function getOllamaExecutablePaths(): string[] { function getOllamaInstallCommand (line 288) | function getOllamaInstallCommand(): string { function getWhichCommand (line 307) | function getWhichCommand(): string { function getWindowsToolPath (line 317) | function getWindowsToolPath(toolName: string, subPath?: string): string[] { FILE: apps/desktop/src/main/platform/types.ts type OS (line 11) | enum OS { type ShellType (line 20) | enum ShellType { type ExecutableConfig (line 32) | interface ExecutableConfig { type ShellConfig (line 42) | interface ShellConfig { type PathConfig (line 51) | interface PathConfig { type BinaryDirectories (line 60) | interface BinaryDirectories { type ToolDetectionResult (line 68) | interface ToolDetectionResult { FILE: apps/desktop/src/main/pr-review-state-manager.ts type PRReviewActor (line 9) | type PRReviewActor = ActorRefFrom; function buildContextKey (line 16) | function buildContextKey(snapshot: { context: PRReviewContext }): string { class PRReviewStateManager (line 26) | class PRReviewStateManager { method constructor (line 31) | constructor(getMainWindow: () => BrowserWindow | null) { method handleStartReview (line 35) | handleStartReview(projectId: string, prNumber: number): void { method handleStartFollowupReview (line 40) | handleStartFollowupReview(projectId: string, prNumber: number, previou... method handleProgress (line 49) | handleProgress(projectId: string, prNumber: number, progress: PRReview... method handleComplete (line 55) | handleComplete(projectId: string, prNumber: number, result: PRReviewRe... method handleError (line 75) | handleError(projectId: string, prNumber: number, error: string): void { method handleCancel (line 81) | handleCancel(projectId: string, prNumber: number): void { method handleClearReview (line 87) | handleClearReview(projectId: string, prNumber: number): void { method handleAuthChange (line 102) | handleAuthChange(): void { method getState (line 115) | getState(projectId: string, prNumber: number): ReturnType): void { type GitStatus (line 24) | interface GitStatus { function checkGitStatus (line 34) | function checkGitStatus(projectPath: string): GitStatus { function initializeGit (line 99) | function initializeGit(projectPath: string): InitializationResult { constant GITIGNORE_ENTRIES (line 158) | const GITIGNORE_ENTRIES = ['.auto-claude/']; function ensureGitignoreEntries (line 164) | function ensureGitignoreEntries(projectPath: string, entries: string[]):... constant DATA_DIRECTORIES (line 224) | const DATA_DIRECTORIES = [ type InitializationResult (line 234) | interface InitializationResult { function hasLocalSource (line 243) | function hasLocalSource(projectPath: string): boolean { function getLocalSourcePath (line 253) | function getLocalSourcePath(projectPath: string): string | null { function isInitialized (line 264) | function isInitialized(projectPath: string): boolean { function initializeProject (line 279) | function initializeProject(projectPath: string): InitializationResult { function ensureDataDirectories (line 345) | function ensureDataDirectories(projectPath: string): InitializationResult { function getAutoBuildPath (line 380) | function getAutoBuildPath(projectPath: string): string | null { FILE: apps/desktop/src/main/project-store.ts type TabState (line 17) | interface TabState { type StoreData (line 23) | interface StoreData { type TasksCacheEntry (line 30) | interface TasksCacheEntry { class ProjectStore (line 38) | class ProjectStore { method constructor (line 44) | constructor() { method load (line 61) | private load(): StoreData { method save (line 85) | private save(): void { method addProject (line 92) | addProject(projectPath: string, name?: string): Project { method updateAutoBuildPath (line 136) | updateAutoBuildPath(projectId: string, autoBuildPath: string): Project... method removeProject (line 149) | removeProject(projectId: string): boolean { method getProjects (line 166) | getProjects(): Project[] { method getTabState (line 173) | getTabState(): TabState { method saveTabState (line 184) | saveTabState(tabState: TabState): void { method getKanbanPreferences (line 200) | getKanbanPreferences(projectId: string): KanbanPreferences | null { method saveKanbanPreferences (line 207) | saveKanbanPreferences(projectId: string, preferences: KanbanPreference... method validateProjects (line 222) | validateProjects(): string[] { method getProject (line 259) | getProject(projectId: string): Project | undefined { method updateProjectSettings (line 266) | updateProjectSettings( method getTasks (line 283) | getTasks(projectId: string): Task[] { method invalidateTasksCache (line 385) | invalidateTasksCache(projectId: string): void { method clearTasksCache (line 393) | clearTasksCache(): void { method loadTasksFromSpecsDir (line 400) | private loadTasksFromSpecsDir( method correctStaleTaskStatus (line 603) | private correctStaleTaskStatus( method determineTaskStatusAndReason (line 672) | private determineTaskStatusAndReason( method inferExecutionProgress (line 707) | private inferExecutionProgress(planStatus: string | undefined): { phas... method inferExecutionProgressFromXState (line 743) | private inferExecutionProgressFromXState(xstateState: string): { phase... method archiveTasks (line 775) | archiveTasks(projectId: string, taskIds: string[], version?: string): ... method updateRoadmapForArchivedTasks (line 838) | private updateRoadmapForArchivedTasks(project: Project, taskIds: strin... method unarchiveTasks (line 850) | unarchiveTasks(projectId: string, taskIds: string[]): boolean { FILE: apps/desktop/src/main/rate-limit-detector.ts constant RATE_LIMIT_PATTERN (line 14) | const RATE_LIMIT_PATTERN = /Limit reached\s*[·•]\s*resets\s+(.+?)(?:\s*$... constant CODEX_RATE_LIMIT_PATTERN (line 20) | const CODEX_RATE_LIMIT_PATTERN = /(?:usage_limit_exceeded|UsageLimitExce... constant RATE_LIMIT_INDICATORS (line 25) | const RATE_LIMIT_INDICATORS = [ constant AUTH_FAILURE_PATTERNS (line 45) | const AUTH_FAILURE_PATTERNS = [ constant BILLING_FAILURE_PATTERNS (line 71) | const BILLING_FAILURE_PATTERNS = [ constant MAX_ERROR_LENGTH (line 110) | const MAX_ERROR_LENGTH = 500; function sanitizeErrorOutput (line 117) | function sanitizeErrorOutput(output: string): string { type RateLimitDetectionResult (line 128) | interface RateLimitDetectionResult { type AuthFailureDetectionResult (line 149) | interface AuthFailureDetectionResult { type BillingFailureDetectionResult (line 165) | interface BillingFailureDetectionResult { function classifyLimitType (line 181) | function classifyLimitType(resetTimeStr: string): 'session' | 'weekly' { function detectRateLimit (line 193) | function detectRateLimit( function isRateLimitError (line 287) | function isRateLimitError(output: string): boolean { function extractResetTime (line 294) | function extractResetTime(output: string): string | null { function classifyAuthFailureType (line 302) | function classifyAuthFailureType(output: string): 'missing' | 'invalid' ... function getAuthFailureMessage (line 322) | function getAuthFailureMessage(failureType: 'missing' | 'invalid' | 'exp... function classifyBillingFailureType (line 338) | function classifyBillingFailureType(output: string): 'insufficient_credi... function getBillingFailureMessage (line 359) | function getBillingFailureMessage(failureType: 'insufficient_credits' | ... function detectAuthFailure (line 375) | function detectAuthFailure( function isAuthFailureError (line 407) | function isAuthFailureError(output: string): boolean { function detectBillingFailure (line 414) | function detectBillingFailure( function isBillingFailureError (line 449) | function isBillingFailureError(output: string): boolean { function getProfileEnv (line 470) | function getProfileEnv(profileId?: string): Record { type BestProfileEnvResult (line 483) | interface BestProfileEnvResult { function getBestAvailableProfileEnv (line 518) | function getBestAvailableProfileEnv(): BestProfileEnvResult { function ensureCleanProfileEnv (line 677) | function ensureCleanProfileEnv(env: Record): Record { FILE: apps/desktop/src/main/services/__tests__/pr-status-poller.integration.test.ts function createMockMainWindow (line 45) | function createMockMainWindow() { function createSuccessfulPRResponse (line 58) | function createSuccessfulPRResponse(prNumber: number, options?: { function setupFullPollingMocks (line 84) | function setupFullPollingMocks(prNumber: number, options?: { FILE: apps/desktop/src/main/services/pr-status-poller.ts type PRData (line 42) | interface PRData { type CombinedStatusResponse (line 53) | interface CombinedStatusResponse { type CheckRunsResponse (line 61) | interface CheckRunsResponse { type ReviewsResponse (line 72) | interface ReviewsResponse { type PRPollingState (line 81) | interface PRPollingState { type ProjectPollingContext (line 96) | interface ProjectPollingContext { class PRStatusPoller (line 118) | class PRStatusPoller { method constructor (line 139) | private constructor() { method getInstance (line 146) | static getInstance(): PRStatusPoller { method resetInstance (line 156) | static resetInstance(): void { method setMainWindowGetter (line 166) | setMainWindowGetter(getter: () => BrowserWindow | null): void { method startPolling (line 177) | async startPolling( method stopPolling (line 234) | stopPolling(projectId: string): void { method stopAllPolling (line 270) | stopAllPolling(): void { method clearStaggeredResumeTimeouts (line 289) | private clearStaggeredResumeTimeouts(): void { method addPRs (line 299) | addPRs(projectId: string, prNumbers: number[]): void { method removePRs (line 330) | removePRs(projectId: string, prNumbers: number[]): void { method getPollingMetadata (line 352) | getPollingMetadata(projectId: string): PollingMetadata { method isPaused (line 373) | isPaused(): boolean { method startPollingTimers (line 380) | private startPollingTimers(context: ProjectPollingContext): void { method pollAllPRs (line 406) | private async pollAllPRs(context: ProjectPollingContext): Promise { method pollPRsByTier (line 414) | private async pollPRsByTier( method pollPRs (line 433) | private async pollPRs( method fetchPRStatus (line 488) | private async fetchPRStatus( method fetchChecksStatus (line 558) | private async fetchChecksStatus( method aggregateChecksStatus (line 594) | private aggregateChecksStatus( method fetchReviewsStatus (line 634) | private async fetchReviewsStatus( method aggregateReviewsStatus (line 661) | private aggregateReviewsStatus(reviews: ReviewsResponse[]): ReviewsSta... method determineMergeableState (line 706) | private determineMergeableState( method classifyPR (line 750) | private classifyPR(lastActivity: Date): PRPollingTier { method updateGitHubRateLimitInfo (line 760) | private updateGitHubRateLimitInfo(info: { remaining: number; reset: Da... method pauseForRateLimit (line 781) | private pauseForRateLimit(): void { method resumePolling (line 816) | private resumePolling(): void { method sendStatusUpdate (line 844) | private sendStatusUpdate(projectId: string, statuses: PRStatus[]): void { function getPRStatusPoller (line 866) | function getPRStatusPoller(): PRStatusPoller { FILE: apps/desktop/src/main/services/profile-service.ts function validateBaseUrl (line 15) | function validateBaseUrl(baseUrl: string): boolean { function validateApiKey (line 33) | function validateApiKey(apiKey: string): boolean { function validateProfileNameUnique (line 57) | async function validateProfileNameUnique(name: string): Promise { type CreateProfileInput (line 73) | type CreateProfileInput = Omit & CreateProfileInput; function deleteProfile (line 84) | async function deleteProfile(id: string): Promise { function createProfile (line 114) | async function createProfile(input: CreateProfileInput): Promise> { function testConnection (line 286) | async function testConnection( FILE: apps/desktop/src/main/services/profile/profile-manager.ts function getProfilesFilePath (line 19) | function getProfilesFilePath(): string { function isValidProfile (line 27) | function isValidProfile(value: unknown): value is APIProfile { function isValidProfilesFile (line 45) | function isValidProfilesFile(data: unknown): data is ProfilesFile { function getDefaultProfilesFile (line 79) | function getDefaultProfilesFile(): ProfilesFile { function loadProfilesFile (line 91) | async function loadProfilesFile(): Promise { function saveProfilesFile (line 116) | async function saveProfilesFile(data: ProfilesFile): Promise { function generateProfileId (line 138) | function generateProfileId(): string { function validateFilePermissions (line 157) | async function validateFilePermissions(filePath: string): Promise(fn: () => Promise): Promise { function setActiveAPIProfile (line 226) | async function setActiveAPIProfile(profileId: string | null): Promise & CreateProfileInput; function validateBaseUrl (line 33) | function validateBaseUrl(baseUrl: string): boolean { function validateApiKey (line 51) | function validateApiKey(apiKey: string): boolean { function validateProfileNameUnique (line 79) | async function validateProfileNameUnique(name: string): Promise { function deleteProfile (line 97) | async function deleteProfile(id: string): Promise { function createProfile (line 127) | async function createProfile(input: CreateProfileInput): Promise> { function testConnection (line 309) | async function testConnection( function discoverModels (line 514) | async function discoverModels( FILE: apps/desktop/src/main/services/sdk-session-recovery-coordinator.ts type SDKOperationType (line 44) | type SDKOperationType = 'task' | 'roadmap' | 'ideation' | 'changelog' | ... type RegisteredOperation (line 49) | interface RegisteredOperation { type ProfileCooldown (line 71) | interface ProfileCooldown { type RecoveryCoordinatorConfig (line 81) | interface RecoveryCoordinatorConfig { constant DEFAULT_CONFIG (line 92) | const DEFAULT_CONFIG: RecoveryCoordinatorConfig = { constant OPERATION_PENALTY_POINTS (line 102) | const OPERATION_PENALTY_POINTS = 15; constant RATE_LIMIT_PENALTY_POINTS (line 103) | const RATE_LIMIT_PENALTY_POINTS = 5; type NotificationType (line 108) | type NotificationType = 'profile-swap' | 'rate-limit' | 'blocked'; type PendingNotification (line 110) | interface PendingNotification { class SDKSessionRecoveryCoordinator (line 129) | class SDKSessionRecoveryCoordinator extends EventEmitter { method constructor (line 141) | private constructor(config: Partial = {}) { method getInstance (line 149) | static getInstance(config?: Partial): SDKSe... method resetInstance (line 159) | static resetInstance(): void { method setMainWindowGetter (line 169) | setMainWindowGetter(getter: () => BrowserWindow | null): void { method registerOperation (line 176) | registerOperation( method updateOperationSession (line 202) | updateOperationSession(id: string, sessionId: string): void { method updateOperationActivity (line 214) | updateOperationActivity(id: string): void { method unregisterOperation (line 224) | unregisterOperation(id: string): void { method getOperation (line 235) | getOperation(id: string): RegisteredOperation | undefined { method getOperationsByType (line 242) | getOperationsByType(type: SDKOperationType): RegisteredOperation[] { method getOperationsByProfile (line 249) | getOperationsByProfile(profileId: string): RegisteredOperation[] { method handleRateLimit (line 257) | async handleRateLimit( method selectBestProfile (line 318) | async selectBestProfile( method recordProfileCooldown (line 412) | private recordProfileCooldown(profileId: string): void { method clearProfileCooldown (line 432) | clearProfileCooldown(profileId: string): void { method queueNotification (line 440) | private queueNotification(type: NotificationType, data: unknown): void { method flushNotifications (line 459) | private flushNotifications(): void { method getStats (line 508) | getStats(): { method cleanup (line 542) | cleanup(): void { function getRecoveryCoordinator (line 558) | function getRecoveryCoordinator(): SDKSessionRecoveryCoordinator { FILE: apps/desktop/src/main/settings-utils.ts function getSettingsPath (line 19) | function getSettingsPath(): string { function readSettingsFile (line 30) | function readSettingsFile(): Record | undefined { function writeSettingsFile (line 51) | function writeSettingsFile(settings: Record): void { function readSettingsFileAsync (line 73) | async function readSettingsFileAsync(): Promise ... FILE: apps/desktop/src/main/task-log-service.ts function findWorktreeSpecDir (line 8) | function findWorktreeSpecDir(projectPath: string, specId: string, specsR... class TaskLogService (line 29) | class TaskLogService extends EventEmitter { method loadLogsFromPath (line 42) | loadLogsFromPath(specDir: string): TaskLogs | null { method mergeLogs (line 95) | private mergeLogs(mainLogs: TaskLogs | null, worktreeLogs: TaskLogs | ... method loadLogs (line 170) | loadLogs(specDir: string, projectPath?: string, specsRelPath?: string,... method getActivePhase (line 221) | getActivePhase(specDir: string): TaskLogPhase | null { method getPhaseLog (line 237) | getPhaseLog(specDir: string, phase: TaskLogPhase): TaskPhaseLog | null { method startWatching (line 252) | startWatching(specId: string, specDir: string, projectPath?: string, s... method stopWatching (line 428) | stopWatching(specId: string): void { method stopAllWatching (line 441) | stopAllWatching(): void { method combinePhaseLogs (line 452) | private combinePhaseLogs(main: TaskPhaseLog | undefined, worktree: Tas... method emitNewEntries (line 490) | private emitNewEntries(specId: string, previousLogs: TaskLogs | undefi... method getCachedLogs (line 549) | getCachedLogs(specDir: string): TaskLogs | null { method clearCache (line 556) | clearCache(specDir: string): void { method hasLogs (line 563) | hasLogs(specDir: string): boolean { FILE: apps/desktop/src/main/task-state-manager.ts type TaskActor (line 15) | type TaskActor = ActorRefFrom; type TaskContextEntry (line 17) | interface TaskContextEntry { constant TERMINAL_EVENTS (line 22) | const TERMINAL_EVENTS = new Set([ class TaskStateManager (line 32) | class TaskStateManager { method configure (line 40) | configure(getMainWindow: () => BrowserWindow | null): void { method handleTaskEvent (line 44) | handleTaskEvent(taskId: string, event: TaskEventPayload, task: Task, p... method handleProcessExited (line 68) | handleProcessExited( method handleUiEvent (line 92) | handleUiEvent(taskId: string, event: TaskEvent, task: Task, project: P... method handleManualStatusChange (line 103) | handleManualStatusChange(taskId: string, status: TaskStatus, task: Tas... method setLastSequence (line 144) | setLastSequence(taskId: string, sequence: number): void { method getLastSequence (line 148) | getLastSequence(taskId: string): number | undefined { method getCurrentState (line 156) | getCurrentState(taskId: string): string | undefined { method isInPlanReview (line 168) | isInPlanReview(taskId: string): boolean { method prepareForRestart (line 179) | prepareForRestart(taskId: string): void { method clearTask (line 184) | clearTask(taskId: string): void { method clearAllTasks (line 205) | clearAllTasks(): void { method setTaskContext (line 218) | private setTaskContext(taskId: string, task: Task, project: Project): ... method getOrCreateActor (line 222) | private getOrCreateActor(taskId: string): TaskActor { method persistStatus (line 294) | private persistStatus( method mapStateToExecutionPhase (line 323) | private mapStateToExecutionPhase(xstateState: string): ExecutionPhase { method emitStatus (line 327) | private emitStatus( method isNewSequence (line 348) | private isNewSequence(taskId: string, sequence: number): boolean { method buildSnapshotFromTask (line 356) | private buildSnapshotFromTask(task: Task) { FILE: apps/desktop/src/main/terminal-name-generator.ts constant DEBUG (line 9) | const DEBUG = process.env.DEBUG === 'true' || process.env.NODE_ENV === '... function debug (line 11) | function debug(...args: unknown[]): void { constant SYSTEM_PROMPT (line 17) | const SYSTEM_PROMPT = class TerminalNameGenerator (line 26) | class TerminalNameGenerator extends EventEmitter { method constructor (line 27) | constructor() { method configure (line 36) | configure(_autoBuildSourcePath?: string): void { method generateName (line 46) | async generateName(command: string, cwd?: string): Promise { method saveAsync (line 270) | private async saveAsync(): Promise { method cleanupOldSessions (line 341) | private cleanupOldSessions(): void { method getTodaysSessions (line 365) | private getTodaysSessions(): Record { method updateSessionInMemory (line 378) | private updateSessionInMemory(session: TerminalSession): boolean { method saveSession (line 439) | saveSession(session: TerminalSession): void { method validateWorktreeConfig (line 449) | private validateWorktreeConfig(config: TerminalWorktreeConfig | undefi... method getSessions (line 468) | getSessions(projectPath: string): TerminalSession[] { method getSessionsForDate (line 548) | getSessionsForDate(date: string, projectPath: string): TerminalSession... method getAllSessionsForDate (line 562) | getAllSessionsForDate(date: string): Record { method getAvailableDates (line 569) | getAvailableDates(projectPath?: string): SessionDateInfo[] { method getSession (line 607) | getSession(projectPath: string, sessionId: string): TerminalSession | ... method clearPendingDelete (line 621) | clearPendingDelete(sessionId: string): void { method removeSession (line 640) | removeSession(projectPath: string, sessionId: string): void { method clearProjectSessions (line 677) | clearProjectSessions(projectPath: string): void { method clearSessionsForDate (line 686) | clearSessionsForDate(date: string, projectPath?: string): void { method updateOutputBuffer (line 700) | updateOutputBuffer(projectPath: string, sessionId: string, output: str... method updateClaudeSessionId (line 725) | updateClaudeSessionId(projectPath: string, terminalId: string, claudeS... method saveAllPending (line 742) | saveAllPending(): void { method updateDisplayOrders (line 750) | updateDisplayOrders(projectPath: string, orders: Array<{ terminalId: s... method saveSessionAsync (line 780) | async saveSessionAsync(session: TerminalSession): Promise { method getAllSessions (line 789) | getAllSessions(): SessionData { function getTerminalSessionStore (line 797) | function getTerminalSessionStore(): TerminalSessionStore { FILE: apps/desktop/src/main/terminal/__tests__/cli-integration-handler.test.ts function mockPlatform (line 109) | function mockPlatform(platform: 'win32' | 'darwin' | 'linux') { function getPathPrefixExpectation (line 117) | function getPathPrefixExpectation( function expectPathPrefix (line 135) | function expectPathPrefix( function getQuotedCommand (line 152) | function getQuotedCommand(platform: 'win32' | 'darwin' | 'linux', comman... function getClearCommand (line 166) | function getClearCommand(platform: 'win32' | 'darwin' | 'linux'): string { function getHistoryPrefix (line 173) | function getHistoryPrefix(platform: 'win32' | 'darwin' | 'linux'): string { function getTempFileExtension (line 180) | function getTempFileExtension(platform: 'win32' | 'darwin' | 'linux'): s... function getTokenFileContent (line 187) | function getTokenFileContent(platform: 'win32' | 'darwin' | 'linux', tok... function getTempFileInvocation (line 197) | function getTempFileInvocation(platform: 'win32' | 'darwin' | 'linux', t... function getTempFileCleanup (line 210) | function getTempFileCleanup(platform: 'win32' | 'darwin' | 'linux', toke... function getExecCommand (line 220) | function getExecCommand(platform: 'win32' | 'darwin' | 'linux', command:... function getConfigDirCommand (line 230) | function getConfigDirCommand(platform: 'win32' | 'darwin' | 'linux', con... FILE: apps/desktop/src/main/terminal/cli-integration-handler.ts function getCLICommand (line 44) | function getCLICommand(cli: SupportedCLI, customPath?: string): string { constant AUTH_TERMINAL_ID_PATTERN (line 77) | const AUTH_TERMINAL_ID_PATTERN = /^claude-login-([a-z0-9-]+)-(\d{13,})$/; function extractProfileIdFromAuthTerminalId (line 91) | function extractProfileIdFromAuthTerminalId(terminalId: string): string ... function maskEmail (line 107) | function maskEmail(email: string | null | undefined): string { function normalizePathForBash (line 139) | function normalizePathForBash(envPath: string): string { function isAbsoluteExecutableCommand (line 150) | function isAbsoluteExecutableCommand(command: string): boolean { function generateTokenTempFileContent (line 165) | function generateTokenTempFileContent(token: string): string { function getTempFileExtension (line 183) | function getTempFileExtension(): string { function buildPathPrefix (line 196) | function buildPathPrefix(pathEnv: string): string { function escapeShellCommand (line 227) | function escapeShellCommand(cmd: string): string { constant YOLO_MODE_FLAG (line 242) | const YOLO_MODE_FLAG = ' --dangerously-skip-permissions'; type ClaudeCommandConfig (line 254) | type ClaudeCommandConfig = function buildClaudeShellCommand (line 293) | function buildClaudeShellCommand( type ProfileInfo (line 347) | interface ProfileInfo { function shouldAutoRenameTerminal (line 363) | function shouldAutoRenameTerminal(currentTitle: string): boolean { type SessionCaptureCallback (line 378) | type SessionCaptureCallback = (terminalId: string, projectPath: string, ... function finalizeClaudeInvoke (line 404) | function finalizeClaudeInvoke( function handleRateLimit (line 438) | function handleRateLimit( function handleOAuthToken (line 495) | function handleOAuthToken( function handleOnboardingComplete (line 726) | function handleOnboardingComplete( function handleClaudeSessionId (line 737) | function handleClaudeSessionId( function handleClaudeExit (line 759) | function handleClaudeExit( function ensureOnboardingComplete (line 788) | function ensureOnboardingComplete(configDir: string): void { type ExecuteProfileCommandOptions (line 835) | interface ExecuteProfileCommandOptions { function executeProfileCommand (line 851) | function executeProfileCommand(options: ExecuteProfileCommandOptions): b... function executeProfileCommandAsync (line 932) | async function executeProfileCommandAsync(options: ExecuteProfileCommand... function invokeClaude (line 1012) | function invokeClaude( function resumeClaude (line 1136) | function resumeClaude( function invokeCLIAsync (line 1206) | async function invokeCLIAsync( function resumeClaudeAsync (line 1358) | async function resumeClaudeAsync( type WaitForExitConfig (line 1437) | interface WaitForExitConfig { type WaitForExitResult (line 1447) | interface WaitForExitResult { constant SHELL_PROMPT_PATTERNS (line 1460) | const SHELL_PROMPT_PATTERNS = [ function waitForClaudeExit (line 1473) | async function waitForClaudeExit( function switchClaudeProfile (line 1534) | async function switchClaudeProfile( FILE: apps/desktop/src/main/terminal/output-parser.ts constant CLAUDE_SESSION_PATTERNS (line 9) | const CLAUDE_SESSION_PATTERNS = [ constant RATE_LIMIT_PATTERN (line 20) | const RATE_LIMIT_PATTERN = /Limit reached\s*[·•]\s*resets\s+(.+?)$/m; constant OAUTH_TOKEN_PATTERN (line 26) | const OAUTH_TOKEN_PATTERN = /(sk-ant-oat01-[A-Za-z0-9_-]+)/; constant OAUTH_URL_PATTERN (line 34) | const OAUTH_URL_PATTERN = /https:\/\/claude\.ai\/oauth\/authorize\?[^\s\... constant EMAIL_PATTERNS (line 44) | const EMAIL_PATTERNS = [ constant LOGIN_SUCCESS_PATTERN (line 55) | const LOGIN_SUCCESS_PATTERN = /(?:Login successful|Successfully logged i... function extractClaudeSessionId (line 60) | function extractClaudeSessionId(data: string): string | null { function extractRateLimitReset (line 73) | function extractRateLimitReset(data: string): string | null { function extractOAuthToken (line 81) | function extractOAuthToken(data: string): string | null { function extractOAuthUrl (line 90) | function extractOAuthUrl(data: string): string | null { function hasOAuthUrl (line 98) | function hasOAuthUrl(data: string): boolean { constant ANSI_ESCAPE_PATTERNS (line 118) | const ANSI_ESCAPE_PATTERNS = [ function stripAnsi (line 142) | function stripAnsi(str: string): string { function extractEmail (line 155) | function extractEmail(data: string): string | null { function hasRateLimitMessage (line 172) | function hasRateLimitMessage(data: string): boolean { function hasOAuthToken (line 179) | function hasOAuthToken(data: string): boolean { function hasLoginSuccess (line 187) | function hasLoginSuccess(data: string): boolean { constant CLAUDE_BUSY_PATTERNS (line 198) | const CLAUDE_BUSY_PATTERNS = [ constant CLAUDE_IDLE_PATTERNS (line 232) | const CLAUDE_IDLE_PATTERNS = [ constant ONBOARDING_COMPLETE_PATTERNS (line 242) | const ONBOARDING_COMPLETE_PATTERNS = [ function isClaudeBusyOutput (line 251) | function isClaudeBusyOutput(data: string): boolean { function isClaudeIdleOutput (line 258) | function isClaudeIdleOutput(data: string): boolean { function isOnboardingCompleteOutput (line 266) | function isOnboardingCompleteOutput(data: string): boolean { function detectClaudeBusyState (line 274) | function detectClaudeBusyState(data: string): 'busy' | 'idle' | null { constant CLAUDE_EXIT_PATTERNS (line 302) | const CLAUDE_EXIT_PATTERNS = [ function isClaudeExitOutput (line 354) | function isClaudeExitOutput(data: string): boolean { function detectClaudeExit (line 365) | function detectClaudeExit(data: string): boolean { FILE: apps/desktop/src/main/terminal/pty-daemon-client.ts constant SOCKET_PATH (line 20) | const SOCKET_PATH = isWindows() type DaemonResponseData (line 24) | interface DaemonResponseData { type DaemonResponse (line 29) | interface DaemonResponse { type ResponseHandler (line 37) | type ResponseHandler = (response: DaemonResponse) => void; type PtyConfig (line 39) | interface PtyConfig { type PtyInfo (line 48) | interface PtyInfo { class PtyDaemonClient (line 57) | class PtyDaemonClient { method connect (line 72) | async connect(): Promise { method tryConnect (line 100) | private tryConnect(): Promise { method spawnDaemon (line 126) | private async spawnDaemon(): Promise { method setupSocketHandlers (line 154) | private setupSocketHandlers(): void { method handleResponse (line 191) | private handleResponse(response: DaemonResponse): void { method attemptReconnect (line 225) | private attemptReconnect(): void { method request (line 250) | private async request(msg: Record): Promise { method send (line 281) | private send(msg: Record): void { method shuttingDown (line 294) | private get shuttingDown(): boolean { method createPty (line 301) | async createPty(config: PtyConfig): Promise { method write (line 317) | write(id: string, data: string): void { method resize (line 329) | resize(id: string, cols: number, rows: number): void { method kill (line 341) | kill(id: string): void { method list (line 350) | async list(): Promise { method subscribe (line 360) | subscribe( method unsubscribe (line 373) | unsubscribe(id: string): void { method getBuffer (line 382) | async getBuffer(id: string): Promise<{ buffer: string; isDead: boolean... method ping (line 396) | async ping(): Promise { method isConnected (line 408) | isConnected(): boolean { method disconnect (line 415) | disconnect(): void { method shutdown (line 426) | shutdown(): void { FILE: apps/desktop/src/main/terminal/pty-daemon.ts constant SOCKET_PATH (line 16) | const SOCKET_PATH = isWindows() constant MAX_BUFFER_SIZE (line 21) | const MAX_BUFFER_SIZE = 100_000; constant RING_BUFFER_MAX_CHUNKS (line 24) | const RING_BUFFER_MAX_CHUNKS = 1000; function sanitizeIdForLog (line 31) | function sanitizeIdForLog(id: string): string { type ManagedPty (line 38) | interface ManagedPty { type PtyConfig (line 50) | interface PtyConfig { type DaemonMessage (line 59) | interface DaemonMessage { type DaemonResponse (line 75) | interface DaemonResponse { class PtyDaemon (line 83) | class PtyDaemon { method constructor (line 88) | constructor() { method cleanup (line 98) | private cleanup(): void { method startServer (line 112) | private startServer(): void { method handleConnection (line 142) | private handleConnection(socket: net.Socket): void { method handleMessage (line 180) | private handleMessage(socket: net.Socket, msg: DaemonMessage): void { method createPty (line 251) | private createPty(config: PtyConfig): string { method writeToPty (line 335) | private writeToPty(id: string, data: string): void { method resizePty (line 355) | private resizePty(id: string, cols: number, rows: number): void { method killPty (line 378) | private killPty(id: string): void { method listPtys (line 400) | private listPtys(): Array<{ method subscribeToPty (line 421) | private subscribeToPty(socket: net.Socket, id: string): void { method unsubscribeFromPty (line 433) | private unsubscribeFromPty(socket: net.Socket, id: string): void { method getBuffer (line 444) | private getBuffer(id: string): { buffer: string; isDead: boolean } { method send (line 458) | private send(socket: net.Socket, response: DaemonResponse): void { method sendError (line 470) | private sendError(socket: net.Socket, error: string, requestId?: strin... method setupSignalHandlers (line 477) | private setupSignalHandlers(): void { FILE: apps/desktop/src/main/terminal/pty-manager.ts function setShuttingDown (line 35) | function setShuttingDown(value: boolean): void { function getIsShuttingDown (line 42) | function getIsShuttingDown(): boolean { type SpawnPtyResult (line 49) | interface SpawnPtyResult { type WindowsShellResult (line 58) | interface WindowsShellResult { constant PTY_EXIT_TIMEOUT_WINDOWS (line 76) | const PTY_EXIT_TIMEOUT_WINDOWS = 2000; constant PTY_EXIT_TIMEOUT_UNIX (line 77) | const PTY_EXIT_TIMEOUT_UNIX = 500; function waitForPtyExit (line 84) | function waitForPtyExit(terminalId: string, timeoutMs?: number): Promise... function detectShellType (line 105) | function detectShellType(shellPath: string): WindowsShellType { function getWindowsShell (line 120) | function getWindowsShell(preferredTerminal: SupportedTerminal | undefine... function spawnPtyProcess (line 147) | function spawnPtyProcess( function setupPtyHandlers (line 206) | function setupPtyHandlers( constant CHUNKED_WRITE_THRESHOLD (line 290) | const CHUNKED_WRITE_THRESHOLD = 16_384; constant CHUNK_SIZE (line 291) | const CHUNK_SIZE = 8_192; function performWrite (line 303) | function performWrite(terminal: TerminalProcess, data: string): Promise<... function writeToPty (line 362) | function writeToPty(terminal: TerminalProcess, data: string): void { function resizePty (line 394) | function resizePty(terminal: TerminalProcess, cols: number, rows: number... function killPty (line 438) | function killPty(terminal: TerminalProcess, waitForExit?: boolean): Prom... function getActiveProfileEnv (line 465) | function getActiveProfileEnv(): Record { FILE: apps/desktop/src/main/terminal/session-handler.ts function claimSessionId (line 27) | function claimSessionId(sessionId: string, terminalId: string): boolean { function releaseSessionId (line 41) | function releaseSessionId(terminalId: string): void { function getClaimedSessionIds (line 53) | function getClaimedSessionIds(): Set { function getClaudeProjectSlug (line 61) | function getClaudeProjectSlug(projectPath: string): string { function findMostRecentClaudeSession (line 68) | function findMostRecentClaudeSession(projectPath: string): string | null { function findClaudeSessionAfter (line 110) | function findClaudeSessionAfter( function createSessionObject (line 153) | function createSessionObject(terminal: TerminalProcess): TerminalSession { function persistSession (line 171) | function persistSession(terminal: TerminalProcess): void { function persistSessionAsync (line 184) | function persistSessionAsync(terminal: TerminalProcess): void { function persistAllSessionsAsync (line 201) | async function persistAllSessionsAsync(terminals: Map): vo... function clearPendingDelete (line 235) | function clearPendingDelete(terminalId: string): void { function removePersistedSession (line 243) | function removePersistedSession(terminal: TerminalProcess): void { function updateClaudeSessionId (line 255) | function updateClaudeSessionId( function getSavedSessions (line 267) | function getSavedSessions(projectPath: string): TerminalSession[] { function clearSavedSessions (line 275) | function clearSavedSessions(projectPath: string): void { function getAvailableSessionDates (line 283) | function getAvailableSessionDates( function getSessionsForDate (line 293) | function getSessionsForDate(date: string, projectPath: string): Terminal... function updateDisplayOrders (line 301) | function updateDisplayOrders( function captureClaudeSessionId (line 314) | function captureClaudeSessionId( FILE: apps/desktop/src/main/terminal/session-persistence.ts constant SESSIONS_FILE (line 17) | const SESSIONS_FILE = path.join(app.getPath('userData'), 'terminal-sessi... constant BUFFERS_DIR (line 18) | const BUFFERS_DIR = path.join(app.getPath('userData'), 'terminal-buffers'); constant MAX_SESSION_AGE_MS (line 21) | const MAX_SESSION_AGE_MS = 7 * 24 * 60 * 60 * 1000; class SessionPersistence (line 23) | class SessionPersistence { method constructor (line 28) | constructor() { method ensureDirectories (line 35) | private ensureDirectories(): void { method initialize (line 44) | initialize(): TerminalRecoveryInfo { method loadSessions (line 59) | loadSessions(): TerminalSessionState[] { method getRecoveryInfo (line 106) | getRecoveryInfo(): TerminalRecoveryInfo { method saveSession (line 127) | saveSession(session: TerminalSessionState): void { method updateSessionMetadata (line 136) | updateSessionMetadata( method getSession (line 151) | getSession(id: string): TerminalSessionState | undefined { method getAllSessions (line 158) | getAllSessions(): TerminalSessionState[] { method removeSession (line 165) | removeSession(id: string): void { method saveBuffer (line 177) | saveBuffer(sessionId: string, serializedBuffer: string): void { method loadBuffer (line 200) | loadBuffer(sessionId: string): string | null { method deleteBufferFile (line 221) | private deleteBufferFile(bufferFile: string): void { method scheduleSave (line 236) | private scheduleSave(): void { method saveNow (line 249) | saveNow(): void { method saveToDisk (line 260) | private saveToDisk(): void { method cleanupOrphanedBuffers (line 278) | cleanupOrphanedBuffers(): void { FILE: apps/desktop/src/main/terminal/terminal-event-handler.ts type EventHandlerCallbacks (line 15) | interface EventHandlerCallbacks { function handleTerminalData (line 30) | function handleTerminalData( function clearBusyState (line 81) | function clearBusyState(terminalId: string): void { function createEventCallbacks (line 88) | function createEventCallbacks( FILE: apps/desktop/src/main/terminal/terminal-lifecycle.ts type RestoreOptions (line 26) | interface RestoreOptions { type DataHandlerFn (line 37) | type DataHandlerFn = (terminal: TerminalProcess, data: string) => void; function createTerminal (line 42) | async function createTerminal( function restoreTerminal (line 147) | async function restoreTerminal( function destroyTerminal (line 277) | async function destroyTerminal( constant DESTROY_ALL_TIMEOUT (line 316) | const DESTROY_ALL_TIMEOUT = 3000; function destroyAllTerminals (line 327) | async function destroyAllTerminals( function handleTerminalExit (line 370) | function handleTerminalExit( function restoreSessionsFromDate (line 380) | async function restoreSessionsFromDate( FILE: apps/desktop/src/main/terminal/terminal-manager.ts class TerminalManager (line 23) | class TerminalManager { method constructor (line 32) | constructor(getWindow: WindowGetter) { method create (line 55) | async create( method restore (line 69) | async restore( method destroy (line 105) | async destroy(id: string): Promise { method killAll (line 118) | async killAll(): Promise { method write (line 129) | write(id: string, data: string): void { method resize (line 145) | resize(id: string, cols: number, rows: number): boolean { method invokeCLIAsync (line 156) | async invokeCLIAsync(id: string, cwd?: string, profileId?: string, dan... method invokeClaude (line 184) | invokeClaude(id: string, cwd?: string, profileId?: string, dangerously... method switchClaudeProfile (line 211) | async switchClaudeProfile(id: string, profileId: string): Promise { method resumeClaude (line 287) | resumeClaude(id: string, sessionId?: string): void { method getSavedSessions (line 299) | getSavedSessions(projectPath: string): TerminalSession[] { method clearSavedSessions (line 306) | clearSavedSessions(projectPath: string): void { method getAvailableSessionDates (line 313) | getAvailableSessionDates(projectPath?: string): import('../terminal-se... method getSessionsForDate (line 320) | getSessionsForDate(date: string, projectPath: string): TerminalSession... method updateDisplayOrders (line 327) | updateDisplayOrders( method restoreSessionsFromDate (line 337) | async restoreSessionsFromDate( method getActiveTerminalIds (line 375) | getActiveTerminalIds(): string[] { method getTerminal (line 382) | getTerminal(id: string): TerminalProcess | undefined { method isCLIMode (line 389) | isCLIMode(id: string): boolean { method getClaudeSessionId (line 397) | getClaudeSessionId(id: string): string | undefined { method getTerminalsForProfileChange (line 406) | getTerminalsForProfileChange(): TerminalProfileChangeInfo[] { method setTitle (line 427) | setTitle(id: string, title: string): void { method setWorktreeConfig (line 437) | setWorktreeConfig(id: string, config: import('../../shared/types').Ter... method isTerminalAlive (line 451) | isTerminalAlive(terminalId: string): boolean { method handleTerminalData (line 458) | private handleTerminalData(terminal: TerminalProcess, data: string): v... FILE: apps/desktop/src/main/terminal/types.ts type TerminalProcess (line 11) | interface TerminalProcess { type RateLimitEvent (line 36) | interface RateLimitEvent { type OAuthTokenEvent (line 49) | interface OAuthTokenEvent { type SessionCaptureResult (line 62) | interface SessionCaptureResult { type TerminalOperationResult (line 70) | interface TerminalOperationResult { type WindowGetter (line 79) | type WindowGetter = () => BrowserWindow | null; type TerminalProfileChangeInfo (line 84) | interface TerminalProfileChangeInfo { FILE: apps/desktop/src/main/title-generator.ts constant DEBUG (line 10) | const DEBUG = process.env.DEBUG === 'true' || process.env.NODE_ENV === '... function debug (line 12) | function debug(...args: unknown[]): void { constant SYSTEM_PROMPT (line 18) | const SYSTEM_PROMPT = class TitleGenerator (line 27) | class TitleGenerator extends EventEmitter { method constructor (line 28) | constructor() { method configure (line 38) | configure(_pythonPath?: string, _autoBuildSourcePath?: string): void { method generateTitle (line 47) | async generateTitle(description: string): Promise { method createTitlePrompt (line 157) | private createTitlePrompt(description: string): string { method cleanTitle (line 169) | private cleanTitle(title: string): string { FILE: apps/desktop/src/main/updater/path-resolver.ts function getBundledSourcePath (line 12) | function getBundledSourcePath(): string { function getUpdateCachePath (line 50) | function getUpdateCachePath(): string { function getEffectiveSourcePath (line 57) | function getEffectiveSourcePath(): string { function getUpdateTargetPath (line 94) | function getUpdateTargetPath(): string { FILE: apps/desktop/src/main/updater/version-manager.ts function getBundledVersion (line 16) | function getBundledVersion(): string { function parseVersion (line 26) | function parseVersion(version: string): { function compareVersions (line 62) | function compareVersions(a: string, b: string): number { FILE: apps/desktop/src/main/utils/__tests__/atomic-file-retry.test.ts constant TEST_DIR (line 47) | const TEST_DIR = path.join(__dirname, '.test-atomic-retry'); FILE: apps/desktop/src/main/utils/__tests__/atomic-file.test.ts constant TEST_DIR (line 23) | const TEST_DIR = path.join(__dirname, '.test-atomic-file'); FILE: apps/desktop/src/main/utils/atomic-file.ts constant TRANSIENT_ERROR_CODES (line 23) | const TRANSIENT_ERROR_CODES = ['EBUSY', 'EACCES', 'EAGAIN', 'EPERM', 'EM... class AtomicFileError (line 25) | class AtomicFileError extends Error { method constructor (line 26) | constructor(message: string) { function writeFileAtomic (line 47) | async function writeFileAtomic( function writeFileAtomicSync (line 99) | function writeFileAtomicSync( function writeFileWithRetry (line 132) | async function writeFileWithRetry( function readFileWithRetry (line 193) | async function readFileWithRetry( function writeJsonAtomic (line 246) | async function writeJsonAtomic( function writeJsonWithRetry (line 276) | async function writeJsonWithRetry( FILE: apps/desktop/src/main/utils/config-path-validator.ts function isValidConfigDir (line 20) | function isValidConfigDir(configDir: string): boolean { FILE: apps/desktop/src/main/utils/debounce.ts function debounce (line 27) | function debounce( FILE: apps/desktop/src/main/utils/file-lock.ts function withFileLock (line 10) | async function withFileLock(filepath: string, fn: () => Promise): ... FILE: apps/desktop/src/main/utils/git-isolation.ts constant GIT_ENV_VARS_TO_CLEAR (line 30) | const GIT_ENV_VARS_TO_CLEAR = [ function getIsolatedGitEnv (line 68) | function getIsolatedGitEnv( function getIsolatedGitSpawnOptions (line 100) | function getIsolatedGitSpawnOptions( type WorktreeBranchDetectionResult (line 115) | interface WorktreeBranchDetectionResult { function detectWorktreeBranch (line 148) | function detectWorktreeBranch( function refreshGitIndex (line 207) | function refreshGitIndex(cwd: string): void { FILE: apps/desktop/src/main/utils/homebrew-python.ts type PythonValidation (line 15) | interface PythonValidation { function findHomebrewPython (line 33) | function findHomebrewPython( FILE: apps/desktop/src/main/utils/json-repair.ts function repairJson (line 14) | function repairJson(raw: string): string { function safeParseJson (line 29) | function safeParseJson(raw: string): T | null { function applyRepairs (line 41) | function applyRepairs(raw: string, originalError: SyntaxError): string { FILE: apps/desktop/src/main/utils/path-helpers.ts function ensureAbsolutePath (line 8) | function ensureAbsolutePath(p: string): string { FILE: apps/desktop/src/main/utils/profile-manager.ts function getProfilesFilePath (line 16) | function getProfilesFilePath(): string { function loadProfilesFile (line 25) | async function loadProfilesFile(): Promise { function saveProfilesFile (line 46) | async function saveProfilesFile(data: ProfilesFile): Promise { function generateProfileId (line 69) | function generateProfileId(): string { function validateFilePermissions (line 82) | async function validateFilePermissions(filePath: string): Promise { method release (line 110) | release(): void { method isProcessRunning (line 124) | private isProcessRunning(pid: number): boolean { method getNextSpecNumber (line 136) | getNextSpecNumber(autoBuildPath?: string): number { method scanSpecsDir (line 184) | private scanSpecsDir(specsDir: string): number { function withSpecNumberLock (line 214) | async function withSpecNumberLock( FILE: apps/desktop/src/main/utils/spec-path-helpers.ts function isValidTaskId (line 18) | function isValidTaskId(taskId: string): boolean { function findAllSpecPaths (line 37) | function findAllSpecPaths( FILE: apps/desktop/src/main/utils/type-guards.ts function isNodeError (line 11) | function isNodeError(err: unknown): err is NodeJS.ErrnoException { FILE: apps/desktop/src/main/utils/windows-paths.ts type WindowsToolPaths (line 20) | interface WindowsToolPaths { constant WINDOWS_GIT_PATHS (line 26) | const WINDOWS_GIT_PATHS: WindowsToolPaths = { constant WINDOWS_GLAB_PATHS (line 40) | const WINDOWS_GLAB_PATHS: WindowsToolPaths = { function isSecurePath (line 51) | function isSecurePath(pathStr: string): boolean { function expandWindowsPath (line 69) | function expandWindowsPath(pathPattern: string): string | null { function getWindowsExecutablePaths (line 98) | function getWindowsExecutablePaths( function getSystemRoot (line 137) | function getSystemRoot(): string { function getWhereExePath (line 149) | function getWhereExePath(): string { function getTaskkillExePath (line 161) | function getTaskkillExePath(): string { function findWindowsExecutableViaWhere (line 178) | function findWindowsExecutableViaWhere( function getWindowsExecutablePathsAsync (line 228) | async function getWindowsExecutablePathsAsync( function findWindowsExecutableViaWhereAsync (line 282) | async function findWindowsExecutableViaWhereAsync( FILE: apps/desktop/src/main/utils/worktree-cleanup.ts type WorktreeCleanupOptions (line 28) | interface WorktreeCleanupOptions { type WorktreeCleanupResult (line 52) | interface WorktreeCleanupResult { function getWorktreeBranch (line 64) | function getWorktreeBranch(worktreePath: string, specId: string, timeout... function delay (line 95) | function delay(ms: number): Promise { function deleteDirectoryWithRetry (line 106) | async function deleteDirectoryWithRetry( function cleanupWorktree (line 177) | async function cleanupWorktree(options: WorktreeCleanupOptions): Promise... FILE: apps/desktop/src/main/worktree-paths.ts constant TASK_WORKTREE_DIR (line 12) | const TASK_WORKTREE_DIR = '.auto-claude/worktrees/tasks'; constant TERMINAL_WORKTREE_DIR (line 13) | const TERMINAL_WORKTREE_DIR = '.auto-claude/worktrees/terminal'; constant TERMINAL_WORKTREE_METADATA_DIR (line 16) | const TERMINAL_WORKTREE_METADATA_DIR = '.auto-claude/terminal/metadata'; constant LEGACY_WORKTREE_DIR (line 19) | const LEGACY_WORKTREE_DIR = '.worktrees'; function getTaskWorktreeDir (line 24) | function getTaskWorktreeDir(projectPath: string): string { function getTaskWorktreePath (line 35) | function getTaskWorktreePath(projectPath: string, specId: string): string { function isPathWithinBase (line 51) | function isPathWithinBase(resolvedPath: string, basePath: string): boole... function findTaskWorktree (line 62) | function findTaskWorktree(projectPath: string, specId: string): string |... function getTerminalWorktreeDir (line 105) | function getTerminalWorktreeDir(projectPath: string): string { function getTerminalWorktreePath (line 116) | function getTerminalWorktreePath(projectPath: string, name: string): str... function findTerminalWorktree (line 133) | function findTerminalWorktree(projectPath: string, name: string): string... function getTerminalWorktreeMetadataDir (line 176) | function getTerminalWorktreeMetadataDir(projectPath: string): string { function getTerminalWorktreeMetadataPath (line 187) | function getTerminalWorktreeMetadataPath(projectPath: string, name: stri... FILE: apps/desktop/src/preload/api/agent-api.ts type AgentAPI (line 27) | interface AgentAPI extends FILE: apps/desktop/src/preload/api/app-update-api.ts type AppUpdateAPI (line 16) | interface AppUpdateAPI { FILE: apps/desktop/src/preload/api/file-api.ts type FileAPI (line 5) | interface FileAPI { FILE: apps/desktop/src/preload/api/index.ts type ElectronAPI (line 19) | interface ElectronAPI extends FILE: apps/desktop/src/preload/api/modules/changelog-api.ts type ChangelogAPI (line 24) | interface ChangelogAPI { FILE: apps/desktop/src/preload/api/modules/claude-code-api.ts type ClaudeCodeInstallResult (line 18) | interface ClaudeCodeInstallResult { type ClaudeCodeVersionResult (line 29) | interface ClaudeCodeVersionResult { type ClaudeCodeVersionsResult (line 38) | interface ClaudeCodeVersionsResult { type ClaudeCodeInstallVersionResult (line 47) | interface ClaudeCodeInstallVersionResult { type ClaudeCodeInstallationsResult (line 59) | interface ClaudeCodeInstallationsResult { type ClaudeCodeSetActivePathResult (line 68) | interface ClaudeCodeSetActivePathResult { type ClaudeCodeAPI (line 79) | interface ClaudeCodeAPI { FILE: apps/desktop/src/preload/api/modules/debug-api.ts type DebugInfo (line 14) | interface DebugInfo { type LogFileInfo (line 21) | interface LogFileInfo { type DebugResult (line 28) | interface DebugResult { type DebugAPI (line 36) | interface DebugAPI { FILE: apps/desktop/src/preload/api/modules/github-api.ts type AutoFixConfig (line 20) | interface AutoFixConfig { type AutoFixQueueItem (line 32) | interface AutoFixQueueItem { type AutoFixProgress (line 46) | interface AutoFixProgress { type IssueBatch (line 56) | interface IssueBatch { type BatchProgress (line 77) | interface BatchProgress { type AnalyzePreviewProgress (line 88) | interface AnalyzePreviewProgress { type ProposedBatch (line 97) | interface ProposedBatch { type AnalyzePreviewResult (line 116) | interface AnalyzePreviewResult { type WorkflowAwaitingApproval (line 134) | interface WorkflowAwaitingApproval { type WorkflowsAwaitingApprovalResult (line 144) | interface WorkflowsAwaitingApprovalResult { type GitHubAPI (line 157) | interface GitHubAPI { type PRData (line 339) | interface PRData { type PRListResult (line 365) | interface PRListResult { type PRReviewFinding (line 374) | interface PRReviewFinding { type PRReviewResult (line 394) | interface PRReviewResult { type NewCommitsCheck (line 423) | interface NewCommitsCheck { type MergeReadiness (line 442) | interface MergeReadiness { type PRReviewProgress (line 458) | interface PRReviewProgress { type PRReviewStatePayload (line 468) | interface PRReviewStatePayload { type PRLogEntryType (line 485) | type PRLogEntryType = 'text' | 'tool_start' | 'tool_end' | 'phase_start'... type PRLogPhase (line 490) | type PRLogPhase = 'context' | 'analysis' | 'synthesis'; type PRLogEntry (line 495) | interface PRLogEntry { type PRPhaseLog (line 508) | interface PRPhaseLog { type PRLogs (line 519) | interface PRLogs { FILE: apps/desktop/src/preload/api/modules/gitlab-api.ts type GitLabAPI (line 29) | interface GitLabAPI { FILE: apps/desktop/src/preload/api/modules/ideation-api.ts type IdeationAPI (line 16) | interface IdeationAPI { FILE: apps/desktop/src/preload/api/modules/insights-api.ts type InsightsAPI (line 18) | interface InsightsAPI { FILE: apps/desktop/src/preload/api/modules/ipc-utils.ts type IpcListenerCleanup (line 6) | type IpcListenerCleanup = () => void; function createIpcListener (line 15) | function createIpcListener( function invokeIpc (line 35) | function invokeIpc(channel: string, ...args: unknown[]): Promise { function sendIpc (line 45) | function sendIpc(channel: string, ...args: unknown[]): void { FILE: apps/desktop/src/preload/api/modules/linear-api.ts type LinearAPI (line 15) | interface LinearAPI { FILE: apps/desktop/src/preload/api/modules/mcp-api.ts type McpAPI (line 12) | interface McpAPI { function createMcpAPI (line 19) | function createMcpAPI(): McpAPI { FILE: apps/desktop/src/preload/api/modules/roadmap-api.ts type RoadmapAPI (line 16) | interface RoadmapAPI { FILE: apps/desktop/src/preload/api/modules/shell-api.ts type ShellAPI (line 8) | interface ShellAPI { FILE: apps/desktop/src/preload/api/profile-api.ts type ProfileAPI (line 12) | interface ProfileAPI { FILE: apps/desktop/src/preload/api/project-api.ts type TabState (line 16) | interface TabState { type ProjectAPI (line 22) | interface ProjectAPI { FILE: apps/desktop/src/preload/api/queue-api.ts type BestProfileResult (line 21) | interface BestProfileResult { type GetBestProfileOptions (line 32) | interface GetBestProfileOptions { type GetBestUnifiedAccountOptions (line 44) | interface GetBestUnifiedAccountOptions { type QueueProfileSwapEvent (line 52) | interface QueueProfileSwapEvent { type QueueSessionCapturedEvent (line 60) | interface QueueSessionCapturedEvent { type QueueAPI (line 66) | interface QueueAPI { FILE: apps/desktop/src/preload/api/screenshot-api.ts type ScreenshotAPI (line 14) | interface ScreenshotAPI { FILE: apps/desktop/src/preload/api/settings-api.ts type SettingsAPI (line 10) | interface SettingsAPI { FILE: apps/desktop/src/preload/api/task-api.ts type TaskAPI (line 22) | interface TaskAPI { FILE: apps/desktop/src/preload/api/terminal-api.ts type ProactiveSwapNotification (line 24) | interface ProactiveSwapNotification { type TerminalAPI (line 31) | interface TerminalAPI { FILE: apps/desktop/src/renderer/App.tsx constant VERSION_WARNING_275 (line 76) | const VERSION_WARNING_275 = '2.7.5'; type ProjectTabBarWithContextProps (line 79) | interface ProjectTabBarWithContextProps { function ProjectTabBarWithContext (line 88) | function ProjectTabBarWithContext({ function App (line 108) | function App() { FILE: apps/desktop/src/renderer/__tests__/OAuthStep.test.tsx function createTestProfile (line 14) | function createTestProfile(overrides: Partial = {}): Clau... FILE: apps/desktop/src/renderer/__tests__/TaskEditDialog.test.ts function createTestTask (line 12) | function createTestTask(overrides: Partial = {}): Task { FILE: apps/desktop/src/renderer/__tests__/project-store-tabs.test.ts function createTestProject (line 14) | function createTestProject(overrides: Partial = {}): Project { FILE: apps/desktop/src/renderer/__tests__/roadmap-store.test.ts function createTestFeature (line 16) | function createTestFeature(overrides: Partial = {}): Roa... function createTestPhase (line 35) | function createTestPhase(overrides: Partial = {}): Roadmap... function createTestRoadmap (line 49) | function createTestRoadmap(overrides: Partial = {}): Roadmap { FILE: apps/desktop/src/renderer/__tests__/task-order.test.ts function createTestTask (line 10) | function createTestTask(overrides: Partial = {}): Task { function createTestTaskOrder (line 27) | function createTestTaskOrder(overrides: Partial = {}): T... FILE: apps/desktop/src/renderer/__tests__/task-store.test.ts function createTestTask (line 10) | function createTestTask(overrides: Partial = {}): Task { function createTestPlan (line 27) | function createTestPlan(overrides: Partial = {}): Im... FILE: apps/desktop/src/renderer/components/AddCompetitorDialog.tsx type AddCompetitorDialogProps (line 50) | interface AddCompetitorDialogProps { constant RELEVANCE_OPTIONS (line 62) | const RELEVANCE_OPTIONS = [ function isValidUrl (line 71) | function isValidUrl(url: string): boolean { function normalizeUrl (line 83) | function normalizeUrl(url: string): string { function AddCompetitorDialog (line 92) | function AddCompetitorDialog({ FILE: apps/desktop/src/renderer/components/AddFeatureDialog.tsx type AddFeatureDialogProps (line 58) | interface AddFeatureDialogProps { constant COMPLEXITY_OPTIONS (line 72) | const COMPLEXITY_OPTIONS = [ constant IMPACT_OPTIONS (line 79) | const IMPACT_OPTIONS = [ function AddFeatureDialog (line 85) | function AddFeatureDialog({ FILE: apps/desktop/src/renderer/components/AddProjectModal.tsx type ModalStep (line 19) | type ModalStep = 'choose' | 'create-form'; type AddProjectModalProps (line 21) | interface AddProjectModalProps { function AddProjectModal (line 27) | function AddProjectModal({ open, onOpenChange, onProjectAdded }: AddProj... FILE: apps/desktop/src/renderer/components/AgentProfileSelector.tsx type AgentProfileSelectorProps (line 35) | interface AgentProfileSelectorProps { constant PHASE_LABEL_KEYS (line 68) | const PHASE_LABEL_KEYS: Record = { constant MCP_SERVERS (line 269) | const MCP_SERVERS: Record = { constant PROVIDER_I18N_KEYS (line 39) | const PROVIDER_I18N_KEYS: Record = { function AuthStatusIndicator (line 54) | function AuthStatusIndicator() { FILE: apps/desktop/src/renderer/components/BulkPRDialog.tsx function isWorktreeRelatedError (line 36) | function isWorktreeRelatedError(errorMsg: string): boolean { type TaskPRResult (line 46) | interface TaskPRResult { type BulkPRDialogProps (line 55) | interface BulkPRDialogProps { function BulkPRDialog (line 66) | function BulkPRDialog({ type TaskResultRowProps (line 387) | interface TaskResultRowProps { function TaskResultRow (line 394) | function TaskResultRow({ result, index, showDetails, onOpenPR }: TaskRes... FILE: apps/desktop/src/renderer/components/ChatHistorySidebar.tsx type ChatHistorySidebarProps (line 40) | interface ChatHistorySidebarProps { function ChatHistorySidebar (line 56) | function ChatHistorySidebar({ type SessionItemProps (line 431) | interface SessionItemProps { function SessionItem (line 450) | function SessionItem({ FILE: apps/desktop/src/renderer/components/ClaudeCodeStatusBadge.tsx type ClaudeCodeStatusBadgeProps (line 37) | interface ClaudeCodeStatusBadgeProps { type StatusType (line 41) | type StatusType = "loading" | "installed" | "outdated" | "not-found" | "... constant CHECK_INTERVAL_MS (line 44) | const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; constant VERSION_RECHECK_DELAY_MS (line 46) | const VERSION_RECHECK_DELAY_MS = 5000; function ClaudeCodeStatusBadge (line 52) | function ClaudeCodeStatusBadge({ className }: ClaudeCodeStatusBadgeProps) { FILE: apps/desktop/src/renderer/components/CompetitorAnalysisDialog.tsx type CompetitorAnalysisDialogProps (line 17) | interface CompetitorAnalysisDialogProps { function CompetitorAnalysisDialog (line 25) | function CompetitorAnalysisDialog({ FILE: apps/desktop/src/renderer/components/CompetitorAnalysisViewer.tsx type CompetitorAnalysisViewerProps (line 17) | interface CompetitorAnalysisViewerProps { function CompetitorAnalysisViewer (line 24) | function CompetitorAnalysisViewer({ FILE: apps/desktop/src/renderer/components/CustomMcpDialog.tsx type CustomMcpDialogProps (line 25) | interface CustomMcpDialogProps { function CustomMcpDialog (line 33) | function CustomMcpDialog({ FILE: apps/desktop/src/renderer/components/CustomModelModal.tsx type CustomModelModalProps (line 24) | interface CustomModelModalProps { function CustomModelModal (line 31) | function CustomModelModal({ currentConfig, onSave, onClose, open = true ... FILE: apps/desktop/src/renderer/components/ExistingCompetitorAnalysisDialog.tsx type ExistingCompetitorAnalysisDialogProps (line 15) | interface ExistingCompetitorAnalysisDialogProps { function ExistingCompetitorAnalysisDialog (line 26) | function ExistingCompetitorAnalysisDialog({ FILE: apps/desktop/src/renderer/components/FileAutocomplete.tsx type FileAutocompleteProps (line 7) | interface FileAutocompleteProps { function FileAutocomplete (line 20) | function FileAutocomplete({ FILE: apps/desktop/src/renderer/components/FileExplorerPanel.tsx type FileExplorerPanelProps (line 9) | interface FileExplorerPanelProps { function FileExplorerPanel (line 37) | function FileExplorerPanel({ projectPath }: FileExplorerPanelProps) { FILE: apps/desktop/src/renderer/components/FileTree.tsx type FileTreeProps (line 8) | interface FileTreeProps { constant ITEM_HEIGHT (line 13) | const ITEM_HEIGHT = 28; constant OVERSCAN (line 15) | const OVERSCAN = 10; function FileTree (line 17) | function FileTree({ rootPath }: FileTreeProps) { FILE: apps/desktop/src/renderer/components/FileTreeItem.tsx type FileTreeItemProps (line 7) | interface FileTreeItemProps { function getFileIcon (line 16) | function getFileIcon(name: string): React.ReactNode { function FileTreeItem (line 67) | function FileTreeItem({ FILE: apps/desktop/src/renderer/components/GitHubIssues.tsx function GitHubIssues (line 24) | function GitHubIssues({ onOpenSettings, onNavigateToTask }: GitHubIssues... FILE: apps/desktop/src/renderer/components/GitHubSetupModal.tsx type GitHubSetupModalProps (line 42) | interface GitHubSetupModalProps { type SetupStep (line 50) | type SetupStep = 'github-auth' | 'claude-auth' | 'repo-confirm' | 'repo'... function GitHubSetupModal (line 61) | function GitHubSetupModal({ FILE: apps/desktop/src/renderer/components/GitLabIssues.tsx function GitLabIssues (line 17) | function GitLabIssues({ onOpenSettings, onNavigateToTask }: GitLabIssues... FILE: apps/desktop/src/renderer/components/GitSetupModal.tsx type GitSetupModalProps (line 15) | interface GitSetupModalProps { function GitSetupModal (line 24) | function GitSetupModal({ FILE: apps/desktop/src/renderer/components/GlobalDownloadIndicator.tsx function GlobalDownloadIndicator (line 14) | function GlobalDownloadIndicator() { FILE: apps/desktop/src/renderer/components/ImageUpload.tsx type ImageUploadProps (line 13) | interface ImageUploadProps { function generateImageId (line 23) | function generateImageId(): string { function formatFileSize (line 30) | function formatFileSize(bytes: number): string { function isValidImageType (line 39) | function isValidImageType(file: File): boolean { function isValidImageMimeType (line 46) | function isValidImageMimeType(mimeType: string): boolean { function fileToBase64 (line 53) | async function fileToBase64(file: File): Promise { function blobToBase64 (line 65) | async function blobToBase64(blob: Blob): Promise { function createThumbnail (line 77) | async function createThumbnail(dataUrl: string, maxSize = 200): Promise<... function resolveFilename (line 112) | function resolveFilename(filename: string, existingFiles: string[]): str... function ImageUpload (line 125) | function ImageUpload({ FILE: apps/desktop/src/renderer/components/Insights.tsx type InsightsProps (line 98) | interface InsightsProps { function Insights (line 102) | function Insights({ projectId }: InsightsProps) { type MessageBubbleProps (line 667) | interface MessageBubbleProps { function MessageBubble (line 675) | function MessageBubble({ type ToolUsageHistoryProps (line 820) | interface ToolUsageHistoryProps { function ToolUsageHistory (line 828) | function ToolUsageHistory({ tools }: ToolUsageHistoryProps) { type ToolIndicatorProps (line 913) | interface ToolIndicatorProps { function ToolIndicator (line 918) | function ToolIndicator({ name, input }: ToolIndicatorProps) { FILE: apps/desktop/src/renderer/components/InsightsModelSelector.tsx type InsightsModelSelectorProps (line 16) | interface InsightsModelSelectorProps { function InsightsModelSelector (line 29) | function InsightsModelSelector({ FILE: apps/desktop/src/renderer/components/KanbanBoard.tsx constant VALID_DROP_COLUMNS (line 51) | const VALID_DROP_COLUMNS = new Set(TASK_STATUS_COLUMNS); function isValidDropColumn (line 52) | function isValidDropColumn(id: string): id is typeof TASK_STATUS_COLUMNS... function getVisualColumn (line 62) | function getVisualColumn(status: TaskStatus): typeof TASK_STATUS_COLUMNS... type KanbanBoardProps (line 68) | interface KanbanBoardProps { type DroppableColumnProps (line 76) | interface DroppableColumnProps { function tasksAreEquivalent (line 112) | function tasksAreEquivalent(prevTasks: Task[], nextTasks: Task[]): boole... function droppableColumnPropsAreEqual (line 135) | function droppableColumnPropsAreEqual( function KanbanBoard (line 637) | function KanbanBoard({ tasks, onTaskClick, onNewTaskClick, onRefresh, is... FILE: apps/desktop/src/renderer/components/PhaseProgressIndicator.tsx type PhaseProgressIndicatorProps (line 7) | interface PhaseProgressIndicatorProps { constant PHASE_COLORS (line 19) | const PHASE_COLORS: Record = { FILE: apps/desktop/src/renderer/components/ProactiveSwapListener.tsx type SwapNotification (line 13) | interface SwapNotification { function ProactiveSwapListener (line 20) | function ProactiveSwapListener() { FILE: apps/desktop/src/renderer/components/ProfileBadge.test.tsx function renderWithProviders (line 36) | function renderWithProviders(ui: React.ReactElement) { FILE: apps/desktop/src/renderer/components/ProfileBadge.tsx type ProfileBadgeProps (line 16) | interface ProfileBadgeProps { function getBadgeVariant (line 32) | function getBadgeVariant(reason?: ProfileAssignmentReason, isRunning?: b... function getBadgeColorClass (line 50) | function getBadgeColorClass(reason?: ProfileAssignmentReason, isRunning?... function ProfileBadge (line 73) | function ProfileBadge({ function ProfileSwapIndicator (line 128) | function ProfileSwapIndicator({ FILE: apps/desktop/src/renderer/components/ProjectTabBar.tsx type ProjectTabBarProps (line 11) | interface ProjectTabBarProps { function ProjectTabBar (line 22) | function ProjectTabBar({ FILE: apps/desktop/src/renderer/components/QueueSettingsModal.tsx type QueueSettingsModalProps (line 18) | interface QueueSettingsModalProps { function QueueSettingsModal (line 37) | function QueueSettingsModal({ FILE: apps/desktop/src/renderer/components/RateLimitIndicator.tsx function RateLimitIndicator (line 10) | function RateLimitIndicator() { function getSourceLabel (line 81) | function getSourceLabel(source: string, t: (key: string) => string): str... FILE: apps/desktop/src/renderer/components/RateLimitModal.tsx constant CLAUDE_UPGRADE_URL (line 28) | const CLAUDE_UPGRADE_URL = 'https://claude.ai/upgrade'; function RateLimitModal (line 30) | function RateLimitModal() { FILE: apps/desktop/src/renderer/components/ReferencedFilesSection.tsx type ReferencedFilesSectionProps (line 12) | interface ReferencedFilesSectionProps { function getFileIcon (line 24) | function getFileIcon(name: string, isDirectory: boolean): React.ReactNode { function truncatePath (line 82) | function truncatePath(path: string, maxLength: number = 40): string { function ReferencedFilesSection (line 94) | function ReferencedFilesSection({ FILE: apps/desktop/src/renderer/components/Roadmap.tsx function Roadmap (line 28) | function Roadmap({ projectId, onGoToTask }: RoadmapProps) { FILE: apps/desktop/src/renderer/components/RoadmapGenerationProgress.tsx function formatElapsedTime (line 17) | function formatElapsedTime(seconds: number): string { function formatTimeAgo (line 37) | function formatTimeAgo(timestamp: Date | string | undefined): string { function useReducedMotion (line 62) | function useReducedMotion(): boolean { type RoadmapGenerationProgressProps (line 87) | interface RoadmapGenerationProgressProps { type GenerationPhase (line 94) | type GenerationPhase = Exclude; constant PHASE_CONFIG (line 97) | const PHASE_CONFIG: Record< constant STEP_PHASES (line 145) | const STEP_PHASES: { key: GenerationPhase; labelKey: string }[] = [ function HeartbeatIndicator (line 156) | function HeartbeatIndicator({ function PhaseStepsIndicator (line 207) | function PhaseStepsIndicator({ function RoadmapGenerationProgress (line 297) | function RoadmapGenerationProgress({ FILE: apps/desktop/src/renderer/components/RoadmapKanbanView.tsx type RoadmapKanbanViewProps (line 33) | interface RoadmapKanbanViewProps { type DroppableStatusColumnProps (line 42) | interface DroppableStatusColumnProps { function getStatusIcon (line 54) | function getStatusIcon(iconName: string) { function DroppableStatusColumn (line 69) | function DroppableStatusColumn({ function RoadmapKanbanView (line 176) | function RoadmapKanbanView({ FILE: apps/desktop/src/renderer/components/SDKRateLimitModal.tsx constant CLAUDE_UPGRADE_URL (line 29) | const CLAUDE_UPGRADE_URL = 'https://claude.ai/upgrade'; function getSourceName (line 34) | function getSourceName(source: SDKRateLimitInfo['source']): string { function getSourceIcon (line 48) | function getSourceIcon(source: SDKRateLimitInfo['source']) { function SDKRateLimitModal (line 58) | function SDKRateLimitModal() { FILE: apps/desktop/src/renderer/components/ScreenshotCapture.tsx type ScreenshotCaptureProps (line 27) | interface ScreenshotCaptureProps { function ScreenshotCapture (line 41) | function ScreenshotCapture({ open, onOpenChange, onCapture }: Screenshot... FILE: apps/desktop/src/renderer/components/Sidebar.tsx type SidebarView (line 63) | type SidebarView = 'kanban' | 'terminals' | 'roadmap' | 'context' | 'ide... type SidebarProps (line 65) | interface SidebarProps { type NavItem (line 72) | interface NavItem { function Sidebar (line 104) | function Sidebar({ FILE: apps/desktop/src/renderer/components/SortableFeatureCard.tsx type SortableFeatureCardProps (line 23) | interface SortableFeatureCardProps { function SortableFeatureCard (line 32) | function SortableFeatureCard({ FILE: apps/desktop/src/renderer/components/SortableProjectTab.tsx type SortableProjectTabProps (line 9) | interface SortableProjectTabProps { function SortableProjectTab (line 24) | function SortableProjectTab({ FILE: apps/desktop/src/renderer/components/SortableTaskCard.tsx type SortableTaskCardProps (line 8) | interface SortableTaskCardProps { function sortableTaskCardPropsAreEqual (line 19) | function sortableTaskCardPropsAreEqual( FILE: apps/desktop/src/renderer/components/SortableTerminalWrapper.tsx type SortableTerminalWrapperHandle (line 12) | interface SortableTerminalWrapperHandle { type SortableTerminalWrapperProps (line 17) | interface SortableTerminalWrapperProps { FILE: apps/desktop/src/renderer/components/TaskCard.tsx constant STUCK_CHECK_INTERVAL_MS (line 55) | const STUCK_CHECK_INTERVAL_MS = 60_000; type TaskCardProps (line 57) | interface TaskCardProps { function taskCardPropsAreEqual (line 68) | function taskCardPropsAreEqual(prevProps: TaskCardProps, nextProps: Task... FILE: apps/desktop/src/renderer/components/TaskCreationWizard.tsx type TaskCreationWizardProps (line 41) | interface TaskCreationWizardProps { constant PROJECT_DEFAULT_BRANCH (line 48) | const PROJECT_DEFAULT_BRANCH = '__project_default__'; function TaskCreationWizard (line 50) | function TaskCreationWizard({ FILE: apps/desktop/src/renderer/components/TaskEditDialog.tsx type TaskEditDialogProps (line 54) | interface TaskEditDialogProps { function TaskEditDialog (line 65) | function TaskEditDialog({ task, open, onOpenChange, onSaved }: TaskEditD... FILE: apps/desktop/src/renderer/components/TaskFileExplorerDrawer.tsx type TaskFileExplorerDrawerProps (line 7) | interface TaskFileExplorerDrawerProps { function TaskFileExplorerDrawer (line 37) | function TaskFileExplorerDrawer({ isOpen, onClose, projectPath }: TaskFi... FILE: apps/desktop/src/renderer/components/Terminal.tsx constant MIN_COLS (line 22) | const MIN_COLS = 10; constant MIN_ROWS (line 23) | const MIN_ROWS = 3; constant DIMENSION_MISMATCH_GRACE_PERIOD_MS (line 32) | const DIMENSION_MISMATCH_GRACE_PERIOD_MS = platformIsWindows ? 500 : 100; constant AUTO_CORRECTION_COOLDOWN_MS (line 36) | const AUTO_CORRECTION_COOLDOWN_MS = platformIsWindows ? 1000 : 300; constant AUTO_CORRECTION_WARNING_THRESHOLD (line 39) | const AUTO_CORRECTION_WARNING_THRESHOLD = 5; constant AUTO_CORRECTION_WINDOW_MS (line 40) | const AUTO_CORRECTION_WINDOW_MS = 60000; type TerminalHandle (line 47) | interface TerminalHandle { FILE: apps/desktop/src/renderer/components/TerminalGrid.tsx type TerminalGridProps (line 38) | interface TerminalGridProps { function TerminalGrid (line 44) | function TerminalGrid({ projectPath, onNewTaskClick, isActive = false }:... FILE: apps/desktop/src/renderer/components/UpdateBanner.tsx constant UPDATE_CHECK_INTERVAL_MS (line 9) | const UPDATE_CHECK_INTERVAL_MS = 5 * 60 * 1000; type UpdateBannerProps (line 11) | interface UpdateBannerProps { function UpdateBanner (line 20) | function UpdateBanner({ className }: UpdateBannerProps) { FILE: apps/desktop/src/renderer/components/UsageIndicator.test.tsx function createStoreMock (line 115) | function createStoreMock(overrides?: { FILE: apps/desktop/src/renderer/components/UsageIndicator.tsx constant THRESHOLD_CRITICAL (line 40) | const THRESHOLD_CRITICAL = 95; constant THRESHOLD_WARNING (line 41) | const THRESHOLD_WARNING = 91; constant THRESHOLD_ELEVATED (line 42) | const THRESHOLD_ELEVATED = 71; constant PROVIDER_BADGE_COLORS (line 45) | const PROVIDER_BADGE_COLORS: Record = { constant PROVIDER_I18N_KEYS (line 60) | const PROVIDER_I18N_KEYS: Record = { function UsageIndicator (line 129) | function UsageIndicator() { FILE: apps/desktop/src/renderer/components/VersionWarningModal.tsx type VersionWarningModalProps (line 13) | interface VersionWarningModalProps { function VersionWarningModal (line 23) | function VersionWarningModal({ isOpen, onClose, onOpenSettings }: Versio... FILE: apps/desktop/src/renderer/components/WelcomeScreen.tsx type WelcomeScreenProps (line 9) | interface WelcomeScreenProps { function WelcomeScreen (line 16) | function WelcomeScreen({ FILE: apps/desktop/src/renderer/components/WorktreeCleanupDialog.tsx type WorktreeCleanupDialogProps (line 14) | interface WorktreeCleanupDialogProps { function WorktreeCleanupDialog (line 27) | function WorktreeCleanupDialog({ FILE: apps/desktop/src/renderer/components/Worktrees.tsx constant TASK_PREFIX (line 54) | const TASK_PREFIX = 'task:'; constant TERMINAL_PREFIX (line 55) | const TERMINAL_PREFIX = 'terminal:'; type WorktreesProps (line 57) | interface WorktreesProps { function Worktrees (line 61) | function Worktrees({ projectId }: WorktreesProps) { FILE: apps/desktop/src/renderer/components/__tests__/OllamaModelSelector.progress.test.ts type ProgressTracking (line 8) | interface ProgressTracking { function calculateSpeed (line 26) | function calculateSpeed(bytesDelta: number, timeDelta: number): number { function formatSpeed (line 38) | function formatSpeed(speed: number): string { function calculateTimeRemaining (line 57) | function calculateTimeRemaining(remaining: number, speed: number): number { function formatTimeRemaining (line 69) | function formatTimeRemaining(timeRemaining: number): string { function calculatePercentage (line 88) | function calculatePercentage(completed: number, total: number): number { FILE: apps/desktop/src/renderer/components/__tests__/ProjectTabBar.test.tsx function createTestProject (line 12) | function createTestProject(overrides: Partial = {}): Project { type ControlProps (line 682) | interface ControlProps { type ControlProps (line 703) | interface ControlProps { type ControlProps (line 719) | interface ControlProps { FILE: apps/desktop/src/renderer/components/__tests__/RoadmapGenerationProgress.test.tsx function createTestStatus (line 9) | function createTestStatus(overrides: Partial = ... FILE: apps/desktop/src/renderer/components/__tests__/SortableProjectTab.test.tsx function createTestProject (line 12) | function createTestProject(overrides: Partial = {}): Project { type SortableProjectTabProps (line 500) | interface SortableProjectTabProps { type SortableProjectTabProps (line 532) | interface SortableProjectTabProps { FILE: apps/desktop/src/renderer/components/__tests__/Terminal.drop.test.tsx function createMockDragEvent (line 25) | function createMockDragEvent( function createFileReferenceDragData (line 57) | function createFileReferenceDragData(path: string, name: string, isDirec... function createMockDataTransfer (line 530) | function createMockDataTransfer(jsonData: object | null): DataTransfer { function TestDropZone (line 711) | function TestDropZone({ terminalId }: { terminalId: string }) { function createDropEvent (line 732) | function createDropEvent(fileRefData: FileReferenceDropData | null): Par... FILE: apps/desktop/src/renderer/components/changelog/ArchiveTasksCard.tsx type ArchiveTasksCardProps (line 7) | interface ArchiveTasksCardProps { function ArchiveTasksCard (line 14) | function ArchiveTasksCard({ FILE: apps/desktop/src/renderer/components/changelog/Changelog.tsx function Changelog (line 9) | function Changelog() { FILE: apps/desktop/src/renderer/components/changelog/ChangelogDetails.tsx type Step2ConfigureGenerateProps (line 16) | interface Step2ConfigureGenerateProps { function Step2ConfigureGenerate (line 52) | function Step2ConfigureGenerate(props: Step2ConfigureGenerateProps) { type Step3ReleaseArchiveProps (line 130) | interface Step3ReleaseArchiveProps { function Step3ReleaseArchive (line 139) | function Step3ReleaseArchive(props: Step3ReleaseArchiveProps) { FILE: apps/desktop/src/renderer/components/changelog/ChangelogEntry.tsx type TaskCardProps (line 7) | interface TaskCardProps { function TaskCard (line 13) | function TaskCard({ task, isSelected, onToggle }: TaskCardProps) { type CommitCardProps (line 54) | interface CommitCardProps { function CommitCard (line 58) | function CommitCard({ commit }: CommitCardProps) { FILE: apps/desktop/src/renderer/components/changelog/ChangelogFilters.tsx type ChangelogFiltersProps (line 17) | interface ChangelogFiltersProps { function ChangelogFilters (line 53) | function ChangelogFilters({ FILE: apps/desktop/src/renderer/components/changelog/ChangelogHeader.tsx type ChangelogHeaderProps (line 6) | interface ChangelogHeaderProps { function ChangelogHeader (line 11) | function ChangelogHeader({ step, onRefresh }: ChangelogHeaderProps) { type StepIndicatorProps (line 44) | interface StepIndicatorProps { function StepIndicator (line 50) | function StepIndicator({ step, currentStep, label }: StepIndicatorProps) { FILE: apps/desktop/src/renderer/components/changelog/ChangelogList.tsx type ChangelogListProps (line 8) | interface ChangelogListProps { function ChangelogList (line 24) | function ChangelogList({ FILE: apps/desktop/src/renderer/components/changelog/ConfigurationPanel.tsx type ConfigurationPanelProps (line 27) | interface ConfigurationPanelProps { function ConfigurationPanel (line 54) | function ConfigurationPanel({ FILE: apps/desktop/src/renderer/components/changelog/GitHubReleaseCard.tsx type GitHubReleaseCardProps (line 6) | interface GitHubReleaseCardProps { function GitHubReleaseCard (line 12) | function GitHubReleaseCard({ FILE: apps/desktop/src/renderer/components/changelog/PreviewPanel.tsx type LocalImageProps (line 10) | interface LocalImageProps { function LocalImage (line 16) | function LocalImage({ src, alt, projectPath }: LocalImageProps) { type PreviewPanelProps (line 80) | interface PreviewPanelProps { function PreviewPanel (line 98) | function PreviewPanel({ FILE: apps/desktop/src/renderer/components/changelog/Step3SuccessScreen.tsx type Step3SuccessScreenProps (line 8) | interface Step3SuccessScreenProps { function Step3SuccessScreen (line 17) | function Step3SuccessScreen({ FILE: apps/desktop/src/renderer/components/changelog/hooks/useChangelog.ts type WizardStep (line 15) | type WizardStep = 1 | 2 | 3; function useChangelog (line 17) | function useChangelog() { FILE: apps/desktop/src/renderer/components/changelog/hooks/useImageUpload.ts type UseImageUploadOptions (line 5) | interface UseImageUploadOptions { function useImageUpload (line 11) | function useImageUpload({ projectId, content, onContentChange }: UseImag... FILE: apps/desktop/src/renderer/components/changelog/utils.ts type SummaryInfo (line 3) | interface SummaryInfo { function getSummaryInfo (line 9) | function getSummaryInfo( function formatVersionTag (line 36) | function formatVersionTag(version: string): string { function getVersionBumpDescription (line 40) | function getVersionBumpDescription(versionReason: string | null): string... FILE: apps/desktop/src/renderer/components/context/Context.tsx function Context (line 12) | function Context({ projectId }: ContextProps) { FILE: apps/desktop/src/renderer/components/context/InfoItem.tsx type InfoItemProps (line 1) | interface InfoItemProps { function InfoItem (line 6) | function InfoItem({ label, value }: InfoItemProps) { FILE: apps/desktop/src/renderer/components/context/MemoriesTab.tsx type MemoriesTabProps (line 28) | interface MemoriesTabProps { function getMemoryCategory (line 42) | function getMemoryCategory(memory: RendererMemory): MemoryFilterCategory { function MemoriesTab (line 74) | function MemoriesTab({ FILE: apps/desktop/src/renderer/components/context/MemoryCard.tsx type MemoryCardProps (line 27) | interface MemoryCardProps { type ParsedMemoryContent (line 34) | interface ParsedMemoryContent { function parseMemoryContent (line 63) | function parseMemoryContent(content: string): ParsedMemoryContent | null { function SectionHeader (line 75) | function SectionHeader({ function ListItem (line 97) | function ListItem({ function ConfidenceBar (line 120) | function ConfidenceBar({ confidence }: { confidence: number }) { function isPRReviewMemory (line 135) | function isPRReviewMemory(memory: RendererMemory): boolean { function DeadEndContent (line 145) | function DeadEndContent({ parsed, sections }: { parsed: ParsedMemoryCont... function WorkflowSteps (line 183) | function WorkflowSteps({ steps, label }: { steps: string[]; label: strin... function MemoryCard (line 203) | function MemoryCard({ memory, onVerify, onPin, onDeprecate }: MemoryCard... FILE: apps/desktop/src/renderer/components/context/PRReviewCard.tsx type PRReviewCardProps (line 21) | interface PRReviewCardProps { type ParsedPRReview (line 25) | interface ParsedPRReview { function parsePRReviewContent (line 52) | function parsePRReviewContent(content: string): ParsedPRReview | null { function VerdictBadge (line 60) | function VerdictBadge({ verdict }: { verdict: string }) { function SeverityBadge (line 92) | function SeverityBadge({ severity, count }: { severity: string; count: n... function PRReviewCard (line 109) | function PRReviewCard({ memory }: PRReviewCardProps) { FILE: apps/desktop/src/renderer/components/context/ProjectIndexTab.tsx type ProjectIndexTabProps (line 12) | interface ProjectIndexTabProps { function ProjectIndexTab (line 19) | function ProjectIndexTab({ FILE: apps/desktop/src/renderer/components/context/ServiceCard.tsx type ServiceCardProps (line 17) | interface ServiceCardProps { function ServiceCard (line 22) | function ServiceCard({ name, service }: ServiceCardProps) { FILE: apps/desktop/src/renderer/components/context/constants.ts type MemoryFilterCategory (line 128) | type MemoryFilterCategory = typeof memoryFilterCategories[number]['key']; FILE: apps/desktop/src/renderer/components/context/hooks.ts function useProjectContext (line 8) | function useProjectContext(projectId: string) { function useRefreshIndex (line 16) | function useRefreshIndex(projectId: string) { function useMemorySearch (line 22) | function useMemorySearch(projectId: string) { FILE: apps/desktop/src/renderer/components/context/service-sections/APIRoutesSection.tsx type APIRoutesSectionProps (line 11) | interface APIRoutesSectionProps { function APIRoutesSection (line 15) | function APIRoutesSection({ api }: APIRoutesSectionProps) { FILE: apps/desktop/src/renderer/components/context/service-sections/DatabaseSection.tsx type DatabaseSectionProps (line 11) | interface DatabaseSectionProps { function DatabaseSection (line 15) | function DatabaseSection({ database }: DatabaseSectionProps) { FILE: apps/desktop/src/renderer/components/context/service-sections/DependenciesSection.tsx type DependenciesSectionProps (line 10) | interface DependenciesSectionProps { function DependenciesSection (line 14) | function DependenciesSection({ dependencies }: DependenciesSectionProps) { FILE: apps/desktop/src/renderer/components/context/service-sections/EnvironmentSection.tsx type EnvironmentSectionProps (line 11) | interface EnvironmentSectionProps { function EnvironmentSection (line 15) | function EnvironmentSection({ environment }: EnvironmentSectionProps) { FILE: apps/desktop/src/renderer/components/context/service-sections/ExternalServicesSection.tsx type ExternalServicesSectionProps (line 11) | interface ExternalServicesSectionProps { function ExternalServicesSection (line 15) | function ExternalServicesSection({ services }: ExternalServicesSectionPr... FILE: apps/desktop/src/renderer/components/context/service-sections/MonitoringSection.tsx type MonitoringSectionProps (line 10) | interface MonitoringSectionProps { function MonitoringSection (line 14) | function MonitoringSection({ monitoring }: MonitoringSectionProps) { FILE: apps/desktop/src/renderer/components/context/types.ts type ContextProps (line 1) | interface ContextProps { FILE: apps/desktop/src/renderer/components/context/utils.ts function formatDate (line 1) | function formatDate(timestamp: string): string { FILE: apps/desktop/src/renderer/components/github-issues/components/AutoFixButton.tsx type AutoFixButtonProps (line 8) | interface AutoFixButtonProps { function AutoFixButton (line 15) | function AutoFixButton({ issue, projectId, config, queueItem }: AutoFixB... FILE: apps/desktop/src/renderer/components/github-issues/components/BatchReviewWizard.tsx type BatchReviewWizardProps (line 36) | interface BatchReviewWizardProps { function BatchReviewWizard (line 49) | function BatchReviewWizard({ type BatchCardProps (line 422) | interface BatchCardProps { function BatchCard (line 431) | function BatchCard({ FILE: apps/desktop/src/renderer/components/github-issues/components/EmptyStates.tsx function EmptyState (line 5) | function EmptyState({ searchQuery, icon: Icon = Github, message }: Empty... function NotConnectedState (line 18) | function NotConnectedState({ error, onOpenSettings }: NotConnectedStateP... FILE: apps/desktop/src/renderer/components/github-issues/components/GitHubErrorDisplay.tsx type GitHubErrorDisplayProps (line 22) | interface GitHubErrorDisplayProps { constant ERROR_CONFIG (line 38) | const ERROR_CONFIG: Record< constant BASE_MESSAGE_KEYS (line 82) | const BASE_MESSAGE_KEYS: Record = { type CountdownComponents (line 94) | interface CountdownComponents { function getCountdownComponents (line 104) | function getCountdownComponents(resetTime: Date): CountdownComponents | ... function getMessageKey (line 129) | function getMessageKey(info: GitHubErrorInfo, rateLimitDiffMs?: number):... function GitHubErrorDisplay (line 162) | function GitHubErrorDisplay({ FILE: apps/desktop/src/renderer/components/github-issues/components/InvestigationDialog.tsx type GitHubComment (line 18) | interface GitHubComment { function InvestigationDialog (line 26) | function InvestigationDialog({ FILE: apps/desktop/src/renderer/components/github-issues/components/IssueDetail.tsx function IssueDetail (line 18) | function IssueDetail({ FILE: apps/desktop/src/renderer/components/github-issues/components/IssueList.tsx function IssueList (line 10) | function IssueList({ FILE: apps/desktop/src/renderer/components/github-issues/components/IssueListHeader.tsx function IssueListHeader (line 23) | function IssueListHeader({ FILE: apps/desktop/src/renderer/components/github-issues/components/IssueListItem.tsx function IssueListItem (line 10) | function IssueListItem({ issue, isSelected, onClick, onInvestigate }: Is... FILE: apps/desktop/src/renderer/components/github-issues/components/__tests__/GitHubErrorDisplay.test.tsx function createMockErrorInfo (line 48) | function createMockErrorInfo( FILE: apps/desktop/src/renderer/components/github-issues/hooks/useAnalyzePreview.ts type UseAnalyzePreviewProps (line 10) | interface UseAnalyzePreviewProps { type UseAnalyzePreviewReturn (line 14) | interface UseAnalyzePreviewReturn { function useAnalyzePreview (line 30) | function useAnalyzePreview({ projectId }: UseAnalyzePreviewProps): UseAn... FILE: apps/desktop/src/renderer/components/github-issues/hooks/useAutoFix.ts function useAutoFix (line 12) | function useAutoFix(projectId: string | undefined) { FILE: apps/desktop/src/renderer/components/github-issues/hooks/useGitHubInvestigation.ts function useGitHubInvestigation (line 10) | function useGitHubInvestigation(projectId: string | undefined) { FILE: apps/desktop/src/renderer/components/github-issues/hooks/useGitHubIssues.ts function useGitHubIssues (line 12) | function useGitHubIssues(projectId: string | undefined) { FILE: apps/desktop/src/renderer/components/github-issues/hooks/useIssueFiltering.ts type UseIssueFilteringOptions (line 5) | interface UseIssueFilteringOptions { function useIssueFiltering (line 10) | function useIssueFiltering( FILE: apps/desktop/src/renderer/components/github-issues/types/index.ts type FilterState (line 4) | type FilterState = 'open' | 'closed' | 'all'; type GitHubErrorType (line 10) | type GitHubErrorType = type GitHubErrorInfo (line 28) | interface GitHubErrorInfo { type GitHubIssuesProps (line 47) | interface GitHubIssuesProps { type IssueListItemProps (line 53) | interface IssueListItemProps { type IssueDetailProps (line 60) | interface IssueDetailProps { type InvestigationDialogProps (line 76) | interface InvestigationDialogProps { type IssueListHeaderProps (line 91) | interface IssueListHeaderProps { type IssueListProps (line 110) | interface IssueListProps { type EmptyStateProps (line 126) | interface EmptyStateProps { type NotConnectedStateProps (line 132) | interface NotConnectedStateProps { FILE: apps/desktop/src/renderer/components/github-issues/utils/github-error-parser.ts constant MAX_RAW_ERROR_LENGTH (line 12) | const MAX_RAW_ERROR_LENGTH = 500; constant RATE_LIMIT_PATTERNS (line 19) | const RATE_LIMIT_PATTERNS = [ constant AUTH_PATTERNS (line 30) | const AUTH_PATTERNS = [ constant PERMISSION_PATTERNS (line 45) | const PERMISSION_PATTERNS = [ constant NOT_FOUND_PATTERNS (line 64) | const NOT_FOUND_PATTERNS = [ constant NETWORK_PATTERNS (line 75) | const NETWORK_PATTERNS = [ constant REQUIRED_SCOPES_PATTERN (line 97) | const REQUIRED_SCOPES_PATTERN = /(?:requires?[:\s]*|missing\s*scopes?[:\... constant STATUS_CODE_PATTERN (line 104) | const STATUS_CODE_PATTERN = /(?:^|HTTP\s*|status[:\s]*|error[:\s]*|code[... function sanitizeRawError (line 110) | function sanitizeRawError(error: string): string { constant MAX_RESET_SECONDS (line 121) | const MAX_RESET_SECONDS = 86400; function extractRateLimitResetTime (line 128) | function extractRateLimitResetTime(error: string): Date | undefined { function extractRequiredScopes (line 178) | function extractRequiredScopes(error: string): string[] | undefined { function extractStatusCode (line 195) | function extractStatusCode(error: string): number | undefined { function matchesPatterns (line 212) | function matchesPatterns(error: string, patterns: RegExp[]): boolean { function getRateLimitMessage (line 219) | function getRateLimitMessage(_error: string, resetTime?: Date): string { function getAuthMessage (line 240) | function getAuthMessage(): string { function getPermissionMessage (line 247) | function getPermissionMessage(scopes?: string[]): string { function getNotFoundMessage (line 257) | function getNotFoundMessage(): string { function getNetworkMessage (line 264) | function getNetworkMessage(): string { function getUnknownMessage (line 271) | function getUnknownMessage(): string { function classifyError (line 284) | function classifyError(error: string, statusCode?: number): GitHubErrorT... function parseGitHubError (line 347) | function parseGitHubError(error: string | null | undefined): GitHubError... function isRateLimitError (line 423) | function isRateLimitError( function isAuthError (line 439) | function isAuthError( function isNetworkError (line 455) | function isNetworkError( function isRecoverableError (line 471) | function isRecoverableError( function requiresSettingsAction (line 488) | function requiresSettingsAction( FILE: apps/desktop/src/renderer/components/github-issues/utils/index.ts function formatDate (line 3) | function formatDate(dateString: string): string { function filterIssuesBySearch (line 11) | function filterIssuesBySearch(issues: GitHubIssue[], searchQuery: string... FILE: apps/desktop/src/renderer/components/github-prs/GitHubPRs.tsx type GitHubPRsProps (line 10) | interface GitHubPRsProps { function NotConnectedState (line 15) | function NotConnectedState({ function EmptyState (line 41) | function EmptyState({ message }: { message: string }) { function GitHubPRs (line 52) | function GitHubPRs({ onOpenSettings, isActive = false }: GitHubPRsProps) { FILE: apps/desktop/src/renderer/components/github-prs/components/CollapsibleCard.tsx type CollapsibleCardProps (line 6) | interface CollapsibleCardProps { function CollapsibleCard (line 22) | function CollapsibleCard({ FILE: apps/desktop/src/renderer/components/github-prs/components/FindingItem.tsx type FindingItemProps (line 13) | interface FindingItemProps { function getCategoryTranslationKey (line 22) | function getCategoryTranslationKey(category: string): string { function FindingItem (line 37) | function FindingItem({ finding, selected, posted = false, disputed = fal... FILE: apps/desktop/src/renderer/components/github-prs/components/FindingsSummary.tsx type FindingsSummaryProps (line 9) | interface FindingsSummaryProps { function FindingsSummary (line 15) | function FindingsSummary({ findings, selectedCount, disputedCount = 0 }:... FILE: apps/desktop/src/renderer/components/github-prs/components/PRDetail.tsx type PRDetailProps (line 40) | interface PRDetailProps { function getStatusColor (line 65) | function getStatusColor(status: PRReviewResult['overallStatus']): string { function PRDetail (line 76) | function PRDetail({ FILE: apps/desktop/src/renderer/components/github-prs/components/PRFilterBar.tsx type PRFilterBarProps (line 38) | interface PRFilterBarProps { constant STATUS_OPTIONS (line 50) | const STATUS_OPTIONS: Array<{ constant SORT_OPTIONS (line 67) | const SORT_OPTIONS: Array<{ function FilterDropdown (line 80) | function FilterDropdown({ function SortDropdown (line 307) | function SortDropdown({ function PRFilterBar (line 425) | function PRFilterBar({ FILE: apps/desktop/src/renderer/components/github-prs/components/PRHeader.tsx type PRHeaderProps (line 10) | interface PRHeaderProps { function getFileStatusStyle (line 18) | function getFileStatusStyle(status: string) { function PRHeader (line 39) | function PRHeader({ pr, isLoadingFiles = false }: PRHeaderProps) { FILE: apps/desktop/src/renderer/components/github-prs/components/PRList.tsx type PRStatusFlowProps (line 22) | interface PRStatusFlowProps { type FlowState (line 33) | type FlowState = 'not_started' | 'reviewing' | 'reviewed' | 'posted'; type FinalStatus (line 34) | type FinalStatus = 'success' | 'warning' | 'followup'; function PRStatusFlow (line 36) | function PRStatusFlow({ type PRReviewInfo (line 160) | interface PRReviewInfo { type PRListProps (line 174) | interface PRListProps { function formatDate (line 188) | function formatDate(dateString: string): string { function PRList (line 208) | function PRList({ FILE: apps/desktop/src/renderer/components/github-prs/components/PRLogs.tsx type PRLogsProps (line 27) | interface PRLogsProps { constant PHASE_LABELS (line 34) | const PHASE_LABELS: Record = { constant PHASE_ICONS (line 40) | const PHASE_ICONS: Record = { constant PHASE_COLORS (line 46) | const PHASE_COLORS: Record = { constant SOURCE_COLORS (line 53) | const SOURCE_COLORS: Record = { type AgentGroup (line 84) | interface AgentGroup { constant TOOL_ACTIVITY_PATTERNS (line 90) | const TOOL_ACTIVITY_PATTERNS = [ function isToolActivityLog (line 102) | function isToolActivityLog(content: string): boolean { function groupEntriesByAgent (line 107) | function groupEntriesByAgent(entries: PRLogEntry[]): { function PRLogs (line 146) | function PRLogs({ prNumber, logs, isLoading, isStreaming = false }: PRLo... type PhaseLogSectionProps (line 234) | interface PhaseLogSectionProps { function PhaseLogSection (line 244) | function PhaseLogSection({ phase, phaseLog, isExpanded, onToggle, isStre... type GroupedLogEntriesProps (line 345) | interface GroupedLogEntriesProps { function GroupedLogEntries (line 352) | function GroupedLogEntries({ entries, phase, expandedAgents, onToggleAge... type OrchestratorActivitySectionProps (line 391) | interface OrchestratorActivitySectionProps { function OrchestratorActivitySection (line 398) | function OrchestratorActivitySection({ entries, isExpanded, onToggle }: ... type AgentLogGroupProps (line 454) | interface AgentLogGroupProps { constant SKIP_AS_SUMMARY_PATTERNS (line 462) | const SKIP_AS_SUMMARY_PATTERNS = [ function isBoringSummary (line 469) | function isBoringSummary(content: string): boolean { function findSummaryEntry (line 474) | function findSummaryEntry(entries: PRLogEntry[]): { summaryEntry: PRLogE... function AgentLogGroup (line 511) | function AgentLogGroup({ group, isExpanded, onToggle }: AgentLogGroupPro... type LogEntryProps (line 581) | interface LogEntryProps { function LogEntry (line 585) | function LogEntry({ entry }: LogEntryProps) { FILE: apps/desktop/src/renderer/components/github-prs/components/ReviewFindings.tsx type ReviewFindingsProps (line 35) | interface ReviewFindingsProps { function ReviewFindings (line 42) | function ReviewFindings({ FILE: apps/desktop/src/renderer/components/github-prs/components/ReviewStatusTree.tsx type ReviewStatus (line 11) | type ReviewStatus = type ReviewStatusTreeProps (line 21) | interface ReviewStatusTreeProps { function ReviewStatusTree (line 41) | function ReviewStatusTree({ FILE: apps/desktop/src/renderer/components/github-prs/components/SeverityGroupHeader.tsx type SeverityGroupHeaderProps (line 12) | interface SeverityGroupHeaderProps { function SeverityGroupHeader (line 21) | function SeverityGroupHeader({ FILE: apps/desktop/src/renderer/components/github-prs/components/StatusIndicator.tsx type CIStatusIconProps (line 11) | interface CIStatusIconProps { function CIStatusIcon (line 16) | function CIStatusIcon({ status, className }: CIStatusIconProps) { type ReviewStatusBadgeProps (line 36) | interface ReviewStatusBadgeProps { function ReviewStatusBadge (line 41) | function ReviewStatusBadge({ status, className }: ReviewStatusBadgeProps) { type MergeReadinessIconProps (line 76) | interface MergeReadinessIconProps { function MergeReadinessIcon (line 81) | function MergeReadinessIcon({ state, className }: MergeReadinessIconProp... type StatusIndicatorProps (line 100) | interface StatusIndicatorProps { function StatusIndicator (line 131) | function StatusIndicator({ function CompactStatusIndicator (line 192) | function CompactStatusIndicator(props: Omit = {}): PR... function createTestFinding (line 47) | function createTestFinding(severity: PRReviewFinding['severity'], id: st... FILE: apps/desktop/src/renderer/components/github-prs/components/__tests__/PRDetail.integration.test.tsx type PostCommentFn (line 17) | type PostCommentFn = (body: string) => Promise; function createMockPR (line 44) | function createMockPR(overrides: Partial = {}): PRData { function createMockCleanReviewResult (line 66) | function createMockCleanReviewResult(overrides: Partial ... function I18nWrapper (line 81) | function I18nWrapper({ children }: { children: React.ReactNode }) { function renderPRDetail (line 89) | function renderPRDetail(overrides: { function createMockPostedReviewResult (line 360) | function createMockPostedReviewResult(overrides: Partial... function renderPRDetailForFollowup (line 389) | function renderPRDetailForFollowup(overrides: { FILE: apps/desktop/src/renderer/components/github-prs/components/__tests__/PRDetail.test.tsx function _createMockPR (line 21) | function _createMockPR(overrides: Partial = {}): PRData { function createMockReviewResult (line 45) | function createMockReviewResult(overrides: Partial = {})... function createMockReviewProgress (line 61) | function createMockReviewProgress(overrides: Partial =... function createMockNewCommitsCheck (line 74) | function createMockNewCommitsCheck(overrides: Partial =... function computePRStatus (line 86) | function computePRStatus(params: { FILE: apps/desktop/src/renderer/components/github-prs/components/__tests__/ReviewStatusTree.test.tsx function createMockReviewResult (line 27) | function createMockReviewResult(overrides: Partial = {})... function createMockNewCommitsCheck (line 43) | function createMockNewCommitsCheck(overrides: Partial =... FILE: apps/desktop/src/renderer/components/github-prs/constants/severity-config.ts type SeverityGroup (line 17) | type SeverityGroup = 'critical' | 'high' | 'medium' | 'low'; constant SEVERITY_ORDER (line 19) | const SEVERITY_ORDER: SeverityGroup[] = ['critical', 'high', 'medium', '... constant SEVERITY_CONFIG (line 21) | const SEVERITY_CONFIG: Record = { function getCategoryIcon (line 69) | function getCategoryIcon(category: string) { FILE: apps/desktop/src/renderer/components/github-prs/hooks/__tests__/useGitHubPRs.test.ts function createMockReviewResult (line 18) | function createMockReviewResult(overrides: Partial = {})... function createMockNewCommitsCheck (line 32) | function createMockNewCommitsCheck(overrides: Partial =... type SelectPRTestParams (line 45) | interface SelectPRTestParams { type SelectPRTestResult (line 61) | interface SelectPRTestResult { function simulateSelectPR (line 69) | async function simulateSelectPR(params: SelectPRTestParams): Promise = { constant GITLAB_COMPLEXITY_COLORS (line 18) | const GITLAB_COMPLEXITY_COLORS: Record = { function IssueDetail (line 24) | function IssueDetail({ issue, onInvestigate, investigationResult, linked... FILE: apps/desktop/src/renderer/components/gitlab-issues/components/IssueList.tsx function IssueList (line 7) | function IssueList({ FILE: apps/desktop/src/renderer/components/gitlab-issues/components/IssueListHeader.tsx function IssueListHeader (line 15) | function IssueListHeader({ FILE: apps/desktop/src/renderer/components/gitlab-issues/components/IssueListItem.tsx constant GITLAB_ISSUE_STATE_COLORS (line 7) | const GITLAB_ISSUE_STATE_COLORS: Record = { constant GITLAB_ISSUE_STATE_LABELS (line 12) | const GITLAB_ISSUE_STATE_LABELS: Record = { function IssueListItem (line 17) | function IssueListItem({ issue, isSelected, onClick, onInvestigate }: Is... FILE: apps/desktop/src/renderer/components/gitlab-issues/hooks/useGitLabInvestigation.ts function useGitLabInvestigation (line 6) | function useGitLabInvestigation(projectId: string | undefined) { FILE: apps/desktop/src/renderer/components/gitlab-issues/hooks/useGitLabIssues.ts function useGitLabIssues (line 9) | function useGitLabIssues(projectId: string | undefined) { FILE: apps/desktop/src/renderer/components/gitlab-issues/hooks/useIssueFiltering.ts function useIssueFiltering (line 5) | function useIssueFiltering(issues: GitLabIssue[]) { FILE: apps/desktop/src/renderer/components/gitlab-issues/types/index.ts type FilterState (line 4) | type FilterState = 'opened' | 'closed' | 'all'; type GitLabIssuesProps (line 6) | interface GitLabIssuesProps { type IssueListItemProps (line 12) | interface IssueListItemProps { type IssueDetailProps (line 19) | interface IssueDetailProps { type InvestigationDialogProps (line 29) | interface InvestigationDialogProps { type IssueListHeaderProps (line 44) | interface IssueListHeaderProps { type IssueListProps (line 55) | interface IssueListProps { type EmptyStateProps (line 64) | interface EmptyStateProps { type NotConnectedStateProps (line 70) | interface NotConnectedStateProps { FILE: apps/desktop/src/renderer/components/gitlab-issues/utils/index.ts function formatDate (line 3) | function formatDate(dateString: string): string { function filterIssuesBySearch (line 11) | function filterIssuesBySearch(issues: GitLabIssue[], searchQuery: string... FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/GitLabMergeRequests.tsx type GitLabMergeRequestsProps (line 10) | interface GitLabMergeRequestsProps { function GitLabMergeRequests (line 15) | function GitLabMergeRequests({ projectId, onOpenSettings }: GitLabMergeR... FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/components/CreateMergeRequestDialog.tsx type CreateMergeRequestDialogProps (line 16) | interface CreateMergeRequestDialogProps { function CreateMergeRequestDialog (line 25) | function CreateMergeRequestDialog({ FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/components/FindingItem.tsx type FindingItemProps (line 12) | interface FindingItemProps { function FindingItem (line 19) | function FindingItem({ finding, selected, posted = false, onToggle }: Fi... FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/components/FindingsSummary.tsx type FindingsSummaryProps (line 8) | interface FindingsSummaryProps { function FindingsSummary (line 13) | function FindingsSummary({ findings, selectedCount }: FindingsSummaryPro... FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/components/MRDetail.tsx type MRDetailProps (line 36) | interface MRDetailProps { function formatDate (line 52) | function formatDate(dateString: string): string { function getStatusColor (line 62) | function getStatusColor(status: GitLabMRReviewResult['overallStatus']): ... function getMRStateColor (line 73) | function getMRStateColor(state: string): string { function MRDetail (line 86) | function MRDetail({ FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/components/MergeRequestItem.tsx type MergeRequestItemProps (line 5) | interface MergeRequestItemProps { function MergeRequestItem (line 11) | function MergeRequestItem({ mr, isSelected, onClick }: MergeRequestItemP... FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/components/MergeRequestList.tsx type MergeRequestListProps (line 9) | interface MergeRequestListProps { function MergeRequestList (line 19) | function MergeRequestList({ FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/components/ReviewFindings.tsx type ReviewFindingsProps (line 29) | interface ReviewFindingsProps { function ReviewFindings (line 36) | function ReviewFindings({ FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/components/SeverityGroupHeader.tsx type SeverityGroupHeaderProps (line 12) | interface SeverityGroupHeaderProps { function SeverityGroupHeader (line 21) | function SeverityGroupHeader({ FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/constants/severity-config.ts type SeverityGroup (line 17) | type SeverityGroup = 'critical' | 'high' | 'medium' | 'low'; constant SEVERITY_ORDER (line 19) | const SEVERITY_ORDER: SeverityGroup[] = ['critical', 'high', 'medium', '... constant SEVERITY_CONFIG (line 21) | const SEVERITY_CONFIG: Record = { function getCategoryIcon (line 69) | function getCategoryIcon(category: string) { FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/hooks/useFindingSelection.ts type UseFindingSelectionProps (line 9) | interface UseFindingSelectionProps { function useFindingSelection (line 16) | function useFindingSelection({ FILE: apps/desktop/src/renderer/components/gitlab-merge-requests/hooks/useGitLabMRs.ts type UseGitLabMRsOptions (line 18) | interface UseGitLabMRsOptions { type UseGitLabMRsResult (line 23) | interface UseGitLabMRsResult { function useGitLabMRs (line 55) | function useGitLabMRs(projectId?: string, options: UseGitLabMRsOptions =... FILE: apps/desktop/src/renderer/components/ideation/GenerationProgressScreen.tsx type GenerationProgressScreenProps (line 25) | interface GenerationProgressScreenProps { function GenerationProgressScreen (line 39) | function GenerationProgressScreen({ FILE: apps/desktop/src/renderer/components/ideation/IdeaCard.tsx type IdeaCardProps (line 38) | interface IdeaCardProps { function IdeaCard (line 48) | function IdeaCard({ idea, isSelected, onClick, onConvert, onGoToTask, on... FILE: apps/desktop/src/renderer/components/ideation/IdeaDetailPanel.tsx type IdeaDetailPanelProps (line 27) | interface IdeaDetailPanelProps { function IdeaDetailPanel (line 36) | function IdeaDetailPanel({ idea, onClose, onConvert, onGoToTask, onDismi... FILE: apps/desktop/src/renderer/components/ideation/IdeaSkeletonCard.tsx function IdeaSkeletonCard (line 3) | function IdeaSkeletonCard() { FILE: apps/desktop/src/renderer/components/ideation/Ideation.tsx type IdeationProps (line 14) | interface IdeationProps { function Ideation (line 19) | function Ideation({ projectId, onGoToTask }: IdeationProps) { FILE: apps/desktop/src/renderer/components/ideation/IdeationDialogs.tsx type IdeationDialogsProps (line 21) | interface IdeationDialogsProps { function IdeationDialogs (line 35) | function IdeationDialogs({ FILE: apps/desktop/src/renderer/components/ideation/IdeationEmptyState.tsx type IdeationEmptyStateProps (line 12) | interface IdeationEmptyStateProps { function IdeationEmptyState (line 21) | function IdeationEmptyState({ FILE: apps/desktop/src/renderer/components/ideation/IdeationFilters.tsx type IdeationFiltersProps (line 4) | interface IdeationFiltersProps { function IdeationFilters (line 10) | function IdeationFilters({ activeTab, onTabChange, children }: IdeationF... FILE: apps/desktop/src/renderer/components/ideation/IdeationHeader.tsx type IdeationHeaderProps (line 10) | interface IdeationHeaderProps { function IdeationHeader (line 27) | function IdeationHeader({ FILE: apps/desktop/src/renderer/components/ideation/TypeIcon.tsx type TypeIconProps (line 12) | interface TypeIconProps { function TypeIcon (line 16) | function TypeIcon({ type }: TypeIconProps) { FILE: apps/desktop/src/renderer/components/ideation/TypeStateIcon.tsx type TypeStateIconProps (line 4) | interface TypeStateIconProps { function TypeStateIcon (line 8) | function TypeStateIcon({ state }: TypeStateIconProps) { FILE: apps/desktop/src/renderer/components/ideation/constants.ts constant ALL_IDEATION_TYPES (line 5) | const ALL_IDEATION_TYPES: IdeationType[] = [ FILE: apps/desktop/src/renderer/components/ideation/details/CodeImprovementDetails.tsx type CodeImprovementDetailsProps (line 14) | interface CodeImprovementDetailsProps { function CodeImprovementDetails (line 18) | function CodeImprovementDetails({ idea }: CodeImprovementDetailsProps) { FILE: apps/desktop/src/renderer/components/ideation/details/CodeQualityDetails.tsx type CodeQualityDetailsProps (line 19) | interface CodeQualityDetailsProps { function CodeQualityDetails (line 23) | function CodeQualityDetails({ idea }: CodeQualityDetailsProps) { FILE: apps/desktop/src/renderer/components/ideation/details/DocumentationGapDetails.tsx type DocumentationGapDetailsProps (line 16) | interface DocumentationGapDetailsProps { function DocumentationGapDetails (line 20) | function DocumentationGapDetails({ idea }: DocumentationGapDetailsProps) { FILE: apps/desktop/src/renderer/components/ideation/details/PerformanceOptimizationDetails.tsx type PerformanceOptimizationDetailsProps (line 22) | interface PerformanceOptimizationDetailsProps { function getCategoryIcon (line 27) | function getCategoryIcon(category: string) { function PerformanceOptimizationDetails (line 42) | function PerformanceOptimizationDetails({ idea }: PerformanceOptimizatio... FILE: apps/desktop/src/renderer/components/ideation/details/SecurityHardeningDetails.tsx type SecurityHardeningDetailsProps (line 17) | interface SecurityHardeningDetailsProps { function SecurityHardeningDetails (line 21) | function SecurityHardeningDetails({ idea }: SecurityHardeningDetailsProp... FILE: apps/desktop/src/renderer/components/ideation/details/UIUXDetails.tsx type UIUXDetailsProps (line 11) | interface UIUXDetailsProps { function UIUXDetails (line 15) | function UIUXDetails({ idea }: UIUXDetailsProps) { FILE: apps/desktop/src/renderer/components/ideation/hooks/useIdeation.ts type UseIdeationOptions (line 24) | interface UseIdeationOptions { function useIdeation (line 30) | function useIdeation(projectId: string, options: UseIdeationOptions = {}) { FILE: apps/desktop/src/renderer/components/ideation/hooks/useIdeationAuth.ts function useIdeationAuth (line 12) | function useIdeationAuth() { FILE: apps/desktop/src/renderer/components/ideation/type-guards.ts function isCodeImprovementIdea (line 11) | function isCodeImprovementIdea(idea: Idea): idea is CodeImprovementIdea { function isUIUXIdea (line 15) | function isUIUXIdea(idea: Idea): idea is UIUXImprovementIdea { function isDocumentationGapIdea (line 19) | function isDocumentationGapIdea(idea: Idea): idea is DocumentationGapIdea { function isSecurityHardeningIdea (line 23) | function isSecurityHardeningIdea(idea: Idea): idea is SecurityHardeningI... function isPerformanceOptimizationIdea (line 27) | function isPerformanceOptimizationIdea(idea: Idea): idea is PerformanceO... function isCodeQualityIdea (line 31) | function isCodeQualityIdea(idea: Idea): idea is CodeQualityIdea { FILE: apps/desktop/src/renderer/components/linear-import/LinearTaskImportModalRefactored.tsx function LinearTaskImportModalRefactored (line 28) | function LinearTaskImportModalRefactored({ FILE: apps/desktop/src/renderer/components/linear-import/components/ErrorBanner.tsx type ErrorBannerProps (line 7) | interface ErrorBannerProps { function ErrorBanner (line 11) | function ErrorBanner({ error }: ErrorBannerProps) { FILE: apps/desktop/src/renderer/components/linear-import/components/ImportSuccessBanner.tsx type ImportSuccessBannerProps (line 9) | interface ImportSuccessBannerProps { function ImportSuccessBanner (line 14) | function ImportSuccessBanner({ importResult, onClose }: ImportSuccessBan... FILE: apps/desktop/src/renderer/components/linear-import/components/IssueCard.tsx type IssueCardProps (line 17) | interface IssueCardProps { function IssueCard (line 23) | function IssueCard({ issue, isSelected, onToggle }: IssueCardProps) { FILE: apps/desktop/src/renderer/components/linear-import/components/IssueList.tsx type IssueListProps (line 10) | interface IssueListProps { function IssueList (line 20) | function IssueList({ FILE: apps/desktop/src/renderer/components/linear-import/components/SearchAndFilterBar.tsx type SearchAndFilterBarProps (line 15) | interface SearchAndFilterBarProps { function SearchAndFilterBar (line 23) | function SearchAndFilterBar({ FILE: apps/desktop/src/renderer/components/linear-import/components/SelectionControls.tsx type SelectionControlsProps (line 7) | interface SelectionControlsProps { function SelectionControls (line 18) | function SelectionControls({ FILE: apps/desktop/src/renderer/components/linear-import/components/TeamProjectSelector.tsx type TeamProjectSelectorProps (line 15) | interface TeamProjectSelectorProps { function TeamProjectSelector (line 26) | function TeamProjectSelector({ FILE: apps/desktop/src/renderer/components/linear-import/hooks/useIssueFiltering.ts function useIssueFiltering (line 8) | function useIssueFiltering( FILE: apps/desktop/src/renderer/components/linear-import/hooks/useIssueSelection.ts function useIssueSelection (line 8) | function useIssueSelection(filteredIssues: LinearIssue[]): { FILE: apps/desktop/src/renderer/components/linear-import/hooks/useLinearImport.ts function useLinearImport (line 8) | function useLinearImport( FILE: apps/desktop/src/renderer/components/linear-import/hooks/useLinearImportModal.ts type UseLinearImportModalProps (line 15) | interface UseLinearImportModalProps { function useLinearImportModal (line 21) | function useLinearImportModal({ FILE: apps/desktop/src/renderer/components/linear-import/hooks/useLinearIssues.ts function useLinearIssues (line 8) | function useLinearIssues( FILE: apps/desktop/src/renderer/components/linear-import/hooks/useLinearProjects.ts function useLinearProjects (line 8) | function useLinearProjects( FILE: apps/desktop/src/renderer/components/linear-import/hooks/useLinearTeams.ts function useLinearTeams (line 8) | function useLinearTeams(projectId: string, open: boolean) { FILE: apps/desktop/src/renderer/components/linear-import/types.ts type LinearTaskImportModalProps (line 14) | interface LinearTaskImportModalProps { type LinearImportState (line 21) | interface LinearImportState { type IssueSelectionControls (line 46) | interface IssueSelectionControls { constant PRIORITY_COLORS (line 55) | const PRIORITY_COLORS: Record = { constant STATE_TYPE_COLORS (line 64) | const STATE_TYPE_COLORS: Record = { FILE: apps/desktop/src/renderer/components/onboarding/AccountsStep.tsx type AccountsStepProps (line 6) | interface AccountsStepProps { function AccountsStep (line 19) | function AccountsStep({ onNext, onBack, onSkip }: AccountsStepProps) { FILE: apps/desktop/src/renderer/components/onboarding/AuthChoiceStep.tsx type AuthChoiceStepProps (line 8) | interface AuthChoiceStepProps { type AuthOptionCardProps (line 15) | interface AuthOptionCardProps { function AuthOptionCard (line 24) | function AuthOptionCard({ icon, title, description, onClick, variant = '... function AuthChoiceStep (line 64) | function AuthChoiceStep({ onNext, onBack, onSkip, onAPIKeyPathComplete }... FILE: apps/desktop/src/renderer/components/onboarding/ClaudeCodeStep.tsx type ClaudeCodeStepProps (line 8) | interface ClaudeCodeStepProps { type DetectionStatus (line 14) | type DetectionStatus = 'loading' | 'installed' | 'outdated' | 'not-found... function ClaudeCodeStep (line 22) | function ClaudeCodeStep({ onNext, onBack, onSkip }: ClaudeCodeStepProps) { FILE: apps/desktop/src/renderer/components/onboarding/CompletionStep.tsx type CompletionStepProps (line 13) | interface CompletionStepProps { type NextStepCardProps (line 19) | interface NextStepCardProps { function NextStepCard (line 27) | function NextStepCard({ icon, title, description, action, actionLabel }:... function CompletionStep (line 61) | function CompletionStep({ FILE: apps/desktop/src/renderer/components/onboarding/DevToolsStep.tsx type DevToolsStepProps (line 18) | interface DevToolsStepProps { type DetectedTool (line 23) | interface DetectedTool { type DetectedTools (line 30) | interface DetectedTools { constant IDE_NAMES (line 37) | const IDE_NAMES: Partial> = { constant TERMINAL_NAMES (line 62) | const TERMINAL_NAMES: Partial> = { constant CLI_NAMES (line 85) | const CLI_NAMES: Partial> = { function DevToolsStep (line 100) | function DevToolsStep({ onNext, onBack }: DevToolsStepProps) { FILE: apps/desktop/src/renderer/components/onboarding/FirstSpecStep.tsx type FirstSpecStepProps (line 15) | interface FirstSpecStepProps { type TipCardProps (line 22) | interface TipCardProps { function TipCard (line 28) | function TipCard({ icon, title, description }: TipCardProps) { function FirstSpecStep (line 51) | function FirstSpecStep({ onNext, onBack, onSkip, onOpenTaskCreator }: Fi... FILE: apps/desktop/src/renderer/components/onboarding/GraphitiStep.tsx type MemoryLLMProvider (line 31) | type MemoryLLMProvider = 'openai' | 'anthropic' | 'azure_openai' | 'olla... type GraphitiStepProps (line 33) | interface GraphitiStepProps { constant LLM_PROVIDERS (line 40) | const LLM_PROVIDERS: Array<{ constant EMBEDDING_PROVIDERS (line 55) | const EMBEDDING_PROVIDERS: Array<{ type GraphitiConfig (line 69) | interface GraphitiConfig { type ValidationStatus (line 104) | interface ValidationStatus { function GraphitiStep (line 114) | function GraphitiStep({ onNext, onBack, onSkip }: GraphitiStepProps) { FILE: apps/desktop/src/renderer/components/onboarding/MemoryStep.tsx type MemoryStepProps (line 9) | interface MemoryStepProps { function MemoryStep (line 19) | function MemoryStep({ onNext, onBack }: MemoryStepProps) { FILE: apps/desktop/src/renderer/components/onboarding/OAuthStep.tsx type OAuthStepProps (line 32) | interface OAuthStepProps { function OAuthStep (line 43) | function OAuthStep({ onNext, onBack, onSkip }: OAuthStepProps) { FILE: apps/desktop/src/renderer/components/onboarding/OllamaModelSelector.tsx type OllamaState (line 15) | type OllamaState = 'checking' | 'not-installed' | 'not-running' | 'avail... type OllamaModel (line 17) | interface OllamaModel { type OllamaModelSelectorProps (line 26) | interface OllamaModelSelectorProps { constant RECOMMENDED_MODELS (line 36) | const RECOMMENDED_MODELS: OllamaModel[] = [ function OllamaModelSelector (line 105) | function OllamaModelSelector({ FILE: apps/desktop/src/renderer/components/onboarding/OnboardingWizard.tsx type OnboardingWizardProps (line 22) | interface OnboardingWizardProps { type WizardStepId (line 30) | type WizardStepId = 'welcome' | 'accounts' | 'devtools' | 'privacy' | 'm... constant WIZARD_STEPS (line 33) | const WIZARD_STEPS: { id: WizardStepId; labelKey: string }[] = [ function OnboardingWizard (line 53) | function OnboardingWizard({ FILE: apps/desktop/src/renderer/components/onboarding/PrivacyStep.tsx type PrivacyStepProps (line 11) | interface PrivacyStepProps { function PrivacyStep (line 21) | function PrivacyStep({ onNext, onBack }: PrivacyStepProps) { FILE: apps/desktop/src/renderer/components/onboarding/WelcomeStep.tsx type WelcomeStepProps (line 6) | interface WelcomeStepProps { type FeatureCardProps (line 11) | interface FeatureCardProps { function FeatureCard (line 17) | function FeatureCard({ icon, title, description }: FeatureCardProps) { function WelcomeStep (line 39) | function WelcomeStep({ onGetStarted, onSkip }: WelcomeStepProps) { FILE: apps/desktop/src/renderer/components/onboarding/WizardProgress.tsx type WizardStep (line 4) | interface WizardStep { type WizardProgressProps (line 10) | interface WizardProgressProps { function WizardProgress (line 20) | function WizardProgress({ currentStep, steps }: WizardProgressProps) { FILE: apps/desktop/src/renderer/components/project-settings/AgentConfigSection.tsx type AgentConfigSectionProps (line 6) | interface AgentConfigSectionProps { function AgentConfigSection (line 11) | function AgentConfigSection({ settings, onUpdateSettings }: AgentConfigS... FILE: apps/desktop/src/renderer/components/project-settings/AutoBuildIntegration.tsx type AutoBuildIntegrationProps (line 5) | interface AutoBuildIntegrationProps { function AutoBuildIntegration (line 14) | function AutoBuildIntegration({ FILE: apps/desktop/src/renderer/components/project-settings/ClaudeOAuthFlow.tsx type ClaudeOAuthFlowProps (line 15) | interface ClaudeOAuthFlowProps { function ClaudeOAuthFlow (line 26) | function ClaudeOAuthFlow({ onSuccess, onCancel }: ClaudeOAuthFlowProps) { FILE: apps/desktop/src/renderer/components/project-settings/CollapsibleSection.tsx type CollapsibleSectionProps (line 4) | interface CollapsibleSectionProps { function CollapsibleSection (line 13) | function CollapsibleSection({ FILE: apps/desktop/src/renderer/components/project-settings/ConnectionStatus.tsx type ConnectionStatusProps (line 3) | interface ConnectionStatusProps { function ConnectionStatus (line 12) | function ConnectionStatus({ FILE: apps/desktop/src/renderer/components/project-settings/GeneralSettings.tsx type GeneralSettingsProps (line 27) | interface GeneralSettingsProps { function GeneralSettings (line 37) | function GeneralSettings({ FILE: apps/desktop/src/renderer/components/project-settings/GitHubIntegrationSection.tsx type GitHubIntegrationSectionProps (line 15) | interface GitHubIntegrationSectionProps { function GitHubIntegrationSection (line 25) | function GitHubIntegrationSection({ FILE: apps/desktop/src/renderer/components/project-settings/GitHubOAuthFlow.tsx type GitHubOAuthFlowProps (line 17) | interface GitHubOAuthFlowProps { constant DEBUG (line 23) | const DEBUG = process.env.NODE_ENV === 'development' || process.env.DEBU... function debugLog (line 25) | function debugLog(message: string, data?: unknown) { constant AUTH_TIMEOUT_MS (line 37) | const AUTH_TIMEOUT_MS = 5 * 60 * 1000; function GitHubOAuthFlow (line 43) | function GitHubOAuthFlow({ onSuccess, onCancel }: GitHubOAuthFlowProps) { FILE: apps/desktop/src/renderer/components/project-settings/IntegrationSettings.tsx type IntegrationSettingsProps (line 31) | interface IntegrationSettingsProps { function IntegrationSettings (line 58) | function IntegrationSettings({ FILE: apps/desktop/src/renderer/components/project-settings/LinearIntegrationSection.tsx type LinearIntegrationSectionProps (line 13) | interface LinearIntegrationSectionProps { function LinearIntegrationSection (line 23) | function LinearIntegrationSection({ FILE: apps/desktop/src/renderer/components/project-settings/MemoryBackendSection.tsx type MemoryBackendSectionProps (line 9) | interface MemoryBackendSectionProps { function MemoryBackendSection (line 23) | function MemoryBackendSection({ FILE: apps/desktop/src/renderer/components/project-settings/NotificationsSection.tsx type NotificationsSectionProps (line 5) | interface NotificationsSectionProps { function NotificationsSection (line 10) | function NotificationsSection({ settings, onUpdateSettings }: Notificati... FILE: apps/desktop/src/renderer/components/project-settings/PasswordInput.tsx type PasswordInputProps (line 5) | interface PasswordInputProps { function PasswordInput (line 12) | function PasswordInput({ value, onChange, placeholder, className }: Pass... FILE: apps/desktop/src/renderer/components/project-settings/SecuritySettings.tsx type SecuritySettingsProps (line 24) | interface SecuritySettingsProps { function SecuritySettings (line 39) | function SecuritySettings({ FILE: apps/desktop/src/renderer/components/project-settings/StatusBadge.tsx type StatusBadgeProps (line 1) | interface StatusBadgeProps { function StatusBadge (line 6) | function StatusBadge({ status, label }: StatusBadgeProps) { FILE: apps/desktop/src/renderer/components/project-settings/hooks/useProjectSettings.ts type UseProjectSettingsReturn (line 19) | interface UseProjectSettingsReturn { function useProjectSettings (line 75) | function useProjectSettings( FILE: apps/desktop/src/renderer/components/roadmap/FeatureCard.tsx function FeatureCard (line 16) | function FeatureCard({ FILE: apps/desktop/src/renderer/components/roadmap/FeatureDetailPanel.tsx function FeatureDetailPanel (line 29) | function FeatureDetailPanel({ FILE: apps/desktop/src/renderer/components/roadmap/PhaseCard.tsx constant INITIAL_VISIBLE_COUNT (line 12) | const INITIAL_VISIBLE_COUNT = 5; function PhaseCard (line 14) | function PhaseCard({ FILE: apps/desktop/src/renderer/components/roadmap/RoadmapEmptyState.tsx function RoadmapEmptyState (line 6) | function RoadmapEmptyState({ onGenerate }: RoadmapEmptyStateProps) { FILE: apps/desktop/src/renderer/components/roadmap/RoadmapHeader.tsx function RoadmapHeader (line 10) | function RoadmapHeader({ roadmap, competitorAnalysis, onAddFeature, onRe... FILE: apps/desktop/src/renderer/components/roadmap/RoadmapTabs.tsx function RoadmapTabs (line 21) | function RoadmapTabs({ FILE: apps/desktop/src/renderer/components/roadmap/TaskOutcomeBadge.tsx type TaskOutcomeConfig (line 5) | interface TaskOutcomeConfig { function useTaskOutcomeConfig (line 11) | function useTaskOutcomeConfig(outcome: TaskOutcome): TaskOutcomeConfig { type TaskOutcomeBadgeSize (line 24) | type TaskOutcomeBadgeSize = 'sm' | 'md' | 'lg'; constant ICON_SIZES (line 26) | const ICON_SIZES: Record = { type TaskOutcomeBadgeProps (line 32) | interface TaskOutcomeBadgeProps { function TaskOutcomeBadge (line 42) | function TaskOutcomeBadge({ outcome, size = 'md', showLabel = true }: Ta... function getTaskOutcomeColorClass (line 58) | function getTaskOutcomeColorClass(outcome: TaskOutcome): string { FILE: apps/desktop/src/renderer/components/roadmap/hooks.ts function useRoadmapData (line 17) | function useRoadmapData(projectId: string) { function useFeatureActions (line 39) | function useFeatureActions() { function useRoadmapSave (line 77) | function useRoadmapSave(projectId: string) { function useFeatureDelete (line 96) | function useFeatureDelete(projectId: string) { function useRoadmapGeneration (line 125) | function useRoadmapGeneration(projectId: string) { FILE: apps/desktop/src/renderer/components/roadmap/types.ts type RoadmapProps (line 3) | interface RoadmapProps { type PhaseCardProps (line 8) | interface PhaseCardProps { type FeatureCardProps (line 18) | interface FeatureCardProps { type FeatureDetailPanelProps (line 27) | interface FeatureDetailPanelProps { type RoadmapHeaderProps (line 37) | interface RoadmapHeaderProps { type RoadmapEmptyStateProps (line 45) | interface RoadmapEmptyStateProps { type RoadmapTabsProps (line 49) | interface RoadmapTabsProps { FILE: apps/desktop/src/renderer/components/roadmap/utils.ts function getCompetitorInsightsForFeature (line 6) | function getCompetitorInsightsForFeature( function hasCompetitorInsight (line 28) | function hasCompetitorInsight(feature: RoadmapFeature): boolean { FILE: apps/desktop/src/renderer/components/settings/AccountPriorityList.tsx constant THRESHOLD_CRITICAL (line 50) | const THRESHOLD_CRITICAL = 95; constant THRESHOLD_WARNING (line 51) | const THRESHOLD_WARNING = 91; constant THRESHOLD_ELEVATED (line 52) | const THRESHOLD_ELEVATED = 71; constant PROVIDER_BADGE_COLORS (line 74) | const PROVIDER_BADGE_COLORS: Record = { type UnifiedAccount (line 109) | interface UnifiedAccount { type SortableAccountItemProps (line 133) | interface SortableAccountItemProps { function SortableAccountItem (line 139) | function SortableAccountItem({ account, index, onSetActive }: SortableAc... type AccountPriorityListProps (line 368) | interface AccountPriorityListProps { function AccountPriorityList (line 375) | function AccountPriorityList({ accounts, onReorder, onSetActive, isLoadi... FILE: apps/desktop/src/renderer/components/settings/AccountSettings.tsx type AccountSettingsProps (line 29) | interface AccountSettingsProps { function AccountSettings (line 35) | function AccountSettings({ settings, onSettingsChange, isOpen }: Account... FILE: apps/desktop/src/renderer/components/settings/AddAccountDialog.tsx constant AWS_REGIONS (line 20) | const AWS_REGIONS = [ type OAuthStatus (line 26) | type OAuthStatus = 'idle' | 'authenticating' | 'waiting' | 'success' | '... type AddAccountDialogProps (line 28) | interface AddAccountDialogProps { function AddAccountDialog (line 38) | function AddAccountDialog({ function FallbackTerminalWrapper (line 774) | function FallbackTerminalWrapper({ FILE: apps/desktop/src/renderer/components/settings/AdvancedSettings.tsx function ReleaseNotesRenderer (line 52) | function ReleaseNotesRenderer({ content }: { content: string }) { type AdvancedSettingsProps (line 66) | interface AdvancedSettingsProps { function AdvancedSettings (line 76) | function AdvancedSettings({ settings, onSettingsChange, section, version... FILE: apps/desktop/src/renderer/components/settings/AgentProfileSettings.tsx type AgentProfileSettingsProps (line 39) | interface AgentProfileSettingsProps { function AgentProfileSettings (line 43) | function AgentProfileSettings({ provider }: AgentProfileSettingsProps) { FILE: apps/desktop/src/renderer/components/settings/AppSettings.tsx function GitLabIcon (line 26) | function GitLabIcon({ className }: { className?: string }) { type AppSettingsDialogProps (line 61) | interface AppSettingsDialogProps { type AppSection (line 70) | type AppSection = 'appearance' | 'display' | 'language' | 'devtools' | '... type NavItemConfig (line 72) | interface NavItemConfig { function AppSettingsDialog (line 103) | function AppSettingsDialog({ open, onOpenChange, initialSection, initial... FILE: apps/desktop/src/renderer/components/settings/AuthTerminal.tsx constant DEBUG (line 12) | const DEBUG = typeof process !== 'undefined' && process.env?.DEBUG === '... type AuthTerminalProps (line 17) | interface AuthTerminalProps { function AuthTerminal (line 37) | function AuthTerminal({ FILE: apps/desktop/src/renderer/components/settings/CrossProviderTabContent.tsx function CrossProviderTabContent (line 16) | function CrossProviderTabContent() { FILE: apps/desktop/src/renderer/components/settings/DebugSettings.tsx type DebugInfo (line 11) | interface DebugInfo { function DebugSettings (line 21) | function DebugSettings() { FILE: apps/desktop/src/renderer/components/settings/DevToolsSettings.tsx type DevToolsSettingsProps (line 12) | interface DevToolsSettingsProps { type DetectedTool (line 17) | interface DetectedTool { type DetectedTools (line 24) | interface DetectedTools { constant IDE_NAMES (line 31) | const IDE_NAMES: Partial> = { constant CLI_NAMES (line 56) | const CLI_NAMES: Partial> = { constant TERMINAL_NAMES (line 66) | const TERMINAL_NAMES: Partial> = { function DevToolsSettings (line 91) | function DevToolsSettings({ settings, onSettingsChange }: DevToolsSettin... FILE: apps/desktop/src/renderer/components/settings/DisplaySettings.tsx type DisplaySettingsProps (line 12) | interface DisplaySettingsProps { constant SCALE_PRESETS (line 18) | const SCALE_PRESETS = [ function DisplaySettings (line 29) | function DisplaySettings({ settings, onSettingsChange }: DisplaySettings... FILE: apps/desktop/src/renderer/components/settings/FeatureModelSettings.tsx type FeatureModelSettingsProps (line 15) | interface FeatureModelSettingsProps { function FeatureModelSettings (line 29) | function FeatureModelSettings({ provider }: FeatureModelSettingsProps) { FILE: apps/desktop/src/renderer/components/settings/GeneralSettings.tsx type GeneralSettingsProps (line 14) | interface GeneralSettingsProps { type ToolDetectionDisplayProps (line 23) | interface ToolDetectionDisplayProps { function ToolDetectionDisplay (line 29) | function ToolDetectionDisplay({ info, isLoading, t }: ToolDetectionDispl... function GeneralSettings (line 82) | function GeneralSettings({ settings, onSettingsChange, section }: Genera... FILE: apps/desktop/src/renderer/components/settings/LanguageSettings.tsx type LanguageSettingsProps (line 10) | interface LanguageSettingsProps { function LanguageSettings (line 19) | function LanguageSettings({ settings, onSettingsChange }: LanguageSettin... FILE: apps/desktop/src/renderer/components/settings/MixedFeatureEditor.tsx type FeatureKey (line 12) | type FeatureKey = keyof FeatureModelConfig; constant FEATURE_KEYS (line 14) | const FEATURE_KEYS: readonly FeatureKey[] = [ constant DEFAULT_MIXED_FEATURE_CONFIG (line 26) | const DEFAULT_MIXED_FEATURE_CONFIG: MixedFeatureConfig = { function resolveProviderForModel (line 40) | function resolveProviderForModel(modelId: string): BuiltinProvider { function getProviderName (line 48) | function getProviderName(provider: BuiltinProvider): string { function ProviderBadge (line 55) | function ProviderBadge({ provider }: { provider: BuiltinProvider }) { function MixedFeatureEditor (line 70) | function MixedFeatureEditor() { FILE: apps/desktop/src/renderer/components/settings/MixedPhaseEditor.tsx constant DEFAULT_MIXED_PHASE_CONFIG (line 16) | const DEFAULT_MIXED_PHASE_CONFIG: MixedPhaseConfig = { function resolveProviderForModel (line 27) | function resolveProviderForModel(modelId: string): BuiltinProvider { function getProviderName (line 35) | function getProviderName(provider: BuiltinProvider): string { function ProviderBadge (line 42) | function ProviderBadge({ provider }: { provider: BuiltinProvider }) { function MixedPhaseEditor (line 57) | function MixedPhaseEditor() { FILE: apps/desktop/src/renderer/components/settings/ModelSearchableSelect.tsx type ModelSearchableSelectProps (line 27) | interface ModelSearchableSelectProps { function ModelSearchableSelect (line 58) | function ModelSearchableSelect({ FILE: apps/desktop/src/renderer/components/settings/MultiProviderModelSelect.tsx type MultiProviderModelSelectProps (line 11) | interface MultiProviderModelSelectProps { function formatContextWindow (line 18) | function formatContextWindow(size: number): string { function MultiProviderModelSelect (line 23) | function MultiProviderModelSelect({ value, onChange, className, filterPr... FILE: apps/desktop/src/renderer/components/settings/OllamaConnectionPanel.tsx type OllamaConnectionState (line 10) | type OllamaConnectionState = 'checking' | 'not-installed' | 'not-running... type OllamaConnectionPanelProps (line 12) | interface OllamaConnectionPanelProps { function OllamaConnectionPanel (line 17) | function OllamaConnectionPanel({ accounts, onAccountCreated }: OllamaCon... FILE: apps/desktop/src/renderer/components/settings/OllamaModelManager.tsx type InstalledModel (line 8) | interface InstalledModel { type RecommendedCodingModel (line 14) | interface RecommendedCodingModel { constant RECOMMENDED_CODING_MODELS (line 21) | const RECOMMENDED_CODING_MODELS: RecommendedCodingModel[] = [ function formatSize (line 31) | function formatSize(bytes: number): string { function OllamaModelManager (line 44) | function OllamaModelManager() { FILE: apps/desktop/src/renderer/components/settings/ProfileEditDialog.tsx type ProfileEditDialogProps (line 39) | interface ProfileEditDialogProps { function ProfileEditDialog (line 50) | function ProfileEditDialog({ open, onOpenChange, onSaved, profile }: Pro... FILE: apps/desktop/src/renderer/components/settings/ProfileList.test.tsx function TestWrapper (line 19) | function TestWrapper({ children }: { children: React.ReactNode }) { function renderWithWrapper (line 24) | function renderWithWrapper(ui: React.ReactElement) { function createSettingsStoreMock (line 66) | function createSettingsStoreMock(overrides: Partial = { constant PROVIDER_PLACEHOLDER_MAP (line 36) | const PROVIDER_PLACEHOLDER_MAP: Record = { constant PHASES (line 45) | const PHASES: Array<{ key: keyof PhaseModelConfig; labelKey: string; des... constant PHASE_MODEL_OPTIONS (line 55) | const PHASE_MODEL_OPTIONS = [ type ProviderSettingsProps (line 62) | interface ProviderSettingsProps { function ProviderSettings (line 71) | function ProviderSettings({ settings, onSettingsChange }: ProviderSettin... FILE: apps/desktop/src/renderer/components/settings/ProviderTabBar.tsx constant MAX_VISIBLE_TABS (line 19) | const MAX_VISIBLE_TABS = 3; type ProviderTabBarProps (line 21) | interface ProviderTabBarProps { function getProviderDisplayName (line 32) | function getProviderDisplayName(provider: BuiltinProvider): string { function ProviderTabBar (line 37) | function ProviderTabBar({ FILE: apps/desktop/src/renderer/components/settings/SettingsSection.tsx type SettingsSectionProps (line 3) | interface SettingsSectionProps { function SettingsSection (line 13) | function SettingsSection({ title, description, children }: SettingsSecti... FILE: apps/desktop/src/renderer/components/settings/ThemeSelector.tsx type ThemeSelectorProps (line 8) | interface ThemeSelectorProps { function ThemeSelector (line 20) | function ThemeSelector({ settings, onSettingsChange }: ThemeSelectorProp... FILE: apps/desktop/src/renderer/components/settings/ThemeSettings.tsx type ThemeSettingsProps (line 6) | interface ThemeSettingsProps { function ThemeSettings (line 15) | function ThemeSettings({ settings, onSettingsChange }: ThemeSettingsProp... FILE: apps/desktop/src/renderer/components/settings/ThinkingLevelSelect.tsx type ThinkingLevelSelectProps (line 19) | interface ThinkingLevelSelectProps { function ThinkingLevelSelect (line 34) | function ThinkingLevelSelect({ FILE: apps/desktop/src/renderer/components/settings/common/EmptyProjectState.tsx function EmptyProjectState (line 6) | function EmptyProjectState() { FILE: apps/desktop/src/renderer/components/settings/common/ErrorDisplay.tsx type ErrorDisplayProps (line 1) | interface ErrorDisplayProps { function ErrorDisplay (line 10) | function ErrorDisplay({ error, envError }: ErrorDisplayProps) { FILE: apps/desktop/src/renderer/components/settings/common/InitializationGuard.tsx type InitializationGuardProps (line 3) | interface InitializationGuardProps { function InitializationGuard (line 14) | function InitializationGuard({ FILE: apps/desktop/src/renderer/components/settings/hooks/useSettings.ts function useSettings (line 13) | function useSettings() { FILE: apps/desktop/src/renderer/components/settings/integrations/GitHubIntegration.tsx constant DEBUG (line 16) | const DEBUG = process.env.NODE_ENV === 'development' || process.env.DEBU... function debugLog (line 17) | function debugLog(message: string, data?: unknown) { type GitHubRepo (line 27) | interface GitHubRepo { type GitHubIntegrationProps (line 33) | interface GitHubIntegrationProps { function GitHubIntegration (line 50) | function GitHubIntegration({ type RepositoryDropdownProps (line 445) | interface RepositoryDropdownProps { function RepositoryDropdown (line 455) | function RepositoryDropdown({ type RepositoryInputProps (line 594) | interface RepositoryInputProps { function RepositoryInput (line 599) | function RepositoryInput({ value, onChange }: RepositoryInputProps) { type ConnectionStatusProps (line 615) | interface ConnectionStatusProps { function ConnectionStatus (line 620) | function ConnectionStatus({ isChecking, connectionStatus }: ConnectionSt... function IssuesAvailableInfo (line 650) | function IssuesAvailableInfo() { type AutoSyncToggleProps (line 666) | interface AutoSyncToggleProps { function AutoSyncToggle (line 671) | function AutoSyncToggle({ enabled, onToggle }: AutoSyncToggleProps) { FILE: apps/desktop/src/renderer/components/settings/integrations/GitLabIntegration.tsx constant DEBUG (line 13) | const DEBUG = process.env.NODE_ENV === 'development' || process.env.DEBU... function debugLog (line 14) | function debugLog(message: string, data?: unknown) { type GitLabProject (line 24) | interface GitLabProject { type GitLabIntegrationProps (line 30) | interface GitLabIntegrationProps { function GitLabIntegration (line 48) | function GitLabIntegration({ type InstanceUrlInputProps (line 563) | interface InstanceUrlInputProps { function InstanceUrlInput (line 568) | function InstanceUrlInput({ value, onChange }: InstanceUrlInputProps) { type ProjectDropdownProps (line 589) | interface ProjectDropdownProps { function ProjectDropdown (line 599) | function ProjectDropdown({ type ProjectInputProps (line 737) | interface ProjectInputProps { function ProjectInput (line 742) | function ProjectInput({ value, onChange }: ProjectInputProps) { type ConnectionStatusProps (line 760) | interface ConnectionStatusProps { function ConnectionStatus (line 765) | function ConnectionStatus({ isChecking, connectionStatus }: ConnectionSt... function IssuesAvailableInfo (line 797) | function IssuesAvailableInfo() { type AutoSyncToggleProps (line 817) | interface AutoSyncToggleProps { function AutoSyncToggle (line 822) | function AutoSyncToggle({ enabled, onToggle }: AutoSyncToggleProps) { type BranchSelectorProps (line 841) | interface BranchSelectorProps { function BranchSelector (line 850) | function BranchSelector({ FILE: apps/desktop/src/renderer/components/settings/integrations/LinearIntegration.tsx type LinearIntegrationProps (line 9) | interface LinearIntegrationProps { function LinearIntegration (line 23) | function LinearIntegration({ type ConnectionStatusProps (line 116) | interface ConnectionStatusProps { function ConnectionStatus (line 121) | function ConnectionStatus({ isChecking, connectionStatus }: ConnectionSt... type ImportTasksPromptProps (line 151) | interface ImportTasksPromptProps { function ImportTasksPrompt (line 155) | function ImportTasksPrompt({ onOpenLinearImport }: ImportTasksPromptProp... type RealtimeSyncToggleProps (line 180) | interface RealtimeSyncToggleProps { function RealtimeSyncToggle (line 185) | function RealtimeSyncToggle({ enabled, onToggle }: RealtimeSyncTogglePro... function RealtimeSyncWarning (line 202) | function RealtimeSyncWarning() { type TeamProjectIdsProps (line 213) | interface TeamProjectIdsProps { function TeamProjectIds (line 220) | function TeamProjectIds({ teamId, projectId, onTeamIdChange, onProjectId... FILE: apps/desktop/src/renderer/components/settings/sections/SectionRouter.tsx type SectionRouterProps (line 12) | interface SectionRouterProps { function SectionRouter (line 46) | function SectionRouter({ FILE: apps/desktop/src/renderer/components/settings/terminal-font-settings/CursorConfigPanel.tsx type CursorConfigPanelProps (line 9) | interface CursorConfigPanelProps { function CursorConfigPanel (line 26) | function CursorConfigPanel({ settings, onSettingChange }: CursorConfigPa... FILE: apps/desktop/src/renderer/components/settings/terminal-font-settings/FontConfigPanel.tsx type FontConfigPanelProps (line 25) | interface FontConfigPanelProps { function FontConfigPanel (line 44) | function FontConfigPanel({ settings, onSettingChange }: FontConfigPanelP... FILE: apps/desktop/src/renderer/components/settings/terminal-font-settings/LivePreviewTerminal.tsx type LivePreviewTerminalProps (line 9) | interface LivePreviewTerminalProps { function LivePreviewTerminal (line 32) | function LivePreviewTerminal({ settings }: LivePreviewTerminalProps) { FILE: apps/desktop/src/renderer/components/settings/terminal-font-settings/PerformanceConfigPanel.tsx type PerformanceConfigPanelProps (line 8) | interface PerformanceConfigPanelProps { function PerformanceConfigPanel (line 24) | function PerformanceConfigPanel({ settings, onSettingChange }: Performan... FILE: apps/desktop/src/renderer/components/settings/terminal-font-settings/PresetsPanel.tsx type PresetsPanelProps (line 21) | interface PresetsPanelProps { constant CUSTOM_PRESETS_STORAGE_KEY (line 28) | const CUSTOM_PRESETS_STORAGE_KEY = 'terminal-font-custom-presets'; constant BUILTIN_PRESETS (line 31) | const BUILTIN_PRESETS = [ type CustomPreset (line 58) | interface CustomPreset { function isValidCustomPreset (line 70) | function isValidCustomPreset(value: unknown): value is CustomPreset { function PresetsPanel (line 114) | function PresetsPanel({ currentSettings, onPresetApply, onReset }: Prese... FILE: apps/desktop/src/renderer/components/settings/terminal-font-settings/TerminalFontSettings.tsx function TerminalFontSettings (line 29) | function TerminalFontSettings() { FILE: apps/desktop/src/renderer/components/settings/terminal-font-settings/__tests__/FontConfigPanel.test.tsx function renderWithI18n (line 28) | function renderWithI18n(ui: React.ReactElement) { FILE: apps/desktop/src/renderer/components/settings/terminal-font-settings/__tests__/PresetsPanel.test.tsx function renderWithI18n (line 57) | function renderWithI18n(ui: React.ReactElement) { FILE: apps/desktop/src/renderer/components/settings/terminal-font-settings/__tests__/TerminalFontSettings.test.tsx class ResizeObserverMock (line 20) | class ResizeObserverMock { function renderWithI18n (line 58) | function renderWithI18n(ui: React.ReactElement) { FILE: apps/desktop/src/renderer/components/settings/utils/hookProxyFactory.ts function createHookProxy (line 11) | function createHookProxy( FILE: apps/desktop/src/renderer/components/shared/MemoryConfigPanel.tsx type MemoryPanelConfig (line 18) | interface MemoryPanelConfig { type MemoryConfigPanelProps (line 40) | interface MemoryConfigPanelProps { function MemoryConfigPanel (line 58) | function MemoryConfigPanel({ config, onChange, disabled = false }: Memor... FILE: apps/desktop/src/renderer/components/task-detail/TaskActions.tsx type TaskActionsProps (line 16) | interface TaskActionsProps { function TaskActions (line 33) | function TaskActions({ FILE: apps/desktop/src/renderer/components/task-detail/TaskDetailModal.tsx type TaskDetailModalProps (line 48) | interface TaskDetailModalProps { function TaskDetailModal (line 56) | function TaskDetailModal({ open, task, onOpenChange, onSwitchToTerminals... function TaskDetailModalContent (line 80) | function TaskDetailModalContent({ open, task, onOpenChange, onSwitchToTe... FILE: apps/desktop/src/renderer/components/task-detail/TaskFiles.tsx type TaskFilesProps (line 21) | interface TaskFilesProps { constant ALLOWED_EXTENSIONS (line 26) | const ALLOWED_EXTENSIONS = ['.md', '.json']; function getFileIcon (line 29) | function getFileIcon(filename: string) { function TaskFiles (line 36) | function TaskFiles({ task }: TaskFilesProps) { FILE: apps/desktop/src/renderer/components/task-detail/TaskHeader.tsx type TaskHeaderProps (line 11) | interface TaskHeaderProps { function TaskHeader (line 21) | function TaskHeader({ FILE: apps/desktop/src/renderer/components/task-detail/TaskLogs.tsx type TaskLogsProps (line 30) | interface TaskLogsProps { constant PHASE_LABELS (line 42) | const PHASE_LABELS: Record = { constant PHASE_ICONS (line 48) | const PHASE_ICONS: Record = { constant PHASE_COLORS (line 54) | const PHASE_COLORS: Record = { constant LOG_PHASE_TO_CONFIG_PHASE (line 62) | const LOG_PHASE_TO_CONFIG_PHASE: Record = { function resolveModelLabel (line 77) | function resolveModelLabel(model: string, provider?: string): string { function getPhaseConfig (line 86) | function getPhaseConfig( function TaskLogs (line 117) | function TaskLogs({ type PhaseLogSectionProps (line 175) | interface PhaseLogSectionProps { function PhaseLogSection (line 185) | function PhaseLogSection({ phase, phaseLog, isExpanded, onToggle, isTask... type LogEntryProps (line 308) | interface LogEntryProps { function LogEntry (line 312) | function LogEntry({ entry }: LogEntryProps) { FILE: apps/desktop/src/renderer/components/task-detail/TaskMetadata.tsx type TaskMetadataProps (line 54) | interface TaskMetadataProps { constant COLLAPSED_HEIGHT (line 59) | const COLLAPSED_HEIGHT = 200; function TaskMetadata (line 61) | function TaskMetadata({ task }: TaskMetadataProps) { FILE: apps/desktop/src/renderer/components/task-detail/TaskProgress.tsx type TaskProgressProps (line 7) | interface TaskProgressProps { function TaskProgress (line 15) | function TaskProgress({ task, isRunning, hasActiveExecution, executionPh... FILE: apps/desktop/src/renderer/components/task-detail/TaskReview.tsx type TaskReviewProps (line 15) | interface TaskReviewProps { function TaskReview (line 67) | function TaskReview({ FILE: apps/desktop/src/renderer/components/task-detail/TaskSubtasks.tsx type TaskSubtasksProps (line 9) | interface TaskSubtasksProps { function getSubtaskStatusIcon (line 13) | function getSubtaskStatusIcon(status: string) { function TaskSubtasks (line 26) | function TaskSubtasks({ task }: TaskSubtasksProps) { FILE: apps/desktop/src/renderer/components/task-detail/TaskWarnings.tsx type TaskWarningsProps (line 4) | interface TaskWarningsProps { function TaskWarnings (line 13) | function TaskWarnings({ FILE: apps/desktop/src/renderer/components/task-detail/hooks/useTaskDetail.ts function validateTaskSubtasks (line 11) | function validateTaskSubtasks(task: Task): boolean { type UseTaskDetailOptions (line 48) | interface UseTaskDetailOptions { function useTaskDetail (line 52) | function useTaskDetail({ task }: UseTaskDetailOptions) { FILE: apps/desktop/src/renderer/components/task-detail/task-review/ConflictDetailsDialog.tsx type ConflictDetailsDialogProps (line 17) | interface ConflictDetailsDialogProps { function ConflictDetailsDialog (line 28) | function ConflictDetailsDialog({ FILE: apps/desktop/src/renderer/components/task-detail/task-review/CreatePRDialog.tsx type CreatePRDialogProps (line 18) | interface CreatePRDialogProps { function CreatePRDialog (line 30) | function CreatePRDialog({ FILE: apps/desktop/src/renderer/components/task-detail/task-review/DiffViewDialog.tsx type DiffViewDialogProps (line 15) | interface DiffViewDialogProps { function DiffViewDialog (line 24) | function DiffViewDialog({ FILE: apps/desktop/src/renderer/components/task-detail/task-review/DiscardDialog.tsx type DiscardDialogProps (line 14) | interface DiscardDialogProps { function DiscardDialog (line 26) | function DiscardDialog({ FILE: apps/desktop/src/renderer/components/task-detail/task-review/MergePreviewSummary.tsx type MergePreviewSummaryProps (line 7) | interface MergePreviewSummaryProps { function MergePreviewSummary (line 20) | function MergePreviewSummary({ FILE: apps/desktop/src/renderer/components/task-detail/task-review/MergeProgressOverlay.tsx type MergeProgressOverlayProps (line 8) | interface MergeProgressOverlayProps { constant STALL_THRESHOLD_MS (line 14) | const STALL_THRESHOLD_MS = 30000; constant STAGE_TO_I18N_KEY (line 16) | const STAGE_TO_I18N_KEY: Record = { constant LOG_TYPE_COLORS (line 26) | const LOG_TYPE_COLORS: Record = { function MergeProgressOverlay (line 39) | function MergeProgressOverlay({ mergeProgress, logEntries }: MergeProgre... FILE: apps/desktop/src/renderer/components/task-detail/task-review/QAFeedbackSection.tsx type QAFeedbackSectionProps (line 20) | interface QAFeedbackSectionProps { function QAFeedbackSection (line 35) | function QAFeedbackSection({ FILE: apps/desktop/src/renderer/components/task-detail/task-review/StagedSuccessMessage.tsx type StagedSuccessMessageProps (line 9) | interface StagedSuccessMessageProps { function StagedSuccessMessage (line 23) | function StagedSuccessMessage({ FILE: apps/desktop/src/renderer/components/task-detail/task-review/TerminalDropdown.tsx type TerminalDropdownProps (line 11) | interface TerminalDropdownProps { function TerminalDropdown (line 21) | function TerminalDropdown({ FILE: apps/desktop/src/renderer/components/task-detail/task-review/WorkspaceMessages.tsx type LoadingMessageProps (line 8) | interface LoadingMessageProps { function LoadingMessage (line 15) | function LoadingMessage({ message = 'Loading workspace info...' }: Loadi... type NoWorkspaceMessageProps (line 26) | interface NoWorkspaceMessageProps { function NoWorkspaceMessage (line 34) | function NoWorkspaceMessage({ task, onClose }: NoWorkspaceMessageProps) { type StagedInProjectMessageProps (line 146) | interface StagedInProjectMessageProps { function StagedInProjectMessage (line 157) | function StagedInProjectMessage({ task, projectPath, hasWorktree = false... FILE: apps/desktop/src/renderer/components/task-detail/task-review/WorkspaceStatus.tsx constant MAX_LOG_ENTRIES (line 31) | const MAX_LOG_ENTRIES = 500; type WorkspaceStatusProps (line 33) | interface WorkspaceStatusProps { constant IDE_LABELS (line 59) | const IDE_LABELS: Partial> = { constant TERMINAL_LABELS (line 76) | const TERMINAL_LABELS: Partial> = { function WorkspaceStatus (line 92) | function WorkspaceStatus({ FILE: apps/desktop/src/renderer/components/task-detail/task-review/utils.tsx function getSeverityIcon (line 6) | function getSeverityIcon(severity: string) { function getSeverityVariant (line 24) | function getSeverityVariant(severity: string): string { FILE: apps/desktop/src/renderer/components/task-form/ClassificationFields.tsx constant CATEGORY_OPTIONS (line 19) | const CATEGORY_OPTIONS: TaskCategory[] = ['feature', 'bug_fix', 'refacto... constant PRIORITY_OPTIONS (line 20) | const PRIORITY_OPTIONS: TaskPriority[] = ['low', 'medium', 'high', 'urge... constant COMPLEXITY_OPTIONS (line 21) | const COMPLEXITY_OPTIONS: TaskComplexity[] = ['trivial', 'small', 'mediu... constant IMPACT_OPTIONS (line 22) | const IMPACT_OPTIONS: TaskImpact[] = ['low', 'medium', 'high', 'critical']; type ClassificationFieldsProps (line 24) | interface ClassificationFieldsProps { function ClassificationFields (line 47) | function ClassificationFields({ FILE: apps/desktop/src/renderer/components/task-form/ImagePreviewModal.tsx type ImagePreviewModalProps (line 8) | interface ImagePreviewModalProps { function ImagePreviewModal (line 14) | function ImagePreviewModal({ open, onOpenChange, image }: ImagePreviewMo... FILE: apps/desktop/src/renderer/components/task-form/TaskFormFields.tsx type TaskFormFieldsProps (line 40) | interface TaskFormFieldsProps { function TaskFormFields (line 110) | function TaskFormFields({ FILE: apps/desktop/src/renderer/components/task-form/TaskModalLayout.tsx type TaskModalLayoutProps (line 19) | interface TaskModalLayoutProps { function TaskModalLayout (line 40) | function TaskModalLayout({ FILE: apps/desktop/src/renderer/components/task-form/__tests__/useImageUpload.fileref.test.ts type OnImagesChangeFn (line 13) | type OnImagesChangeFn = (images: ImageAttachment[]) => void; type OnFileReferenceDropFn (line 14) | type OnFileReferenceDropFn = (reference: string, data: FileReferenceData... function createMockFileRefDragEvent (line 17) | function createMockFileRefDragEvent( function createMockImageDragEvent (line 48) | function createMockImageDragEvent(files: File[]): React.DragEvent = { function useImageUpload (line 84) | function useImageUpload({ FILE: apps/desktop/src/renderer/components/terminal/CreateWorktreeDialog.tsx constant PROJECT_DEFAULT_BRANCH (line 30) | const PROJECT_DEFAULT_BRANCH = '__project_default__'; function sanitizeWorktreeName (line 42) | function sanitizeWorktreeName(value: string, maxLength?: number, trimTra... type CreateWorktreeDialogProps (line 64) | interface CreateWorktreeDialogProps { function CreateWorktreeDialog (line 79) | function CreateWorktreeDialog({ FILE: apps/desktop/src/renderer/components/terminal/TaskSelector.tsx type TaskSelectorProps (line 13) | interface TaskSelectorProps { function TaskSelector (line 22) | function TaskSelector({ FILE: apps/desktop/src/renderer/components/terminal/TerminalHeader.tsx type TerminalHeaderProps (line 14) | interface TerminalHeaderProps { function TerminalHeader (line 48) | function TerminalHeader({ FILE: apps/desktop/src/renderer/components/terminal/TerminalTitle.tsx type TerminalTitleProps (line 12) | interface TerminalTitleProps { function TerminalTitle (line 19) | function TerminalTitle({ title, associatedTask, onTitleChange, terminalC... FILE: apps/desktop/src/renderer/components/terminal/WorktreeSelector.tsx type NavigableItem (line 23) | type NavigableItem = type WorktreeSelectorProps (line 28) | interface WorktreeSelectorProps { function getItemName (line 39) | function getItemName(item: NavigableItem): string { function getItemBranch (line 50) | function getItemBranch(item: NavigableItem): string { constant ITEM_ICONS (line 61) | const ITEM_ICONS = { function getItemKey (line 67) | function getItemKey(item: NavigableItem): string { function WorktreeSelector (line 78) | function WorktreeSelector({ FILE: apps/desktop/src/renderer/components/terminal/__tests__/useXterm.test.ts function setupMockXterm (line 109) | async function setupMockXterm(overrides: { function renderUseXterm (line 908) | async function renderUseXterm(terminalId = 'test-webgl-terminal') { FILE: apps/desktop/src/renderer/components/terminal/types.ts type TerminalProps (line 6) | interface TerminalProps { function getTitleMaxWidthClass (line 30) | function getTitleMaxWidthClass(terminalCount: number): string { constant STATUS_COLORS (line 38) | const STATUS_COLORS: Record = { constant PHASE_CONFIG (line 45) | const PHASE_CONFIG: Record {} FILE: apps/desktop/src/renderer/components/ui/label.tsx type LabelProps (line 9) | interface LabelProps FILE: apps/desktop/src/renderer/components/ui/progress.tsx type ProgressProps (line 5) | interface ProgressProps extends React.ComponentPropsWithoutRef; type ToastActionElement (line 118) | type ToastActionElement = React.ReactElement; FILE: apps/desktop/src/renderer/components/ui/toaster.tsx function Toaster (line 17) | function Toaster() { FILE: apps/desktop/src/renderer/components/workspace/AddWorkspaceModal.tsx type ProjectRole (line 24) | type ProjectRole = 'backend' | 'frontend' | 'mobile' | 'shared' | 'api' ... type WorkspaceProject (line 26) | interface WorkspaceProject { type Workspace (line 31) | interface Workspace { type IPCResult (line 38) | type IPCResult = { success: boolean; data?: T; error?: string }; type WorkspaceApi (line 40) | type WorkspaceApi = { type AddWorkspaceModalProps (line 54) | interface AddWorkspaceModalProps { type SelectedProject (line 61) | interface SelectedProject { constant ROLE_OPTIONS (line 66) | const ROLE_OPTIONS: { value: ProjectRole; label: string; description: st... function AddWorkspaceModal (line 76) | function AddWorkspaceModal({ FILE: apps/desktop/src/renderer/contexts/ViewStateContext.tsx type ViewState (line 4) | interface ViewState { type ViewStateContextValue (line 8) | interface ViewStateContextValue extends ViewState { type ViewStateProviderProps (line 15) | interface ViewStateProviderProps { function ViewStateProvider (line 26) | function ViewStateProvider({ children }: ViewStateProviderProps) { function useViewState (line 71) | function useViewState(): ViewStateContextValue { function useViewStateOptional (line 85) | function useViewStateOptional(): ViewStateContextValue | null { FILE: apps/desktop/src/renderer/hooks/__tests__/useVirtualizedTree.test.ts function createTestFileNode (line 16) | function createTestFileNode(overrides: Partial = {}): FileNode { function createTestDirNode (line 27) | function createTestDirNode(overrides: Partial = {}): FileNode { FILE: apps/desktop/src/renderer/hooks/use-profile-swap-notifications.ts type NotificationQueue (line 19) | interface NotificationQueue { constant BATCH_WINDOW_MS (line 25) | const BATCH_WINDOW_MS = 2000; constant MAX_NOTIFICATIONS_PER_BATCH (line 26) | const MAX_NOTIFICATIONS_PER_BATCH = 5; constant TOAST_DURATION_SWAP_MS (line 31) | const TOAST_DURATION_SWAP_MS = 5000; constant TOAST_DURATION_BLOCKED_MS (line 32) | const TOAST_DURATION_BLOCKED_MS = 8000; function useProfileSwapNotifications (line 43) | function useProfileSwapNotifications() { function useSessionCaptureListener (line 176) | function useSessionCaptureListener( FILE: apps/desktop/src/renderer/hooks/use-toast.ts constant TOAST_LIMIT (line 10) | const TOAST_LIMIT = 1; constant TOAST_REMOVE_DELAY (line 11) | const TOAST_REMOVE_DELAY = 1000000; type ToasterToast (line 13) | type ToasterToast = ToastProps & { function genId (line 29) | function genId() { type ActionType (line 34) | type ActionType = typeof actionTypes; type Action (line 36) | type Action = type State (line 54) | interface State { function dispatch (line 133) | function dispatch(action: Action) { type Toast (line 140) | type Toast = Omit; function toast (line 142) | function toast({ ...props }: Toast) { function useToast (line 172) | function useToast() { FILE: apps/desktop/src/renderer/hooks/useActiveProvider.ts type ActiveProviderInfo (line 11) | interface ActiveProviderInfo { function buildOrderedAccounts (line 30) | function buildOrderedAccounts(accounts: ProviderAccount[], order: string... function useActiveProvider (line 44) | function useActiveProvider(): ActiveProviderInfo { FILE: apps/desktop/src/renderer/hooks/useGlobalTerminalListeners.ts function useGlobalTerminalListeners (line 37) | function useGlobalTerminalListeners(): void { FILE: apps/desktop/src/renderer/hooks/useIpc.ts constant MAX_BATCH_QUEUE_LOGS (line 11) | const MAX_BATCH_QUEUE_LOGS = 100; type BatchedUpdate (line 18) | interface BatchedUpdate { type StoreActions (line 30) | interface StoreActions { function flushBatch (line 53) | function flushBatch(): void { function queueUpdate (line 98) | function queueUpdate(taskId: string, update: BatchedUpdate): void { function isTaskForCurrentProject (line 155) | function isTaskForCurrentProject(eventProjectId?: string): boolean { function useIpcListeners (line 169) | function useIpcListeners(): void { function useAppSettings (line 408) | function useAppSettings() { function useAppVersion (line 428) | function useAppVersion() { FILE: apps/desktop/src/renderer/hooks/useResolvedAgentSettings.ts type ResolvedAgentSettings (line 41) | interface ResolvedAgentSettings { type AgentSettingsSource (line 56) | type AgentSettingsSource = type AgentModelConfig (line 64) | interface AgentModelConfig { function useResolvedAgentSettings (line 81) | function useResolvedAgentSettings( function resolveAgentSettings (line 180) | function resolveAgentSettings( FILE: apps/desktop/src/renderer/hooks/useTerminalProfileChange.ts function useTerminalProfileChange (line 15) | function useTerminalProfileChange(): void { FILE: apps/desktop/src/renderer/hooks/useVirtualizedTree.ts type FlattenedNode (line 10) | interface FlattenedNode { function flattenTree (line 34) | function flattenTree( function useVirtualizedTree (line 83) | function useVirtualizedTree(rootPath: string) { FILE: apps/desktop/src/renderer/lib/branch-utils.tsx constant BADGE_BASE_CLASSES (line 11) | const BADGE_BASE_CLASSES = 'text-xs px-1.5 py-0.5 rounded'; constant LOCAL_BADGE_CLASSES (line 12) | const LOCAL_BADGE_CLASSES = 'bg-emerald-500/10 text-emerald-600 dark:tex... constant REMOTE_BADGE_CLASSES (line 13) | const REMOTE_BADGE_CLASSES = 'bg-blue-500/10 text-blue-600 dark:text-blu... type BranchOptionsConfig (line 18) | interface BranchOptionsConfig { function buildBranchOptions (line 43) | function buildBranchOptions( FILE: apps/desktop/src/renderer/lib/browser-mock.ts function initBrowserMock (line 460) | function initBrowserMock(): void { FILE: apps/desktop/src/renderer/lib/buffer-persistence.ts constant SAVE_INTERVAL_MS (line 13) | const SAVE_INTERVAL_MS = 30_000; constant SAVE_THRESHOLD_BYTES (line 16) | const SAVE_THRESHOLD_BYTES = 50_000; type ManagedTerminal (line 18) | interface ManagedTerminal { class BufferPersistence (line 26) | class BufferPersistence { method register (line 33) | register(terminalId: string, xterm: Terminal): SerializeAddon { method unregister (line 69) | unregister(terminalId: string): void { method saveBuffer (line 86) | async saveBuffer(terminalId: string): Promise { method saveNow (line 135) | async saveNow(terminalId: string): Promise { method saveAll (line 153) | async saveAll(): Promise { method getBufferSize (line 169) | getBufferSize(terminalId: string): number | null { method isRegistered (line 184) | isRegistered(terminalId: string): boolean { method getRegisteredTerminals (line 191) | getRegisteredTerminals(): string[] { method cleanup (line 198) | cleanup(): void { FILE: apps/desktop/src/renderer/lib/debounce.ts function debounce (line 15) | function debounce void>( FILE: apps/desktop/src/renderer/lib/flow-controller.ts class FlowController (line 15) | class FlowController { method write (line 40) | async write(terminal: Terminal, data: string): Promise { method isBlocked (line 89) | isBlocked(): boolean { method getPendingCallbacks (line 96) | getPendingCallbacks(): number { method getStats (line 103) | getStats(): { method resetStats (line 121) | resetStats(): void { method forceUnblock (line 133) | forceUnblock(): void { FILE: apps/desktop/src/renderer/lib/font-discovery.ts constant COMMON_MONOSPACE_FONTS (line 11) | const COMMON_MONOSPACE_FONTS = { function isFontAvailable (line 57) | async function isFontAvailable( function checkMultipleFonts (line 88) | async function checkMultipleFonts( function getAvailableFonts (line 110) | async function getAvailableFonts( function getAvailableMonospaceFonts (line 125) | async function getAvailableMonospaceFonts( function waitForFontsReady (line 158) | function waitForFontsReady(): Promise { function waitForFontLoad (line 176) | async function waitForFontLoad( function buildFontFamilyString (line 206) | function buildFontFamilyString(...fontFamilies: string[]): string { function suggestOptimalFontChain (line 230) | async function suggestOptimalFontChain( FILE: apps/desktop/src/renderer/lib/os-detection.ts type NavigatorUAData (line 9) | interface NavigatorUAData { type Navigator (line 13) | interface Navigator { type Platform (line 18) | type Platform = 'windows' | 'macos' | 'linux' | 'unknown'; function getPlatform (line 27) | function getPlatform(): string { function isWindows (line 42) | function isWindows(): boolean { function isMacOS (line 52) | function isMacOS(): boolean { function isLinux (line 62) | function isLinux(): boolean { function getOS (line 72) | function getOS(): Platform { FILE: apps/desktop/src/renderer/lib/profile-utils.ts function maskApiKey (line 11) | function maskApiKey(key: string): string { function isValidUrl (line 21) | function isValidUrl(url: string): boolean { function isValidApiKey (line 38) | function isValidApiKey(key: string): boolean { FILE: apps/desktop/src/renderer/lib/scroll-controller.ts class ScrollController (line 13) | class ScrollController { method attach (line 23) | attach(xterm: Terminal): void { method detach (line 72) | detach(): void { method forceScrollToBottom (line 88) | forceScrollToBottom(): void { method isScrolledUp (line 105) | isScrolledUp(): boolean { method reset (line 112) | reset(): void { method getScrollInfo (line 120) | getScrollInfo(): { FILE: apps/desktop/src/renderer/lib/sentry.ts function markSettingsLoaded (line 42) | function markSettingsLoaded(): void { function areSettingsLoaded (line 50) | function areSettingsLoaded(): boolean { function initSentryRenderer (line 60) | async function initSentryRenderer(): Promise { function isSentryInitialized (line 127) | function isSentryInitialized(): boolean { function notifySentryStateChanged (line 135) | function notifySentryStateChanged(enabled: boolean): void { function captureException (line 148) | function captureException(error: Error, context?: Record { method getAllIds (line 131) | getAllIds(): string[] { method getTotalSize (line 138) | getTotalSize(): number { method getStats (line 149) | getStats(): { FILE: apps/desktop/src/renderer/lib/terminal-font-constants.ts constant FONT_SIZE_MIN (line 7) | const FONT_SIZE_MIN = 10; constant FONT_SIZE_MAX (line 8) | const FONT_SIZE_MAX = 24; constant FONT_SIZE_STEP (line 9) | const FONT_SIZE_STEP = 1; constant FONT_WEIGHT_MIN (line 12) | const FONT_WEIGHT_MIN = 100; constant FONT_WEIGHT_MAX (line 13) | const FONT_WEIGHT_MAX = 900; constant FONT_WEIGHT_STEP (line 14) | const FONT_WEIGHT_STEP = 100; constant LINE_HEIGHT_MIN (line 17) | const LINE_HEIGHT_MIN = 1.0; constant LINE_HEIGHT_MAX (line 18) | const LINE_HEIGHT_MAX = 2.0; constant LINE_HEIGHT_STEP (line 19) | const LINE_HEIGHT_STEP = 0.1; constant LETTER_SPACING_MIN (line 22) | const LETTER_SPACING_MIN = -2; constant LETTER_SPACING_MAX (line 23) | const LETTER_SPACING_MAX = 5; constant LETTER_SPACING_STEP (line 24) | const LETTER_SPACING_STEP = 0.5; constant SCROLLBACK_MIN (line 27) | const SCROLLBACK_MIN = 1000; constant SCROLLBACK_MAX (line 28) | const SCROLLBACK_MAX = 100000; constant SCROLLBACK_STEP (line 29) | const SCROLLBACK_STEP = 1000; constant MAX_FONT_FAMILY_LENGTH (line 32) | const MAX_FONT_FAMILY_LENGTH = 10; constant MAX_IMPORT_FILE_SIZE (line 35) | const MAX_IMPORT_FILE_SIZE = 10 * 1024; constant VALID_CURSOR_STYLES (line 38) | const VALID_CURSOR_STYLES = ['block', 'underline', 'bar'] as const; type CursorStyle (line 39) | type CursorStyle = typeof VALID_CURSOR_STYLES[number]; constant HEX_COLOR_REGEX (line 42) | const HEX_COLOR_REGEX = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8}... constant SLIDER_INPUT_CLASSES (line 48) | const SLIDER_INPUT_CLASSES = [ function isValidFontSize (line 74) | function isValidFontSize(value: number): boolean { function isValidFontWeight (line 82) | function isValidFontWeight(value: number): boolean { function isValidLineHeight (line 93) | function isValidLineHeight(value: number): boolean { function isValidLetterSpacing (line 100) | function isValidLetterSpacing(value: number): boolean { function isValidScrollback (line 107) | function isValidScrollback(value: number): boolean { function isValidCursorStyle (line 114) | function isValidCursorStyle(value: string): value is CursorStyle { function isValidHexColor (line 121) | function isValidHexColor(value: string): boolean { function isValidFontFamily (line 128) | function isValidFontFamily(value: unknown): value is string[] { FILE: apps/desktop/src/renderer/lib/terminal-font-settings-verification.ts function verifyTerminalSubscription (line 50) | async function verifyTerminalSubscription(): Promise { function verifyMultipleTerminalsUpdate (line 87) | function verifyMultipleTerminalsUpdate(terminalCount: number): void { FILE: apps/desktop/src/renderer/lib/terminal-theme.ts constant DEFAULT_TERMINAL_THEME (line 11) | const DEFAULT_TERMINAL_THEME = { type TerminalTheme (line 38) | type TerminalTheme = typeof DEFAULT_TERMINAL_THEME & { FILE: apps/desktop/src/renderer/lib/utils.ts function cn (line 7) | function cn(...inputs: ClassValue[]) { function calculateProgress (line 16) | function calculateProgress(subtasks: { status: string }[]): number { function formatRelativeTime (line 27) | function formatRelativeTime(date: Date): string { function sanitizeMarkdownForDisplay (line 48) | function sanitizeMarkdownForDisplay(text: string, maxLength: number = 20... FILE: apps/desktop/src/renderer/lib/webgl-context-manager.ts class WebGLContextManager (line 14) | class WebGLContextManager { method constructor (line 22) | private constructor() { method getInstance (line 41) | static getInstance(): WebGLContextManager { method register (line 51) | register(terminalId: string, xterm: Terminal): void { method unregister (line 59) | unregister(terminalId: string): void { method acquire (line 70) | acquire(terminalId: string): boolean { method release (line 128) | release(terminalId: string): void { method hasContext (line 152) | hasContext(terminalId: string): boolean { method getStats (line 159) | getStats(): { method releaseAll (line 178) | releaseAll(): void { type WebGLContextManagerType (line 188) | type WebGLContextManagerType = WebGLContextManager; FILE: apps/desktop/src/renderer/lib/webgl-utils.ts function supportsWebGL2 (line 11) | function supportsWebGL2(): boolean { function supportsWebGL (line 24) | function supportsWebGL(): boolean { function isSafari (line 38) | function isSafari(): boolean { function getMaxWebGLContexts (line 57) | function getMaxWebGLContexts(): number { function canUseWebGL (line 91) | function canUseWebGL(options: { function getWebGLInfo (line 111) | function getWebGLInfo(): { function testWebGLContext (line 147) | function testWebGLContext(): { FILE: apps/desktop/src/renderer/stores/auth-failure-store.ts type AuthFailureState (line 4) | interface AuthFailureState { FILE: apps/desktop/src/renderer/stores/changelog-store.ts type ChangelogState (line 22) | interface ChangelogState { function loadChangelogData (line 279) | async function loadChangelogData(projectId: string): Promise { function loadTaskSpecs (line 305) | async function loadTaskSpecs(projectId: string, taskIds: string[]): Prom... function loadGitData (line 318) | async function loadGitData(projectId: string): Promise { function loadCommitsPreview (line 376) | async function loadCommitsPreview(projectId: string): Promise { function handleGenerationError (line 428) | function handleGenerationError(store: ReturnType { function saveChangelog (line 536) | async function saveChangelog( function copyChangelogToClipboard (line 566) | function copyChangelogToClipboard(): boolean { function getSelectedTasks (line 584) | function getSelectedTasks(): ChangelogTask[] { function getTasksWithSpecs (line 589) | function getTasksWithSpecs(): ChangelogTask[] { function canGenerate (line 594) | function canGenerate(): boolean { function canSave (line 616) | function canSave(): boolean { FILE: apps/desktop/src/renderer/stores/claude-profile-store.ts type ClaudeProfileState (line 4) | interface ClaudeProfileState { function loadClaudeProfiles (line 69) | async function loadClaudeProfiles(): Promise { function switchTerminalToProfile (line 88) | async function switchTerminalToProfile( FILE: apps/desktop/src/renderer/stores/context-store.ts type ContextState (line 10) | interface ContextState { function loadProjectContext (line 101) | async function loadProjectContext(projectId: string): Promise { function refreshProjectIndex (line 129) | async function refreshProjectIndex(projectId: string): Promise { function searchMemories (line 151) | async function searchMemories( function loadRecentMemories (line 182) | async function loadRecentMemories( function verifyMemory (line 204) | async function verifyMemory(memoryId: string): Promise { function pinMemory (line 224) | async function pinMemory(memoryId: string, pinned: boolean): Promise { function deleteMemory (line 262) | async function deleteMemory(memoryId: string): Promise { FILE: apps/desktop/src/renderer/stores/download-store.ts type DownloadProgress (line 3) | interface DownloadProgress { type DownloadState (line 12) | interface DownloadState { function cleanupProgressTracker (line 36) | function cleanupProgressTracker(modelName: string): void { function initDownloadProgressListener (line 142) | function initDownloadProgressListener(): () => void { FILE: apps/desktop/src/renderer/stores/file-explorer-store.ts type FileExplorerState (line 4) | interface FileExplorerState { FILE: apps/desktop/src/renderer/stores/github/index.ts function initializeGitHubListeners (line 47) | function initializeGitHubListeners(): void { function cleanupGitHubListeners (line 56) | function cleanupGitHubListeners(): void { FILE: apps/desktop/src/renderer/stores/github/investigation-store.ts type InvestigationState (line 7) | interface InvestigationState { function investigateGitHubIssue (line 41) | function investigateGitHubIssue( FILE: apps/desktop/src/renderer/stores/github/issues-store.ts type IssueFilterState (line 4) | type IssueFilterState = 'open' | 'closed' | 'all'; type IssuesState (line 6) | interface IssuesState { function loadGitHubIssues (line 129) | async function loadGitHubIssues( function loadMoreGitHubIssues (line 158) | async function loadMoreGitHubIssues( function loadAllGitHubIssues (line 204) | async function loadAllGitHubIssues( function importGitHubIssues (line 211) | async function importGitHubIssues( FILE: apps/desktop/src/renderer/stores/github/pr-review-store.ts type PRReviewState (line 18) | interface PRReviewState { type PRReviewStoreState (line 43) | interface PRReviewStoreState { function initializePRReviewListeners (line 292) | function initializePRReviewListeners(): void { function cleanupPRReviewListeners (line 349) | function cleanupPRReviewListeners(): void { FILE: apps/desktop/src/renderer/stores/github/sync-status-store.ts type SyncStatusState (line 4) | interface SyncStatusState { function checkGitHubConnection (line 49) | async function checkGitHubConnection(projectId: string): Promise { function generateIdeation (line 399) | function generateIdeation(projectId: string): void { function stopIdeation (line 449) | async function stopIdeation(projectId: string): Promise { function refreshIdeation (line 482) | async function refreshIdeation(projectId: string): Promise { function dismissAllIdeasForProject (line 501) | async function dismissAllIdeasForProject(projectId: string): Promise void { FILE: apps/desktop/src/renderer/stores/insights-store.ts type ToolUsage (line 15) | interface ToolUsage { type InsightsState (line 20) | interface InsightsState { function loadInsightsSessions (line 222) | async function loadInsightsSessions(projectId: string, includeArchived?:... function loadInsightsSession (line 241) | async function loadInsightsSession(projectId: string, includeArchived?: ... function sendMessage (line 252) | function sendMessage(projectId: string, message: string, modelConfig?: I... function clearSession (line 287) | async function clearSession(projectId: string, includeArchived?: boolean... function newSession (line 296) | async function newSession(projectId: string): Promise { function switchSession (line 305) | async function switchSession(projectId: string, sessionId: string): Prom... function deleteSession (line 317) | async function deleteSession(projectId: string, sessionId: string, inclu... function renameSession (line 327) | async function renameSession(projectId: string, sessionId: string, newTi... function deleteSessions (line 337) | async function deleteSessions(projectId: string, sessionIds: string[]): ... function archiveSession (line 345) | async function archiveSession(projectId: string, sessionId: string): Pro... function archiveSessions (line 350) | async function archiveSessions(projectId: string, sessionIds: string[]):... function unarchiveSession (line 358) | async function unarchiveSession(projectId: string, sessionId: string): P... function updateModelConfig (line 363) | async function updateModelConfig(projectId: string, sessionId: string, m... function createTaskFromSuggestion (line 382) | async function createTaskFromSuggestion( function setupInsightsListeners (line 402) | function setupInsightsListeners(): () => void { FILE: apps/desktop/src/renderer/stores/kanban-settings-store.ts type ColumnPreferences (line 11) | type ColumnPreferences = KanbanColumnPreference; type KanbanColumnPreferences (line 16) | type KanbanColumnPreferences = Record; type KanbanSettingsState (line 21) | interface KanbanSettingsState { constant KANBAN_SETTINGS_KEY_PREFIX (line 53) | const KANBAN_SETTINGS_KEY_PREFIX = 'kanban-column-prefs'; constant BASE_FONT_SIZE (line 56) | const BASE_FONT_SIZE = 16; constant DEFAULT_COLUMN_WIDTH (line 59) | const DEFAULT_COLUMN_WIDTH = 320; constant MIN_COLUMN_WIDTH (line 62) | const MIN_COLUMN_WIDTH = 180; constant MAX_COLUMN_WIDTH (line 65) | const MAX_COLUMN_WIDTH = 600; constant COLLAPSED_COLUMN_WIDTH (line 68) | const COLLAPSED_COLUMN_WIDTH = 48; function pxToRem (line 81) | function pxToRem(px: number): string { constant DEFAULT_COLUMN_WIDTH_REM (line 86) | const DEFAULT_COLUMN_WIDTH_REM = pxToRem(DEFAULT_COLUMN_WIDTH); constant MIN_COLUMN_WIDTH_REM (line 89) | const MIN_COLUMN_WIDTH_REM = pxToRem(MIN_COLUMN_WIDTH); constant MAX_COLUMN_WIDTH_REM (line 92) | const MAX_COLUMN_WIDTH_REM = pxToRem(MAX_COLUMN_WIDTH); constant COLLAPSED_COLUMN_WIDTH_REM (line 95) | const COLLAPSED_COLUMN_WIDTH_REM = pxToRem(COLLAPSED_COLUMN_WIDTH); function getKanbanSettingsKey (line 113) | function getKanbanSettingsKey(projectId: string): string { function createDefaultPreferences (line 120) | function createDefaultPreferences(): KanbanColumnPreferences { function validatePreferences (line 138) | function validatePreferences(data: unknown): data is KanbanColumnPrefere... function clampWidth (line 172) | function clampWidth(width: number): number { function saveKanbanPreferencesToMain (line 183) | function saveKanbanPreferencesToMain(projectId: string): void { FILE: apps/desktop/src/renderer/stores/project-env-store.ts type ProjectEnvState (line 4) | interface ProjectEnvState { function loadProjectEnvConfig (line 67) | async function loadProjectEnvConfig(projectId: string): Promise { function addProject (line 334) | async function addProject(projectPath: string): Promise { function removeProject (line 358) | async function removeProject(projectId: string): Promise { function updateProjectSettings (line 380) | async function updateProjectSettings( function checkProjectVersion (line 411) | async function checkProjectVersion( function initializeProject (line 428) | async function initializeProject( FILE: apps/desktop/src/renderer/stores/rate-limit-store.ts type RateLimitState (line 4) | interface RateLimitState { FILE: apps/desktop/src/renderer/stores/release-store.ts type ReleaseState (line 9) | interface ReleaseState { function loadReleaseableVersions (line 91) | async function loadReleaseableVersions(projectId: string): Promise { function runPreflightCheck (line 121) | async function runPreflightCheck(projectId: string): Promise { function createRelease (line 150) | function createRelease(projectId: string): void { function getUnreleasedVersions (line 190) | function getUnreleasedVersions(): ReleaseableVersion[] { function getSelectedVersionInfo (line 198) | function getSelectedVersionInfo(): ReleaseableVersion | undefined { function canCreateRelease (line 206) | function canCreateRelease(): boolean { FILE: apps/desktop/src/renderer/stores/roadmap-store.ts function resetActors (line 36) | function resetActors(): void { function getOrCreateGenerationActor (line 49) | function getOrCreateGenerationActor( function getOrCreateFeatureActor (line 87) | function getOrCreateFeatureActor( function migrateRoadmapIfNeeded (line 134) | function migrateRoadmapIfNeeded(roadmap: Roadmap): Roadmap { type RoadmapState (line 167) | interface RoadmapState { function deriveGenerationStatus (line 200) | function deriveGenerationStatus(actor: Actor { function generateRoadmap (line 804) | function generateRoadmap( function refreshRoadmap (line 822) | function refreshRoadmap( function stopRoadmap (line 840) | async function stopRoadmap(projectId: string): Promise { function getFeaturesByPhase (line 872) | function getFeaturesByPhase( function getFeaturesByPriority (line 880) | function getFeaturesByPriority( function getFeatureStats (line 888) | function getFeatureStats(roadmap: Roadmap | null): { FILE: apps/desktop/src/renderer/stores/settings-store.ts type SettingsState (line 10) | interface SettingsState { function migrateOnboardingCompleted (line 427) | async function migrateOnboardingCompleted(settings: AppSettings): Promis... function loadSettings (line 466) | async function loadSettings(): Promise { function saveSettings (line 507) | async function saveSettings(updates: Partial): Promise { FILE: apps/desktop/src/renderer/stores/task-store.ts constant DEFAULT_MAX_PARALLEL_TASKS (line 8) | const DEFAULT_MAX_PARALLEL_TASKS = 3; constant MAX_LOG_ENTRIES (line 12) | const MAX_LOG_ENTRIES = 5000; type TaskState (line 14) | interface TaskState { function findTaskIndex (line 54) | function findTaskIndex(tasks: Task[], taskId: string): number { constant STUCK_ACTIVITY_THRESHOLD_MS (line 71) | const STUCK_ACTIVITY_THRESHOLD_MS = 60_000; function recordTaskActivity (line 76) | function recordTaskActivity(taskId: string): void { function hasRecentActivity (line 84) | function hasRecentActivity(taskId: string): boolean { function clearTaskActivity (line 93) | function clearTaskActivity(taskId: string): void { function notifyTaskStatusChange (line 100) | function notifyTaskStatusChange(taskId: string, oldStatus: TaskStatus | ... function updateTaskAtIndex (line 114) | function updateTaskAtIndex(tasks: Task[], index: number, updater: (task:... function validatePlanData (line 135) | function validatePlanData(plan: ImplementationPlan): boolean { constant TASK_ORDER_KEY_PREFIX (line 172) | const TASK_ORDER_KEY_PREFIX = 'task-order-state'; function getTaskOrderKey (line 177) | function getTaskOrderKey(projectId: string): string { function createEmptyTaskOrder (line 184) | function createEmptyTaskOrder(): TaskOrderState { function loadTasks (line 691) | async function loadTasks(projectId: string, options?: { forceRefresh?: b... function createTask (line 734) | async function createTask( function startTask (line 760) | function startTask(taskId: string, options?: { parallel?: boolean; worke... function stopTask (line 767) | function stopTask(taskId: string): void { function submitReview (line 774) | async function submitReview( type PersistStatusResult (line 794) | interface PersistStatusResult { function persistTaskStatus (line 805) | async function persistTaskStatus( function forceCompleteTask (line 845) | async function forceCompleteTask(taskId: string): Promise { function recoverStuckTask (line 947) | async function recoverStuckTask( function deleteTask (line 978) | async function deleteTask( function deleteTasks (line 1013) | async function deleteTasks( function archiveTasks (line 1059) | async function archiveTasks( constant DRAFT_KEY_PREFIX (line 1090) | const DRAFT_KEY_PREFIX = 'task-creation-draft'; function getDraftKey (line 1095) | function getDraftKey(projectId: string): string { function saveDraft (line 1103) | function saveDraft(draft: TaskDraft): void { function loadDraft (line 1124) | function loadDraft(projectId: string): TaskDraft | null { function clearDraft (line 1143) | function clearDraft(projectId: string): void { function hasDraft (line 1155) | function hasDraft(projectId: string): boolean { function isDraftEmpty (line 1163) | function isDraftEmpty(draft: TaskDraft | null): boolean { function getTaskByGitHubIssue (line 1184) | function getTaskByGitHubIssue(issueNumber: number): Task | undefined { function isIncompleteHumanReview (line 1198) | function isIncompleteHumanReview(task: Task): boolean { function getCompletedSubtaskCount (line 1218) | function getCompletedSubtaskCount(task: Task): number { function getTaskProgress (line 1226) | function getTaskProgress(task: Task): { completed: number; total: number... FILE: apps/desktop/src/renderer/stores/terminal-font-settings-store.ts type TerminalFontSettings (line 18) | interface TerminalFontSettings { function getOSDefaults (line 33) | function getOSDefaults(): TerminalFontSettings { constant TERMINAL_PRESETS (line 93) | const TERMINAL_PRESETS: Record = { type TerminalFontSettingsStore (line 140) | interface TerminalFontSettingsStore extends TerminalFontSettings { FILE: apps/desktop/src/renderer/stores/terminal-store.ts type TerminalActor (line 11) | type TerminalActor = ActorRefFrom; function getOrCreateTerminalActor (line 25) | function getOrCreateTerminalActor(terminalId: string): TerminalActor { function sendTerminalMachineEvent (line 40) | function sendTerminalMachineEvent(terminalId: string, event: TerminalEve... function registerOutputCallback (line 71) | function registerOutputCallback( function unregisterOutputCallback (line 85) | function unregisterOutputCallback(terminalId: string): void { function writeToTerminal (line 104) | function writeToTerminal(terminalId: string, data: string): void { type TerminalStatus (line 119) | type TerminalStatus = 'idle' | 'running' | 'claude-active' | 'exited'; type Terminal (line 121) | interface Terminal { type TerminalLayout (line 140) | interface TerminalLayout { type TerminalState (line 148) | interface TerminalState { function getActiveProjectTerminalCount (line 192) | function getActiveProjectTerminalCount(terminals: Terminal[], projectPat... function restoreTerminalSessions (line 618) | async function restoreTerminalSessions(projectPath: string): Promise = { constant CHANGELOG_FORMAT_DESCRIPTIONS (line 16) | const CHANGELOG_FORMAT_DESCRIPTIONS: Record = { constant CHANGELOG_AUDIENCE_LABELS (line 26) | const CHANGELOG_AUDIENCE_LABELS: Record = { constant CHANGELOG_AUDIENCE_DESCRIPTIONS (line 32) | const CHANGELOG_AUDIENCE_DESCRIPTIONS: Record = { constant CHANGELOG_EMOJI_LEVEL_LABELS (line 42) | const CHANGELOG_EMOJI_LEVEL_LABELS: Record = { constant CHANGELOG_EMOJI_LEVEL_DESCRIPTIONS (line 49) | const CHANGELOG_EMOJI_LEVEL_DESCRIPTIONS: Record = { constant CHANGELOG_SOURCE_MODE_LABELS (line 60) | const CHANGELOG_SOURCE_MODE_LABELS: Record = { constant CHANGELOG_SOURCE_MODE_DESCRIPTIONS (line 66) | const CHANGELOG_SOURCE_MODE_DESCRIPTIONS: Record = { constant GIT_HISTORY_TYPE_LABELS (line 76) | const GIT_HISTORY_TYPE_LABELS: Record = { constant GIT_HISTORY_TYPE_DESCRIPTIONS (line 82) | const GIT_HISTORY_TYPE_DESCRIPTIONS: Record = { constant CHANGELOG_STAGE_LABELS (line 92) | const CHANGELOG_STAGE_LABELS: Record = { constant DEFAULT_CHANGELOG_PATH (line 106) | const DEFAULT_CHANGELOG_PATH = 'CHANGELOG.md'; FILE: apps/desktop/src/shared/constants/config.ts constant TERMINAL_DOM_UPDATE_DELAY_MS (line 13) | const TERMINAL_DOM_UPDATE_DELAY_MS = 250; constant PANEL_CLEANUP_GRACE_PERIOD_MS (line 16) | const PANEL_CLEANUP_GRACE_PERIOD_MS = 150; constant UI_SCALE_MIN (line 22) | const UI_SCALE_MIN = 75; constant UI_SCALE_MAX (line 23) | const UI_SCALE_MAX = 200; constant UI_SCALE_DEFAULT (line 24) | const UI_SCALE_DEFAULT = 100; constant UI_SCALE_STEP (line 25) | const UI_SCALE_STEP = 5; constant DEFAULT_APP_SETTINGS (line 31) | const DEFAULT_APP_SETTINGS = { constant DEFAULT_PROJECT_SETTINGS (line 80) | const DEFAULT_PROJECT_SETTINGS = { constant AUTO_BUILD_PATHS (line 100) | const AUTO_BUILD_PATHS = { function getSpecsDir (line 125) | function getSpecsDir(autoBuildPath: string | undefined): string { FILE: apps/desktop/src/shared/constants/github.ts constant GITHUB_ISSUE_STATE_LABELS (line 10) | const GITHUB_ISSUE_STATE_LABELS: Record = { constant GITHUB_ISSUE_STATE_COLORS (line 15) | const GITHUB_ISSUE_STATE_COLORS: Record = { constant GITHUB_COMPLEXITY_COLORS (line 24) | const GITHUB_COMPLEXITY_COLORS: Record = { FILE: apps/desktop/src/shared/constants/i18n.ts type SupportedLanguage (line 6) | type SupportedLanguage = 'en' | 'fr'; constant AVAILABLE_LANGUAGES (line 8) | const AVAILABLE_LANGUAGES = [ constant DEFAULT_LANGUAGE (line 13) | const DEFAULT_LANGUAGE: SupportedLanguage = 'en'; FILE: apps/desktop/src/shared/constants/ideation.ts constant IDEATION_TYPE_LABELS (line 13) | const IDEATION_TYPE_LABELS: Record = { constant IDEATION_TYPE_DESCRIPTIONS (line 22) | const IDEATION_TYPE_DESCRIPTIONS: Record = { constant IDEATION_TYPE_COLORS (line 32) | const IDEATION_TYPE_COLORS: Record = { constant IDEATION_TYPE_ICONS (line 42) | const IDEATION_TYPE_ICONS: Record = { constant IDEATION_STATUS_COLORS (line 55) | const IDEATION_STATUS_COLORS: Record = { constant IDEATION_EFFORT_COLORS (line 68) | const IDEATION_EFFORT_COLORS: Record = { constant IDEATION_IMPACT_COLORS (line 80) | const IDEATION_IMPACT_COLORS: Record = { constant SECURITY_SEVERITY_COLORS (line 92) | const SECURITY_SEVERITY_COLORS: Record = { constant UIUX_CATEGORY_LABELS (line 100) | const UIUX_CATEGORY_LABELS: Record = { constant DOCUMENTATION_CATEGORY_LABELS (line 109) | const DOCUMENTATION_CATEGORY_LABELS: Record = { constant SECURITY_CATEGORY_LABELS (line 119) | const SECURITY_CATEGORY_LABELS: Record = { constant PERFORMANCE_CATEGORY_LABELS (line 130) | const PERFORMANCE_CATEGORY_LABELS: Record = { constant CODE_QUALITY_CATEGORY_LABELS (line 141) | const CODE_QUALITY_CATEGORY_LABELS: Record = { constant CODE_QUALITY_SEVERITY_COLORS (line 157) | const CODE_QUALITY_SEVERITY_COLORS: Record = { constant DEFAULT_IDEATION_CONFIG (line 170) | const DEFAULT_IDEATION_CONFIG = { FILE: apps/desktop/src/shared/constants/ipc.ts constant IPC_CHANNELS (line 6) | const IPC_CHANNELS = { FILE: apps/desktop/src/shared/constants/models.ts constant AVAILABLE_MODELS (line 13) | const AVAILABLE_MODELS = [ type ModelOption (line 25) | interface ModelOption { constant ALL_AVAILABLE_MODELS (line 39) | const ALL_AVAILABLE_MODELS: ModelOption[] = [ constant MODEL_ID_MAP (line 78) | const MODEL_ID_MAP: Record = { constant THINKING_BUDGET_MAP (line 87) | const THINKING_BUDGET_MAP: Record = { constant THINKING_LEVELS (line 99) | const THINKING_LEVELS = [ constant AUTO_PHASE_MODELS (line 114) | const AUTO_PHASE_MODELS: PhaseModelConfig = { constant AUTO_PHASE_THINKING (line 121) | const AUTO_PHASE_THINKING: import('../types/settings').PhaseThinkingConf... constant COMPLEX_PHASE_MODELS (line 129) | const COMPLEX_PHASE_MODELS: PhaseModelConfig = { constant COMPLEX_PHASE_THINKING (line 136) | const COMPLEX_PHASE_THINKING: import('../types/settings').PhaseThinkingC... constant BALANCED_PHASE_MODELS (line 144) | const BALANCED_PHASE_MODELS: PhaseModelConfig = { constant BALANCED_PHASE_THINKING (line 151) | const BALANCED_PHASE_THINKING: import('../types/settings').PhaseThinking... constant QUICK_PHASE_MODELS (line 159) | const QUICK_PHASE_MODELS: PhaseModelConfig = { constant QUICK_PHASE_THINKING (line 166) | const QUICK_PHASE_THINKING: import('../types/settings').PhaseThinkingCon... constant DEFAULT_PHASE_MODELS (line 174) | const DEFAULT_PHASE_MODELS: PhaseModelConfig = BALANCED_PHASE_MODELS; constant DEFAULT_PHASE_THINKING (line 175) | const DEFAULT_PHASE_THINKING: import('../types/settings').PhaseThinkingC... constant DEFAULT_FEATURE_MODELS (line 182) | const DEFAULT_FEATURE_MODELS: FeatureModelConfig = { constant DEFAULT_FEATURE_THINKING (line 193) | const DEFAULT_FEATURE_THINKING: FeatureThinkingConfig = { constant FEATURE_LABELS (line 204) | const FEATURE_LABELS: Record = { ultrathink: 'high'... function sanitizeThinkingLevel (line 369) | function sanitizeThinkingLevel(val: string): string { constant PHASE_KEYS (line 375) | const PHASE_KEYS: readonly (keyof PhaseModelConfig)[] = ['spec', 'planni... constant MEMORY_BACKENDS (line 381) | const MEMORY_BACKENDS = [ type ReasoningType (line 390) | type ReasoningType = type ReasoningConfig (line 397) | interface ReasoningConfig { type ProviderModelSpec (line 402) | interface ProviderModelSpec { constant DEFAULT_MODEL_EQUIVALENCES (line 407) | const DEFAULT_MODEL_EQUIVALENCES: Record> = { constant TERMINAL_PHASES (line 87) | const TERMINAL_PHASES: ReadonlySet = new Set(['complete'... constant PAUSE_PHASES (line 93) | const PAUSE_PHASES: ReadonlySet = new Set(['rate_limit_p... function isPausePhase (line 101) | function isPausePhase(phase: ExecutionPhase): boolean { function wouldPhaseRegress (line 113) | function wouldPhaseRegress(currentPhase: ExecutionPhase, newPhase: Execu... function isTerminalPhase (line 125) | function isTerminalPhase(phase: ExecutionPhase): boolean { function isValidBackendPhase (line 135) | function isValidBackendPhase(value: string): value is BackendPhase { function isValidExecutionPhase (line 145) | function isValidExecutionPhase(value: string): value is ExecutionPhase { function isValidPhaseTransition (line 166) | function isValidPhaseTransition( function getExpectedPreviousPhase (line 246) | function getExpectedPreviousPhase(phase: ExecutionPhase): ExecutionPhase... FILE: apps/desktop/src/shared/constants/providers.ts constant PROVIDER_REGISTRY (line 3) | const PROVIDER_REGISTRY: ProviderInfo[] = [ FILE: apps/desktop/src/shared/constants/roadmap.ts constant ROADMAP_PRIORITY_LABELS (line 10) | const ROADMAP_PRIORITY_LABELS: Record = { constant ROADMAP_PRIORITY_COLORS (line 17) | const ROADMAP_PRIORITY_COLORS: Record = { constant ROADMAP_COMPLEXITY_COLORS (line 28) | const ROADMAP_COMPLEXITY_COLORS: Record = { constant ROADMAP_IMPACT_COLORS (line 38) | const ROADMAP_IMPACT_COLORS: Record = { type RoadmapStatusColumn (line 48) | interface RoadmapStatusColumn { constant ROADMAP_STATUS_COLUMNS (line 55) | const ROADMAP_STATUS_COLUMNS: RoadmapStatusColumn[] = [ constant ROADMAP_STATUS_LABELS (line 62) | const ROADMAP_STATUS_LABELS: Record = { constant ROADMAP_STATUS_COLORS (line 69) | const ROADMAP_STATUS_COLORS: Record = { FILE: apps/desktop/src/shared/constants/spellcheck.ts constant SPELL_CHECK_LANGUAGE_MAP (line 13) | const SPELL_CHECK_LANGUAGE_MAP: Record = { constant DEFAULT_SPELL_CHECK_LANGUAGE (line 21) | const DEFAULT_SPELL_CHECK_LANGUAGE = 'en-US'; constant ADD_TO_DICTIONARY_LABELS (line 27) | const ADD_TO_DICTIONARY_LABELS: Record = { FILE: apps/desktop/src/shared/constants/task.ts constant TASK_STATUS_COLUMNS (line 13) | const TASK_STATUS_COLUMNS = [ type TaskStatusColumn (line 22) | type TaskStatusColumn = typeof TASK_STATUS_COLUMNS[number]; constant TASK_STATUS_LABELS (line 27) | const TASK_STATUS_LABELS: Record = { constant SUBTASK_STATUS_COLORS (line 70) | const SUBTASK_STATUS_COLORS: Record = { constant EXECUTION_PHASE_LABELS (line 82) | const EXECUTION_PHASE_LABELS: Record = { constant EXECUTION_PHASE_COLORS (line 95) | const EXECUTION_PHASE_COLORS: Record = { constant EXECUTION_PHASE_BADGE_COLORS (line 108) | const EXECUTION_PHASE_BADGE_COLORS: Record = { constant EXECUTION_PHASE_WEIGHTS (line 121) | const EXECUTION_PHASE_WEIGHTS: Record = { constant TASK_CATEGORY_COLORS (line 149) | const TASK_CATEGORY_COLORS: Record = { constant TASK_COMPLEXITY_LABELS (line 165) | const TASK_COMPLEXITY_LABELS: Record = { constant TASK_COMPLEXITY_COLORS (line 173) | const TASK_COMPLEXITY_COLORS: Record = { constant TASK_IMPACT_LABELS (line 185) | const TASK_IMPACT_LABELS: Record = { constant TASK_IMPACT_COLORS (line 192) | const TASK_IMPACT_COLORS: Record = { constant TASK_PRIORITY_LABELS (line 203) | const TASK_PRIORITY_LABELS: Record = { constant TASK_PRIORITY_COLORS (line 210) | const TASK_PRIORITY_COLORS: Record = { constant MAX_IMAGE_SIZE (line 222) | const MAX_IMAGE_SIZE = 10 * 1024 * 1024; constant MAX_IMAGES_PER_TASK (line 225) | const MAX_IMAGES_PER_TASK = 10; constant MAX_REFERENCED_FILES (line 228) | const MAX_REFERENCED_FILES = 20; constant ALLOWED_IMAGE_TYPES (line 231) | const ALLOWED_IMAGE_TYPES = [ constant ALLOWED_IMAGE_EXTENSIONS (line 240) | const ALLOWED_IMAGE_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.gif', '.web... constant ALLOWED_IMAGE_TYPES_DISPLAY (line 243) | const ALLOWED_IMAGE_TYPES_DISPLAY = 'PNG, JPEG, GIF, WebP'; constant ATTACHMENTS_DIR (line 246) | const ATTACHMENTS_DIR = 'attachments'; constant JSON_ERROR_PREFIX (line 257) | const JSON_ERROR_PREFIX = '__JSON_ERROR__:'; constant JSON_ERROR_TITLE_SUFFIX (line 264) | const JSON_ERROR_TITLE_SUFFIX = '__JSON_ERROR_SUFFIX__'; FILE: apps/desktop/src/shared/constants/themes.ts constant COLOR_THEMES (line 16) | const COLOR_THEMES: ColorThemeDefinition[] = [ FILE: apps/desktop/src/shared/platform.cjs function getCurrentPlatform (line 4) | function getCurrentPlatform() { function isWindows (line 12) | function isWindows() { function isMacOS (line 16) | function isMacOS() { function isLinux (line 20) | function isLinux() { function isUnix (line 24) | function isUnix() { function toNodePlatform (line 28) | function toNodePlatform(platform) { FILE: apps/desktop/src/shared/platform.ts type Platform (line 13) | type Platform = 'win32' | 'darwin' | 'linux' | 'unknown'; function getCurrentPlatform (line 23) | function getCurrentPlatform(): Platform { function isWindows (line 36) | function isWindows(): boolean { function isMacOS (line 45) | function isMacOS(): boolean { function isLinux (line 54) | function isLinux(): boolean { function isUnix (line 63) | function isUnix(): boolean { FILE: apps/desktop/src/shared/progress.ts function calculateProgress (line 12) | function calculateProgress(subtasks: { status: string }[]): number { function countSubtasksByStatus (line 23) | function countSubtasksByStatus(subtasks: Subtask[]): Record = new Set = new Set = new Set = new Set([ constant XSTATE_ACTIVE_STATES (line 43) | const XSTATE_ACTIVE_STATES: ReadonlySet = new Set([ constant XSTATE_TO_PHASE (line 48) | const XSTATE_TO_PHASE: Record & Record { FILE: apps/desktop/src/shared/types/insights.ts type IdeationType (line 13) | type IdeationType = type IdeationStatus (line 20) | type IdeationStatus = 'draft' | 'selected' | 'converted' | 'dismissed' |... type IdeationGenerationPhase (line 21) | type IdeationGenerationPhase = 'idle' | 'analyzing' | 'discovering' | 'g... type IdeationConfig (line 23) | interface IdeationConfig { type IdeaBase (line 33) | interface IdeaBase { type CodeImprovementIdea (line 43) | interface CodeImprovementIdea extends IdeaBase { type UIUXImprovementIdea (line 52) | interface UIUXImprovementIdea extends IdeaBase { type DocumentationGapIdea (line 62) | interface DocumentationGapIdea extends IdeaBase { type SecurityHardeningIdea (line 73) | interface SecurityHardeningIdea extends IdeaBase { type PerformanceOptimizationIdea (line 85) | interface PerformanceOptimizationIdea extends IdeaBase { type CodeQualityIdea (line 97) | interface CodeQualityIdea extends IdeaBase { type Idea (line 117) | type Idea = type IdeationSession (line 125) | interface IdeationSession { type IdeationGenerationStatus (line 140) | interface IdeationGenerationStatus { type IdeationSummary (line 148) | interface IdeationSummary { type InsightsModelConfig (line 163) | interface InsightsModelConfig { type InsightsChatRole (line 169) | type InsightsChatRole = 'user' | 'assistant'; type InsightsToolUsage (line 172) | interface InsightsToolUsage { type InsightsChatMessage (line 178) | interface InsightsChatMessage { type InsightsSession (line 195) | interface InsightsSession { type InsightsSessionSummary (line 207) | interface InsightsSessionSummary { type InsightsChatStatus (line 218) | interface InsightsChatStatus { type InsightsStreamChunk (line 224) | interface InsightsStreamChunk { FILE: apps/desktop/src/shared/types/integrations.ts type LinearIssue (line 9) | interface LinearIssue { type LinearTeam (line 36) | interface LinearTeam { type LinearProject (line 42) | interface LinearProject { type LinearImportResult (line 48) | interface LinearImportResult { type LinearSyncStatus (line 55) | interface LinearSyncStatus { type GitHubRepository (line 68) | interface GitHubRepository { type GitHubIssue (line 82) | interface GitHubIssue { type PaginatedIssuesResult (line 111) | interface PaginatedIssuesResult { type GitHubSyncStatus (line 116) | interface GitHubSyncStatus { type GitHubImportResult (line 125) | interface GitHubImportResult { type GitHubInvestigationResult (line 133) | interface GitHubInvestigationResult { type GitHubInvestigationStatus (line 147) | interface GitHubInvestigationStatus { type GitLabProject (line 159) | interface GitLabProject { type GitLabIssue (line 176) | interface GitLabIssue { type GitLabMergeRequest (line 201) | interface GitLabMergeRequest { type GitLabNote (line 222) | interface GitLabNote { type GitLabGroup (line 234) | interface GitLabGroup { type GitLabSyncStatus (line 243) | interface GitLabSyncStatus { type GitLabImportResult (line 253) | interface GitLabImportResult { type GitLabInvestigationResult (line 261) | interface GitLabInvestigationResult { type GitLabInvestigationStatus (line 275) | interface GitLabInvestigationStatus { type GitLabMRReviewFinding (line 287) | interface GitLabMRReviewFinding { type GitLabMRReviewResult (line 300) | interface GitLabMRReviewResult { type GitLabMRReviewProgress (line 318) | interface GitLabMRReviewProgress { type GitLabNewCommitsCheck (line 325) | interface GitLabNewCommitsCheck { type GitLabAutoFixConfig (line 336) | interface GitLabAutoFixConfig { type GitLabAutoFixQueueItem (line 344) | interface GitLabAutoFixQueueItem { type GitLabIssueBatch (line 355) | interface GitLabIssueBatch { type GitLabBatchProgress (line 363) | interface GitLabBatchProgress { type GitLabAutoFixProgress (line 371) | interface GitLabAutoFixProgress { type GitLabAnalyzePreviewResult (line 378) | interface GitLabAnalyzePreviewResult { type GitLabTriageCategory (line 411) | type GitLabTriageCategory = 'bug' | 'feature' | 'documentation' | 'quest... type GitLabTriageConfig (line 413) | interface GitLabTriageConfig { type GitLabTriageResult (line 421) | interface GitLabTriageResult { type RoadmapFeedbackItem (line 442) | interface RoadmapFeedbackItem { type RoadmapProviderConnection (line 458) | interface RoadmapProviderConnection { type RoadmapProviderConfig (line 469) | interface RoadmapProviderConfig { type CannyStatus (line 480) | type CannyStatus = 'open' | 'under review' | 'planned' | 'in progress' |... FILE: apps/desktop/src/shared/types/ipc.ts type GitBranchType (line 151) | type GitBranchType = 'local' | 'remote'; type GitBranchDetail (line 157) | interface GitBranchDetail { type TabState (line 174) | interface TabState { type ElectronAPI (line 180) | interface ElectronAPI { type PlatformInfo (line 938) | interface PlatformInfo { type Window (line 946) | interface Window { FILE: apps/desktop/src/shared/types/kanban.ts type KanbanColumnPreference (line 9) | interface KanbanColumnPreference { type KanbanPreferences (line 21) | type KanbanPreferences = Record; FILE: apps/desktop/src/shared/types/pr-status.ts type ChecksStatus (line 16) | type ChecksStatus = 'success' | 'pending' | 'failure' | 'none'; type ReviewsStatus (line 25) | type ReviewsStatus = 'approved' | 'changes_requested' | 'pending' | 'none'; type MergeableState (line 34) | type MergeableState = 'clean' | 'dirty' | 'blocked' | 'unknown'; type PRPollingTier (line 41) | type PRPollingTier = 'active' | 'stable'; type PRStatus (line 46) | interface PRStatus { type PollingMetadata (line 66) | interface PollingMetadata { type ETagCacheEntry (line 84) | interface ETagCacheEntry { type ETagCache (line 96) | type ETagCache = Record; type PRStatusUpdate (line 101) | interface PRStatusUpdate { type StartPollingRequest (line 113) | interface StartPollingRequest { type StopPollingRequest (line 123) | interface StopPollingRequest { type GitHubRateLimitInfo (line 131) | interface GitHubRateLimitInfo { type GitHubFetchResult (line 143) | interface GitHubFetchResult { constant POLLING_INTERVALS (line 157) | const POLLING_INTERVALS = { constant RATE_LIMIT_THRESHOLDS (line 171) | const RATE_LIMIT_THRESHOLDS = { constant ACTIVITY_THRESHOLD_MS (line 179) | const ACTIVITY_THRESHOLD_MS = 30 * 60 * 1000; FILE: apps/desktop/src/shared/types/profile.ts type APIProfile (line 18) | interface APIProfile { type ProfilesFile (line 41) | interface ProfilesFile { type ProfileFormData (line 50) | interface ProfileFormData { type ConnectionErrorType (line 66) | type ConnectionErrorType = 'auth' | 'network' | 'endpoint' | 'timeout' |... type TestConnectionResult (line 71) | interface TestConnectionResult { type ModelInfo (line 80) | interface ModelInfo { type DiscoverModelsResult (line 88) | interface DiscoverModelsResult { type DiscoverModelsError (line 95) | interface DiscoverModelsError { FILE: apps/desktop/src/shared/types/project.ts type Project (line 5) | interface Project { type ProjectSettings (line 15) | interface ProjectSettings { type NotificationSettings (line 31) | interface NotificationSettings { type ProjectIndex (line 42) | interface ProjectIndex { type ServiceInfo (line 50) | interface ServiceInfo { type InfrastructureInfo (line 124) | interface InfrastructureInfo { type ConventionsInfo (line 135) | interface ConventionsInfo { type MemorySystemStatus (line 144) | interface MemorySystemStatus { type MemoryDatabaseStatus (line 154) | interface MemoryDatabaseStatus { type InfrastructureStatus (line 162) | interface InfrastructureStatus { type MemoryValidationResult (line 168) | interface MemoryValidationResult { type MemoryConnectionTestResult (line 178) | interface MemoryConnectionTestResult { type MemoryEmbeddingProvider (line 187) | type MemoryEmbeddingProvider = 'openai' | 'voyage' | 'azure_openai' | 'o... type MemoryProviderConfig (line 189) | interface MemoryProviderConfig { type MemoryProviderInfo (line 227) | interface MemoryProviderInfo { type MemorySystemState (line 236) | interface MemorySystemState { type MemoryType (line 246) | type MemoryType = type RendererMemory (line 264) | interface RendererMemory { type MemoryEpisode (line 288) | type MemoryEpisode = RendererMemory; type ContextSearchResult (line 290) | interface ContextSearchResult { type ProjectContextData (line 296) | interface ProjectContextData { type ProjectEnvConfig (line 306) | interface ProjectEnvConfig { type AgentMcpOverride (line 373) | interface AgentMcpOverride { type AgentMcpOverrides (line 384) | interface AgentMcpOverrides { type CustomMcpServer (line 392) | interface CustomMcpServer { type McpHealthStatus (line 414) | type McpHealthStatus = 'healthy' | 'unhealthy' | 'needs_auth' | 'unknown... type McpHealthCheckResult (line 419) | interface McpHealthCheckResult { type McpTestConnectionResult (line 437) | interface McpTestConnectionResult { type AutoBuildVersionInfo (line 453) | interface AutoBuildVersionInfo { type InitializationResult (line 458) | interface InitializationResult { type GitStatus (line 463) | interface GitStatus { type CreateProjectFolderResult (line 470) | interface CreateProjectFolderResult { type FileNode (line 477) | interface FileNode { FILE: apps/desktop/src/shared/types/provider-account.ts type CredentialSource (line 4) | type CredentialSource = 'oauth' | 'api-key' | 'env' | 'keychain'; type BuiltinProvider (line 7) | type BuiltinProvider = type BillingModel (line 12) | type BillingModel = 'subscription' | 'pay-per-use'; type CustomModel (line 15) | interface CustomModel { type ProviderAccount (line 21) | interface ProviderAccount { type ProviderCategory (line 41) | type ProviderCategory = 'popular' | 'infrastructure' | 'local'; type ProviderInfo (line 44) | interface ProviderInfo { FILE: apps/desktop/src/shared/types/roadmap.ts type CompetitorSource (line 9) | type CompetitorSource = 'manual' | 'ai'; type CompetitorRelevance (line 10) | type CompetitorRelevance = 'high' | 'medium' | 'low'; type PainPointSeverity (line 11) | type PainPointSeverity = 'high' | 'medium' | 'low'; type OpportunitySize (line 12) | type OpportunitySize = 'high' | 'medium' | 'low'; type CompetitorPainPoint (line 14) | interface CompetitorPainPoint { type Competitor (line 23) | interface Competitor { type ManualCompetitorInput (line 35) | interface ManualCompetitorInput { type CompetitorMarketGap (line 42) | interface CompetitorMarketGap { type CompetitorInsightsSummary (line 50) | interface CompetitorInsightsSummary { type CompetitorResearchMetadata (line 56) | interface CompetitorResearchMetadata { type CompetitorAnalysis (line 62) | interface CompetitorAnalysis { type RoadmapFeaturePriority (line 79) | type RoadmapFeaturePriority = 'must' | 'should' | 'could' | 'wont'; type RoadmapFeatureStatus (line 80) | type RoadmapFeatureStatus = 'under_review' | 'planned' | 'in_progress' |... type TaskOutcome (line 81) | type TaskOutcome = 'completed' | 'deleted' | 'archived'; type RoadmapPhaseStatus (line 82) | type RoadmapPhaseStatus = 'planned' | 'in_progress' | 'completed'; type RoadmapStatus (line 83) | type RoadmapStatus = 'draft' | 'active' | 'archived'; type FeatureSourceProvider (line 86) | type FeatureSourceProvider = 'internal' | 'canny' | 'github_issue'; type FeatureSource (line 88) | interface FeatureSource { type TargetAudience (line 94) | interface TargetAudience { type RoadmapMilestone (line 102) | interface RoadmapMilestone { type RoadmapPhase (line 111) | interface RoadmapPhase { type RoadmapFeature (line 121) | interface RoadmapFeature { type Roadmap (line 145) | interface Roadmap { type RoadmapDiscovery (line 160) | interface RoadmapDiscovery { type RoadmapGenerationStatus (line 190) | interface RoadmapGenerationStatus { type PersistedRoadmapProgress (line 203) | interface PersistedRoadmapProgress { FILE: apps/desktop/src/shared/types/screenshot.ts type ScreenshotSource (line 10) | interface ScreenshotSource { type ScreenshotCaptureOptions (line 22) | interface ScreenshotCaptureOptions { FILE: apps/desktop/src/shared/types/settings.ts type ColorTheme (line 12) | type ColorTheme = 'default' | 'dusk' | 'lime' | 'ocean' | 'retro' | 'neo... type SupportedIDE (line 16) | type SupportedIDE = type SupportedTerminal (line 94) | type SupportedTerminal = type SupportedCLI (line 149) | type SupportedCLI = type ThemePreviewColors (line 157) | interface ThemePreviewColors { type ColorThemeDefinition (line 164) | interface ColorThemeDefinition { type ThinkingLevel (line 172) | type ThinkingLevel = 'low' | 'medium' | 'high' | 'xhigh'; type ModelTypeShort (line 175) | type ModelTypeShort = 'haiku' | 'sonnet' | 'opus' | 'opus-1m' | 'opus-4.5'; type ModelSelection (line 178) | type ModelSelection = ModelTypeShort | (string & {}); type PhaseModelConfig (line 183) | interface PhaseModelConfig { type PhaseThinkingConfig (line 191) | interface PhaseThinkingConfig { type FeatureModelConfig (line 200) | interface FeatureModelConfig { type FeatureThinkingConfig (line 211) | interface FeatureThinkingConfig { type AgentProfile (line 223) | interface AgentProfile { type PerProviderAgentConfig (line 238) | interface PerProviderAgentConfig { type MixedPhaseEntry (line 247) | interface MixedPhaseEntry { type PipelinePhase (line 254) | type PipelinePhase = 'spec' | 'planning' | 'coding' | 'qa'; type MixedPhaseConfig (line 257) | type MixedPhaseConfig = Record; type MixedFeatureConfig (line 260) | type MixedFeatureConfig = Record; type ReviewReason (line 18) | type ReviewReason = 'completed' | 'errors' | 'qa_rejected' | 'plan_revie... type SubtaskStatus (line 20) | type SubtaskStatus = 'pending' | 'in_progress' | 'completed' | 'failed'; type ExecutionPhase (line 23) | type ExecutionPhase = ExecutionPhaseType; type ExecutionProgress (line 25) | interface ExecutionProgress { type Subtask (line 39) | interface Subtask { type QAReport (line 52) | interface QAReport { type QAIssue (line 58) | interface QAIssue { type TaskLogPhase (line 67) | type TaskLogPhase = 'planning' | 'coding' | 'validation'; type TaskLogPhaseStatus (line 68) | type TaskLogPhaseStatus = 'pending' | 'active' | 'completed' | 'failed'; type TaskLogEntryType (line 69) | type TaskLogEntryType = 'text' | 'tool_start' | 'tool_end' | 'phase_star... type TaskLogEntry (line 71) | interface TaskLogEntry { type TaskPhaseLog (line 86) | interface TaskPhaseLog { type TaskLogs (line 94) | interface TaskLogs { type TaskLogStreamChunk (line 106) | interface TaskLogStreamChunk { type ImageAttachment (line 120) | interface ImageAttachment { type ReferencedFile (line 131) | interface ReferencedFile { type TaskDraft (line 140) | interface TaskDraft { type TaskComplexity (line 163) | type TaskComplexity = 'trivial' | 'small' | 'medium' | 'large' | 'complex'; type TaskImpact (line 164) | type TaskImpact = 'low' | 'medium' | 'high' | 'critical'; type TaskPriority (line 165) | type TaskPriority = 'low' | 'medium' | 'high' | 'urgent'; type ModelType (line 169) | type ModelType = string; type TaskCategory (line 170) | type TaskCategory = type TaskMetadata (line 181) | interface TaskMetadata { type Task (line 254) | interface Task { type ImplementationPlan (line 277) | interface ImplementationPlan { type Phase (line 302) | interface Phase { type PlanSubtask (line 310) | interface PlanSubtask { type WorktreeStatus (line 325) | interface WorktreeStatus { type WorktreeDiff (line 337) | interface WorktreeDiff { type WorktreeDiffFile (line 342) | interface WorktreeDiffFile { type ConflictSeverity (line 350) | type ConflictSeverity = 'none' | 'low' | 'medium' | 'high' | 'critical'; type ConflictType (line 353) | type ConflictType = 'semantic' | 'git'; type MergeConflict (line 356) | interface MergeConflict { type PathMappedAIMerge (line 368) | interface PathMappedAIMerge { type ConflictScenario (line 379) | type ConflictScenario = 'already_merged' | 'superseded' | 'diverged' | '... type GitConflictInfo (line 382) | interface GitConflictInfo { type MergeStats (line 402) | interface MergeStats { type MergeStage (line 415) | type MergeStage = 'analyzing' | 'detecting_conflicts' | 'resolving' | 'v... type MergeProgress (line 417) | interface MergeProgress { type MergeLogEntryType (line 429) | type MergeLogEntryType = 'info' | 'success' | 'warning' | 'error'; type MergeLogEntry (line 431) | interface MergeLogEntry { type WorktreeMergeResult (line 438) | interface WorktreeMergeResult { type WorktreeDiscardResult (line 467) | interface WorktreeDiscardResult { type WorktreeCreatePROptions (line 475) | interface WorktreeCreatePROptions { type WorktreeCreatePRResult (line 484) | interface WorktreeCreatePRResult { type WorktreeListItem (line 496) | interface WorktreeListItem { type WorktreeListResult (line 512) | interface WorktreeListResult { type StuckTaskInfo (line 517) | interface StuckTaskInfo { type TaskRecoveryResult (line 526) | interface TaskRecoveryResult { type TaskRecoveryOptions (line 534) | interface TaskRecoveryOptions { type TaskProgressUpdate (line 539) | interface TaskProgressUpdate { type TaskStartOptions (line 545) | interface TaskStartOptions { FILE: apps/desktop/src/shared/types/terminal-session.ts type TerminalSessionState (line 8) | interface TerminalSessionState { type TerminalSessionsFile (line 41) | interface TerminalSessionsFile { type TerminalRecoveryInfo (line 50) | interface TerminalRecoveryInfo { type SessionRecoveryResult (line 67) | interface SessionRecoveryResult { FILE: apps/desktop/src/shared/types/terminal.ts type WindowsShellType (line 11) | type WindowsShellType = 'powershell' | 'cmd'; type TerminalCreateOptions (line 13) | interface TerminalCreateOptions { type TerminalResizeOptions (line 25) | interface TerminalResizeOptions { type TerminalSession (line 34) | interface TerminalSession { type TerminalRestoreResult (line 50) | interface TerminalRestoreResult { type SessionDateInfo (line 60) | interface SessionDateInfo { type SessionDateRestoreResult (line 70) | interface SessionDateRestoreResult { type RateLimitInfo (line 83) | interface RateLimitInfo { type SDKRateLimitInfo (line 101) | interface SDKRateLimitInfo { type AuthFailureInfo (line 143) | interface AuthFailureInfo { type BillingFailureInfo (line 166) | interface BillingFailureInfo { type RetryWithProfileRequest (line 186) | interface RetryWithProfileRequest { type TerminalWorktreeConfig (line 205) | interface TerminalWorktreeConfig { type CreateTerminalWorktreeRequest (line 229) | interface CreateTerminalWorktreeRequest { type TerminalWorktreeResult (line 253) | interface TerminalWorktreeResult { type OtherWorktreeInfo (line 265) | interface OtherWorktreeInfo { FILE: apps/desktop/src/shared/types/unified-account.ts type UnifiedAccountType (line 13) | type UnifiedAccountType = 'oauth' | 'api'; type RateLimitType (line 18) | type RateLimitType = 'session' | 'weekly'; type UnifiedAccount (line 31) | interface UnifiedAccount { FILE: apps/desktop/src/shared/utils/ansi-sanitizer.ts constant ANSI_CSI_PATTERN (line 23) | const ANSI_CSI_PATTERN = /\x1b\[[0-?]*[ -/]*[@-~]/g; constant ANSI_OSC_BEL_PATTERN (line 32) | const ANSI_OSC_BEL_PATTERN = /\x1b\][^\x07]*\x07/g; constant ANSI_OSC_ST_PATTERN (line 34) | const ANSI_OSC_ST_PATTERN = /\x1b\][^\x1b]*\x1b\\/g; function stripAnsiCodes (line 48) | function stripAnsiCodes(text: string): string { FILE: apps/desktop/src/shared/utils/debug-logger.ts function safeConsoleWarn (line 13) | function safeConsoleWarn(...args: unknown[]): void { function safeConsoleError (line 21) | function safeConsoleError(...args: unknown[]): void { FILE: apps/desktop/src/shared/utils/format-time.ts function hasHardcodedText (line 23) | function hasHardcodedText(text?: string | null): boolean { constant USAGE_WINDOW_LABEL_MAP (line 33) | const USAGE_WINDOW_LABEL_MAP: Readonly> = { function localizeUsageWindowLabel (line 64) | function localizeUsageWindowLabel( type FormatTimeRemainingOptions (line 91) | interface FormatTimeRemainingOptions { function formatTimeRemaining (line 119) | function formatTimeRemaining( function formatTimeRemainingSimple (line 175) | function formatTimeRemainingSimple(timestamp: string | undefined): string { FILE: apps/desktop/src/shared/utils/model-display.ts function getProviderModelLabel (line 22) | function getProviderModelLabel( FILE: apps/desktop/src/shared/utils/provider-detection.ts type ApiProvider (line 14) | type ApiProvider = 'anthropic' | 'openai' | 'zai' | 'zhipu' | 'unknown'; type ProviderPattern (line 20) | interface ProviderPattern { constant PROVIDER_PATTERNS (line 25) | const PROVIDER_PATTERNS: readonly ProviderPattern[] = [ function detectProvider (line 57) | function detectProvider(baseUrl: string): ApiProvider { function getProviderLabel (line 86) | function getProviderLabel(provider: ApiProvider): string { function getProviderBadgeColor (line 107) | function getProviderBadgeColor(provider: ApiProvider): string { FILE: apps/desktop/src/shared/utils/sentry-privacy.ts type SentryErrorEvent (line 17) | interface SentryErrorEvent { function maskUserPaths (line 56) | function maskUserPaths(text: string): string { function sanitizeForSentry (line 81) | function sanitizeForSentry(text: string): string { function maskObjectPaths (line 106) | function maskObjectPaths(obj: unknown): unknown { function processEvent (line 144) | function processEvent(event: T): T { constant PRODUCTION_TRACE_SAMPLE_RATE (line 235) | const PRODUCTION_TRACE_SAMPLE_RATE = 0.1; FILE: apps/desktop/src/shared/utils/shell-escape.ts function escapeShellArg (line 30) | function escapeShellArg(arg: string): string { function escapeShellPath (line 43) | function escapeShellPath(path: string): string { function buildCdCommand (line 59) | function buildCdCommand(path: string | undefined, shellType?: WindowsShe... function escapeShellArgWindows (line 89) | function escapeShellArgWindows(arg: string): string { function escapeForWindowsDoubleQuote (line 130) | function escapeForWindowsDoubleQuote(arg: string): string { function isPathSafe (line 151) | function isPathSafe(path: string): boolean { type FileReferenceDropData (line 174) | interface FileReferenceDropData { function parseFileReferenceDrop (line 191) | function parseFileReferenceDrop(dataTransfer: DataTransfer): FileReferen... FILE: apps/desktop/src/shared/utils/task-status.ts function isCompletedTask (line 16) | function isCompletedTask(status: TaskStatus, reviewReason?: ReviewReason... FILE: apps/desktop/src/shared/utils/unified-account.ts constant OAUTH_ID_PREFIX (line 19) | const OAUTH_ID_PREFIX = 'oauth-'; constant API_ID_PREFIX (line 24) | const API_ID_PREFIX = 'api-'; function claudeProfileToUnified (line 40) | function claudeProfileToUnified( function apiProfileToUnified (line 85) | function apiProfileToUnified( function isOAuthAccountId (line 120) | function isOAuthAccountId(id: string): boolean { function isAPIAccountId (line 127) | function isAPIAccountId(id: string): boolean { function extractProfileId (line 134) | function extractProfileId(unifiedId: string): string { function toOAuthUnifiedId (line 148) | function toOAuthUnifiedId(profileId: string): string { function toAPIUnifiedId (line 160) | function toAPIUnifiedId(profileId: string): string { FILE: apps/desktop/src/types/sentry-electron.d.ts type SentryErrorEvent (line 1) | interface SentryErrorEvent { type SentryScope (line 5) | interface SentryScope { type SentryInitOptions (line 9) | interface SentryInitOptions { type SentryBreadcrumb (line 20) | interface SentryBreadcrumb { type SentryCaptureContext (line 27) | interface SentryCaptureContext { type ErrorEvent (line 34) | type ErrorEvent = SentryErrorEvent; type ErrorEvent (line 42) | type ErrorEvent = SentryErrorEvent; FILE: scripts/bump-version.js function log (line 43) | function log(message, color = colors.reset) { function error (line 47) | function error(message) { function success (line 52) | function success(message) { function info (line 56) | function info(message) { function warning (line 60) | function warning(message) { function parseVersion (line 65) | function parseVersion(version) { function bumpVersion (line 79) | function bumpVersion(currentVersion, bumpType) { function exec (line 97) | function exec(command, options = {}) { function checkGitStatus (line 106) | function checkGitStatus() { function updatePackageJson (line 114) | function updatePackageJson(newVersion) { function checkChangelogEntry (line 143) | function checkChangelogEntry(version) { function main (line 173) | function main() { FILE: scripts/update-readme.mjs constant SEMVER_PATTERN (line 17) | const SEMVER_PATTERN = /^\d+\.\d+\.\d+(-[a-zA-Z]+\.\d+)?$/; function validateVersion (line 24) | function validateVersion(version) { function escapeRegExp (line 33) | function escapeRegExp(str) { function updateSection (line 45) | function updateSection(text, startMarker, endMarker, replacements) { function updateReadme (line 66) | function updateReadme(version, isPrerelease) { function main (line 160) | function main() { FILE: scripts/update-readme.test.mjs function buildSampleReadme (line 110) | function buildSampleReadme(stableVersion, betaVersion) { function withTempReadme (line 145) | function withTempReadme(readmeContent, fn) { FILE: scripts/validate-release.js function validateRelease (line 15) | function validateRelease(version) {