SYMBOL INDEX (4430 symbols across 1080 files) FILE: .opencode/skills/github-triage/scripts/gh_fetch.py class ItemState (line 46) | class ItemState(str, Enum): class OutputFormat (line 52) | class OutputFormat(str, Enum): function run_gh_command (line 58) | async def run_gh_command(args: list[str]) -> tuple[str, str, int]: function get_current_repo (line 70) | async def get_current_repo() -> str: function fetch_items_page (line 81) | async def fetch_items_page( function fetch_all_items (line 116) | async def fetch_all_items( function display_table (line 186) | def display_table(items: list[dict], item_type: str) -> None: function issues (line 218) | def issues( function prs (line 270) | def prs( function fetch_all (line 322) | def fetch_all( FILE: bin/oh-my-opencode.js function getLibcFamily (line 16) | function getLibcFamily() { function supportsAvx2 (line 30) | function supportsAvx2() { function getSignalExitCode (line 63) | function getSignalExitCode(signal) { function main (line 74) | function main() { FILE: bin/platform.js function getPlatformPackage (line 10) | function getPlatformPackage({ platform, arch, libcFamily }) { function getPlatformPackageCandidates (line 30) | function getPlatformPackageCandidates({ platform, arch, libcFamily, pref... function getBaselinePlatformPackage (line 42) | function getBaselinePlatformPackage({ platform, arch, libcFamily }) { function getBinaryPath (line 79) | function getBinaryPath(pkg, platform) { FILE: bun-test.d.ts type Matchers (line 10) | interface Matchers { FILE: postinstall.mjs function getLibcFamily (line 12) | function getLibcFamily() { function main (line 25) | function main() { FILE: script/build-binaries.test.ts constant EXPECTED_BASELINE_TARGETS (line 8) | const EXPECTED_BASELINE_TARGETS = [ FILE: script/build-binaries.ts type PlatformTarget (line 9) | interface PlatformTarget { constant PLATFORMS (line 16) | const PLATFORMS: PlatformTarget[] = [ constant ENTRY_POINT (line 30) | const ENTRY_POINT = "src/cli/index.ts"; function buildPlatform (line 32) | async function buildPlatform(platform: PlatformTarget): Promise { function main (line 63) | async function main() { FILE: script/build-schema-document.ts function createOhMyOpenCodeJsonSchema (line 4) | function createOhMyOpenCodeJsonSchema(): Record { FILE: script/build-schema.ts constant SCHEMA_OUTPUT_PATH (line 4) | const SCHEMA_OUTPUT_PATH = "assets/oh-my-opencode.schema.json" constant DIST_SCHEMA_OUTPUT_PATH (line 5) | const DIST_SCHEMA_OUTPUT_PATH = "dist/oh-my-opencode.schema.json" function main (line 7) | async function main() { FILE: script/generate-changelog.ts constant TEAM (line 5) | const TEAM = ["actions-user", "github-actions[bot]", "code-yeongyu"] function getLatestReleasedTag (line 7) | async function getLatestReleasedTag(): Promise { function generateChangelog (line 16) | async function generateChangelog(previousTag: string): Promise { function getContributors (line 37) | async function getContributors(previousTag: string): Promise { function main (line 73) | async function main() { FILE: script/publish.ts constant PACKAGE_NAME (line 7) | const PACKAGE_NAME = "oh-my-opencode" constant PLATFORM_PACKAGES (line 13) | const PLATFORM_PACKAGES = [ function fetchPreviousVersion (line 25) | async function fetchPreviousVersion(): Promise { function bumpVersion (line 38) | function bumpVersion(version: string, type: "major" | "minor" | "patch")... function updatePackageVersion (line 52) | async function updatePackageVersion(pkgPath: string, newVersion: string)... function updateAllPackageVersions (line 59) | async function updateAllPackageVersions(newVersion: string): Promise { function getDistTag (line 178) | function getDistTag(version: string): string | null { type PublishResult (line 185) | interface PublishResult { function checkPackageVersionExists (line 191) | async function checkPackageVersionExists(pkgName: string, version: strin... function publishPackage (line 200) | async function publishPackage(cwd: string, distTag: string | null, usePr... function publishAllPackages (line 249) | async function publishAllPackages(version: string): Promise { function buildPackages (line 318) | async function buildPackages(): Promise { function gitTagAndRelease (line 332) | async function gitTagAndRelease(newVersion: string, notes: string[]): Pr... function checkVersionExists (line 380) | async function checkVersionExists(version: string): Promise { function main (line 389) | async function main() { FILE: src/agents/agent-builder.ts type AgentSource (line 8) | type AgentSource = AgentFactory | AgentConfig function isFactory (line 10) | function isFactory(source: AgentSource): source is AgentFactory { function buildAgent (line 14) | function buildAgent( FILE: src/agents/atlas/agent.ts constant MODE (line 32) | const MODE: AgentMode = "all" type AtlasPromptSource (line 34) | type AtlasPromptSource = "default" | "gpt" | "gemini" function getAtlasPromptSource (line 39) | function getAtlasPromptSource(model?: string): AtlasPromptSource { type OrchestratorContext (line 49) | interface OrchestratorContext { function getAtlasPrompt (line 59) | function getAtlasPrompt(model?: string): string { function buildDynamicOrchestratorPrompt (line 73) | function buildDynamicOrchestratorPrompt(ctx?: OrchestratorContext): stri... function createAtlasAgent (line 101) | function createAtlasAgent(ctx: OrchestratorContext): AgentConfig { FILE: src/agents/atlas/default.ts constant ATLAS_SYSTEM_PROMPT (line 13) | const ATLAS_SYSTEM_PROMPT = ` function getDefaultAtlasPrompt (line 452) | function getDefaultAtlasPrompt(): string { FILE: src/agents/atlas/gemini.ts constant ATLAS_GEMINI_SYSTEM_PROMPT (line 13) | const ATLAS_GEMINI_SYSTEM_PROMPT = ` function getGeminiAtlasPrompt (line 422) | function getGeminiAtlasPrompt(): string { FILE: src/agents/atlas/gpt.ts constant ATLAS_GPT_SYSTEM_PROMPT (line 13) | const ATLAS_GPT_SYSTEM_PROMPT = ` function getGptAtlasPrompt (line 425) | function getGptAtlasPrompt(): string { FILE: src/agents/atlas/prompt-section-builder.ts function buildAgentSelectionSection (line 17) | function buildAgentSelectionSection(agents: AvailableAgent[]): string { function buildCategorySection (line 34) | function buildCategorySection(userCategories?: Record { function parseRegisteredAgentSummaries (line 21) | function parseRegisteredAgentSummaries(input: unknown): RegisteredAgentS... function buildCustomAgentMetadata (line 47) | function buildCustomAgentMetadata(agentName: string, description: string... FILE: src/agents/dynamic-agent-prompt-builder.ts type AvailableAgent (line 3) | interface AvailableAgent { type AvailableTool (line 9) | interface AvailableTool { type AvailableSkill (line 14) | interface AvailableSkill { type AvailableCategory (line 20) | interface AvailableCategory { function categorizeTools (line 26) | function categorizeTools(toolNames: string[]): AvailableTool[] { function formatToolsForPrompt (line 44) | function formatToolsForPrompt(tools: AvailableTool[]): string { function buildKeyTriggersSection (line 66) | function buildKeyTriggersSection(agents: AvailableAgent[], _skills: Avai... function buildToolSelectionTable (line 79) | function buildToolSelectionTable( function buildExploreSection (line 110) | function buildExploreSection(agents: AvailableAgent[]): string { function buildLibrarianSection (line 130) | function buildLibrarianSection(agents: AvailableAgent[]): string { function buildDelegationTable (line 147) | function buildDelegationTable(agents: AvailableAgent[]): string { function buildCategorySkillsDelegationGuide (line 163) | function buildCategorySkillsDelegationGuide(categories: AvailableCategor... function buildOracleSection (line 282) | function buildOracleSection(agents: AvailableAgent[]): string { function buildHardBlocksSection (line 317) | function buildHardBlocksSection(): string { function buildAntiPatternsSection (line 332) | function buildAntiPatternsSection(): string { function buildToolCallFormatSection (line 349) | function buildToolCallFormatSection(): string { function buildNonClaudePlannerSection (line 366) | function buildNonClaudePlannerSection(model: string): string { function buildParallelDelegationSection (line 382) | function buildParallelDelegationSection(model: string, categories: Avail... function buildUltraworkSection (line 416) | function buildUltraworkSection( function buildAntiDuplicationSection (line 478) | function buildAntiDuplicationSection(): string { FILE: src/agents/env-context.ts function createEnvContext (line 7) | function createEnvContext(): string { FILE: src/agents/explore.ts constant MODE (line 5) | const MODE: AgentMode = "subagent" constant EXPLORE_PROMPT_METADATA (line 7) | const EXPLORE_PROMPT_METADATA: AgentPromptMetadata = { function createExploreAgent (line 27) | function createExploreAgent(model: string): AgentConfig { FILE: src/agents/hephaestus/agent.ts constant MODE (line 16) | const MODE: AgentMode = "all"; type HephaestusPromptSource (line 18) | type HephaestusPromptSource = "gpt-5-4" | "gpt-5-3-codex" | "gpt"; function getHephaestusPromptSource (line 20) | function getHephaestusPromptSource( type HephaestusContext (line 32) | interface HephaestusContext { function getHephaestusPrompt (line 41) | function getHephaestusPrompt( function buildDynamicHephaestusPrompt (line 48) | function buildDynamicHephaestusPrompt(ctx?: HephaestusContext): string { function createHephaestusAgent (line 93) | function createHephaestusAgent( FILE: src/agents/hephaestus/gpt-5-3-codex.ts constant MODE (line 24) | const MODE: AgentMode = "all"; function buildTodoDisciplineSection (line 26) | function buildTodoDisciplineSection(useTaskSystem: boolean): string { function buildHephaestusPrompt (line 108) | function buildHephaestusPrompt( function createHephaestusAgent (line 507) | function createHephaestusAgent( FILE: src/agents/hephaestus/gpt-5-4.ts function buildTodoDisciplineSection (line 22) | function buildTodoDisciplineSection(useTaskSystem: boolean): string { function buildHephaestusPrompt (line 68) | function buildHephaestusPrompt( FILE: src/agents/hephaestus/gpt.ts function buildTodoDisciplineSection (line 22) | function buildTodoDisciplineSection(useTaskSystem: boolean): string { function buildHephaestusPrompt (line 64) | function buildHephaestusPrompt( FILE: src/agents/librarian.ts constant MODE (line 5) | const MODE: AgentMode = "subagent" constant LIBRARIAN_PROMPT_METADATA (line 7) | const LIBRARIAN_PROMPT_METADATA: AgentPromptMetadata = { function createLibrarianAgent (line 24) | function createLibrarianAgent(model: string): AgentConfig { FILE: src/agents/metis.ts constant MODE (line 6) | const MODE: AgentMode = "subagent" constant METIS_SYSTEM_PROMPT (line 22) | const METIS_SYSTEM_PROMPT = `# Metis - Pre-Planning Consultant function createMetisAgent (line 302) | function createMetisAgent(model: string): AgentConfig { FILE: src/agents/momus.test.ts function escapeRegExp (line 4) | function escapeRegExp(value: string) { FILE: src/agents/momus.ts constant MODE (line 6) | const MODE: AgentMode = "subagent"; constant MOMUS_DEFAULT_PROMPT (line 25) | const MOMUS_DEFAULT_PROMPT = `You are a **practical** work plan reviewer... constant MOMUS_GPT_PROMPT (line 210) | const MOMUS_GPT_PROMPT = ` function createMomusAgent (line 284) | function createMomusAgent(model: string): AgentConfig { FILE: src/agents/multimodal-looker.ts constant MODE (line 5) | const MODE: AgentMode = "subagent" constant MULTIMODAL_LOOKER_PROMPT_METADATA (line 7) | const MULTIMODAL_LOOKER_PROMPT_METADATA: AgentPromptMetadata = { function createMultimodalLookerAgent (line 14) | function createMultimodalLookerAgent(model: string): AgentConfig { FILE: src/agents/oracle.ts constant MODE (line 6) | const MODE: AgentMode = "subagent"; constant ORACLE_PROMPT_METADATA (line 8) | const ORACLE_PROMPT_METADATA: AgentPromptMetadata = { constant ORACLE_DEFAULT_PROMPT (line 44) | const ORACLE_DEFAULT_PROMPT = `You are a strategic technical advisor wit... constant ORACLE_GPT_PROMPT (line 165) | const ORACLE_GPT_PROMPT = `You are a strategic technical advisor operati... function createOracleAgent (line 245) | function createOracleAgent(model: string): AgentConfig { FILE: src/agents/prometheus/behavioral-summary.ts constant PROMETHEUS_BEHAVIORAL_SUMMARY (line 7) | const PROMETHEUS_BEHAVIORAL_SUMMARY = `## After Plan Completion: Cleanup... FILE: src/agents/prometheus/gemini.ts constant PROMETHEUS_GEMINI_SYSTEM_PROMPT (line 14) | const PROMETHEUS_GEMINI_SYSTEM_PROMPT = ` function getGeminiPrometheusPrompt (line 331) | function getGeminiPrometheusPrompt(): string { FILE: src/agents/prometheus/gpt.ts constant PROMETHEUS_GPT_SYSTEM_PROMPT (line 13) | const PROMETHEUS_GPT_SYSTEM_PROMPT = ` function getGptPrometheusPrompt (line 462) | function getGptPrometheusPrompt(): string { FILE: src/agents/prometheus/high-accuracy-mode.ts constant PROMETHEUS_HIGH_ACCURACY_MODE (line 7) | const PROMETHEUS_HIGH_ACCURACY_MODE = `# PHASE 3: PLAN GENERATION FILE: src/agents/prometheus/identity-constraints.ts constant PROMETHEUS_IDENTITY_CONSTRAINTS (line 8) | const PROMETHEUS_IDENTITY_CONSTRAINTS = ` FILE: src/agents/prometheus/interview-mode.ts constant PROMETHEUS_INTERVIEW_MODE (line 10) | const PROMETHEUS_INTERVIEW_MODE = `# PHASE 1: INTERVIEW MODE (DEFAULT) FILE: src/agents/prometheus/plan-generation.ts constant PROMETHEUS_PLAN_GENERATION (line 8) | const PROMETHEUS_PLAN_GENERATION = `# PHASE 2: PLAN GENERATION (Auto-Tra... FILE: src/agents/prometheus/plan-template.ts constant PROMETHEUS_PLAN_TEMPLATE (line 8) | const PROMETHEUS_PLAN_TEMPLATE = `## Plan Structure FILE: src/agents/prometheus/system-prompt.ts constant PROMETHEUS_SYSTEM_PROMPT (line 15) | const PROMETHEUS_SYSTEM_PROMPT = `${PROMETHEUS_IDENTITY_CONSTRAINTS} constant PROMETHEUS_PERMISSION (line 27) | const PROMETHEUS_PERMISSION = { type PrometheusPromptSource (line 34) | type PrometheusPromptSource = "default" | "gpt" | "gemini" function getPrometheusPromptSource (line 39) | function getPrometheusPromptSource(model?: string): PrometheusPromptSour... function getPrometheusPrompt (line 55) | function getPrometheusPrompt(model?: string): string { FILE: src/agents/sisyphus-junior/agent.ts constant MODE (line 28) | const MODE: AgentMode = "subagent" constant BLOCKED_TOOLS (line 32) | const BLOCKED_TOOLS = ["task"] constant SISYPHUS_JUNIOR_DEFAULTS (line 34) | const SISYPHUS_JUNIOR_DEFAULTS = { type SisyphusJuniorPromptSource (line 39) | type SisyphusJuniorPromptSource = "default" | "gpt" | "gpt-5-4" | "gpt-5... function getSisyphusJuniorPromptSource (line 41) | function getSisyphusJuniorPromptSource(model?: string): SisyphusJuniorPr... function buildSisyphusJuniorPrompt (line 57) | function buildSisyphusJuniorPrompt( function createSisyphusJuniorAgentWithOverrides (line 79) | function createSisyphusJuniorAgentWithOverrides( FILE: src/agents/sisyphus-junior/default.ts function buildDefaultSisyphusJuniorPrompt (line 13) | function buildDefaultSisyphusJuniorPrompt( function buildTodoDisciplineSection (line 48) | function buildTodoDisciplineSection(useTaskSystem: boolean): string { FILE: src/agents/sisyphus-junior/gemini.ts function buildGeminiSisyphusJuniorPrompt (line 14) | function buildGeminiSisyphusJuniorPrompt( function buildGeminiTaskDisciplineSection (line 170) | function buildGeminiTaskDisciplineSection(useTaskSystem: boolean): string { FILE: src/agents/sisyphus-junior/gpt-5-3-codex.ts function buildGpt53CodexSisyphusJuniorPrompt (line 12) | function buildGpt53CodexSisyphusJuniorPrompt( function buildGpt53CodexTaskDisciplineSection (line 134) | function buildGpt53CodexTaskDisciplineSection(useTaskSystem: boolean): s... FILE: src/agents/sisyphus-junior/gpt-5-4.ts function buildGpt54SisyphusJuniorPrompt (line 15) | function buildGpt54SisyphusJuniorPrompt( function buildGpt54TaskDisciplineSection (line 140) | function buildGpt54TaskDisciplineSection(useTaskSystem: boolean): string { FILE: src/agents/sisyphus-junior/gpt.ts function buildGptSisyphusJuniorPrompt (line 13) | function buildGptSisyphusJuniorPrompt( function buildGptTaskDisciplineSection (line 135) | function buildGptTaskDisciplineSection(useTaskSystem: boolean): string { FILE: src/agents/sisyphus.ts constant MODE (line 15) | const MODE: AgentMode = "all"; constant SISYPHUS_PROMPT_METADATA (line 16) | const SISYPHUS_PROMPT_METADATA: AgentPromptMetadata = { function buildDynamicSisyphusPrompt (line 44) | function buildDynamicSisyphusPrompt( function createSisyphusAgent (line 446) | function createSisyphusAgent( FILE: src/agents/sisyphus/default.ts function buildTaskManagementSection (line 28) | function buildTaskManagementSection(useTaskSystem: boolean): string { function buildDefaultSisyphusPrompt (line 138) | function buildDefaultSisyphusPrompt( FILE: src/agents/sisyphus/gemini.ts function buildGeminiToolMandate (line 16) | function buildGeminiToolMandate(): string { function buildGeminiToolGuide (line 42) | function buildGeminiToolGuide(): string { function buildGeminiToolCallExamples (line 97) | function buildGeminiToolCallExamples(): string { function buildGeminiDelegationOverride (line 172) | function buildGeminiDelegationOverride(): string { function buildGeminiVerificationOverride (line 189) | function buildGeminiVerificationOverride(): string { function buildGeminiIntentGateEnforcement (line 213) | function buildGeminiIntentGateEnforcement(): string { FILE: src/agents/sisyphus/gpt-5-4.ts function buildGpt54TasksSection (line 45) | function buildGpt54TasksSection(useTaskSystem: boolean): string { function buildGpt54SisyphusPrompt (line 79) | function buildGpt54SisyphusPrompt( FILE: src/agents/tool-restrictions.test.ts constant TEST_MODEL (line 9) | const TEST_MODEL = "anthropic/claude-sonnet-4-5" FILE: src/agents/types.ts type AgentMode (line 9) | type AgentMode = "primary" | "subagent" | "all"; type AgentFactory (line 15) | type AgentFactory = ((model: string) => AgentConfig) & { type AgentCategory (line 22) | type AgentCategory = type AgentCost (line 31) | type AgentCost = "FREE" | "CHEAP" | "EXPENSIVE"; type DelegationTrigger (line 36) | interface DelegationTrigger { type AgentPromptMetadata (line 47) | interface AgentPromptMetadata { function extractModelName (line 73) | function extractModelName(model: string): string { function isGptModel (line 77) | function isGptModel(model: string): boolean { function isGpt5_4Model (line 82) | function isGpt5_4Model(model: string): boolean { function isGpt5_3CodexModel (line 87) | function isGpt5_3CodexModel(model: string): boolean { constant GEMINI_PROVIDERS (line 92) | const GEMINI_PROVIDERS = ["google/", "google-vertex/"]; function isGeminiModel (line 94) | function isGeminiModel(model: string): boolean { type BuiltinAgentName (line 107) | type BuiltinAgentName = type OverridableAgentName (line 119) | type OverridableAgentName = "build" | BuiltinAgentName; type AgentName (line 121) | type AgentName = BuiltinAgentName; type AgentOverrideConfig (line 123) | type AgentOverrideConfig = Partial & { type AgentOverrides (line 129) | type AgentOverrides = Partial< FILE: src/agents/utils.test.ts constant TEST_DEFAULT_MODEL (line 11) | const TEST_DEFAULT_MODEL = "anthropic/claude-opus-4-6" function buildAgents (line 686) | async function buildAgents(disableFlag?: boolean) { function buildAgents (line 745) | async function buildAgents(disableFlag?: boolean) { FILE: src/cli/cli-installer.ts function runCliInstaller (line 25) | async function runCliInstaller(args: InstallArgs, version: string): Prom... FILE: src/cli/cli-program.ts constant VERSION (line 13) | const VERSION = packageJson.version function runCli (line 188) | function runCli(): void { FILE: src/cli/config-manager/add-plugin-to-opencode-config.ts function addPluginToOpenCodeConfig (line 11) | async function addPluginToOpenCodeConfig(currentVersion: string): Promis... FILE: src/cli/config-manager/bun-install.test.ts type CreateProcOptions (line 13) | type CreateProcOptions = { function createProc (line 23) | function createProc(options: CreateProcOptions = {}): ReturnType["stdo... type BunInstallResult (line 32) | interface BunInstallResult { function runBunInstall (line 38) | async function runBunInstall(): Promise { function readProcessOutput (line 43) | function readProcessOutput(stream: ProcessOutputStream): Promise { function logCapturedOutputOnFailure (line 51) | function logCapturedOutputOnFailure(outputMode: BunInstallOutputMode, ou... function runBunInstallWithDetails (line 68) | async function runBunInstallWithDetails(options?: RunBunInstallOptions):... FILE: src/cli/config-manager/config-context.ts type ConfigContext (line 7) | interface ConfigContext { function initConfigContext (line 15) | function initConfigContext(binary: OpenCodeBinaryType, version: string |... function getConfigContext (line 20) | function getConfigContext(): ConfigContext { function resetConfigContext (line 28) | function resetConfigContext(): void { function getConfigDir (line 32) | function getConfigDir(): string { function getConfigJson (line 36) | function getConfigJson(): string { function getConfigJsonc (line 40) | function getConfigJsonc(): string { function getOmoConfigPath (line 44) | function getOmoConfigPath(): string { FILE: src/cli/config-manager/deep-merge-record.ts function deepMergeRecord (line 1) | function deepMergeRecord>( FILE: src/cli/config-manager/detect-current-config.ts function detectProvidersFromOmoConfig (line 8) | function detectProvidersFromOmoConfig(): { function isOurPlugin (line 58) | function isOurPlugin(plugin: string): boolean { function detectCurrentConfig (line 63) | function detectCurrentConfig(): DetectedConfig { FILE: src/cli/config-manager/ensure-config-directory-exists.ts function ensureConfigDirectoryExists (line 4) | function ensureConfigDirectoryExists(): void { FILE: src/cli/config-manager/format-error-with-suggestion.ts type NodeError (line 1) | interface NodeError extends Error { function isPermissionError (line 5) | function isPermissionError(err: unknown): boolean { function isFileNotFoundError (line 10) | function isFileNotFoundError(err: unknown): boolean { function formatErrorWithSuggestion (line 15) | function formatErrorWithSuggestion(err: unknown, context: string): string { FILE: src/cli/config-manager/generate-omo-config.ts function generateOmoConfig (line 4) | function generateOmoConfig(installConfig: InstallConfig): Record { function getOpenCodeVersion (line 38) | async function getOpenCodeVersion(): Promise { FILE: src/cli/config-manager/opencode-config-format.ts type ConfigFormat (line 4) | type ConfigFormat = "json" | "jsonc" | "none" function detectConfigFormat (line 6) | function detectConfigFormat(): { format: ConfigFormat; path: string } { FILE: src/cli/config-manager/parse-opencode-config-file.ts type ParseConfigResult (line 5) | interface ParseConfigResult { type OpenCodeConfig (line 10) | interface OpenCodeConfig { function isEmptyOrWhitespace (line 15) | function isEmptyOrWhitespace(content: string): boolean { function parseOpenCodeConfigFileWithError (line 19) | function parseOpenCodeConfigFileWithError(path: string): ParseConfigResu... FILE: src/cli/config-manager/plugin-name-with-version.ts constant DEFAULT_PACKAGE_NAME (line 3) | const DEFAULT_PACKAGE_NAME = "oh-my-opencode" constant PRIORITIZED_TAGS (line 4) | const PRIORITIZED_TAGS = ["latest", "beta", "next"] as const function getFallbackEntry (line 6) | function getFallbackEntry(version: string, packageName: string): string { function getPluginNameWithVersion (line 15) | async function getPluginNameWithVersion( FILE: src/cli/config-manager/write-omo-config.test.ts function getRecord (line 23) | function getRecord(value: unknown): Record { FILE: src/cli/config-manager/write-omo-config.ts function isEmptyOrWhitespace (line 10) | function isEmptyOrWhitespace(content: string): boolean { function writeOmoConfig (line 14) | function writeOmoConfig(installConfig: InstallConfig): ConfigMergeResult { FILE: src/cli/doctor/checks/config.ts constant USER_CONFIG_BASE (line 12) | const USER_CONFIG_BASE = join(getOpenCodeConfigDir({ binary: "opencode" ... constant PROJECT_CONFIG_BASE (line 13) | const PROJECT_CONFIG_BASE = join(process.cwd(), ".opencode", PACKAGE_NAME) type ConfigValidationResult (line 15) | interface ConfigValidationResult { function findConfigPath (line 23) | function findConfigPath(): string | null { function validateConfig (line 33) | function validateConfig(): ConfigValidationResult { function collectModelResolutionIssues (line 66) | function collectModelResolutionIssues(config: OmoConfig): DoctorIssue[] { function checkConfig (line 120) | async function checkConfig(): Promise { FILE: src/cli/doctor/checks/dependencies.ts function checkBinaryExists (line 8) | async function checkBinaryExists(binary: string): Promise<{ exists: bool... function getBinaryVersion (line 20) | async function getBinaryVersion(binary: string): Promise { function checkAstGrepCli (line 34) | async function checkAstGrepCli(): Promise { function checkAstGrepNapi (line 61) | async function checkAstGrepNapi(): Promise { function findCommentCheckerPackageBinary (line 106) | function findCommentCheckerPackageBinary(): string | null { function checkCommentChecker (line 119) | async function checkCommentChecker(): Promise { FILE: src/cli/doctor/checks/index.ts function getAllCheckDefinitions (line 12) | function getAllCheckDefinitions(): CheckDefinition[] { FILE: src/cli/doctor/checks/model-resolution-cache.ts function getOpenCodeCacheDir (line 7) | function getOpenCodeCacheDir(): string { function loadAvailableModelsFromCache (line 13) | function loadAvailableModelsFromCache(): AvailableModelsInfo { FILE: src/cli/doctor/checks/model-resolution-config.ts constant PACKAGE_NAME (line 6) | const PACKAGE_NAME = "oh-my-opencode" constant USER_CONFIG_BASE (line 7) | const USER_CONFIG_BASE = join( constant PROJECT_CONFIG_BASE (line 11) | const PROJECT_CONFIG_BASE = join(process.cwd(), ".opencode", PACKAGE_NAME) function loadOmoConfig (line 13) | function loadOmoConfig(): OmoConfig | null { FILE: src/cli/doctor/checks/model-resolution-details.ts function buildModelResolutionDetails (line 7) | function buildModelResolutionDetails(options: { FILE: src/cli/doctor/checks/model-resolution-effective-model.ts function formatProviderChain (line 3) | function formatProviderChain(providers: string[]): string { function getEffectiveModel (line 7) | function getEffectiveModel(requirement: ModelRequirement, userOverride?:... function buildEffectiveResolution (line 18) | function buildEffectiveResolution(requirement: ModelRequirement, userOve... FILE: src/cli/doctor/checks/model-resolution-types.ts type AgentResolutionInfo (line 3) | interface AgentResolutionInfo { type CategoryResolutionInfo (line 12) | interface CategoryResolutionInfo { type ModelResolutionInfo (line 21) | interface ModelResolutionInfo { type OmoConfig (line 26) | interface OmoConfig { type AvailableModelsInfo (line 31) | interface AvailableModelsInfo { FILE: src/cli/doctor/checks/model-resolution-variant.ts function formatModelWithVariant (line 4) | function formatModelWithVariant(model: string, variant?: string): string { function getAgentOverride (line 8) | function getAgentOverride( function getEffectiveVariant (line 21) | function getEffectiveVariant( function getCategoryEffectiveVariant (line 44) | function getCategoryEffectiveVariant( FILE: src/cli/doctor/checks/model-resolution.ts function getModelResolutionInfo (line 10) | function getModelResolutionInfo(): ModelResolutionInfo { function getModelResolutionInfoWithOverrides (line 30) | function getModelResolutionInfoWithOverrides(config: OmoConfig): ModelRe... function checkModels (line 62) | async function checkModels(): Promise { FILE: src/cli/doctor/checks/system-binary.ts constant WINDOWS_EXECUTABLE_EXTS (line 8) | const WINDOWS_EXECUTABLE_EXTS = [".exe", ".cmd", ".bat", ".ps1"] type OpenCodeBinaryInfo (line 10) | interface OpenCodeBinaryInfo { function getDesktopAppPaths (line 15) | function getDesktopAppPaths(platform: NodeJS.Platform): string[] { function getBinaryLookupCommand (line 50) | function getBinaryLookupCommand(platform: NodeJS.Platform): "which" | "w... function parseBinaryPaths (line 54) | function parseBinaryPaths(output: string): string[] { function selectBinaryPath (line 61) | function selectBinaryPath(paths: string[], platform: NodeJS.Platform): s... function buildVersionCommand (line 76) | function buildVersionCommand(binaryPath: string, platform: NodeJS.Platfo... function findDesktopBinary (line 84) | function findDesktopBinary( function findOpenCodeBinary (line 97) | async function findOpenCodeBinary(): Promise { function getOpenCodeVersion (line 108) | async function getOpenCodeVersion( function compareVersions (line 125) | function compareVersions(current: string, minimum: string): boolean { FILE: src/cli/doctor/checks/system-loaded-version.test.ts function createTemporaryDirectory (line 17) | function createTemporaryDirectory(prefix: string): string { function writeJson (line 23) | function writeJson(filePath: string, value: Record { function checkSystem (line 53) | async function checkSystem(): Promise { FILE: src/cli/doctor/checks/tools-gh.ts type GhCliInfo (line 3) | interface GhCliInfo { function checkBinaryExists (line 13) | async function checkBinaryExists(binary: string): Promise<{ exists: bool... function getGhVersion (line 22) | async function getGhVersion(): Promise { function getGhAuthStatus (line 36) | async function getGhAuthStatus(): Promise<{ function getGhCliInfo (line 83) | async function getGhCliInfo(): Promise { FILE: src/cli/doctor/checks/tools-lsp.ts function getInstalledLspServers (line 3) | function getInstalledLspServers(): Array<{ id: string; extensions: strin... FILE: src/cli/doctor/checks/tools-mcp.ts constant BUILTIN_MCP_SERVERS (line 8) | const BUILTIN_MCP_SERVERS = ["context7", "grep_app"] type McpConfigShape (line 10) | interface McpConfigShape { function getMcpConfigPaths (line 14) | function getMcpConfigPaths(): string[] { function loadUserMcpConfig (line 22) | function loadUserMcpConfig(): Record { function getBuiltinMcpInfo (line 42) | function getBuiltinMcpInfo(): McpServerInfo[] { function getUserMcpInfo (line 51) | function getUserMcpInfo(): McpServerInfo[] { FILE: src/cli/doctor/checks/tools.ts function gatherToolsSummary (line 8) | async function gatherToolsSummary(): Promise { function buildToolIssues (line 35) | function buildToolIssues(summary: ToolsSummary): DoctorIssue[] { function checkTools (line 88) | async function checkTools(): Promise { FILE: src/cli/doctor/constants.ts constant SYMBOLS (line 3) | const SYMBOLS = { constant STATUS_COLORS (line 13) | const STATUS_COLORS = { constant CHECK_IDS (line 20) | const CHECK_IDS = { constant CHECK_NAMES (line 27) | const CHECK_NAMES: Record = { constant EXIT_CODES (line 34) | const EXIT_CODES = { constant MIN_OPENCODE_VERSION (line 39) | const MIN_OPENCODE_VERSION = "1.0.150" constant PACKAGE_NAME (line 41) | const PACKAGE_NAME = "oh-my-opencode" constant OPENCODE_BINARIES (line 43) | const OPENCODE_BINARIES = ["opencode", "opencode-desktop"] as const FILE: src/cli/doctor/format-default.test.ts function createBaseResult (line 6) | function createBaseResult(): DoctorResult { FILE: src/cli/doctor/format-default.ts function formatDefault (line 6) | function formatDefault(result: DoctorResult): string { FILE: src/cli/doctor/format-shared.ts function formatStatusSymbol (line 5) | function formatStatusSymbol(status: CheckStatus): string { function formatStatusMark (line 19) | function formatStatusMark(available: boolean): string { function stripAnsi (line 23) | function stripAnsi(str: string): string { function formatHeader (line 29) | function formatHeader(): string { function formatIssue (line 33) | function formatIssue(issue: DoctorIssue, index: number): string { FILE: src/cli/doctor/format-status.ts function formatStatus (line 5) | function formatStatus(result: DoctorResult): string { FILE: src/cli/doctor/format-verbose.ts function formatVerbose (line 5) | function formatVerbose(result: DoctorResult): string { FILE: src/cli/doctor/formatter.test.ts function createDoctorResult (line 5) | function createDoctorResult(): DoctorResult { function createDoctorResultWithIssues (line 45) | function createDoctorResultWithIssues(): DoctorResult { function createDoctorResultWithDetails (line 56) | function createDoctorResultWithDetails(): DoctorResult { FILE: src/cli/doctor/formatter.ts function formatDoctorOutput (line 6) | function formatDoctorOutput(result: DoctorResult, mode: DoctorMode): str... function formatJsonOutput (line 17) | function formatJsonOutput(result: DoctorResult): string { FILE: src/cli/doctor/index.ts function doctor (line 4) | async function doctor(options: DoctorOptions = { mode: "default" }): Pro... FILE: src/cli/doctor/runner.test.ts function createSystemInfo (line 4) | function createSystemInfo(): SystemInfo { function createTools (line 17) | function createTools(): ToolsSummary { function createPassResult (line 29) | function createPassResult(name: string): CheckResult { function createDeferred (line 33) | function createDeferred(): { FILE: src/cli/doctor/runner.ts function runCheck (line 6) | async function runCheck(check: CheckDefinition): Promise { function calculateSummary (line 23) | function calculateSummary(results: CheckResult[], duration: number): Doc... function determineExitCode (line 34) | function determineExitCode(results: CheckResult[]): number { function runDoctor (line 38) | async function runDoctor(options: DoctorOptions): Promise { FILE: src/cli/doctor/types.ts type DoctorMode (line 3) | type DoctorMode = "default" | "status" | "verbose" type DoctorOptions (line 5) | interface DoctorOptions { type DoctorIssue (line 10) | interface DoctorIssue { type CheckStatus (line 18) | type CheckStatus = "pass" | "fail" | "warn" | "skip" type CheckResult (line 20) | interface CheckResult { type CheckFunction (line 29) | type CheckFunction = () => Promise type CheckDefinition (line 31) | interface CheckDefinition { type SystemInfo (line 38) | interface SystemInfo { type ToolsSummary (line 49) | interface ToolsSummary { type DoctorSummary (line 59) | interface DoctorSummary { type DoctorResult (line 68) | interface DoctorResult { type CheckCategory (line 78) | type CheckCategory = type OpenCodeInfo (line 86) | interface OpenCodeInfo { type PluginInfo (line 93) | interface PluginInfo { type ConfigInfo (line 101) | interface ConfigInfo { type AuthProviderId (line 109) | type AuthProviderId = "anthropic" | "openai" | "google" type AuthProviderInfo (line 111) | interface AuthProviderInfo { type DependencyInfo (line 119) | interface DependencyInfo { type McpServerInfo (line 128) | interface McpServerInfo { type VersionCheckInfo (line 136) | interface VersionCheckInfo { FILE: src/cli/fallback-chain-resolution.ts function resolveModelFromChain (line 7) | function resolveModelFromChain( function getSisyphusFallbackChain (line 25) | function getSisyphusFallbackChain(): FallbackEntry[] { function isAnyFallbackEntryAvailable (line 29) | function isAnyFallbackEntryAvailable( function isRequiredModelAvailable (line 38) | function isRequiredModelAvailable( function isRequiredProviderAvailable (line 48) | function isRequiredProviderAvailable( FILE: src/cli/get-local-version/formatter.ts constant SYMBOLS (line 4) | const SYMBOLS = { function formatVersionOutput (line 14) | function formatVersionOutput(info: VersionInfo): string { function formatJsonOutput (line 64) | function formatJsonOutput(info: VersionInfo): string { FILE: src/cli/get-local-version/get-local-version.ts function getLocalVersion (line 12) | async function getLocalVersion( FILE: src/cli/get-local-version/types.ts type VersionInfo (line 1) | interface VersionInfo { type GetLocalVersionOptions (line 11) | interface GetLocalVersionOptions { FILE: src/cli/install-validators.test.ts function createArgs (line 6) | function createArgs(overrides: Partial = {}): InstallArgs { FILE: src/cli/install-validators.ts constant SYMBOLS (line 10) | const SYMBOLS = { constant ANSI_COLOR_PATTERN (line 20) | const ANSI_COLOR_PATTERN = new RegExp("\u001b\\[[0-9;]*m", "g") function formatProvider (line 22) | function formatProvider(name: string, enabled: boolean, detail?: string)... function formatConfigSummary (line 29) | function formatConfigSummary(config: InstallConfig): string { function printHeader (line 56) | function printHeader(isUpdate: boolean): void { function printStep (line 63) | function printStep(step: number, total: number, message: string): void { function printSuccess (line 68) | function printSuccess(message: string): void { function printError (line 72) | function printError(message: string): void { function printInfo (line 76) | function printInfo(message: string): void { function printWarning (line 80) | function printWarning(message: string): void { function printBox (line 84) | function printBox(content: string, title?: string): void { function validateNonTuiArgs (line 115) | function validateNonTuiArgs(args: InstallArgs): { valid: boolean; errors... function argsToConfig (line 159) | function argsToConfig(args: InstallArgs): InstallConfig { function detectedToInitialValues (line 173) | function detectedToInitialValues(detected: DetectedConfig): { FILE: src/cli/install.ts constant VERSION (line 6) | const VERSION = packageJson.version function install (line 8) | async function install(args: InstallArgs): Promise { FILE: src/cli/mcp-oauth/index.ts function createMcpOAuthCommand (line 6) | function createMcpOAuthCommand(): Command { FILE: src/cli/mcp-oauth/login.test.ts method constructor (line 7) | constructor(public options: { serverUrl: string; clientId?: string; scop... method login (line 8) | async login() { FILE: src/cli/mcp-oauth/login.ts type LoginOptions (line 3) | interface LoginOptions { function login (line 9) | async function login(serverName: string, options: LoginOptions): Promise... FILE: src/cli/mcp-oauth/logout.ts type LogoutOptions (line 3) | interface LogoutOptions { function logout (line 7) | async function logout(serverName: string, options?: LogoutOptions): Prom... FILE: src/cli/mcp-oauth/status.ts function status (line 3) | async function status(serverName: string | undefined): Promise { FILE: src/cli/model-fallback-requirements.ts constant CLI_AGENT_MODEL_REQUIREMENTS (line 7) | const CLI_AGENT_MODEL_REQUIREMENTS: Record = A... constant CLI_CATEGORY_MODEL_REQUIREMENTS (line 9) | const CLI_CATEGORY_MODEL_REQUIREMENTS: Record ... FILE: src/cli/model-fallback-types.ts type ProviderAvailability (line 1) | interface ProviderAvailability { type AgentConfig (line 15) | interface AgentConfig { type CategoryConfig (line 20) | interface CategoryConfig { type GeneratedOmoConfig (line 25) | interface GeneratedOmoConfig { FILE: src/cli/model-fallback.test.ts function createConfig (line 6) | function createConfig(overrides: Partial = {}): InstallCo... FILE: src/cli/model-fallback.ts constant ZAI_MODEL (line 20) | const ZAI_MODEL = "zai-coding-plan/glm-4.7" constant ULTIMATE_FALLBACK (line 22) | const ULTIMATE_FALLBACK = "opencode/gpt-5-nano" constant SCHEMA_URL (line 23) | const SCHEMA_URL = "https://raw.githubusercontent.com/code-yeongyu/oh-my... function generateModelConfig (line 27) | function generateModelConfig(config: InstallConfig): GeneratedOmoConfig { function shouldShowChatGPTOnlyWarning (line 143) | function shouldShowChatGPTOnlyWarning(config: InstallConfig): boolean { FILE: src/cli/openai-only-model-catalog.test.ts function createConfig (line 6) | function createConfig(overrides: Partial = {}): InstallCo... FILE: src/cli/openai-only-model-catalog.ts constant OPENAI_ONLY_AGENT_OVERRIDES (line 3) | const OPENAI_ONLY_AGENT_OVERRIDES: Record = { constant OPENAI_ONLY_CATEGORY_OVERRIDES (line 8) | const OPENAI_ONLY_CATEGORY_OVERRIDES: Record = { function isOpenAiOnlyAvailability (line 15) | function isOpenAiOnlyAvailability(availability: ProviderAvailability): b... function applyOpenAiOnlyModelCatalog (line 28) | function applyOpenAiOnlyModelCatalog(config: GeneratedOmoConfig): Genera... FILE: src/cli/provider-availability.ts function toProviderAvailability (line 4) | function toProviderAvailability(config: InstallConfig): ProviderAvailabi... function isProviderAvailable (line 20) | function isProviderAvailable(provider: string, availability: ProviderAva... FILE: src/cli/run/agent-profile-colors.ts type AgentProfile (line 4) | interface AgentProfile { function loadAgentProfileColors (line 9) | async function loadAgentProfileColors( FILE: src/cli/run/agent-resolver.ts constant CORE_AGENT_ORDER (line 6) | const CORE_AGENT_ORDER = ["sisyphus", "hephaestus", "prometheus", "atlas... constant DEFAULT_AGENT (line 7) | const DEFAULT_AGENT = "sisyphus" type EnvVars (line 9) | type EnvVars = Record type CoreAgentKey (line 10) | type CoreAgentKey = (typeof CORE_AGENT_ORDER)[number] type ResolvedAgent (line 12) | interface ResolvedAgent { FILE: src/cli/run/completion-continuation.test.ts function createTempDir (line 19) | function createTempDir(): string { function createMockContext (line 25) | function createMockContext(directory: string): RunContext { function writeBoulderStateFile (line 40) | function writeBoulderStateFile(directory: string, activePlanPath: string... FILE: src/cli/run/completion.ts function checkCompletionConditions (line 9) | async function checkCompletionConditions(ctx: RunContext): Promise { function areAllChildrenIdle (line 74) | async function areAllChildrenIdle(ctx: RunContext): Promise { function fetchAllStatuses (line 79) | async function fetchAllStatuses( function areAllDescendantsIdle (line 88) | async function areAllDescendantsIdle( function logWaiting (line 119) | function logWaiting(ctx: RunContext, message: string): void { FILE: src/cli/run/continuation-state-marker.test.ts function createTempDir (line 10) | function createTempDir(): string { FILE: src/cli/run/continuation-state.ts type ContinuationState (line 9) | interface ContinuationState { function getContinuationState (line 18) | function getContinuationState(directory: string, sessionID: string): Con... function hasActiveBoulderContinuation (line 31) | function hasActiveBoulderContinuation(directory: string, sessionID: stri... function hasActiveRalphLoopContinuation (line 40) | function hasActiveRalphLoopContinuation(directory: string, sessionID: st... FILE: src/cli/run/event-formatting.ts function serializeError (line 13) | function serializeError(error: unknown): string { function getSessionTag (line 58) | function getSessionTag(ctx: RunContext, payload: EventPayload): string { function logEventVerbose (line 72) | function logEventVerbose(ctx: RunContext, payload: EventPayload): void { FILE: src/cli/run/event-handlers.ts function getSessionId (line 26) | function getSessionId(props?: { sessionID?: string; sessionId?: string }... function getInfoSessionId (line 30) | function getInfoSessionId(props?: { function getPartSessionId (line 36) | function getPartSessionId(props?: { function getPartMessageId (line 42) | function getPartMessageId(props?: { function getDeltaMessageId (line 48) | function getDeltaMessageId(props?: { function renderCompletionMetaLine (line 54) | function renderCompletionMetaLine(state: EventState, messageID: string):... function handleSessionIdle (line 67) | function handleSessionIdle(ctx: RunContext, payload: EventPayload, state... function handleSessionStatus (line 76) | function handleSessionStatus(ctx: RunContext, payload: EventPayload, sta... function handleSessionError (line 91) | function handleSessionError(ctx: RunContext, payload: EventPayload, stat... function handleMessagePartUpdated (line 102) | function handleMessagePartUpdated(ctx: RunContext, payload: EventPayload... function handleMessagePartDelta (line 163) | function handleMessagePartDelta(ctx: RunContext, payload: EventPayload, ... function handleToolPart (line 201) | function handleToolPart( function handleMessageUpdated (line 233) | function handleMessageUpdated(ctx: RunContext, payload: EventPayload, st... function handleToolExecute (line 278) | function handleToolExecute(ctx: RunContext, payload: EventPayload, state... function handleToolResult (line 297) | function handleToolResult(ctx: RunContext, payload: EventPayload, state:... function handleTuiToast (line 320) | function handleTuiToast(_ctx: RunContext, payload: EventPayload, state: ... function ensureThinkBlockOpen (line 336) | function ensureThinkBlockOpen(state: EventState): void { function closeThinkBlockIfNeeded (line 344) | function closeThinkBlockIfNeeded(state: EventState): void { FILE: src/cli/run/event-state.ts type EventState (line 1) | interface EventState { function createEventState (line 50) | function createEventState(): EventState { FILE: src/cli/run/event-stream-processor.ts function processEvents (line 17) | async function processEvents( FILE: src/cli/run/integration.test.ts type MockWriteStream (line 40) | interface MockWriteStream { function createMockWriteStream (line 45) | function createMockWriteStream(): MockWriteStream { FILE: src/cli/run/json-output.test.ts type MockWriteStream (line 5) | interface MockWriteStream { function createMockWriteStream (line 10) | function createMockWriteStream(): MockWriteStream { FILE: src/cli/run/json-output.ts type JsonOutputManager (line 3) | interface JsonOutputManager { type JsonOutputManagerOptions (line 9) | interface JsonOutputManagerOptions { function createJsonOutputManager (line 14) | function createJsonOutputManager( FILE: src/cli/run/message-part-delta.test.ts function stripAnsi (line 6) | function stripAnsi(str: string): string { FILE: src/cli/run/model-resolver.ts function resolveRunModel (line 1) | function resolveRunModel( FILE: src/cli/run/on-complete-hook.test.ts function createStream (line 7) | function createStream(text: string): ReadableStream | undefi... function createProc (line 21) | function createProc(exitCode: number, output?: { stdout?: string; stderr... FILE: src/cli/run/on-complete-hook.ts function readOutput (line 4) | async function readOutput( function executeOnCompleteHook (line 23) | async function executeOnCompleteHook(options: { FILE: src/cli/run/opencode-binary-resolver.ts constant OPENCODE_COMMANDS (line 4) | const OPENCODE_COMMANDS = ["opencode", "opencode-desktop"] as const constant WINDOWS_SUFFIXES (line 5) | const WINDOWS_SUFFIXES = ["", ".exe", ".cmd", ".bat", ".ps1"] as const function getCommandCandidates (line 7) | function getCommandCandidates(platform: NodeJS.Platform): string[] { function collectCandidateBinaryPaths (line 15) | function collectCandidateBinaryPaths( function canExecuteBinary (line 43) | async function canExecuteBinary(binaryPath: string): Promise { function findWorkingOpencodeBinary (line 56) | async function findWorkingOpencodeBinary( function buildPathWithBinaryFirst (line 71) | function buildPathWithBinaryFirst(pathEnv: string | undefined, binaryPat... function withWorkingOpencodePath (line 79) | async function withWorkingOpencodePath( FILE: src/cli/run/output-renderer.ts function renderAgentHeader (line 3) | function renderAgentHeader( function openThinkBlock (line 31) | function openThinkBlock(): void { function closeThinkBlock (line 35) | function closeThinkBlock(): void { function writePaddedText (line 39) | function writePaddedText( function colorizeWithProfileColor (line 70) | function colorizeWithProfileColor(text: string, hexColor?: string): stri... function parseHexColor (line 80) | function parseHexColor(hexColor: string): [number, number, number] | null { FILE: src/cli/run/poll-for-completion.test.ts function abortAfter (line 36) | function abortAfter(abortController: AbortController, delayMs: number): ... FILE: src/cli/run/poll-for-completion.ts constant DEFAULT_POLL_INTERVAL_MS (line 7) | const DEFAULT_POLL_INTERVAL_MS = 500 constant DEFAULT_REQUIRED_CONSECUTIVE (line 8) | const DEFAULT_REQUIRED_CONSECUTIVE = 1 constant ERROR_GRACE_CYCLES (line 9) | const ERROR_GRACE_CYCLES = 3 constant MIN_STABILIZATION_MS (line 10) | const MIN_STABILIZATION_MS = 1_000 constant DEFAULT_EVENT_WATCHDOG_MS (line 11) | const DEFAULT_EVENT_WATCHDOG_MS = 30_000 // 30 seconds constant DEFAULT_SECONDARY_MEANINGFUL_WORK_TIMEOUT_MS (line 12) | const DEFAULT_SECONDARY_MEANINGFUL_WORK_TIMEOUT_MS = 60_000 // 60 seconds type PollOptions (line 14) | interface PollOptions { function pollForCompletion (line 22) | async function pollForCompletion( function getMainSessionStatus (line 200) | async function getMainSessionStatus( FILE: src/cli/run/runner.ts constant EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS (line 18) | const EVENT_PROCESSOR_SHUTDOWN_TIMEOUT_MS = 2_000 function waitForEventProcessorShutdown (line 20) | async function waitForEventProcessorShutdown( function run (line 32) | async function run(options: RunOptions): Promise { FILE: src/cli/run/server-connection.ts function isPortStartFailure (line 7) | function isPortStartFailure(error: unknown, port: number): boolean { function isPortRangeExhausted (line 15) | function isPortRangeExhausted(error: unknown): boolean { function startServer (line 23) | async function startServer(options: { signal: AbortSignal, port: number ... function createServerConnection (line 33) | async function createServerConnection(options: { FILE: src/cli/run/session-resolver.ts constant SESSION_CREATE_MAX_RETRIES (line 5) | const SESSION_CREATE_MAX_RETRIES = 3 constant SESSION_CREATE_RETRY_DELAY_MS (line 6) | const SESSION_CREATE_RETRY_DELAY_MS = 1000 function resolveSession (line 8) | async function resolveSession(options: { FILE: src/cli/run/stdin-suppression.test.ts type FakeStdin (line 5) | type FakeStdin = EventEmitter & { function createFakeStdin (line 14) | function createFakeStdin(options: { FILE: src/cli/run/stdin-suppression.ts type StdinLike (line 1) | type StdinLike = { function includesCtrlC (line 12) | function includesCtrlC(chunk: string | Uint8Array): boolean { function suppressRunInput (line 17) | function suppressRunInput( FILE: src/cli/run/timestamp-output.test.ts type MockWriteStream (line 6) | interface MockWriteStream { function createMockWriteStream (line 15) | function createMockWriteStream(): MockWriteStream { FILE: src/cli/run/timestamp-output.ts function formatTimestamp (line 1) | function formatTimestamp(date: Date): string { function createTimestampTransformer (line 8) | function createTimestampTransformer(now: () => Date = () => new Date()):... type WriteFn (line 33) | type WriteFn = NodeJS.WriteStream["write"] function createTimestampedStdoutController (line 35) | function createTimestampedStdoutController(stdout: NodeJS.WriteStream = ... FILE: src/cli/run/tool-input-preview.ts type ToolHeader (line 1) | interface ToolHeader { function formatToolHeader (line 7) | function formatToolHeader(toolName: string, input: Record, exclude: string... function str (line 140) | function str(value: unknown): string | undefined { FILE: src/cli/run/types.ts type RunOptions (line 4) | interface RunOptions { type ServerConnection (line 18) | interface ServerConnection { type RunResult (line 23) | interface RunResult { type RunContext (line 31) | interface RunContext { type Todo (line 39) | interface Todo { type SessionStatus (line 46) | interface SessionStatus { type ChildSession (line 50) | interface ChildSession { type EventPayload (line 54) | interface EventPayload { type SessionIdleProps (line 59) | interface SessionIdleProps { type SessionStatusProps (line 64) | interface SessionStatusProps { type MessageUpdatedProps (line 70) | interface MessageUpdatedProps { type MessagePartUpdatedProps (line 83) | interface MessagePartUpdatedProps { type MessagePartDeltaProps (line 103) | interface MessagePartDeltaProps { type ToolExecuteProps (line 112) | interface ToolExecuteProps { type ToolResultProps (line 119) | interface ToolResultProps { type SessionErrorProps (line 126) | interface SessionErrorProps { type TuiToastShowProps (line 132) | interface TuiToastShowProps { FILE: src/cli/tui-install-prompts.ts function selectOrCancel (line 10) | async function selectOrCancel type BuiltinSkillName (line 45) | type BuiltinSkillName = z.infer FILE: src/config/schema/agent-overrides.ts type AgentOverrideConfig (line 77) | type AgentOverrideConfig = z.infer type AgentOverrides (line 78) | type AgentOverrides = z.infer FILE: src/config/schema/babysitting.ts type BabysittingConfig (line 7) | type BabysittingConfig = z.infer FILE: src/config/schema/background-task.ts type BackgroundTaskConfig (line 25) | type BackgroundTaskConfig = z.infer FILE: src/config/schema/browser-automation.ts type BrowserAutomationProvider (line 21) | type BrowserAutomationProvider = z.infer< type BrowserAutomationConfig (line 24) | type BrowserAutomationConfig = z.infer type CategoriesConfig (line 44) | type CategoriesConfig = z.infer type BuiltinCategoryName (line 45) | type BuiltinCategoryName = z.infer FILE: src/config/schema/claude-code.ts type ClaudeCodeConfig (line 13) | type ClaudeCodeConfig = z.infer FILE: src/config/schema/commands.ts type BuiltinCommandName (line 13) | type BuiltinCommandName = z.infer FILE: src/config/schema/comment-checker.ts type CommentCheckerConfig (line 8) | type CommentCheckerConfig = z.infer FILE: src/config/schema/dynamic-context-pruning.ts type DynamicContextPruningConfig (line 53) | type DynamicContextPruningConfig = z.infer< FILE: src/config/schema/experimental.ts type ExperimentalConfig (line 26) | type ExperimentalConfig = z.infer FILE: src/config/schema/fallback-models.ts type FallbackModels (line 5) | type FallbackModels = z.infer FILE: src/config/schema/git-env-prefix.ts constant GIT_ENV_ASSIGNMENT_PATTERN (line 3) | const GIT_ENV_ASSIGNMENT_PATTERN = constant GIT_ENV_PREFIX_VALIDATION_MESSAGE (line 6) | const GIT_ENV_PREFIX_VALIDATION_MESSAGE = function isValidGitEnvPrefix (line 9) | function isValidGitEnvPrefix(value: string): boolean { function assertValidGitEnvPrefix (line 17) | function assertValidGitEnvPrefix(value: string): string { FILE: src/config/schema/git-master.ts type GitMasterConfig (line 14) | type GitMasterConfig = z.infer FILE: src/config/schema/hooks.ts type HookName (line 56) | type HookName = z.infer FILE: src/config/schema/internal/permission.ts type PermissionValue (line 4) | type PermissionValue = z.infer type AgentPermission (line 20) | type AgentPermission = z.infer FILE: src/config/schema/notification.ts type NotificationConfig (line 8) | type NotificationConfig = z.infer FILE: src/config/schema/oh-my-opencode-config.ts type OhMyOpenCodeConfig (line 71) | type OhMyOpenCodeConfig = z.infer FILE: src/config/schema/openclaw.ts type OpenClawConfig (line 47) | type OpenClawConfig = z.infer type OpenClawGateway (line 48) | type OpenClawGateway = z.infer type OpenClawHook (line 49) | type OpenClawHook = z.infer type OpenClawReplyListenerConfig (line 50) | type OpenClawReplyListenerConfig = z.infer FILE: src/config/schema/runtime-fallback.ts type RuntimeFallbackConfig (line 18) | type RuntimeFallbackConfig = z.infer FILE: src/config/schema/sisyphus-agent.ts type SisyphusAgentConfig (line 10) | type SisyphusAgentConfig = z.infer FILE: src/config/schema/sisyphus.ts type SisyphusTasksConfig (line 16) | type SisyphusTasksConfig = z.infer type SisyphusConfig (line 17) | type SisyphusConfig = z.infer FILE: src/config/schema/skills.ts type SkillsConfig (line 38) | type SkillsConfig = z.infer type SkillDefinition (line 39) | type SkillDefinition = z.infer FILE: src/config/schema/start-work.ts type StartWorkConfig (line 8) | type StartWorkConfig = z.infer FILE: src/config/schema/tmux.ts type TmuxConfig (line 19) | type TmuxConfig = z.infer type TmuxLayout (line 20) | type TmuxLayout = z.infer FILE: src/config/schema/websearch.ts type WebsearchProvider (line 14) | type WebsearchProvider = z.infer type WebsearchConfig (line 15) | type WebsearchConfig = z.infer FILE: src/create-hooks.ts type CreatedHooks (line 12) | type CreatedHooks = ReturnType type DisposableHook (line 14) | type DisposableHook = { dispose?: () => void } | null | undefined type DisposableCreatedHooks (line 16) | type DisposableCreatedHooks = { function disposeCreatedHooks (line 22) | function disposeCreatedHooks(hooks: DisposableCreatedHooks): void { function createHooks (line 28) | function createHooks(args: { FILE: src/create-managers.ts type Managers (line 13) | type Managers = { function createManagers (line 20) | function createManagers(args: { FILE: src/create-tools.ts type CreateToolsResult (line 12) | type CreateToolsResult = { function createTools (line 22) | async function createTools(args: { FILE: src/features/background-agent/background-task-notification-template.ts type BackgroundTaskNotificationStatus (line 3) | type BackgroundTaskNotificationStatus = "COMPLETED" | "CANCELLED" | "INT... function buildBackgroundTaskNotificationText (line 5) | function buildBackgroundTaskNotificationText(input: { FILE: src/features/background-agent/cancel-task-cleanup.test.ts function createBackgroundManager (line 14) | function createBackgroundManager(config?: { defaultConcurrency?: number ... function createMockTask (line 37) | function createMockTask(overrides: Partial & { id: strin... function getTaskMap (line 58) | function getTaskMap(manager: BackgroundManager): Map { method release (line 71) | release(model: string): void { method cancelWaiters (line 99) | cancelWaiters(model: string): void { method clear (line 116) | clear(): void { method getCount (line 127) | getCount(model: string): number { method getQueueLength (line 134) | getQueueLength(model: string): number { FILE: src/features/background-agent/constants.ts constant TASK_TTL_MS (line 4) | const TASK_TTL_MS = 30 * 60 * 1000 constant TERMINAL_TASK_TTL_MS (line 5) | const TERMINAL_TASK_TTL_MS = 30 * 60 * 1000 constant MIN_STABILITY_TIME_MS (line 6) | const MIN_STABILITY_TIME_MS = 10 * 1000 constant DEFAULT_STALE_TIMEOUT_MS (line 7) | const DEFAULT_STALE_TIMEOUT_MS = 1_200_000 constant DEFAULT_MESSAGE_STALENESS_TIMEOUT_MS (line 8) | const DEFAULT_MESSAGE_STALENESS_TIMEOUT_MS = 1_800_000 constant DEFAULT_MAX_TOOL_CALLS (line 9) | const DEFAULT_MAX_TOOL_CALLS = 4000 constant DEFAULT_CIRCUIT_BREAKER_CONSECUTIVE_THRESHOLD (line 10) | const DEFAULT_CIRCUIT_BREAKER_CONSECUTIVE_THRESHOLD = 20 constant DEFAULT_CIRCUIT_BREAKER_ENABLED (line 11) | const DEFAULT_CIRCUIT_BREAKER_ENABLED = true constant MIN_RUNTIME_BEFORE_STALE_MS (line 12) | const MIN_RUNTIME_BEFORE_STALE_MS = 30_000 constant MIN_IDLE_TIME_MS (line 13) | const MIN_IDLE_TIME_MS = 5000 constant POLLING_INTERVAL_MS (line 14) | const POLLING_INTERVAL_MS = 3000 constant TASK_CLEANUP_DELAY_MS (line 15) | const TASK_CLEANUP_DELAY_MS = 10 * 60 * 1000 constant TMUX_CALLBACK_DELAY_MS (line 16) | const TMUX_CALLBACK_DELAY_MS = 200 type ProcessCleanupEvent (line 18) | type ProcessCleanupEvent = NodeJS.Signals | "beforeExit" | "exit" type OpencodeClient (line 20) | type OpencodeClient = PluginInput["client"] type MessagePartInfo (line 22) | interface MessagePartInfo { type EventProperties (line 28) | interface EventProperties { type BackgroundEvent (line 34) | interface BackgroundEvent { type Todo (line 39) | interface Todo { type QueueItem (line 46) | interface QueueItem { type SubagentSessionCreatedEvent (line 51) | interface SubagentSessionCreatedEvent { type OnSubagentSessionCreated (line 57) | type OnSubagentSessionCreated = (event: SubagentSessionCreatedEvent) => ... FILE: src/features/background-agent/default-message-staleness-timeout.test.ts function createRunningTask (line 8) | function createRunningTask(startedAt: Date): BackgroundTask { FILE: src/features/background-agent/duration-formatter.ts function formatDuration (line 1) | function formatDuration(start: Date, end?: Date): string { FILE: src/features/background-agent/error-classifier.ts function isRecord (line 1) | function isRecord(value: unknown): value is Record { function isAbortedSessionError (line 5) | function isAbortedSessionError(error: unknown): boolean { function getErrorText (line 10) | function getErrorText(error: unknown): string { function extractErrorName (line 27) | function extractErrorName(error: unknown): string | undefined { function extractErrorMessage (line 33) | function extractErrorMessage(error: unknown): string | undefined { type EventPropertiesLike (line 67) | interface EventPropertiesLike { function getSessionErrorMessage (line 71) | function getSessionErrorMessage(properties: EventPropertiesLike): string... FILE: src/features/background-agent/fallback-retry-handler.test.ts function createMockTask (line 25) | function createMockTask(overrides: Partial = {}): Backgr... function createMockConcurrencyManager (line 45) | function createMockConcurrencyManager(): ConcurrencyManager { function createMockClient (line 54) | function createMockClient() { function createDefaultArgs (line 62) | function createDefaultArgs(taskOverrides: Partial = {}) { FILE: src/features/background-agent/fallback-retry-handler.ts function tryFallbackRetry (line 14) | function tryFallbackRetry(args: { FILE: src/features/background-agent/loop-detector.test.ts function buildWindow (line 9) | function buildWindow( function buildWindowWithInputs (line 21) | function buildWindowWithInputs( FILE: src/features/background-agent/loop-detector.ts type CircuitBreakerSettings (line 9) | interface CircuitBreakerSettings { type ToolLoopDetectionResult (line 15) | interface ToolLoopDetectionResult { function resolveCircuitBreakerSettings (line 21) | function resolveCircuitBreakerSettings( function recordToolCall (line 33) | function recordToolCall( function sortObject (line 56) | function sortObject(obj: unknown): unknown { function createToolCallSignature (line 69) | function createToolCallSignature( function detectRepetitiveToolUse (line 82) | function detectRepetitiveToolUse( FILE: src/features/background-agent/manager-circuit-breaker.test.ts function createManager (line 8) | function createManager(config?: BackgroundTaskConfig): BackgroundManager { function getTaskMap (line 32) | function getTaskMap(manager: BackgroundManager): Map & { id: string; s... function createBackgroundManager (line 22) | function createBackgroundManager(): BackgroundManager { FILE: src/features/background-agent/manager.polling.test.ts function createManagerWithStatus (line 7) | function createManagerWithStatus(statusImpl: () => Promise<{ data: Recor... function createRunningTask (line 57) | function createRunningTask(sessionID: string): BackgroundTask { function injectTask (line 72) | function injectTask(manager: BackgroundManager, task: BackgroundTask): v... function createManagerWithClient (line 77) | function createManagerWithClient(clientOverrides: Record & { id: strin... function createBackgroundManager (line 171) | function createBackgroundManager(): BackgroundManager { function getConcurrencyManager (line 182) | function getConcurrencyManager(manager: BackgroundManager): ConcurrencyM... function getTaskMap (line 186) | function getTaskMap(manager: BackgroundManager): Map { function createToastRemoveTaskTracker (line 233) | function createToastRemoveTaskTracker(): { removeTaskCalls: string[]; re... function getCleanupSignals (line 250) | function getCleanupSignals(): Array & { noReply?: boolean } function createMockClient (line 1734) | function createMockClient() { function createMockClientWithSessionChain (line 1749) | function createMockClientWithSessionChain( function setCompletionTimer (line 4013) | function setCompletionTimer(manager: BackgroundManager, taskId: string):... FILE: src/features/background-agent/manager.ts type OpencodeClient (line 71) | type OpencodeClient = PluginInput["client"] type MessagePartInfo (line 74) | interface MessagePartInfo { type EventProperties (line 82) | interface EventProperties { type Event (line 88) | interface Event { function resolveMessagePartInfo (line 93) | function resolveMessagePartInfo(properties: EventProperties | undefined)... type Todo (line 106) | interface Todo { type QueueItem (line 113) | interface QueueItem { type SubagentSessionCreatedEvent (line 118) | interface SubagentSessionCreatedEvent { type OnSubagentSessionCreated (line 124) | type OnSubagentSessionCreated = (event: SubagentSessionCreatedEvent) => ... constant MAX_TASK_REMOVAL_RESCHEDULES (line 126) | const MAX_TASK_REMOVAL_RESCHEDULES = 6 class BackgroundManager (line 128) | class BackgroundManager { method constructor (line 158) | constructor( method assertCanSpawn (line 185) | async assertCanSpawn(parentSessionID: string): Promise { method processKey (line 359) | private async processKey(key: string): Promise { method startTask (line 400) | private async startTask(item: QueueItem): Promise { method getTask (line 566) | getTask(id: string): BackgroundTask | undefined { method getTasksByParentSession (line 570) | getTasksByParentSession(sessionID: string): BackgroundTask[] { method getAllDescendantTasks (line 580) | getAllDescendantTasks(sessionID: string): BackgroundTask[] { method findBySession (line 595) | findBySession(sessionID: string): BackgroundTask | undefined { method getConcurrencyKeyFromInput (line 604) | private getConcurrencyKeyFromInput(input: LaunchInput): string { method trackTask (line 615) | async trackTask(input: { method resume (line 702) | async resume(input: ResumeInput): Promise { method checkSessionTodos (line 841) | private async checkSessionTodos(sessionID: string): Promise { method handleEvent (line 858) | handleEvent(event: Event): void { method tryFallbackRetry (line 1120) | private tryFallbackRetry( method markForNotification (line 1142) | markForNotification(task: BackgroundTask): void { method getPendingNotifications (line 1148) | getPendingNotifications(sessionID: string): BackgroundTask[] { method clearNotifications (line 1152) | clearNotifications(sessionID: string): void { method queuePendingNotification (line 1156) | queuePendingNotification(sessionID: string | undefined, notification: ... method injectPendingNotificationsIntoChatMessage (line 1163) | injectPendingNotificationsIntoChatMessage(output: { parts: Array<{ typ... method validateSessionHasOutput (line 1186) | private async validateSessionHasOutput(sessionID: string): Promise { method hasRunningTasks (line 1687) | private hasRunningTasks(): boolean { method pruneStaleTasksAndNotifications (line 1694) | private pruneStaleTasksAndNotifications(): void { method checkAndInterruptStaleTasks (line 1744) | private async checkAndInterruptStaleTasks( method pollRunningTasks (line 1757) | private async pollRunningTasks(): Promise { method shutdown (line 1855) | async shutdown(): Promise { method enqueueNotificationForParent (line 1923) | private enqueueNotificationForParent( FILE: src/features/background-agent/opencode-client.ts type OpencodeClient (line 3) | type OpencodeClient = PluginInput["client"] FILE: src/features/background-agent/process-cleanup.ts type ProcessCleanupEvent (line 3) | type ProcessCleanupEvent = NodeJS.Signals | "beforeExit" | "exit" function registerProcessSignal (line 5) | function registerProcessSignal( type CleanupTarget (line 21) | interface CleanupTarget { function registerManagerForCleanup (line 29) | function registerManagerForCleanup(manager: CleanupTarget): void { function unregisterManagerForCleanup (line 61) | function unregisterManagerForCleanup(manager: CleanupTarget): void { function _resetForTesting (line 74) | function _resetForTesting(): void { FILE: src/features/background-agent/remove-task-toast-tracking.ts function removeTaskToastTracking (line 3) | function removeTaskToastTracking(taskId: string): void { FILE: src/features/background-agent/session-idle-event-handler.test.ts function createRunningTask (line 7) | function createRunningTask(overrides: Partial = {}): Bac... FILE: src/features/background-agent/session-idle-event-handler.ts function getString (line 5) | function getString(obj: Record, key: string): string | ... function handleSessionIdleBackgroundEvent (line 10) | function handleSessionIdleBackgroundEvent(args: { FILE: src/features/background-agent/session-status-classifier.ts constant ACTIVE_SESSION_STATUSES (line 3) | const ACTIVE_SESSION_STATUSES = new Set(["busy", "retry", "running"]) constant KNOWN_TERMINAL_STATUSES (line 4) | const KNOWN_TERMINAL_STATUSES = new Set(["idle", "interrupted"]) function isActiveSessionStatus (line 6) | function isActiveSessionStatus(type: string): boolean { function isTerminalSessionStatus (line 18) | function isTerminalSessionStatus(type: string): boolean { FILE: src/features/background-agent/spawner.ts type SpawnerContext (line 10) | interface SpawnerContext { function createTask (line 19) | function createTask(input: LaunchInput): BackgroundTask { function startTask (line 35) | async function startTask( function resumeTask (line 156) | async function resumeTask( FILE: src/features/background-agent/spawner/parent-directory-resolver.ts function resolveParentDirectory (line 4) | async function resolveParentDirectory(options: { FILE: src/features/background-agent/state.ts class TaskStateManager (line 5) | class TaskStateManager { method getTask (line 12) | getTask(id: string): BackgroundTask | undefined { method findBySession (line 15) | findBySession(sessionID: string): BackgroundTask | undefined { method getTasksByParentSession (line 23) | getTasksByParentSession(sessionID: string): BackgroundTask[] { method getAllDescendantTasks (line 33) | getAllDescendantTasks(sessionID: string): BackgroundTask[] { method getRunningTasks (line 48) | getRunningTasks(): BackgroundTask[] { method getNonRunningTasks (line 51) | getNonRunningTasks(): BackgroundTask[] { method hasRunningTasks (line 55) | hasRunningTasks(): boolean { method getConcurrencyKeyFromInput (line 62) | getConcurrencyKeyFromInput(input: LaunchInput): string { method getConcurrencyKeyFromTask (line 69) | getConcurrencyKeyFromTask(task: BackgroundTask): string { method addTask (line 76) | addTask(task: BackgroundTask): void { method removeTask (line 80) | removeTask(taskId: string): void { method trackPendingTask (line 88) | trackPendingTask(parentSessionID: string, taskId: string): void { method cleanupPendingByParent (line 94) | cleanupPendingByParent(task: BackgroundTask): void { method markForNotification (line 105) | markForNotification(task: BackgroundTask): void { method getPendingNotifications (line 111) | getPendingNotifications(sessionID: string): BackgroundTask[] { method clearNotifications (line 115) | clearNotifications(sessionID: string): void { method clearNotificationsForTask (line 119) | clearNotificationsForTask(taskId: string): void { method addToQueue (line 130) | addToQueue(key: string, item: QueueItem): void { method getQueue (line 136) | getQueue(key: string): QueueItem[] | undefined { method removeFromQueue (line 140) | removeFromQueue(key: string, taskId: string): boolean { method setCompletionTimer (line 154) | setCompletionTimer(taskId: string, timer: ReturnType & { id: string; p... function createManager (line 50) | function createManager(enableParentSessionNotifications: boolean): { function installFakeTimers (line 86) | function installFakeTimers(): FakeTimers { function getTasks (line 131) | function getTasks(manager: BackgroundManager): Map & { id: string; p... function getTaskMap (line 54) | function getTaskMap(manager: BackgroundManager): Map = {}): Bac... function createTerminalTask (line 473) | function createTerminalTask(overrides: Partial = {}): Ba... FILE: src/features/background-agent/task-poller.ts constant TERMINAL_TASK_STATUSES (line 18) | const TERMINAL_TASK_STATUSES = new Set([ function pruneStaleTasksAndNotifications (line 25) | function pruneStaleTasksAndNotifications(args: { type SessionStatusMap (line 91) | type SessionStatusMap = Record function checkAndInterruptStaleTasks (line 93) | async function checkAndInterruptStaleTasks(args: { FILE: src/features/background-agent/types.ts type BackgroundTaskStatus (line 4) | type BackgroundTaskStatus = type ToolCallWindow (line 12) | interface ToolCallWindow { type TaskProgress (line 18) | interface TaskProgress { type BackgroundTask (line 28) | interface BackgroundTask { type LaunchInput (line 70) | interface LaunchInput { type ResumeInput (line 89) | interface ResumeInput { FILE: src/features/boulder-state/constants.ts constant BOULDER_DIR (line 5) | const BOULDER_DIR = ".sisyphus" constant BOULDER_FILE (line 6) | const BOULDER_FILE = "boulder.json" constant BOULDER_STATE_PATH (line 7) | const BOULDER_STATE_PATH = `${BOULDER_DIR}/${BOULDER_FILE}` constant NOTEPAD_DIR (line 9) | const NOTEPAD_DIR = "notepads" constant NOTEPAD_BASE_PATH (line 10) | const NOTEPAD_BASE_PATH = `${BOULDER_DIR}/${NOTEPAD_DIR}` constant PROMETHEUS_PLANS_DIR (line 13) | const PROMETHEUS_PLANS_DIR = ".sisyphus/plans" FILE: src/features/boulder-state/storage.ts constant RESERVED_KEYS (line 12) | const RESERVED_KEYS = new Set(["__proto__", "prototype", "constructor"]) function getBoulderFilePath (line 14) | function getBoulderFilePath(directory: string): string { function readBoulderState (line 18) | function readBoulderState(directory: string): BoulderState | null { function writeBoulderState (line 43) | function writeBoulderState(directory: string, state: BoulderState): bool... function appendSessionId (line 59) | function appendSessionId(directory: string, sessionId: string): BoulderS... function clearBoulderState (line 79) | function clearBoulderState(directory: string): boolean { function getTaskSessionState (line 93) | function getTaskSessionState(directory: string, taskKey: string): TaskSe... function upsertTaskSessionState (line 102) | function upsertTaskSessionState( function findPrometheusPlans (line 145) | function findPrometheusPlans(directory: string): string[] { function getPlanProgress (line 171) | function getPlanProgress(planPath: string): PlanProgress { function getPlanName (line 199) | function getPlanName(planPath: string): string { function createBoulderState (line 206) | function createBoulderState( FILE: src/features/boulder-state/top-level-task.test.ts function writePlanFile (line 8) | function writePlanFile(fileName: string, content: string): string { FILE: src/features/boulder-state/top-level-task.ts constant TODO_HEADING_PATTERN (line 5) | const TODO_HEADING_PATTERN = /^##\s+TODOs\b/i constant FINAL_VERIFICATION_HEADING_PATTERN (line 6) | const FINAL_VERIFICATION_HEADING_PATTERN = /^##\s+Final Verification Wav... constant SECOND_LEVEL_HEADING_PATTERN (line 7) | const SECOND_LEVEL_HEADING_PATTERN = /^##\s+/ constant UNCHECKED_CHECKBOX_PATTERN (line 8) | const UNCHECKED_CHECKBOX_PATTERN = /^(\s*)[-*]\s*\[\s*\]\s*(.+)$/ constant TODO_TASK_PATTERN (line 9) | const TODO_TASK_PATTERN = /^(\d+)\.\s+(.+)$/ constant FINAL_WAVE_TASK_PATTERN (line 10) | const FINAL_WAVE_TASK_PATTERN = /^(F\d+)\.\s+(.+)$/i type PlanSection (line 12) | type PlanSection = "todo" | "final-wave" | "other" function buildTaskRef (line 14) | function buildTaskRef( function readCurrentTopLevelTask (line 35) | function readCurrentTopLevelTask(planPath: string): TopLevelTaskRef | nu... FILE: src/features/boulder-state/types.ts type BoulderState (line 8) | interface BoulderState { type PlanProgress (line 25) | interface PlanProgress { type TaskSessionState (line 34) | interface TaskSessionState { type TopLevelTaskRef (line 51) | interface TopLevelTaskRef { FILE: src/features/builtin-commands/commands.ts constant BUILTIN_COMMAND_DEFINITIONS (line 10) | const BUILTIN_COMMAND_DEFINITIONS: Record FILE: src/features/builtin-skills/skills.ts type CreateBuiltinSkillsOptions (line 13) | interface CreateBuiltinSkillsOptions { function createBuiltinSkills (line 18) | function createBuiltinSkills(options: CreateBuiltinSkillsOptions = {}): ... FILE: src/features/builtin-skills/skills/git-master-skill-metadata.ts constant GIT_MASTER_SKILL_NAME (line 1) | const GIT_MASTER_SKILL_NAME = "git-master" constant GIT_MASTER_SKILL_DESCRIPTION (line 3) | const GIT_MASTER_SKILL_DESCRIPTION = FILE: src/features/builtin-skills/types.ts type BuiltinSkill (line 3) | interface BuiltinSkill { FILE: src/features/claude-code-agent-loader/claude-model-mapper.ts constant ANTHROPIC_PREFIX (line 4) | const ANTHROPIC_PREFIX = "anthropic/" constant CLAUDE_CODE_ALIAS_MAP (line 6) | const CLAUDE_CODE_ALIAS_MAP = new Map([ function mapClaudeModelString (line 12) | function mapClaudeModelString(model: string | undefined): string | undef... function mapClaudeModelToOpenCode (line 43) | function mapClaudeModelToOpenCode( FILE: src/features/claude-code-agent-loader/loader.ts function parseToolsConfig (line 9) | function parseToolsConfig(toolsStr?: string): Record | ... function loadAgentsFromDir (line 22) | function loadAgentsFromDir(agentsDir: string, scope: AgentScope): Loaded... function loadUserAgents (line 76) | function loadUserAgents(): Record { function loadProjectAgents (line 87) | function loadProjectAgents(directory?: string): Record & { type AgentFrontmatter (line 9) | interface AgentFrontmatter { type LoadedAgent (line 17) | interface LoadedAgent { FILE: src/features/claude-code-command-loader/loader.ts function loadCommandsFromDir (line 10) | async function loadCommandsFromDir( function commandsToRecord (line 102) | function commandsToRecord(commands: LoadedCommand[]): Record(obj: T): T { FILE: src/features/claude-code-mcp-loader/loader.test.ts constant TEST_DIR (line 6) | const TEST_DIR = join(tmpdir(), "mcp-loader-test-" + Date.now()) constant TEST_HOME (line 7) | const TEST_HOME = join(TEST_DIR, "home") FILE: src/features/claude-code-mcp-loader/loader.ts type McpConfigPath (line 14) | interface McpConfigPath { function getMcpConfigPaths (line 19) | function getMcpConfigPaths(): McpConfigPath[] { function loadMcpConfigFile (line 31) | async function loadMcpConfigFile( function getSystemMcpServerNames (line 47) | function getSystemMcpServerNames(): Set { function loadMcpConfigs (line 71) | async function loadMcpConfigs( function formatLoadedServersForToast (line 121) | function formatLoadedServersForToast( FILE: src/features/claude-code-mcp-loader/transformer.ts function transformMcpServer (line 9) | function transformMcpServer( FILE: src/features/claude-code-mcp-loader/types.ts type McpScope (line 1) | type McpScope = "user" | "project" | "local" type ClaudeCodeMcpServer (line 3) | interface ClaudeCodeMcpServer { type ClaudeCodeMcpConfig (line 17) | interface ClaudeCodeMcpConfig { type McpLocalConfig (line 21) | interface McpLocalConfig { type McpRemoteConfig (line 28) | interface McpRemoteConfig { type McpServerConfig (line 35) | type McpServerConfig = McpLocalConfig | McpRemoteConfig type LoadedMcpServer (line 37) | interface LoadedMcpServer { type McpLoadResult (line 43) | interface McpLoadResult { FILE: src/features/claude-code-plugin-loader/agent-loader.ts function parseToolsConfig (line 10) | function parseToolsConfig(toolsStr?: string): Record | ... function loadPluginAgents (line 27) | function loadPluginAgents(plugins: LoadedPlugin[]): Record(obj: T, pluginRoot: string): T { FILE: src/features/claude-code-plugin-loader/skill-loader.ts function loadPluginSkillsAsCommands (line 12) | function loadPluginSkillsAsCommands( FILE: src/features/claude-code-plugin-loader/types.ts type PluginScope (line 8) | type PluginScope = "user" | "project" | "local" | "managed" type PluginInstallation (line 13) | interface PluginInstallation { type InstalledPluginsDatabaseV1 (line 27) | interface InstalledPluginsDatabaseV1 { type InstalledPluginsDatabaseV2 (line 36) | interface InstalledPluginsDatabaseV2 { type InstalledPluginEntryV3 (line 46) | interface InstalledPluginEntryV3 { type InstalledPluginsDatabase (line 65) | type InstalledPluginsDatabase = type PluginAuthor (line 73) | interface PluginAuthor { type PluginManifest (line 83) | interface PluginManifest { type HookEntry (line 106) | type HookEntry = type HookMatcher (line 112) | interface HookMatcher { type HooksConfig (line 117) | interface HooksConfig { type PluginMcpServer (line 137) | interface PluginMcpServer { type McpServersConfig (line 147) | interface McpServersConfig { type LspServerConfig (line 154) | interface LspServerConfig { type LspServersConfig (line 173) | interface LspServersConfig { type LoadedPlugin (line 180) | interface LoadedPlugin { type PluginLoadResult (line 200) | interface PluginLoadResult { type PluginLoadError (line 205) | interface PluginLoadError { type ClaudeSettings (line 214) | interface ClaudeSettings { type PluginLoaderOptions (line 223) | interface PluginLoaderOptions { FILE: src/features/claude-code-session-state/state.ts function setMainSession (line 6) | function setMainSession(id: string | undefined) { function getMainSessionID (line 10) | function getMainSessionID(): string | undefined { function _resetForTesting (line 15) | function _resetForTesting(): void { function setSessionAgent (line 24) | function setSessionAgent(sessionID: string, agent: string): void { function updateSessionAgent (line 30) | function updateSessionAgent(sessionID: string, agent: string): void { function getSessionAgent (line 34) | function getSessionAgent(sessionID: string): string | undefined { function clearSessionAgent (line 38) | function clearSessionAgent(sessionID: string): void { FILE: src/features/claude-tasks/session-storage.test.ts constant TEST_DIR (line 12) | const TEST_DIR = ".test-session-storage" constant TEST_DIR_ABS (line 13) | const TEST_DIR_ABS = join(process.cwd(), TEST_DIR) function makeConfig (line 15) | function makeConfig(storagePath: string): Partial { FILE: src/features/claude-tasks/session-storage.ts function getSessionTaskDir (line 6) | function getSessionTaskDir( function listSessionTaskFiles (line 13) | function listSessionTaskFiles( function listAllSessionDirs (line 24) | function listAllSessionDirs( type TaskLocation (line 35) | interface TaskLocation { function findTaskAcrossSessions (line 40) | function findTaskAcrossSessions( FILE: src/features/claude-tasks/storage.test.ts constant TEST_DIR (line 18) | const TEST_DIR = ".test-claude-tasks" constant TEST_DIR_ABS (line 19) | const TEST_DIR_ABS = join(process.cwd(), TEST_DIR) FILE: src/features/claude-tasks/storage.ts function getTaskDir (line 8) | function getTaskDir(config: Partial = {}): string { function sanitizePathSegment (line 21) | function sanitizePathSegment(value: string): string { function resolveTaskListId (line 25) | function resolveTaskListId(config: Partial = {}): st... function ensureDir (line 38) | function ensureDir(dirPath: string): void { function readJsonSafe (line 44) | function readJsonSafe(filePath: string, schema: z.ZodType): T | nu... function writeJsonAtomic (line 64) | function writeJsonAtomic(filePath: string, data: unknown): void { constant STALE_LOCK_THRESHOLD_MS (line 85) | const STALE_LOCK_THRESHOLD_MS = 30000 function generateTaskId (line 87) | function generateTaskId(): string { function listTaskFiles (line 91) | function listTaskFiles(config: Partial = {}): string... function acquireLock (line 99) | function acquireLock(dirPath: string): { acquired: boolean; release: () ... FILE: src/features/claude-tasks/types.ts type TaskStatus (line 4) | type TaskStatus = z.infer type Task (line 20) | type Task = z.infer FILE: src/features/context-injector/collector.ts constant PRIORITY_ORDER (line 8) | const PRIORITY_ORDER: Record = { constant CONTEXT_SEPARATOR (line 15) | const CONTEXT_SEPARATOR = "\n\n---\n\n" class ContextCollector (line 19) | class ContextCollector { method register (line 22) | register(sessionID: string, options: RegisterContextOptions): void { method getPending (line 42) | getPending(sessionID: string): PendingContext { method consume (line 63) | consume(sessionID: string): PendingContext { method clear (line 69) | clear(sessionID: string): void { method hasPending (line 73) | hasPending(sessionID: string): boolean { method sortEntries (line 78) | private sortEntries(entries: ContextEntry[]): ContextEntry[] { FILE: src/features/context-injector/injector.ts type OutputPart (line 6) | interface OutputPart { type InjectionResult (line 12) | interface InjectionResult { function injectPendingContext (line 17) | function injectPendingContext( type ChatMessageInput (line 41) | interface ChatMessageInput { type ChatMessageOutput (line 48) | interface ChatMessageOutput { function createContextInjectorHook (line 53) | function createContextInjectorHook(collector: ContextCollector) { type MessageWithParts (line 70) | interface MessageWithParts { type MessagesTransformHook (line 75) | type MessagesTransformHook = { function createContextInjectorMessagesTransformHook (line 82) | function createContextInjectorMessagesTransformHook( FILE: src/features/context-injector/types.ts type ContextSourceType (line 5) | type ContextSourceType = type ContextPriority (line 16) | type ContextPriority = "critical" | "high" | "normal" | "low" type ContextEntry (line 21) | interface ContextEntry { type RegisterContextOptions (line 39) | interface RegisterContextOptions { type PendingContext (line 55) | interface PendingContext { type MessageContext (line 68) | interface MessageContext { type OutputParts (line 84) | interface OutputParts { type InjectionStrategy (line 91) | type InjectionStrategy = "prepend-parts" | "storage" | "auto" FILE: src/features/hook-message-injector/injector.test.ts function createMockClient (line 26) | function createMockClient(messages: Array<{ FILE: src/features/hook-message-injector/injector.ts type StoredMessage (line 11) | interface StoredMessage { type OpencodeClient (line 17) | type OpencodeClient = PluginInput["client"] type SDKMessage (line 19) | interface SDKMessage { function convertSDKMessageToStoredMessage (line 37) | function convertSDKMessageToStoredMessage(msg: SDKMessage): StoredMessag... function findNearestMessageWithFieldsFromSDK (line 67) | async function findNearestMessageWithFieldsFromSDK( function findFirstMessageWithAgentFromSDK (line 100) | async function findFirstMessageWithAgentFromSDK( function findNearestMessageWithFields (line 133) | function findNearestMessageWithFields(messageDir: string): StoredMessage... function findFirstMessageWithAgent (line 184) | function findFirstMessageWithAgent(messageDir: string): string | null { function generateMessageId (line 212) | function generateMessageId(): string { function generatePartId (line 216) | function generatePartId(): string { function getOrCreateMessageDir (line 220) | function getOrCreateMessageDir(sessionID: string): string { function injectHookMessage (line 259) | function injectHookMessage( function resolveMessageContext (line 360) | async function resolveMessageContext( FILE: src/features/hook-message-injector/types.ts type ToolPermission (line 1) | type ToolPermission = boolean | "allow" | "deny" | "ask" type MessageMeta (line 3) | interface MessageMeta { type OriginalMessageContext (line 24) | interface OriginalMessageContext { type TextPart (line 38) | interface TextPart { FILE: src/features/mcp-oauth/callback-server.ts constant DEFAULT_PORT (line 3) | const DEFAULT_PORT = 19877 constant TIMEOUT_MS (line 4) | const TIMEOUT_MS = 5 * 60 * 1000 type OAuthCallbackResult (line 6) | type OAuthCallbackResult = { type CallbackServer (line 11) | type CallbackServer = { constant SUCCESS_HTML (line 17) | const SUCCESS_HTML = ` function findAvailablePort (line 37) | async function findAvailablePort(startPort: number = DEFAULT_PORT): Prom... function startCallbackServer (line 41) | async function startCallbackServer(startPort: number = DEFAULT_PORT): Pr... FILE: src/features/mcp-oauth/dcr.test.ts function createStorage (line 9) | function createStorage(initial: ClientCredentials | null): FILE: src/features/mcp-oauth/dcr.ts type ClientRegistrationRequest (line 1) | type ClientRegistrationRequest = { type ClientCredentials (line 9) | type ClientCredentials = { type ClientRegistrationStorage (line 14) | type ClientRegistrationStorage = { type DynamicClientRegistrationOptions (line 22) | type DynamicClientRegistrationOptions = { type DcrFetch (line 33) | type DcrFetch = ( function getOrRegisterClient (line 38) | async function getOrRegisterClient( function parseRegistrationResponse (line 83) | function parseRegistrationResponse(data: unknown): ClientCredentials | n... function isRecord (line 96) | function isRecord(value: unknown): value is Record { FILE: src/features/mcp-oauth/discovery.ts type OAuthServerMetadata (line 1) | interface OAuthServerMetadata { function parseHttpsUrl (line 11) | function parseHttpsUrl(value: string, label: string): URL { function readStringField (line 19) | function readStringField(source: Record, field: string)... function fetchMetadata (line 27) | async function fetchMetadata(url: string): Promise<{ ok: true; json: Rec... function fetchAuthorizationServerMetadata (line 39) | async function fetchAuthorizationServerMetadata(issuer: string, resource... function parseAuthorizationServers (line 74) | function parseAuthorizationServers(metadata: Record): s... function discoverOAuthServerMetadata (line 80) | async function discoverOAuthServerMetadata(resource: string): Promise { function openBrowser (line 95) | function openBrowser(url: string): void { function runAuthorizationCodeRedirect (line 120) | async function runAuthorizationCodeRedirect(options: { FILE: src/features/mcp-oauth/provider.ts type McpOAuthProviderOptions (line 16) | type McpOAuthProviderOptions = { class McpOAuthProvider (line 22) | class McpOAuthProvider { method constructor (line 30) | constructor(options: McpOAuthProviderOptions) { method tokens (line 36) | tokens(): OAuthTokenData | null { method saveTokens (line 40) | saveTokens(tokenData: OAuthTokenData): boolean { method clientInformation (line 44) | clientInformation(): ClientCredentials | null { method redirectUrl (line 54) | redirectUrl(): string { method saveCodeVerifier (line 58) | saveCodeVerifier(verifier: string): void { method codeVerifier (line 62) | codeVerifier(): string | null { method redirectToAuthorization (line 66) | async redirectToAuthorization(metadata: OAuthServerMetadata): Promise<... method login (line 89) | async login(): Promise { FILE: src/features/mcp-oauth/resource-indicator.ts function getResourceIndicator (line 1) | function getResourceIndicator(url: string): string { function addResourceToParams (line 14) | function addResourceToParams(params: URLSearchParams, resource: string):... FILE: src/features/mcp-oauth/schema.ts type McpOauth (line 8) | type McpOauth = z.infer FILE: src/features/mcp-oauth/step-up.ts type StepUpInfo (line 1) | interface StepUpInfo { function parseWwwAuthenticate (line 7) | function parseWwwAuthenticate(header: string): StepUpInfo | null { function extractParam (line 48) | function extractParam(params: string, name: string): string | null { function mergeScopes (line 60) | function mergeScopes(existing: string[], required: string[]): string[] { function isStepUpRequired (line 68) | function isStepUpRequired(statusCode: number, headers: Record constant STORAGE_FILE_NAME (line 17) | const STORAGE_FILE_NAME = "mcp-oauth.json" function getMcpOauthStoragePath (line 19) | function getMcpOauthStoragePath(): string { function normalizeHost (line 23) | function normalizeHost(serverHost: string): string { function normalizeResource (line 52) | function normalizeResource(resource: string): string { function buildKey (line 56) | function buildKey(serverHost: string, resource: string): string { function readStore (line 62) | function readStore(): TokenStore | null { function writeStore (line 76) | function writeStore(store: TokenStore): boolean { function loadToken (line 93) | function loadToken(serverHost: string, resource: string): OAuthTokenData... function saveToken (line 101) | function saveToken(serverHost: string, resource: string, token: OAuthTok... function deleteToken (line 108) | function deleteToken(serverHost: string, resource: string): boolean { function listTokensByHost (line 134) | function listTokensByHost(serverHost: string): TokenStore { function listAllTokens (line 151) | function listAllTokens(): TokenStore { FILE: src/features/opencode-skill-loader/agents-skills-global.test.ts constant TEST_DIR (line 6) | const TEST_DIR = join(tmpdir(), "agents-global-skills-test-" + Date.now()) constant TEMP_HOME (line 7) | const TEMP_HOME = join(TEST_DIR, "home") FILE: src/features/opencode-skill-loader/allowed-tools-parser.ts function parseAllowedTools (line 1) | function parseAllowedTools(allowedTools: string | string[] | undefined):... FILE: src/features/opencode-skill-loader/async-loader.test.ts constant TEST_DIR (line 7) | const TEST_DIR = join(tmpdir(), "async-loader-test-" + Date.now()) constant SKILLS_DIR (line 8) | const SKILLS_DIR = join(TEST_DIR, ".opencode", "skills") function createTestSkill (line 10) | function createTestSkill(name: string, content: string, mcpJson?: object... function createDirectSkill (line 21) | function createDirectSkill(name: string, content: string): string { FILE: src/features/opencode-skill-loader/async-loader.ts function mapWithConcurrency (line 13) | async function mapWithConcurrency( function parseSkillMcpConfigFromFrontmatter (line 34) | function parseSkillMcpConfigFromFrontmatter(content: string): SkillMcpCo... function loadMcpJsonFromDirAsync (line 49) | async function loadMcpJsonFromDirAsync(skillDir: string): Promise { function discoverProjectClaudeSkills (line 106) | async function discoverProjectClaudeSkills(directory?: string): Promise<... function discoverOpencodeGlobalSkills (line 111) | async function discoverOpencodeGlobalSkills(): Promise { function discoverOpencodeProjectSkills (line 119) | async function discoverOpencodeProjectSkills(directory?: string): Promis... function discoverProjectAgentsSkills (line 124) | async function discoverProjectAgentsSkills(directory?: string): Promise<... function discoverGlobalAgentsSkills (line 129) | async function discoverGlobalAgentsSkills(): Promise { FILE: src/features/opencode-skill-loader/merger.test.ts function createLoadedSkill (line 7) | function createLoadedSkill(scope: SkillScope, name: string, description:... FILE: src/features/opencode-skill-loader/merger.ts type MergeSkillsOptions (line 10) | interface MergeSkillsOptions { function mergeSkills (line 14) | function mergeSkills( FILE: src/features/opencode-skill-loader/merger/builtin-skill-converter.ts function builtinToLoadedSkill (line 5) | function builtinToLoadedSkill(builtin: BuiltinSkill): LoadedSkill { FILE: src/features/opencode-skill-loader/merger/config-skill-entry-loader.ts function resolveFilePath (line 12) | function resolveFilePath(from: string, configDir?: string): string { function loadSkillFromFile (line 31) | function loadSkillFromFile(filePath: string): { template: string; metada... function configEntryToLoadedSkill (line 42) | function configEntryToLoadedSkill( FILE: src/features/opencode-skill-loader/merger/scope-priority.ts constant SCOPE_PRIORITY (line 3) | const SCOPE_PRIORITY: Record = { FILE: src/features/opencode-skill-loader/merger/skill-definition-merger.ts function mergeSkillDefinitions (line 5) | function mergeSkillDefinitions(base: LoadedSkill, patch: SkillDefinition... FILE: src/features/opencode-skill-loader/merger/skills-config-normalizer.ts function normalizeSkillsConfig (line 3) | function normalizeSkillsConfig(config: SkillsConfig | undefined): { FILE: src/features/opencode-skill-loader/project-skill-tool-references.test.ts constant PROJECT_ROOT (line 7) | const PROJECT_ROOT = fileURLToPath(new URL("../../..", import.meta.url)) function readProjectSkill (line 9) | async function readProjectSkill(...segments: string[]) { FILE: src/features/opencode-skill-loader/skill-deduplication.ts function deduplicateSkillsByName (line 3) | function deduplicateSkillsByName(skills: LoadedSkill[]): LoadedSkill[] { FILE: src/features/opencode-skill-loader/skill-definition-record.ts function skillsToCommandDefinitionRecord (line 4) | function skillsToCommandDefinitionRecord(skills: LoadedSkill[]): Record<... FILE: src/features/opencode-skill-loader/skill-directory-loader.ts function loadSkillsFromDir (line 7) | async function loadSkillsFromDir(options: { FILE: src/features/opencode-skill-loader/skill-discovery.ts function clearSkillCache (line 8) | function clearSkillCache(): void { function getAllSkills (line 12) | async function getAllSkills(options?: SkillResolutionOptions): Promise { function registerProcessCleanup (line 17) | function registerProcessCleanup(state: SkillMcpManagerState): void { function unregisterProcessCleanup (line 49) | function unregisterProcessCleanup(state: SkillMcpManagerState): void { function startCleanupTimer (line 58) | function startCleanupTimer(state: SkillMcpManagerState): void { function stopCleanupTimer (line 68) | function stopCleanupTimer(state: SkillMcpManagerState): void { function cleanupIdleClients (line 74) | async function cleanupIdleClients(state: SkillMcpManagerState): Promise<... function disconnectSession (line 90) | async function disconnectSession(state: SkillMcpManagerState, sessionID:... function disconnectAll (line 128) | async function disconnectAll(state: SkillMcpManagerState): Promise { function forceReconnect (line 146) | async function forceReconnect(state: SkillMcpManagerState, clientKey: st... FILE: src/features/skill-mcp-manager/connection-race.test.ts type Deferred (line 5) | type Deferred = { class MockClient (line 16) | class MockClient { method constructor (line 19) | constructor( method connect (line 26) | async connect(_transport: MockStdioClientTransport): Promise { class MockStdioClientTransport (line 34) | class MockStdioClientTransport { method constructor (line 37) | constructor(_options: { command: string; args?: string[]; env?: Record... function createDeferred (line 53) | function createDeferred(): Deferred { function createState (line 72) | function createState(): SkillMcpManagerState { function createClientInfo (line 91) | function createClientInfo(sessionID: string): SkillMcpClientInfo { function createClientKey (line 99) | function createClientKey(info: SkillMcpClientInfo): string { FILE: src/features/skill-mcp-manager/connection-type.ts function getConnectionType (line 8) | function getConnectionType(config: ClaudeCodeMcpServer): ConnectionType ... FILE: src/features/skill-mcp-manager/connection.ts function removeClientIfCurrent (line 10) | function removeClientIfCurrent(state: SkillMcpManagerState, clientKey: s... function getOrCreateClient (line 17) | async function getOrCreateClient(params: { function getOrCreateClientWithRetryImpl (line 91) | async function getOrCreateClientWithRetryImpl(params: { function createClient (line 110) | async function createClient(params: { FILE: src/features/skill-mcp-manager/disconnect-cleanup.test.ts function createState (line 19) | function createState(): SkillMcpManagerState { function createManagedClient (line 38) | function createManagedClient(skillName: string): ManagedClient { FILE: src/features/skill-mcp-manager/env-cleaner.ts constant EXCLUDED_ENV_PATTERNS (line 3) | const EXCLUDED_ENV_PATTERNS: RegExp[] = [ function createCleanMcpEnvironment (line 28) | function createCleanMcpEnvironment( FILE: src/features/skill-mcp-manager/http-client.ts function redactUrl (line 7) | function redactUrl(urlStr: string): string { function createHttpClient (line 25) | async function createHttpClient(params: SkillMcpClientConnectionParams):... FILE: src/features/skill-mcp-manager/manager.test.ts method constructor (line 13) | constructor(public url: URL, public options?: { requestInit?: RequestIni... method start (line 16) | async start() { method close (line 19) | async close() { method constructor (line 30) | constructor(public options: { serverUrl: string; clientId?: string; scop... method tokens (line 31) | tokens() { method login (line 34) | async login() { FILE: src/features/skill-mcp-manager/manager.ts class SkillMcpManager (line 9) | class SkillMcpManager { method getClientKey (line 24) | private getClientKey(info: SkillMcpClientInfo): string { method getOrCreateClient (line 28) | async getOrCreateClient(info: SkillMcpClientInfo, config: ClaudeCodeMc... method disconnectSession (line 38) | async disconnectSession(sessionID: string): Promise { method disconnectAll (line 42) | async disconnectAll(): Promise { method listTools (line 46) | async listTools(info: SkillMcpClientInfo, context: SkillMcpServerConte... method listResources (line 52) | async listResources(info: SkillMcpClientInfo, context: SkillMcpServerC... method listPrompts (line 58) | async listPrompts(info: SkillMcpClientInfo, context: SkillMcpServerCon... method callTool (line 64) | async callTool( method readResource (line 76) | async readResource(info: SkillMcpClientInfo, context: SkillMcpServerCo... method getPrompt (line 83) | async getPrompt( method withOperationRetry (line 95) | private async withOperationRetry( method getOrCreateClientWithRetry (line 137) | private async getOrCreateClientWithRetry(info: SkillMcpClientInfo, con... method getConnectedServers (line 147) | getConnectedServers(): string[] { method isConnected (line 151) | isConnected(info: SkillMcpClientInfo): boolean { FILE: src/features/skill-mcp-manager/oauth-handler.ts function getOrCreateAuthProvider (line 6) | function getOrCreateAuthProvider( function isTokenExpired (line 23) | function isTokenExpired(tokenData: OAuthTokenData): boolean { function buildHttpRequestInit (line 28) | async function buildHttpRequestInit( function handleStepUpIfNeeded (line 60) | async function handleStepUpIfNeeded(params: { FILE: src/features/skill-mcp-manager/stdio-client.ts function getStdioCommand (line 8) | function getStdioCommand(config: ClaudeCodeMcpServer, serverName: string... function createStdioClient (line 15) | async function createStdioClient(params: SkillMcpClientConnectionParams)... FILE: src/features/skill-mcp-manager/types.ts type SkillMcpConfig (line 7) | type SkillMcpConfig = Record type SkillMcpClientInfo (line 9) | interface SkillMcpClientInfo { type SkillMcpServerContext (line 15) | interface SkillMcpServerContext { type ConnectionType (line 25) | type ConnectionType = "stdio" | "http" type ManagedClientBase (line 27) | interface ManagedClientBase { type ManagedStdioClient (line 34) | interface ManagedStdioClient extends ManagedClientBase { type ManagedHttpClient (line 39) | interface ManagedHttpClient extends ManagedClientBase { type ManagedClient (line 44) | type ManagedClient = ManagedStdioClient | ManagedHttpClient type ProcessCleanupHandler (line 46) | interface ProcessCleanupHandler { type SkillMcpManagerState (line 51) | interface SkillMcpManagerState { type SkillMcpClientConnectionParams (line 65) | interface SkillMcpClientConnectionParams { FILE: src/features/task-toast-manager/manager.test.ts type TaskToastManagerClass (line 5) | type TaskToastManagerClass = typeof import("./manager").TaskToastManager FILE: src/features/task-toast-manager/manager.ts type OpencodeClient (line 5) | type OpencodeClient = PluginInput["client"] type ClientWithTui (line 7) | type ClientWithTui = { class TaskToastManager (line 13) | class TaskToastManager { method constructor (line 18) | constructor(client: OpencodeClient, concurrencyManager?: ConcurrencyMa... method setConcurrencyManager (line 23) | setConcurrencyManager(manager: ConcurrencyManager): void { method addTask (line 27) | addTask(task: { method updateTask (line 58) | updateTask(id: string, status: TaskStatus): void { method updateTaskModelBySession (line 68) | updateTaskModelBySession(sessionID: string, modelInfo: ModelFallbackIn... method removeTask (line 80) | removeTask(id: string): void { method getRunningTasks (line 87) | getRunningTasks(): TrackedTask[] { method getQueuedTasks (line 97) | getQueuedTasks(): TrackedTask[] { method formatDuration (line 106) | private formatDuration(startedAt: Date): string { method getConcurrencyInfo (line 115) | private getConcurrencyInfo(): string { method buildTaskListMessage (line 125) | private buildTaskListMessage(newTask: TrackedTask): string { method showTaskListToast (line 185) | private showTaskListToast(newTask: TrackedTask): void { method showCompletionToast (line 210) | showCompletionToast(task: { id: string; description: string; duration:... function getTaskToastManager (line 237) | function getTaskToastManager(): TaskToastManager | null { function initTaskToastManager (line 241) | function initTaskToastManager( function _resetTaskToastManagerForTesting (line 249) | function _resetTaskToastManagerForTesting(): void { FILE: src/features/task-toast-manager/types.ts type TaskStatus (line 3) | type TaskStatus = "running" | "queued" | "completed" | "error" type ModelFallbackInfo (line 5) | interface ModelFallbackInfo { type TrackedTask (line 11) | interface TrackedTask { type TaskToastOptions (line 24) | interface TaskToastOptions { FILE: src/features/tmux-subagent/action-executor-core.ts type ActionResult (line 5) | interface ActionResult { type ExecuteContext (line 11) | interface ExecuteContext { type ActionExecutorDeps (line 17) | interface ActionExecutorDeps { function enforceMainPane (line 25) | async function enforceMainPane( function executeActionWithDeps (line 38) | async function executeActionWithDeps( FILE: src/features/tmux-subagent/action-executor.test.ts function createConfig (line 21) | function createConfig(overrides?: Partial): TmuxConfig { function createWindowState (line 32) | function createWindowState(overrides?: Partial): WindowState { function createContext (line 50) | function createContext(overrides?: Partial): ExecuteCont... FILE: src/features/tmux-subagent/action-executor.ts type ExecuteActionsResult (line 20) | interface ExecuteActionsResult { type ExecuteContext (line 26) | interface ExecuteContext { function enforceMainPane (line 33) | async function enforceMainPane( function enforceLayoutAndMainPane (line 45) | async function enforceLayoutAndMainPane(ctx: ExecuteContext): Promise): WindowState { FILE: src/features/tmux-subagent/manager.ts type OpencodeClient (line 17) | type OpencodeClient = PluginInput["client"] type SessionCreatedEvent (line 19) | interface SessionCreatedEvent { type DeferredSession (line 24) | interface DeferredSession { type TmuxUtilDeps (line 30) | interface TmuxUtilDeps { constant DEFERRED_SESSION_TTL_MS (line 40) | const DEFERRED_SESSION_TTL_MS = 5 * 60 * 1000 constant MAX_DEFERRED_QUEUE_SIZE (line 41) | const MAX_DEFERRED_QUEUE_SIZE = 20 constant MAX_CLOSE_RETRY_COUNT (line 42) | const MAX_CLOSE_RETRY_COUNT = 3 class TmuxSessionManager (line 56) | class TmuxSessionManager { method constructor (line 71) | constructor(ctx: PluginInput, tmuxConfig: TmuxConfig, deps: TmuxUtilDe... method isEnabled (line 94) | private isEnabled(): boolean { method getCapacityConfig (line 98) | private getCapacityConfig(): CapacityConfig { method getSessionMappings (line 107) | private getSessionMappings(): SessionMapping[] { method removeTrackedSession (line 115) | private removeTrackedSession(sessionId: string): void { method markSessionClosePending (line 123) | private markSessionClosePending(sessionId: string): void { method queryWindowStateSafely (line 135) | private async queryWindowStateSafely(): Promise { method tryCloseTrackedSession (line 148) | private async tryCloseTrackedSession(tracked: TrackedSession): Promise... method retryPendingCloses (line 174) | private async retryPendingCloses(): Promise { method enqueueDeferredSession (line 232) | private enqueueDeferredSession(sessionId: string, title: string): void { method removeDeferredSession (line 255) | private removeDeferredSession(sessionId: string): void { method startDeferredAttachLoop (line 267) | private startDeferredAttachLoop(): void { method stopDeferredAttachLoop (line 286) | private stopDeferredAttachLoop(): void { method tryAttachDeferredSession (line 295) | private async tryAttachDeferredSession(): Promise { method waitForSessionReady (line 400) | private async waitForSessionReady(sessionId: string): Promise { method onSessionCreated (line 430) | async onSessionCreated(event: SessionCreatedEvent): Promise { method enqueueSpawn (line 590) | private async enqueueSpawn(run: () => Promise): Promise { method onSessionDeleted (line 602) | async onSessionDeleted(event: { sessionID: string }): Promise { method closeSessionById (line 650) | private async closeSessionById(sessionId: string): Promise { method createEventHandler (line 678) | createEventHandler(): (input: { event: { type: string; properties?: un... method cleanup (line 684) | async cleanup(): Promise { FILE: src/features/tmux-subagent/oldest-agent-pane.ts type SessionMapping (line 3) | interface SessionMapping { function findOldestAgentPane (line 9) | function findOldestAgentPane( FILE: src/features/tmux-subagent/pane-split-availability.ts function getMinSplitWidth (line 10) | function getMinSplitWidth(minPaneWidth?: number): number { function getColumnCount (line 15) | function getColumnCount(paneCount: number): number { function getColumnWidth (line 20) | function getColumnWidth(agentAreaWidth: number, paneCount: number): numb... function isSplittableAtCount (line 26) | function isSplittableAtCount( function findMinimalEvictions (line 35) | function findMinimalEvictions( function canSplitPane (line 48) | function canSplitPane( function canSplitPaneAnyDirection (line 59) | function canSplitPaneAnyDirection( function getBestSplitDirection (line 66) | function getBestSplitDirection( FILE: src/features/tmux-subagent/pane-state-parser.ts constant MANDATORY_PANE_FIELD_COUNT (line 3) | const MANDATORY_PANE_FIELD_COUNT = 8 type ParsedPaneState (line 5) | type ParsedPaneState = { type ParsedPaneLine (line 11) | type ParsedPaneLine = { type MandatoryPaneFields (line 17) | type MandatoryPaneFields = [ function parsePaneStateOutput (line 28) | function parsePaneStateOutput(stdout: string): ParsedPaneState | null { function parsePaneLine (line 52) | function parsePaneLine(line: string): ParsedPaneLine | null { function getMandatoryPaneFields (line 94) | function getMandatoryPaneFields(fields: string[]): MandatoryPaneFields |... function parseInteger (line 124) | function parseInteger(value: string): number | null { function parseActiveValue (line 131) | function parseActiveValue(value: string): boolean | null { FILE: src/features/tmux-subagent/pane-state-querier.ts function queryWindowState (line 7) | async function queryWindowState(sourcePaneId: string): Promise { FILE: src/features/tmux-subagent/polling.ts type OpencodeClient (line 20) | type OpencodeClient = PluginInput["client"] type SessionPollingController (line 22) | interface SessionPollingController { function createSessionPollingController (line 30) | function createSessionPollingController(params: { FILE: src/features/tmux-subagent/session-created-event.ts type UnknownRecord (line 1) | type UnknownRecord = Record function isRecord (line 3) | function isRecord(value: unknown): value is UnknownRecord { function getNestedRecord (line 7) | function getNestedRecord(value: unknown, key: string): UnknownRecord | u... function getNestedString (line 13) | function getNestedString(value: unknown, key: string): string | undefined { type SessionCreatedEvent (line 19) | interface SessionCreatedEvent { function coerceSessionCreatedEvent (line 24) | function coerceSessionCreatedEvent(input: { FILE: src/features/tmux-subagent/session-created-handler.ts type OpencodeClient (line 11) | type OpencodeClient = PluginInput["client"] type SessionCreatedHandlerDeps (line 13) | interface SessionCreatedHandlerDeps { function handleSessionCreated (line 28) | async function handleSessionCreated( FILE: src/features/tmux-subagent/session-deleted-handler.ts type SessionDeletedHandlerDeps (line 8) | interface SessionDeletedHandlerDeps { function handleSessionDeleted (line 18) | async function handleSessionDeleted( FILE: src/features/tmux-subagent/session-message-count.ts function getMessageCount (line 1) | function getMessageCount(data: unknown): number { FILE: src/features/tmux-subagent/session-ready-waiter.ts type OpencodeClient (line 9) | type OpencodeClient = PluginInput["client"] function waitForSessionReady (line 11) | async function waitForSessionReady(params: { FILE: src/features/tmux-subagent/session-status-parser.ts type SessionStatus (line 1) | type SessionStatus = { type: string } function parseSessionStatusMap (line 3) | function parseSessionStatusMap(data: unknown): Record): Trac... function getTrackedSessions (line 119) | function getTrackedSessions(target: object): Map { function getRetryPendingCloses (line 128) | function getRetryPendingCloses(target: object): () => Promise { function getCloseSessionById (line 137) | function getCloseSessionById(target: object): (sessionId: string) => Pro... function createManager (line 146) | function createManager( FILE: src/features/tool-metadata-store/store.ts type PendingToolMetadata (line 19) | interface PendingToolMetadata { constant STALE_TIMEOUT_MS (line 26) | const STALE_TIMEOUT_MS = 15 * 60 * 1000 function makeKey (line 28) | function makeKey(sessionID: string, callID: string): string { function cleanupStaleEntries (line 32) | function cleanupStaleEntries(): void { function storeToolMetadata (line 45) | function storeToolMetadata( function consumeToolMetadata (line 58) | function consumeToolMetadata( function getPendingStoreSize (line 75) | function getPendingStoreSize(): number { function clearPendingStore (line 82) | function clearPendingStore(): void { FILE: src/hooks/agent-usage-reminder/constants.ts constant AGENT_USAGE_REMINDER_STORAGE (line 3) | const AGENT_USAGE_REMINDER_STORAGE = join( constant TARGET_TOOLS (line 9) | const TARGET_TOOLS = new Set([ constant AGENT_TOOLS (line 22) | const AGENT_TOOLS = new Set([ constant REMINDER_MESSAGE (line 28) | const REMINDER_MESSAGE = ` FILE: src/hooks/agent-usage-reminder/hook.ts type ToolExecuteInput (line 12) | interface ToolExecuteInput { type ToolExecuteOutput (line 18) | interface ToolExecuteOutput { type EventInput (line 24) | interface EventInput { constant ORCHESTRATOR_AGENTS (line 36) | const ORCHESTRATOR_AGENTS = new Set([ function isOrchestratorAgent (line 44) | function isOrchestratorAgent(agentName: string): boolean { function createAgentUsageReminderHook (line 48) | function createAgentUsageReminderHook(_ctx: PluginInput) { FILE: src/hooks/agent-usage-reminder/storage.ts function getStoragePath (line 12) | function getStoragePath(sessionID: string): string { function loadAgentUsageState (line 16) | function loadAgentUsageState(sessionID: string): AgentUsageState | null { function saveAgentUsageState (line 28) | function saveAgentUsageState(state: AgentUsageState): void { function clearAgentUsageState (line 37) | function clearAgentUsageState(sessionID: string): void { FILE: src/hooks/agent-usage-reminder/types.ts type AgentUsageState (line 1) | interface AgentUsageState { FILE: src/hooks/anthropic-context-window-limit-recovery/aggressive-truncation-strategy.ts function runAggressiveTruncationStrategy (line 10) | async function runAggressiveTruncationStrategy(params: { FILE: src/hooks/anthropic-context-window-limit-recovery/client.ts type Client (line 3) | type Client = PluginInput["client"] & { FILE: src/hooks/anthropic-context-window-limit-recovery/deduplication-recovery.ts type OpencodeClient (line 10) | type OpencodeClient = PluginInput["client"] function createPruningState (line 12) | function createPruningState(): PruningState { function isPromptTooLongError (line 22) | function isPromptTooLongError(parsed: ParsedTokenLimitError): boolean { function getDeduplicationPlan (line 26) | function getDeduplicationPlan( function attemptDeduplicationRecovery (line 45) | async function attemptDeduplicationRecovery( FILE: src/hooks/anthropic-context-window-limit-recovery/empty-content-recovery-sdk.test.ts function createMockClient (line 14) | function createMockClient(messages: Array<{ info?: { id?: string }; part... FILE: src/hooks/anthropic-context-window-limit-recovery/empty-content-recovery-sdk.ts type SDKPart (line 5) | interface SDKPart { type SDKMessage (line 11) | interface SDKMessage { constant IGNORE_TYPES (line 16) | const IGNORE_TYPES = new Set(["thinking", "redacted_thinking", "meta"]) constant TOOL_TYPES (line 17) | const TOOL_TYPES = new Set(["tool", "tool_use", "tool_result"]) function messageHasContentFromSDK (line 19) | function messageHasContentFromSDK(message: SDKMessage): boolean { function getSdkMessages (line 45) | function getSdkMessages(response: unknown): SDKMessage[] { function findEmptyMessagesFromSDK (line 54) | async function findEmptyMessagesFromSDK(client: Client, sessionID: strin... function findEmptyMessageByIndexFromSDK (line 74) | async function findEmptyMessageByIndexFromSDK( function fixEmptyMessagesWithSDK (line 112) | async function fixEmptyMessagesWithSDK(params: { FILE: src/hooks/anthropic-context-window-limit-recovery/empty-content-recovery.ts function fixEmptyMessages (line 14) | async function fixEmptyMessages(params: { FILE: src/hooks/anthropic-context-window-limit-recovery/executor.test.ts type TimerCallback (line 8) | type TimerCallback = (...args: any[]) => void type FakeTimeouts (line 10) | interface FakeTimeouts { constant TRUE_ORIGINAL_SET_TIMEOUT (line 17) | const TRUE_ORIGINAL_SET_TIMEOUT = globalThis.setTimeout constant TRUE_ORIGINAL_CLEAR_TIMEOUT (line 18) | const TRUE_ORIGINAL_CLEAR_TIMEOUT = globalThis.clearTimeout function createFakeTimeouts (line 20) | function createFakeTimeouts(): FakeTimeouts { FILE: src/hooks/anthropic-context-window-limit-recovery/executor.ts function executeCompact (line 15) | async function executeCompact( FILE: src/hooks/anthropic-context-window-limit-recovery/message-builder.ts constant PLACEHOLDER_TEXT (line 14) | const PLACEHOLDER_TEXT = "[user interrupted]" type OpencodeClient (line 16) | type OpencodeClient = PluginInput["client"] type SDKPart (line 18) | interface SDKPart { type SDKMessage (line 23) | interface SDKMessage { constant IGNORE_TYPES (line 28) | const IGNORE_TYPES = new Set(["thinking", "redacted_thinking", "meta"]) constant TOOL_TYPES (line 29) | const TOOL_TYPES = new Set(["tool", "tool_use", "tool_result"]) function messageHasContentFromSDK (line 31) | function messageHasContentFromSDK(message: SDKMessage): boolean { function findEmptyMessageIdsFromSDK (line 57) | async function findEmptyMessageIdsFromSDK( function sanitizeEmptyMessagesBeforeSummarize (line 82) | async function sanitizeEmptyMessagesBeforeSummarize( function formatBytes (line 145) | function formatBytes(bytes: number): string { function getLastAssistant (line 151) | async function getLastAssistant( FILE: src/hooks/anthropic-context-window-limit-recovery/message-storage-directory.ts type OpencodeClient (line 8) | type OpencodeClient = PluginInput["client"] type SDKMessage (line 10) | interface SDKMessage { function getMessageIdsFromSDK (line 15) | async function getMessageIdsFromSDK( function getMessageIds (line 28) | function getMessageIds(sessionID: string): string[] { FILE: src/hooks/anthropic-context-window-limit-recovery/parser.ts type AnthropicErrorData (line 3) | interface AnthropicErrorData { constant TOKEN_LIMIT_PATTERNS (line 12) | const TOKEN_LIMIT_PATTERNS = [ constant TOKEN_LIMIT_KEYWORDS (line 20) | const TOKEN_LIMIT_KEYWORDS = [ constant THINKING_BLOCK_ERROR_PATTERNS (line 33) | const THINKING_BLOCK_ERROR_PATTERNS = [ function isThinkingBlockError (line 42) | function isThinkingBlockError(text: string): boolean { constant MESSAGE_INDEX_PATTERN (line 46) | const MESSAGE_INDEX_PATTERN = /messages\.(\d+)/ function extractTokensFromMessage (line 48) | function extractTokensFromMessage(message: string): { current: number; m... function extractMessageIndex (line 60) | function extractMessageIndex(text: string): number | undefined { function isTokenLimitError (line 68) | function isTokenLimitError(text: string): boolean { function parseAnthropicTokenLimitError (line 76) | function parseAnthropicTokenLimitError(err: unknown): ParsedTokenLimitEr... function parseAnthropicTokenLimitErrorUnsafe (line 84) | function parseAnthropicTokenLimitErrorUnsafe(err: unknown): ParsedTokenL... FILE: src/hooks/anthropic-context-window-limit-recovery/pruning-deduplication.ts type OpencodeClient (line 11) | type OpencodeClient = PluginInput["client"] type DeduplicationConfig (line 13) | interface DeduplicationConfig { type ToolPart (line 18) | interface ToolPart { type MessagePart (line 28) | interface MessagePart { function createToolSignature (line 33) | function createToolSignature(toolName: string, input: unknown): string { function sortObject (line 38) | function sortObject(obj: unknown): unknown { function readMessages (line 51) | function readMessages(sessionID: string): MessagePart[] { function readMessagesFromSDK (line 73) | async function readMessagesFromSDK(client: OpencodeClient, sessionID: st... function executeDeduplication (line 83) | async function executeDeduplication( function findToolOutput (line 177) | function findToolOutput(messages: MessagePart[], callID: string): string... FILE: src/hooks/anthropic-context-window-limit-recovery/pruning-tool-output-truncation.ts type OpencodeClient (line 12) | type OpencodeClient = PluginInput["client"] type StoredToolPart (line 14) | interface StoredToolPart { type SDKToolPart (line 23) | interface SDKToolPart { type SDKMessage (line 31) | interface SDKMessage { function getPartStorage (line 36) | function getPartStorage(): string { function getMessageIds (line 40) | function getMessageIds(sessionID: string): string[] { function truncateToolOutputsByCallId (line 53) | async function truncateToolOutputsByCallId( function truncateToolOutputsByCallIdFromSDK (line 105) | async function truncateToolOutputsByCallIdFromSDK( FILE: src/hooks/anthropic-context-window-limit-recovery/pruning-types.ts type ToolCallSignature (line 1) | interface ToolCallSignature { type FileOperation (line 8) | interface FileOperation { type ErroredToolCall (line 15) | interface ErroredToolCall { type PruningResult (line 22) | interface PruningResult { type PruningState (line 32) | interface PruningState { constant CHARS_PER_TOKEN (line 40) | const CHARS_PER_TOKEN = 4 function estimateTokens (line 42) | function estimateTokens(text: string): number { FILE: src/hooks/anthropic-context-window-limit-recovery/recovery-deduplication.test.ts function createImmediateTimeouts (line 16) | function createImmediateTimeouts(): () => void { FILE: src/hooks/anthropic-context-window-limit-recovery/recovery-hook.test.ts function createMockContext (line 36) | function createMockContext(): PluginInput { function setupDelayedTimeoutMocks (line 50) | function setupDelayedTimeoutMocks(): { FILE: src/hooks/anthropic-context-window-limit-recovery/recovery-hook.ts type AnthropicContextWindowLimitRecoveryOptions (line 10) | interface AnthropicContextWindowLimitRecoveryOptions { function createRecoveryState (line 15) | function createRecoveryState(): AutoCompactState { function createAnthropicContextWindowLimitRecoveryHook (line 27) | function createAnthropicContextWindowLimitRecoveryHook( FILE: src/hooks/anthropic-context-window-limit-recovery/state.ts function getOrCreateRetryState (line 3) | function getOrCreateRetryState( function getOrCreateTruncateState (line 15) | function getOrCreateTruncateState( function clearSessionState (line 27) | function clearSessionState( function getEmptyContentAttempt (line 39) | function getEmptyContentAttempt( function incrementEmptyContentAttempt (line 46) | function incrementEmptyContentAttempt( FILE: src/hooks/anthropic-context-window-limit-recovery/storage-paths.ts constant TRUNCATION_MESSAGE (line 5) | const TRUNCATION_MESSAGE = FILE: src/hooks/anthropic-context-window-limit-recovery/summarize-retry-strategy.test.ts type TimeoutCall (line 6) | type TimeoutCall = { function createAutoCompactState (line 10) | function createAutoCompactState(): AutoCompactState { FILE: src/hooks/anthropic-context-window-limit-recovery/summarize-retry-strategy.ts constant SUMMARIZE_RETRY_TOTAL_TIMEOUT_MS (line 11) | const SUMMARIZE_RETRY_TOTAL_TIMEOUT_MS = 120_000 function runSummarizeRetryStrategy (line 12) | async function runSummarizeRetryStrategy(params: { FILE: src/hooks/anthropic-context-window-limit-recovery/target-token-truncation.ts type OpencodeClient (line 8) | type OpencodeClient = PluginInput["client"] type SDKToolPart (line 10) | interface SDKToolPart { type SDKMessage (line 21) | interface SDKMessage { function calculateTargetBytesToRemove (line 26) | function calculateTargetBytesToRemove( function truncateUntilTargetTokens (line 38) | async function truncateUntilTargetTokens( FILE: src/hooks/anthropic-context-window-limit-recovery/tool-part-types.ts type StoredToolPart (line 1) | interface StoredToolPart { type ToolResultInfo (line 23) | interface ToolResultInfo { type AggressiveTruncateResult (line 31) | interface AggressiveTruncateResult { FILE: src/hooks/anthropic-context-window-limit-recovery/tool-result-storage-sdk.ts type OpencodeClient (line 8) | type OpencodeClient = PluginInput["client"] type SDKToolPart (line 10) | interface SDKToolPart { type SDKMessage (line 24) | interface SDKMessage { function findToolResultsBySizeFromSDK (line 29) | async function findToolResultsBySizeFromSDK( function truncateToolResultAsync (line 61) | async function truncateToolResultAsync( function countTruncatedResultsFromSDK (line 95) | async function countTruncatedResultsFromSDK( function getTotalToolOutputSizeFromSDK (line 117) | async function getTotalToolOutputSizeFromSDK( FILE: src/hooks/anthropic-context-window-limit-recovery/tool-result-storage.ts function findToolResultsBySize (line 12) | function findToolResultsBySize(sessionID: string): ToolResultInfo[] { function findLargestToolResult (line 45) | function findLargestToolResult(sessionID: string): ToolResultInfo | null { function truncateToolResult (line 50) | function truncateToolResult(partPath: string): { function getTotalToolOutputSize (line 91) | function getTotalToolOutputSize(sessionID: string): number { function countTruncatedResults (line 96) | function countTruncatedResults(sessionID: string): number { FILE: src/hooks/anthropic-context-window-limit-recovery/types.ts type ParsedTokenLimitError (line 1) | interface ParsedTokenLimitError { type RetryState (line 11) | interface RetryState { type TruncateState (line 17) | interface TruncateState { type AutoCompactState (line 22) | interface AutoCompactState { constant RETRY_CONFIG (line 31) | const RETRY_CONFIG = { constant TRUNCATE_CONFIG (line 38) | const TRUNCATE_CONFIG = { FILE: src/hooks/anthropic-effort/hook.ts constant OPUS_4_6_PATTERN (line 3) | const OPUS_4_6_PATTERN = /claude-opus-4[-.]6/i function isClaudeProvider (line 5) | function isClaudeProvider(providerID: string, modelID: string): boolean { function isOpus46 (line 11) | function isOpus46(modelID: string): boolean { type ChatParamsInput (line 16) | interface ChatParamsInput { type ChatParamsOutput (line 24) | interface ChatParamsOutput { function createAnthropicEffortHook (line 31) | function createAnthropicEffortHook() { FILE: src/hooks/anthropic-effort/index.test.ts type ChatParamsInput (line 4) | interface ChatParamsInput { type ChatParamsOutput (line 12) | interface ChatParamsOutput { function createMockParams (line 19) | function createMockParams(overrides: { FILE: src/hooks/atlas/atlas-hook.ts function createAtlasHook (line 7) | function createAtlasHook(ctx: PluginInput, options?: AtlasHookOptions) { FILE: src/hooks/atlas/boulder-continuation-injector.ts function injectBoulderContinuation (line 10) | async function injectBoulderContinuation(input: { FILE: src/hooks/atlas/boulder-session-lineage.ts function isSessionInBoulderLineage (line 5) | async function isSessionInBoulderLineage(input: { FILE: src/hooks/atlas/compaction-agent-filter.test.ts constant TEST_STORAGE_ROOT (line 12) | const TEST_STORAGE_ROOT = join(tmpdir(), `atlas-compaction-storage-${ran... constant TEST_MESSAGE_STORAGE (line 13) | const TEST_MESSAGE_STORAGE = join(TEST_STORAGE_ROOT, "message") constant TEST_PART_STORAGE (line 14) | const TEST_PART_STORAGE = join(TEST_STORAGE_ROOT, "part") function createMockPluginInput (line 38) | function createMockPluginInput() { function writeMessage (line 52) | function writeMessage(sessionID: string, fileName: string, agent: string... FILE: src/hooks/atlas/event-handler.ts function createAtlasEventHandler (line 8) | function createAtlasEventHandler(input: { FILE: src/hooks/atlas/final-wave-approval-gate-regression.test.ts constant TEST_STORAGE_ROOT (line 11) | const TEST_STORAGE_ROOT = join(tmpdir(), `atlas-final-wave-regression-st... constant TEST_MESSAGE_STORAGE (line 12) | const TEST_MESSAGE_STORAGE = join(TEST_STORAGE_ROOT, "message") constant TEST_PART_STORAGE (line 13) | const TEST_PART_STORAGE = join(TEST_STORAGE_ROOT, "part") type AtlasHookContext (line 35) | type AtlasHookContext = Parameters[0] function createMockPluginInput (line 40) | function createMockPluginInput(): AtlasHookContext { function setupMessageStorage (line 82) | function setupMessageStorage(sessionID: string): void { function writePlanState (line 97) | function writePlanState(sessionID: string, planName: string, planContent... FILE: src/hooks/atlas/final-wave-approval-gate.test.ts constant TEST_STORAGE_ROOT (line 11) | const TEST_STORAGE_ROOT = join(tmpdir(), `atlas-final-wave-storage-${ran... constant TEST_MESSAGE_STORAGE (line 12) | const TEST_MESSAGE_STORAGE = join(TEST_STORAGE_ROOT, "message") constant TEST_PART_STORAGE (line 13) | const TEST_PART_STORAGE = join(TEST_STORAGE_ROOT, "part") type AtlasHookContext (line 35) | type AtlasHookContext = Parameters[0] type PromptMock (line 36) | type PromptMock = ReturnType function createMockPluginInput (line 41) | function createMockPluginInput(): AtlasHookContext & { _promptMock: Prom... function setupMessageStorage (line 90) | function setupMessageStorage(sessionID: string): void { function cleanupMessageStorage (line 105) | function cleanupMessageStorage(sessionID: string): void { FILE: src/hooks/atlas/final-wave-approval-gate.ts constant APPROVE_VERDICT_PATTERN (line 4) | const APPROVE_VERDICT_PATTERN = /\bVERDICT:\s*APPROVE\b/i function clearFinalWaveApprovalTracking (line 6) | function clearFinalWaveApprovalTracking(sessionState: SessionState): void { function shouldPauseForFinalWaveApproval (line 11) | function shouldPauseForFinalWaveApproval(input: { FILE: src/hooks/atlas/final-wave-plan-state.ts constant TODO_HEADING_PATTERN (line 3) | const TODO_HEADING_PATTERN = /^##\s+TODOs\b/i constant FINAL_VERIFICATION_HEADING_PATTERN (line 4) | const FINAL_VERIFICATION_HEADING_PATTERN = /^##\s+Final Verification Wav... constant SECOND_LEVEL_HEADING_PATTERN (line 5) | const SECOND_LEVEL_HEADING_PATTERN = /^##\s+/ constant UNCHECKED_CHECKBOX_PATTERN (line 6) | const UNCHECKED_CHECKBOX_PATTERN = /^\s*[-*]\s*\[\s*\]\s*(.+)$/ constant TODO_TASK_PATTERN (line 7) | const TODO_TASK_PATTERN = /^\d+\./ constant FINAL_WAVE_TASK_PATTERN (line 8) | const FINAL_WAVE_TASK_PATTERN = /^F\d+\./i type PlanSection (line 10) | type PlanSection = "todo" | "final-wave" | "other" type FinalWavePlanState (line 12) | type FinalWavePlanState = { function readFinalWavePlanState (line 17) | function readFinalWavePlanState(planPath: string): FinalWavePlanState | ... FILE: src/hooks/atlas/hook-name.ts constant HOOK_NAME (line 1) | const HOOK_NAME = "atlas" FILE: src/hooks/atlas/idle-event-lineage.test.ts function writeIncompleteBoulder (line 19) | function writeIncompleteBoulder(): void { function createHook (line 33) | function createHook(parentSessionIDs?: Record { function firePendingTimers (line 2094) | async function firePendingTimers(): Promise { FILE: src/hooks/atlas/is-abort-error.ts function isAbortError (line 1) | function isAbortError(error: unknown): boolean { FILE: src/hooks/atlas/recent-model-resolver.ts type PromptContext (line 9) | type PromptContext = { function resolveRecentPromptContextForSession (line 14) | async function resolveRecentPromptContextForSession( function resolveRecentModelForSession (line 60) | async function resolveRecentModelForSession( FILE: src/hooks/atlas/resolve-active-boulder-session.ts function resolveActiveBoulderSession (line 7) | async function resolveActiveBoulderSession(input: { FILE: src/hooks/atlas/session-last-agent.sqlite.test.ts function createMockClient (line 11) | function createMockClient(messages: Array<{ info?: { agent?: string } }>) { FILE: src/hooks/atlas/session-last-agent.ts type SessionMessagesClient (line 6) | type SessionMessagesClient = { function isCompactionAgent (line 12) | function isCompactionAgent(agent: unknown): boolean { function getLastAgentFromMessageDir (line 16) | function getLastAgentFromMessageDir(messageDir: string): string | null { function getLastAgentFromSession (line 41) | async function getLastAgentFromSession( FILE: src/hooks/atlas/sisyphus-path.ts function isSisyphusPath (line 6) | function isSisyphusPath(filePath: string): boolean { FILE: src/hooks/atlas/subagent-session-id.ts function extractSessionIdFromOutput (line 6) | function extractSessionIdFromOutput(output: string): string | undefined { function validateSubagentSessionId (line 20) | async function validateSubagentSessionId(input: { FILE: src/hooks/atlas/system-reminder-templates.ts constant DIRECT_WORK_REMINDER (line 3) | const DIRECT_WORK_REMINDER = ` constant BOULDER_CONTINUATION_PROMPT (line 31) | const BOULDER_CONTINUATION_PROMPT = `${createSystemDirective(SystemDirec... constant VERIFICATION_REMINDER (line 42) | const VERIFICATION_REMINDER = `**THE SUBAGENT JUST CLAIMED THIS TASK IS ... constant VERIFICATION_REMINDER_GEMINI (line 106) | const VERIFICATION_REMINDER_GEMINI = `**THE SUBAGENT HAS FINISHED. THEIR... constant ORCHESTRATOR_DELEGATION_REQUIRED (line 165) | const ORCHESTRATOR_DELEGATION_REQUIRED = ` constant SINGLE_TASK_DIRECTIVE (line 215) | const SINGLE_TASK_DIRECTIVE = ` FILE: src/hooks/atlas/tool-execute-after.ts function resolvePreferredSessionId (line 28) | function resolvePreferredSessionId(currentSessionId?: string, trackedSes... function resolveTaskContext (line 32) | function resolveTaskContext( function createToolExecuteAfterHandler (line 71) | function createToolExecuteAfterHandler(input: { FILE: src/hooks/atlas/tool-execute-before.ts function createToolExecuteBeforeHandler (line 12) | function createToolExecuteBeforeHandler(input: { FILE: src/hooks/atlas/types.ts type ModelInfo (line 5) | type ModelInfo = { providerID: string; modelID: string } type AtlasHookOptions (line 7) | interface AtlasHookOptions { type ToolExecuteAfterInput (line 16) | interface ToolExecuteAfterInput { type ToolExecuteAfterOutput (line 22) | interface ToolExecuteAfterOutput { type TrackedTopLevelTaskRef (line 28) | type TrackedTopLevelTaskRef = Pick function writePluginFixture (line 17) | function writePluginFixture(baseDir: string): void { FILE: src/hooks/auto-slash-command/executor.ts type SkillCommandInfo (line 11) | interface SkillCommandInfo { type CommandInfo (line 20) | type CommandInfo = DiscoveredCommandInfo | SkillCommandInfo function skillToCommandInfo (line 22) | function skillToCommandInfo(skill: LoadedSkill): SkillCommandInfo { type ExecutorOptions (line 40) | interface ExecutorOptions { function discoverAllCommands (line 48) | async function discoverAllCommands(options?: ExecutorOptions): Promise { function getDeletedSessionID (line 27) | function getDeletedSessionID(properties: unknown): string | null { function getCommandExecutionEventID (line 40) | function getCommandExecutionEventID(input: CommandExecuteBeforeInput): s... type AutoSlashCommandHookOptions (line 67) | interface AutoSlashCommandHookOptions { function createAutoSlashCommandHook (line 73) | function createAutoSlashCommandHook(options?: AutoSlashCommandHookOption... FILE: src/hooks/auto-slash-command/index.test.ts function createMockInput (line 20) | function createMockInput(sessionID: string, messageID?: string): AutoSla... function createMockOutput (line 29) | function createMockOutput(text: string): AutoSlashCommandHookOutput { function createCommandInput (line 259) | function createCommandInput(command: string, args: string = ""): Command... function createCommandOutput (line 267) | function createCommandOutput(text?: string): CommandExecuteBeforeOutput { function createTestSkill (line 335) | function createTestSkill(name: string, template: string): LoadedSkill { FILE: src/hooks/auto-slash-command/processed-command-store.ts constant MAX_PROCESSED_ENTRY_COUNT (line 1) | const MAX_PROCESSED_ENTRY_COUNT = 10_000 constant PROCESSED_COMMAND_TTL_MS (line 2) | const PROCESSED_COMMAND_TTL_MS = 30_000 function pruneExpiredEntries (line 4) | function pruneExpiredEntries(entries: Map, now: number):... function trimProcessedEntries (line 8) | function trimProcessedEntries(entries: Map): Map, sessionID: s... type ProcessedCommandStore (line 25) | interface ProcessedCommandStore { function createProcessedCommandStore (line 32) | function createProcessedCommandStore(): ProcessedCommandStore { FILE: src/hooks/auto-slash-command/types.ts type AutoSlashCommandHookInput (line 1) | interface AutoSlashCommandHookInput { type AutoSlashCommandHookOutput (line 8) | interface AutoSlashCommandHookOutput { type ParsedSlashCommand (line 13) | interface ParsedSlashCommand { type AutoSlashCommandResult (line 19) | interface AutoSlashCommandResult { type CommandExecuteBeforeInput (line 25) | interface CommandExecuteBeforeInput { type CommandExecuteBeforeOutput (line 40) | interface CommandExecuteBeforeOutput { FILE: src/hooks/auto-update-checker/cache.test.ts constant TEST_CACHE_DIR (line 5) | const TEST_CACHE_DIR = join(import.meta.dir, "__test-cache__") constant TEST_OPENCODE_CACHE_DIR (line 6) | const TEST_OPENCODE_CACHE_DIR = join(TEST_CACHE_DIR, "opencode") constant TEST_USER_CONFIG_DIR (line 7) | const TEST_USER_CONFIG_DIR = "/tmp/opencode-config" function resetTestCache (line 19) | function resetTestCache(): void { FILE: src/hooks/auto-update-checker/cache.ts type BunLockfile (line 6) | interface BunLockfile { function stripTrailingCommas (line 15) | function stripTrailingCommas(json: string): string { function removeFromTextBunLock (line 19) | function removeFromTextBunLock(lockPath: string, packageName: string): b... function deleteBinaryBunLock (line 36) | function deleteBinaryBunLock(lockPath: string): boolean { function removeFromBunLock (line 46) | function removeFromBunLock(packageName: string): boolean { function invalidatePackage (line 62) | function invalidatePackage(packageName: string = PACKAGE_NAME): boolean { function invalidateCache (line 95) | function invalidateCache(): boolean { FILE: src/hooks/auto-update-checker/checker/cached-version.ts function getCachedVersion (line 9) | function getCachedVersion(): string | null { FILE: src/hooks/auto-update-checker/checker/check-for-update.ts function checkForUpdate (line 9) | async function checkForUpdate(directory: string): Promise { function createPluginInput (line 50) | function createPluginInput() { function flushScheduledWork (line 57) | async function flushScheduledWork(): Promise { function runSessionCreatedEvent (line 65) | function runSessionCreatedEvent( FILE: src/hooks/auto-update-checker/hook.ts function createAutoUpdateCheckerHook (line 11) | function createAutoUpdateCheckerHook(ctx: PluginInput, options: AutoUpda... FILE: src/hooks/auto-update-checker/hook/background-update-check.test.ts type PluginEntry (line 4) | type PluginEntry = { type ToastMessageGetter (line 11) | type ToastMessageGetter = (isUpdate: boolean, version?: string) => string function createPluginEntry (line 13) | function createPluginEntry(overrides?: Partial): PluginEntry { FILE: src/hooks/auto-update-checker/hook/background-update-check.ts function getPinnedVersionToastMessage (line 13) | function getPinnedVersionToastMessage(latestVersion: string): string { function resolveActiveInstallWorkspace (line 21) | function resolveActiveInstallWorkspace(): string { function runBunInstallSafe (line 44) | async function runBunInstallSafe(workspaceDir: string): Promise { function runBackgroundUpdateCheck (line 58) | async function runBackgroundUpdateCheck( FILE: src/hooks/auto-update-checker/hook/config-errors-toast.ts function showConfigErrorsIfAny (line 5) | async function showConfigErrorsIfAny(ctx: PluginInput): Promise { FILE: src/hooks/auto-update-checker/hook/connected-providers-status.ts constant CACHE_UPDATE_TIMEOUT_MS (line 6) | const CACHE_UPDATE_TIMEOUT_MS = 10000 function updateAndShowConnectedProvidersCacheStatus (line 8) | async function updateAndShowConnectedProvidersCacheStatus(ctx: PluginInp... FILE: src/hooks/auto-update-checker/hook/model-cache-warning.ts function showModelCacheWarningIfNeeded (line 5) | async function showModelCacheWarningIfNeeded(ctx: PluginInput): Promise<... FILE: src/hooks/auto-update-checker/hook/spinner-toast.ts constant SISYPHUS_SPINNER (line 3) | const SISYPHUS_SPINNER = ["·", "•", "●", "○", "◌", "◦", " "] function showSpinnerToast (line 5) | async function showSpinnerToast(ctx: PluginInput, version: string, messa... FILE: src/hooks/auto-update-checker/hook/startup-toasts.ts function showVersionToast (line 5) | async function showVersionToast(ctx: PluginInput, version: string | null... function showLocalDevToast (line 11) | async function showLocalDevToast( FILE: src/hooks/auto-update-checker/hook/update-toasts.ts function showUpdateAvailableToast (line 4) | async function showUpdateAvailableToast( function showAutoUpdatedToast (line 22) | async function showAutoUpdatedToast(ctx: PluginInput, oldVersion: string... FILE: src/hooks/auto-update-checker/hook/workspace-resolution.test.ts type PluginEntry (line 6) | type PluginEntry = { type ToastMessageGetter (line 13) | type ToastMessageGetter = (isUpdate: boolean, version?: string) => string function createPluginEntry (line 15) | function createPluginEntry(overrides?: Partial): PluginEntry { constant TEST_DIR (line 25) | const TEST_DIR = join(import.meta.dir, "__test-workspace-resolution__") constant TEST_CACHE_DIR (line 26) | const TEST_CACHE_DIR = join(TEST_DIR, "cache") constant TEST_CONFIG_DIR (line 27) | const TEST_CONFIG_DIR = join(TEST_DIR, "config") constant ORIGINAL_PACKAGE_NAME (line 78) | const ORIGINAL_PACKAGE_NAME = "oh-my-opencode" FILE: src/hooks/auto-update-checker/types.ts type NpmDistTags (line 1) | interface NpmDistTags { type OpencodeConfig (line 6) | interface OpencodeConfig { type PackageJson (line 11) | interface PackageJson { type UpdateCheckResult (line 17) | interface UpdateCheckResult { type AutoUpdateCheckerOptions (line 25) | interface AutoUpdateCheckerOptions { FILE: src/hooks/auto-update-checker/version-channel.ts function isPrereleaseVersion (line 1) | function isPrereleaseVersion(version: string): boolean { function isDistTag (line 5) | function isDistTag(version: string): boolean { function isPrereleaseOrDistTag (line 10) | function isPrereleaseOrDistTag(pinnedVersion: string | null): boolean { function extractChannel (line 15) | function extractChannel(version: string | null): string { FILE: src/hooks/background-notification/hook.ts type Event (line 3) | interface Event { type EventInput (line 8) | interface EventInput { type ChatMessageInput (line 12) | interface ChatMessageInput { type ChatMessageOutput (line 16) | interface ChatMessageOutput { function createBackgroundNotificationHook (line 26) | function createBackgroundNotificationHook(manager: BackgroundManager) { FILE: src/hooks/background-notification/types.ts type BackgroundNotificationHookConfig (line 3) | interface BackgroundNotificationHookConfig { FILE: src/hooks/category-skill-reminder/formatter.ts function formatSkillNames (line 3) | function formatSkillNames(skills: AvailableSkill[], limit: number): stri... function buildReminderMessage (line 11) | function buildReminderMessage(availableSkills: AvailableSkill[]): string { FILE: src/hooks/category-skill-reminder/hook.ts constant TARGET_AGENTS (line 12) | const TARGET_AGENTS = new Set([ constant DELEGATABLE_WORK_TOOLS (line 22) | const DELEGATABLE_WORK_TOOLS = new Set([ constant DELEGATION_TOOLS (line 34) | const DELEGATION_TOOLS = new Set([ type ToolExecuteInput (line 39) | interface ToolExecuteInput { type ToolExecuteOutput (line 46) | interface ToolExecuteOutput { type SessionState (line 52) | interface SessionState { function createCategorySkillReminderHook (line 58) | function createCategorySkillReminderHook( FILE: src/hooks/category-skill-reminder/index.test.ts function createMockPluginInput (line 23) | function createMockPluginInput() { function createHook (line 33) | function createHook(availableSkills: AvailableSkill[] = []) { FILE: src/hooks/claude-code-hooks/claude-code-hooks-hook.ts function createClaudeCodeHooksHook (line 10) | function createClaudeCodeHooksHook( FILE: src/hooks/claude-code-hooks/config-loader.ts type DisabledHooksConfig (line 7) | interface DisabledHooksConfig { type PluginExtendedConfig (line 15) | interface PluginExtendedConfig { constant USER_CONFIG_PATH (line 19) | const USER_CONFIG_PATH = join(getOpenCodeConfigDir({ binary: "opencode" ... function getProjectConfigPath (line 21) | function getProjectConfigPath(): string { function loadConfigFromPath (line 25) | async function loadConfigFromPath(path: string): Promise { function getRegex (line 79) | function getRegex(pattern: string): RegExp { function isHookCommandDisabled (line 93) | function isHookCommandDisabled( FILE: src/hooks/claude-code-hooks/config.ts type RawHookMatcher (line 6) | interface RawHookMatcher { type RawClaudeHooksConfig (line 12) | interface RawClaudeHooksConfig { function normalizeHookMatcher (line 20) | function normalizeHookMatcher(raw: RawHookMatcher): HookMatcher { function normalizeHooksConfig (line 27) | function normalizeHooksConfig(raw: RawClaudeHooksConfig): ClaudeHooksCon... function getClaudeSettingsPaths (line 46) | function getClaudeSettingsPaths(customPath?: string): string[] { function mergeHooksConfig (line 63) | function mergeHooksConfig( function loadClaudeHooksConfig (line 83) | async function loadClaudeHooksConfig( FILE: src/hooks/claude-code-hooks/dispatch-hook.ts function getHookIdentifier (line 7) | function getHookIdentifier(hook: HookAction): string { function dispatchHook (line 12) | async function dispatchHook( FILE: src/hooks/claude-code-hooks/execute-http-hook.ts constant DEFAULT_HTTP_HOOK_TIMEOUT_S (line 4) | const DEFAULT_HTTP_HOOK_TIMEOUT_S = 30 constant ALLOWED_SCHEMES (line 5) | const ALLOWED_SCHEMES = new Set(["http:", "https:"]) function interpolateEnvVars (line 7) | function interpolateEnvVars( function resolveHeaders (line 22) | function resolveHeaders( function executeHttpHook (line 39) | async function executeHttpHook( FILE: src/hooks/claude-code-hooks/handlers/chat-message-handler.ts function createChatMessageHandler (line 15) | function createChatMessageHandler( FILE: src/hooks/claude-code-hooks/handlers/pre-compact-handler.ts function createPreCompactHandler (line 8) | function createPreCompactHandler(ctx: PluginInput, config: PluginConfig) { FILE: src/hooks/claude-code-hooks/handlers/session-event-handler.ts function createSessionEventHandler (line 13) | function createSessionEventHandler(ctx: PluginInput, config: PluginConfi... FILE: src/hooks/claude-code-hooks/handlers/tool-execute-after-handler.test.ts function isRecord (line 3) | function isRecord(value: unknown): value is Record { FILE: src/hooks/claude-code-hooks/handlers/tool-execute-after-handler.ts function isRecord (line 14) | function isRecord(value: unknown): value is Record { function getStringValue (line 18) | function getStringValue(record: Record, key: string): s... function getNumberValue (line 23) | function getNumberValue(record: Record, key: string): n... function buildTranscriptToolOutput (line 28) | function buildTranscriptToolOutput(outputText: string, metadata: unknown... function createToolExecuteAfterHandler (line 73) | function createToolExecuteAfterHandler(ctx: PluginInput, config: PluginC... FILE: src/hooks/claude-code-hooks/handlers/tool-execute-before-handler.ts function createToolExecuteBeforeHandler (line 13) | function createToolExecuteBeforeHandler(ctx: PluginInput, config: Plugin... FILE: src/hooks/claude-code-hooks/plugin-config.ts constant DEFAULT_CONFIG (line 8) | const DEFAULT_CONFIG = { FILE: src/hooks/claude-code-hooks/post-tool-use.ts type PostToolUseClient (line 11) | interface PostToolUseClient { type PostToolUseContext (line 17) | interface PostToolUseContext { type PostToolUseResult (line 29) | interface PostToolUseResult { function executePostToolUseHooks (line 44) | async function executePostToolUseHooks( FILE: src/hooks/claude-code-hooks/pre-compact.ts type PreCompactContext (line 10) | interface PreCompactContext { type PreCompactResult (line 15) | interface PreCompactResult { function executePreCompactHooks (line 25) | async function executePreCompactHooks( FILE: src/hooks/claude-code-hooks/pre-tool-use.ts type PreToolUseContext (line 11) | interface PreToolUseContext { type PreToolUseResult (line 21) | interface PreToolUseResult { function buildInputLines (line 36) | function buildInputLines(toolInput: Record): string { function executePreToolUseHooks (line 46) | async function executePreToolUseHooks( FILE: src/hooks/claude-code-hooks/session-hook-state.ts function clearSessionHookState (line 7) | function clearSessionHookState(sessionID: string): void { FILE: src/hooks/claude-code-hooks/stop.test.ts function createStopContext (line 22) | function createStopContext(overrides?: Partial): StopContext { function createConfig (line 30) | function createConfig(stopHooks: ClaudeHooksConfig["Stop"]): ClaudeHooks... FILE: src/hooks/claude-code-hooks/stop.ts function setStopHookActive (line 14) | function setStopHookActive(sessionId: string, active: boolean): void { function getStopHookActive (line 18) | function getStopHookActive(sessionId: string): boolean { type StopContext (line 22) | interface StopContext { type StopResult (line 31) | interface StopResult { function executeStopHooks (line 39) | async function executeStopHooks( FILE: src/hooks/claude-code-hooks/todo.ts constant TODO_DIR (line 6) | const TODO_DIR = join(getClaudeConfigDir(), "todos") function getTodoPath (line 8) | function getTodoPath(sessionId: string): string { function ensureTodoDir (line 12) | function ensureTodoDir(): void { type OpenCodeTodo (line 18) | interface OpenCodeTodo { function toClaudeCodeFormat (line 25) | function toClaudeCodeFormat(item: OpenCodeTodo | TodoItem): ClaudeCodeTo... function loadTodoFile (line 33) | function loadTodoFile(sessionId: string): TodoFile | null { function saveTodoFile (line 57) | function saveTodoFile(sessionId: string, file: TodoFile): void { function saveOpenCodeTodos (line 64) | function saveOpenCodeTodos(sessionId: string, todos: OpenCodeTodo[]): vo... function deleteTodoFile (line 71) | function deleteTodoFile(sessionId: string): void { FILE: src/hooks/claude-code-hooks/tool-input-cache.ts type CacheEntry (line 5) | interface CacheEntry { constant CACHE_TTL (line 12) | const CACHE_TTL = 60000 // 1 minute function cacheToolInput (line 14) | function cacheToolInput( function getToolInput (line 24) | function getToolInput( FILE: src/hooks/claude-code-hooks/transcript.test.ts function createMockClient (line 9) | function createMockClient(messages: unknown[] = []) { FILE: src/hooks/claude-code-hooks/transcript.ts constant TRANSCRIPT_DIR (line 9) | const TRANSCRIPT_DIR = join(getClaudeConfigDir(), "transcripts") function getTranscriptPath (line 11) | function getTranscriptPath(sessionId: string): string { function ensureTranscriptDir (line 15) | function ensureTranscriptDir(): void { function appendTranscriptEntry (line 21) | function appendTranscriptEntry( type OpenCodeMessagePart (line 35) | interface OpenCodeMessagePart { type OpenCodeMessage (line 44) | interface OpenCodeMessage { type DisabledTranscriptEntry (line 51) | interface DisabledTranscriptEntry { type TranscriptCacheEntry (line 69) | interface TranscriptCacheEntry { constant TRANSCRIPT_CACHE_TTL_MS (line 75) | const TRANSCRIPT_CACHE_TTL_MS = 5 * 60 * 1000 // 5 minutes function clearTranscriptCache (line 83) | function clearTranscriptCache(sessionId?: string): void { function isCacheValid (line 100) | function isCacheValid(entry: TranscriptCacheEntry): boolean { function buildCurrentEntry (line 104) | function buildCurrentEntry(toolName: string, toolInput: Record( function initializeCommentCheckerCli (line 26) | function initializeCommentCheckerCli(debugLog: (...args: unknown[]) => v... function getCommentCheckerCliPathPromise (line 39) | function getCommentCheckerCliPathPromise(): Promise | null { function processWithCli (line 43) | async function processWithCli( type ApplyPatchEdit (line 81) | interface ApplyPatchEdit { function processApplyPatchEditsWithCli (line 87) | async function processApplyPatchEditsWithCli( function isCliPathUsable (line 122) | function isCliPathUsable(cliPath: string | null): cliPath is string { FILE: src/hooks/comment-checker/cli.test.ts function createMockInput (line 8) | function createMockInput() { function createScriptBinary (line 19) | function createScriptBinary(scriptContent: string): string { FILE: src/hooks/comment-checker/cli.ts constant DEBUG (line 9) | const DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1" constant DEBUG_FILE (line 10) | const DEBUG_FILE = join(tmpdir(), "comment-checker-debug.log") function debugLog (line 12) | function debugLog(...args: unknown[]) { function getBinaryName (line 19) | function getBinaryName(): string { function findCommentCheckerPathSync (line 23) | function findCommentCheckerPathSync(): string | null { function getCommentCheckerPath (line 65) | async function getCommentCheckerPath(): Promise { function getCommentCheckerPathSync (line 105) | function getCommentCheckerPathSync(): string | null { function startBackgroundInit (line 113) | function startBackgroundInit(): void { type HookInput (line 124) | interface HookInput { type CheckResult (line 140) | interface CheckResult { function runCommentChecker (line 151) | async function runCommentChecker(input: HookInput, cliPath?: string, cus... function isCliAvailable (line 258) | function isCliAvailable(): boolean { function ensureCliAvailable (line 266) | async function ensureCliAvailable(): Promise { FILE: src/hooks/comment-checker/downloader.ts constant DEBUG (line 16) | const DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1" constant DEBUG_FILE (line 17) | const DEBUG_FILE = join(tmpdir(), "comment-checker-debug.log") function debugLog (line 19) | function debugLog(...args: unknown[]) { constant REPO (line 26) | const REPO = "code-yeongyu/go-claude-code-comment-checker" type PlatformInfo (line 28) | interface PlatformInfo { constant PLATFORM_MAP (line 34) | const PLATFORM_MAP: Record = { function getCacheDir (line 47) | function getCacheDir(): string { function getBinaryName (line 62) | function getBinaryName(): string { function getCachedBinaryPath (line 69) | function getCachedBinaryPath(): string | null { function getPackageVersion (line 76) | function getPackageVersion(): string { function downloadCommentChecker (line 91) | async function downloadCommentChecker(): Promise { function ensureCommentCheckerBinary (line 159) | async function ensureCommentCheckerBinary(): Promise { FILE: src/hooks/comment-checker/hook.ts constant DEBUG (line 31) | const DEBUG = process.env.COMMENT_CHECKER_DEBUG === "1" constant DEBUG_FILE (line 32) | const DEBUG_FILE = join(tmpdir(), "comment-checker-debug.log") function debugLog (line 34) | function debugLog(...args: unknown[]) { function createCommentCheckerHooks (line 43) | function createCommentCheckerHooks(config?: CommentCheckerConfig) { FILE: src/hooks/comment-checker/pending-calls.ts constant PENDING_CALL_TTL (line 4) | const PENDING_CALL_TTL = 60_000 function cleanupOldPendingCalls (line 9) | function cleanupOldPendingCalls(): void { function startPendingCallCleanup (line 18) | function startPendingCallCleanup(): void { function registerPendingCall (line 27) | function registerPendingCall(callID: string, pendingCall: PendingCall): ... function takePendingCall (line 31) | function takePendingCall(callID: string): PendingCall | undefined { FILE: src/hooks/comment-checker/types.ts type CommentType (line 1) | type CommentType = "line" | "block" | "docstring" type CommentInfo (line 3) | interface CommentInfo { type PendingCall (line 12) | interface PendingCall { type FileComments (line 23) | interface FileComments { type FilterResult (line 28) | interface FilterResult { type CommentFilter (line 33) | type CommentFilter = (comment: CommentInfo) => FilterResult FILE: src/hooks/compaction-context-injector/compaction-context-prompt.ts constant COMPACTION_CONTEXT_PROMPT (line 6) | const COMPACTION_CONTEXT_PROMPT = `${createSystemDirective(SystemDirecti... FILE: src/hooks/compaction-context-injector/constants.ts constant HOOK_NAME (line 1) | const HOOK_NAME = "compaction-context-injector" constant AGENT_RECOVERY_PROMPT (line 2) | const AGENT_RECOVERY_PROMPT = "[restore checkpointed session agent confi... constant NO_TEXT_TAIL_THRESHOLD (line 3) | const NO_TEXT_TAIL_THRESHOLD = 5 constant RECOVERY_COOLDOWN_MS (line 4) | const RECOVERY_COOLDOWN_MS = 60_000 constant RECENT_COMPACTION_WINDOW_MS (line 5) | const RECENT_COMPACTION_WINDOW_MS = 10 * 60 * 1000 FILE: src/hooks/compaction-context-injector/hook.ts function createCompactionContextInjector (line 14) | function createCompactionContextInjector(options?: { FILE: src/hooks/compaction-context-injector/index.test.ts function createMockContext (line 20) | function createMockContext( FILE: src/hooks/compaction-context-injector/recovery-prompt-config.ts type RecoveryPromptConfig (line 3) | type RecoveryPromptConfig = CompactionAgentConfigCheckpoint & { function isCompactionAgent (line 7) | function isCompactionAgent(agent: string | undefined): boolean { function matchesExpectedModel (line 11) | function matchesExpectedModel( function matchesExpectedTools (line 25) | function matchesExpectedTools( function createExpectedRecoveryPromptConfig (line 47) | function createExpectedRecoveryPromptConfig( function isPromptConfigRecovered (line 61) | function isPromptConfigRecovered( FILE: src/hooks/compaction-context-injector/recovery.test.ts type SessionMessageResponse (line 7) | type SessionMessageResponse = Array<{ type PromptAsyncInput (line 11) | type PromptAsyncInput = { function createPromptAsyncRecorder (line 23) | function createPromptAsyncRecorder(): { function createMockContext (line 38) | function createMockContext( function createAssistantMessageUpdatedEvent (line 60) | function createAssistantMessageUpdatedEvent(sessionID: string, messageID... function createMeaningfulPartUpdatedEvent (line 75) | function createMeaningfulPartUpdatedEvent( FILE: src/hooks/compaction-context-injector/recovery.ts function createRecoveryLogic (line 22) | function createRecoveryLogic( FILE: src/hooks/compaction-context-injector/session-id.ts function isCompactionAgent (line 1) | function isCompactionAgent(agent: string | undefined): boolean { function resolveSessionID (line 5) | function resolveSessionID(props?: Record): string | und... FILE: src/hooks/compaction-context-injector/session-prompt-config-resolver.test.ts type SessionMessage (line 11) | type SessionMessage = { function createMockContext (line 22) | function createMockContext(messages: SessionMessage[]) { FILE: src/hooks/compaction-context-injector/session-prompt-config-resolver.ts type SessionMessage (line 11) | type SessionMessage = { type ResolverContext (line 24) | type ResolverContext = { function resolveSessionPromptConfig (line 33) | async function resolveSessionPromptConfig( function resolveLatestSessionPromptConfig (line 89) | async function resolveLatestSessionPromptConfig( FILE: src/hooks/compaction-context-injector/tail-monitor.ts constant MEANINGFUL_ASSISTANT_PART_TYPES (line 1) | const MEANINGFUL_ASSISTANT_PART_TYPES = new Set([ type TailMonitorState (line 7) | type TailMonitorState = { function finalizeTrackedAssistantMessage (line 15) | function finalizeTrackedAssistantMessage( function shouldTreatAssistantPartAsOutput (line 31) | function shouldTreatAssistantPartAsOutput(part: { function trackAssistantOutput (line 42) | function trackAssistantOutput( FILE: src/hooks/compaction-context-injector/types.ts type CompactionContextInjector (line 1) | interface CompactionContextInjector { type CompactionContextClient (line 7) | type CompactionContextClient = { FILE: src/hooks/compaction-context-injector/validated-model.ts type PromptConfigInfo (line 4) | type PromptConfigInfo = { function resolveValidatedModel (line 14) | function resolveValidatedModel( function validateCheckpointModel (line 31) | function validateCheckpointModel( FILE: src/hooks/compaction-todo-preserver/hook.ts type TodoSnapshot (line 4) | interface TodoSnapshot { type TodoWriter (line 11) | type TodoWriter = (input: { sessionID: string; todos: TodoSnapshot[] }) ... constant HOOK_NAME (line 13) | const HOOK_NAME = "compaction-todo-preserver" function extractTodos (line 15) | function extractTodos(response: unknown): TodoSnapshot[] { function resolveTodoWriter (line 26) | async function resolveTodoWriter(): Promise { function resolveSessionID (line 42) | function resolveSessionID(props?: Record): string | und... type CompactionTodoPreserver (line 47) | interface CompactionTodoPreserver { function createCompactionTodoPreserverHook (line 52) | function createCompactionTodoPreserverHook( FILE: src/hooks/compaction-todo-preserver/index.test.ts function createMockContext (line 23) | function createMockContext(todoResponses: Array[]): PluginInput { FILE: src/hooks/context-window-monitor.model-context-limits.test.ts function createOutput (line 6) | function createOutput() { FILE: src/hooks/context-window-monitor.test.ts constant ANTHROPIC_CONTEXT_ENV_KEY (line 6) | const ANTHROPIC_CONTEXT_ENV_KEY = "ANTHROPIC_1M_CONTEXT" constant VERTEX_CONTEXT_ENV_KEY (line 7) | const VERTEX_CONTEXT_ENV_KEY = "VERTEX_ANTHROPIC_1M_CONTEXT" function resetContextLimitEnv (line 12) | function resetContextLimitEnv(): void { function createMockCtx (line 26) | function createMockCtx() { FILE: src/hooks/context-window-monitor.ts constant CONTEXT_WARNING_THRESHOLD (line 8) | const CONTEXT_WARNING_THRESHOLD = 0.70 function createContextReminder (line 10) | function createContextReminder(actualLimit: number): string { type TokenInfo (line 20) | interface TokenInfo { type CachedTokenState (line 27) | interface CachedTokenState { function createContextWindowMonitorHook (line 33) | function createContextWindowMonitorHook( FILE: src/hooks/delegate-task-retry/guidance.ts function extractAvailableList (line 3) | function extractAvailableList(output: string): string | null { function buildRetryGuidance (line 8) | function buildRetryGuidance(errorInfo: DetectedError): string { FILE: src/hooks/delegate-task-retry/hook.ts function createDelegateTaskRetryHook (line 6) | function createDelegateTaskRetryHook(_ctx: PluginInput) { FILE: src/hooks/delegate-task-retry/patterns.ts type DelegateTaskErrorPattern (line 1) | interface DelegateTaskErrorPattern { constant DELEGATE_TASK_ERROR_PATTERNS (line 7) | const DELEGATE_TASK_ERROR_PATTERNS: DelegateTaskErrorPattern[] = [ type DetectedError (line 59) | interface DetectedError { function detectDelegateTaskError (line 64) | function detectDelegateTaskError(output: string): DetectedError | null { FILE: src/hooks/directory-agents-injector/constants.ts constant AGENTS_INJECTOR_STORAGE (line 3) | const AGENTS_INJECTOR_STORAGE = join( constant AGENTS_FILENAME (line 7) | const AGENTS_FILENAME = "AGENTS.md"; FILE: src/hooks/directory-agents-injector/finder.ts function resolveFilePath (line 6) | function resolveFilePath(rootDirectory: string, path: string): string | ... function findAgentsMdUp (line 12) | function findAgentsMdUp(input: { FILE: src/hooks/directory-agents-injector/hook.ts type ToolExecuteInput (line 7) | interface ToolExecuteInput { type ToolExecuteOutput (line 13) | interface ToolExecuteOutput { type ToolExecuteBeforeOutput (line 19) | interface ToolExecuteBeforeOutput { type EventInput (line 23) | interface EventInput { function createDirectoryAgentsInjectorHook (line 30) | function createDirectoryAgentsInjectorHook( FILE: src/hooks/directory-agents-injector/injector.ts type DynamicTruncator (line 9) | type DynamicTruncator = ReturnType; function getSessionCache (line 11) | function getSessionCache( function processFilePathForAgentsInjection (line 21) | async function processFilePathForAgentsInjection(input: { FILE: src/hooks/directory-readme-injector/constants.ts constant README_INJECTOR_STORAGE (line 3) | const README_INJECTOR_STORAGE = join( constant README_FILENAME (line 7) | const README_FILENAME = "README.md"; FILE: src/hooks/directory-readme-injector/finder.ts function resolveFilePath (line 6) | function resolveFilePath(rootDirectory: string, path: string): string | ... function findReadmeMdUp (line 12) | function findReadmeMdUp(input: { FILE: src/hooks/directory-readme-injector/hook.ts type ToolExecuteInput (line 7) | interface ToolExecuteInput { type ToolExecuteOutput (line 13) | interface ToolExecuteOutput { type ToolExecuteBeforeOutput (line 19) | interface ToolExecuteBeforeOutput { type EventInput (line 23) | interface EventInput { function createDirectoryReadmeInjectorHook (line 30) | function createDirectoryReadmeInjectorHook( FILE: src/hooks/directory-readme-injector/injector.test.ts function createPluginContext (line 18) | function createPluginContext(directory: string): PluginInput { function countReadmeMarkers (line 22) | function countReadmeMarkers(output: string): number { function createTruncator (line 26) | function createTruncator(input?: { truncated?: boolean; result?: string ... FILE: src/hooks/directory-readme-injector/injector.ts type DynamicTruncator (line 9) | type DynamicTruncator = ReturnType; function getSessionCache (line 11) | function getSessionCache( function processFilePathForReadmeInjection (line 21) | async function processFilePathForReadmeInjection(input: { FILE: src/hooks/edit-error-recovery/hook.ts constant EDIT_ERROR_PATTERNS (line 6) | const EDIT_ERROR_PATTERNS = [ constant EDIT_ERROR_REMINDER (line 16) | const EDIT_ERROR_REMINDER = ` function createEditErrorRecoveryHook (line 39) | function createEditErrorRecoveryHook(_ctx: PluginInput) { FILE: src/hooks/empty-task-response-detector.ts constant EMPTY_RESPONSE_WARNING (line 3) | const EMPTY_RESPONSE_WARNING = `[Task Empty Response Warning] function createEmptyTaskResponseDetectorHook (line 12) | function createEmptyTaskResponseDetectorHook(_ctx: PluginInput) { FILE: src/hooks/hashline-edit-diff-enhancer/hook.ts type HashlineEditDiffEnhancerConfig (line 4) | interface HashlineEditDiffEnhancerConfig { type BeforeInput (line 8) | type BeforeInput = { tool: string; sessionID: string; callID: string } type BeforeOutput (line 9) | type BeforeOutput = { args: Record } type AfterInput (line 10) | type AfterInput = { tool: string; sessionID: string; callID: string } type AfterOutput (line 11) | type AfterOutput = { title: string; output: string; metadata: Record): string | undefi... function captureOldContent (line 39) | async function captureOldContent(filePath: string): Promise { function createHashlineEditDiffEnhancerHook (line 51) | function createHashlineEditDiffEnhancerHook(config: HashlineEditDiffEnha... FILE: src/hooks/hashline-read-enhancer/hook.ts constant WRITE_SUCCESS_MARKER (line 4) | const WRITE_SUCCESS_MARKER = "File written successfully." type HashlineReadEnhancerConfig (line 6) | interface HashlineReadEnhancerConfig { constant COLON_READ_LINE_PATTERN (line 10) | const COLON_READ_LINE_PATTERN = /^\s*(\d+): ?(.*)$/ constant PIPE_READ_LINE_PATTERN (line 11) | const PIPE_READ_LINE_PATTERN = /^\s*(\d+)\| ?(.*)$/ constant CONTENT_OPEN_TAG (line 12) | const CONTENT_OPEN_TAG = "" constant CONTENT_CLOSE_TAG (line 13) | const CONTENT_CLOSE_TAG = "" constant FILE_OPEN_TAG (line 14) | const FILE_OPEN_TAG = "" constant FILE_CLOSE_TAG (line 15) | const FILE_CLOSE_TAG = "" constant OPENCODE_LINE_TRUNCATION_SUFFIX (line 16) | const OPENCODE_LINE_TRUNCATION_SUFFIX = "... (line truncated to 2000 cha... function isReadTool (line 18) | function isReadTool(toolName: string): boolean { function isWriteTool (line 22) | function isWriteTool(toolName: string): boolean { function shouldProcess (line 26) | function shouldProcess(config: HashlineReadEnhancerConfig): boolean { function isTextFile (line 30) | function isTextFile(output: string): boolean { function parseReadLine (line 35) | function parseReadLine(line: string): { lineNumber: number; content: str... function transformLine (line 55) | function transformLine(line: string): string { function transformOutput (line 67) | function transformOutput(output: string): string { function extractFilePath (line 128) | function extractFilePath(metadata: unknown): string | undefined { function appendWriteHashlineOutput (line 144) | async function appendWriteHashlineOutput(output: { output: string; metad... function createHashlineReadEnhancerHook (line 169) | function createHashlineReadEnhancerHook( FILE: src/hooks/hashline-read-enhancer/index.test.ts function mockCtx (line 10) | function mockCtx(): PluginInput { FILE: src/hooks/interactive-bash-session/constants.ts constant INTERACTIVE_BASH_SESSION_STORAGE (line 3) | const INTERACTIVE_BASH_SESSION_STORAGE = join( constant OMO_SESSION_PREFIX (line 8) | const OMO_SESSION_PREFIX = "omo-"; function buildSessionReminderMessage (line 10) | function buildSessionReminderMessage(sessions: string[]): string { FILE: src/hooks/interactive-bash-session/hook.ts type ToolExecuteInput (line 9) | interface ToolExecuteInput { type ToolExecuteOutput (line 16) | interface ToolExecuteOutput { type EventInput (line 22) | interface EventInput { function createInteractiveBashSessionHook (line 29) | function createInteractiveBashSessionHook(ctx: PluginInput) { FILE: src/hooks/interactive-bash-session/interactive-bash-session-tracker.ts type AbortSession (line 11) | type AbortSession = (args: { path: { id: string } }) => Promise function isOmoSession (line 13) | function isOmoSession(sessionName: string | null): sessionName is string { function killAllTrackedSessions (line 17) | async function killAllTrackedSessions( function createInteractiveBashSessionTracker (line 38) | function createInteractiveBashSessionTracker(options: { FILE: src/hooks/interactive-bash-session/parser.ts function tokenizeCommand (line 5) | function tokenizeCommand(cmd: string): string[] { function normalizeSessionName (line 50) | function normalizeSessionName(name: string): string { function findFlagValue (line 54) | function findFlagValue(tokens: string[], flag: string): string | null { function extractSessionNameFromTokens (line 66) | function extractSessionNameFromTokens(tokens: string[], subCommand: stri... function findSubcommand (line 87) | function findSubcommand(tokens: string[]): string { FILE: src/hooks/interactive-bash-session/state-manager.ts function getOrCreateState (line 6) | function getOrCreateState(sessionID: string, sessionStates: Map = { constant SHELL_COMMAND_PATTERNS (line 30) | const SHELL_COMMAND_PATTERNS = { FILE: src/hooks/non-interactive-env/detector.ts function isNonInteractive (line 1) | function isNonInteractive(): boolean { FILE: src/hooks/non-interactive-env/non-interactive-env-hook.ts constant BANNED_COMMAND_PATTERNS (line 9) | const BANNED_COMMAND_PATTERNS = SHELL_COMMAND_PATTERNS.banned function detectBannedCommand (line 13) | function detectBannedCommand(command: string): string | undefined { function createNonInteractiveEnvHook (line 22) | function createNonInteractiveEnvHook(_ctx: PluginInput) { FILE: src/hooks/non-interactive-env/types.ts type NonInteractiveEnvConfig (line 1) | interface NonInteractiveEnvConfig { FILE: src/hooks/openclaw.ts function createOpenClawHook (line 6) | function createOpenClawHook( FILE: src/hooks/preemptive-compaction.aws-bedrock.test.ts type HookContext (line 9) | type HookContext = Parameters[0] function createMockContext (line 11) | function createMockContext(): HookContext { FILE: src/hooks/preemptive-compaction.context-limit-cache.test.ts function createMockCtx (line 14) | function createMockCtx() { FILE: src/hooks/preemptive-compaction.test.ts constant ANTHROPIC_CONTEXT_ENV_KEY (line 5) | const ANTHROPIC_CONTEXT_ENV_KEY = "ANTHROPIC_1M_CONTEXT" constant VERTEX_CONTEXT_ENV_KEY (line 6) | const VERTEX_CONTEXT_ENV_KEY = "VERTEX_ANTHROPIC_1M_CONTEXT" function resetContextLimitEnv (line 11) | function resetContextLimitEnv(): void { function createMockCtx (line 33) | function createMockCtx() { function setupImmediateTimeouts (line 48) | function setupImmediateTimeouts(): () => void { FILE: src/hooks/preemptive-compaction.ts constant PREEMPTIVE_COMPACTION_TIMEOUT_MS (line 9) | const PREEMPTIVE_COMPACTION_TIMEOUT_MS = 120_000 constant PREEMPTIVE_COMPACTION_THRESHOLD (line 11) | const PREEMPTIVE_COMPACTION_THRESHOLD = 0.78 type TokenInfo (line 13) | interface TokenInfo { type CachedCompactionState (line 20) | interface CachedCompactionState { function withTimeout (line 26) | async function withTimeout( type PluginInput (line 46) | type PluginInput = { function createPreemptiveCompactionHook (line 62) | function createPreemptiveCompactionHook( FILE: src/hooks/prometheus-md-only/agent-matcher.ts function isPrometheusAgent (line 3) | function isPrometheusAgent(agentName: string | undefined): boolean { FILE: src/hooks/prometheus-md-only/agent-resolution.ts type OpencodeClient (line 13) | type OpencodeClient = PluginInput["client"] function isCompactionAgent (line 15) | function isCompactionAgent(agent: string): boolean { function getAgentFromMessageFiles (line 19) | async function getAgentFromMessageFiles( function getAgentFromSession (line 53) | async function getAgentFromSession( FILE: src/hooks/prometheus-md-only/constants.ts constant HOOK_NAME (line 4) | const HOOK_NAME = "prometheus-md-only" constant PROMETHEUS_AGENT (line 6) | const PROMETHEUS_AGENT = "prometheus" constant ALLOWED_EXTENSIONS (line 8) | const ALLOWED_EXTENSIONS = [".md"] constant ALLOWED_PATH_PREFIX (line 10) | const ALLOWED_PATH_PREFIX = ".sisyphus" constant BLOCKED_TOOLS (line 12) | const BLOCKED_TOOLS = ["Write", "Edit", "write", "edit"] constant PLANNING_CONSULT_WARNING (line 14) | const PLANNING_CONSULT_WARNING = ` constant PROMETHEUS_WORKFLOW_REMINDER (line 35) | const PROMETHEUS_WORKFLOW_REMINDER = ` FILE: src/hooks/prometheus-md-only/hook.ts constant TASK_TOOLS (line 10) | const TASK_TOOLS = ["task", "call_omo_agent"] function createPrometheusMdOnlyHook (line 12) | function createPrometheusMdOnlyHook(ctx: PluginInput) { FILE: src/hooks/prometheus-md-only/index.test.ts function createMockPluginInput (line 21) | function createMockPluginInput() { function setupMessageStorage (line 28) | function setupMessageStorage(sessionID: string, agent: string | undefine... FILE: src/hooks/prometheus-md-only/path-policy.ts function isAllowedFile (line 14) | function isAllowedFile(filePath: string, workspaceRoot: string): boolean { FILE: src/hooks/question-label-truncator/hook.ts constant MAX_LABEL_LENGTH (line 1) | const MAX_LABEL_LENGTH = 30; type QuestionOption (line 3) | interface QuestionOption { type Question (line 8) | interface Question { type AskUserQuestionArgs (line 15) | interface AskUserQuestionArgs { function truncateLabel (line 19) | function truncateLabel(label: string, maxLength: number = MAX_LABEL_LENG... function truncateQuestionLabels (line 26) | function truncateQuestionLabels(args: AskUserQuestionArgs): AskUserQuest... function createQuestionLabelTruncatorHook (line 44) | function createQuestionLabelTruncatorHook() { FILE: src/hooks/ralph-loop/command-arguments.ts type RalphLoopStrategy (line 1) | type RalphLoopStrategy = "reset" | "continue" type ParsedRalphLoopArguments (line 3) | type ParsedRalphLoopArguments = { constant DEFAULT_PROMPT (line 10) | const DEFAULT_PROMPT = "Complete the task as instructed" function parseRalphLoopArguments (line 12) | function parseRalphLoopArguments(rawArguments: string): ParsedRalphLoopA... FILE: src/hooks/ralph-loop/completion-handler.ts type LoopStateController (line 8) | type LoopStateController = { function handleDetectedCompletion (line 13) | async function handleDetectedCompletion( FILE: src/hooks/ralph-loop/completion-promise-detector.test.ts type SessionMessage (line 6) | type SessionMessage = { function createPluginInput (line 11) | function createPluginInput(messages: SessionMessage[]): PluginInput { FILE: src/hooks/ralph-loop/completion-promise-detector.ts type OpenCodeSessionMessage (line 7) | interface OpenCodeSessionMessage { function escapeRegex (line 12) | function escapeRegex(str: string): string { function buildPromisePattern (line 16) | function buildPromisePattern(promise: string): RegExp { function detectCompletionInTranscript (line 20) | function detectCompletionInTranscript( function detectCompletionInSessionMessages (line 50) | async function detectCompletionInSessionMessages( FILE: src/hooks/ralph-loop/constants.ts constant HOOK_NAME (line 1) | const HOOK_NAME = "ralph-loop" constant DEFAULT_STATE_FILE (line 2) | const DEFAULT_STATE_FILE = ".sisyphus/ralph-loop.local.md" constant COMPLETION_TAG_PATTERN (line 3) | const COMPLETION_TAG_PATTERN = /(.*?)<\/promise>/is constant DEFAULT_MAX_ITERATIONS (line 4) | const DEFAULT_MAX_ITERATIONS = 100 constant DEFAULT_COMPLETION_PROMISE (line 5) | const DEFAULT_COMPLETION_PROMISE = "DONE" constant ULTRAWORK_VERIFICATION_PROMISE (line 6) | const ULTRAWORK_VERIFICATION_PROMISE = "VERIFIED" FILE: src/hooks/ralph-loop/continuation-prompt-builder.ts function getMaxIterationsLabel (line 4) | function getMaxIterationsLabel(state: RalphLoopState): string { constant CONTINUATION_PROMPT (line 8) | const CONTINUATION_PROMPT = `${SYSTEM_DIRECTIVE_PREFIX} - RALPH LOOP {{I... constant ULTRAWORK_VERIFICATION_PROMPT (line 21) | const ULTRAWORK_VERIFICATION_PROMPT = `${SYSTEM_DIRECTIVE_PREFIX} - ULTR... constant ULTRAWORK_VERIFICATION_FAILED_PROMPT (line 36) | const ULTRAWORK_VERIFICATION_FAILED_PROMPT = `${SYSTEM_DIRECTIVE_PREFIX}... function buildContinuationPrompt (line 51) | function buildContinuationPrompt(state: RalphLoopState): string { function buildVerificationFailurePrompt (line 67) | function buildVerificationFailurePrompt(state: RalphLoopState): string { FILE: src/hooks/ralph-loop/continuation-prompt-injector.ts type MessageInfo (line 12) | type MessageInfo = { function injectContinuationPrompt (line 20) | async function injectContinuationPrompt( FILE: src/hooks/ralph-loop/index.test.ts function createMockPluginInput (line 20) | function createMockPluginInput() { FILE: src/hooks/ralph-loop/iteration-continuation.ts type ContinuationOptions (line 9) | type ContinuationOptions = { function continueIteration (line 18) | async function continueIteration( FILE: src/hooks/ralph-loop/loop-session-recovery.ts type SessionState (line 1) | type SessionState = { function createLoopSessionRecovery (line 5) | function createLoopSessionRecovery(options?: { recoveryWindowMs?: number... FILE: src/hooks/ralph-loop/loop-state-controller.ts function createLoopStateController (line 11) | function createLoopStateController(options: { FILE: src/hooks/ralph-loop/pending-verification-handler.ts type OpenCodeSessionMessage (line 9) | type OpenCodeSessionMessage = { constant ORACLE_AGENT_PATTERN (line 14) | const ORACLE_AGENT_PATTERN = /Agent:\s*oracle/i constant TASK_METADATA_SESSION_PATTERN (line 15) | const TASK_METADATA_SESSION_PATTERN = /[\s\S]*?session_id... constant VERIFIED_PROMISE_PATTERN (line 16) | const VERIFIED_PROMISE_PATTERN = new RegExp( function collectAssistantText (line 21) | function collectAssistantText(message: OpenCodeSessionMessage): string { function detectOracleVerificationFromParentSession (line 37) | async function detectOracleVerificationFromParentSession( type LoopStateController (line 91) | type LoopStateController = { function handlePendingVerification (line 96) | async function handlePendingVerification( FILE: src/hooks/ralph-loop/ralph-loop-event-handler.ts type SessionRecovery (line 14) | type SessionRecovery = { type LoopStateController (line 19) | type LoopStateController = { type RalphLoopEventHandlerOptions (line 28) | type RalphLoopEventHandlerOptions = { directory: string; apiTimeoutMs: n... function createRalphLoopEventHandler (line 30) | function createRalphLoopEventHandler( FILE: src/hooks/ralph-loop/ralph-loop-hook.ts type RalphLoopHook (line 8) | interface RalphLoopHook { constant DEFAULT_API_TIMEOUT (line 25) | const DEFAULT_API_TIMEOUT = 5000 as const function getMessageCountFromResponse (line 27) | function getMessageCountFromResponse(messagesResponse: unknown): number { function createRalphLoopHook (line 40) | function createRalphLoopHook( FILE: src/hooks/ralph-loop/reset-strategy-race-condition.test.ts function createDeferred (line 5) | function createDeferred(): { function waitUntil (line 24) | async function waitUntil(condition: () => boolean): Promise { FILE: src/hooks/ralph-loop/session-event-handler.ts type LoopStateController (line 5) | type LoopStateController = { type SessionRecovery (line 10) | type SessionRecovery = { function handleDeletedLoopSession (line 15) | function handleDeletedLoopSession( function handleErroredLoopSession (line 32) | function handleErroredLoopSession( FILE: src/hooks/ralph-loop/session-reset-strategy.ts function createIterationSession (line 5) | async function createIterationSession( function selectSessionInTui (line 29) | async function selectSessionInTui( type SelectSessionApi (line 50) | type SelectSessionApi = (args: { body: { sessionID: string } }) => Promi... function getSelectSessionApi (line 52) | function getSelectSessionApi(client: unknown): SelectSessionApi | null { FILE: src/hooks/ralph-loop/storage.ts function getStateFilePath (line 7) | function getStateFilePath(directory: string, customPath?: string): string { function readState (line 13) | function readState(directory: string, customPath?: string): RalphLoopSta... function writeState (line 86) | function writeState( function clearState (line 139) | function clearState(directory: string, customPath?: string): boolean { function incrementIteration (line 152) | function incrementIteration( FILE: src/hooks/ralph-loop/types.ts type RalphLoopState (line 3) | interface RalphLoopState { type RalphLoopOptions (line 20) | interface RalphLoopOptions { FILE: src/hooks/ralph-loop/ulw-loop-verification.test.ts function createMockPluginInput (line 17) | function createMockPluginInput() { FILE: src/hooks/ralph-loop/verification-failure-handler.ts type LoopStateController (line 8) | type LoopStateController = { function getMessageCountFromResponse (line 15) | function getMessageCountFromResponse(messagesResponse: unknown): number { function getSessionMessageCount (line 32) | async function getSessionMessageCount( function handleFailedVerification (line 45) | async function handleFailedVerification( FILE: src/hooks/ralph-loop/with-timeout.ts function withTimeout (line 1) | async function withTimeout( FILE: src/hooks/read-image-resizer/hook.test.ts type ToolOutput (line 31) | type ToolOutput = { function createMockContext (line 38) | function createMockContext(): PluginInput { function createInput (line 45) | function createInput(tool: string): { tool: string; sessionID: string; c... FILE: src/hooks/read-image-resizer/hook.ts constant SUPPORTED_IMAGE_MIMES (line 7) | const SUPPORTED_IMAGE_MIMES = new Set(["image/png", "image/jpeg", "image... constant TOKEN_DIVISOR (line 8) | const TOKEN_DIVISOR = 750 type ResizeEntry (line 9) | interface ResizeEntry { function isReadTool (line 15) | function isReadTool(toolName: string): boolean { function asRecord (line 18) | function asRecord(value: unknown): Record | null { function isImageAttachmentRecord (line 24) | function isImageAttachmentRecord( function extractImageAttachments (line 34) | function extractImageAttachments(output: Record): Image... function calculateTokens (line 66) | function calculateTokens(width: number, height: number): number { function formatResizeAppendix (line 69) | function formatResizeAppendix(entries: ResizeEntry[]): string { function resolveFilename (line 108) | function resolveFilename(attachment: ImageAttachment, index: number): st... function createReadImageResizerHook (line 115) | function createReadImageResizerHook(_ctx: PluginInput) { FILE: src/hooks/read-image-resizer/image-dimensions.test.ts constant PNG_1X1_DATA_URL (line 7) | const PNG_1X1_DATA_URL = constant GIF_1X1_DATA_URL (line 10) | const GIF_1X1_DATA_URL = function createPngDataUrl (line 13) | function createPngDataUrl(width: number, height: number): string { function createGifDataUrl (line 23) | function createGifDataUrl(width: number, height: number): string { function createLargePngDataUrl (line 31) | function createLargePngDataUrl(width: number, height: number, extraBase6... FILE: src/hooks/read-image-resizer/image-dimensions.ts constant HEADER_BYTES (line 5) | const HEADER_BYTES = 32_768 constant HEADER_BASE64_CHARS (line 6) | const HEADER_BASE64_CHARS = Math.ceil(HEADER_BYTES / 3) * 4 function toImageDimensions (line 8) | function toImageDimensions(width: number, height: number): ImageDimensio... function parsePngDimensions (line 20) | function parsePngDimensions(buffer: Buffer): ImageDimensions | null { function parseGifDimensions (line 44) | function parseGifDimensions(buffer: Buffer): ImageDimensions | null { function parseJpegDimensions (line 58) | function parseJpegDimensions(buffer: Buffer): ImageDimensions | null { function readUInt24LE (line 107) | function readUInt24LE(buffer: Buffer, offset: number): number { function parseWebpDimensions (line 111) | function parseWebpDimensions(buffer: Buffer): ImageDimensions | null { function parseImageDimensions (line 152) | function parseImageDimensions(base64DataUrl: string, mimeType: string): ... FILE: src/hooks/read-image-resizer/image-resizer.test.ts constant PNG_1X1_DATA_URL (line 5) | const PNG_1X1_DATA_URL = type ImageResizerModule (line 8) | type ImageResizerModule = typeof import("./image-resizer") function importFreshImageResizerModule (line 10) | async function importFreshImageResizerModule(): Promise SharpInstance function resolveSharpFactory (line 24) | function resolveSharpFactory(sharpModule: unknown): SharpFactory | null { function resolveSharpFormat (line 37) | function resolveSharpFormat(mimeType: string): SharpFormat { function canAdjustQuality (line 51) | function canAdjustQuality(format: SharpFormat): boolean { function toDimensions (line 55) | function toDimensions(metadata: SharpMetadata): ImageDimensions | null { function renderResizedBuffer (line 63) | async function renderResizedBuffer(args: { function getErrorMessage (line 77) | function getErrorMessage(error: unknown): string { function calculateTargetDimensions (line 81) | function calculateTargetDimensions( function resizeImage (line 108) | async function resizeImage( FILE: src/hooks/read-image-resizer/types.ts type ImageDimensions (line 1) | interface ImageDimensions { type ImageAttachment (line 6) | interface ImageAttachment { type ResizeResult (line 12) | interface ResizeResult { FILE: src/hooks/rules-injector/cache.ts type SessionInjectedRulesCache (line 3) | type SessionInjectedRulesCache = { function createSessionCacheStore (line 8) | function createSessionCacheStore(): { FILE: src/hooks/rules-injector/constants.ts constant RULES_INJECTOR_STORAGE (line 3) | const RULES_INJECTOR_STORAGE = join(OPENCODE_STORAGE, "rules-injector"); constant PROJECT_MARKERS (line 5) | const PROJECT_MARKERS = [ constant PROJECT_RULE_SUBDIRS (line 14) | const PROJECT_RULE_SUBDIRS: [string, string][] = [ constant PROJECT_RULE_FILES (line 21) | const PROJECT_RULE_FILES: string[] = [ constant GITHUB_INSTRUCTIONS_PATTERN (line 25) | const GITHUB_INSTRUCTIONS_PATTERN = /\.instructions\.md$/; constant USER_RULE_DIR (line 27) | const USER_RULE_DIR = ".claude/rules"; constant RULE_EXTENSIONS (line 29) | const RULE_EXTENSIONS = [".md", ".mdc"]; FILE: src/hooks/rules-injector/hook.ts type ToolExecuteInput (line 7) | interface ToolExecuteInput { type ToolExecuteOutput (line 13) | interface ToolExecuteOutput { type ToolExecuteBeforeOutput (line 19) | interface ToolExecuteBeforeOutput { type EventInput (line 23) | interface EventInput { constant TRACKED_TOOLS (line 30) | const TRACKED_TOOLS = ["read", "write", "edit", "multiedit"]; function createRulesInjectorHook (line 32) | function createRulesInjectorHook( FILE: src/hooks/rules-injector/injector.test.ts type StatSnapshot (line 9) | type StatSnapshot = { mtimeMs: number; size: number }; function createOutput (line 59) | function createOutput(): { title: string; output: string; metadata: unkn... function createProcessor (line 63) | async function createProcessor(projectRoot: string): Promise<{ function getInjectedRulesPath (line 100) | function getInjectedRulesPath(sessionID: string): string { FILE: src/hooks/rules-injector/injector.ts type ToolExecuteOutput (line 16) | type ToolExecuteOutput = { type RuleToInject (line 22) | type RuleToInject = { type DynamicTruncator (line 29) | type DynamicTruncator = { type ParsedRuleEntry (line 36) | interface ParsedRuleEntry { function getCachedParsedRule (line 45) | function getCachedParsedRule( function resolveFilePath (line 72) | function resolveFilePath( function createRuleInjectionProcessor (line 81) | function createRuleInjectionProcessor(deps: { FILE: src/hooks/rules-injector/matcher.ts type MatchResult (line 6) | interface MatchResult { function shouldApplyRule (line 14) | function shouldApplyRule( function isDuplicateByRealPath (line 47) | function isDuplicateByRealPath(realPath: string, cache: Set): bo... function createContentHash (line 54) | function createContentHash(content: string): string { function isDuplicateByContentHash (line 61) | function isDuplicateByContentHash(hash: string, cache: Set): boo... FILE: src/hooks/rules-injector/output-path.ts type ToolExecuteOutputShape (line 1) | interface ToolExecuteOutputShape { function getRuleInjectionFilePath (line 6) | function getRuleInjectionFilePath( FILE: src/hooks/rules-injector/parser.ts type RuleFrontmatterResult (line 3) | interface RuleFrontmatterResult { function parseRuleFrontmatter (line 20) | function parseRuleFrontmatter(content: string): RuleFrontmatterResult { function parseYamlContent (line 42) | function parseYamlContent(yamlContent: string): RuleMetadata { function parseStringValue (line 84) | function parseStringValue(value: string): string { function parseArrayOrStringValue (line 102) | function parseArrayOrStringValue( function parseInlineArray (line 159) | function parseInlineArray(value: string): string[] { function mergeGlobs (line 201) | function mergeGlobs( FILE: src/hooks/rules-injector/project-root-finder.ts function findProjectRoot (line 12) | function findProjectRoot(startPath: string): string | null { FILE: src/hooks/rules-injector/rule-distance.ts function calculateDistance (line 12) | function calculateDistance( FILE: src/hooks/rules-injector/rule-file-finder.ts function findRuleFiles (line 24) | function findRuleFiles( FILE: src/hooks/rules-injector/rule-file-scanner.ts function isGitHubInstructionsDir (line 5) | function isGitHubInstructionsDir(dir: string): boolean { function isValidRuleFile (line 9) | function isValidRuleFile(fileName: string, dir: string): boolean { function findRuleFilesRecursive (line 22) | function findRuleFilesRecursive(dir: string, results: string[]): void { function safeRealpathSync (line 49) | function safeRealpathSync(filePath: string): string { FILE: src/hooks/rules-injector/storage.ts function getStoragePath (line 12) | function getStoragePath(sessionID: string): string { function loadInjectedRules (line 16) | function loadInjectedRules(sessionID: string): { function saveInjectedRules (line 36) | function saveInjectedRules( function clearInjectedRules (line 54) | function clearInjectedRules(sessionID: string): void { FILE: src/hooks/rules-injector/types.ts type RuleMetadata (line 7) | interface RuleMetadata { type RuleInfo (line 16) | interface RuleInfo { type RuleFileCandidate (line 38) | interface RuleFileCandidate { type InjectedRulesData (line 50) | interface InjectedRulesData { FILE: src/hooks/runtime-fallback/agent-resolver.ts constant AGENT_NAMES (line 3) | const AGENT_NAMES = [ function detectAgentFromSession (line 27) | function detectAgentFromSession(sessionID: string): string | undefined { function normalizeAgentName (line 35) | function normalizeAgentName(agent: string | undefined): string | undefin... function resolveAgentForSession (line 48) | function resolveAgentForSession(sessionID: string, eventAgent?: string):... FILE: src/hooks/runtime-fallback/auto-retry.ts constant SESSION_TTL_MS (line 13) | const SESSION_TTL_MS = 30 * 60 * 1000 function createAutoRetryHelpers (line 18) | function createAutoRetryHelpers(deps: HookDeps) { type AutoRetryHelpers (line 220) | type AutoRetryHelpers = ReturnType FILE: src/hooks/runtime-fallback/chat-message-handler.ts function createChatMessageHandler (line 6) | function createChatMessageHandler(deps: HookDeps) { FILE: src/hooks/runtime-fallback/constants.ts constant DEFAULT_CONFIG (line 12) | const DEFAULT_CONFIG: Required = { constant RETRYABLE_ERROR_PATTERNS (line 25) | const RETRYABLE_ERROR_PATTERNS = [ constant HOOK_NAME (line 48) | const HOOK_NAME = "runtime-fallback" FILE: src/hooks/runtime-fallback/dispose.test.ts function createMockContext (line 41) | function createMockContext(): RuntimeFallbackPluginInput { FILE: src/hooks/runtime-fallback/error-classifier.ts function getErrorMessage (line 3) | function getErrorMessage(error: unknown): string { constant DEFAULT_RETRY_PATTERN (line 31) | const DEFAULT_RETRY_PATTERN = new RegExp(`\\b(${DEFAULT_CONFIG.retry_on_... function extractStatusCode (line 33) | function extractStatusCode(error: unknown, retryOnErrors?: number[]): nu... function extractErrorName (line 62) | function extractErrorName(error: unknown): string | undefined { function classifyErrorType (line 91) | function classifyErrorType(error: unknown): string | undefined { type AutoRetrySignal (line 118) | interface AutoRetrySignal { constant AUTO_RETRY_PATTERNS (line 122) | const AUTO_RETRY_PATTERNS: Array<(combined: string) => boolean> = [ function extractAutoRetrySignal (line 128) | function extractAutoRetrySignal(info: Record | undefine... function containsErrorContent (line 156) | function containsErrorContent( function isRetryableError (line 171) | function isRetryableError(error: unknown, retryOnErrors: number[]): bool... FILE: src/hooks/runtime-fallback/event-handler.test.ts function createContext (line 7) | function createContext(): RuntimeFallbackPluginInput { function createDeps (line 23) | function createDeps(): HookDeps { function createHelpers (line 45) | function createHelpers(deps: HookDeps, abortCalls: string[], clearCalls:... FILE: src/hooks/runtime-fallback/event-handler.ts function createEventHandler (line 13) | function createEventHandler(deps: HookDeps, helpers: AutoRetryHelpers) { FILE: src/hooks/runtime-fallback/fallback-bootstrap-model.ts type ResolveFallbackBootstrapModelOptions (line 6) | type ResolveFallbackBootstrapModelOptions = { function resolveFallbackBootstrapModel (line 14) | function resolveFallbackBootstrapModel( FILE: src/hooks/runtime-fallback/fallback-models.ts function getFallbackModelsForSession (line 8) | function getFallbackModelsForSession( FILE: src/hooks/runtime-fallback/fallback-retry-dispatcher.ts type DispatchFallbackRetryOptions (line 7) | type DispatchFallbackRetryOptions = { function dispatchFallbackRetry (line 15) | async function dispatchFallbackRetry( FILE: src/hooks/runtime-fallback/fallback-state.ts function createFallbackState (line 6) | function createFallbackState(originalModel: string): FallbackState { function isModelInCooldown (line 17) | function isModelInCooldown(model: string, state: FallbackState, cooldown... function findNextAvailableFallback (line 24) | function findNextAvailableFallback( function prepareFallback (line 39) | function prepareFallback( FILE: src/hooks/runtime-fallback/hook-dispose-cleanup.test.ts function createContext (line 6) | function createContext(promptCalls: unknown[]): RuntimeFallbackPluginInp... FILE: src/hooks/runtime-fallback/hook.ts function createRuntimeFallbackHook (line 14) | function createRuntimeFallbackHook( FILE: src/hooks/runtime-fallback/index.test.ts function createMockPluginInput (line 26) | function createMockPluginInput(overrides?: { function createMockConfig (line 54) | function createMockConfig(overrides?: Partial): R... function createMockPluginConfigWithCategoryFallback (line 65) | function createMockPluginConfigWithCategoryFallback(fallbackModels: stri... function createMockPluginConfigWithCategoryModel (line 75) | function createMockPluginConfigWithCategoryModel( function createMockPluginConfigWithAgentFallback (line 2300) | function createMockPluginConfigWithAgentFallback(agentName: string, fall... FILE: src/hooks/runtime-fallback/last-user-retry-parts.ts function getLastUserRetryParts (line 3) | function getLastUserRetryParts( FILE: src/hooks/runtime-fallback/message-update-handler.test.ts function createContext (line 5) | function createContext(messagesResponse: unknown): RuntimeFallbackPlugin... FILE: src/hooks/runtime-fallback/message-update-handler.ts function createMessageUpdateHandler (line 14) | function createMessageUpdateHandler(deps: HookDeps, helpers: AutoRetryHe... FILE: src/hooks/runtime-fallback/retry-model-payload.ts function buildRetryModelPayload (line 3) | function buildRetryModelPayload( FILE: src/hooks/runtime-fallback/session-messages.ts type SessionMessagePart (line 1) | type SessionMessagePart = { type SessionMessage (line 6) | type SessionMessage = { function isRecord (line 11) | function isRecord(value: unknown): value is Record { function isSessionMessage (line 15) | function isSessionMessage(value: unknown): value is SessionMessage { function isSessionMessageArray (line 19) | function isSessionMessageArray(value: unknown): value is SessionMessage[] { function extractSessionMessages (line 23) | function extractSessionMessages(messagesResponse: unknown): SessionMessa... FILE: src/hooks/runtime-fallback/session-status-handler.test.ts function createContext (line 8) | function createContext(): RuntimeFallbackPluginInput { function createDeps (line 24) | function createDeps(): HookDeps { function createHelpers (line 52) | function createHelpers(abortCalls: string[], retryCalls: Array<{ session... FILE: src/hooks/runtime-fallback/session-status-handler.ts function createSessionStatusHandler (line 12) | function createSessionStatusHandler( FILE: src/hooks/runtime-fallback/success-retry-key-cleanup.test.ts type MessageUpdateHandlerModule (line 6) | type MessageUpdateHandlerModule = typeof import("./message-update-handler") function importFreshMessageUpdateHandlerModule (line 8) | async function importFreshMessageUpdateHandlerModule(): Promise void) { function createThrowingShellPromise (line 29) | function createThrowingShellPromise(shouldThrow: (cmdStr: string) => boo... FILE: src/hooks/session-notification-sender.ts type Platform (line 14) | type Platform = "darwin" | "linux" | "win32" | "unsupported" function detectPlatform (line 16) | function detectPlatform(): Platform { function getDefaultSoundPath (line 22) | function getDefaultSoundPath(platform: Platform): string { function sendSessionNotification (line 35) | async function sendSessionNotification( function playSessionNotificationSound (line 85) | async function playSessionNotificationSound( FILE: src/hooks/session-notification-utils.ts type Platform (line 1) | type Platform = "darwin" | "linux" | "win32" | "unsupported" function findCommand (line 3) | async function findCommand(commandName: string): Promise { function createCommandFinder (line 11) | function createCommandFinder(commandName: string): () => Promise type ReplaceEmptyTextPartsAsync (line 9) | type ReplaceEmptyTextPartsAsync = ( type InjectTextPartAsync (line 16) | type InjectTextPartAsync = ( type FindMessagesWithEmptyTextPartsFromSDK (line 23) | type FindMessagesWithEmptyTextPartsFromSDK = ( function recoverEmptyContentMessageFromSDK (line 28) | async function recoverEmptyContentMessageFromSDK( type SdkPart (line 116) | type SdkPart = NonNullable[number] function sdkPartHasContent (line 118) | function sdkPartHasContent(part: SdkPart): boolean { function sdkMessageHasContent (line 133) | function sdkMessageHasContent(message: MessageData): boolean { function readMessagesFromSDK (line 137) | async function readMessagesFromSDK(client: Client, sessionID: string): P... function findMessagesWithThinkingOnlyFromSDK (line 146) | function findMessagesWithThinkingOnlyFromSDK(messages: MessageData[]): s... function findEmptyMessagesFromSDK (line 165) | function findEmptyMessagesFromSDK(messages: MessageData[]): string[] { function findEmptyMessageByIndexFromSDK (line 178) | function findEmptyMessageByIndexFromSDK(messages: MessageData[], targetI... FILE: src/hooks/session-recovery/recover-thinking-block-order.ts type Client (line 10) | type Client = ReturnType function recoverThinkingBlockOrder (line 12) | async function recoverThinkingBlockOrder( function recoverThinkingBlockOrderFromSDK (line 46) | async function recoverThinkingBlockOrderFromSDK( function findMessagesWithOrphanThinkingFromSDK (line 74) | async function findMessagesWithOrphanThinkingFromSDK( function findMessageByIndexNeedingThinkingFromSDK (line 107) | async function findMessageByIndexNeedingThinkingFromSDK( FILE: src/hooks/session-recovery/recover-thinking-disabled-violation.ts type Client (line 10) | type Client = ReturnType function recoverThinkingDisabledViolation (line 12) | async function recoverThinkingDisabledViolation( function recoverThinkingDisabledViolationFromSDK (line 36) | async function recoverThinkingDisabledViolationFromSDK( FILE: src/hooks/session-recovery/recover-tool-result-missing.ts type Client (line 7) | type Client = ReturnType type ClientWithPromptAsync (line 8) | type ClientWithPromptAsync = { type ToolUsePart (line 15) | interface ToolUsePart { type MessagePart (line 22) | interface MessagePart { function extractToolUseIds (line 27) | function extractToolUseIds(parts: MessagePart[]): string[] { function readPartsFromSDKFallback (line 31) | async function readPartsFromSDKFallback( function recoverToolResultMissing (line 51) | async function recoverToolResultMissing( FILE: src/hooks/session-recovery/recover-unavailable-tool.ts type Client (line 8) | type Client = ReturnType type ToolResultPart (line 10) | interface ToolResultPart { type PromptWithToolResultInput (line 16) | interface PromptWithToolResultInput { type ToolUsePart (line 21) | interface ToolUsePart { type MessagePart (line 27) | interface MessagePart { function extractToolUseParts (line 33) | function extractToolUseParts(parts: MessagePart[]): ToolUsePart[] { function readPartsFromSDKFallback (line 40) | async function readPartsFromSDKFallback( function recoverUnavailableTool (line 61) | async function recoverUnavailableTool( FILE: src/hooks/session-recovery/resume.ts constant RECOVERY_RESUME_TEXT (line 5) | const RECOVERY_RESUME_TEXT = "[session recovered - continuing previous t... type Client (line 7) | type Client = ReturnType function findLastUserMessage (line 9) | function findLastUserMessage(messages: MessageData[]): MessageData | und... function extractResumeConfig (line 18) | function extractResumeConfig(userMessage: MessageData | undefined, sessi... function resumeSession (line 27) | async function resumeSession(client: Client, config: ResumeConfig): Prom... FILE: src/hooks/session-recovery/storage/empty-messages.ts function findEmptyMessages (line 4) | function findEmptyMessages(sessionID: string): string[] { function findEmptyMessageByIndex (line 17) | function findEmptyMessageByIndex(sessionID: string, targetIndex: number)... function findFirstEmptyMessage (line 44) | function findFirstEmptyMessage(sessionID: string): string | null { FILE: src/hooks/session-recovery/storage/empty-text.ts type OpencodeClient (line 11) | type OpencodeClient = PluginInput["client"] function replaceEmptyTextParts (line 13) | function replaceEmptyTextParts(messageID: string, replacementText: strin... function replaceEmptyTextPartsAsync (line 47) | async function replaceEmptyTextPartsAsync( function findMessagesWithEmptyTextParts (line 79) | function findMessagesWithEmptyTextParts(sessionID: string): string[] { function findMessagesWithEmptyTextPartsFromSDK (line 99) | async function findMessagesWithEmptyTextPartsFromSDK( FILE: src/hooks/session-recovery/storage/messages-reader.ts type OpencodeClient (line 9) | type OpencodeClient = PluginInput["client"] function normalizeSDKMessage (line 11) | function normalizeSDKMessage( function readMessages (line 34) | function readMessages(sessionID: string): StoredMessageMeta[] { function readMessagesFromSDK (line 59) | async function readMessagesFromSDK( FILE: src/hooks/session-recovery/storage/orphan-thinking-search.ts function findMessagesWithOrphanThinking (line 5) | function findMessagesWithOrphanThinking(sessionID: string): string[] { function findMessageByIndexNeedingThinking (line 27) | function findMessageByIndexNeedingThinking(sessionID: string, targetInde... FILE: src/hooks/session-recovery/storage/part-content.ts function hasContent (line 5) | function hasContent(part: StoredPart): boolean { function messageHasContent (line 25) | function messageHasContent(messageID: string): boolean { FILE: src/hooks/session-recovery/storage/part-id.ts function generatePartId (line 1) | function generatePartId(): string { FILE: src/hooks/session-recovery/storage/parts-reader.ts type OpencodeClient (line 9) | type OpencodeClient = PluginInput["client"] function readParts (line 11) | function readParts(messageID: string): StoredPart[] { function readPartsFromSDK (line 31) | async function readPartsFromSDK( FILE: src/hooks/session-recovery/storage/readers-from-sdk.test.ts function createMockClient (line 6) | function createMockClient(handlers: { FILE: src/hooks/session-recovery/storage/text-part-injector.ts type OpencodeClient (line 9) | type OpencodeClient = PluginInput["client"] function injectTextPart (line 11) | function injectTextPart(sessionID: string, messageID: string, text: stri... function injectTextPartAsync (line 41) | async function injectTextPartAsync( FILE: src/hooks/session-recovery/storage/thinking-block-search.ts function findMessagesWithThinkingBlocks (line 6) | function findMessagesWithThinkingBlocks(sessionID: string): string[] { function findMessagesWithThinkingOnly (line 23) | function findMessagesWithThinkingOnly(sessionID: string): string[] { FILE: src/hooks/session-recovery/storage/thinking-prepend.ts type OpencodeClient (line 11) | type OpencodeClient = PluginInput["client"] function findLastThinkingContent (line 13) | function findLastThinkingContent(sessionID: string, beforeMessageID: str... function prependThinkingPart (line 39) | function prependThinkingPart(sessionID: string, messageID: string): bool... function findLastThinkingContentFromSDK (line 71) | async function findLastThinkingContentFromSDK( function prependThinkingPartAsync (line 101) | async function prependThinkingPartAsync( FILE: src/hooks/session-recovery/storage/thinking-strip.ts type OpencodeClient (line 9) | type OpencodeClient = PluginInput["client"] function stripThinkingParts (line 11) | function stripThinkingParts(messageID: string): boolean { function stripThinkingPartsAsync (line 39) | async function stripThinkingPartsAsync( FILE: src/hooks/session-recovery/types.ts type ThinkingPartType (line 1) | type ThinkingPartType = "thinking" | "redacted_thinking" | "reasoning" type MetaPartType (line 2) | type MetaPartType = "step-start" | "step-finish" type ContentPartType (line 3) | type ContentPartType = "text" | "tool" | "tool_use" | "tool_result" type StoredMessageMeta (line 5) | interface StoredMessageMeta { type StoredTextPart (line 17) | interface StoredTextPart { type StoredToolPart (line 27) | interface StoredToolPart { type StoredReasoningPart (line 42) | interface StoredReasoningPart { type StoredStepPart (line 50) | interface StoredStepPart { type StoredPart (line 57) | type StoredPart = StoredTextPart | StoredToolPart | StoredReasoningPart ... type MessageData (line 65) | interface MessageData { type ResumeConfig (line 91) | interface ResumeConfig { FILE: src/hooks/session-todo-status.ts type Todo (line 4) | interface Todo { function hasIncompleteTodos (line 11) | async function hasIncompleteTodos(ctx: PluginInput, sessionID: string): ... FILE: src/hooks/shared/compaction-model-resolver.ts function resolveCompactionModel (line 5) | function resolveCompactionModel( FILE: src/hooks/sisyphus-junior-notepad/constants.ts constant HOOK_NAME (line 1) | const HOOK_NAME = "sisyphus-junior-notepad" constant NOTEPAD_DIRECTIVE (line 3) | const NOTEPAD_DIRECTIVE = ` FILE: src/hooks/sisyphus-junior-notepad/hook.ts function createSisyphusJuniorNotepadHook (line 8) | function createSisyphusJuniorNotepadHook(ctx: PluginInput) { FILE: src/hooks/start-work/index.test.ts function createMockPluginInput (line 21) | function createMockPluginInput() { FILE: src/hooks/start-work/parse-user-request.ts constant KEYWORD_PATTERN (line 1) | const KEYWORD_PATTERN = /\b(ultrawork|ulw)\b/gi constant WORKTREE_FLAG_PATTERN (line 2) | const WORKTREE_FLAG_PATTERN = /--worktree(?:\s+(\S+))?/ type ParsedUserRequest (line 4) | interface ParsedUserRequest { function parseUserRequest (line 9) | function parseUserRequest(promptText: string): ParsedUserRequest { FILE: src/hooks/start-work/start-work-hook.ts constant HOOK_NAME (line 18) | const HOOK_NAME = "start-work" as const type StartWorkHookInput (line 20) | interface StartWorkHookInput { type StartWorkHookOutput (line 25) | interface StartWorkHookOutput { function findPlanByName (line 29) | function findPlanByName(plans: string[], requestedName: string): string ... function createWorktreeActiveBlock (line 37) | function createWorktreeActiveBlock(worktreePath: string): string { function resolveWorktreeContext (line 49) | function resolveWorktreeContext( function createStartWorkHook (line 67) | function createStartWorkHook(ctx: PluginInput) { FILE: src/hooks/start-work/worktree-detector.ts type WorktreeEntry (line 3) | type WorktreeEntry = { function parseWorktreeListPorcelain (line 9) | function parseWorktreeListPorcelain(output: string): WorktreeEntry[] { function listWorktrees (line 52) | function listWorktrees(directory: string): WorktreeEntry[] { function detectWorktreePath (line 66) | function detectWorktreePath(directory: string): string | null { FILE: src/hooks/stop-continuation-guard/hook.ts constant HOOK_NAME (line 10) | const HOOK_NAME = "stop-continuation-guard" type StopContinuationBackgroundManager (line 12) | type StopContinuationBackgroundManager = Pick< type StopContinuationGuard (line 17) | interface StopContinuationGuard { function createStopContinuationGuardHook (line 25) | function createStopContinuationGuardHook( FILE: src/hooks/stop-continuation-guard/index.test.ts type CancelCall (line 9) | type CancelCall = { function createTempDir (line 17) | function createTempDir(): string { function createMockPluginInput (line 32) | function createMockPluginInput() { function createBackgroundTask (line 43) | function createBackgroundTask(status: BackgroundTask["status"], id: stri... function createMockBackgroundManager (line 55) | function createMockBackgroundManager(tasks: BackgroundTask[], cancelCall... function flushMicrotasks (line 65) | async function flushMicrotasks(): Promise { FILE: src/hooks/task-reminder/hook.ts constant TASK_TOOLS (line 3) | const TASK_TOOLS = new Set([ constant TURN_THRESHOLD (line 11) | const TURN_THRESHOLD = 10 constant REMINDER_MESSAGE (line 12) | const REMINDER_MESSAGE = ` type ToolExecuteInput (line 16) | interface ToolExecuteInput { type ToolExecuteOutput (line 22) | interface ToolExecuteOutput { function createTaskReminderHook (line 26) | function createTaskReminderHook(_ctx: PluginInput) { FILE: src/hooks/task-resume-info/hook.ts constant TARGET_TOOLS (line 1) | const TARGET_TOOLS = ["task", "Task", "task_tool", "call_omo_agent"] constant SESSION_ID_PATTERNS (line 3) | const SESSION_ID_PATTERNS = [ function extractSessionId (line 10) | function extractSessionId(output: string): string | null { function createTaskResumeInfoHook (line 18) | function createTaskResumeInfoHook() { FILE: src/hooks/tasks-todowrite-disabler/constants.ts constant HOOK_NAME (line 1) | const HOOK_NAME = "tasks-todowrite-disabler" constant BLOCKED_TOOLS (line 2) | const BLOCKED_TOOLS = ["TodoWrite", "TodoRead"] constant REPLACEMENT_MESSAGE (line 3) | const REPLACEMENT_MESSAGE = `TodoRead/TodoWrite are DISABLED because exp... FILE: src/hooks/tasks-todowrite-disabler/hook.ts type TasksTodowriteDisablerConfig (line 3) | interface TasksTodowriteDisablerConfig { function createTasksTodowriteDisablerHook (line 9) | function createTasksTodowriteDisablerHook( FILE: src/hooks/think-mode/detector.ts constant ENGLISH_PATTERNS (line 1) | const ENGLISH_PATTERNS = [/\bultrathink\b/i, /\bthink\b/i] constant MULTILINGUAL_KEYWORDS (line 3) | const MULTILINGUAL_KEYWORDS = [ constant COMBINED_THINK_PATTERN (line 35) | const COMBINED_THINK_PATTERN = new RegExp( constant CODE_BLOCK_PATTERN (line 40) | const CODE_BLOCK_PATTERN = /```[\s\S]*?```/g constant INLINE_CODE_PATTERN (line 41) | const INLINE_CODE_PATTERN = /`[^`]+`/g function removeCodeBlocks (line 43) | function removeCodeBlocks(text: string): string { function detectThinkKeyword (line 47) | function detectThinkKeyword(text: string): boolean { function extractPromptText (line 52) | function extractPromptText( FILE: src/hooks/think-mode/hook.ts function clearThinkModeState (line 8) | function clearThinkModeState(sessionID: string): void { function createThinkModeHook (line 12) | function createThinkModeHook() { FILE: src/hooks/think-mode/index.test.ts type ThinkModeHookInput (line 5) | type ThinkModeHookInput = { type ThinkModeHookOutput (line 10) | type ThinkModeHookOutput = { function createHookInput (line 15) | function createHookInput(args: { function createHookOutput (line 32) | function createHookOutput(promptText: string, variant?: string): ThinkMo... FILE: src/hooks/think-mode/switcher.ts function extractModelPrefix (line 30) | function extractModelPrefix(modelID: string): { prefix: string; base: st... constant HIGH_VARIANT_MAP (line 44) | const HIGH_VARIANT_MAP: Record = { constant ALREADY_HIGH (line 73) | const ALREADY_HIGH: Set = new Set(Object.values(HIGH_VARIANT_MAP)) function getHighVariant (line 76) | function getHighVariant(modelID: string): string | null { function isAlreadyHighVariant (line 95) | function isAlreadyHighVariant(modelID: string): boolean { FILE: src/hooks/think-mode/types.ts type ThinkModeState (line 1) | interface ThinkModeState { type ModelRef (line 9) | interface ModelRef { type MessageWithModel (line 14) | interface MessageWithModel { FILE: src/hooks/thinking-block-validator/hook.ts type MessageWithParts (line 19) | interface MessageWithParts { type ThinkingPart (line 24) | interface ThinkingPart { type MessageInfoExtended (line 29) | interface MessageInfoExtended { type MessagesTransformHook (line 36) | type MessagesTransformHook = { function isExtendedThinkingModel (line 47) | function isExtendedThinkingModel(modelID: string): boolean { function hasContentParts (line 68) | function hasContentParts(parts: Part[]): boolean { function startsWithThinkingBlock (line 81) | function startsWithThinkingBlock(parts: Part[]): boolean { function findPreviousThinkingContent (line 92) | function findPreviousThinkingContent( function prependThinkingBlock (line 120) | function prependThinkingBlock(message: MessageWithParts, thinkingContent... function createThinkingBlockValidatorHook (line 142) | function createThinkingBlockValidatorHook(): MessagesTransformHook { FILE: src/hooks/todo-continuation-enforcer/abort-detection.ts function isLastAssistantMessageAborted (line 3) | function isLastAssistantMessageAborted( FILE: src/hooks/todo-continuation-enforcer/compaction-guard.ts function isCompactionGuardActive (line 4) | function isCompactionGuardActive(state: SessionState, now: number): bool... FILE: src/hooks/todo-continuation-enforcer/constants.ts constant HOOK_NAME (line 3) | const HOOK_NAME = "todo-continuation-enforcer" constant DEFAULT_SKIP_AGENTS (line 5) | const DEFAULT_SKIP_AGENTS = ["prometheus", "compaction"] constant CONTINUATION_PROMPT (line 7) | const CONTINUATION_PROMPT = `${createSystemDirective(SystemDirectiveType... constant COUNTDOWN_SECONDS (line 15) | const COUNTDOWN_SECONDS = 2 constant TOAST_DURATION_MS (line 16) | const TOAST_DURATION_MS = 900 constant COUNTDOWN_GRACE_PERIOD_MS (line 17) | const COUNTDOWN_GRACE_PERIOD_MS = 500 constant ABORT_WINDOW_MS (line 19) | const ABORT_WINDOW_MS = 3000 constant COMPACTION_GUARD_MS (line 20) | const COMPACTION_GUARD_MS = 60_000 constant CONTINUATION_COOLDOWN_MS (line 21) | const CONTINUATION_COOLDOWN_MS = 5_000 constant MAX_STAGNATION_COUNT (line 22) | const MAX_STAGNATION_COUNT = 3 constant MAX_CONSECUTIVE_FAILURES (line 23) | const MAX_CONSECUTIVE_FAILURES = 5 constant FAILURE_RESET_WINDOW_MS (line 24) | const FAILURE_RESET_WINDOW_MS = 5 * 60 * 1000 FILE: src/hooks/todo-continuation-enforcer/continuation-injection.ts function hasWritePermission (line 30) | function hasWritePermission(tools: Record | unde... function injectContinuation (line 39) | async function injectContinuation(args: { FILE: src/hooks/todo-continuation-enforcer/countdown.ts function showCountdownToast (line 15) | async function showCountdownToast( function startCountdown (line 32) | function startCountdown(args: { FILE: src/hooks/todo-continuation-enforcer/dispose.test.ts type Matchers (line 2) | interface Matchers { type PluginInput (line 32) | type PluginInput = Parameters[0] function createMockPluginInput (line 34) | function createMockPluginInput(): PluginInput { function getCreatedSessionStateStore (line 40) | function getCreatedSessionStateStore(): SessionStateStore { FILE: src/hooks/todo-continuation-enforcer/handler.ts function createTodoContinuationHandler (line 14) | function createTodoContinuationHandler(args: { FILE: src/hooks/todo-continuation-enforcer/idle-event.ts function handleSessionIdle (line 26) | async function handleSessionIdle(args: { FILE: src/hooks/todo-continuation-enforcer/index.ts function createTodoContinuationEnforcer (line 12) | function createTodoContinuationEnforcer( FILE: src/hooks/todo-continuation-enforcer/non-idle-events.ts function handleNonIdleEvent (line 6) | function handleNonIdleEvent(args: { FILE: src/hooks/todo-continuation-enforcer/pending-question-detection.ts type MessagePart (line 4) | interface MessagePart { type Message (line 10) | interface Message { function hasUnansweredQuestion (line 16) | function hasUnansweredQuestion(messages: Message[]): boolean { FILE: src/hooks/todo-continuation-enforcer/resolve-message-info.ts function resolveLatestMessageInfo (line 7) | async function resolveLatestMessageInfo( FILE: src/hooks/todo-continuation-enforcer/session-state.ts type TimerHandle (line 3) | type TimerHandle = number | { unref?: () => void } constant SESSION_STATE_TTL_MS (line 10) | const SESSION_STATE_TTL_MS = 10 * 60 * 1000 constant SESSION_STATE_PRUNE_INTERVAL_MS (line 12) | const SESSION_STATE_PRUNE_INTERVAL_MS = 2 * 60 * 1000 type TrackedSessionState (line 14) | interface TrackedSessionState { type ContinuationProgressUpdate (line 21) | interface ContinuationProgressUpdate { type SessionStateStore (line 29) | interface SessionStateStore { function getTodoSnapshot (line 40) | function getTodoSnapshot(todos: Todo[]): string { function createSessionStateStore (line 66) | function createSessionStateStore(): SessionStateStore { FILE: src/hooks/todo-continuation-enforcer/stagnation-detection.ts function shouldStopForStagnation (line 6) | function shouldStopForStagnation(args: { FILE: src/hooks/todo-continuation-enforcer/todo-continuation-enforcer.test.ts type TimerCallback (line 14) | type TimerCallback = (...args: any[]) => void type FakeTimers (line 16) | interface FakeTimers { function createFakeTimers (line 22) | function createFakeTimers(): FakeTimers { type MockMessage (line 170) | interface MockMessage { type PromptRequestOptions (line 178) | interface PromptRequestOptions { function createMockPluginInput (line 189) | function createMockPluginInput() { function createMockBackgroundManager (line 231) | function createMockBackgroundManager(runningTasks: boolean = false): Bac... FILE: src/hooks/todo-continuation-enforcer/todo.ts function getIncompleteCount (line 3) | function getIncompleteCount(todos: Todo[]): number { FILE: src/hooks/todo-continuation-enforcer/types.ts type TodoContinuationEnforcerOptions (line 4) | interface TodoContinuationEnforcerOptions { type TodoContinuationEnforcer (line 10) | interface TodoContinuationEnforcer { type Todo (line 18) | interface Todo { type SessionState (line 25) | interface SessionState { type MessageInfo (line 40) | interface MessageInfo { type ResolvedMessageInfo (line 51) | interface ResolvedMessageInfo { type ResolveLatestMessageInfoResult (line 57) | interface ResolveLatestMessageInfoResult { FILE: src/hooks/todo-description-override/description.ts constant TODOWRITE_DESCRIPTION (line 1) | const TODOWRITE_DESCRIPTION = `Use this tool to create and manage a stru... FILE: src/hooks/todo-description-override/hook.ts function createTodoDescriptionOverrideHook (line 3) | function createTodoDescriptionOverrideHook() { FILE: src/hooks/tool-output-truncator.ts constant DEFAULT_MAX_TOKENS (line 5) | const DEFAULT_MAX_TOKENS = 50_000 // ~200k chars constant WEBFETCH_MAX_TOKENS (line 6) | const WEBFETCH_MAX_TOKENS = 10_000 // ~40k chars - web pages need aggres... constant TRUNCATABLE_TOOLS (line 8) | const TRUNCATABLE_TOOLS = [ constant TOOL_SPECIFIC_MAX_TOKENS (line 24) | const TOOL_SPECIFIC_MAX_TOKENS: Record = { type ToolOutputTruncatorOptions (line 29) | interface ToolOutputTruncatorOptions { function createToolOutputTruncatorHook (line 37) | function createToolOutputTruncatorHook(ctx: PluginInput, options?: ToolO... FILE: src/hooks/unstable-agent-babysitter/index.test.ts type BabysitterContext (line 9) | type BabysitterContext = Parameters = {}): Background... FILE: src/hooks/unstable-agent-babysitter/task-message-analyzer.ts constant THINKING_SUMMARY_MAX_CHARS (line 3) | const THINKING_SUMMARY_MAX_CHARS = 500 as const type MessageInfo (line 5) | type MessageInfo = { type MessagePart (line 14) | type MessagePart = { function hasData (line 20) | function hasData(value: unknown): value is { data?: unknown } { function isRecord (line 24) | function isRecord(value: unknown): value is Record { function getMessageInfo (line 28) | function getMessageInfo(value: unknown): MessageInfo | undefined { function getMessageParts (line 61) | function getMessageParts(value: unknown): MessagePart[] { function extractMessages (line 71) | function extractMessages(value: unknown): unknown[] { function isUnstableTask (line 81) | function isUnstableTask(task: BackgroundTask): boolean { function buildReminder (line 87) | function buildReminder(task: BackgroundTask, summary: string | null, idl... FILE: src/hooks/unstable-agent-babysitter/unstable-agent-babysitter-hook.ts constant HOOK_NAME (line 14) | const HOOK_NAME = "unstable-agent-babysitter" constant DEFAULT_TIMEOUT_MS (line 15) | const DEFAULT_TIMEOUT_MS = 120000 constant COOLDOWN_MS (line 16) | const COOLDOWN_MS = 5 * 60 * 1000 type BabysittingConfig (line 18) | type BabysittingConfig = { type BabysitterContext (line 22) | type BabysitterContext = { type BabysitterOptions (line 51) | type BabysitterOptions = { function resolveMainSessionTarget (line 57) | async function resolveMainSessionTarget( function getThinkingSummary (line 86) | async function getThinkingSummary(ctx: BabysitterContext, sessionID: str... function createUnstableAgentBabysitterHook (line 118) | function createUnstableAgentBabysitterHook(ctx: BabysitterContext, optio... FILE: src/hooks/write-existing-file-guard/hook.ts type GuardArgs (line 8) | type GuardArgs = { constant MAX_TRACKED_SESSIONS (line 15) | const MAX_TRACKED_SESSIONS = 256 constant MAX_TRACKED_PATHS_PER_SESSION (line 16) | const MAX_TRACKED_PATHS_PER_SESSION = 1024 constant BLOCK_MESSAGE (line 17) | const BLOCK_MESSAGE = "File already exists. Use edit tool instead." function asRecord (line 19) | function asRecord(value: unknown): Record | undefined { function getPathFromArgs (line 27) | function getPathFromArgs(args: GuardArgs | undefined): string | undefined { function resolveInputPath (line 31) | function resolveInputPath(ctx: PluginInput, inputPath: string): string { function isPathInsideDirectory (line 35) | function isPathInsideDirectory(pathToCheck: string, directory: string): ... function toCanonicalPath (line 42) | function toCanonicalPath(absolutePath: string): string { function isOverwriteEnabled (line 62) | function isOverwriteEnabled(value: boolean | string | undefined): boolean { function createWriteExistingFileGuardHook (line 74) | function createWriteExistingFileGuardHook(ctx: PluginInput): Hooks { FILE: src/hooks/write-existing-file-guard/index.test.ts constant BLOCK_MESSAGE (line 9) | const BLOCK_MESSAGE = "File already exists. Use edit tool instead." type Hook (line 11) | type Hook = ReturnType function isCaseInsensitiveFilesystem (line 13) | function isCaseInsensitiveFilesystem(directory: string): boolean { FILE: src/index.test.ts function createCompactingHandler (line 4) | function createCompactingHandler(hooks: { FILE: src/mcp/index.ts type RemoteMcpConfig (line 8) | type RemoteMcpConfig = { function createBuiltinMcps (line 16) | function createBuiltinMcps(disabledMcps: string[] = [], config?: OhMyOpe... FILE: src/mcp/types.ts type McpName (line 5) | type McpName = z.infer type AnyMcpName (line 9) | type AnyMcpName = z.infer FILE: src/mcp/websearch.ts type RemoteMcpConfig (line 3) | type RemoteMcpConfig = { function createWebsearchConfig (line 11) | function createWebsearchConfig(config?: WebsearchConfig): RemoteMcpConfig { FILE: src/openclaw/config.ts constant DEFAULT_REPLY_POLL_INTERVAL_MS (line 7) | const DEFAULT_REPLY_POLL_INTERVAL_MS = 3000 constant MIN_REPLY_POLL_INTERVAL_MS (line 8) | const MIN_REPLY_POLL_INTERVAL_MS = 500 constant MAX_REPLY_POLL_INTERVAL_MS (line 9) | const MAX_REPLY_POLL_INTERVAL_MS = 60000 constant DEFAULT_REPLY_RATE_LIMIT_PER_MINUTE (line 10) | const DEFAULT_REPLY_RATE_LIMIT_PER_MINUTE = 10 constant MIN_REPLY_RATE_LIMIT_PER_MINUTE (line 11) | const MIN_REPLY_RATE_LIMIT_PER_MINUTE = 1 constant DEFAULT_REPLY_MAX_MESSAGE_LENGTH (line 12) | const DEFAULT_REPLY_MAX_MESSAGE_LENGTH = 500 constant MIN_REPLY_MAX_MESSAGE_LENGTH (line 13) | const MIN_REPLY_MAX_MESSAGE_LENGTH = 1 constant MAX_REPLY_MAX_MESSAGE_LENGTH (line 14) | const MAX_REPLY_MAX_MESSAGE_LENGTH = 4000 function normalizeInteger (line 16) | function normalizeInteger( function normalizeReplyListenerConfig (line 35) | function normalizeReplyListenerConfig(config: OpenClawConfig): OpenClawC... function resolveGateway (line 76) | function resolveGateway( function validateGatewayUrl (line 103) | function validateGatewayUrl(url: string): boolean { FILE: src/openclaw/dispatcher.ts constant DEFAULT_HTTP_TIMEOUT_MS (line 4) | const DEFAULT_HTTP_TIMEOUT_MS = 10_000 constant DEFAULT_COMMAND_TIMEOUT_MS (line 5) | const DEFAULT_COMMAND_TIMEOUT_MS = 5_000 constant MIN_COMMAND_TIMEOUT_MS (line 6) | const MIN_COMMAND_TIMEOUT_MS = 100 constant MAX_COMMAND_TIMEOUT_MS (line 7) | const MAX_COMMAND_TIMEOUT_MS = 300_000 constant SHELL_METACHAR_RE (line 8) | const SHELL_METACHAR_RE = /[|&;><`$()]/ function validateGatewayUrl (line 10) | function validateGatewayUrl(url: string): boolean { function interpolateInstruction (line 29) | function interpolateInstruction( function shellEscapeArg (line 38) | function shellEscapeArg(value: string): string { function resolveCommandTimeoutMs (line 42) | function resolveCommandTimeoutMs( function wakeGateway (line 69) | async function wakeGateway( function wakeCommandGateway (line 121) | async function wakeCommandGateway( FILE: src/openclaw/index.ts constant DEBUG (line 12) | const DEBUG = function buildWhitelistedContext (line 16) | function buildWhitelistedContext(context: OpenClawContext): OpenClawCont... function wakeOpenClaw (line 32) | async function wakeOpenClaw( function initializeOpenClaw (line 134) | async function initializeOpenClaw(config: OpenClawConfig): Promise { FILE: src/openclaw/reply-listener.ts constant SECURE_FILE_MODE (line 20) | const SECURE_FILE_MODE = 0o600 constant MAX_LOG_SIZE_BYTES (line 21) | const MAX_LOG_SIZE_BYTES = 1 * 1024 * 1024 constant DAEMON_ENV_ALLOWLIST (line 22) | const DAEMON_ENV_ALLOWLIST = [ constant DEFAULT_STATE_DIR (line 55) | const DEFAULT_STATE_DIR = join(homedir(), ".omx", "state") constant PID_FILE_PATH (line 56) | const PID_FILE_PATH = join(DEFAULT_STATE_DIR, "reply-listener.pid") constant STATE_FILE_PATH (line 57) | const STATE_FILE_PATH = join(DEFAULT_STATE_DIR, "reply-listener-state.js... constant CONFIG_FILE_PATH (line 58) | const CONFIG_FILE_PATH = join(DEFAULT_STATE_DIR, "reply-listener-config.... constant LOG_FILE_PATH (line 59) | const LOG_FILE_PATH = join(DEFAULT_STATE_DIR, "reply-listener.log") constant DAEMON_IDENTITY_MARKER (line 61) | const DAEMON_IDENTITY_MARKER = "--openclaw-reply-listener-daemon" function createMinimalDaemonEnv (line 63) | function createMinimalDaemonEnv(): Record { function ensureStateDir (line 73) | function ensureStateDir(): void { function writeSecureFile (line 79) | function writeSecureFile(filePath: string, content: string): void { function rotateLogIfNeeded (line 89) | function rotateLogIfNeeded(logPath: string): void { function log (line 105) | function log(message: string): void { function logReplyListenerMessage (line 117) | function logReplyListenerMessage(message: string): void { type DaemonState (line 121) | interface DaemonState { function readDaemonState (line 133) | function readDaemonState(): DaemonState | null { function writeDaemonState (line 143) | function writeDaemonState(state: DaemonState): void { function readDaemonConfig (line 147) | function readDaemonConfig(): OpenClawConfig | null { function writeDaemonConfig (line 157) | function writeDaemonConfig(config: OpenClawConfig): void { function readPidFile (line 161) | function readPidFile(): number | null { function writePidFile (line 173) | function writePidFile(pid: number): void { function removePidFile (line 177) | function removePidFile(): void { function isProcessRunning (line 183) | function isProcessRunning(pid: number): boolean { function isReplyListenerProcess (line 192) | async function isReplyListenerProcess(pid: number): Promise { function isDaemonRunning (line 211) | async function isDaemonRunning(): Promise { function sanitizeReplyInput (line 226) | function sanitizeReplyInput(text: string): string { class RateLimiter (line 238) | class RateLimiter { method constructor (line 243) | constructor(maxPerMinute: number) { method canProceed (line 247) | canProceed(): boolean { function injectReply (line 256) | async function injectReply( function pollDiscord (line 291) | async function pollDiscord( function pollTelegram (line 403) | async function pollTelegram( constant PRUNE_INTERVAL_MS (line 509) | const PRUNE_INTERVAL_MS = 60 * 60 * 1000 function pollLoop (line 511) | async function pollLoop(): Promise { function startReplyListener (line 587) | async function startReplyListener(config: OpenClawConfig): Promise<{ suc... function stopReplyListener (line 670) | async function stopReplyListener(): Promise<{ success: boolean; message:... FILE: src/openclaw/session-registry.ts constant OPENCLAW_STORAGE_DIR (line 17) | const OPENCLAW_STORAGE_DIR = join(getOpenCodeStorageDir(), "openclaw") constant REGISTRY_PATH (line 18) | const REGISTRY_PATH = join(OPENCLAW_STORAGE_DIR, "reply-session-registry... constant REGISTRY_LOCK_PATH (line 19) | const REGISTRY_LOCK_PATH = join(OPENCLAW_STORAGE_DIR, "reply-session-reg... constant SECURE_FILE_MODE (line 20) | const SECURE_FILE_MODE = 0o600 constant MAX_AGE_MS (line 21) | const MAX_AGE_MS = 24 * 60 * 60 * 1000 constant LOCK_TIMEOUT_MS (line 22) | const LOCK_TIMEOUT_MS = 2000 constant LOCK_WAIT_TIMEOUT_MS (line 23) | const LOCK_WAIT_TIMEOUT_MS = 4000 constant LOCK_RETRY_MS (line 24) | const LOCK_RETRY_MS = 20 constant LOCK_STALE_MS (line 25) | const LOCK_STALE_MS = 10000 type SessionMapping (line 27) | interface SessionMapping { function ensureRegistryDir (line 39) | function ensureRegistryDir(): void { function sleepMs (line 46) | function sleepMs(ms: number): void { function isPidAlive (line 51) | function isPidAlive(pid: number): boolean { type LockSnapshot (line 61) | interface LockSnapshot { function readLockSnapshot (line 67) | function readLockSnapshot(): LockSnapshot | null { function removeLockIfUnchanged (line 96) | function removeLockIfUnchanged(snapshot: LockSnapshot): boolean { type LockHandle (line 108) | interface LockHandle { function acquireRegistryLock (line 113) | function acquireRegistryLock(): LockHandle | null { function acquireRegistryLockOrWait (line 175) | function acquireRegistryLockOrWait(maxWaitMs = LOCK_WAIT_TIMEOUT_MS): Lo... function releaseRegistryLock (line 187) | function releaseRegistryLock(lock: LockHandle): void { function withRegistryLockOrWait (line 198) | function withRegistryLockOrWait( function withRegistryLock (line 211) | function withRegistryLock(onLocked: () => void, onLockUnavailable: () =>... function readAllMappingsUnsafe (line 224) | function readAllMappingsUnsafe(): SessionMapping[] { function rewriteRegistryUnsafe (line 244) | function rewriteRegistryUnsafe(mappings: SessionMapping[]): void { function registerMessage (line 254) | function registerMessage(mapping: SessionMapping): boolean { function loadAllMappings (line 280) | function loadAllMappings(): SessionMapping[] { function lookupByMessageId (line 287) | function lookupByMessageId(platform: string, messageId: string): Session... function removeSession (line 292) | function removeSession(sessionId: string): void { function removeMessagesByPane (line 306) | function removeMessagesByPane(paneId: string): void { function pruneStale (line 320) | function pruneStale(): void { FILE: src/openclaw/tmux.ts function getCurrentTmuxSession (line 3) | function getCurrentTmuxSession(): string | null { function getTmuxSessionName (line 11) | async function getTmuxSessionName(): Promise { function captureTmuxPane (line 28) | async function captureTmuxPane(paneId: string, lines = 15): Promise { function analyzePaneContent (line 82) | function analyzePaneContent(content: string | null): { confidence: numbe... FILE: src/openclaw/types.ts type OpenClawContext (line 15) | interface OpenClawContext { type OpenClawPayload (line 31) | interface OpenClawPayload { type WakeResult (line 47) | interface WakeResult { FILE: src/plugin-config.ts constant PARTIAL_STRING_ARRAY_KEYS (line 14) | const PARTIAL_STRING_ARRAY_KEYS = new Set([ function parseConfigPartially (line 23) | function parseConfigPartially( function loadConfigFromPath (line 67) | function loadConfigFromPath( function mergeConfigs (line 110) | function mergeConfigs( function loadPluginConfig (line 159) | function loadPluginConfig( FILE: src/plugin-dispose.ts type PluginDispose (line 3) | type PluginDispose = () => Promise function createPluginDispose (line 5) | function createPluginDispose(args: { FILE: src/plugin-handlers/agent-config-handler.test.ts constant BUILTIN_SISYPHUS_DISPLAY_NAME (line 15) | const BUILTIN_SISYPHUS_DISPLAY_NAME = getAgentDisplayName("sisyphus") constant BUILTIN_SISYPHUS_JUNIOR_DISPLAY_NAME (line 16) | const BUILTIN_SISYPHUS_JUNIOR_DISPLAY_NAME = getAgentDisplayName("sisyph... constant BUILTIN_MULTIMODAL_LOOKER_DISPLAY_NAME (line 17) | const BUILTIN_MULTIMODAL_LOOKER_DISPLAY_NAME = getAgentDisplayName("mult... function createPluginComponents (line 19) | function createPluginComponents(): PluginComponents { function createBaseConfig (line 31) | function createBaseConfig(): Record { function createPluginConfig (line 38) | function createPluginConfig(): OhMyOpenCodeConfig { FILE: src/plugin-handlers/agent-config-handler.ts type AgentConfigRecord (line 25) | type AgentConfigRecord = Record | undefi... function getConfiguredDefaultAgent (line 30) | function getConfiguredDefaultAgent(config: Record): str... function applyAgentConfig (line 38) | async function applyAgentConfig(params: { FILE: src/plugin-handlers/agent-key-remapper.ts function remapAgentKeysToDisplayNames (line 3) | function remapAgentKeysToDisplayNames( FILE: src/plugin-handlers/agent-override-protection.ts constant PARENTHETICAL_SUFFIX_PATTERN (line 1) | const PARENTHETICAL_SUFFIX_PATTERN = /\s*(\([^)]*\)\s*)+$/u function normalizeProtectedAgentName (line 3) | function normalizeProtectedAgentName(agentName: string): string { function createProtectedAgentNameSet (line 12) | function createProtectedAgentNameSet(agentNames: Iterable): Set<... function filterProtectedAgentOverrides (line 25) | function filterProtectedAgentOverrides( FILE: src/plugin-handlers/agent-priority-order.ts constant CORE_AGENT_ORDER (line 3) | const CORE_AGENT_ORDER = [ function reorderAgentsByPriority (line 10) | function reorderAgentsByPriority( FILE: src/plugin-handlers/category-config-resolver.ts function resolveCategoryConfig (line 4) | function resolveCategoryConfig( FILE: src/plugin-handlers/command-config-handler.ts function applyCommandConfig (line 20) | async function applyCommandConfig(params: { function remapCommandAgentFields (line 76) | function remapCommandAgentFields(commands: Record = {})... constant EMPTY_PLUGIN_COMPONENTS (line 34) | const EMPTY_PLUGIN_COMPONENTS = { FILE: src/plugin-handlers/mcp-config-handler.ts type McpEntry (line 6) | type McpEntry = Record; function captureUserDisabledMcps (line 8) | function captureUserDisabledMcps( function applyMcpConfig (line 28) | async function applyMcpConfig(params: { FILE: src/plugin-handlers/plan-model-inheritance.ts constant MODEL_SETTINGS_KEYS (line 1) | const MODEL_SETTINGS_KEYS = [ function buildPlanDemoteConfig (line 13) | function buildPlanDemoteConfig( FILE: src/plugin-handlers/plugin-components-loader.ts type PluginComponents (line 5) | type PluginComponents = { constant EMPTY_PLUGIN_COMPONENTS (line 15) | const EMPTY_PLUGIN_COMPONENTS: PluginComponents = { function loadPluginComponents (line 25) | async function loadPluginComponents(params: { FILE: src/plugin-handlers/prometheus-agent-config-builder.ts type PrometheusOverride (line 12) | type PrometheusOverride = Record & { function buildPrometheusAgentConfig (line 25) | async function buildPrometheusAgentConfig(params: { FILE: src/plugin-handlers/provider-config-handler.ts type ProviderConfig (line 4) | type ProviderConfig = { type ProviderModelConfig (line 9) | type ProviderModelConfig = { function supportsImageInput (line 21) | function supportsImageInput(modelConfig: ProviderModelConfig | undefined... function applyProviderConfig (line 29) | function applyProviderConfig(params: { FILE: src/plugin-handlers/tool-config-handler.test.ts function createParams (line 5) | function createParams(overrides: { FILE: src/plugin-handlers/tool-config-handler.ts type AgentWithPermission (line 4) | type AgentWithPermission = { permission?: Record }; function getConfigQuestionPermission (line 6) | function getConfigQuestionPermission(): string | null { function agentByKey (line 17) | function agentByKey(agentResult: Record, key: string): ... function applyToolConfig (line 23) | function applyToolConfig(params: { FILE: src/plugin-interface.ts function createPluginInterface (line 16) | function createPluginInterface(args: { FILE: src/plugin-state.ts type VisionCapableModel (line 1) | type VisionCapableModel = { type ModelCacheState (line 6) | interface ModelCacheState { function createModelCacheState (line 12) | function createModelCacheState(): ModelCacheState { FILE: src/plugin/available-categories.ts function createAvailableCategories (line 6) | function createAvailableCategories( FILE: src/plugin/chat-headers.ts type ChatHeadersInput (line 4) | type ChatHeadersInput = { type ChatHeadersOutput (line 13) | type ChatHeadersOutput = { constant INTERNAL_MARKER_CACHE_LIMIT (line 17) | const INTERNAL_MARKER_CACHE_LIMIT = 1000 function isRecord (line 20) | function isRecord(value: unknown): value is Record { function buildChatHeadersInput (line 24) | function buildChatHeadersInput(raw: unknown): ChatHeadersInput | null { function isChatHeadersOutput (line 45) | function isChatHeadersOutput(raw: unknown): raw is ChatHeadersOutput { function isCopilotProvider (line 53) | function isCopilotProvider(providerID: string): boolean { function hasInternalMarker (line 57) | async function hasInternalMarker( function isOmoInternalMessage (line 105) | async function isOmoInternalMessage(input: ChatHeadersInput, client: Plu... function createChatHeadersHandler (line 117) | function createChatHeadersHandler(args: { ctx: PluginContext }): (input:... FILE: src/plugin/chat-message.test.ts type ChatMessagePart (line 5) | type ChatMessagePart = { type: string; text?: string; [key: string]: unk... type ChatMessageHandlerOutput (line 6) | type ChatMessageHandlerOutput = { message: Record; part... function createMockHandlerArgs (line 8) | function createMockHandlerArgs(overrides?: { function createMockInput (line 33) | function createMockInput(agent?: string, model?: { providerID: string; m... function createMockOutput (line 41) | function createMockOutput(variant?: string): ChatMessageHandlerOutput { FILE: src/plugin/chat-message.ts type FirstMessageVariantGate (line 12) | type FirstMessageVariantGate = { type ChatMessagePart (line 17) | type ChatMessagePart = { type: string; text?: string; [key: string]: unk... type ChatMessageHandlerOutput (line 18) | type ChatMessageHandlerOutput = { message: Record; part... type ChatMessageInput (line 19) | type ChatMessageInput = { type StartWorkHookOutput (line 24) | type StartWorkHookOutput = { parts: Array<{ type: string; text?: string ... function isStartWorkHookOutput (line 26) | function isStartWorkHookOutput(value: unknown): value is StartWorkHookOu... function createChatMessageHandler (line 38) | function createChatMessageHandler(args: { FILE: src/plugin/chat-params.ts type ChatParamsInput (line 1) | type ChatParamsInput = { type ChatParamsOutput (line 9) | type ChatParamsOutput = { function isRecord (line 16) | function isRecord(value: unknown): value is Record { function buildChatParamsInput (line 20) | function buildChatParamsInput(raw: unknown): ChatParamsInput | null { function isChatParamsOutput (line 63) | function isChatParamsOutput(raw: unknown): raw is ChatParamsOutput { function createChatParamsHandler (line 71) | function createChatParamsHandler(args: { FILE: src/plugin/event-compaction-agent.test.ts function createMinimalEventHandler (line 7) | function createMinimalEventHandler() { FILE: src/plugin/event.test.ts type EventInput (line 8) | type EventInput = { event: { type: string; properties?: unknown } } FILE: src/plugin/event.ts type FirstMessageVariantGate (line 36) | type FirstMessageVariantGate = { function isRecord (line 41) | function isRecord(value: unknown): value is Record { function normalizeFallbackModelID (line 45) | function normalizeFallbackModelID(modelID: string): string { function extractErrorName (line 52) | function extractErrorName(error: unknown): string | undefined { function extractErrorMessage (line 58) | function extractErrorMessage(error: unknown): string { function extractProviderModelFromErrorMessage (line 86) | function extractProviderModelFromErrorMessage(message: string): { provid... function applyUserConfiguredFallbackChain (line 106) | function applyUserConfiguredFallbackChain( function isCompactionAgent (line 123) | function isCompactionAgent(agent: string): boolean { type EventInput (line 127) | type EventInput = Parameters { function getNestedRecord (line 17) | function getNestedRecord(record: Record, key: string): ... function loadSeparateHostZodModule (line 22) | async function loadSeparateHostZodModule(): Promise { function serializeWithHostZod (line 34) | function serializeWithHostZod( method execute (line 64) | async execute(): Promise { FILE: src/plugin/normalize-tool-arg-schemas.ts type ToolArgSchema (line 4) | type ToolArgSchema = ToolDefinition["args"][string] type SchemaWithJsonSchemaOverride (line 6) | type SchemaWithJsonSchemaOverride = ToolArgSchema & { function stripRootJsonSchemaFields (line 12) | function stripRootJsonSchemaFields(jsonSchema: Record):... function attachJsonSchemaOverride (line 17) | function attachJsonSchemaOverride(schema: SchemaWithJsonSchemaOverride):... function normalizeToolArgSchemas (line 34) | function normalizeToolArgSchemas(.*?)... function getMetadataString (line 9) | function getMetadataString(metadata: Record | undefined... function getPluginDirectory (line 20) | function getPluginDirectory(ctx: PluginContext): string | null { function createToolExecuteAfterHandler (line 28) | function createToolExecuteAfterHandler(args: { FILE: src/plugin/tool-execute-before.test.ts function createCtxWithSessionMessages (line 92) | function createCtxWithSessionMessages(messages: Array<{ info?: { agent?:... function createRegistryInput (line 224) | function createRegistryInput(overrides = {}) { FILE: src/plugin/tool-execute-before.ts function createToolExecuteBeforeHandler (line 14) | function createToolExecuteBeforeHandler(args: { FILE: src/plugin/tool-execute-before.ulw-loop.test.ts function createCtx (line 11) | function createCtx(directory: string) { function createOracleTaskArgs (line 22) | function createOracleTaskArgs(prompt: string): Record { function createSyncTaskMetadata (line 30) | function createSyncTaskMetadata( FILE: src/plugin/tool-registry.ts type ToolRegistryResult (line 37) | type ToolRegistryResult = { function createToolRegistry (line 42) | function createToolRegistry(args: { FILE: src/plugin/types.ts type PluginContext (line 3) | type PluginContext = Parameters[0] type PluginInstance (line 4) | type PluginInstance = Awaited> type ChatHeadersHook (line 6) | type ChatHeadersHook = PluginInstance extends { "chat.headers"?: infer T } type PluginInterface (line 10) | type PluginInterface = Omit< type ToolsRecord (line 17) | type ToolsRecord = Record type TmuxConfig (line 19) | type TmuxConfig = { FILE: src/plugin/ultrawork-db-model-override.test.ts function flushMicrotasks (line 9) | function flushMicrotasks(depth: number): Promise { function flushWithTimeout (line 21) | function flushWithTimeout(): Promise { function insertMessage (line 59) | function insertMessage(id: string, model: { providerID: string; modelID:... function readMessageModel (line 70) | function readMessageModel(id: string): { providerID: string; modelID: st... function readMessageField (line 81) | function readMessageField(id: string, field: string): unknown { FILE: src/plugin/ultrawork-db-model-override.ts function getDbPath (line 7) | function getDbPath(): string { constant MAX_MICROTASK_RETRIES (line 11) | const MAX_MICROTASK_RETRIES = 10 function tryUpdateMessageModel (line 13) | function tryUpdateMessageModel( function retryViaMicrotask (line 32) | function retryViaMicrotask( function scheduleDeferredModelOverride (line 110) | function scheduleDeferredModelOverride( FILE: src/plugin/ultrawork-model-override.test.ts function createOutput (line 44) | function createOutput(text: string, agentName?: string) { function createConfig (line 53) | function createConfig(agentName: string, ultrawork: { model?: string; va... function createMockTui (line 233) | function createMockTui() { function createOutput (line 239) | function createOutput( function createConfig (line 257) | function createConfig(agentName: string, ultrawork: { model?: string; va... FILE: src/plugin/ultrawork-model-override.ts constant CODE_BLOCK (line 9) | const CODE_BLOCK = /```[\s\S]*?```/g constant INLINE_CODE (line 10) | const INLINE_CODE = /`[^`]+`/g constant ULTRAWORK_PATTERN (line 11) | const ULTRAWORK_PATTERN = /\b(ultrawork|ulw)\b/i function detectUltrawork (line 13) | function detectUltrawork(text: string): boolean { function extractPromptText (line 18) | function extractPromptText(parts: Array<{ type: string; text?: string }>... type ToastFn (line 22) | type ToastFn = { function showToast (line 26) | function showToast(tui: unknown, title: string, message: string): void { type UltraworkOverrideResult (line 34) | type UltraworkOverrideResult = { type ModelDescriptor (line 40) | type ModelDescriptor = { function isSameModel (line 45) | function isSameModel(current: unknown, target: ModelDescriptor): boolean { function getMessageModel (line 51) | function getMessageModel(current: unknown): ModelDescriptor | undefined { function resolveUltraworkOverride (line 60) | function resolveUltraworkOverride( function applyResolvedUltraworkOverride (line 97) | function applyResolvedUltraworkOverride(args: { function applyUltraworkModelOverrideOnMessage (line 148) | function applyUltraworkModelOverrideOnMessage( FILE: src/plugin/ultrawork-variant-availability.test.ts function createClient (line 7) | function createClient(models: Record>) { function createClient (line 71) | function createClient(models: Record>) { FILE: src/plugin/ultrawork-variant-availability.ts type ModelDescriptor (line 3) | type ModelDescriptor = { type ProviderListClient (line 8) | type ProviderListClient = { type ProviderModelMetadata (line 14) | type ProviderModelMetadata = { type ProviderListEntry (line 18) | type ProviderListEntry = { type ProviderListData (line 23) | type ProviderListData = { function resolveValidUltraworkVariant (line 27) | async function resolveValidUltraworkVariant( FILE: src/plugin/unstable-agent-babysitter.ts function createUnstableAgentBabysitter (line 7) | function createUnstableAgentBabysitter(args: { FILE: src/shared/agent-display-names.ts constant AGENT_DISPLAY_NAMES (line 6) | const AGENT_DISPLAY_NAMES: Record = { function getAgentDisplayName (line 25) | function getAgentDisplayName(configKey: string): string { constant REVERSE_DISPLAY_NAMES (line 40) | const REVERSE_DISPLAY_NAMES: Record = Object.fromEntries( function getAgentConfigKey (line 48) | function getAgentConfigKey(agentName: string): string { FILE: src/shared/agent-tool-restrictions.ts constant EXPLORATION_AGENT_DENYLIST (line 7) | const EXPLORATION_AGENT_DENYLIST: Record = { constant AGENT_RESTRICTIONS (line 14) | const AGENT_RESTRICTIONS: Record> = { function getAgentToolRestrictions (line 47) | function getAgentToolRestrictions(agentName: string): Record { FILE: src/shared/command-executor/execute-hook-command.ts type CommandResult (line 5) | interface CommandResult { constant DEFAULT_HOOK_TIMEOUT_MS (line 11) | const DEFAULT_HOOK_TIMEOUT_MS = 30_000; constant SIGKILL_GRACE_MS (line 12) | const SIGKILL_GRACE_MS = 5_000; type ExecuteHookOptions (line 14) | interface ExecuteHookOptions { function executeHookCommand (line 21) | async function executeHookCommand( FILE: src/shared/command-executor/home-directory.ts function getHomeDirectory (line 3) | function getHomeDirectory(): string { FILE: src/shared/command-executor/resolve-commands-in-text.ts function resolveCommandsInText (line 4) | async function resolveCommandsInText( FILE: src/shared/command-executor/shell-path.ts constant DEFAULT_ZSH_PATHS (line 3) | const DEFAULT_ZSH_PATHS = ["/bin/zsh", "/usr/bin/zsh", "/usr/local/bin/z... constant DEFAULT_BASH_PATHS (line 4) | const DEFAULT_BASH_PATHS = ["/bin/bash", "/usr/bin/bash", "/usr/local/bi... function findShellPath (line 6) | function findShellPath( function findZshPath (line 21) | function findZshPath(customZshPath?: string): string | null { function findBashPath (line 25) | function findBashPath(): string | null { FILE: src/shared/compaction-agent-config-checkpoint.ts type CompactionAgentConfigCheckpoint (line 1) | type CompactionAgentConfigCheckpoint = { function cloneCheckpoint (line 9) | function cloneCheckpoint( function setCompactionAgentConfigCheckpoint (line 26) | function setCompactionAgentConfigCheckpoint( function getCompactionAgentConfigCheckpoint (line 33) | function getCompactionAgentConfigCheckpoint( function clearCompactionAgentConfigCheckpoint (line 40) | function clearCompactionAgentConfigCheckpoint(sessionID: string): void { FILE: src/shared/config-errors.ts type ConfigLoadError (line 1) | type ConfigLoadError = { function getConfigLoadErrors (line 8) | function getConfigLoadErrors(): ConfigLoadError[] { function clearConfigLoadErrors (line 12) | function clearConfigLoadErrors(): void { function addConfigLoadError (line 16) | function addConfigLoadError(error: ConfigLoadError): void { FILE: src/shared/connected-providers-cache.ts constant CONNECTED_PROVIDERS_CACHE_FILE (line 6) | const CONNECTED_PROVIDERS_CACHE_FILE = "connected-providers.json" constant PROVIDER_MODELS_CACHE_FILE (line 7) | const PROVIDER_MODELS_CACHE_FILE = "provider-models.json" type ConnectedProvidersCache (line 9) | interface ConnectedProvidersCache { type ModelMetadata (line 14) | interface ModelMetadata { type ProviderModelsCache (line 22) | interface ProviderModelsCache { function createConnectedProvidersCacheStore (line 28) | function createConnectedProvidersCacheStore( FILE: src/shared/context-limit-resolver.test.ts constant ANTHROPIC_CONTEXT_ENV_KEY (line 6) | const ANTHROPIC_CONTEXT_ENV_KEY = "ANTHROPIC_1M_CONTEXT" constant VERTEX_CONTEXT_ENV_KEY (line 7) | const VERTEX_CONTEXT_ENV_KEY = "VERTEX_ANTHROPIC_1M_CONTEXT" function resetContextLimitEnv (line 12) | function resetContextLimitEnv(): void { FILE: src/shared/context-limit-resolver.ts constant DEFAULT_ANTHROPIC_ACTUAL_LIMIT (line 3) | const DEFAULT_ANTHROPIC_ACTUAL_LIMIT = 200_000 type ContextLimitModelCacheState (line 5) | type ContextLimitModelCacheState = { function isAnthropicProvider (line 10) | function isAnthropicProvider(providerID: string): boolean { function getAnthropicActualLimit (line 15) | function getAnthropicActualLimit(modelCacheState?: ContextLimitModelCach... function resolveActualContextLimit (line 23) | function resolveActualContextLimit( FILE: src/shared/data-path.ts function getDataDir (line 12) | function getDataDir(): string { function getOpenCodeStorageDir (line 20) | function getOpenCodeStorageDir(): string { function getCacheDir (line 29) | function getCacheDir(): string { function getOmoOpenCodeCacheDir (line 37) | function getOmoOpenCodeCacheDir(): string { function getOpenCodeCacheDir (line 45) | function getOpenCodeCacheDir(): string { FILE: src/shared/deep-merge.test.ts type AnyObject (line 4) | type AnyObject = Record FILE: src/shared/deep-merge.ts constant DANGEROUS_KEYS (line 1) | const DANGEROUS_KEYS = new Set(["__proto__", "constructor", "prototype"]); constant MAX_DEPTH (line 2) | const MAX_DEPTH = 50; function isPlainObject (line 4) | function isPlainObject(value: unknown): value is Record { function deepMerge (line 25) | function deepMerge>( FILE: src/shared/disabled-tools.ts function filterDisabledTools (line 3) | function filterDisabledTools( FILE: src/shared/dynamic-truncator.test.ts constant ANTHROPIC_CONTEXT_ENV_KEY (line 7) | const ANTHROPIC_CONTEXT_ENV_KEY = "ANTHROPIC_1M_CONTEXT" constant VERTEX_CONTEXT_ENV_KEY (line 8) | const VERTEX_CONTEXT_ENV_KEY = "VERTEX_ANTHROPIC_1M_CONTEXT" function resetContextLimitEnv (line 13) | function resetContextLimitEnv(): void { function createContextUsageMockContext (line 27) | function createContextUsageMockContext( FILE: src/shared/dynamic-truncator.ts constant CHARS_PER_TOKEN_ESTIMATE (line 8) | const CHARS_PER_TOKEN_ESTIMATE = 4; constant DEFAULT_TARGET_MAX_TOKENS (line 9) | const DEFAULT_TARGET_MAX_TOKENS = 50_000; type AssistantMessageInfo (line 11) | interface AssistantMessageInfo { type MessageWrapper (line 23) | interface MessageWrapper { type TruncationResult (line 27) | interface TruncationResult { type TruncationOptions (line 33) | interface TruncationOptions { function estimateTokens (line 39) | function estimateTokens(text: string): number { function truncateToTokenLimit (line 43) | function truncateToTokenLimit( function getContextWindowUsage (line 111) | async function getContextWindowUsage( function dynamicTruncate (line 164) | async function dynamicTruncate( function createDynamicTruncator (line 202) | function createDynamicTruncator( FILE: src/shared/external-plugin-detector.ts type OpencodeConfig (line 12) | interface OpencodeConfig { constant KNOWN_NOTIFICATION_PLUGINS (line 21) | const KNOWN_NOTIFICATION_PLUGINS = [ function getWindowsAppdataDir (line 27) | function getWindowsAppdataDir(): string | null { function getConfigPaths (line 31) | function getConfigPaths(directory: string): string[] { function loadOpencodePlugins (line 51) | function loadOpencodePlugins(directory: string): string[] { function matchesNotificationPlugin (line 71) | function matchesNotificationPlugin(entry: string): string | null { type ExternalNotifierResult (line 91) | interface ExternalNotifierResult { function detectExternalNotificationPlugin (line 101) | function detectExternalNotificationPlugin(directory: string): ExternalNo... function getNotificationConflictWarning (line 126) | function getNotificationConflictWarning(pluginName: string): string { FILE: src/shared/fallback-chain-from-models.ts constant KNOWN_VARIANTS (line 4) | const KNOWN_VARIANTS = new Set([ function parseVariantFromModel (line 15) | function parseVariantFromModel(rawModel: string): { modelID: string; var... function parseFallbackModelEntry (line 40) | function parseFallbackModelEntry( function buildFallbackChainFromModels (line 64) | function buildFallbackChainFromModels( FILE: src/shared/fallback-model-availability.ts type FallbackEntry (line 5) | type FallbackEntry = { providers: string[]; model: string } type ResolvedFallbackModel (line 7) | type ResolvedFallbackModel = { function resolveFirstAvailableFallback (line 12) | function resolveFirstAvailableFallback( function isAnyFallbackModelAvailable (line 47) | function isAnyFallbackModelAvailable( function isAnyProviderConnected (line 72) | function isAnyProviderConnected( FILE: src/shared/file-reference-resolver.ts type FileMatch (line 4) | interface FileMatch { constant FILE_REFERENCE_PATTERN (line 11) | const FILE_REFERENCE_PATTERN = /@([^\s@]+)/g function findFileReferences (line 13) | function findFileReferences(text: string): FileMatch[] { function resolveFilePath (line 31) | function resolveFilePath(filePath: string, cwd: string): string { function readFileContent (line 38) | function readFileContent(resolvedPath: string): string { function resolveFileReferencesInText (line 52) | async function resolveFileReferencesInText( FILE: src/shared/file-utils.ts function normalizeDarwinRealpath (line 4) | function normalizeDarwinRealpath(filePath: string): string { function isMarkdownFile (line 8) | function isMarkdownFile(entry: { name: string; isFile: () => boolean }):... function isSymbolicLink (line 12) | function isSymbolicLink(filePath: string): boolean { function resolveSymlink (line 20) | function resolveSymlink(filePath: string): string { function resolveSymlinkAsync (line 28) | async function resolveSymlinkAsync(filePath: string): Promise { FILE: src/shared/first-message-variant.ts type SessionInfo (line 1) | type SessionInfo = { function createFirstMessageVariantGate (line 6) | function createFirstMessageVariantGate() { FILE: src/shared/frontmatter.test.ts type TestMeta (line 56) | interface TestMeta { type TestMeta (line 86) | interface TestMeta { type MinimalMeta (line 214) | interface MinimalMeta { type HandoffMeta (line 247) | interface HandoffMeta { FILE: src/shared/frontmatter.ts type FrontmatterResult (line 3) | interface FrontmatterResult> { function parseFrontmatter (line 10) | function parseFrontmatter>( FILE: src/shared/git-worktree/collect-git-diff-stats.ts function collectGitDiffStats (line 8) | function collectGitDiffStats(directory: string): GitFileStat[] { FILE: src/shared/git-worktree/format-file-changes.ts function formatFileChanges (line 3) | function formatFileChanges(stats: GitFileStat[], notepadPath?: string): ... FILE: src/shared/git-worktree/parse-diff-numstat.ts function parseGitDiffNumstat (line 3) | function parseGitDiffNumstat( FILE: src/shared/git-worktree/parse-status-porcelain-line.ts type ParsedGitStatusPorcelainLine (line 3) | interface ParsedGitStatusPorcelainLine { function toGitFileStatus (line 8) | function toGitFileStatus(statusToken: string): GitFileStatus { function parseGitStatusPorcelainLine (line 14) | function parseGitStatusPorcelainLine( FILE: src/shared/git-worktree/parse-status-porcelain.ts function parseGitStatusPorcelain (line 4) | function parseGitStatusPorcelain(output: string): Map { function parseJsonc (line 9) | function parseJsonc(content: string): T { function parseJsoncSafe (line 26) | function parseJsoncSafe(content: string): JsoncParseResult<... function readJsoncFile (line 43) | function readJsoncFile(filePath: string): T | null { function detectConfigFile (line 52) | function detectConfigFile(basePath: string): { FILE: src/shared/logger.ts constant FLUSH_INTERVAL_MS (line 9) | const FLUSH_INTERVAL_MS = 500 constant BUFFER_SIZE_LIMIT (line 10) | const BUFFER_SIZE_LIMIT = 50 function flush (line 12) | function flush(): void { function scheduleFlush (line 22) | function scheduleFlush(): void { function log (line 30) | function log(message: string, data?: unknown): void { function getLogFilePath (line 44) | function getLogFilePath(): string { FILE: src/shared/merge-categories.ts function mergeCategories (line 8) | function mergeCategories( FILE: src/shared/migration/agent-category.ts constant MODEL_TO_CATEGORY_MAP (line 14) | const MODEL_TO_CATEGORY_MAP: Record = { function migrateAgentConfigToCategory (line 23) | function migrateAgentConfigToCategory(config: Record): { function shouldDeleteAgentConfig (line 43) | function shouldDeleteAgentConfig( FILE: src/shared/migration/agent-names.ts constant AGENT_NAME_MAP (line 1) | const AGENT_NAME_MAP: Record = { constant BUILTIN_AGENT_NAMES (line 42) | const BUILTIN_AGENT_NAMES = new Set([ function migrateAgentNames (line 55) | function migrateAgentNames( FILE: src/shared/migration/config-migration.ts function migrateConfigFile (line 7) | function migrateConfigFile( FILE: src/shared/migration/hook-names.ts constant HOOK_NAME_MAP (line 3) | const HOOK_NAME_MAP: Record = { function migrateHookNames (line 16) | function migrateHookNames( FILE: src/shared/migration/model-versions.ts constant MODEL_VERSION_MAP (line 8) | const MODEL_VERSION_MAP: Record = { function migrationKey (line 13) | function migrationKey(oldModel: string, newModel: string): string { function migrateModelVersions (line 17) | function migrateModelVersions( FILE: src/shared/model-availability.test.ts function writeModelsCache (line 59) | function writeModelsCache(data: Record) { function writeModelsCache (line 511) | function writeModelsCache(data: Record) { function writeProviderModelsCache (line 687) | function writeProviderModelsCache(data: { models: Record) { function writeConnectedProvidersCache (line 916) | function writeConnectedProvidersCache(connected: string[]): void { FILE: src/shared/model-availability.ts function normalizeModelName (line 28) | function normalizeModelName(name: string): string { function fuzzyMatchModel (line 34) | function fuzzyMatchModel( function isModelAvailable (line 113) | function isModelAvailable( function getConnectedProviders (line 120) | async function getConnectedProviders(client: any): Promise { function fetchAvailableModels (line 137) | async function fetchAvailableModels( function __resetModelCache (line 286) | function __resetModelCache(): void {} function isModelCacheAvailable (line 288) | function isModelCacheAvailable(): boolean { FILE: src/shared/model-error-classifier.ts constant RETRYABLE_ERROR_NAMES (line 8) | const RETRYABLE_ERROR_NAMES = new Set([ constant NON_RETRYABLE_ERROR_NAMES (line 23) | const NON_RETRYABLE_ERROR_NAMES = new Set([ constant RETRYABLE_MESSAGE_PATTERNS (line 36) | const RETRYABLE_MESSAGE_PATTERNS = [ constant AUTO_RETRY_GATE_PATTERNS (line 72) | const AUTO_RETRY_GATE_PATTERNS = [ function hasProviderAutoRetrySignal (line 82) | function hasProviderAutoRetrySignal(message: string): boolean { type ErrorInfo (line 89) | interface ErrorInfo { function isRetryableModelError (line 98) | function isRetryableModelError(error: ErrorInfo): boolean { function shouldRetryError (line 124) | function shouldRetryError(error: ErrorInfo): boolean { function getNextFallback (line 132) | function getNextFallback( function hasMoreFallbacks (line 142) | function hasMoreFallbacks( function selectFallbackProvider (line 156) | function selectFallbackProvider( FILE: src/shared/model-format-normalizer.ts function normalizeModelFormat (line 1) | function normalizeModelFormat( FILE: src/shared/model-normalization.ts function normalizeModel (line 1) | function normalizeModel(model?: string): string | undefined { function normalizeModelID (line 6) | function normalizeModelID(modelID: string): string { FILE: src/shared/model-requirements.ts type FallbackEntry (line 1) | type FallbackEntry = { type ModelRequirement (line 7) | type ModelRequirement = { constant AGENT_MODEL_REQUIREMENTS (line 15) | const AGENT_MODEL_REQUIREMENTS: Record = { constant CATEGORY_MODEL_REQUIREMENTS (line 178) | const CATEGORY_MODEL_REQUIREMENTS: Record = { FILE: src/shared/model-resolution-pipeline.ts type ModelResolutionRequest (line 8) | type ModelResolutionRequest = { type ModelResolutionProvenance (line 25) | type ModelResolutionProvenance = type ModelResolutionResult (line 31) | type ModelResolutionResult = { function resolveModelPipeline (line 40) | function resolveModelPipeline( FILE: src/shared/model-resolution-types.ts type ModelResolutionRequest (line 3) | type ModelResolutionRequest = { type ModelResolutionProvenance (line 18) | type ModelResolutionProvenance = type ModelResolutionResult (line 24) | type ModelResolutionResult = { FILE: src/shared/model-resolver.ts type ModelResolutionInput (line 5) | type ModelResolutionInput = { type ModelSource (line 11) | type ModelSource = type ModelResolutionResult (line 17) | type ModelResolutionResult = { type ExtendedModelResolutionInput (line 23) | type ExtendedModelResolutionInput = { function resolveModel (line 34) | function resolveModel(input: ModelResolutionInput): string | undefined { function resolveModelWithFallback (line 42) | function resolveModelWithFallback( function normalizeFallbackModels (line 67) | function normalizeFallbackModels(models: string | string[] | undefined):... FILE: src/shared/model-sanitizer.ts type CommandSource (line 1) | type CommandSource = "claude-code" | "opencode" function sanitizeModelField (line 3) | function sanitizeModelField(model: unknown, source: CommandSource = "cla... FILE: src/shared/model-suggestion-retry.ts type Client (line 9) | type Client = ReturnType type ModelSuggestionInfo (line 11) | interface ModelSuggestionInfo { function extractMessage (line 17) | function extractMessage(error: unknown): string { function parseModelSuggestion (line 32) | function parseModelSuggestion(error: unknown): ModelSuggestionInfo | null { type PromptBody (line 77) | interface PromptBody { type PromptArgs (line 82) | interface PromptArgs { function promptWithModelSuggestionRetry (line 89) | async function promptWithModelSuggestionRetry( function promptSyncWithModelSuggestionRetry (line 127) | async function promptSyncWithModelSuggestionRetry( FILE: src/shared/normalize-sdk-response.ts type NormalizeSDKResponseOptions (line 1) | interface NormalizeSDKResponseOptions { function normalizeSDKResponse (line 5) | function normalizeSDKResponse( FILE: src/shared/opencode-command-dirs.ts function getParentOpencodeConfigDir (line 5) | function getParentOpencodeConfigDir(configDir: string): string | null { function getOpenCodeCommandDirs (line 14) | function getOpenCodeCommandDirs(options: OpenCodeConfigDirOptions): stri... function getOpenCodeSkillDirs (line 26) | function getOpenCodeSkillDirs(options: OpenCodeConfigDirOptions): string... FILE: src/shared/opencode-config-dir-types.ts type OpenCodeBinaryType (line 1) | type OpenCodeBinaryType = "opencode" | "opencode-desktop" type OpenCodeConfigDirOptions (line 3) | type OpenCodeConfigDirOptions = { type OpenCodeConfigPaths (line 9) | type OpenCodeConfigPaths = { FILE: src/shared/opencode-config-dir.ts constant TAURI_APP_IDENTIFIER (line 17) | const TAURI_APP_IDENTIFIER = "ai.opencode.desktop" constant TAURI_APP_IDENTIFIER_DEV (line 18) | const TAURI_APP_IDENTIFIER_DEV = "ai.opencode.desktop.dev" function isDevBuild (line 20) | function isDevBuild(version: string | null | undefined): boolean { function getTauriConfigDir (line 25) | function getTauriConfigDir(identifier: string): string { function getCliConfigDir (line 45) | function getCliConfigDir(): string { function getOpenCodeConfigDir (line 55) | function getOpenCodeConfigDir(options: OpenCodeConfigDirOptions): string { function getOpenCodeConfigPaths (line 78) | function getOpenCodeConfigPaths(options: OpenCodeConfigDirOptions): Open... function detectExistingConfigDir (line 90) | function detectExistingConfigDir(binary: OpenCodeBinaryType, version?: s... FILE: src/shared/opencode-http-api.ts type UnknownRecord (line 5) | type UnknownRecord = Record function getInternalClient (line 7) | function getInternalClient(client: unknown): UnknownRecord | null { function getServerBaseUrl (line 16) | function getServerBaseUrl(client: unknown): string | null { function patchPart (line 55) | async function patchPart( function deletePart (line 100) | async function deletePart( FILE: src/shared/opencode-message-dir.test.ts constant TEST_STORAGE (line 7) | const TEST_STORAGE = join(tmpdir(), `omo-msgdir-test-${randomUUID()}`) constant TEST_MESSAGE_STORAGE (line 8) | const TEST_MESSAGE_STORAGE = join(TEST_STORAGE, "message") FILE: src/shared/opencode-message-dir.ts function getMessageDir (line 7) | function getMessageDir(sessionID: string): string | null { FILE: src/shared/opencode-server-auth.test.ts type InternalConfig (line 87) | type InternalConfig = { type InternalConfig (line 217) | type InternalConfig = { fetch?: (request: Request) => Promise } FILE: src/shared/opencode-server-auth.ts function getServerBasicAuthHeader (line 8) | function getServerBasicAuthHeader(): string | undefined { type UnknownRecord (line 20) | type UnknownRecord = Record function isRecord (line 22) | function isRecord(value: unknown): value is UnknownRecord { function isRequestFetch (line 26) | function isRequestFetch(value: unknown): value is (request: Request) => ... function wrapRequestFetch (line 30) | function wrapRequestFetch( function getInternalClient (line 41) | function getInternalClient(client: unknown): UnknownRecord | null { function tryInjectViaSetConfigHeaders (line 50) | function tryInjectViaSetConfigHeaders(internal: UnknownRecord, auth: str... function tryInjectViaInterceptors (line 65) | function tryInjectViaInterceptors(internal: UnknownRecord, auth: string)... function tryInjectViaFetchWrapper (line 91) | function tryInjectViaFetchWrapper(internal: UnknownRecord, auth: string)... function tryInjectViaMutableInternalConfig (line 115) | function tryInjectViaMutableInternalConfig(internal: UnknownRecord, auth... function tryInjectViaTopLevelFetch (line 131) | function tryInjectViaTopLevelFetch(client: unknown, auth: string): boole... function injectServerAuthIntoClient (line 158) | function injectServerAuthIntoClient(client: unknown): void { FILE: src/shared/opencode-storage-detection.test.ts constant TEST_DATA_DIR (line 7) | const TEST_DATA_DIR = join(tmpdir(), `omo-sqlite-detect-${randomUUID()}`) constant DB_PATH (line 8) | const DB_PATH = join(TEST_DATA_DIR, "opencode", "opencode.db") constant SQLITE_VERSION (line 12) | const SQLITE_VERSION = "1.1.53" constant NOT_CACHED (line 17) | const NOT_CACHED = Symbol("NOT_CACHED") constant FALSE_PENDING_RETRY (line 18) | const FALSE_PENDING_RETRY = Symbol("FALSE_PENDING_RETRY") function isSqliteBackend (line 21) | function isSqliteBackend(): boolean { function resetSqliteBackendCache (line 41) | function resetSqliteBackendCache(): void { FILE: src/shared/opencode-storage-detection.ts constant NOT_CACHED (line 6) | const NOT_CACHED = Symbol("NOT_CACHED") constant FALSE_PENDING_RETRY (line 7) | const FALSE_PENDING_RETRY = Symbol("FALSE_PENDING_RETRY") function isSqliteBackend (line 10) | function isSqliteBackend(): boolean { function resetSqliteBackendCache (line 32) | function resetSqliteBackendCache(): void { FILE: src/shared/opencode-storage-paths.ts constant OPENCODE_STORAGE (line 4) | const OPENCODE_STORAGE = getOpenCodeStorageDir() constant MESSAGE_STORAGE (line 5) | const MESSAGE_STORAGE = join(OPENCODE_STORAGE, "message") constant PART_STORAGE (line 6) | const PART_STORAGE = join(OPENCODE_STORAGE, "part") constant SESSION_STORAGE (line 7) | const SESSION_STORAGE = join(OPENCODE_STORAGE, "session") FILE: src/shared/opencode-version.ts constant MINIMUM_OPENCODE_VERSION (line 7) | const MINIMUM_OPENCODE_VERSION = "1.1.1" constant OPENCODE_NATIVE_AGENTS_INJECTION_VERSION (line 16) | const OPENCODE_NATIVE_AGENTS_INJECTION_VERSION = "1.1.37" constant OPENCODE_SQLITE_VERSION (line 22) | const OPENCODE_SQLITE_VERSION = "1.1.53" constant NOT_CACHED (line 24) | const NOT_CACHED = Symbol("NOT_CACHED") function parseVersion (line 27) | function parseVersion(version: string): number[] { function compareVersions (line 32) | function compareVersions(a: string, b: string): -1 | 0 | 1 { function getOpenCodeVersion (line 47) | function getOpenCodeVersion(): string | null { function isOpenCodeVersionAtLeast (line 68) | function isOpenCodeVersionAtLeast(version: string): boolean { function resetVersionCache (line 74) | function resetVersionCache(): void { function setVersionCache (line 78) | function setVersionCache(version: string | null): void { FILE: src/shared/pattern-matcher.ts function escapeRegexExceptAsterisk (line 7) | function escapeRegexExceptAsterisk(str: string): string { function matchesToolMatcher (line 14) | function matchesToolMatcher(toolName: string, matcher: string): boolean { function findMatchingHooks (line 34) | function findMatchingHooks( FILE: src/shared/permission-compat.ts type PermissionValue (line 6) | type PermissionValue = "ask" | "allow" | "deny" type PermissionFormat (line 8) | interface PermissionFormat { function createAgentToolRestrictions (line 15) | function createAgentToolRestrictions( function createAgentToolAllowlist (line 29) | function createAgentToolAllowlist( function migrateToolsToPermission (line 46) | function migrateToolsToPermission( function migrateAgentConfig (line 61) | function migrateAgentConfig( FILE: src/shared/plugin-command-discovery.test.ts constant ENV_KEYS (line 7) | const ENV_KEYS = [ type EnvKey (line 14) | type EnvKey = (typeof ENV_KEYS)[number] type EnvSnapshot (line 15) | type EnvSnapshot = Record function writePluginFixture (line 17) | function writePluginFixture(baseDir: string): void { FILE: src/shared/plugin-command-discovery.ts type PluginCommandDiscoveryOptions (line 8) | interface PluginCommandDiscoveryOptions { function discoverPluginCommandDefinitions (line 13) | function discoverPluginCommandDefinitions( FILE: src/shared/plugin-identity.ts constant PLUGIN_NAME (line 1) | const PLUGIN_NAME = "oh-my-opencode" constant LEGACY_PLUGIN_NAME (line 2) | const LEGACY_PLUGIN_NAME = "oh-my-openagent" constant CONFIG_BASENAME (line 3) | const CONFIG_BASENAME = "oh-my-opencode" constant LOG_FILENAME (line 4) | const LOG_FILENAME = "oh-my-opencode.log" constant CACHE_DIR_NAME (line 5) | const CACHE_DIR_NAME = "oh-my-opencode" FILE: src/shared/port-utils.test.ts constant HOSTNAME (line 9) | const HOSTNAME = "127.0.0.1" constant REAL_PORT_SEARCH_WINDOW (line 10) | const REAL_PORT_SEARCH_WINDOW = 200 function supportsRealSocketBinding (line 12) | function supportsRealSocketBinding(): boolean { function startRealBlocker (line 30) | function startRealBlocker(port: number = 0) { function findContiguousAvailableStart (line 38) | async function findContiguousAvailableStart(length: number): Promise { FILE: src/shared/retry-status-utils.ts function normalizeRetryStatusMessage (line 1) | function normalizeRetryStatusMessage(message: string): string { function extractRetryAttempt (line 10) | function extractRetryAttempt(statusAttempt: unknown, message: string): s... FILE: src/shared/safe-create-hook.ts type SafeCreateHookOptions (line 3) | interface SafeCreateHookOptions { function safeCreateHook (line 7) | function safeCreateHook( FILE: src/shared/session-cursor.ts type MessageTime (line 1) | type MessageTime = type MessageInfo (line 7) | type MessageInfo = { type CursorMessage (line 12) | type CursorMessage = { type CursorState (line 16) | interface CursorState { function buildMessageKey (line 23) | function buildMessageKey(message: CursorMessage, index: number): string { function consumeNewMessages (line 43) | function consumeNewMessages( function resetMessageCursor (line 79) | function resetMessageCursor(sessionID?: string): void { FILE: src/shared/session-directory-resolver.ts constant WINDOWS_APPDATA_SEGMENTS (line 1) | const WINDOWS_APPDATA_SEGMENTS = ["\\appdata\\local", "\\appdata\\roamin... function normalizeWindowsPath (line 3) | function normalizeWindowsPath(directory: string): string { function isWindowsAppDataDirectory (line 7) | function isWindowsAppDataDirectory(directory: string): boolean { function resolveSessionDirectory (line 14) | function resolveSessionDirectory(options: { FILE: src/shared/session-injected-paths.ts type InjectedPathsData (line 10) | interface InjectedPathsData { function createInjectedPathsStorage (line 16) | function createInjectedPathsStorage(storageDir: string) { FILE: src/shared/session-model-state.ts type SessionModel (line 1) | type SessionModel = { providerID: string; modelID: string } function setSessionModel (line 5) | function setSessionModel(sessionID: string, model: SessionModel): void { function getSessionModel (line 9) | function getSessionModel(sessionID: string): SessionModel | undefined { function clearSessionModel (line 13) | function clearSessionModel(sessionID: string): void { FILE: src/shared/session-tools-store.ts function setSessionTools (line 3) | function setSessionTools(sessionID: string, tools: Record | u... function deleteSessionTools (line 12) | function deleteSessionTools(sessionID: string): void { function clearSessionTools (line 16) | function clearSessionTools(): void { FILE: src/shared/session-utils.ts function isCallerOrchestrator (line 8) | async function isCallerOrchestrator(sessionID?: string, client?: PluginI... FILE: src/shared/shell-env.ts type ShellType (line 1) | type ShellType = "unix" | "powershell" | "cmd" function detectShellType (line 11) | function detectShellType(): ShellType { function shellEscape (line 30) | function shellEscape(value: string, shellType: ShellType): string { function buildEnvPrefix (line 76) | function buildEnvPrefix( function shellEscapeForDoubleQuotedCommand (line 139) | function shellEscapeForDoubleQuotedCommand(value: string): string { FILE: src/shared/skill-path-resolver.ts function resolveSkillPathReferences (line 11) | function resolveSkillPathReferences(content: string, basePath: string): ... FILE: src/shared/snake-case.ts function camelToSnake (line 3) | function camelToSnake(str: string): string { function snakeToCamel (line 7) | function snakeToCamel(str: string): string { function transformObjectKeys (line 11) | function transformObjectKeys( function objectToSnakeCase (line 32) | function objectToSnakeCase( function objectToCamelCase (line 39) | function objectToCamelCase( FILE: src/shared/spawn-with-windows-hide.ts type SpawnOptions (line 5) | interface SpawnOptions { type SpawnedProcess (line 13) | interface SpawnedProcess { function toReadableStream (line 21) | function toReadableStream(stream: NodeJS.ReadableStream | null): Readabl... function wrapNodeProcess (line 29) | function wrapNodeProcess(proc: ChildProcess): SpawnedProcess { function spawnWithWindowsHide (line 69) | function spawnWithWindowsHide(command: string[], options: SpawnOptions):... FILE: src/shared/system-directive.ts constant SYSTEM_DIRECTIVE_PREFIX (line 8) | const SYSTEM_DIRECTIVE_PREFIX = "[SYSTEM DIRECTIVE: OH-MY-OPENCODE" function createSystemDirective (line 15) | function createSystemDirective(type: string): string { function isSystemDirective (line 25) | function isSystemDirective(text: string): boolean { function hasSystemReminder (line 35) | function hasSystemReminder(text: string): boolean { function removeSystemReminders (line 45) | function removeSystemReminders(text: string): string { type SystemDirectiveType (line 60) | type SystemDirectiveType = (typeof SystemDirectiveTypes)[keyof typeof Sy... FILE: src/shared/tmux/constants.ts constant POLL_INTERVAL_BACKGROUND_MS (line 2) | const POLL_INTERVAL_BACKGROUND_MS = 2000 constant SESSION_TIMEOUT_MS (line 5) | const SESSION_TIMEOUT_MS = 10 * 60 * 1000 // 10 minutes constant SESSION_MISSING_GRACE_MS (line 8) | const SESSION_MISSING_GRACE_MS = 6000 // 6 seconds constant SESSION_READY_POLL_INTERVAL_MS (line 11) | const SESSION_READY_POLL_INTERVAL_MS = 500 constant SESSION_READY_TIMEOUT_MS (line 12) | const SESSION_READY_TIMEOUT_MS = 10_000 // 10 seconds max wait FILE: src/shared/tmux/tmux-utils/environment.ts type SplitDirection (line 1) | type SplitDirection = "-h" | "-v" function isInsideTmuxEnvironment (line 3) | function isInsideTmuxEnvironment(environment: Record { function closeTmuxPane (line 9) | async function closeTmuxPane(paneId: string): Promise { FILE: src/shared/tmux/tmux-utils/pane-dimensions.ts type PaneDimensions (line 4) | interface PaneDimensions { function getPaneDimensions (line 9) | async function getPaneDimensions( FILE: src/shared/tmux/tmux-utils/pane-replace.ts function replaceTmuxPane (line 8) | async function replaceTmuxPane( FILE: src/shared/tmux/tmux-utils/pane-spawn.ts function spawnTmuxPane (line 10) | async function spawnTmuxPane( FILE: src/shared/tmux/tmux-utils/server-health.ts function delay (line 4) | function delay(milliseconds: number): Promise { function isServerRunning (line 8) | async function isServerRunning(serverUrl: string): Promise { function resetServerCheck (line 44) | function resetServerCheck(): void { FILE: src/shared/tmux/types.ts type SpawnPaneResult (line 1) | interface SpawnPaneResult { FILE: src/shared/tool-name.ts constant SPECIAL_TOOL_MAPPINGS (line 1) | const SPECIAL_TOOL_MAPPINGS: Record = { function toPascalCase (line 8) | function toPascalCase(str: string): string { function transformToolName (line 15) | function transformToolName(toolName: string): string { FILE: src/shared/truncate-description.ts function truncateDescription (line 1) | function truncateDescription(description: string, maxLength: number = 12... FILE: src/shared/vision-capable-models-cache.ts function setVisionCapableModelsCache (line 5) | function setVisionCapableModelsCache( function readVisionCapableModelsCache (line 11) | function readVisionCapableModelsCache(): VisionCapableModel[] { function clearVisionCapableModelsCache (line 15) | function clearVisionCapableModelsCache(): void { FILE: src/shared/zip-extractor.ts constant WINDOWS_BUILD_WITH_TAR (line 4) | const WINDOWS_BUILD_WITH_TAR = 17134 function getWindowsBuildNumber (line 6) | function getWindowsBuildNumber(): number | null { function isPwshAvailable (line 17) | function isPwshAvailable(): boolean { function escapePowerShellPath (line 23) | function escapePowerShellPath(path: string): string { type WindowsZipExtractor (line 27) | type WindowsZipExtractor = "tar" | "pwsh" | "powershell" function getWindowsZipExtractor (line 29) | function getWindowsZipExtractor(): WindowsZipExtractor { function extractZip (line 43) | async function extractZip(archivePath: string, destDir: string): Promise... FILE: src/tools/ast-grep/cli-binary-path-resolution.ts function getAstGrepPath (line 9) | async function getAstGrepPath(): Promise { function startBackgroundInit (line 39) | function startBackgroundInit(): void { function isCliAvailable (line 46) | function isCliAvailable(): boolean { function ensureCliAvailable (line 51) | async function ensureCliAvailable(): Promise { function getResolvedSgCliPath (line 56) | function getResolvedSgCliPath(): string | null { FILE: src/tools/ast-grep/cli.ts type RunOptions (line 21) | interface RunOptions { function runSg (line 31) | async function runSg(options: RunOptions): Promise { FILE: src/tools/ast-grep/downloader.ts constant REPO (line 15) | const REPO = "ast-grep/ast-grep" constant DEFAULT_VERSION (line 19) | const DEFAULT_VERSION = "0.41.1" function getAstGrepVersion (line 21) | function getAstGrepVersion(): string { type PlatformInfo (line 31) | interface PlatformInfo { constant PLATFORM_MAP (line 36) | const PLATFORM_MAP: Record = { function getCacheDir (line 46) | function getCacheDir(): string { function getBinaryName (line 58) | function getBinaryName(): string { function getCachedBinaryPath (line 62) | function getCachedBinaryPath(): string | null { function downloadAstGrep (line 68) | async function downloadAstGrep(version: string = DEFAULT_VERSION): Promi... function ensureAstGrepBinary (line 110) | async function ensureAstGrepBinary(): Promise { FILE: src/tools/ast-grep/environment-check.ts type EnvironmentCheckResult (line 6) | interface EnvironmentCheckResult { function checkEnvironment (line 22) | function checkEnvironment(): EnvironmentCheckResult { function formatEnvironmentCheck (line 59) | function formatEnvironmentCheck(result: EnvironmentCheckResult): string { FILE: src/tools/ast-grep/language-support.ts constant CLI_LANGUAGES (line 2) | const CLI_LANGUAGES = [ constant NAPI_LANGUAGES (line 31) | const NAPI_LANGUAGES = ["html", "javascript", "tsx", "css", "typescript"... constant DEFAULT_TIMEOUT_MS (line 33) | const DEFAULT_TIMEOUT_MS = 300_000 constant DEFAULT_MAX_OUTPUT_BYTES (line 34) | const DEFAULT_MAX_OUTPUT_BYTES = 1 * 1024 * 1024 constant DEFAULT_MAX_MATCHES (line 35) | const DEFAULT_MAX_MATCHES = 500 constant LANG_EXTENSIONS (line 37) | const LANG_EXTENSIONS: Record = { FILE: src/tools/ast-grep/process-output-timeout.ts type SpawnedProcess (line 1) | type SpawnedProcess = { function collectProcessOutputWithTimeout (line 8) | async function collectProcessOutputWithTimeout( FILE: src/tools/ast-grep/result-formatter.ts function formatSearchResult (line 3) | function formatSearchResult(result: SgResult): string { function formatReplaceResult (line 35) | function formatReplaceResult(result: SgResult, isDryRun: boolean): string { function formatAnalyzeResult (line 72) | function formatAnalyzeResult(results: AnalyzeResult[], extractedMetaVars... function formatTransformResult (line 96) | function formatTransformResult(_original: string, transformed: string, e... FILE: src/tools/ast-grep/sg-cli-path.ts type Platform (line 7) | type Platform = "darwin" | "linux" | "win32" | "unsupported" function isValidBinary (line 9) | function isValidBinary(filePath: string): boolean { function getPlatformPackageName (line 17) | function getPlatformPackageName(): string | null { function findSgCliPathSync (line 34) | function findSgCliPathSync(): string | null { function getSgCliPath (line 86) | function getSgCliPath(): string | null { function setSgCliPath (line 100) | function setSgCliPath(path: string): void { FILE: src/tools/ast-grep/sg-compact-json-output.ts function createSgResultFromStdout (line 4) | function createSgResultFromStdout(stdout: string): SgResult { FILE: src/tools/ast-grep/tools.ts function showOutputToUser (line 8) | async function showOutputToUser(context: unknown, output: string): Promi... function getEmptyResultHint (line 15) | function getEmptyResultHint(pattern: string, lang: CliLanguage): string ... function createAstGrepTools (line 38) | function createAstGrepTools(ctx: PluginInput): Record FILE: src/tools/background-task/constants.ts constant BACKGROUND_TASK_DESCRIPTION (line 1) | const BACKGROUND_TASK_DESCRIPTION = `Run agent task in background. Retur... constant BACKGROUND_OUTPUT_DESCRIPTION (line 5) | const BACKGROUND_OUTPUT_DESCRIPTION = `Get output from background task. ... constant BACKGROUND_CANCEL_DESCRIPTION (line 7) | const BACKGROUND_CANCEL_DESCRIPTION = `Cancel running background task(s)... FILE: src/tools/background-task/create-background-cancel.ts function createBackgroundCancel (line 7) | function createBackgroundCancel(manager: BackgroundManager, _client: Bac... FILE: src/tools/background-task/create-background-output.blocking.test.ts function createTask (line 22) | function createTask(overrides: Partial = {}): Background... function createMockClient (line 36) | function createMockClient(): BackgroundOutputClient { FILE: src/tools/background-task/create-background-output.metadata.test.ts type ToolContextWithCallID (line 12) | type ToolContextWithCallID = ToolContext & { FILE: src/tools/background-task/create-background-output.ts constant SISYPHUS_JUNIOR_AGENT (line 14) | const SISYPHUS_JUNIOR_AGENT = getAgentDisplayName("sisyphus-junior") type ToolContextWithMetadata (line 16) | type ToolContextWithMetadata = { function resolveToolCallID (line 24) | function resolveToolCallID(ctx: ToolContextWithMetadata): string | undef... function formatResolvedTitle (line 31) | function formatResolvedTitle(task: BackgroundTask): string { function isTaskActiveStatus (line 36) | function isTaskActiveStatus(status: BackgroundTask["status"]): boolean { function appendTimeoutNote (line 40) | function appendTimeoutNote(output: string, timeoutMs: number): string { function createBackgroundOutput (line 44) | function createBackgroundOutput(manager: BackgroundOutputManager, client... FILE: src/tools/background-task/create-background-task.metadata.test.ts type ToolContextWithCallID (line 12) | type ToolContextWithCallID = ToolContext & { FILE: src/tools/background-task/create-background-task.ts type ToolContextWithMetadata (line 12) | type ToolContextWithMetadata = { function createBackgroundTask (line 21) | function createBackgroundTask( FILE: src/tools/background-task/delay.ts function delay (line 1) | function delay(ms: number): Promise { FILE: src/tools/background-task/full-session-format.ts constant MAX_MESSAGE_LIMIT (line 8) | const MAX_MESSAGE_LIMIT = 100 constant THINKING_MAX_CHARS (line 9) | const THINKING_MAX_CHARS = 2000 function extractToolResultText (line 11) | function extractToolResultText(part: NonNullable = {}): Background... type BackgroundOutputMessage (line 512) | type BackgroundOutputMessage = { FILE: src/tools/background-task/truncate-text.ts function truncateText (line 1) | function truncateText(text: string, maxLength: number): string { FILE: src/tools/background-task/types.ts type BackgroundTaskArgs (line 1) | interface BackgroundTaskArgs { type BackgroundOutputArgs (line 7) | interface BackgroundOutputArgs { type BackgroundCancelArgs (line 19) | interface BackgroundCancelArgs { type BackgroundOutputMessage (line 24) | type BackgroundOutputMessage = { type BackgroundOutputMessagesResult (line 34) | type BackgroundOutputMessagesResult = type BackgroundOutputClient (line 38) | type BackgroundOutputClient = { type BackgroundCancelClient (line 44) | type BackgroundCancelClient = { type BackgroundOutputManager (line 50) | type BackgroundOutputManager = Pick[0] type ExecuteSyncToolContext (line 10) | type ExecuteSyncToolContext = Parameters[1] type ExecuteSyncDeps (line 11) | type ExecuteSyncDeps = NonNullable[3]> function createArgs (line 13) | function createArgs(): ExecuteSyncArgs { function createToolContext (line 22) | function createToolContext(): ExecuteSyncToolContext { function createContext (line 32) | function createContext(promptAsync: ReturnType) { function createDependencies (line 42) | function createDependencies(overrides?: Partial): Execu... FILE: src/tools/call-omo-agent/sync-executor.test.ts type ExecuteSync (line 3) | type ExecuteSync = typeof import("./sync-executor").executeSync type PromptAsyncInput (line 5) | type PromptAsyncInput = { type ToolContext (line 14) | type ToolContext = { type Dependencies (line 22) | type Dependencies = { function importExecuteSync (line 30) | async function importExecuteSync(): Promise { function createDependencies (line 35) | function createDependencies(overrides?: Partial): Dependen... function createPromptAsyncRecorder (line 46) | function createPromptAsyncRecorder(implementation?: (input: PromptAsyncI... function createToolContext (line 66) | function createToolContext(): ToolContext { function createContext (line 76) | function createContext(promptAsync: ReturnType) { FILE: src/tools/call-omo-agent/sync-executor.ts type SessionWithPromptAsync (line 11) | type SessionWithPromptAsync = { type ExecuteSyncDeps (line 15) | type ExecuteSyncDeps = { type SpawnReservation (line 23) | type SpawnReservation = { function executeSync (line 36) | async function executeSync( FILE: src/tools/call-omo-agent/tool-context-with-metadata.ts type ToolContextWithMetadata (line 1) | type ToolContextWithMetadata = { FILE: src/tools/call-omo-agent/tools.ts function resolveFallbackChainForCallOmoAgent (line 15) | function resolveFallbackChainForCallOmoAgent(args: { function createCallOmoAgent (line 39) | function createCallOmoAgent( FILE: src/tools/call-omo-agent/types.ts type AllowedAgentType (line 3) | type AllowedAgentType = (typeof ALLOWED_AGENTS)[number] type CallOmoAgentArgs (line 5) | interface CallOmoAgentArgs { type CallOmoAgentSyncResult (line 13) | interface CallOmoAgentSyncResult { type ToolContextWithMetadata (line 28) | type ToolContextWithMetadata = { FILE: src/tools/delegate-task/available-models.ts function addFromProviderModels (line 5) | function addFromProviderModels( function getAvailableModelsForDelegateTask (line 18) | async function getAvailableModelsForDelegateTask(client: OpencodeClient)... FILE: src/tools/delegate-task/background-continuation.ts function executeBackgroundContinuation (line 7) | async function executeBackgroundContinuation( FILE: src/tools/delegate-task/background-task.ts function executeBackgroundTask (line 12) | async function executeBackgroundTask( FILE: src/tools/delegate-task/cancel-unstable-agent-task.ts function cancelUnstableAgentTask (line 3) | async function cancelUnstableAgentTask( FILE: src/tools/delegate-task/categories.ts type ResolveCategoryConfigOptions (line 8) | interface ResolveCategoryConfigOptions { type ResolveCategoryConfigResult (line 15) | interface ResolveCategoryConfigResult { function resolveCategoryConfig (line 25) | function resolveCategoryConfig( FILE: src/tools/delegate-task/category-resolver.ts type CategoryResolutionResult (line 15) | interface CategoryResolutionResult { function resolveCategoryExecution (line 27) | async function resolveCategoryExecution( FILE: src/tools/delegate-task/constants.ts constant VISUAL_CATEGORY_PROMPT_APPEND (line 8) | const VISUAL_CATEGORY_PROMPT_APPEND = ` constant ULTRABRAIN_CATEGORY_PROMPT_APPEND (line 97) | const ULTRABRAIN_CATEGORY_PROMPT_APPEND = ` constant ARTISTRY_CATEGORY_PROMPT_APPEND (line 119) | const ARTISTRY_CATEGORY_PROMPT_APPEND = ` constant QUICK_CATEGORY_PROMPT_APPEND (line 136) | const QUICK_CATEGORY_PROMPT_APPEND = ` constant UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND (line 187) | const UNSPECIFIED_LOW_CATEGORY_PROMPT_APPEND = ` constant UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND (line 210) | const UNSPECIFIED_HIGH_CATEGORY_PROMPT_APPEND = ` constant WRITING_CATEGORY_PROMPT_APPEND (line 225) | const WRITING_CATEGORY_PROMPT_APPEND = ` constant DEEP_CATEGORY_PROMPT_APPEND (line 251) | const DEEP_CATEGORY_PROMPT_APPEND = ` constant DEFAULT_CATEGORIES (line 284) | const DEFAULT_CATEGORIES: Record = { constant CATEGORY_PROMPT_APPENDS (line 295) | const CATEGORY_PROMPT_APPENDS: Record = { constant CATEGORY_DESCRIPTIONS (line 306) | const CATEGORY_DESCRIPTIONS: Record = { constant PLAN_AGENT_SYSTEM_PREPEND_STATIC_BEFORE_SKILLS (line 323) | const PLAN_AGENT_SYSTEM_PREPEND_STATIC_BEFORE_SKILLS = ` constant PLAN_AGENT_SYSTEM_PREPEND_STATIC_AFTER_SKILLS (line 431) | const PLAN_AGENT_SYSTEM_PREPEND_STATIC_AFTER_SKILLS = `### REQUIRED OUTP... function renderPlanAgentCategoryRows (line 570) | function renderPlanAgentCategoryRows(categories: AvailableCategory[]): s... function renderPlanAgentSkillRows (line 579) | function renderPlanAgentSkillRows(skills: AvailableSkill[]): string[] { function buildPlanAgentSkillsSection (line 587) | function buildPlanAgentSkillsSection( function buildPlanAgentSystemPrepend (line 610) | function buildPlanAgentSystemPrepend( constant PLAN_AGENT_NAMES (line 625) | const PLAN_AGENT_NAMES = ["plan"] function isPlanAgent (line 630) | function isPlanAgent(agentName: string | undefined): boolean { constant PLAN_FAMILY_NAMES (line 640) | const PLAN_FAMILY_NAMES = ["plan", "prometheus"] function isPlanFamily (line 647) | function isPlanFamily(category: string | undefined): boolean { FILE: src/tools/delegate-task/error-formatting.ts type ErrorContext (line 6) | interface ErrorContext { function formatDetailedError (line 17) | function formatDetailedError(error: unknown, ctx: ErrorContext): string { FILE: src/tools/delegate-task/executor-types.ts type ExecutorContext (line 5) | interface ExecutorContext { type ParentContext (line 18) | interface ParentContext { type SessionMessage (line 25) | interface SessionMessage { FILE: src/tools/delegate-task/metadata-model-unification.test.ts constant MODEL (line 6) | const MODEL = { providerID: "anthropic", modelID: "claude-sonnet-4-6" } function makeMockCtx (line 8) | function makeMockCtx(): ToolContextWithMetadata & { captured: any[] } { FILE: src/tools/delegate-task/model-selection.ts function isExplicitHighModel (line 8) | function isExplicitHighModel(model: string): boolean { function getExplicitHighBaseModel (line 12) | function getExplicitHighBaseModel(model: string): string | null { function parseUserFallbackModel (line 16) | function parseUserFallbackModel(fallbackModel: string): { function resolveModelForDelegateTask (line 47) | function resolveModelForDelegateTask(input: { FILE: src/tools/delegate-task/model-string-parser.ts constant KNOWN_VARIANTS (line 1) | const KNOWN_VARIANTS = new Set([ function parseVariantFromModelID (line 12) | function parseVariantFromModelID(rawModelID: string): { modelID: string;... function parseModelString (line 37) | function parseModelString( FILE: src/tools/delegate-task/parent-context-resolver.ts function resolveParentContext (line 9) | async function resolveParentContext( FILE: src/tools/delegate-task/prompt-builder.ts constant FREE_OR_LOCAL_PROMPT_TOKEN_LIMIT (line 5) | const FREE_OR_LOCAL_PROMPT_TOKEN_LIMIT = 24000 constant PLAN_AGENT_PROMPT_APPEND (line 6) | const PLAN_AGENT_PROMPT_APPEND = ` function usesFreeOrLocalModel (line 15) | function usesFreeOrLocalModel(model: { providerID: string; modelID: stri... function buildSystemContent (line 32) | function buildSystemContent(input: BuildSystemContentInput): string | un... function buildTaskPrompt (line 64) | function buildTaskPrompt(prompt: string, agentName: string | undefined):... FILE: src/tools/delegate-task/sisyphus-junior-agent.ts constant SISYPHUS_JUNIOR_AGENT (line 3) | const SISYPHUS_JUNIOR_AGENT = getAgentDisplayName("sisyphus-junior") FILE: src/tools/delegate-task/skill-resolver.ts function resolveSkillContent (line 5) | async function resolveSkillContent( FILE: src/tools/delegate-task/subagent-resolver.test.ts function createBaseArgs (line 9) | function createBaseArgs(overrides?: Partial): Delegate... function createExecutorContext (line 20) | function createExecutorContext( FILE: src/tools/delegate-task/subagent-resolver.ts function resolveSubagentExecution (line 16) | async function resolveSubagentExecution( FILE: src/tools/delegate-task/sync-continuation-deps.ts type SyncContinuationDeps (line 9) | type SyncContinuationDeps = typeof syncContinuationDeps FILE: src/tools/delegate-task/sync-continuation.ts function executeSyncContinuation (line 16) | async function executeSyncContinuation( FILE: src/tools/delegate-task/sync-poll-timeout.test.ts function createMockCtx (line 5) | function createMockCtx(aborted = false) { function createNeverCompleteClient (line 16) | function createNeverCompleteClient(sessionID: string, onAbort?: () => vo... function withMockedDateNow (line 30) | async function withMockedDateNow(stepMs: number, run: () => Promise { function abortSyncSession (line 16) | function abortSyncSession(client: OpencodeClient, sessionID: string, rea... function isSessionComplete (line 25) | function isSessionComplete(messages: SessionMessage[]): boolean { function pollSyncSession (line 42) | async function pollSyncSession( FILE: src/tools/delegate-task/sync-task-deps.ts type SyncTaskDeps (line 13) | type SyncTaskDeps = typeof syncTaskDeps FILE: src/tools/delegate-task/sync-task.ts function executeSyncTask (line 14) | async function executeSyncTask( FILE: src/tools/delegate-task/time-formatter.ts function formatDuration (line 4) | function formatDuration(start: Date, end?: Date): string { FILE: src/tools/delegate-task/timing.ts constant POLL_INTERVAL_MS (line 1) | let POLL_INTERVAL_MS = 1000 constant MIN_STABILITY_TIME_MS (line 2) | let MIN_STABILITY_TIME_MS = 10000 constant STABILITY_POLLS_REQUIRED (line 3) | let STABILITY_POLLS_REQUIRED = 3 constant WAIT_FOR_SESSION_INTERVAL_MS (line 4) | let WAIT_FOR_SESSION_INTERVAL_MS = 100 constant WAIT_FOR_SESSION_TIMEOUT_MS (line 5) | let WAIT_FOR_SESSION_TIMEOUT_MS = 60000 constant DEFAULT_POLL_TIMEOUT_MS (line 6) | const DEFAULT_POLL_TIMEOUT_MS = 30 * 60 * 1000 constant MAX_POLL_TIME_MS (line 7) | let MAX_POLL_TIME_MS = DEFAULT_POLL_TIMEOUT_MS constant SESSION_CONTINUATION_STABILITY_MS (line 8) | let SESSION_CONTINUATION_STABILITY_MS = 5000 constant DEFAULT_SYNC_POLL_TIMEOUT_MS (line 10) | const DEFAULT_SYNC_POLL_TIMEOUT_MS = DEFAULT_POLL_TIMEOUT_MS function getDefaultSyncPollTimeoutMs (line 12) | function getDefaultSyncPollTimeoutMs(): number { function getTimingConfig (line 16) | function getTimingConfig() { function __resetTimingConfig (line 28) | function __resetTimingConfig(): void { function __setTimingConfig (line 38) | function __setTimingConfig(overrides: Partial { FILE: src/tools/delegate-task/tools.ts function createDelegateTask (line 28) | function createDelegateTask(options: DelegateTaskToolOptions): ToolDefin... FILE: src/tools/delegate-task/types.ts type OpencodeClient (line 9) | type OpencodeClient = PluginInput["client"] type DelegateTaskArgs (line 11) | interface DelegateTaskArgs { type ToolContextWithMetadata (line 26) | interface ToolContextWithMetadata { type SyncSessionCreatedEvent (line 43) | interface SyncSessionCreatedEvent { type DelegateTaskToolOptions (line 49) | interface DelegateTaskToolOptions { type BuildSystemContentInput (line 74) | interface BuildSystemContentInput { FILE: src/tools/delegate-task/unstable-agent-cleanup.test.ts function createArgs (line 6) | function createArgs() { function createToolContext (line 17) | function createToolContext(aborted = false) { function createParentContext (line 32) | function createParentContext() { FILE: src/tools/delegate-task/unstable-agent-task.ts function executeUnstableAgentTask (line 13) | async function executeUnstableAgentTask( FILE: src/tools/glob/cli.ts type ResolvedCli (line 17) | interface ResolvedCli { function buildRgArgs (line 22) | function buildRgArgs(options: GlobOptions): string[] { function buildFindArgs (line 38) | function buildFindArgs(options: GlobOptions): string[] { function buildPowerShellCommand (line 60) | function buildPowerShellCommand(options: GlobOptions): string[] { function getFileMtime (line 84) | async function getFileMtime(filePath: string): Promise { function runRgFiles (line 95) | async function runRgFiles( function runRgFilesInternal (line 107) | async function runRgFilesInternal( FILE: src/tools/glob/constants.ts constant DEFAULT_TIMEOUT_MS (line 3) | const DEFAULT_TIMEOUT_MS = 60_000 constant DEFAULT_LIMIT (line 4) | const DEFAULT_LIMIT = 100 constant DEFAULT_MAX_DEPTH (line 5) | const DEFAULT_MAX_DEPTH = 20 constant DEFAULT_MAX_OUTPUT_BYTES (line 6) | const DEFAULT_MAX_OUTPUT_BYTES = 10 * 1024 * 1024 constant RG_FILES_FLAGS (line 8) | const RG_FILES_FLAGS = [ FILE: src/tools/glob/result-formatter.ts function formatGlobResult (line 3) | function formatGlobResult(result: GlobResult): string { FILE: src/tools/glob/tools.ts function createGlobTools (line 8) | function createGlobTools(ctx: PluginInput): Record { function runRgInternal (line 160) | async function runRgInternal(options: GrepOptions): Promise { function runRgCount (line 227) | async function runRgCount(options: Omit): Promis... function runRgCountInternal (line 236) | async function runRgCountInternal(options: Omit)... FILE: src/tools/grep/constants.ts type GrepBackend (line 7) | type GrepBackend = "rg" | "grep" type ResolvedCli (line 9) | interface ResolvedCli { function findExecutable (line 17) | function findExecutable(name: string): string | null { function getOpenCodeBundledRg (line 32) | function getOpenCodeBundledRg(): string | null { function resolveGrepCli (line 58) | function resolveGrepCli(): ResolvedCli { function resolveGrepCliWithAutoInstall (line 89) | async function resolveGrepCliWithAutoInstall(): Promise { constant DEFAULT_MAX_DEPTH (line 111) | const DEFAULT_MAX_DEPTH = 20 constant DEFAULT_MAX_FILESIZE (line 112) | const DEFAULT_MAX_FILESIZE = "10M" constant DEFAULT_MAX_COUNT (line 113) | const DEFAULT_MAX_COUNT = 500 constant DEFAULT_MAX_COLUMNS (line 114) | const DEFAULT_MAX_COLUMNS = 1000 constant DEFAULT_CONTEXT (line 115) | const DEFAULT_CONTEXT = 2 constant DEFAULT_TIMEOUT_MS (line 116) | const DEFAULT_TIMEOUT_MS = 60_000 constant DEFAULT_MAX_OUTPUT_BYTES (line 117) | const DEFAULT_MAX_OUTPUT_BYTES = 256 * 1024 constant DEFAULT_RG_THREADS (line 118) | const DEFAULT_RG_THREADS = 4 constant RG_SAFETY_FLAGS (line 120) | const RG_SAFETY_FLAGS = [ constant GREP_SAFETY_FLAGS (line 128) | const GREP_SAFETY_FLAGS = ["-n", "-H", "--color=never"] as const FILE: src/tools/grep/downloader.ts function findFileRecursive (line 12) | function findFileRecursive(dir: string, filename: string): string | null { constant RG_VERSION (line 26) | const RG_VERSION = "14.1.1" constant PLATFORM_CONFIG (line 28) | const PLATFORM_CONFIG: Record { function getInstalledRipgrepPath (line 124) | function getInstalledRipgrepPath(): string | null { FILE: src/tools/grep/result-formatter.ts function formatGrepResult (line 3) | function formatGrepResult(result: GrepResult): string { function formatCountResult (line 45) | function formatCountResult(results: CountResult[]): string { FILE: src/tools/grep/tools.ts function createGrepTools (line 7) | function createGrepTools(ctx: PluginInput): Record { constant HASHLINE_REF_PATTERN (line 9) | const HASHLINE_REF_PATTERN = /^([0-9]+)#([ZPMQVRWSNKTXJBYH]{2})$/ constant HASHLINE_OUTPUT_PATTERN (line 10) | const HASHLINE_OUTPUT_PATTERN = /^([0-9]+)#([ZPMQVRWSNKTXJBYH]{2})\|(.*)$/ FILE: src/tools/hashline-edit/diff-utils.test.ts function createNumberedLines (line 6) | function createNumberedLines(totalLineCount: number): string { FILE: src/tools/hashline-edit/diff-utils.ts function toHashlineContent (line 4) | function toHashlineContent(content: string): string { function generateUnifiedDiff (line 18) | function generateUnifiedDiff(oldContent: string, newContent: string, fil... function countLineDiffs (line 22) | function countLineDiffs(oldContent: string, newContent: string): { addit... FILE: src/tools/hashline-edit/edit-deduplication.ts function normalizeEditPayload (line 5) | function normalizeEditPayload(payload: string | string[]): string { function canonicalAnchor (line 9) | function canonicalAnchor(anchor: string | undefined): string { function buildDedupeKey (line 14) | function buildDedupeKey(edit: HashlineEdit): string { function dedupeEdits (line 27) | function dedupeEdits(edits: HashlineEdit[]): { edits: HashlineEdit[]; de... FILE: src/tools/hashline-edit/edit-operation-primitives.ts type EditApplyOptions (line 12) | interface EditApplyOptions { function shouldValidate (line 16) | function shouldValidate(options?: EditApplyOptions): boolean { function applySetLine (line 20) | function applySetLine( function applyReplaceLines (line 39) | function applyReplaceLines( function applyInsertAfter (line 72) | function applyInsertAfter( function applyInsertBefore (line 89) | function applyInsertBefore( function applyAppend (line 106) | function applyAppend(lines: string[], text: string | string[]): string[] { function applyPrepend (line 117) | function applyPrepend(lines: string[], text: string | string[]): string[] { FILE: src/tools/hashline-edit/edit-operations.test.ts function anchorFor (line 7) | function anchorFor(lines: string[], line: number): string { FILE: src/tools/hashline-edit/edit-operations.ts function arraysEqual (line 14) | function arraysEqual(a: string[], b: string[]): boolean { type HashlineApplyReport (line 22) | interface HashlineApplyReport { function applyHashlineEditsWithReport (line 28) | function applyHashlineEditsWithReport(content: string, edits: HashlineEd... function applyHashlineEdits (line 101) | function applyHashlineEdits(content: string, edits: HashlineEdit[]): str... FILE: src/tools/hashline-edit/edit-ordering.ts function getEditLineNumber (line 4) | function getEditLineNumber(edit: HashlineEdit): number { function collectLineRefs (line 17) | function collectLineRefs(edits: HashlineEdit[]): string[] { function detectOverlappingRanges (line 31) | function detectOverlappingRanges(edits: HashlineEdit[]): string | null { FILE: src/tools/hashline-edit/edit-text-normalization.ts constant HASHLINE_PREFIX_RE (line 1) | const HASHLINE_PREFIX_RE = /^\s*(?:>>>|>>)?\s*\d+\s*#\s*[ZPMQVRWSNKTXJBY... constant DIFF_PLUS_RE (line 2) | const DIFF_PLUS_RE = /^[+](?![+])/ function equalsIgnoringWhitespace (line 4) | function equalsIgnoringWhitespace(a: string, b: string): boolean { function leadingWhitespace (line 9) | function leadingWhitespace(text: string): string { function stripLinePrefixes (line 15) | function stripLinePrefixes(lines: string[]): string[] { function toNewLines (line 45) | function toNewLines(input: string | string[]): string[] { function restoreLeadingIndent (line 52) | function restoreLeadingIndent(templateLine: string, line: string): string { function stripInsertAnchorEcho (line 61) | function stripInsertAnchorEcho(anchorLine: string, newLines: string[]): ... function stripInsertBeforeEcho (line 69) | function stripInsertBeforeEcho(anchorLine: string, newLines: string[]): ... function stripInsertBoundaryEcho (line 77) | function stripInsertBoundaryEcho(afterLine: string, beforeLine: string, ... function stripRangeBoundaryEcho (line 88) | function stripRangeBoundaryEcho( FILE: src/tools/hashline-edit/file-text-canonicalization.ts type FileTextEnvelope (line 1) | interface FileTextEnvelope { function detectLineEnding (line 7) | function detectLineEnding(content: string): "\n" | "\r\n" { function stripBom (line 15) | function stripBom(content: string): { content: string; hadBom: boolean } { function normalizeToLf (line 22) | function normalizeToLf(content: string): string { function restoreLineEndings (line 26) | function restoreLineEndings(content: string, lineEnding: "\n" | "\r\n"):... function canonicalizeFileText (line 31) | function canonicalizeFileText(content: string): FileTextEnvelope { function restoreFileText (line 40) | function restoreFileText(content: string, envelope: FileTextEnvelope): s... FILE: src/tools/hashline-edit/hash-computation.test.ts function collectStream (line 147) | async function collectStream(stream: AsyncIterable): Promise { function getTmuxPath (line 44) | async function getTmuxPath(): Promise { function getCachedTmuxPath (line 62) | function getCachedTmuxPath(): string | null { function startBackgroundCheck (line 66) | function startBackgroundCheck(): void { FILE: src/tools/interactive-bash/tools.ts function tokenizeCommand (line 10) | function tokenizeCommand(cmd: string): string[] { FILE: src/tools/look-at/assistant-message-extractor.ts type MessageTime (line 1) | type MessageTime = { created?: number } type MessageInfo (line 3) | type MessageInfo = { type MessagePart (line 8) | type MessagePart = { type SessionMessage (line 13) | type SessionMessage = { function isObject (line 18) | function isObject(value: unknown): value is Record { function asSessionMessage (line 22) | function asSessionMessage(value: unknown): SessionMessage | null { function getCreatedTime (line 37) | function getCreatedTime(message: SessionMessage): number { function getTextParts (line 41) | function getTextParts(message: SessionMessage): MessagePart[] { function extractLatestAssistantText (line 52) | function extractLatestAssistantText(messages: unknown): string | null { FILE: src/tools/look-at/constants.ts constant MULTIMODAL_LOOKER_AGENT (line 1) | const MULTIMODAL_LOOKER_AGENT = "multimodal-looker" as const constant LOOK_AT_DESCRIPTION (line 3) | const LOOK_AT_DESCRIPTION = `Extract basic information from media files ... FILE: src/tools/look-at/image-converter.test.ts function writeConvertedOutput (line 21) | function writeConvertedOutput(command: string, args: string[]): void { function withMockPlatform (line 41) | function withMockPlatform(platform: NodeJS.Platform, run: () => ... FILE: src/tools/look-at/image-converter.ts constant SUPPORTED_FORMATS (line 7) | const SUPPORTED_FORMATS = new Set([ constant UNSUPPORTED_FORMATS (line 16) | const UNSUPPORTED_FORMATS = new Set([ constant CONVERSION_TIMEOUT_MS (line 35) | const CONVERSION_TIMEOUT_MS = 30_000 function needsConversion (line 37) | function needsConversion(mimeType: string): boolean { function convertImageToJpeg (line 49) | function convertImageToJpeg(inputPath: string, mimeType: string): string { function cleanupConvertedImage (line 115) | function cleanupConvertedImage(filePath: string): void { function convertBase64ImageToJpeg (line 131) | function convertBase64ImageToJpeg( FILE: src/tools/look-at/look-at-arguments.ts type LookAtArgsWithAlias (line 3) | interface LookAtArgsWithAlias extends LookAtArgs { function normalizeArgs (line 7) | function normalizeArgs(args: LookAtArgsWithAlias): LookAtArgs { function validateArgs (line 15) | function validateArgs(args: LookAtArgs): string | null { FILE: src/tools/look-at/mime-type-inference.ts function inferMimeTypeFromBase64 (line 3) | function inferMimeTypeFromBase64(base64Data: string): string { function inferMimeTypeFromFilePath (line 31) | function inferMimeTypeFromFilePath(filePath: string): string { function extractBase64Data (line 86) | function extractBase64Data(imageData: string): string { FILE: src/tools/look-at/multimodal-agent-metadata.test.ts function createPluginInput (line 10) | function createPluginInput(agentData: Array>): P... FILE: src/tools/look-at/multimodal-agent-metadata.ts type AgentModel (line 10) | type AgentModel = { providerID: string; modelID: string } type ResolvedAgentMetadata (line 12) | type ResolvedAgentMetadata = { type AgentInfo (line 17) | type AgentInfo = { function isObject (line 23) | function isObject(value: unknown): value is Record { function getFullModelKey (line 27) | function getFullModelKey(model: AgentModel): string { function isVisionCapableAgentModel (line 31) | function isVisionCapableAgentModel( function parseAgentModel (line 44) | function parseAgentModel(model: string): AgentModel | undefined { function toAgentInfo (line 54) | function toAgentInfo(value: unknown): AgentInfo | null { function resolveRegisteredAgentMetadata (line 68) | async function resolveRegisteredAgentMetadata( function resolveDynamicAgentMetadata (line 85) | async function resolveDynamicAgentMetadata( function isConfiguredVisionModel (line 116) | function isConfiguredVisionModel( function resolveMultimodalLookerAgentMetadata (line 127) | async function resolveMultimodalLookerAgentMetadata( FILE: src/tools/look-at/multimodal-fallback-chain.ts constant MULTIMODAL_LOOKER_REQUIREMENT (line 5) | const MULTIMODAL_LOOKER_REQUIREMENT = AGENT_MODEL_REQUIREMENTS["multimod... function getFullModelKey (line 7) | function getFullModelKey(providerID: string, modelID: string): string { function findHardcodedFallbackEntry (line 11) | function findHardcodedFallbackEntry( function isHardcodedMultimodalFallbackModel (line 20) | function isHardcodedMultimodalFallbackModel(model: VisionCapableModel): ... function buildMultimodalLookerFallbackChain (line 28) | function buildMultimodalLookerFallbackChain( FILE: src/tools/look-at/session-poller.test.ts type SessionStatusResult (line 4) | type SessionStatusResult = { function createMockClient (line 9) | function createMockClient(statusSequence: SessionStatusResult[]) { FILE: src/tools/look-at/session-poller.ts type Client (line 4) | type Client = ReturnType type PollOptions (line 6) | interface PollOptions { constant DEFAULT_POLL_INTERVAL_MS (line 11) | const DEFAULT_POLL_INTERVAL_MS = 1000 constant DEFAULT_TIMEOUT_MS (line 12) | const DEFAULT_TIMEOUT_MS = 120_000 function pollSessionUntilIdle (line 14) | async function pollSessionUntilIdle( FILE: src/tools/look-at/tools.ts function getTemporaryConversionPath (line 24) | function getTemporaryConversionPath(error: unknown): string | null { function isVisionCapableResolvedModel (line 42) | function isVisionCapableResolvedModel(model: { function createLookAt (line 54) | function createLookAt(ctx: PluginInput): ToolDefinition { FILE: src/tools/look-at/types.ts type LookAtArgs (line 1) | interface LookAtArgs { FILE: src/tools/lsp/constants.ts constant DEFAULT_MAX_REFERENCES (line 1) | const DEFAULT_MAX_REFERENCES = 200 constant DEFAULT_MAX_SYMBOLS (line 2) | const DEFAULT_MAX_SYMBOLS = 200 constant DEFAULT_MAX_DIAGNOSTICS (line 3) | const DEFAULT_MAX_DIAGNOSTICS = 200 constant DEFAULT_MAX_DIRECTORY_FILES (line 4) | const DEFAULT_MAX_DIRECTORY_FILES = 50 FILE: src/tools/lsp/directory-diagnostics.test.ts function createDiagnostic (line 16) | function createDiagnostic(message: string): Diagnostic { FILE: src/tools/lsp/directory-diagnostics.ts constant SKIP_DIRECTORIES (line 12) | const SKIP_DIRECTORIES = new Set(["node_modules", ".git", "dist", "build... type FileDiagnostic (line 14) | type FileDiagnostic = { function collectFilesWithExtension (line 19) | function collectFilesWithExtension(dir: string, extension: string, maxFi... function aggregateDiagnosticsForDirectory (line 64) | async function aggregateDiagnosticsForDirectory( FILE: src/tools/lsp/language-config.ts function getLanguageId (line 3) | function getLanguageId(ext: string): string { FILE: src/tools/lsp/language-mappings.ts constant SYMBOL_KIND_MAP (line 1) | const SYMBOL_KIND_MAP: Record = { constant SEVERITY_MAP (line 30) | const SEVERITY_MAP: Record = { constant EXT_TO_LANG (line 39) | const EXT_TO_LANG: Record = { FILE: src/tools/lsp/lsp-client-connection.ts class LSPClientConnection (line 5) | class LSPClientConnection extends LSPClientTransport { method initialize (line 6) | async initialize(): Promise { FILE: src/tools/lsp/lsp-client-transport.ts class LSPClientTransport (line 13) | class LSPClientTransport { method constructor (line 21) | constructor(protected root: string, protected server: ResolvedServer) {} method start (line 22) | async start(): Promise { method startStderrReading (line 109) | protected startStderrReading(): void { method sendRequest (line 131) | protected async sendRequest(method: string, ...args: [] | [unknown]... method sendNotification (line 161) | protected sendNotification(method: string, ...args: [] | [unknown]): v... method isAlive (line 167) | isAlive(): boolean { method stop (line 171) | async stop(): Promise { FILE: src/tools/lsp/lsp-client-wrapper.ts function isDirectoryPath (line 9) | function isDirectoryPath(filePath: string): boolean { function uriToPath (line 16) | function uriToPath(uri: string): string { function findWorkspaceRoot (line 20) | function findWorkspaceRoot(filePath: string): string { function formatServerLookupError (line 43) | function formatServerLookupError(result: Exclude(filePath: string, fn: (client: LSPClient... FILE: src/tools/lsp/lsp-client.ts class LSPClient (line 9) | class LSPClient extends LSPClientConnection { method openFile (line 14) | async openFile(filePath: string): Promise { method definition (line 62) | async definition(filePath: string, line: number, character: number): P... method references (line 71) | async references(filePath: string, line: number, character: number, in... method documentSymbols (line 81) | async documentSymbols(filePath: string): Promise { method workspaceSymbols (line 89) | async workspaceSymbols(query: string): Promise { method diagnostics (line 93) | async diagnostics(filePath: string): Promise<{ items: Diagnostic[] }> { method prepareRename (line 111) | async prepareRename(filePath: string, line: number, character: number)... method rename (line 120) | async rename(filePath: string, line: number, character: number, newNam... FILE: src/tools/lsp/lsp-formatters.ts function formatLocation (line 17) | function formatLocation(loc: Location | LocationLink): string { function formatSymbolKind (line 31) | function formatSymbolKind(kind: number): string { function formatSeverity (line 35) | function formatSeverity(severity: number | undefined): string { function formatDocumentSymbol (line 40) | function formatDocumentSymbol(symbol: DocumentSymbol, indent = 0): string { function formatSymbolInfo (line 55) | function formatSymbolInfo(symbol: SymbolInfo): string { function formatDiagnostic (line 62) | function formatDiagnostic(diag: Diagnostic): string { function filterDiagnosticsBySeverity (line 71) | function filterDiagnosticsBySeverity( function formatPrepareRenameResult (line 90) | function formatPrepareRenameResult( function formatTextEdit (line 122) | function formatTextEdit(edit: TextEdit): string { function formatWorkspaceEdit (line 134) | function formatWorkspaceEdit(edit: WorkspaceEdit | null): string { function formatApplyResult (line 174) | function formatApplyResult(result: ApplyResult): string { FILE: src/tools/lsp/lsp-manager-process-cleanup.ts type ManagedClientForCleanup (line 1) | type ManagedClientForCleanup = { type ProcessCleanupOptions (line 7) | type ProcessCleanupOptions = { type RegisteredHandler (line 13) | type RegisteredHandler = { type LspProcessCleanupHandle (line 18) | type LspProcessCleanupHandle = { function registerLspManagerProcessCleanup (line 22) | function registerLspManagerProcessCleanup(options: ProcessCleanupOptions... FILE: src/tools/lsp/lsp-manager-temp-directory-cleanup.ts type ManagedClientForTempDirectoryCleanup (line 1) | type ManagedClientForTempDirectoryCleanup = { function cleanupTempDirectoryLspClients (line 8) | async function cleanupTempDirectoryLspClients( FILE: src/tools/lsp/lsp-process.ts function shouldUseNodeSpawn (line 6) | function shouldUseNodeSpawn(): boolean { function validateCwd (line 10) | function validateCwd(cwd: string): { valid: boolean; error?: string } { type StreamReader (line 24) | interface StreamReader { type UnifiedProcess (line 28) | interface UnifiedProcess { function wrapNodeProcess (line 36) | function wrapNodeProcess(proc: ChildProcess): UnifiedProcess { function spawnProcess (line 133) | function spawnProcess( FILE: src/tools/lsp/lsp-server.ts type ManagedClient (line 5) | interface ManagedClient { class LSPServerManager (line 13) | class LSPServerManager { method constructor (line 20) | private constructor() { method registerProcessCleanup (line 24) | private registerProcessCleanup(): void { method getInstance (line 39) | static getInstance(): LSPServerManager { method getKey (line 46) | private getKey(root: string, serverId: string): string { method startCleanupTimer (line 50) | private startCleanupTimer(): void { method cleanupIdleClients (line 57) | private cleanupIdleClients(): void { method getClient (line 67) | async getClient(root: string, server: ResolvedServer): Promise { method cleanupTempDirectoryClients (line 209) | async cleanupTempDirectoryClients(): Promise { FILE: src/tools/lsp/server-config-loader.ts type LspEntry (line 9) | interface LspEntry { type ConfigJson (line 18) | interface ConfigJson { type ConfigSource (line 22) | type ConfigSource = "project" | "user" | "opencode" type ServerWithSource (line 24) | interface ServerWithSource extends ResolvedServer { function loadJsonFile (line 28) | function loadJsonFile(path: string): T | null { function getConfigPaths (line 37) | function getConfigPaths(): { project: string; user: string; opencode: st... function loadAllConfigs (line 47) | function loadAllConfigs(): Map { function getMergedServers (line 63) | function getMergedServers(): ServerWithSource[] { FILE: src/tools/lsp/server-definitions.ts constant LSP_INSTALL_HINTS (line 3) | const LSP_INSTALL_HINTS: Record = { constant BUILTIN_SERVERS (line 48) | const BUILTIN_SERVERS: Record> = { FILE: src/tools/lsp/server-installation.ts function isServerInstalled (line 6) | function isServerInstalled(command: string[]): boolean { FILE: src/tools/lsp/server-path-bases.ts function getLspServerAdditionalPathBases (line 5) | function getLspServerAdditionalPathBases(workingDirectory: string): stri... FILE: src/tools/lsp/server-resolution.ts function findServerForExtension (line 6) | function findServerForExtension(ext: string): ServerLookupResult { function getAllServers (line 48) | function getAllServers(): Array<{ function getConfigPaths_ (line 107) | function getConfigPaths_(): { project: string; user: string; opencode: s... FILE: src/tools/lsp/types.ts type LSPServerConfig (line 1) | interface LSPServerConfig { type Position (line 10) | interface Position { type Range (line 15) | interface Range { type Location (line 20) | interface Location { type LocationLink (line 25) | interface LocationLink { type SymbolInfo (line 32) | interface SymbolInfo { type DocumentSymbol (line 39) | interface DocumentSymbol { type Diagnostic (line 47) | interface Diagnostic { type TextDocumentIdentifier (line 55) | interface TextDocumentIdentifier { type VersionedTextDocumentIdentifier (line 59) | interface VersionedTextDocumentIdentifier extends TextDocumentIdentifier { type TextEdit (line 63) | interface TextEdit { type TextDocumentEdit (line 68) | interface TextDocumentEdit { type CreateFile (line 73) | interface CreateFile { type RenameFile (line 79) | interface RenameFile { type DeleteFile (line 86) | interface DeleteFile { type WorkspaceEdit (line 92) | interface WorkspaceEdit { type PrepareRenameResult (line 97) | interface PrepareRenameResult { type PrepareRenameDefaultBehavior (line 102) | interface PrepareRenameDefaultBehavior { type ServerLookupInfo (line 106) | interface ServerLookupInfo { type ServerLookupResult (line 112) | type ServerLookupResult = type ResolvedServer (line 117) | interface ResolvedServer { FILE: src/tools/lsp/workspace-edit.ts type ApplyResult (line 6) | interface ApplyResult { function applyTextEditsToFile (line 13) | function applyTextEditsToFile(filePath: string, edits: TextEdit[]): { su... function applyWorkspaceEdit (line 49) | function applyWorkspaceEdit(edit: WorkspaceEdit | null): ApplyResult { FILE: src/tools/session-manager/constants.ts constant TODO_DIR (line 5) | const TODO_DIR = join(getClaudeConfigDir(), "todos") constant TRANSCRIPT_DIR (line 6) | const TRANSCRIPT_DIR = join(getClaudeConfigDir(), "transcripts") constant SESSION_LIST_DESCRIPTION (line 7) | const SESSION_LIST_DESCRIPTION = `List all OpenCode sessions with option... constant SESSION_READ_DESCRIPTION (line 22) | const SESSION_READ_DESCRIPTION = `Read messages and history from an Open... constant SESSION_SEARCH_DESCRIPTION (line 43) | const SESSION_SEARCH_DESCRIPTION = `Search for content within OpenCode s... constant SESSION_INFO_DESCRIPTION (line 65) | const SESSION_INFO_DESCRIPTION = `Get metadata and statistics about an O... constant SESSION_DELETE_DESCRIPTION (line 81) | const SESSION_DELETE_DESCRIPTION = `Delete an OpenCode session and all a... constant TOOL_NAME_PREFIX (line 93) | const TOOL_NAME_PREFIX = "session_" FILE: src/tools/session-manager/session-formatter.ts function formatSessionList (line 4) | async function formatSessionList(sessionIDs: string[]): Promise { function formatSessionMessages (line 44) | function formatSessionMessages( function formatSessionInfo (line 86) | function formatSessionInfo(info: SessionInfo): string { function formatSearchResults (line 108) | function formatSearchResults(results: SearchResult[]): string { function filterSessionsByDate (line 125) | async function filterSessionsByDate( function searchInSession (line 149) | async function searchInSession( FILE: src/tools/session-manager/storage.test.ts constant TEST_DIR (line 7) | const TEST_DIR = join(tmpdir(), `omo-test-session-manager-${randomUUID()}`) constant TEST_MESSAGE_STORAGE (line 8) | const TEST_MESSAGE_STORAGE = join(TEST_DIR, "message") constant TEST_PART_STORAGE (line 9) | const TEST_PART_STORAGE = join(TEST_DIR, "part") constant TEST_SESSION_STORAGE (line 10) | const TEST_SESSION_STORAGE = join(TEST_DIR, "session") constant TEST_TODO_DIR (line 11) | const TEST_TODO_DIR = join(TEST_DIR, "todos") constant TEST_TRANSCRIPT_DIR (line 12) | const TEST_TRANSCRIPT_DIR = join(TEST_DIR, "transcripts") function createSessionMetadata (line 236) | function createSessionMetadata( function createMessageForSession (line 255) | function createMessageForSession(sessionID: string, msgID: string, creat... FILE: src/tools/session-manager/storage.ts type GetMainSessionsOptions (line 11) | interface GetMainSessionsOptions { function setStorageClient (line 18) | function setStorageClient(client: PluginInput["client"]): void { function resetStorageClient (line 22) | function resetStorageClient(): void { function getMainSessions (line 26) | async function getMainSessions(options: GetMainSessionsOptions): Promise... function getAllSessions (line 81) | async function getAllSessions(): Promise { function sessionExists (line 123) | async function sessionExists(sessionID: string): Promise { function readSessionMessages (line 132) | async function readSessionMessages(sessionID: string): Promise { function readSessionTranscript (line 305) | async function readSessionTranscript(sessionID: string): Promise { function getSessionInfo (line 319) | async function getSessionInfo(sessionID: string): Promise(promise: Promise, ms: number, operation: stri... function createSessionManagerTools (line 30) | function createSessionManagerTools(ctx: PluginInput): Record { method release (line 24) | release(): void { FILE: src/tools/skill-mcp/constants.ts constant SKILL_MCP_TOOL_NAME (line 1) | const SKILL_MCP_TOOL_NAME = "skill_mcp" constant SKILL_MCP_DESCRIPTION (line 3) | const SKILL_MCP_DESCRIPTION = `Invoke MCP server operations from skill-e... constant BUILTIN_MCP_TOOL_HINTS (line 5) | const BUILTIN_MCP_TOOL_HINTS: Record = { FILE: src/tools/skill-mcp/tools.test.ts function createMockSkillWithMcp (line 7) | function createMockSkillWithMcp(name: string, mcpServers: Record | und... function applyGrepFilter (line 108) | function applyGrepFilter(output: string, pattern: string | undefined): s... function createSkillMcpTool (line 120) | function createSkillMcpTool(options: SkillMcpToolOptions): ToolDefinition { FILE: src/tools/skill-mcp/types.ts type SkillMcpArgs (line 1) | interface SkillMcpArgs { FILE: src/tools/skill/constants.ts constant TOOL_NAME (line 1) | const TOOL_NAME = "skill" as const constant TOOL_DESCRIPTION_NO_SKILLS (line 3) | const TOOL_DESCRIPTION_NO_SKILLS = "Load a skill or execute a slash comm... constant TOOL_DESCRIPTION_PREFIX (line 5) | const TOOL_DESCRIPTION_PREFIX = `Load a skill or execute a slash command... FILE: src/tools/skill/tools.test.ts function createMockSkill (line 29) | function createMockSkill(name: string, options: { agent?: string } = {})... function createMockSkillWithMcp (line 44) | function createMockSkillWithMcp(name: string, mcpServers: Record { function formatMcpCapabilities (line 115) | async function formatMcpCapabilities( function createSkillTool (line 186) | function createSkillTool(options: SkillLoadOptions = {}): ToolDefinition { FILE: src/tools/skill/types.ts type SkillArgs (line 6) | interface SkillArgs { type SkillInfo (line 11) | interface SkillInfo { type SkillLoadOptions (line 22) | interface SkillLoadOptions { FILE: src/tools/slashcommand/command-discovery.test.ts constant ENV_KEYS (line 7) | const ENV_KEYS = [ type EnvKey (line 14) | type EnvKey = (typeof ENV_KEYS)[number] type EnvSnapshot (line 15) | type EnvSnapshot = Record function writePluginFixture (line 17) | function writePluginFixture(baseDir: string): { projectDir: string } { FILE: src/tools/slashcommand/command-discovery.ts type CommandDiscoveryOptions (line 15) | interface CommandDiscoveryOptions { function discoverCommandsFromDir (line 20) | function discoverCommandsFromDir(commandsDir: string, scope: CommandScop... function discoverPluginCommands (line 61) | function discoverPluginCommands(options?: CommandDiscoveryOptions): Comm... function discoverCommandsSync (line 78) | function discoverCommandsSync( FILE: src/tools/slashcommand/command-output-formatter.ts function formatLoadedCommand (line 5) | async function formatLoadedCommand( function formatCommandList (line 61) | function formatCommandList(items: CommandInfo[]): string { FILE: src/tools/slashcommand/types.ts type CommandScope (line 3) | type CommandScope = "builtin" | "config" | "user" | "project" | "opencod... type CommandMetadata (line 5) | interface CommandMetadata { type CommandInfo (line 14) | interface CommandInfo { FILE: src/tools/task/task-create.test.ts constant TEST_STORAGE (line 7) | const TEST_STORAGE = ".test-task-create-tool" constant TEST_DIR (line 8) | const TEST_DIR = join(process.cwd(), TEST_STORAGE) constant TEST_CONFIG (line 9) | const TEST_CONFIG = { constant TEST_SESSION_ID (line 16) | const TEST_SESSION_ID = "test-session-123" constant TEST_ABORT_CONTROLLER (line 17) | const TEST_ABORT_CONTROLLER = new AbortController() constant TEST_CONTEXT (line 18) | const TEST_CONTEXT = { FILE: src/tools/task/task-create.ts function createTaskCreateTool (line 15) | function createTaskCreateTool( function handleCreate (line 59) | async function handleCreate( FILE: src/tools/task/task-get.test.ts constant TEST_STORAGE (line 7) | const TEST_STORAGE = ".test-task-get-tool" constant TEST_DIR (line 8) | const TEST_DIR = join(process.cwd(), TEST_STORAGE) constant TEST_CONFIG (line 9) | const TEST_CONFIG = { constant TEST_SESSION_ID (line 16) | const TEST_SESSION_ID = "test-session-123" constant TEST_ABORT_CONTROLLER (line 17) | const TEST_ABORT_CONTROLLER = new AbortController() constant TEST_CONTEXT (line 18) | const TEST_CONTEXT = { FILE: src/tools/task/task-get.ts constant TASK_ID_PATTERN (line 7) | const TASK_ID_PATTERN = /^T-[A-Za-z0-9-]+$/ function parseTaskId (line 9) | function parseTaskId(id: string): string | null { function createTaskGetTool (line 14) | function createTaskGetTool(config: Partial): ToolDef... FILE: src/tools/task/task-list.ts type TaskSummary (line 9) | interface TaskSummary { function createTaskList (line 17) | function createTaskList(config: Partial): ToolDefini... FILE: src/tools/task/task-update.test.ts constant TEST_STORAGE (line 7) | const TEST_STORAGE = ".test-task-update-tool" constant TEST_DIR (line 8) | const TEST_DIR = join(process.cwd(), TEST_STORAGE) constant TEST_CONFIG (line 9) | const TEST_CONFIG = { constant TEST_SESSION_ID (line 16) | const TEST_SESSION_ID = "test-session-123" constant TEST_ABORT_CONTROLLER (line 17) | const TEST_ABORT_CONTROLLER = new AbortController() constant TEST_CONTEXT (line 18) | const TEST_CONTEXT = { FILE: src/tools/task/task-update.ts constant TASK_ID_PATTERN (line 14) | const TASK_ID_PATTERN = /^T-[A-Za-z0-9-]+$/; function parseTaskId (line 16) | function parseTaskId(id: string): string | null { function createTaskUpdateTool (line 21) | function createTaskUpdateTool( function handleUpdate (line 71) | async function handleUpdate( FILE: src/tools/task/todo-sync.ts type TodoInfo (line 5) | interface TodoInfo { type TodoWriter (line 12) | type TodoWriter = (input: { function mapTaskStatusToTodoStatus (line 17) | function mapTaskStatusToTodoStatus( function extractPriority (line 34) | function extractPriority( function todosMatch (line 50) | function todosMatch(todo1: TodoInfo, todo2: TodoInfo): boolean { function syncTaskToTodo (line 57) | function syncTaskToTodo(task: Task): TodoInfo | null { function resolveTodoWriter (line 72) | async function resolveTodoWriter(): Promise { function extractTodos (line 86) | function extractTodos(response: unknown): TodoInfo[] { function syncTaskTodoUpdate (line 97) | async function syncTaskTodoUpdate( function syncAllTasksToTodos (line 138) | async function syncAllTasksToTodos( FILE: src/tools/task/types.ts type TaskStatus (line 4) | type TaskStatus = z.infer type TaskObject (line 23) | type TaskObject = z.infer type Task (line 27) | type Task = TaskObject type TaskCreateInput (line 42) | type TaskCreateInput = z.infer type TaskListInput (line 49) | type TaskListInput = z.infer type TaskGetInput (line 55) | type TaskGetInput = z.infer type TaskUpdateInput (line 71) | type TaskUpdateInput = z.infer type TaskDeleteInput (line 77) | type TaskDeleteInput = z.infer FILE: tests/hashline/headless.ts constant DEFAULT_MODEL (line 14) | const DEFAULT_MODEL = "minimax-m2.5-free" constant MAX_STEPS (line 15) | const MAX_STEPS = 50 function parseArgs (line 22) | function parseArgs(): { prompt: string; modelId: string } { function run (line 117) | async function run() { FILE: tests/hashline/test-edge-cases.ts constant BOLD (line 37) | const BOLD = "\x1b[1m"; constant GREEN (line 38) | const GREEN = "\x1b[32m"; constant RED (line 39) | const RED = "\x1b[31m"; constant YELLOW (line 40) | const YELLOW = "\x1b[33m"; constant DIM (line 41) | const DIM = "\x1b[2m"; constant CYAN (line 42) | const CYAN = "\x1b[36m"; constant RESET (line 43) | const RESET = "\x1b[0m"; type TestCase (line 51) | interface TestCase { constant TEST_CASES (line 60) | const TEST_CASES: TestCase[] = [ type ToolCallEvent (line 882) | interface ToolCallEvent { type ToolResultEvent (line 889) | interface ToolResultEvent { type AnyEvent (line 896) | interface AnyEvent { function runTestCase (line 902) | async function runTestCase( FILE: tests/hashline/test-edit-ops.ts constant BOLD (line 37) | const BOLD = "\x1b[1m"; constant GREEN (line 38) | const GREEN = "\x1b[32m"; constant RED (line 39) | const RED = "\x1b[31m"; constant YELLOW (line 40) | const YELLOW = "\x1b[33m"; constant DIM (line 41) | const DIM = "\x1b[2m"; constant CYAN (line 42) | const CYAN = "\x1b[36m"; constant RESET (line 43) | const RESET = "\x1b[0m"; type TestCase (line 51) | interface TestCase { constant TEST_CASES (line 59) | const TEST_CASES: TestCase[] = [ type ToolCallEvent (line 577) | interface ToolCallEvent { type ToolResultEvent (line 584) | interface ToolResultEvent { type AnyEvent (line 591) | interface AnyEvent { function runTestCase (line 597) | async function runTestCase( FILE: tests/hashline/test-multi-model.ts constant MODELS (line 16) | const MODELS = [ type TestResult (line 44) | interface TestResult { type ModelResult (line 50) | interface ModelResult { function parseOpsOutput (line 61) | function parseOpsOutput(stdout: string): TestResult[] { function runModel (line 120) | async function runModel(model: { FILE: uvscripts/gh_fetch.py class ItemState (line 46) | class ItemState(str, Enum): class OutputFormat (line 52) | class OutputFormat(str, Enum): function run_gh_command (line 58) | async def run_gh_command(args: list[str]) -> tuple[str, str, int]: function get_current_repo (line 70) | async def get_current_repo() -> str: function fetch_items_page (line 79) | async def fetch_items_page( function fetch_all_items (line 114) | async def fetch_all_items( function display_table (line 183) | def display_table(items: list[dict], item_type: str) -> None: function issues (line 213) | def issues( function prs (line 261) | def prs( function fetch_all (line 309) | def fetch_all(