SYMBOL INDEX (943 symbols across 179 files) FILE: esbuild.config.mjs method setup (line 16) | setup(build) { FILE: packages/chatbox/src/App.tsx type AppProps (line 25) | type AppProps = ChatboxProps constant DESKTOP_RESIZE_MEDIA_QUERY (line 27) | const DESKTOP_RESIZE_MEDIA_QUERY = '(pointer: fine) and (min-width: 1024... constant INPUT_HEIGHT_STORAGE_KEY (line 28) | const INPUT_HEIGHT_STORAGE_KEY = 'nutstore-sync.chatbox.desktop-input-he... constant DEFAULT_DESKTOP_INPUT_HEIGHT (line 29) | const DEFAULT_DESKTOP_INPUT_HEIGHT = 184 constant DESKTOP_INPUT_MIN_HEIGHT (line 30) | const DESKTOP_INPUT_MIN_HEIGHT = 120 constant DESKTOP_INPUT_ABSOLUTE_MIN_HEIGHT (line 31) | const DESKTOP_INPUT_ABSOLUTE_MIN_HEIGHT = 72 constant DESKTOP_MESSAGES_MIN_HEIGHT (line 32) | const DESKTOP_MESSAGES_MIN_HEIGHT = 200 constant RESIZER_HITBOX_HEIGHT (line 33) | const RESIZER_HITBOX_HEIGHT = 10 constant DESKTOP_INPUT_MAX_VIEWPORT_RATIO (line 34) | const DESKTOP_INPUT_MAX_VIEWPORT_RATIO = 0.6 function App (line 36) | function App(props: AppProps) { FILE: packages/chatbox/src/components/ConfirmDialog.tsx function ConfirmDialog (line 4) | function ConfirmDialog(props: { FILE: packages/chatbox/src/components/ContentParts.tsx function ContentParts (line 5) | function ContentParts(props: { FILE: packages/chatbox/src/components/CopyButton.tsx function CopyButton (line 4) | function CopyButton(props: { getText: () => string }) { FILE: packages/chatbox/src/components/FragmentDivider.tsx function FragmentDivider (line 4) | function FragmentDivider(props: { item: ChatTimelineFragmentItem }) { FILE: packages/chatbox/src/components/MarkdownContent.tsx function MarkdownContent (line 4) | function MarkdownContent(props: { FILE: packages/chatbox/src/components/MessageCard.tsx function MessageCard (line 8) | function MessageCard(props: { FILE: packages/chatbox/src/components/PaneResizer.tsx type PaneResizerProps (line 3) | interface PaneResizerProps { function PaneResizer (line 10) | function PaneResizer(props: PaneResizerProps) { FILE: packages/chatbox/src/components/PendingList.tsx function PendingList (line 5) | function PendingList(props: { FILE: packages/chatbox/src/components/RunStateCard.tsx function RunStateCard (line 6) | function RunStateCard(props: { FILE: packages/chatbox/src/components/SessionHistoryItem.tsx function SessionHistoryItem (line 6) | function SessionHistoryItem(props: { FILE: packages/chatbox/src/components/TaskCard.tsx function TaskCard (line 6) | function TaskCard(props: { FILE: packages/chatbox/src/components/TasksPanel.tsx function TasksPanel (line 6) | function TasksPanel(props: { FILE: packages/chatbox/src/i18n/index.ts type Locale (line 6) | type Locale = 'zh' | 'en' function toLocale (line 8) | function toLocale(language: string) { FILE: packages/chatbox/src/index.tsx type ChatboxController (line 8) | interface ChatboxController { function mount (line 13) | function mount(el: Element, props: AppProps): ChatboxController { FILE: packages/chatbox/src/types.ts type ChatUsage (line 1) | interface ChatUsage { type ReversibleToolOp (line 7) | type ReversibleToolOp = type ChatRunState (line 24) | type ChatRunState = type ChatTextPart (line 30) | interface ChatTextPart { type ChatImageUrlPart (line 35) | interface ChatImageUrlPart { type ChatUnknownPart (line 42) | interface ChatUnknownPart { type ChatMessageContentPart (line 47) | type ChatMessageContentPart = type ChatToolCall (line 52) | interface ChatToolCall { type ChatMessageMeta (line 61) | interface ChatMessageMeta { type ChatSystemMessage (line 69) | interface ChatSystemMessage { type ChatUserMessage (line 74) | interface ChatUserMessage { type ChatAssistantMessageWithContent (line 79) | interface ChatAssistantMessageWithContent { type ChatAssistantMessageWithToolCalls (line 85) | interface ChatAssistantMessageWithToolCalls { type ChatToolMessage (line 91) | interface ChatToolMessage { type ChatAssistantMessage (line 98) | type ChatAssistantMessage = type ChatMessage (line 102) | type ChatMessage = type ChatMessageRecord (line 108) | interface ChatMessageRecord { type ChatTaskBase (line 117) | interface ChatTaskBase { type QueuedChatTask (line 128) | interface QueuedChatTask extends ChatTaskBase { type RunningChatTask (line 132) | interface RunningChatTask extends ChatTaskBase { type CompletedChatTask (line 137) | interface CompletedChatTask extends ChatTaskBase { type FailedChatTask (line 145) | interface FailedChatTask extends ChatTaskBase { type CancelledChatTask (line 155) | interface CancelledChatTask extends ChatTaskBase { type ChatTaskRecord (line 163) | type ChatTaskRecord = type ChatPendingMessage (line 170) | interface ChatPendingMessage { type ChatModelOption (line 176) | interface ChatModelOption { type ChatProviderOption (line 181) | interface ChatProviderOption { type ChatSessionHistoryItem (line 187) | interface ChatSessionHistoryItem { type ChatTimelineFragmentItem (line 194) | interface ChatTimelineFragmentItem { type ChatTimelineMessageItem (line 200) | interface ChatTimelineMessageItem { type ChatTimelineItem (line 208) | type ChatTimelineItem = type ChatboxViewModel (line 212) | interface ChatboxViewModel { type ChatboxProps (line 229) | interface ChatboxProps extends ChatboxViewModel { FILE: packages/chatbox/src/utils.ts function formatTime (line 4) | function formatTime(timestamp: number) { function formatFragmentTime (line 13) | function formatFragmentTime(timestamp: number) { function formatDuration (line 23) | function formatDuration(task: ChatTaskRecord) { function formatUsage (line 40) | function formatUsage(input?: number, output?: number, total?: number) { function statusLabel (line 61) | function statusLabel(status: ChatTaskRecord['status']) { function statusClass (line 76) | function statusClass(status: ChatTaskRecord['status']) { function runStateLabel (line 91) | function runStateLabel(runState: ChatRunState) { FILE: packages/webdav-explorer/src/App.tsx type MaybePromise (line 8) | type MaybePromise = Promise | T type fs (line 10) | interface fs { type AppProps (line 15) | interface AppProps { function App (line 21) | function App(props: AppProps) { FILE: packages/webdav-explorer/src/components/File.tsx type FolderProps (line 1) | interface FolderProps { function File (line 5) | function File(props: FolderProps) { FILE: packages/webdav-explorer/src/components/FileList.tsx type FileStat (line 7) | interface FileStat { type FileListProps (line 13) | interface FileListProps { function createFileList (line 19) | function createFileList() { FILE: packages/webdav-explorer/src/components/Folder.tsx type FolderProps (line 1) | interface FolderProps { function Folder (line 7) | function Folder(props: FolderProps) { FILE: packages/webdav-explorer/src/components/NewFolder.tsx type NewFolderProps (line 4) | interface NewFolderProps { function NewFolder (line 10) | function NewFolder(props: NewFolderProps) { FILE: packages/webdav-explorer/src/i18n/index.ts type Locale (line 6) | type Locale = 'zh' | 'en' function toLocale (line 8) | function toLocale(language: string) { FILE: packages/webdav-explorer/src/index.tsx function mount (line 6) | function mount(el: Element, props: AppProps) { FILE: src/ai/bash/fs.ts constant FILE_MODE (line 27) | const FILE_MODE = 0o644 constant DIR_MODE (line 28) | const DIR_MODE = 0o755 constant VAULT_MOUNT_POINT (line 29) | const VAULT_MOUNT_POINT = '/vault' type ReadFileOptions (line 30) | type ReadFileOptions = { encoding?: BufferEncoding | null } type WriteFileOptions (line 31) | type WriteFileOptions = { encoding?: BufferEncoding } type SnapshotKind (line 32) | type SnapshotKind = 'file' | 'dir' type VaultSnapshotNode (line 33) | type VaultSnapshotNode = { function encodeBase64 (line 39) | function encodeBase64(content: Uint8Array) { function getEncoding (line 50) | function getEncoding( function decodeContent (line 59) | function decodeContent( function encodeContent (line 79) | function encodeContent( function toArrayBuffer (line 99) | function toArrayBuffer(content: Uint8Array) { function getPathDepth (line 106) | function getPathDepth(path: string) { function normalizeVirtualPath (line 110) | function normalizeVirtualPath(inputPath: string) { function joinVirtualPath (line 115) | function joinVirtualPath(parent: string, name: string) { function ensureNotEscapingRoot (line 119) | function ensureNotEscapingRoot(inputPath: string) { function normalizeReversibleVaultPath (line 127) | function normalizeReversibleVaultPath(path: string) { function mapStat (line 135) | function mapStat(stat: { function mapAbstractFileStat (line 150) | function mapAbstractFileStat(file: TAbstractFile): FsStat { function copyRecursive (line 166) | async function copyRecursive( function removeRecursive (line 193) | async function removeRecursive( function listVaultPaths (line 211) | async function listVaultPaths(app: App) { class ReversibleOpRecorder (line 230) | class ReversibleOpRecorder { method recordCreate (line 233) | recordCreate(vaultPath: string, kind: SnapshotKind) { method recordUpdate (line 245) | recordUpdate(vaultPath: string, contentBase64: string) { method recordDelete (line 260) | recordDelete(snapshot: VaultSnapshotNode) { method getOperations (line 278) | getOperations(): ReversibleToolOp[] { class ObsidianVaultFs (line 283) | class ObsidianVaultFs implements IFileSystem { method constructor (line 287) | constructor( method withBatch (line 299) | private async withBatch(fn: () => Promise): Promise { method checkPermission (line 308) | private async checkPermission( method toPermissionPath (line 336) | private toPermissionPath(path: string) { method toVaultPath (line 343) | private toVaultPath(inputPath: string) { method statInternal (line 348) | private async statInternal(inputPath: string) { method readFileContentBase64 (line 356) | private async readFileContentBase64(target: TFile) { method snapshotNode (line 364) | private async snapshotNode( method snapshotSubtree (line 396) | private async snapshotSubtree(path: string) { method toSnapshotMap (line 407) | private toSnapshotMap(entries: VaultSnapshotNode[]) { method recordDeleteSnapshots (line 411) | private recordDeleteSnapshots(entries: VaultSnapshotNode[]) { method recordTargetDiff (line 420) | private recordTargetDiff( method deleteAbstractFile (line 464) | private async deleteAbstractFile(target: TAbstractFile) { method recordPath (line 478) | private recordPath(inputPath: string) { method forgetPath (line 489) | private forgetPath(inputPath: string) { method assertExists (line 499) | private assertExists(path: string) { method readFile (line 507) | async readFile( method readFileBuffer (line 516) | async readFileBuffer(path: string): Promise { method writeFile (line 531) | async writeFile( method appendFile (line 563) | async appendFile( method exists (line 581) | async exists(path: string): Promise { method stat (line 591) | async stat(path: string): Promise { method mkdir (line 605) | async mkdir(path: string, options?: MkdirOptions): Promise { method readdir (line 630) | async readdir(path: string): Promise { method readdirWithFileTypes (line 648) | async readdirWithFileTypes(path: string) { method rm (line 670) | async rm(path: string, options?: RmOptions): Promise { method cp (line 695) | async cp(src: string, dest: string, options?: CpOptions): Promise { method mv (line 700) | async mv(src: string, dest: string): Promise { method resolvePath (line 726) | resolvePath(base: string, path: string): string { method getAllPaths (line 730) | getAllPaths(): string[] { method chmod (line 734) | async chmod(path: string, _mode: number): Promise { method symlink (line 738) | async symlink(_target: string, linkPath: string): Promise { method link (line 744) | async link(_existingPath: string, newPath: string): Promise { method readlink (line 750) | async readlink(path: string): Promise { method lstat (line 754) | async lstat(path: string): Promise { method realpath (line 758) | async realpath(path: string): Promise { method utimes (line 763) | async utimes(path: string, _atime: Date, _mtime: Date): Promise { class MountedVaultFs (line 775) | class MountedVaultFs implements IFileSystem { method constructor (line 778) | constructor(private readonly vaultFs: ObsidianVaultFs) {} method isRoot (line 780) | private isRoot(path: string) { method isVaultMount (line 784) | private isVaultMount(path: string) { method isVaultPath (line 788) | private isVaultPath(path: string) { method toVaultRelative (line 796) | private toVaultRelative(path: string) { method route (line 804) | private route(path: string) { method genericCp (line 818) | private async genericCp(src: string, dest: string, options?: CpOptions) { method readFile (line 839) | async readFile( method readFileBuffer (line 852) | async readFileBuffer(path: string): Promise { method writeFile (line 862) | async writeFile( method appendFile (line 876) | async appendFile( method exists (line 890) | async exists(path: string): Promise { method stat (line 898) | async stat(path: string): Promise { method mkdir (line 913) | async mkdir(path: string, options?: MkdirOptions): Promise { method readdir (line 921) | async readdir(path: string): Promise { method readdirWithFileTypes (line 933) | async readdirWithFileTypes(path: string) { method rm (line 960) | async rm(path: string, options?: RmOptions): Promise { method cp (line 968) | async cp(src: string, dest: string, options?: CpOptions): Promise { method mv (line 972) | async mv(src: string, dest: string): Promise { method resolvePath (line 986) | resolvePath(base: string, path: string): string { method getAllPaths (line 990) | getAllPaths(): string[] { method chmod (line 999) | async chmod(path: string, mode: number): Promise { method symlink (line 1007) | async symlink(target: string, linkPath: string): Promise { method link (line 1016) | async link(existingPath: string, newPath: string): Promise { method readlink (line 1025) | async readlink(path: string): Promise { method lstat (line 1032) | async lstat(path: string): Promise { method realpath (line 1036) | async realpath(path: string): Promise { method utimes (line 1041) | async utimes(path: string, atime: Date, mtime: Date): Promise { FILE: src/ai/bash/runtime.test.ts type MockEntryFile (line 12) | interface MockEntryFile { type MockEntryFolder (line 18) | interface MockEntryFolder { type MockEntry (line 23) | type MockEntry = MockEntryFile | MockEntryFolder type MockAbstractFile (line 25) | interface MockAbstractFile { type MockFile (line 31) | interface MockFile extends MockAbstractFile { type MockFolder (line 38) | interface MockFolder extends MockAbstractFile { class MemoryVaultStore (line 42) | class MemoryVaultStore { method constructor (line 47) | constructor( method normalize (line 59) | normalize(path: string) { method dirname (line 63) | dirname(path: string) { method basename (line 70) | basename(path: string) { method ensureFolder (line 78) | ensureFolder(path: string) { method exists (line 92) | exists(path: string) { method stat (line 96) | stat(path: string) { method readBinary (line 109) | readBinary(path: string) { method writeBinary (line 120) | writeBinary(path: string, data: ArrayBuffer) { method remove (line 130) | remove(path: string) { method removeRecursive (line 134) | removeRecursive(path: string) { method rename (line 143) | rename(fromPath: string, toPath: string) { method listChildren (line 162) | listChildren(path: string) { function createMockVault (line 172) | function createMockVault( function createApp (line 277) | function createApp(vault: Vault) { FILE: src/ai/bash/runtime.ts type VaultBashExecOptions (line 12) | interface VaultBashExecOptions { function createVaultBash (line 19) | async function createVaultBash( function execVaultBash (line 39) | async function execVaultBash( FILE: src/ai/config.ts constant DEFAULT_NPM_PACKAGE (line 17) | const DEFAULT_NPM_PACKAGE = '@ai-sdk/openai-compatible' constant DEFAULT_MODALITIES (line 19) | const DEFAULT_MODALITIES: AIModelConfig['modalities'] = { constant DEFAULT_LIMIT (line 24) | const DEFAULT_LIMIT: AIModelConfig['limit'] = { context: 0, output: 0 } function formatSchemaIssues (line 26) | function formatSchemaIssues(error: z.ZodError): string { function createModelConfig (line 35) | function createModelConfig( function createProviderConfig (line 67) | function createProviderConfig( function sanitizeModels (line 84) | function sanitizeModels(models: AIModelInputs | undefined): AIModelConfi... function sanitizeProviders (line 93) | function sanitizeProviders(providers: unknown): AIProviderConfigs { function sanitizeDefaultSelections (line 107) | function sanitizeDefaultSelections( function resolveInitialSelection (line 118) | function resolveInitialSelection( function slugifyProviderId (line 129) | function slugifyProviderId(name: string): string { function getProviderById (line 137) | function getProviderById( function getModelById (line 144) | function getModelById( function listProviders (line 151) | function listProviders( function listModels (line 157) | function listModels( function getFirstModel (line 163) | function getFirstModel(provider: AIProviderConfig | undefined) { function getPresetProviders (line 169) | function getPresetProviders(): AIProviderDefinitions { function listPresetProviders (line 182) | function listPresetProviders(): AIProviderDefinition[] { function findPresetModelById (line 188) | function findPresetModelById(modelId: string): AIModelConfig | undefined { function createProviderFromPreset (line 200) | function createProviderFromPreset( FILE: src/ai/file-operation.ts constant AI_FILE_OPERATIONS (line 1) | const AI_FILE_OPERATIONS = [ type AIFileOperation (line 11) | type AIFileOperation = (typeof AI_FILE_OPERATIONS)[number] type AISinglePathFileOperation (line 12) | type AISinglePathFileOperation = Exclude< type AIDualPathFileOperation (line 16) | type AIDualPathFileOperation = Extract FILE: src/ai/permission-guard.test.ts function getRuntimeStore (line 18) | function getRuntimeStore( function createGuard (line 34) | function createGuard( FILE: src/ai/permission-guard.ts type FSSinglePathPermissionRequest (line 10) | interface FSSinglePathPermissionRequest { type FSDualPathPermissionRequest (line 18) | interface FSDualPathPermissionRequest { type FSPermissionRequest (line 27) | type FSPermissionRequest = type PermissionRequest (line 31) | type PermissionRequest = FSPermissionRequest type PermissionGuard (line 32) | type PermissionGuard = (request: PermissionRequest) => Promise type RuntimeAutoApproveOperationStore (line 34) | interface RuntimeAutoApproveOperationStore { function isDualPathRequest (line 39) | function isDualPathRequest( function getPermissionRequestOperationSignature (line 45) | function getPermissionRequestOperationSignature( function formatDeniedSummary (line 51) | function formatDeniedSummary(request: FSPermissionRequest) { function createPermissionGuard (line 59) | function createPermissionGuard( FILE: src/ai/providers/openai.ts function assertProviderUsable (line 8) | function assertProviderUsable(provider: AIProviderConfig) { method createLanguageModel (line 16) | createLanguageModel(provider, modelId) { FILE: src/ai/providers/registry.ts function getProviderResolver (line 4) | function getProviderResolver(_provider: AIProviderConfig) { FILE: src/ai/providers/types.ts type ResolvedLanguageModel (line 4) | interface ResolvedLanguageModel { type AIProviderResolver (line 9) | interface AIProviderResolver { FILE: src/ai/runtime.ts type GenerateAssistantTurnRequest (line 12) | interface GenerateAssistantTurnRequest { type GenerateAssistantTurnResult (line 21) | interface GenerateAssistantTurnResult { function toTextParts (line 26) | function toTextParts(text?: string | null): AIMessageContentPart[] | null { function toModelMessages (line 33) | function toModelMessages(messages: AIMessage[]): ModelMessage[] { function toAISDKTools (line 112) | function toAISDKTools(tools: AIToolDefinition[]) { function toAssistantMessage (line 124) | function toAssistantMessage(result: any) { function assertProviderUsable (line 148) | function assertProviderUsable(provider: AIProviderConfig) { function generateAssistantTurn (line 152) | async function generateAssistantTurn( FILE: src/ai/search-path-filter.ts type SearchPathEntry (line 4) | interface SearchPathEntry { function createGlobRules (line 9) | function createGlobRules(patterns: string[]) { function matchesIncludedSearchGlob (line 18) | function matchesIncludedSearchGlob(path: string, inclusionRules: GlobMat... function matchesExcludedSearchGlob (line 25) | function matchesExcludedSearchGlob(path: string, exclusionRules: GlobMat... function normalizeExtension (line 42) | function normalizeExtension(extension: string) { function shouldIncludeByExtension (line 50) | function shouldIncludeByExtension(path: string, extensions: string[]) { function isFilePathInScope (line 58) | function isFilePathInScope(filePath: string, basePath: string) { function filterVaultEntries (line 65) | function filterVaultEntries( FILE: src/ai/tool-call-repeat.ts constant REPEATED_TOOL_CALL_THRESHOLD (line 3) | const REPEATED_TOOL_CALL_THRESHOLD = 5 type ToolCallRepeatState (line 5) | interface ToolCallRepeatState { function sortJsonValue (line 11) | function sortJsonValue(value: unknown): unknown { function normalizeToolArguments (line 27) | function normalizeToolArguments(argumentsText: string) { function createToolCallRoundSignature (line 35) | function createToolCallRoundSignature(toolCalls: AIToolCall[]) { function updateToolCallRepeatState (line 44) | function updateToolCallRepeatState( FILE: src/ai/tools.test.ts function makeEntries (line 7) | function makeEntries( function createToolApp (line 13) | function createToolApp() { FILE: src/ai/tools.ts type ReplaceResult (line 9) | interface ReplaceResult { function encodeTextBase64 (line 14) | function encodeTextBase64(content: string) { function isAllowedBashCwd (line 46) | function isAllowedBashCwd(pathValue: string) { type SpawnToolHandler (line 57) | interface SpawnToolHandler { type CreateAIToolsOptions (line 68) | interface CreateAIToolsOptions { function replaceUniqueOccurrence (line 74) | function replaceUniqueOccurrence( function createAITools (line 103) | function createAITools( FILE: src/ai/transport/obsidian-fetch.ts type FetchFunction (line 4) | type FetchFunction = ( function toHeadersRecord (line 9) | function toHeadersRecord(headers?: HeadersInit) { function toRequestParts (line 27) | async function toRequestParts(input: RequestInfo | URL, init?: RequestIn... FILE: src/ai/tree.ts type TreeNode (line 1) | interface TreeNode { function flattenTreeNodes (line 8) | function flattenTreeNodes(nodes: TreeNode[], depth: number) { FILE: src/ai/types.ts type AIModelConfig (line 79) | type AIModelConfig = z.infer type AIModelInput (line 80) | type AIModelInput = z.infer type AIModelConfigs (line 83) | type AIModelConfigs = z.infer type AIModelInputs (line 84) | type AIModelInputs = z.infer type AIProviderDefinition (line 99) | type AIProviderDefinition = z.infer type AIProviderDefinitions (line 100) | type AIProviderDefinitions = z.infer type AIProviderConfig (line 118) | type AIProviderConfig = z.infer type AIProviderInput (line 119) | type AIProviderInput = z.infer type AIProviderConfigs (line 120) | type AIProviderConfigs = z.infer type AIProviderInputs (line 121) | type AIProviderInputs = z.infer type AIUsage (line 123) | type AIUsage = DomainChatUsage type AITextPart (line 124) | type AITextPart = Extract type AIImageUrlPart (line 125) | type AIImageUrlPart = Extract< type AIMessageContentPart (line 129) | type AIMessageContentPart = DomainChatMessageContentPart type AIToolCall (line 130) | type AIToolCall = DomainChatToolCall type AIMessage (line 131) | type AIMessage = DomainChatMessage type AITaskStatus (line 132) | type AITaskStatus = DomainChatTaskRecord['status'] type AIMessageMeta (line 133) | type AIMessageMeta = DomainChatMessageMeta type AIMessageRecord (line 134) | type AIMessageRecord = DomainChatMessageRecord type AISession (line 135) | type AISession = DomainChatSession type AITaskRecord (line 136) | type AITaskRecord = DomainChatTaskRecord type AIToolExecutionContext (line 138) | interface AIToolExecutionContext { type ToolExecutionResult (line 145) | interface ToolExecutionResult { type AIToolDefinition (line 150) | interface AIToolDefinition { FILE: src/api/delta.ts type DeltaEntry (line 8) | interface DeltaEntry { type DeltaResponse (line 17) | interface DeltaResponse { type GetDeltaInput (line 26) | interface GetDeltaInput { FILE: src/api/latestDeltaCursor.ts type GetLatestDeltaCursorInput (line 6) | interface GetLatestDeltaCursorInput { FILE: src/api/webdav.ts type WebDAVResponse (line 10) | interface WebDAVResponse { function extractNextLink (line 28) | function extractNextLink(linkHeader: string): string | null { function convertToFileStat (line 33) | function convertToFileStat( function getDirectoryContents (line 54) | async function getDirectoryContents( FILE: src/chat/domain.ts type ChatFragment (line 47) | interface ChatFragment { type ChatSessionPermissions (line 55) | interface ChatSessionPermissions { type ChatSession (line 59) | interface ChatSession { type ChatSessionIndexItem (line 72) | interface ChatSessionIndexItem { function cloneUsage (line 79) | function cloneUsage(usage?: ChatUsage) { function cloneMessage (line 87) | function cloneMessage(message: ChatMessage): ChatMessage { function cloneReversibleToolOp (line 122) | function cloneReversibleToolOp(op: ReversibleToolOp): ReversibleToolOp { function cloneMessageRecord (line 154) | function cloneMessageRecord( function cloneTask (line 170) | function cloneTask(task: ChatTaskRecord): ChatTaskRecord { function cloneSession (line 176) | function cloneSession(session: ChatSession): ChatSession { function isTerminalTask (line 191) | function isTerminalTask(task: ChatTaskRecord) { function createQueuedTask (line 199) | function createQueuedTask(task: ChatTaskBase): QueuedChatTask { function createRunningTask (line 206) | function createRunningTask( function toRunningTask (line 217) | function toRunningTask( function toCompletedTask (line 228) | function toCompletedTask( function toFailedTask (line 243) | function toFailedTask( function toCancelledTask (line 261) | function toCancelledTask( function mutateTaskRecord (line 277) | function mutateTaskRecord(target: ChatTaskRecord, next: ChatTaskRecord) { FILE: src/chatbox/types.ts type ChatModelOption (line 18) | interface ChatModelOption { type ChatProviderOption (line 23) | interface ChatProviderOption { type ChatSessionHistoryItem (line 29) | interface ChatSessionHistoryItem { type ChatTimelineFragmentItem (line 36) | interface ChatTimelineFragmentItem { type ChatTimelineMessageItem (line 42) | interface ChatTimelineMessageItem { type ChatTimelineItem (line 50) | type ChatTimelineItem = type ChatboxViewModel (line 54) | interface ChatboxViewModel { type ChatboxProps (line 71) | interface ChatboxProps extends ChatboxViewModel { type ChatboxController (line 94) | interface ChatboxController { FILE: src/components/AIPermissionModal.ts type AIPermissionResult (line 6) | type AIPermissionResult = 'approve' | 'auto-approve-operation' | 'deny' function getOperationLabel (line 8) | function getOperationLabel(operation: AIFileOperation): string { class AIPermissionModal (line 27) | class AIPermissionModal extends Modal { method constructor (line 32) | constructor( method renderSinglePathRequest (line 39) | private renderSinglePathRequest() { method renderDualPathRequest (line 58) | private renderDualPathRequest() { method onOpen (line 94) | onOpen() { method onClose (line 140) | onClose() { method open (line 149) | open(): Promise { FILE: src/components/CacheClearModal.ts type CacheClearOptions (line 7) | interface CacheClearOptions { class CacheClearModal (line 13) | class CacheClearModal extends Modal { method constructor (line 20) | constructor( method onOpen (line 27) | onOpen() { method onClose (line 117) | onClose() { method clearSelectedCaches (line 125) | static async clearSelectedCaches(options: CacheClearOptions) { FILE: src/components/CacheRestoreModal.ts class CacheRestoreModal (line 8) | class CacheRestoreModal extends Modal { method constructor (line 13) | constructor( method onOpen (line 22) | async onOpen() { method loadFileList (line 52) | private async loadFileList() { method renderEmptyList (line 130) | private renderEmptyList() { method onClose (line 138) | onClose() { FILE: src/components/CacheSaveModal.ts class CacheSaveModal (line 6) | class CacheSaveModal extends Modal { method constructor (line 9) | constructor( method onOpen (line 18) | onOpen() { method onClose (line 66) | onClose() { FILE: src/components/DeleteConfirmModal.ts class DeleteConfirmModal (line 5) | class DeleteConfirmModal extends Modal { method constructor (line 9) | constructor( method onOpen (line 17) | onOpen() { method open (line 85) | async open(): Promise<{ FILE: src/components/FailedTasksModal.ts type FailedTaskInfo (line 4) | interface FailedTaskInfo { class FailedTasksModal (line 10) | class FailedTasksModal extends Modal { method constructor (line 11) | constructor( method onOpen (line 18) | onOpen() { method onClose (line 60) | onClose() { FILE: src/components/FilterEditorModal.ts type FilterType (line 7) | enum FilterType { class FilterEditorModal (line 12) | class FilterEditorModal extends Modal { method constructor (line 17) | constructor( method onOpen (line 27) | onOpen() { method onClose (line 147) | onClose() { FILE: src/components/LogoutConfirmModal.ts class LogoutConfirmModal (line 4) | class LogoutConfirmModal extends Modal { method constructor (line 7) | constructor(app: App, onConfirm: () => void) { method onOpen (line 12) | onOpen() { method onClose (line 35) | onClose() { FILE: src/components/ModelEditorModal.ts type ModelEditorOptions (line 9) | interface ModelEditorOptions { class ModelEditorModal (line 13) | class ModelEditorModal extends Modal { method constructor (line 16) | constructor( method onOpen (line 27) | onOpen() { method onClose (line 87) | onClose() { FILE: src/components/ProviderEditorModal.ts class ProviderEditorModal (line 10) | class ProviderEditorModal extends Modal { method constructor (line 13) | constructor( method onOpen (line 23) | onOpen() { method render (line 27) | private render() { method deleteModel (line 186) | private deleteModel(model: AIModelConfig) { method onClose (line 193) | onClose() { FILE: src/components/ProvidersManagerModal.ts constant CUSTOM_OPTION (line 14) | const CUSTOM_OPTION = '__custom__' class ProvidersManagerModal (line 16) | class ProvidersManagerModal extends Modal { method constructor (line 19) | constructor( method onOpen (line 26) | onOpen() { method render (line 30) | private render() { method deleteProvider (line 156) | private async deleteProvider(provider: AIProviderConfig) { method onClose (line 170) | onClose() { FILE: src/components/SelectRemoteBaseDirModal.ts class SelectRemoteBaseDirModal (line 10) | class SelectRemoteBaseDirModal extends Modal { method constructor (line 11) | constructor( method onOpen (line 19) | async onOpen() { method onClose (line 50) | onClose() { FILE: src/components/SyncConfirmModal.ts class SyncConfirmModal (line 5) | class SyncConfirmModal extends Modal { method constructor (line 8) | constructor(app: App, onConfirm: () => void) { method onOpen (line 13) | async onOpen() { method onClose (line 48) | onClose() { FILE: src/components/SyncProgressModal.ts class SyncProgressModal (line 24) | class SyncProgressModal extends Modal { method constructor (line 41) | constructor( method update (line 57) | public update(): void { method onOpen (line 164) | onOpen() { method onClose (line 281) | onClose(): void { method updateCacheProgress (line 291) | private updateCacheProgress(total: number, completed: number): void { FILE: src/components/SyncRibbonManager.ts class SyncRibbonManager (line 10) | class SyncRibbonManager { method constructor (line 14) | constructor(private plugin: NutstorePlugin) { method update (line 82) | public update() { FILE: src/components/TaskListConfirmModal.ts class TaskListConfirmModal (line 6) | class TaskListConfirmModal extends Modal { method constructor (line 10) | constructor( method onOpen (line 18) | onOpen() { method open (line 83) | async open(): Promise<{ confirm: boolean; tasks: BaseTask[] }> { FILE: src/components/TextAreaModal.ts class TextAreaModal (line 4) | class TextAreaModal extends Modal { method constructor (line 5) | constructor( method onOpen (line 12) | onOpen() { method onClose (line 39) | onClose() { FILE: src/consts.ts constant NS_NSDAV_ENDPOINT (line 3) | const NS_NSDAV_ENDPOINT = process.env.NS_NSDAV_ENDPOINT! constant NS_DAV_ENDPOINT (line 4) | const NS_DAV_ENDPOINT = process.env.NS_DAV_ENDPOINT! constant PLUGIN_VERSION (line 5) | const PLUGIN_VERSION = process.env.PLUGIN_VERSION! constant API_VER_STAT_FOLDER (line 7) | const API_VER_STAT_FOLDER = '0.13.27' constant API_VER_REQURL (line 8) | const API_VER_REQURL = '0.13.26' // desktop ver 0.13.26, iOS ver 1.1.1 constant API_VER_REQURL_ANDROID (line 9) | const API_VER_REQURL_ANDROID = '0.14.6' // Android ver 1.2.1 constant API_VER_ENSURE_REQURL_OK (line 10) | const API_VER_ENSURE_REQURL_OK = '1.0.0' // always bypass CORS here constant VALID_REQURL (line 12) | const VALID_REQURL = constant IN_DEV (line 16) | const IN_DEV = process.env.NODE_ENV === 'development' FILE: src/events/sso-receive.ts type SsoRxProps (line 3) | interface SsoRxProps { FILE: src/events/sync-end.ts type SyncEndProps (line 3) | interface SyncEndProps { FILE: src/events/sync-preparing.ts type SyncPreparingProps (line 3) | interface SyncPreparingProps { FILE: src/events/sync-progress.ts type UpdateSyncProgress (line 4) | interface UpdateSyncProgress { FILE: src/events/sync-start.ts type SyncStartProps (line 3) | interface SyncStartProps { FILE: src/events/sync-update-mtime-progress.ts type UpdateSyncUpdateMtimeProgress (line 3) | interface UpdateSyncUpdateMtimeProgress { FILE: src/events/vault.ts type VaultEventProps (line 3) | interface VaultEventProps { FILE: src/fs/fs.interface.ts type FsWalkResult (line 4) | interface FsWalkResult { FILE: src/fs/local-vault.ts class LocalVaultFileSystem (line 17) | class LocalVaultFileSystem implements AbstractFileSystem { method constructor (line 18) | constructor( method walk (line 31) | async walk() { method buildRules (line 60) | private buildRules(rules: GlobMatchOptions[] = []): GlobMatch[] { FILE: src/fs/nutstore.ts class NutstoreFileSystem (line 23) | class NutstoreFileSystem implements AbstractFileSystem { method constructor (line 26) | constructor( method walk (line 46) | async walk() { method buildRules (line 112) | private buildRules(rules: GlobMatchOptions[] = []): GlobMatch[] { FILE: src/fs/utils/complete-loss-dir.ts function completeLossDir (line 10) | function completeLossDir( FILE: src/fs/utils/is-root.ts function isRoot (line 1) | function isRoot(path: string) { FILE: src/i18n/index.ts type CustomTypeOptions (line 16) | interface CustomTypeOptions { FILE: src/index.ts class NutstorePlugin (line 40) | class NutstorePlugin extends Plugin { method onload (line 63) | async onload() { method onunload (line 85) | async onunload() { method loadSettings (line 96) | async loadSettings() { method saveSettings (line 184) | async saveSettings() { method toggleSyncUI (line 189) | toggleSyncUI(isSyncing: boolean) { method getDecryptedOAuthInfo (line 194) | async getDecryptedOAuthInfo() { method getToken (line 198) | async getToken() { method isAccountConfigured (line 213) | isAccountConfigured(): boolean { method remoteBaseDir (line 231) | get remoteBaseDir() { FILE: src/model/stat.model.ts type StatModel (line 1) | type StatModel = FILE: src/model/sync-record.model.ts type SyncRecordModel (line 3) | interface SyncRecordModel { FILE: src/polyfill.test.ts method cwd (line 13) | cwd() { FILE: src/polyfill.ts type ProcessLike (line 1) | type ProcessLike = typeof globalThis.process & { method cwd (line 6) | cwd() { FILE: src/services/cache.service.v1.ts class CacheServiceV1 (line 19) | class CacheServiceV1 { method constructor (line 20) | constructor( method saveCache (line 28) | async saveCache(filename: string) { method restoreCache (line 81) | async restoreCache(filename: string) { method deleteCache (line 145) | async deleteCache(filename: string): Promise { method loadCacheFileList (line 168) | async loadCacheFileList() { FILE: src/services/chat.service.test.ts function createStore (line 13) | function createStore(store: Map) { method reset (line 33) | reset() { function createPlugin (line 59) | function createPlugin() { function createPluginWithTwoProviders (line 84) | function createPluginWithTwoProviders() { function createPluginWithVault (line 121) | function createPluginWithVault(initialFiles: Record = {}) { function deferredCompletion (line 203) | function deferredCompletion() { function deferredResult (line 248) | function deferredResult() { function getActiveSession (line 259) | function getActiveSession(service: ChatService) { function getLoadedSession (line 263) | function getLoadedSession(service: ChatService, sessionId: string) { method createFolder (line 994) | async createFolder(path: string) { method createBinary (line 999) | async createBinary(path: string, data: ArrayBuffer) { method modifyBinary (line 1005) | async modifyBinary(file: any, data: ArrayBuffer) { method delete (line 1011) | async delete(file: any) { method trash (line 1023) | async trash(file: any) { FILE: src/services/chat.service.ts constant MAX_TASK_DEPTH (line 56) | const MAX_TASK_DEPTH = 2 constant MAX_CONCURRENT_TASKS_PER_SESSION (line 57) | const MAX_CONCURRENT_TASKS_PER_SESSION = 3 constant CHAT_META_KEY (line 58) | const CHAT_META_KEY = 'chat_meta' constant CHAT_INDEX_KEY (line 59) | const CHAT_INDEX_KEY = 'chat_index' constant INTERRUPTED_TASK_CANCEL_REASON (line 60) | const INTERRUPTED_TASK_CANCEL_REASON = 'interrupted_by_restart' constant INTERRUPTED_TASK_FAILURE_STAGE (line 61) | const INTERRUPTED_TASK_FAILURE_STAGE = 'interrupted_by_restart' constant COMPRESSION_PROMPT (line 62) | const COMPRESSION_PROMPT = [ type ResolvedToolResult (line 73) | interface ResolvedToolResult { type DeferredTaskCompletion (line 79) | interface DeferredTaskCompletion { type AgentRunResult (line 85) | interface AgentRunResult { type SessionRuntimeState (line 93) | interface SessionRuntimeState { function toTextParts (line 100) | function toTextParts(text: string): AIMessageContentPart[] { function messageToText (line 104) | function messageToText(message: Pick | AIMessage) { function getAssistantToolCalls (line 117) | function getAssistantToolCalls(message: ChatMessage) { function getPathDepth (line 121) | function getPathDepth(path: string) { function getParentVaultPaths (line 125) | function getParentVaultPaths(path: string) { function normalizeReversibleVaultPath (line 136) | function normalizeReversibleVaultPath(path: string) { function normalizeReversibleToolOpRecord (line 145) | function normalizeReversibleToolOpRecord( function decodeBase64ToArrayBuffer (line 159) | function decodeBase64ToArrayBuffer(contentBase64: string) { function isVaultFolder (line 175) | function isVaultFolder( function isVaultFile (line 181) | function isVaultFile(target: unknown): target is { path: string } { function deriveTitle (line 185) | function deriveTitle(session: Pick) { function createVaultToolGuidance (line 198) | function createVaultToolGuidance() { function createMainSystemPrompt (line 207) | function createMainSystemPrompt(maxDepth: number) { function createSubagentSystemPrompt (line 217) | function createSubagentSystemPrompt(canSpawn: boolean) { class ChatService (line 229) | class ChatService { method constructor (line 252) | constructor(private plugin: NutstorePlugin) {} method initialize (line 254) | async initialize() { method initializeInternal (line 266) | private async initializeInternal() { method subscribe (line 291) | subscribe(listener: () => void) { method handleSettingsChanged (line 298) | async handleSettingsChanged() { method getViewProps (line 314) | getViewProps(): ChatboxProps { method ensureSession (line 418) | async ensureSession() { method createSession (line 422) | async createSession() { method switchSession (line 435) | async switchSession(sessionId: string) { method deleteSession (line 447) | async deleteSession(sessionId: string) { method selectProvider (line 480) | selectProvider(providerId: string) { method selectModel (line 530) | selectModel(modelId: string) { method sendMessage (line 577) | async sendMessage(text: string) { method createFragmentForActiveSession (line 610) | createFragmentForActiveSession() { method compressContext (line 626) | async compressContext() { method cancelTask (line 714) | cancelTask(taskId: string) { method stopActiveSessionRun (line 752) | stopActiveSessionRun() { method deleteMessage (line 761) | deleteMessage(messageId: string) { method recallMessage (line 814) | async recallMessage(messageId: string, options?: { restoreFiles?: bool... method regenerateMessage (line 844) | async regenerateMessage(messageId: string) { method stopSessionRun (line 874) | private async stopSessionRun(session: AISession) { method loadSessionIndex (line 897) | private async loadSessionIndex() { method loadSessionById (line 928) | private async loadSessionById(sessionId: string) { method persistSession (line 951) | private async persistSession(session: AISession) { method persistMetaAndIndex (line 958) | private async persistMetaAndIndex() { method rehydrateSession (line 972) | private rehydrateSession(session: AISession) { method normalizeSession (line 998) | private normalizeSession(session: AISession): AISession { method isChatMetaRecord (line 1081) | private isChatMetaRecord(value: unknown): value is ChatMetaRecord { method upsertSessionIndexItem (line 1089) | private upsertSessionIndexItem( method buildTimeline (line 1125) | private buildTimeline(session: AISession): ChatboxProps['timeline'] { method collectOtherSessionTasks (line 1178) | private collectOtherSessionTasks() { method getLoadedActiveSession (line 1185) | private getLoadedActiveSession() { method startSessionProcessor (line 1191) | private async startSessionProcessor(sessionId: string) { method runSessionProcessor (line 1214) | private async runSessionProcessor(sessionId: string) { method flushPendingMessages (line 1370) | private flushPendingMessages(session: AISession) { method getRuntime (line 1395) | private getRuntime(sessionId: string): SessionRuntimeState { method getAutoApproveRequests (line 1407) | private getAutoApproveRequests(sessionId: string) { method createPendingMessage (line 1416) | private createPendingMessage(text: string): ChatPendingMessage { method createFragment (line 1424) | private createFragment(session: AISession): ChatFragment { method getActiveFragment (line 1437) | private getActiveFragment(session: AISession) { method appendUserMessage (line 1444) | private appendUserMessage( method finishStoppedSessionRun (line 1462) | private finishStoppedSessionRun(session: AISession, fragment: ChatFrag... method cancelAllNonTerminalTasks (line 1470) | private cancelAllNonTerminalTasks(session: AISession, cancelReason: st... method cleanupSessionTaskTracking (line 1492) | private cleanupSessionTaskTracking(session: AISession) { method runTask (line 1498) | private async runTask(task: AITaskRecord) { method runBackgroundTaskLoop (line 1556) | private async runBackgroundTaskLoop( method resolveToolCalls (line 1644) | private async resolveToolCalls( method resolveSingleToolCall (line 1671) | private async resolveSingleToolCall( method startSpawnedTask (line 1700) | private startSpawnedTask( method spawnTask (line 1739) | private spawnTask(params: { method finishTaskAsCompleted (line 1802) | private finishTaskAsCompleted( method finishTaskAsFailed (line 1831) | private finishTaskAsFailed( method finishTaskAsCancelled (line 1856) | private finishTaskAsCancelled(task: AITaskRecord, cancelReason: string) { method countRunningTasksForSession (line 1880) | private countRunningTasksForSession(session: AISession) { method startQueuedTasksForSession (line 1884) | private startQueuedTasksForSession(session: AISession) { method createToolsForContext (line 1910) | private createToolsForContext( method executeToolCall (line 1944) | private async executeToolCall( method buildMessagesForFragment (line 1984) | private buildMessagesForFragment( method restoreFilesForRecall (line 1999) | private async restoreFilesForRecall( method deleteVaultPathIfExists (line 2071) | private async deleteVaultPathIfExists(path: string) { method ensureVaultDirectory (line 2087) | private async ensureVaultDirectory(path: string) { method writeVaultFile (line 2101) | private async writeVaultFile(path: string, contentBase64: string) { method removeUnmatchedToolCalls (line 2116) | private removeUnmatchedToolCalls(fragment: ChatFragment) { method buildTaskToolPayload (line 2158) | private buildTaskToolPayload(task: AITaskRecord) { method buildImmediateTaskFailurePayload (line 2186) | private buildImmediateTaskFailurePayload( method createDeferredTaskCompletion (line 2215) | private createDeferredTaskCompletion(): DeferredTaskCompletion { method resolveTaskCompletion (line 2230) | private resolveTaskCompletion( method cleanupTaskTracking (line 2242) | private cleanupTaskTracking(taskId: string) { method requireToolString (line 2247) | private requireToolString(value: unknown, field: string) { method isTaskTerminal (line 2254) | private isTaskTerminal(task: AITaskRecord) { method isTaskDescendantOf (line 2258) | private isTaskDescendantOf( method getProviderOrThrow (line 2275) | private getProviderOrThrow(session: AISession) { method getProviderByIdOrThrow (line 2287) | private getProviderByIdOrThrow(providerId: string) { method getModelOrThrow (line 2299) | private getModelOrThrow(provider: AIProviderConfig, session: AISession) { method getModelByIdsOrThrow (line 2307) | private getModelByIdsOrThrow(provider: AIProviderConfig, modelId: stri... method createEmptySession (line 2315) | private createEmptySession(): AISession { method createMessageRecord (line 2336) | private createMessageRecord( method sanitizeSessionSelection (line 2359) | private sanitizeSessionSelection(session: AISession) { method sessionHasMessages (line 2410) | private sessionHasMessages(session: AISession) { method getInitialSelectionForNewSession (line 2414) | private getInitialSelectionForNewSession() { method getEmptyStateSelection (line 2422) | private getEmptyStateSelection() { method syncPendingSelectionWithSettings (line 2444) | private syncPendingSelectionWithSettings() { method findLoadedSessionByTaskId (line 2450) | private findLoadedSessionByTaskId(taskId: string) { method notify (line 2459) | private notify() { method validateSessionSelection (line 2465) | private validateSessionSelection(session: AISession) { method reportFatalError (line 2479) | private reportFatalError( FILE: src/services/command.service.ts class CommandService (line 10) | class CommandService { method constructor (line 11) | constructor(plugin: NutstorePlugin) { FILE: src/services/events.service.ts class EventsService (line 14) | class EventsService { method constructor (line 17) | constructor(private plugin: NutstorePlugin) { method unload (line 73) | unload() { FILE: src/services/i18n.service.ts class I18nService (line 6) | class I18nService { method constructor (line 7) | constructor(private plugin: NutstorePlugin) { FILE: src/services/logger.service.ts class LoggerService (line 6) | class LoggerService { method constructor (line 9) | constructor(private plugin: NutstorePlugin) { method clear (line 32) | clear() { FILE: src/services/progress.service.ts class ProgressService (line 13) | class ProgressService { method constructor (line 38) | constructor(private plugin: NutstorePlugin) {} method resetProgress (line 46) | public resetProgress() { method showProgressModal (line 53) | public showProgressModal() { method closeProgressModal (line 63) | public closeProgressModal() { method unload (line 70) | public unload() { FILE: src/services/realtime-sync.service.ts class RealtimeSyncService (line 8) | class RealtimeSyncService { method constructor (line 23) | constructor( method vault (line 65) | get vault() { method unload (line 69) | unload() { FILE: src/services/scheduled-sync.service.ts class ScheduledSyncService (line 7) | class ScheduledSyncService { method constructor (line 11) | constructor( method start (line 16) | async start() { method startTimer (line 34) | private startTimer(intervalSeconds: number) { method stopTimer (line 49) | private stopTimer() { method updateInterval (line 56) | async updateInterval() { method unload (line 61) | unload() { FILE: src/services/status.service.ts class StatusService (line 6) | class StatusService { method constructor (line 12) | constructor(private plugin: NutstorePlugin) { method updateSyncStatus (line 19) | public updateSyncStatus(status: { method setLastSyncTime (line 34) | public setLastSyncTime(timestamp: number, failedCount: number = 0): vo... method updateStatusBarWithTime (line 56) | private updateStatusBarWithTime(): void { method stopTimeUpdates (line 77) | public stopTimeUpdates(): void { method unload (line 84) | public unload(): void { FILE: src/services/sync-executor.service.ts type SyncOptions (line 9) | interface SyncOptions { class SyncExecutorService (line 13) | class SyncExecutorService { method constructor (line 14) | constructor(private plugin: NutstorePlugin) {} method executeSync (line 16) | async executeSync(options: SyncOptions) { FILE: src/services/webdav.service.ts class WebDAVService (line 6) | class WebDAVService { method constructor (line 7) | constructor(private plugin: NutstorePlugin) {} method createWebDAVClient (line 9) | async createWebDAVClient(): Promise { method checkWebDAVConnection (line 26) | async checkWebDAVConnection(): Promise<{ error?: Error; success: boole... FILE: src/settings/account.ts class AccountSettings (line 10) | class AccountSettings extends BaseSettings { method display (line 13) | async display() { method hide (line 40) | async hide() { method displayManualLoginSettings (line 47) | private displayManualLoginSettings(): void { method displaySSOLoginSettings (line 86) | private async displaySSOLoginSettings() { method displayCheckConnection (line 144) | private displayCheckConnection() { FILE: src/settings/ai.ts class AISettings (line 16) | class AISettings extends BaseSettings { method display (line 17) | async display() { method persist (line 124) | private async persist(showNotice: boolean = true) { FILE: src/settings/cache.ts type ExportedStorage (line 14) | interface ExportedStorage { class CacheSettings (line 19) | class CacheSettings extends BaseSettings { method display (line 20) | async display() { method remoteCacheDir (line 106) | get remoteCacheDir() { method remoteCachePath (line 113) | get remoteCachePath() { method createRemoteCacheDir (line 121) | async createRemoteCacheDir() { FILE: src/settings/common.ts constant MAX_FILE_SIZE (line 15) | const MAX_FILE_SIZE = '500MB' constant MAX_BYTES (line 16) | const MAX_BYTES = bytesParse(MAX_FILE_SIZE, { mode: 'jedec' })! class CommonSettings (line 18) | class CommonSettings extends BaseSettings { method display (line 19) | async display() { method handleMaxFileSizeBlur (line 290) | private async handleMaxFileSizeBlur(component: TextComponent) { FILE: src/settings/filter.ts type ConfigDirSyncMode (line 6) | type ConfigDirSyncMode = 'none' | 'bookmarks' | 'all' function isConfigDirSyncMode (line 8) | function isConfigDirSyncMode(value: string): value is ConfigDirSyncMode { class FilterSettings (line 12) | class FilterSettings extends BaseSettings { method display (line 13) | async display() { class ConfigDirSyncBookmarksModal (line 107) | class ConfigDirSyncBookmarksModal extends Modal { method constructor (line 108) | constructor( method onOpen (line 116) | onOpen() { method onClose (line 146) | onClose() { class ConfigDirSyncWarningModal (line 151) | class ConfigDirSyncWarningModal extends Modal { method constructor (line 152) | constructor( method onOpen (line 160) | onOpen() { method onClose (line 197) | onClose() { FILE: src/settings/index.ts type SyncMode (line 16) | enum SyncMode { type NutstoreSettings (line 21) | interface NutstoreSettings { function setPluginInstance (line 54) | function setPluginInstance(plugin: NutstorePlugin | null) { function waitUntilPluginInstance (line 58) | function waitUntilPluginInstance() { function useSettings (line 62) | async function useSettings() { class NutstoreSettingTab (line 67) | class NutstoreSettingTab extends PluginSettingTab { method constructor (line 81) | constructor(app: App, plugin: NutstorePlugin) { method display (line 123) | async display() { method isSSO (line 136) | get isSSO() { method hide (line 140) | async hide() { FILE: src/settings/log.ts class LogSettings (line 8) | class LogSettings extends BaseSettings { method display (line 9) | async display() { method logs (line 35) | get logs() { method saveLogsToNote (line 42) | async saveLogsToNote() { FILE: src/settings/settings.base.ts method constructor (line 6) | constructor( FILE: src/shims/node-zlib.ts function unsupported (line 1) | function unsupported(functionName: string): never { function gunzipSync (line 13) | function gunzipSync(): never { function gzipSync (line 17) | function gzipSync(): never { function deflateSync (line 21) | function deflateSync(): never { function inflateSync (line 25) | function inflateSync(): never { FILE: src/storage/blob.ts function useBlobStore (line 4) | function useBlobStore() { FILE: src/storage/kv.ts constant DB_NAME (line 7) | const DB_NAME = 'Nutstore_Plugin_Cache' type TraverseWebDAVCache (line 23) | interface TraverseWebDAVCache { type ChatMetaRecord (line 36) | interface ChatMetaRecord { FILE: src/storage/sync-record.ts class SyncRecord (line 4) | class SyncRecord { method constructor (line 5) | constructor( method updateFileRecord (line 10) | async updateFileRecord(path: string, record: SyncRecordModel): Promise... method deleteFileRecord (line 20) | async deleteFileRecord(path: string): Promise { method getRecords (line 30) | async getRecords(): Promise> { method setRecords (line 35) | async setRecords(records: Map) { method getRecord (line 39) | async getRecord(path: string): Promise { method drop (line 46) | async drop() { method exists (line 50) | async exists(path: string): Promise { method batchUpdate (line 58) | async batchUpdate(updates: [string, SyncRecordModel][]): Promise { FILE: src/storage/use-storage.ts type UseStorageType (line 9) | type UseStorageType = ReturnType> function useStorage (line 11) | function useStorage(instance: StorageInterface) { FILE: src/sync/core/merge-utils.ts type LatestTimestampResolution (line 8) | enum LatestTimestampResolution { type LatestTimestampParams (line 14) | interface LatestTimestampParams { type LatestTimestampResult (line 21) | type LatestTimestampResult = function resolveByLatestTimestamp (line 26) | function resolveByLatestTimestamp( type IntelligentMergeParams (line 61) | interface IntelligentMergeParams { type IntelligentMergeResult (line 67) | interface IntelligentMergeResult { function diff3MergeStrings (line 75) | function diff3MergeStrings( function resolveByIntelligentMerge (line 97) | async function resolveByIntelligentMerge( FILE: src/sync/decision/base.decider.ts method constructor (line 7) | constructor( method getSyncRecordStorage (line 14) | protected getSyncRecordStorage() { method webdav (line 18) | get webdav() { method settings (line 22) | get settings() { method vault (line 26) | get vault() { method remoteBaseDir (line 30) | get remoteBaseDir() { FILE: src/sync/decision/has-folder-content-changed.ts function hasFolderContentChanged (line 12) | function hasFolderContentChanged( FILE: src/sync/decision/sync-decision.interface.ts type SyncDecisionSettings (line 8) | interface SyncDecisionSettings { type SyncRecordItem (line 16) | interface SyncRecordItem { type TaskOptions (line 22) | interface TaskOptions { type ConflictTaskOptions (line 28) | interface ConflictTaskOptions extends TaskOptions { type PullTaskOptions (line 36) | interface PullTaskOptions extends TaskOptions { type SkippedTaskOptions (line 40) | type SkippedTaskOptions = TaskOptions & type TaskFactory (line 66) | interface TaskFactory { type SyncDecisionInput (line 80) | interface SyncDecisionInput { FILE: src/sync/decision/two-way.decider.function.ts function pickConflictStrategy (line 22) | function pickConflictStrategy( function twoWayDecider (line 33) | async function twoWayDecider( FILE: src/sync/decision/two-way.decider.ts class TwoWaySyncDecider (line 25) | class TwoWaySyncDecider extends BaseSyncDecider { method decide (line 26) | async decide(): Promise { FILE: src/sync/index.ts type SyncStartMode (line 45) | enum SyncStartMode { class NutstoreSync (line 50) | class NutstoreSync { method constructor (line 57) | constructor( method start (line 84) | async start({ mode }: { mode: SyncStartMode }) { method execTasks (line 456) | private async execTasks( method executeWithRetry (line 521) | private async executeWithRetry(task: BaseTask): Promise { method updateMtimeInRecord (line 544) | async updateMtimeInRecord(tasks: BaseTask[], results: TaskResult[]) { method handle503Error (line 555) | private async handle503Error(waitMs: number) { method app (line 566) | get app() { method webdav (line 570) | get webdav() { method vault (line 574) | get vault() { method remoteBaseDir (line 578) | get remoteBaseDir() { method settings (line 582) | get settings() { FILE: src/sync/tasks/adapter-tasks.test.ts function createVault (line 16) | function createVault() { function createWebdav (line 36) | function createWebdav() { FILE: src/sync/tasks/clean-record.task.ts class CleanRecordTask (line 4) | class CleanRecordTask extends BaseTask { method exec (line 5) | async exec() { FILE: src/sync/tasks/conflict-resolve.task.ts type ConflictStrategy (line 19) | enum ConflictStrategy { class ConflictResolveTask (line 26) | class ConflictResolveTask extends BaseTask { method constructor (line 27) | constructor( method exec (line 39) | async exec() { method execLatestTimeStamp (line 86) | async execLatestTimeStamp(local: StatModel, remote: StatModel) { method execIntelligentMergeOrSkip (line 148) | async execIntelligentMergeOrSkip() { method execIntelligentMerge (line 226) | async execIntelligentMerge() { FILE: src/sync/tasks/filename-error.task.ts class FilenameError (line 6) | class FilenameError extends Error { method constructor (line 7) | constructor( method format (line 20) | private static format(invalidChars: string[], filePath: string) { class FilenameErrorTask (line 35) | class FilenameErrorTask extends BaseTask { method exec (line 36) | exec() { FILE: src/sync/tasks/mkdir-local.task.ts class MkdirLocalTask (line 5) | class MkdirLocalTask extends BaseTask { method exec (line 6) | async exec() { FILE: src/sync/tasks/mkdir-remote.task.ts class MkdirRemoteTask (line 6) | class MkdirRemoteTask extends BaseTask { method exec (line 7) | async exec() { FILE: src/sync/tasks/mkdirs-remote.task.ts type MkdirsRemoteTaskOptions (line 6) | interface MkdirsRemoteTaskOptions extends BaseTaskOptions { class MkdirsRemoteTask (line 16) | class MkdirsRemoteTask extends BaseTask { method constructor (line 19) | constructor(options: MkdirsRemoteTaskOptions) { method exec (line 24) | async exec() { method getAllPaths (line 49) | getAllPaths(): Array<{ localPath: string; remotePath: string }> { method toJSON (line 56) | toJSON() { FILE: src/sync/tasks/noop.task.ts class NoopTask (line 3) | class NoopTask extends BaseTask { method exec (line 4) | exec() { FILE: src/sync/tasks/pull.task.ts class PullTask (line 7) | class PullTask extends BaseTask { method constructor (line 8) | constructor( method remoteSize (line 16) | get remoteSize() { method exec (line 20) | async exec() { function bufferLikeToArrayBuffer (line 40) | function bufferLikeToArrayBuffer(buffer: BufferLike): ArrayBuffer { function toArrayBuffer (line 48) | function toArrayBuffer(buf: Buffer): ArrayBuffer { FILE: src/sync/tasks/push.task.ts class PushTask (line 4) | class PushTask extends BaseTask { method exec (line 5) | async exec() { FILE: src/sync/tasks/remove-local.task.ts class RemoveLocalTask (line 5) | class RemoveLocalTask extends BaseTask { method constructor (line 6) | constructor( method exec (line 14) | async exec() { FILE: src/sync/tasks/remove-remote-recursively.task.ts class RemoveRemoteRecursivelyTask (line 4) | class RemoveRemoteRecursivelyTask extends BaseTask { method exec (line 5) | async exec() { FILE: src/sync/tasks/remove-remote.task.ts class RemoveRemoteTask (line 4) | class RemoveRemoteTask extends BaseTask { method exec (line 5) | async exec() { FILE: src/sync/tasks/skipped.task.ts type SkipReason (line 3) | enum SkipReason { type SkippedTaskOptions (line 8) | type SkippedTaskOptions = BaseTaskOptions & class SkippedTask (line 34) | class SkippedTask extends BaseTask { method constructor (line 35) | constructor(readonly options: SkippedTaskOptions) { method exec (line 39) | exec() { FILE: src/sync/tasks/task.interface.ts type BaseTaskOptions (line 8) | interface BaseTaskOptions { type TaskSuccessResult (line 17) | interface TaskSuccessResult { type TaskFailureResult (line 22) | interface TaskFailureResult { type TaskResult (line 28) | type TaskResult = TaskSuccessResult | TaskFailureResult method constructor (line 31) | constructor(readonly options: BaseTaskOptions) {} method vault (line 33) | get vault() { method syncRecord (line 37) | get syncRecord() { method webdav (line 41) | get webdav() { method remoteBaseDir (line 45) | get remoteBaseDir() { method remotePath (line 49) | get remotePath() { method localPath (line 55) | get localPath() { method toJSON (line 61) | toJSON() { class TaskError (line 73) | class TaskError extends Error { method constructor (line 74) | constructor( function toTaskError (line 84) | function toTaskError(e: unknown, task: BaseTask): TaskError { FILE: src/sync/utils/has-ignored-in-folder.ts function hasIgnoredInFolder (line 10) | function hasIgnoredInFolder( function getIgnoredPathsInFolder (line 31) | function getIgnoredPathsInFolder( FILE: src/sync/utils/is-mergeable-path.ts function isMergeablePath (line 3) | function isMergeablePath(path: string): boolean { FILE: src/sync/utils/merge-mkdir-tasks.ts function mergeMkdirTasks (line 17) | function mergeMkdirTasks( FILE: src/sync/utils/merge-remove-remote-tasks.ts function mergeRemoveRemoteTasks (line 6) | function mergeRemoveRemoteTasks( FILE: src/sync/utils/update-records.ts function updateMtimeInRecord (line 22) | async function updateMtimeInRecord( FILE: src/types/obsidian-extended.d.ts type ObsidianSetting (line 17) | interface ObsidianSetting { type App (line 31) | interface App { FILE: src/utils/apply-deltas-to-stats.ts function applyDeltasToStats (line 8) | function applyDeltasToStats( FILE: src/utils/breakable-sleep.ts function finish (line 14) | function finish() { FILE: src/utils/config-dir-rules.test.ts function createPluginMock (line 9) | function createPluginMock( FILE: src/utils/config-dir-rules.ts type ConfigDirSyncMode (line 4) | type ConfigDirSyncMode = 'none' | 'bookmarks' | 'all' type EffectiveFilterRules (line 6) | interface EffectiveFilterRules { type ConfigDirFilterRuleInput (line 13) | interface ConfigDirFilterRuleInput { constant CONFIG_DIR_SYSTEM_EXCLUSION_SUFFIXES (line 18) | const CONFIG_DIR_SYSTEM_EXCLUSION_SUFFIXES = [ function makeCaseSensitiveRule (line 26) | function makeCaseSensitiveRule(expr: string): GlobMatchOptions { function getConfigDirSystemTraversalRules (line 30) | function getConfigDirSystemTraversalRules( function getConfigDirSystemFilterRules (line 38) | function getConfigDirSystemFilterRules( function computeEffectiveFilterRulesFromParts (line 47) | function computeEffectiveFilterRulesFromParts( function computeEffectiveFilterRules (line 86) | function computeEffectiveFilterRules( FILE: src/utils/create-id.ts function createId (line 3) | function createId(prefix: string) { FILE: src/utils/decrypt-ticket-response.ts type OAuthResponse (line 3) | interface OAuthResponse { function decryptOAuthResponse (line 9) | async function decryptOAuthResponse(cipherText: string) { FILE: src/utils/deep-stringify.ts function deepStringify (line 30) | function deepStringify( FILE: src/utils/file-stat-to-stat-model.ts function fileStatToStatModel (line 4) | function fileStatToStatModel(from: FileStat): StatModel { FILE: src/utils/format-relative-time.ts function formatRelativeTime (line 3) | function formatRelativeTime(timestamp: number): string { FILE: src/utils/get-db-key.ts function getDBKey (line 6) | function getDBKey(vaultName: string, remoteBaseDir: string) { function getTraversalWebDAVDBKey (line 13) | async function getTraversalWebDAVDBKey( FILE: src/utils/get-root-folder-name.ts function getRootFolderName (line 3) | function getRootFolderName(path: string) { FILE: src/utils/get-task-name.ts function getTaskName (line 17) | function getTaskName(task: BaseTask) { FILE: src/utils/glob-match.ts type GlobMatchUserOptions (line 5) | interface GlobMatchUserOptions { type GlobMatchOptions (line 9) | interface GlobMatchOptions { constant DEFAULT_USER_OPTIONS (line 14) | const DEFAULT_USER_OPTIONS: GlobMatchUserOptions = { function isVoidGlobMatchOptions (line 18) | function isVoidGlobMatchOptions(options: GlobMatchOptions): boolean { function generateFlags (line 22) | function generateFlags(options: GlobMatchUserOptions) { function normalizePath (line 30) | function normalizePath(rawPath: string) { function buildRegExp (line 45) | function buildRegExp(expr: string, options: GlobMatchUserOptions) { class GlobMatch (line 53) | class GlobMatch { method constructor (line 62) | constructor( method matchDirectoryBySegments (line 87) | private matchDirectoryBySegments(segments: string[], isDirPath: boolea... method matchDirectoryByPrefix (line 100) | private matchDirectoryByPrefix(segments: string[], isDirPath: boolean) { method test (line 114) | test(path: string) { function getUserOptions (line 132) | function getUserOptions( function needIncludeFromGlobRules (line 141) | function needIncludeFromGlobRules( FILE: src/utils/has-invalid-char.ts constant INVALID_CHARS (line 1) | const INVALID_CHARS = ':*?"<>|' constant INVALID_CHARS_LIST (line 2) | const INVALID_CHARS_LIST = INVALID_CHARS.split('') function hasInvalidChar (line 4) | function hasInvalidChar(str: string) { function getInvalidChars (line 8) | function getInvalidChars(str: string): string[] { FILE: src/utils/is-503-error.ts constant ERROR_MESSAGE (line 1) | const ERROR_MESSAGE = 'Invalid response: 503 Service Unavailable' function is503Error (line 3) | function is503Error(err: Error | string) { FILE: src/utils/is-numeric.ts function isNumeric (line 3) | function isNumeric(val: any) { FILE: src/utils/is-same-time.ts function isSameTime (line 1) | function isSameTime( FILE: src/utils/is-sub.ts function isSub (line 3) | function isSub(parent: string, sub: string) { FILE: src/utils/merge-dig-in.ts function mergeDigIn (line 8) | function mergeDigIn( FILE: src/utils/mime/is_markdown_path.ts function isMarkdownPath (line 1) | function isMarkdownPath(path: string) { FILE: src/utils/mkdirs-vault.ts function mkdirsVault (line 4) | async function mkdirsVault(vault: Vault, path: string) { FILE: src/utils/mkdirs-webdav.ts function mkdirsWebDAV (line 3) | function mkdirsWebDAV(client: WebDAVClient, path: string) { FILE: src/utils/ns-api.ts function NSAPI (line 3) | function NSAPI(name: 'delta' | 'latestDeltaCursor') { FILE: src/utils/rate-limited-client.ts function createRateLimitedWebDAVClient (line 4) | function createRateLimitedWebDAVClient( FILE: src/utils/remote-path-to-absolute.ts function remotePathToAbsolute (line 3) | function remotePathToAbsolute( FILE: src/utils/remote-path-to-local-path.ts function remotePathToLocalPath (line 3) | function remotePathToLocalPath( FILE: src/utils/request-url.ts constant USER_AGENT (line 27) | const USER_AGENT = `Obsidian (${getOS()}; ${getDevice()}; ObsidianNutsto... class RequestUrlError (line 29) | class RequestUrlError extends Error { method constructor (line 30) | constructor(public res: RequestUrlResponse) { function requestUrl (line 35) | async function requestUrl(p: RequestUrlParam | string) { FILE: src/utils/sha256.ts function sha256 (line 3) | async function sha256(data: ArrayBuffer) { function sha256Hex (line 7) | async function sha256Hex(data: ArrayBuffer) { function sha256Base64 (line 14) | async function sha256Base64(data: ArrayBuffer) { FILE: src/utils/sleep.ts function sleep (line 1) | async function sleep(ms: number) { FILE: src/utils/stat-vault-item.ts function statVaultItem (line 5) | async function statVaultItem( FILE: src/utils/stat-webdav-item.ts function statWebDAVItem (line 5) | async function statWebDAVItem(client: WebDAVClient, path: string) { FILE: src/utils/std-remote-path.ts function stdRemotePath (line 3) | function stdRemotePath(remotePath: string): `/${string}/` { FILE: src/utils/traverse-local-vault.ts function traverseLocalVault (line 7) | async function traverseLocalVault(vault: Vault, from: string) { FILE: src/utils/traverse-webdav.ts function getTraversalLock (line 22) | function getTraversalLock(kvKey: string): Mutex { function executeWithRetry (line 29) | async function executeWithRetry(func: () => MaybePromise): Promise... class ResumableWebDAVTraversal (line 43) | class ResumableWebDAVTraversal { method normalizeDirPath (line 57) | private normalizeDirPath(path: string): string { method normalizeForComparison (line 65) | private normalizeForComparison(path: string): string { method constructor (line 73) | constructor(options: { method lock (line 85) | get lock() { method cursor (line 89) | get cursor(): string { method traverse (line 93) | async traverse(): Promise { method bfsTraverse (line 128) | private async bfsTraverse(): Promise { method fetchAllDelta (line 213) | private async *fetchAllDelta(startCursor: string): AsyncGenerator<{ method applyDeltaDuringTraversal (line 259) | private async applyDeltaDuringTraversal( method incrementalScan (line 306) | private async incrementalScan(): Promise { method applyDeltaToNodes (line 348) | private applyDeltaToNodes(entries: Array): void { method getAllFromCache (line 488) | private getAllFromCache(): StatModel[] { method loadState (line 499) | private async loadState(): Promise { method saveState (line 511) | private async saveState(): Promise { method clearCache (line 522) | async clearCache(): Promise { method isCacheValid (line 533) | async isCacheValid(): Promise { FILE: src/utils/types.ts type MaybePromise (line 1) | type MaybePromise = Promise | T FILE: src/utils/uint8array-to-arraybuffer.ts function uint8ArrayToArrayBuffer (line 1) | function uint8ArrayToArrayBuffer(data: Uint8Array) { FILE: src/utils/vault-adapter-utils.test.ts type AdapterMock (line 7) | type AdapterMock = { function createVault (line 14) | function createVault(adapterOverrides: Partial = {}) { FILE: src/utils/wait-until.ts function waitUntil (line 3) | async function waitUntil(condition: () => T, duration = 100) { FILE: src/views/chatbox.view.ts constant CHATBOX_VIEW_TYPE (line 8) | const CHATBOX_VIEW_TYPE = 'nutstore-sync-chatbox' class ChatboxView (line 10) | class ChatboxView extends ItemView { method constructor (line 50) | constructor( method getViewType (line 57) | getViewType() { method getDisplayText (line 61) | getDisplayText() { method getIcon (line 65) | getIcon() { method getChatboxProps (line 69) | private getChatboxProps(): ChatboxProps { method onOpen (line 76) | async onOpen() { method onClose (line 88) | async onClose() { FILE: src/webdav-patch.ts function objKeyToLower (line 18) | function objKeyToLower(obj: Record) { function onlyAscii (line 29) | function onlyAscii(str: string) { FILE: test/mocks/obsidian.ts class Notice (line 1) | class Notice { method constructor (line 2) | constructor(_message: string, _timeout?: number) {} class App (line 5) | class App {} class Modal (line 6) | class Modal { method empty (line 8) | empty() {} method createEl (line 9) | createEl(_tag: string, _attrs?: { text?: string }) { method constructor (line 16) | constructor(_app: App) {} method setTitle (line 18) | setTitle(_title: string) {} method open (line 19) | open() {} method close (line 20) | close() {} class Setting (line 23) | class Setting { method constructor (line 24) | constructor(_containerEl: unknown) {} method addButton (line 26) | addButton( class TFile (line 52) | class TFile {} class TFolder (line 53) | class TFolder {} class Component (line 54) | class Component { method load (line 55) | load() {} method unload (line 56) | unload() {} class ItemView (line 58) | class ItemView {} class WorkspaceLeaf (line 59) | class WorkspaceLeaf {} method render (line 62) | async render() {} function normalizePath (line 65) | function normalizePath(path: string) {