SYMBOL INDEX (417 symbols across 58 files) FILE: mcp-server/src/index.ts function createShannonHelperServer (line 30) | function createShannonHelperServer(targetDir: string): ReturnType; function generateHOTP (line 39) | function generateHOTP(secret: string, counter: number, digits: number = ... function generateTOTP (line 68) | function generateTOTP(secret: string, timeStep: number = 30, digits: num... function getSecondsUntilExpiration (line 77) | function getSecondsUntilExpiration(timeStep: number = 30): number { function generateTotp (line 85) | async function generateTotp(args: GenerateTotpInput): Promise { FILE: mcp-server/src/tools/save-deliverable.ts type SaveDeliverableInput (line 36) | type SaveDeliverableInput = z.infer; function isPathContained (line 42) | function isPathContained(basePath: string, targetPath: string): boolean { function resolveContent (line 52) | function resolveContent( function createSaveDeliverableHandler (line 98) | function createSaveDeliverableHandler(targetDir: string) { function createSaveDeliverableTool (line 148) | function createSaveDeliverableTool(targetDir: string) { FILE: mcp-server/src/types/deliverables.ts type DeliverableType (line 14) | enum DeliverableType { constant DELIVERABLE_FILENAMES (line 49) | const DELIVERABLE_FILENAMES: Record = { constant QUEUE_TYPES (line 72) | const QUEUE_TYPES: DeliverableType[] = [ function isQueueType (line 83) | function isQueueType(type: string): boolean { type VulnerabilityQueue (line 90) | interface VulnerabilityQueue { type VulnerabilityItem (line 94) | interface VulnerabilityItem { FILE: mcp-server/src/types/tool-responses.ts type ErrorResponse (line 14) | interface ErrorResponse { type SuccessResponse (line 22) | interface SuccessResponse { type SaveDeliverableResponse (line 27) | interface SaveDeliverableResponse { type GenerateTotpResponse (line 35) | interface GenerateTotpResponse { type ToolResponse (line 43) | type ToolResponse = type ToolResultContent (line 49) | interface ToolResultContent { type ToolResult (line 54) | interface ToolResult { function createToolResult (line 63) | function createToolResult(response: ToolResponse): ToolResult { FILE: mcp-server/src/utils/error-formatter.ts function createValidationError (line 18) | function createValidationError( function createCryptoError (line 35) | function createCryptoError( function createGenericError (line 52) | function createGenericError( FILE: mcp-server/src/utils/file-operations.ts function saveDeliverableFile (line 24) | function saveDeliverableFile(targetDir: string, filename: string, conten... FILE: mcp-server/src/validation/queue-validator.ts type ValidationResult (line 16) | interface ValidationResult { function validateQueueJson (line 26) | function validateQueueJson(content: string): ValidationResult { FILE: mcp-server/src/validation/totp-validator.ts function base32Decode (line 18) | function base32Decode(encoded: string): Buffer { function validateTotpSecret (line 54) | function validateTotpSecret(secret: string): boolean { FILE: src/ai/audit-logger.ts type AuditLogger (line 12) | interface AuditLogger { class RealAuditLogger (line 19) | class RealAuditLogger implements AuditLogger { method constructor (line 22) | constructor(auditSession: AuditSession) { method logLlmResponse (line 26) | async logLlmResponse(turn: number, content: string): Promise { method logToolStart (line 34) | async logToolStart(toolName: string, parameters: unknown): Promise { method logError (line 49) | async logError(error: Error, duration: number, turns: number): Promise... class NullAuditLogger (line 62) | class NullAuditLogger implements AuditLogger { method logLlmResponse (line 63) | async logLlmResponse(_turn: number, _content: string): Promise {} method logToolStart (line 65) | async logToolStart(_toolName: string, _parameters: unknown): Promise {} method logError (line 69) | async logError(_error: Error, _duration: number, _turns: number): Prom... function createAuditLogger (line 73) | function createAuditLogger(auditSession: AuditSession | null): AuditLogg... FILE: src/ai/claude-executor.ts type ClaudePromptResult (line 34) | interface ClaudePromptResult { type StdioMcpServer (line 49) | interface StdioMcpServer { type McpServer (line 56) | type McpServer = ReturnType | StdioMcp... function buildMcpServers (line 59) | function buildMcpServers( function outputLines (line 132) | function outputLines(lines: string[]): void { function writeErrorLog (line 138) | async function writeErrorLog( function validateAgentOutput (line 169) | async function validateAgentOutput( function runClaudePrompt (line 215) | async function runClaudePrompt( type MessageLoopResult (line 360) | interface MessageLoopResult { type MessageLoopDeps (line 368) | interface MessageLoopDeps { function processMessageStream (line 376) | async function processMessageStream( FILE: src/ai/message-handlers.ts function extractMessageContent (line 39) | function extractMessageContent(message: AssistantMessage): string { function extractTextOnlyContent (line 52) | function extractTextOnlyContent(message: AssistantMessage): string { function detectApiError (line 65) | function detectApiError(content: string): ApiErrorDetection { function handleStructuredError (line 107) | function handleStructuredError( function handleAssistantMessage (line 176) | function handleAssistantMessage( function handleResultMessage (line 214) | function handleResultMessage(message: ResultMessage): ResultData { function handleToolUseMessage (line 238) | function handleToolUseMessage(message: ToolUseMessage): ToolUseData { function handleToolResultMessage (line 247) | function handleToolResultMessage(message: ToolResultMessage): ToolResult... function outputLines (line 264) | function outputLines(lines: string[]): void { type MessageDispatchAction (line 270) | type MessageDispatchAction = type MessageDispatchDeps (line 275) | interface MessageDispatchDeps { function dispatchMessage (line 284) | async function dispatchMessage( FILE: src/ai/models.ts type ModelTier (line 19) | type ModelTier = 'small' | 'medium' | 'large'; constant DEFAULT_MODELS (line 21) | const DEFAULT_MODELS: Readonly> = { function resolveModel (line 28) | function resolveModel(tier: ModelTier = 'medium'): string { FILE: src/ai/output-formatters.ts type ToolCallInput (line 11) | interface ToolCallInput { type ToolCall (line 26) | interface ToolCall { function getAgentPrefix (line 34) | function getAgentPrefix(description: string): string { function extractDomain (line 70) | function extractDomain(url: string): string { function summarizeTodoUpdate (line 82) | function summarizeTodoUpdate(input: ToolCallInput | undefined): string |... function formatBrowserAction (line 109) | function formatBrowserAction(toolCall: ToolCall): string { function filterJsonToolCalls (line 207) | function filterJsonToolCalls(content: string | null | undefined): string { function detectExecutionContext (line 268) | function detectExecutionContext(description: string): ExecutionContext { function formatAssistantOutput (line 286) | function formatAssistantOutput( function formatResultOutput (line 311) | function formatResultOutput(data: ResultData, showFullResult: boolean): ... function formatErrorOutput (line 338) | function formatErrorOutput( function formatCompletionMessage (line 373) | function formatCompletionMessage( function formatToolUseOutput (line 391) | function formatToolUseOutput( function formatToolResultOutput (line 405) | function formatToolResultOutput(displayContent: string): string[] { FILE: src/ai/progress-manager.ts type ProgressContext (line 12) | interface ProgressContext { type ProgressManager (line 17) | interface ProgressManager { class RealProgressManager (line 24) | class RealProgressManager implements ProgressManager { method constructor (line 28) | constructor(message: string) { method start (line 32) | start(): void { method stop (line 37) | stop(): void { method finish (line 42) | finish(message: string): void { method isActive (line 47) | isActive(): boolean { class NullProgressManager (line 53) | class NullProgressManager implements ProgressManager { method start (line 54) | start(): void {} method stop (line 56) | stop(): void {} method finish (line 58) | finish(_message: string): void {} method isActive (line 60) | isActive(): boolean { function createProgressManager (line 66) | function createProgressManager( FILE: src/ai/router-utils.ts function getActualModelName (line 12) | function getActualModelName(sdkReportedModel?: string): string | undefin... FILE: src/ai/types.ts type ExecutionContext (line 11) | interface ExecutionContext { type AssistantResult (line 18) | interface AssistantResult { type ResultData (line 30) | interface ResultData { type ToolUseData (line 39) | interface ToolUseData { type ToolResultData (line 45) | interface ToolResultData { type ContentBlock (line 51) | interface ContentBlock { type AssistantMessage (line 57) | interface AssistantMessage { type ResultMessage (line 65) | interface ResultMessage { type ToolUseMessage (line 75) | interface ToolUseMessage { type ToolResultMessage (line 81) | interface ToolResultMessage { type ApiErrorDetection (line 86) | interface ApiErrorDetection { type SystemInitMessage (line 91) | interface SystemInitMessage { type UserMessage (line 99) | interface UserMessage { FILE: src/audit/audit-session.ts class AuditSession (line 30) | class AuditSession { method constructor (line 39) | constructor(sessionMetadata: SessionMetadata) { method initialize (line 74) | async initialize(workflowId?: string): Promise { method ensureInitialized (line 94) | private async ensureInitialized(): Promise { method startAgent (line 103) | async startAgent( method logEvent (line 136) | async logEvent(eventType: string, eventData: unknown): Promise { method endAgent (line 176) | async endAgent(agentName: string, result: AgentEndResult): Promise { method logPhaseStart (line 240) | async logPhaseStart(phase: string): Promise { method logPhaseComplete (line 248) | async logPhaseComplete(phase: string): Promise { method logWorkflowComplete (line 256) | async logWorkflowComplete(summary: WorkflowSummary): Promise { method addResumeAttempt (line 269) | async addResumeAttempt( method logResumeHeader (line 289) | async logResumeHeader(resumeInfo: { FILE: src/audit/log-stream.ts class LogStream (line 22) | class LogStream { method constructor (line 27) | constructor(filePath: string) { method open (line 34) | async open(): Promise { method write (line 61) | async write(text: string): Promise { method close (line 100) | async close(): Promise { method isOpen (line 117) | get isOpen(): boolean { method path (line 124) | get path(): string { FILE: src/audit/logger.ts type LogEvent (line 23) | interface LogEvent { class AgentLogger (line 32) | class AgentLogger { method constructor (line 39) | constructor(sessionMetadata: SessionMetadata, agentName: string, attem... method initialize (line 52) | async initialize(): Promise { method writeHeader (line 66) | private async writeHeader(): Promise { method logEvent (line 84) | async logEvent(eventType: string, eventData: unknown): Promise { method close (line 98) | async close(): Promise { method savePrompt (line 106) | static async savePrompt( FILE: src/audit/metrics-tracker.ts type AttemptData (line 25) | interface AttemptData { type AgentAuditMetrics (line 35) | interface AgentAuditMetrics { type PhaseMetrics (line 44) | interface PhaseMetrics { type ResumeAttempt (line 51) | interface ResumeAttempt { type SessionData (line 58) | interface SessionData { type ActiveTimer (line 77) | interface ActiveTimer { class MetricsTracker (line 85) | class MetricsTracker { method constructor (line 91) | constructor(sessionMetadata: SessionMetadata) { method initialize (line 101) | async initialize(workflowId?: string): Promise { method createInitialData (line 120) | private createInitialData(workflowId?: string): SessionData { method startAgent (line 152) | startAgent(agentName: string, attemptNumber: number): void { method endAgent (line 162) | async endAgent(agentName: string, result: AgentEndResult): Promise { method reload (line 390) | async reload(): Promise { FILE: src/audit/utils.ts constant SHANNON_ROOT (line 27) | const SHANNON_ROOT = path.resolve(__dirname, '..', '..'); constant AUDIT_LOGS_DIR (line 28) | const AUDIT_LOGS_DIR = path.join(SHANNON_ROOT, 'audit-logs'); function sanitizeHostname (line 33) | function sanitizeHostname(url: string): string { function generateSessionIdentifier (line 41) | function generateSessionIdentifier(sessionMetadata: SessionMetadata): st... function generateAuditPath (line 49) | function generateAuditPath(sessionMetadata: SessionMetadata): string { function generateLogPath (line 58) | function generateLogPath( function generatePromptPath (line 72) | function generatePromptPath(sessionMetadata: SessionMetadata, agentName:... function generateSessionJsonPath (line 80) | function generateSessionJsonPath(sessionMetadata: SessionMetadata): stri... function generateWorkflowLogPath (line 88) | function generateWorkflowLogPath(sessionMetadata: SessionMetadata): stri... function initializeAuditStructure (line 97) | async function initializeAuditStructure(sessionMetadata: SessionMetadata... function copyDeliverablesToAudit (line 113) | async function copyDeliverablesToAudit( FILE: src/audit/workflow-logger.ts type AgentLogDetails (line 19) | interface AgentLogDetails { type AgentMetricsSummary (line 27) | interface AgentMetricsSummary { type WorkflowSummary (line 32) | interface WorkflowSummary { class WorkflowLogger (line 44) | class WorkflowLogger { method constructor (line 48) | constructor(sessionMetadata: SessionMetadata) { method initialize (line 57) | async initialize(): Promise { method writeHeader (line 74) | private async writeHeader(): Promise { method logResumeHeader (line 92) | async logResumeHeader(resumeInfo: { method formatLogTime (line 120) | private formatLogTime(): string { method logPhase (line 128) | async logPhase(phase: string, event: 'start' | 'complete'): Promise { method logError (line 198) | async logError(error: Error, context?: string): Promise { method truncate (line 209) | private truncate(str: string, maxLen: number): string { method formatToolParams (line 217) | private formatToolParams(toolName: string, params: unknown): string { method logToolStart (line 293) | async logToolStart(agentName: string, toolName: string, parameters: un... method logLlmResponse (line 305) | async logLlmResponse(agentName: string, turn: number, content: string)... method formatErrorBlock (line 320) | private formatErrorBlock(errorString: string): string { method logWorkflowComplete (line 335) | async logWorkflowComplete(summary: WorkflowSummary): Promise { method ensureInitialized (line 374) | private async ensureInitialized(): Promise { method close (line 383) | async close(): Promise { FILE: src/config-parser.ts constant DANGEROUS_PATTERNS (line 46) | const DANGEROUS_PATTERNS: RegExp[] = [ function formatAjvError (line 58) | function formatAjvError(error: ErrorObject): string { function formatAjvErrors (line 175) | function formatAjvErrors(errors: ErrorObject[]): string[] { FILE: src/progress-indicator.ts class ProgressIndicator (line 7) | class ProgressIndicator { method constructor (line 14) | constructor(message: string = 'Working...') { method start (line 18) | start(): void { method stop (line 31) | stop(): void { method finish (line 44) | finish(successMessage: string = 'Complete'): void { FILE: src/services/agent-execution.ts type AgentExecutionInput (line 51) | interface AgentExecutionInput { type FailAgentOpts (line 59) | interface FailAgentOpts { class AgentExecutionService (line 78) | class AgentExecutionService { method constructor (line 81) | constructor(configLoader: ConfigLoaderService) { method execute (line 93) | async execute( method failAgent (line 223) | private async failAgent( method executeOrThrow (line 266) | async executeOrThrow( method toMetrics (line 282) | static toMetrics(endResult: AgentEndResult, result: ClaudePromptResult... FILE: src/services/config-loader.ts class ConfigLoaderService (line 26) | class ConfigLoaderService { method load (line 33) | async load(configPath: string): Promise { type GitOperationResult (line 25) | interface GitOperationResult { function getChangedFiles (line 34) | async function getChangedFiles( function logChangeSummary (line 52) | function logChangeSummary( function toErrorResult (line 75) | function toErrorResult(error: unknown): GitOperationResult { class GitSemaphore (line 84) | class GitSemaphore { method acquire (line 88) | async acquire(): Promise { method release (line 95) | release(): void { method process (line 100) | private process(): void { constant GIT_LOCK_ERROR_PATTERNS (line 111) | const GIT_LOCK_ERROR_PATTERNS = [ function isGitLockError (line 119) | function isGitLockError(errorMessage: string): boolean { function executeGitCommandWithRetry (line 124) | async function executeGitCommandWithRetry( function rollbackGitWorkspace (line 168) | async function rollbackGitWorkspace( function createGitCheckpoint (line 220) | async function createGitCheckpoint( function commitGitSuccess (line 268) | async function commitGitSuccess( function getGitCommitHash (line 312) | async function getGitCommitHash(sourceDir: string): Promise; type ErrorMessageResolver (line 23) | type ErrorMessageResolver = string | ((existence: FileExistence) => stri... type ValidationRule (line 25) | interface ValidationRule { type FileExistence (line 31) | interface FileExistence { type PathsBase (line 36) | interface PathsBase { type PathsWithExistence (line 43) | interface PathsWithExistence extends PathsBase { type PathsWithQueue (line 47) | interface PathsWithQueue extends PathsWithExistence { type PathsWithError (line 51) | interface PathsWithError { type QueueData (line 55) | interface QueueData { type QueueValidationResult (line 60) | interface QueueValidationResult { type SafeValidationResult (line 70) | type SafeValidationResult = Result; constant VULN_TYPE_CONFIG (line 73) | const VULN_TYPE_CONFIG: VulnTypeConfig = Object.freeze({ function createValidationRule (line 97) | function createValidationRule( function getExistenceErrorMessage (line 114) | function getExistenceErrorMessage(existence: FileExistence): string { function validateQueueAndDeliverable (line 298) | async function validateQueueAndDeliverable( function validateQueueSafe (line 315) | async function validateQueueSafe( FILE: src/services/reporting.ts type DeliverableFile (line 12) | interface DeliverableFile { function assembleFinalReport (line 19) | async function assembleFinalReport(sourceDir: string, logger: ActivityLo... function injectModelIntoReport (line 84) | async function injectModelIntoReport( FILE: src/session-manager.ts constant AGENTS (line 14) | const AGENTS: Readonly> = Object.free... type PhaseName (line 111) | type PhaseName = 'pre-recon' | 'recon' | 'vulnerability-analysis' | 'exp... constant AGENT_PHASE_MAP (line 114) | const AGENT_PHASE_MAP: Readonly> = Object.f... function createVulnValidator (line 131) | function createVulnValidator(vulnType: VulnType): AgentValidator { function createExploitValidator (line 145) | function createExploitValidator(vulnType: VulnType): AgentValidator { constant MCP_AGENT_MAPPING (line 154) | const MCP_AGENT_MAPPING: Record = Object.freeze({ constant AGENT_VALIDATORS (line 184) | const AGENT_VALIDATORS: Record = Object.freeze({ FILE: src/temporal/activities.ts constant MAX_ERROR_MESSAGE_LENGTH (line 43) | const MAX_ERROR_MESSAGE_LENGTH = 2000; constant MAX_STACK_TRACE_LENGTH (line 44) | const MAX_STACK_TRACE_LENGTH = 1000; constant MAX_OUTPUT_VALIDATION_RETRIES (line 47) | const MAX_OUTPUT_VALIDATION_RETRIES = 3; constant HEARTBEAT_INTERVAL_MS (line 49) | const HEARTBEAT_INTERVAL_MS = 2000; type ActivityInput (line 54) | interface ActivityInput { function truncateErrorMessage (line 67) | function truncateErrorMessage(message: string): string { function truncateStackTrace (line 77) | function truncateStackTrace(failure: ApplicationFailure): void { function buildSessionMetadata (line 86) | function buildSessionMetadata(input: ActivityInput): SessionMetadata { function runAgentActivity (line 105) | async function runAgentActivity( function runPreReconAgent (line 199) | async function runPreReconAgent(input: ActivityInput): Promise { function runInjectionVulnAgent (line 207) | async function runInjectionVulnAgent(input: ActivityInput): Promise): void { method warn (line 19) | warn(message: string, attrs?: Record): void { method error (line 23) | error(message: string, attrs?: Record): void { function createActivityLogger (line 32) | function createActivityLogger(): ActivityLogger { FILE: src/temporal/client.ts type SessionJson (line 43) | interface SessionJson { constant PROGRESS_QUERY (line 58) | const PROGRESS_QUERY = 'getProgress'; function terminateExistingWorkflows (line 64) | async function terminateExistingWorkflows( function isValidWorkspaceName (line 117) | function isValidWorkspaceName(name: string): boolean { function showUsage (line 121) | function showUsage(): void { type CliArgs (line 146) | interface CliArgs { function parseCliArgs (line 158) | function parseCliArgs(argv: string[]): CliArgs { type WorkspaceResolution (line 237) | interface WorkspaceResolution { function resolveWorkspace (line 244) | async function resolveWorkspace( function loadPipelineConfig (line 311) | async function loadPipelineConfig(configPath: string | undefined): Promi... function buildPipelineInput (line 333) | function buildPipelineInput( function displayWorkflowInfo (line 352) | function displayWorkflowInfo(args: CliArgs, workspace: WorkspaceResoluti... function displayMonitoringInfo (line 373) | function displayMonitoringInfo(args: CliArgs, workspace: WorkspaceResolu... function waitForWorkflowResult (line 388) | async function waitForWorkflowResult( function startPipeline (line 438) | async function startPipeline(): Promise { FILE: src/temporal/shared.ts type PipelineInput (line 7) | interface PipelineInput { type ResumeState (line 20) | interface ResumeState { type PipelineSummary (line 28) | interface PipelineSummary { type PipelineState (line 35) | interface PipelineState { type PipelineProgress (line 48) | interface PipelineProgress extends PipelineState { type VulnExploitPipelineResult (line 54) | interface VulnExploitPipelineResult { FILE: src/temporal/summary-mapper.ts function toWorkflowSummary (line 22) | function toWorkflowSummary( FILE: src/temporal/worker.ts function runWorker (line 33) | async function runWorker(): Promise { FILE: src/temporal/workflow-errors.ts constant REMEDIATION_HINTS (line 13) | const REMEDIATION_HINTS: Record = { function unwrapActivityError (line 31) | function unwrapActivityError(error: unknown): { function formatWorkflowError (line 62) | function formatWorkflowError( FILE: src/temporal/workflows.ts constant PRODUCTION_RETRY (line 50) | const PRODUCTION_RETRY = { constant TESTING_RETRY (line 67) | const TESTING_RETRY = { constant SUBSCRIPTION_RETRY (line 90) | const SUBSCRIPTION_RETRY = { constant PREFLIGHT_RETRY (line 106) | const PREFLIGHT_RETRY = { function computeSummary (line 125) | function computeSummary(state: PipelineState): PipelineSummary { function pentestPipelineWorkflow (line 135) | async function pentestPipelineWorkflow( FILE: src/temporal/workspaces.ts type SessionJson (line 24) | interface SessionJson { type WorkspaceInfo (line 37) | interface WorkspaceInfo { function formatDuration (line 46) | function formatDuration(ms: number): string { function getStatusDisplay (line 60) | function getStatusDisplay(status: string): string { function truncate (line 64) | function truncate(str: string, maxLen: number): string { function listWorkspaces (line 69) | async function listWorkspaces(): Promise { FILE: src/types/activity-logger.ts type ActivityLogger (line 11) | interface ActivityLogger { FILE: src/types/agents.ts constant ALL_AGENTS (line 15) | const ALL_AGENTS = [ type AgentName (line 35) | type AgentName = typeof ALL_AGENTS[number]; type PlaywrightAgent (line 37) | type PlaywrightAgent = type AgentValidator (line 46) | type AgentValidator = (sourceDir: string, logger: ActivityLogger) => Pro... type AgentStatus (line 48) | type AgentStatus = type AgentDefinition (line 55) | interface AgentDefinition { type VulnType (line 67) | type VulnType = 'injection' | 'xss' | 'auth' | 'ssrf' | 'authz'; type ExploitationDecision (line 72) | interface ExploitationDecision { FILE: src/types/audit.ts type SessionMetadata (line 14) | interface SessionMetadata { type AgentEndResult (line 26) | interface AgentEndResult { FILE: src/types/config.ts type RuleType (line 11) | type RuleType = type Rule (line 19) | interface Rule { type Rules (line 25) | interface Rules { type LoginType (line 30) | type LoginType = 'form' | 'sso' | 'api' | 'basic'; type SuccessCondition (line 32) | interface SuccessCondition { type Credentials (line 37) | interface Credentials { type Authentication (line 43) | interface Authentication { type Config (line 51) | interface Config { type RetryPreset (line 57) | type RetryPreset = 'default' | 'subscription'; type PipelineConfig (line 59) | interface PipelineConfig { type DistributedConfig (line 64) | interface DistributedConfig { FILE: src/types/errors.ts type ErrorCode (line 18) | enum ErrorCode { type PentestErrorType (line 49) | type PentestErrorType = type PentestErrorContext (line 59) | interface PentestErrorContext { type LogEntry (line 63) | interface LogEntry { type ToolErrorResult (line 75) | interface ToolErrorResult { type PromptErrorResult (line 84) | interface PromptErrorResult { FILE: src/types/metrics.ts type AgentMetrics (line 12) | interface AgentMetrics { FILE: src/types/result.ts type Ok (line 18) | interface Ok { type Err (line 26) | interface Err { type Result (line 34) | type Result = Ok | Err; function ok (line 39) | function ok(value: T): Ok { function err (line 46) | function err(error: E): Err { function isOk (line 53) | function isOk(result: Result): result is Ok { function isErr (line 60) | function isErr(result: Result): result is Err { FILE: src/utils/billing-detection.ts constant BILLING_TEXT_PATTERNS (line 23) | const BILLING_TEXT_PATTERNS = [ constant BILLING_API_PATTERNS (line 36) | const BILLING_API_PATTERNS = [ function matchesBillingTextPattern (line 54) | function matchesBillingTextPattern(text: string): boolean { function matchesBillingApiPattern (line 63) | function matchesBillingApiPattern(message: string): boolean { function isSpendingCapBehavior (line 84) | function isSpendingCapBehavior( FILE: src/utils/concurrency.ts type UnlockFunction (line 14) | type UnlockFunction = () => void; class SessionMutex (line 35) | class SessionMutex { method lock (line 40) | async lock(sessionId: string): Promise { FILE: src/utils/file-io.ts function ensureDirectory (line 19) | async function ensureDirectory(dirPath: string): Promise { function atomicWrite (line 34) | async function atomicWrite(filePath: string, data: object | string): Pro... function readJson (line 58) | async function readJson(filePath: string): Promise { function fileExists (line 66) | async function fileExists(filePath: string): Promise { FILE: src/utils/formatting.ts function formatDuration (line 16) | function formatDuration(ms: number): string { function formatTimestamp (line 34) | function formatTimestamp(timestamp: number = Date.now()): string { function calculatePercentage (line 41) | function calculatePercentage(part: number, total: number): number { function extractAgentType (line 49) | function extractAgentType(description: string): string { FILE: src/utils/functional.ts type PipelineFunction (line 14) | type PipelineFunction = (x: any) => any | Promise; function asyncPipe (line 20) | async function asyncPipe( FILE: src/utils/metrics.ts class Timer (line 7) | class Timer { method constructor (line 12) | constructor(name: string) { method stop (line 17) | stop(): number { method duration (line 22) | duration(): number {