SYMBOL INDEX (261 symbols across 30 files) FILE: agents/pi/extensions/agent-profiles.ts type AgentProfile (line 46) | interface AgentProfile { constant DEFAULT_TOOLS (line 55) | const DEFAULT_TOOLS = ["read", "bash", "edit", "write", "grep", "find", ... constant DEFAULT_AGENT (line 58) | const DEFAULT_AGENT: AgentProfile = { function parseFrontmatter (line 69) | function parseFrontmatter(content: string): { function loadAgentsFromDir (line 111) | function loadAgentsFromDir(dir: string): Map { function loadAgents (line 149) | function loadAgents(cwd: string): Map { function getEffectiveTools (line 175) | function getEffectiveTools(agent: AgentProfile | undefined): string[] { function agentProfilesExtension (line 191) | function agentProfilesExtension(pi: ExtensionAPI) { FILE: agents/pi/extensions/ask.ts type AskDetails (line 49) | interface AskDetails { type MultiAskDetails (line 56) | interface MultiAskDetails { type QuestionState (line 60) | interface QuestionState { function askToolExtension (line 68) | function askToolExtension(pi: ExtensionAPI): void { function handleSingleQuestion (line 129) | async function handleSingleQuestion( function handleMultipleQuestions (line 324) | async function handleMultipleQuestions( FILE: agents/pi/extensions/composed-editor/index.ts function composedEditorExtension (line 24) | function composedEditorExtension(pi: ExtensionAPI) { FILE: agents/pi/extensions/handoff.ts constant SYSTEM_PROMPT (line 19) | const SYSTEM_PROMPT = `You are a context transfer assistant. Given a con... FILE: agents/pi/extensions/lsp/index.ts constant DIAGNOSTICS_TIMEOUT_MS (line 26) | const DIAGNOSTICS_TIMEOUT_MS = 5000; constant DIAGNOSTICS_DEBOUNCE_MS (line 27) | const DIAGNOSTICS_DEBOUNCE_MS = 150; constant LSP_CONNECTION_TIMEOUT_MS (line 28) | const LSP_CONNECTION_TIMEOUT_MS = 5000; type Diagnostic (line 30) | type Diagnostic = VSCodeDiagnostic; type LspConnection (line 32) | interface LspConnection { type LspStatus (line 45) | interface LspStatus { class LspConnectionManager (line 56) | class LspConnectionManager { method getOrCreateConnections (line 60) | async getOrCreateConnections( method createConnection (line 115) | private async createConnection( method initializeConnection (line 209) | private async initializeConnection( method touchFile (line 259) | async touchFile( method getDiagnostics (line 340) | getDiagnostics(conn: LspConnection, filePath: string): Diagnostic[] { method getAllDiagnostics (line 345) | getAllDiagnostics(filePath: string): { conn: LspConnection; diagnostic... method shutdown (line 357) | async shutdown(conn: LspConnection): Promise { method shutdownAll (line 369) | async shutdownAll(): Promise { method killConnection (line 375) | killConnection(key: string): boolean { method getStatus (line 390) | getStatus(): LspStatus[] { method normalizePath (line 403) | private normalizePath(filePath: string): string { function extractFileFromEvent (line 410) | function extractFileFromEvent(event: ToolResultEvent): { path: string; i... function formatDiagnostics (line 420) | function formatDiagnostics(diagnostics: Diagnostic[]): string { function formatDuration (line 435) | function formatDuration(ms: number): string { FILE: agents/pi/extensions/lsp/lsp-config.ts constant MASON_BIN_PATH (line 17) | const MASON_BIN_PATH = resolve(homedir(), ".local/share/nvim/mason/bin"); type LspHandle (line 19) | interface LspHandle { type RootFunction (line 24) | type RootFunction = (file: string, cwd: string) => Promise = { function pathExists (line 114) | async function pathExists(path: string): Promise { function which (line 126) | async function which(bin: string): Promise { function nearestRoot (line 145) | function nearestRoot(includePatterns: string[], excludePatterns?: string... function createHandle (line 181) | function createHandle( constant LSP_SERVERS (line 195) | const LSP_SERVERS: LspServerInfo[] = [ method spawn (line 212) | async spawn(root, cwd) { method spawn (line 254) | async spawn(root) { method spawn (line 289) | async spawn(root) { method spawn (line 314) | async spawn(root) { method spawn (line 326) | async spawn(root) { method spawn (line 345) | async spawn(root) { method spawn (line 392) | async spawn(root) { method spawn (line 404) | async spawn(root) { method spawn (line 423) | async spawn(root) { method spawn (line 442) | async spawn(root) { method spawn (line 461) | async spawn(root, cwd) { method spawn (line 487) | async spawn(root) { method spawn (line 505) | async spawn(root) { method spawn (line 517) | async spawn(root) { method spawn (line 529) | async spawn(root) { method spawn (line 541) | async spawn(root) { method spawn (line 559) | async spawn(root) { method spawn (line 571) | async spawn(root) { method spawn (line 583) | async spawn(root) { method spawn (line 595) | async spawn(root) { method spawn (line 607) | async spawn(root) { method spawn (line 619) | async spawn(root) { method spawn (line 631) | async spawn(root) { method spawn (line 643) | async spawn(root) { method spawn (line 655) | async spawn(root) { method spawn (line 667) | async spawn(root) { method spawn (line 679) | async spawn(root) { method spawn (line 691) | async spawn(root) { method spawn (line 703) | async spawn(root) { method spawn (line 715) | async spawn(root) { method spawn (line 727) | async spawn(root) { method spawn (line 744) | async spawn(root) { FILE: agents/pi/extensions/notify.ts function windowsToastScript (line 13) | function windowsToastScript(title: string, body: string): string { function notifyOSC777 (line 26) | function notifyOSC777(title: string, body: string): void { function notifyOSC99 (line 30) | function notifyOSC99(title: string, body: string): void { function notifyWindows (line 36) | function notifyWindows(title: string, body: string): void { function notify (line 41) | function notify(title: string, body: string): void { FILE: agents/pi/extensions/pi-codemode/index.ts function registerCodemode (line 7) | function registerCodemode(pi: ExtensionAPI) { FILE: agents/pi/extensions/pi-codemode/src/builtins.ts type BuiltinTool (line 15) | type BuiltinTool = { constant BASH_COMMAND_WHITELIST (line 23) | const BASH_COMMAND_WHITELIST = new Set([ function extractCommandName (line 49) | function extractCommandName(command: string): string | null { function createWhitelistedBashTool (line 62) | function createWhitelistedBashTool(cwd: string): BuiltinTool { type BuiltinToolset (line 117) | type BuiltinToolset = Record; constant PI_SIGNATURES (line 119) | const PI_SIGNATURES = [ constant FFF_SIGNATURES (line 130) | const FFF_SIGNATURES = [ constant META_APIS (line 138) | const META_APIS = ["tools.list()", "tools.schema(name)", "tools.definiti... function createBuiltinToolset (line 140) | function createBuiltinToolset(cwd: string) { function buildCodemodeApiPrompt (line 153) | function buildCodemodeApiPrompt(): string { FILE: agents/pi/extensions/pi-codemode/src/codemode.ts function createCodemodeTool (line 16) | function createCodemodeTool(): ToolDefinition; function createFffBuiltinToolset (line 191) | function createFffBuiltinToolset(cwd: string): FffBuiltinToolset { FILE: agents/pi/extensions/pi-codemode/src/read.ts constant CUSTOM_MAX_LINES (line 8) | const CUSTOM_MAX_LINES = 100_000; constant CUSTOM_MAX_BYTES (line 9) | const CUSTOM_MAX_BYTES = 10 * 1024 * 1024; constant IMAGE_MIME_TYPES (line 11) | const IMAGE_MIME_TYPES: Record = { function isImageFile (line 19) | function isImageFile(filePath: string): string | null { function formatSize (line 24) | function formatSize(bytes: number): string { type ReadToolOptions (line 38) | interface ReadToolOptions { function createCustomReadTool (line 43) | function createCustomReadTool(cwd: string, options?: ReadToolOptions) { type TruncationResult (line 141) | interface TruncationResult { type TruncationOptions (line 149) | interface TruncationOptions { function truncateHead (line 154) | function truncateHead(content: string, options: TruncationOptions): Trun... FILE: agents/pi/extensions/pi-codemode/src/render.ts function renderCodemodeCall (line 18) | function renderCodemodeCall(code: string, theme: Theme): Text { function renderCodemodeResult (line 29) | function renderCodemodeResult(trace: CodemodeTrace, expanded: boolean, t... FILE: agents/pi/extensions/pi-codemode/src/runtime.ts constant DEFAULT_TIMEOUT_MS (line 7) | const DEFAULT_TIMEOUT_MS = 30_000; constant MAX_CODE_SIZE (line 8) | const MAX_CODE_SIZE = 100_000; type RuntimeOptions (line 10) | type RuntimeOptions = { type CodemodeExecutionResult (line 19) | type CodemodeExecutionResult = { constant CODE_PREFIX (line 93) | const CODE_PREFIX = [ constant CODE_POSTFIX (line 130) | const CODE_POSTFIX = [ FILE: agents/pi/extensions/pi-codemode/src/sandbox-cache.ts type SandboxDelegates (line 5) | type SandboxDelegates = { type SandboxEntry (line 11) | type SandboxEntry = { FILE: agents/pi/extensions/pi-codemode/src/source-config.ts constant SECRET_REF_PREFIX (line 6) | const SECRET_REF_PREFIX = "secret-public-ref:"; type UnknownRecord (line 8) | type UnknownRecord = Record; type HeaderSecretRef (line 10) | type HeaderSecretRef = { secretId: string; prefix?: string }; type PluginHeaderValue (line 11) | type PluginHeaderValue = string | HeaderSecretRef; type OpenApiSourceConfig (line 13) | type OpenApiSourceConfig = { type GraphqlSourceConfig (line 21) | type GraphqlSourceConfig = { type McpRemoteSourceConfig (line 29) | type McpRemoteSourceConfig = { type McpStdioSourceConfig (line 40) | type McpStdioSourceConfig = { type SupportedSourceConfig (line 51) | type SupportedSourceConfig = type UnsupportedSourceConfig (line 57) | type UnsupportedSourceConfig = { type LoadedSourceConfig (line 64) | type LoadedSourceConfig = { FILE: agents/pi/extensions/pi-codemode/src/source-hydrate.ts type ExecutorWithPlugins (line 4) | type ExecutorWithPlugins = Executor & { type HydrateOptions (line 10) | type HydrateOptions = { FILE: agents/pi/extensions/pi-codemode/src/trace.ts class CodemodeTraceRecorder (line 30) | class CodemodeTraceRecorder { method constructor (line 35) | constructor(input: { cwd: string; code: string }) { method log (line 46) | log(line: string): void { method startStep (line 50) | startStep(input: { label: string; toolPath: string; input: unknown }):... method finishStep (line 65) | finishStep(id: string, output?: ToolResultSnapshot, error?: string): v... method finish (line 86) | finish(input: { status: CodemodeTrace["status"]; value?: unknown; erro... FILE: agents/pi/extensions/pi-codemode/src/turndown.d.ts class TurndownService (line 2) | class TurndownService { FILE: agents/pi/extensions/pi-codemode/src/types.ts type BuiltinToolName (line 4) | type BuiltinToolName = (typeof builtinToolNames)[number]; type FffToolName (line 13) | type FffToolName = (typeof fffToolNames)[number]; type ToolResultSnapshot (line 15) | type ToolResultSnapshot = { type TraceStep (line 22) | type TraceStep = { type CodemodeTrace (line 34) | type CodemodeTrace = { type CodemodeResultDetails (line 46) | type CodemodeResultDetails = { FILE: agents/pi/extensions/pi-codemode/src/webfetch.ts type WebfetchInput (line 3) | type WebfetchInput = { constant MAX_RESPONSE_SIZE (line 9) | const MAX_RESPONSE_SIZE = 5 * 1024 * 1024; constant DEFAULT_TIMEOUT (line 10) | const DEFAULT_TIMEOUT = 30 * 1000; constant MAX_TIMEOUT (line 11) | const MAX_TIMEOUT = 120 * 1000; function htmlToText (line 16) | function htmlToText(html: string): string { function htmlToMarkdown (line 38) | function htmlToMarkdown(html: string): string { function webfetch (line 46) | async function webfetch( FILE: agents/pi/extensions/prompt-timer.ts function isAssistantMessage (line 4) | function isAssistantMessage(message: unknown): message is AssistantMessa... function formatDuration (line 10) | function formatDuration(ms: number): string { FILE: agents/pi/extensions/session-breakdown.ts type ModelKey (line 35) | type ModelKey = string; type ParsedSession (line 37) | interface ParsedSession { type DayAgg (line 50) | interface DayAgg { type RangeAgg (line 63) | interface RangeAgg { type RGB (line 76) | interface RGB { type BreakdownData (line 82) | interface BreakdownData { constant SESSION_ROOT (line 92) | const SESSION_ROOT = path.join(os.homedir(), ".pi", "agent", "sessions"); constant RANGE_DAYS (line 93) | const RANGE_DAYS = [7, 30, 90] as const; type MeasurementMode (line 95) | type MeasurementMode = "sessions" | "messages" | "tokens"; type BreakdownProgressPhase (line 97) | type BreakdownProgressPhase = "scan" | "parse" | "finalize"; type BreakdownProgressState (line 99) | interface BreakdownProgressState { function setBorderedLoaderMessage (line 107) | function setBorderedLoaderMessage(loader: BorderedLoader, message: strin... constant DEFAULT_BG (line 117) | const DEFAULT_BG: RGB = { r: 13, g: 17, b: 23 }; constant EMPTY_CELL_BG (line 118) | const EMPTY_CELL_BG: RGB = { r: 22, g: 27, b: 34 }; constant PALETTE (line 121) | const PALETTE: RGB[] = [ function clamp01 (line 129) | function clamp01(x: number): number { function lerp (line 133) | function lerp(a: number, b: number, t: number): number { function mixRgb (line 137) | function mixRgb(a: RGB, b: RGB, t: number): RGB { function weightedMix (line 145) | function weightedMix(colors: Array<{ color: RGB; weight: number }>): RGB { function ansiBg (line 161) | function ansiBg(rgb: RGB, text: string): string { function ansiFg (line 165) | function ansiFg(rgb: RGB, text: string): string { function dim (line 169) | function dim(text: string): string { function bold (line 173) | function bold(text: string): string { function formatCount (line 177) | function formatCount(n: number): string { function formatUsd (line 185) | function formatUsd(cost: number): string { function padRight (line 192) | function padRight(s: string, n: number): string { function padLeft (line 197) | function padLeft(s: string, n: number): string { function toLocalDayKey (line 202) | function toLocalDayKey(d: Date): string { function localMidnight (line 209) | function localMidnight(d: Date): Date { function addDaysLocal (line 213) | function addDaysLocal(d: Date, days: number): Date { function countDaysInclusiveLocal (line 219) | function countDaysInclusiveLocal(start: Date, end: Date): number { function mondayIndex (line 226) | function mondayIndex(date: Date): number { function modelKeyFromParts (line 231) | function modelKeyFromParts(provider?: unknown, model?: unknown): ModelKe... function parseSessionStartFromFilename (line 240) | function parseSessionStartFromFilename(name: string): Date | null { function extractProviderModelAndUsage (line 249) | function extractProviderModelAndUsage(obj: any): { provider?: any; model... function extractCostTotal (line 262) | function extractCostTotal(usage: any): number { function extractTokensTotal (line 279) | function extractTokensTotal(usage: any): number { function walkSessionFiles (line 329) | async function walkSessionFiles( function parseSessionFile (line 382) | async function parseSessionFile(filePath: string, signal?: AbortSignal):... function buildRangeAgg (line 474) | function buildRangeAgg(days: number, now: Date): RangeAgg { function addSessionToRange (line 513) | function addSessionToRange(range: RangeAgg, session: ParsedSession): void { function sortMapByValueDesc (line 551) | function sortMapByValueDesc(m: Map): Array<... function choosePaletteFromLast30Days (line 557) | function choosePaletteFromLast30Days(range30: RangeAgg, topN = 4): { function dayMixedColor (line 586) | function dayMixedColor( function graphMetricForRange (line 613) | function graphMetricForRange( function weeksForRange (line 635) | function weeksForRange(range: RangeAgg): number { function renderGraphLines (line 645) | function renderGraphLines( function displayModelName (line 719) | function displayModelName(modelKey: string): string { function renderLegendItems (line 724) | function renderLegendItems(modelColors: Map, orderedModel... function fitRight (line 735) | function fitRight(text: string, width: number): string { function renderLegendBlock (line 746) | function renderLegendBlock(leftLabel: string, items: string[], width: nu... function renderModelTable (line 769) | function renderModelTable(range: RangeAgg, mode: MeasurementMode, maxRow... function renderLeftRight (line 815) | function renderLeftRight(left: string, right: string, width: number): st... function rangeSummary (line 831) | function rangeSummary(range: RangeAgg, days: number, mode: MeasurementMo... function computeBreakdown (line 844) | async function computeBreakdown( class BreakdownComponent (line 894) | class BreakdownComponent implements Component { method constructor (line 903) | constructor(data: BreakdownData, tui: TUI, onDone: () => void) { method invalidate (line 909) | invalidate(): void { method handleInput (line 914) | handleInput(data: string): void { method render (line 961) | render(width: number): string[] { function sessionBreakdownExtension (line 1064) | function sessionBreakdownExtension(pi: ExtensionAPI) { FILE: agents/pi/extensions/webfetch.ts constant MAX_RESPONSE_SIZE (line 13) | const MAX_RESPONSE_SIZE = 5 * 1024 * 1024; constant DEFAULT_TIMEOUT (line 14) | const DEFAULT_TIMEOUT = 30 * 1000; constant MAX_TIMEOUT (line 15) | const MAX_TIMEOUT = 120 * 1000; method execute (line 57) | async execute(_toolCallId, params, signal, _onUpdate, ctx) { function stripMediaTags (line 218) | function stripMediaTags(html: string): string { function htmlToText (line 239) | function htmlToText(html: string): string { FILE: agents/pi/extensions/whimsical-timer.ts function pickRandom (line 123) | function pickRandom(): string { function formatDuration (line 127) | function formatDuration(ms: number): string { function isAssistantMessage (line 135) | function isAssistantMessage(message: unknown): message is AssistantMessa... FILE: agents/pi/treesitter.ts type ParserConfig (line 10) | interface ParserConfig { type Symbol (line 21) | interface Symbol { class LRUCache (line 30) | class LRUCache { method constructor (line 34) | constructor(maxSize: number) { method get (line 38) | get(key: K): V | undefined { method set (line 48) | set(key: K, value: V): void { method has (line 61) | has(key: K): boolean { method clear (line 65) | clear(): void { method size (line 69) | get size(): number { function getParsersDir (line 80) | async function getParsersDir(): Promise { function getQueriesDir (line 88) | async function getQueriesDir(): Promise { function downloadFile (line 96) | async function downloadFile(url: string, dest: string): Promise { function ensureParser (line 121) | async function ensureParser(config: ParserConfig): Promise { function walkDir (line 150) | async function walkDir(dir: string, extensions: string[], files: string[... function findFiles (line 173) | async function findFiles(cwd: string, extensions: string[]): Promise { function isDirectory (line 186) | async function isDirectory(filePath: string): Promise { function defaultDiscoverQuery (line 196) | async function defaultDiscoverQuery( function loadQuery (line 216) | async function loadQuery( function parseFileWithTreesitter (line 235) | async function parseFileWithTreesitter( function parseWorkspace (line 268) | async function parseWorkspace( function filterSymbols (line 318) | function filterSymbols(symbols: Symbol[], query: string): Symbol[] { function formatSymbolValue (line 325) | function formatSymbolValue(symbol: Symbol, isQuotedPrefix: boolean): str... type QueryDiscoveryContext (line 336) | interface QueryDiscoveryContext { type QueryDiscovery (line 346) | type QueryDiscovery = (ctx: QueryDiscoveryContext) => Promise