gitextract_y4gmj5jl/ ├── .github/ │ └── workflows/ │ ├── changelog.yml │ ├── ci.yml │ ├── release.yml │ └── update-changelog-version.yml ├── .gitignore ├── .prettierrc ├── .swcrc ├── .vscode/ │ └── settings.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── esbuild.config.mjs ├── manifest.json ├── package.json ├── packages/ │ ├── chatbox/ │ │ ├── package.json │ │ ├── postcss.config.mjs │ │ ├── rslib.config.ts │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── assets/ │ │ │ │ └── styles/ │ │ │ │ └── global.css │ │ │ ├── components/ │ │ │ │ ├── ConfirmDialog.tsx │ │ │ │ ├── ContentParts.tsx │ │ │ │ ├── CopyButton.tsx │ │ │ │ ├── FragmentDivider.tsx │ │ │ │ ├── MarkdownContent.tsx │ │ │ │ ├── MessageCard.tsx │ │ │ │ ├── PaneResizer.tsx │ │ │ │ ├── PendingList.tsx │ │ │ │ ├── RunStateCard.tsx │ │ │ │ ├── SessionHistoryItem.tsx │ │ │ │ ├── TaskCard.tsx │ │ │ │ └── TasksPanel.tsx │ │ │ ├── i18n/ │ │ │ │ ├── index.ts │ │ │ │ └── locales/ │ │ │ │ ├── en.ts │ │ │ │ └── zh.ts │ │ │ ├── index.tsx │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── tsconfig.json │ │ └── unocss.config.ts │ └── webdav-explorer/ │ ├── package.json │ ├── postcss.config.mjs │ ├── rslib.config.ts │ ├── src/ │ │ ├── App.tsx │ │ ├── assets/ │ │ │ └── styles/ │ │ │ └── global.css │ │ ├── components/ │ │ │ ├── File.tsx │ │ │ ├── FileList.tsx │ │ │ ├── Folder.tsx │ │ │ └── NewFolder.tsx │ │ ├── i18n/ │ │ │ ├── index.ts │ │ │ └── locales/ │ │ │ ├── en.ts │ │ │ └── zh.ts │ │ └── index.tsx │ ├── tsconfig.json │ └── unocss.config.ts ├── pnpm-workspace.yaml ├── src/ │ ├── ai/ │ │ ├── bash/ │ │ │ ├── fs.ts │ │ │ ├── runtime.test.ts │ │ │ └── runtime.ts │ │ ├── config.test.ts │ │ ├── config.ts │ │ ├── file-operation.ts │ │ ├── models-api.json │ │ ├── permission-guard.test.ts │ │ ├── permission-guard.ts │ │ ├── providers/ │ │ │ ├── openai.ts │ │ │ ├── registry.ts │ │ │ └── types.ts │ │ ├── runtime.ts │ │ ├── search-path-filter.ts │ │ ├── tool-call-repeat.ts │ │ ├── tools.test.ts │ │ ├── tools.ts │ │ ├── transport/ │ │ │ ├── obsidian-fetch.test.ts │ │ │ └── obsidian-fetch.ts │ │ ├── tree.test.ts │ │ ├── tree.ts │ │ └── types.ts │ ├── api/ │ │ ├── delta.ts │ │ ├── latestDeltaCursor.ts │ │ └── webdav.ts │ ├── assets/ │ │ └── styles/ │ │ └── global.css │ ├── chat/ │ │ └── domain.ts │ ├── chatbox/ │ │ └── types.ts │ ├── components/ │ │ ├── AIPermissionModal.ts │ │ ├── CacheClearModal.ts │ │ ├── CacheRestoreModal.ts │ │ ├── CacheSaveModal.ts │ │ ├── DeleteConfirmModal.ts │ │ ├── FailedTasksModal.ts │ │ ├── FilterEditorModal.ts │ │ ├── LogoutConfirmModal.ts │ │ ├── ModelEditorModal.ts │ │ ├── ProviderEditorModal.ts │ │ ├── ProvidersManagerModal.ts │ │ ├── SelectRemoteBaseDirModal.ts │ │ ├── SyncConfirmModal.ts │ │ ├── SyncProgressModal.ts │ │ ├── SyncRibbonManager.ts │ │ ├── TaskListConfirmModal.ts │ │ └── TextAreaModal.ts │ ├── consts.ts │ ├── events/ │ │ ├── index.ts │ │ ├── sso-receive.ts │ │ ├── sync-cancel.ts │ │ ├── sync-end.ts │ │ ├── sync-error.ts │ │ ├── sync-preparing.ts │ │ ├── sync-progress.ts │ │ ├── sync-start.ts │ │ ├── sync-update-mtime-progress.ts │ │ └── vault.ts │ ├── fs/ │ │ ├── fs.interface.ts │ │ ├── local-vault.ts │ │ ├── nutstore.ts │ │ └── utils/ │ │ ├── complete-loss-dir.ts │ │ └── is-root.ts │ ├── i18n/ │ │ ├── index.ts │ │ └── locales/ │ │ ├── en.ts │ │ └── zh.ts │ ├── index.ts │ ├── model/ │ │ ├── stat.model.ts │ │ └── sync-record.model.ts │ ├── polyfill.test.ts │ ├── polyfill.ts │ ├── services/ │ │ ├── cache.service.v1.ts │ │ ├── chat.service.test.ts │ │ ├── chat.service.ts │ │ ├── command.service.ts │ │ ├── events.service.ts │ │ ├── i18n.service.ts │ │ ├── logger.service.ts │ │ ├── progress.service.ts │ │ ├── realtime-sync.service.ts │ │ ├── scheduled-sync.service.ts │ │ ├── status.service.ts │ │ ├── sync-executor.service.ts │ │ └── webdav.service.ts │ ├── settings/ │ │ ├── account.ts │ │ ├── ai.ts │ │ ├── cache.ts │ │ ├── common.ts │ │ ├── filter.ts │ │ ├── index.ts │ │ ├── log.ts │ │ └── settings.base.ts │ ├── shims/ │ │ └── node-zlib.ts │ ├── storage/ │ │ ├── blob.ts │ │ ├── index.ts │ │ ├── kv.ts │ │ ├── sync-record.ts │ │ └── use-storage.ts │ ├── sync/ │ │ ├── core/ │ │ │ ├── merge-utils.test.ts │ │ │ └── merge-utils.ts │ │ ├── decision/ │ │ │ ├── base.decider.ts │ │ │ ├── has-folder-content-changed.ts │ │ │ ├── sync-decision.interface.ts │ │ │ ├── two-way.decider.function.ts │ │ │ └── two-way.decider.ts │ │ ├── index.ts │ │ ├── tasks/ │ │ │ ├── adapter-tasks.test.ts │ │ │ ├── clean-record.task.ts │ │ │ ├── conflict-resolve.task.ts │ │ │ ├── filename-error.task.ts │ │ │ ├── mkdir-local.task.ts │ │ │ ├── mkdir-remote.task.ts │ │ │ ├── mkdirs-remote.task.ts │ │ │ ├── noop.task.ts │ │ │ ├── pull.task.ts │ │ │ ├── push.task.ts │ │ │ ├── remove-local.task.ts │ │ │ ├── remove-remote-recursively.task.ts │ │ │ ├── remove-remote.task.ts │ │ │ ├── skipped.task.ts │ │ │ └── task.interface.ts │ │ └── utils/ │ │ ├── has-ignored-in-folder.ts │ │ ├── is-mergeable-path.ts │ │ ├── merge-mkdir-tasks.ts │ │ ├── merge-remove-remote-tasks.ts │ │ ├── update-records.test.ts │ │ └── update-records.ts │ ├── types/ │ │ └── obsidian-extended.d.ts │ ├── utils/ │ │ ├── api-limiter.ts │ │ ├── apply-deltas-to-stats.ts │ │ ├── breakable-sleep.ts │ │ ├── config-dir-rules.test.ts │ │ ├── config-dir-rules.ts │ │ ├── create-id.ts │ │ ├── decrypt-ticket-response.ts │ │ ├── deep-stringify.ts │ │ ├── file-stat-to-stat-model.ts │ │ ├── format-relative-time.ts │ │ ├── get-db-key.ts │ │ ├── get-root-folder-name.ts │ │ ├── get-task-name.ts │ │ ├── glob-match.test.ts │ │ ├── glob-match.ts │ │ ├── has-invalid-char.ts │ │ ├── is-503-error.ts │ │ ├── is-numeric.ts │ │ ├── is-same-time.ts │ │ ├── is-sub.ts │ │ ├── logger.ts │ │ ├── logs-stringify.ts │ │ ├── merge-dig-in.ts │ │ ├── mime/ │ │ │ └── is_markdown_path.ts │ │ ├── mkdirs-vault.ts │ │ ├── mkdirs-webdav.ts │ │ ├── ns-api.ts │ │ ├── rate-limited-client.ts │ │ ├── remote-path-to-absolute.ts │ │ ├── remote-path-to-local-path.ts │ │ ├── request-url.ts │ │ ├── sha256.ts │ │ ├── sleep.ts │ │ ├── stat-vault-item.ts │ │ ├── stat-webdav-item.ts │ │ ├── std-remote-path.ts │ │ ├── traverse-local-vault.ts │ │ ├── traverse-webdav.ts │ │ ├── types.ts │ │ ├── uint8array-to-arraybuffer.ts │ │ ├── vault-adapter-utils.test.ts │ │ └── wait-until.ts │ ├── views/ │ │ └── chatbox.view.ts │ └── webdav-patch.ts ├── test/ │ └── mocks/ │ └── obsidian.ts ├── tsconfig.json ├── uno.config.ts ├── version-bump.mjs ├── versions.json └── vitest.config.ts