├── .changes ├── header.tpl.md ├── unreleased │ └── .gitkeep ├── v0.11.0.md ├── v0.11.1.md ├── v0.12.0.md ├── v0.13.0.md ├── v0.13.1.md ├── v0.14.0.md ├── v0.15.0.md ├── v0.16.1.md ├── v0.17.0.md ├── v0.18.0.md ├── v0.19.0.md ├── v0.20.0.md ├── v0.21.0.md ├── v0.21.1.md ├── v0.21.2.md ├── v0.22.0.md ├── v0.23.0.md ├── v0.23.1.md ├── v0.24.0.md ├── v0.25.0.md ├── v0.25.1.md ├── v0.25.2.md ├── v0.26.0.md ├── v0.27.0.md ├── v0.27.1.md ├── v0.28.0.md └── v0.29.0.md ├── .changie.yaml ├── .dockerignore ├── .env ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── ast-grep-lint.yml │ ├── autofix-pnpm.yml │ ├── autofix-python.yml │ ├── autofix-rust.yml │ ├── bloat.yml │ ├── docker.yml │ ├── gh-pages.yml │ ├── gpt-translate.yml │ ├── nightly.yml │ ├── release-intellij.yml │ ├── release-vim.yml │ ├── release-vscode.yml │ ├── release.yml │ ├── test-intellij.yml │ ├── test-pnpm.yml │ └── test-rust.yml ├── .gitignore ├── .gitmodules ├── .rustfmt.toml ├── .tmuxinator └── tabby.yml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── MODEL_SPEC.md ├── Makefile ├── README-ja.md ├── README-zh.md ├── README.md ├── ci ├── package-from-upstream.sh ├── prepare_build_environment.ps1 └── prepare_build_environment.sh ├── clients ├── eclipse │ ├── .gitignore │ ├── README.md │ ├── docs │ │ ├── eclipse-export-archive-select-features.jpg │ │ ├── eclipse-export-archive-select-wizard.jpg │ │ ├── eclipse-import-project-select-project.jpg │ │ ├── eclipse-import-project-select-wizard.jpg │ │ └── eclipse-launch-application.jpg │ ├── feature │ │ ├── .project │ │ ├── build.properties │ │ └── feature.xml │ ├── package.json │ ├── plugin │ │ ├── .classpath │ │ ├── .gitignore │ │ ├── .project │ │ ├── .settings │ │ │ ├── org.eclipse.core.resources.prefs │ │ │ └── org.eclipse.jdt.core.prefs │ │ ├── META-INF │ │ │ └── MANIFEST.MF │ │ ├── build.properties │ │ ├── chat-panel │ │ │ └── index.html │ │ ├── images │ │ │ ├── add_obj.png │ │ │ ├── add_obj@2x.png │ │ │ ├── chat.png │ │ │ ├── chat@2x.png │ │ │ ├── check_tsk.png │ │ │ ├── check_tsk@2x.png │ │ │ ├── hprio_tsk.png │ │ │ ├── hprio_tsk@2x.png │ │ │ ├── progress_task.png │ │ │ ├── progress_task@2x.png │ │ │ ├── settings.png │ │ │ ├── settings@2x.png │ │ │ ├── time_obj.png │ │ │ ├── time_obj@2x.png │ │ │ ├── warn_tsk.png │ │ │ └── warn_tsk@2x.png │ │ ├── plugin.xml │ │ └── src │ │ │ └── com │ │ │ └── tabbyml │ │ │ └── tabby4eclipse │ │ │ ├── Activator.java │ │ │ ├── DebouncedRunnable.java │ │ │ ├── Images.java │ │ │ ├── Logger.java │ │ │ ├── Startup.java │ │ │ ├── StringUtils.java │ │ │ ├── Utils.java │ │ │ ├── Version.java │ │ │ ├── chat │ │ │ ├── ChatCommand.java │ │ │ ├── ChatView.java │ │ │ ├── ChatViewType.java │ │ │ ├── ChatViewUtils.java │ │ │ ├── EditorFileContext.java │ │ │ ├── FileLocation.java │ │ │ ├── Filepath.java │ │ │ ├── FilepathInGitRepository.java │ │ │ ├── FilepathInWorkspace.java │ │ │ ├── FilepathUri.java │ │ │ ├── GitRepository.java │ │ │ ├── LineRange.java │ │ │ ├── Position.java │ │ │ ├── PositionRange.java │ │ │ └── Range.java │ │ │ ├── commands │ │ │ ├── OpenPreferences.java │ │ │ ├── chat │ │ │ │ ├── AddFileToChat.java │ │ │ │ ├── AddSelectionToChat.java │ │ │ │ ├── Explain.java │ │ │ │ ├── Fix.java │ │ │ │ ├── GenerateDocs.java │ │ │ │ ├── GenerateTests.java │ │ │ │ ├── OpenChatView.java │ │ │ │ └── ToggleChatView.java │ │ │ └── inlineCompletion │ │ │ │ ├── Accept.java │ │ │ │ ├── AcceptNextLine.java │ │ │ │ ├── AcceptNextWord.java │ │ │ │ ├── Dismiss.java │ │ │ │ ├── Next.java │ │ │ │ ├── Previous.java │ │ │ │ └── Trigger.java │ │ │ ├── editor │ │ │ ├── EditorUtils.java │ │ │ └── WorkbenchPartListener.java │ │ │ ├── git │ │ │ ├── EclipseJGitProvider.java │ │ │ ├── GitProvider.java │ │ │ ├── IGitProvider.java │ │ │ └── NoOpGitProvider.java │ │ │ ├── inlineCompletion │ │ │ ├── IInlineCompletionService.java │ │ │ ├── InlineCompletionItem.java │ │ │ ├── InlineCompletionList.java │ │ │ ├── InlineCompletionService.java │ │ │ ├── renderer │ │ │ │ ├── IInlineCompletionItemRenderer.java │ │ │ │ ├── InlineCompletionItemRenderer.java │ │ │ │ ├── InlineCompletionItemTextPainter.java │ │ │ │ ├── InlineCompletionItemTextPainter2.java │ │ │ │ └── InlineCompletionRendererSupport.java │ │ │ └── trigger │ │ │ │ ├── BasicInputEventTrigger.java │ │ │ │ ├── DebouncedDocumentEventTrigger.java │ │ │ │ ├── IInlineCompletionTrigger.java │ │ │ │ ├── InlineCompletionTrigger.java │ │ │ │ └── PairedDocumentEventTrigger.java │ │ │ ├── lsp │ │ │ ├── ConnectionProvider.java │ │ │ ├── LanguageClientImpl.java │ │ │ ├── LanguageServerService.java │ │ │ ├── LanguageSupportProvider.java │ │ │ ├── ServerConfigHolder.java │ │ │ ├── StatusInfoHolder.java │ │ │ └── protocol │ │ │ │ ├── ClientCapabilities.java │ │ │ │ ├── ClientInfo.java │ │ │ │ ├── ClientProvidedConfig.java │ │ │ │ ├── CompletionEventId.java │ │ │ │ ├── Config.java │ │ │ │ ├── EventParams.java │ │ │ │ ├── GitDiffParams.java │ │ │ │ ├── GitDiffResult.java │ │ │ │ ├── GitRepository.java │ │ │ │ ├── GitRepositoryParams.java │ │ │ │ ├── IConfigService.java │ │ │ │ ├── ILanguageServer.java │ │ │ │ ├── IStatusService.java │ │ │ │ ├── ITelemetryService.java │ │ │ │ ├── ITextDocumentServiceExt.java │ │ │ │ ├── InitializationOptions.java │ │ │ │ ├── InlineCompletionItem.java │ │ │ │ ├── InlineCompletionList.java │ │ │ │ ├── InlineCompletionParams.java │ │ │ │ ├── ReadFileParams.java │ │ │ │ ├── ReadFileResult.java │ │ │ │ ├── SemanticTokensRangeResult.java │ │ │ │ ├── StatusIgnoredIssuesEditParams.java │ │ │ │ ├── StatusInfo.java │ │ │ │ └── StatusRequestParams.java │ │ │ ├── preferences │ │ │ ├── MainPreferencesPage.java │ │ │ └── PreferencesService.java │ │ │ └── statusbar │ │ │ └── StatusbarContribution.java │ └── scripts │ │ └── copy-dependencies.js ├── example-vscode-lsp │ └── README.md ├── intellij │ ├── .gitattributes │ ├── .gitignore │ ├── .idea │ │ ├── .gitignore │ │ ├── .name │ │ ├── gradle.xml │ │ ├── kotlinc.xml │ │ ├── misc.xml │ │ └── vcs.xml │ ├── .run │ │ ├── Run Plugin Verifier.run.xml │ │ └── Run Plugin.run.xml │ ├── CHANGELOG.md │ ├── README.md │ ├── build.gradle.kts │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── package.json │ ├── settings.gradle.kts │ └── src │ │ └── main │ │ ├── kotlin │ │ └── com │ │ │ └── tabbyml │ │ │ └── intellijtabby │ │ │ ├── Icons.kt │ │ │ ├── ProjectExt.kt │ │ │ ├── actionPromoter │ │ │ ├── EditorActionPromoter.kt │ │ │ └── HasPriority.kt │ │ │ ├── actions │ │ │ ├── CheckIssueDetail.kt │ │ │ ├── GenerateCommitMessage.kt │ │ │ ├── JoinTabbySlackCommunity.kt │ │ │ ├── OpenModelRegistry.kt │ │ │ ├── OpenOnlineDocumentation.kt │ │ │ ├── OpenSettings.kt │ │ │ ├── OpenTabbyGithubRepo.kt │ │ │ ├── ToggleInlineCompletionTriggerMode.kt │ │ │ ├── chat │ │ │ │ ├── AddFileToChat.kt │ │ │ │ ├── AddSelectionToChat.kt │ │ │ │ ├── ChatAction.kt │ │ │ │ ├── ChatActionHandler.kt │ │ │ │ ├── ChatNavigationAction.kt │ │ │ │ ├── CodeReview.kt │ │ │ │ ├── Explain.kt │ │ │ │ ├── Fix.kt │ │ │ │ ├── GenerateDocs.kt │ │ │ │ ├── GenerateTests.kt │ │ │ │ ├── OpenChatToolWindow.kt │ │ │ │ ├── ShowChatHistory.kt │ │ │ │ ├── ShowNewChat.kt │ │ │ │ └── ToggleChatToolWindow.kt │ │ │ └── inlineCompletion │ │ │ │ ├── Accept.kt │ │ │ │ ├── AcceptNextLine.kt │ │ │ │ ├── AcceptNextWord.kt │ │ │ │ ├── CycleNext.kt │ │ │ │ ├── CyclePrevious.kt │ │ │ │ ├── Dismiss.kt │ │ │ │ ├── InlineCompletionAction.kt │ │ │ │ ├── InlineCompletionActionHandler.kt │ │ │ │ ├── TabAccept.kt │ │ │ │ └── Trigger.kt │ │ │ ├── chat │ │ │ ├── ChatBrowser.kt │ │ │ ├── ChatBrowserFactory.kt │ │ │ └── ChatPanelData.kt │ │ │ ├── completion │ │ │ ├── InlineCompletionData.kt │ │ │ ├── InlineCompletionRenderer.kt │ │ │ └── InlineCompletionService.kt │ │ │ ├── events │ │ │ ├── CaretListener.kt │ │ │ ├── CombinedState.kt │ │ │ ├── DocumentListener.kt │ │ │ ├── EditorFactoryListener.kt │ │ │ ├── FeaturesState.kt │ │ │ ├── SelectionListener.kt │ │ │ └── StartupActivity.kt │ │ │ ├── git │ │ │ ├── DummyGitProvider.kt │ │ │ ├── Git4IdeaProvider.kt │ │ │ └── GitProvider.kt │ │ │ ├── inlineChat │ │ │ ├── CodeVisionProvider.kt │ │ │ ├── CommandHistory.kt │ │ │ ├── CommandListComponent.kt │ │ │ ├── DiffHighLightingPass.kt │ │ │ ├── InlineChatAction.kt │ │ │ ├── InlineChatIntentionAction.kt │ │ │ ├── InlineChatService.kt │ │ │ ├── SelectionGutterIconManager.kt │ │ │ └── util.kt │ │ │ ├── languageSupport │ │ │ ├── DefaultLanguageSupportProvider.kt │ │ │ ├── KotlinLanguageSupportProvider.kt │ │ │ ├── LanguageSupportProvider.kt │ │ │ └── LanguageSupportService.kt │ │ │ ├── lsp │ │ │ ├── ConfigurationSync.kt │ │ │ ├── ConnectionService.kt │ │ │ ├── LanguageClient.kt │ │ │ ├── LanguageIdExt.kt │ │ │ ├── PositionExt.kt │ │ │ ├── TextDocumentSync.kt │ │ │ ├── Tracer.kt │ │ │ └── protocol │ │ │ │ ├── ProtocolData.kt │ │ │ │ ├── client │ │ │ │ └── LanguageClient.kt │ │ │ │ └── server │ │ │ │ ├── ChatFeature.kt │ │ │ │ ├── ConfigFeature.kt │ │ │ │ ├── EditorsFeature.kt │ │ │ │ ├── LanguageServer.kt │ │ │ │ ├── NotebookDocumentFeature.kt │ │ │ │ ├── StatusFeature.kt │ │ │ │ ├── TelemetryFeature.kt │ │ │ │ ├── TextDocumentFeature.kt │ │ │ │ └── WorkspaceFeature.kt │ │ │ ├── notifications │ │ │ └── Notifications.kt │ │ │ ├── settings │ │ │ ├── Configurable.kt │ │ │ ├── KeymapSettings.kt │ │ │ ├── SettingsPanel.kt │ │ │ ├── SettingsService.kt │ │ │ └── SettingsState.kt │ │ │ └── widgets │ │ │ ├── ChatToolWindowFactory.kt │ │ │ └── StatusBarWidgetFactory.kt │ │ └── resources │ │ ├── META-INF │ │ ├── plugin-Git4Idea.xml │ │ ├── plugin-kotlin.xml │ │ ├── plugin.xml │ │ └── pluginIcon.svg │ │ ├── icons │ │ ├── chat.svg │ │ ├── chat_dark.svg │ │ └── new-ui │ │ │ ├── chat.svg │ │ │ └── chat_dark.svg │ │ └── strings.properties ├── tabby-agent │ ├── .eslintrc │ ├── .gitattributes │ ├── .gitignore │ ├── .mocha.env.js │ ├── .mocharc.js │ ├── .prettierignore │ ├── .prettierrc.json │ ├── .vscode │ │ ├── extensions.json │ │ ├── launch.json │ │ └── tasks.json │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── register-loader.js │ ├── src │ │ ├── certsLoader.ts │ │ ├── chat │ │ │ ├── generateBranchName.ts │ │ │ ├── generateCommitMessage.ts │ │ │ ├── global.ts │ │ │ ├── index.ts │ │ │ ├── inlineEdit.ts │ │ │ ├── prompts │ │ │ │ ├── edit-command-insert.md │ │ │ │ ├── edit-command-replace.md │ │ │ │ ├── fix-spelling-and-grammar.md │ │ │ │ ├── generate-branch-name.md │ │ │ │ ├── generate-commit-message.md │ │ │ │ ├── generate-docs.md │ │ │ │ ├── generate-smart-apply.md │ │ │ │ ├── include-file-context-item.md │ │ │ │ ├── include-file-context-list.md │ │ │ │ ├── index.d.ts │ │ │ │ └── provide-smart-apply-line-range.md │ │ │ ├── smartApply.ts │ │ │ ├── smartRange.ts │ │ │ └── utils.ts │ │ ├── codeCompletion │ │ │ ├── buildRequest.ts │ │ │ ├── cache.ts │ │ │ ├── contexts.ts │ │ │ ├── debouncer.ts │ │ │ ├── index.ts │ │ │ ├── latencyTracker.ts │ │ │ ├── postprocess │ │ │ │ ├── base.ts │ │ │ │ ├── dropDuplicated.test.ts │ │ │ │ ├── dropDuplicated.ts │ │ │ │ ├── dropMinimum.test.ts │ │ │ │ ├── dropMinimum.ts │ │ │ │ ├── formatIndentation.test.ts │ │ │ │ ├── formatIndentation.ts │ │ │ │ ├── golden │ │ │ │ │ ├── basic_fibonacci_test │ │ │ │ │ │ ├── python.toml │ │ │ │ │ │ ├── rust.toml │ │ │ │ │ │ └── typescript.toml │ │ │ │ │ ├── limit_scope │ │ │ │ │ │ ├── basic.toml │ │ │ │ │ │ ├── fill_in_line_01.toml │ │ │ │ │ │ ├── rust_01.toml │ │ │ │ │ │ ├── rust_02.toml │ │ │ │ │ │ ├── to_block_01.toml │ │ │ │ │ │ ├── to_block_02.toml │ │ │ │ │ │ ├── to_block_03.toml │ │ │ │ │ │ ├── to_line_01.toml │ │ │ │ │ │ └── typescript_01.toml │ │ │ │ │ ├── remove_duplication │ │ │ │ │ │ ├── basic.toml │ │ │ │ │ │ ├── duplicated_block_closing_line_01.toml │ │ │ │ │ │ ├── duplicated_line_suffix.toml │ │ │ │ │ │ ├── similar_lines_01.toml │ │ │ │ │ │ └── similar_lines_02.toml │ │ │ │ │ └── replace_range │ │ │ │ │ │ ├── basic.toml │ │ │ │ │ │ ├── javascript_01.toml │ │ │ │ │ │ ├── jsx_tags_01.toml │ │ │ │ │ │ ├── jsx_tags_02.toml │ │ │ │ │ │ ├── mismatched_01.toml │ │ │ │ │ │ ├── multiple_01.toml │ │ │ │ │ │ ├── multiple_02.toml │ │ │ │ │ │ ├── rust_01.toml │ │ │ │ │ │ └── typescript_01.toml │ │ │ │ ├── index.ts │ │ │ │ ├── limitScope.ts │ │ │ │ ├── limitScopeByIndentation.test.ts │ │ │ │ ├── limitScopeByIndentation.ts │ │ │ │ ├── normalizeIndentation.test.ts │ │ │ │ ├── normalizeIndentation.ts │ │ │ │ ├── postprocess.test.ts │ │ │ │ ├── removeDuplicateSuffixLines.test.ts │ │ │ │ ├── removeDuplicateSuffixLines.ts │ │ │ │ ├── removeDuplicatedBlockClosingLine.test.ts │ │ │ │ ├── removeDuplicatedBlockClosingLine.ts │ │ │ │ ├── removeLineEndsWithRepetition.test.ts │ │ │ │ ├── removeLineEndsWithRepetition.ts │ │ │ │ ├── removeRepetitiveBlocks.test.ts │ │ │ │ ├── removeRepetitiveBlocks.ts │ │ │ │ ├── removeRepetitiveLines.test.ts │ │ │ │ ├── removeRepetitiveLines.ts │ │ │ │ ├── testUtils.ts │ │ │ │ ├── trimMultiLineInSingleLineMode.test.ts │ │ │ │ ├── trimMultiLineInSingleLineMode.ts │ │ │ │ ├── trimSpace.test.ts │ │ │ │ └── trimSpace.ts │ │ │ ├── solution.ts │ │ │ └── statistics.ts │ │ ├── codeLens.ts │ │ ├── codeSearch.ts │ │ ├── command.ts │ │ ├── config │ │ │ ├── configFile.ts │ │ │ ├── default.test.ts │ │ │ ├── default.ts │ │ │ ├── index.ts │ │ │ └── type.d.ts │ │ ├── contextProviders │ │ │ ├── declarationSnippets.ts │ │ │ ├── documentContexts.ts │ │ │ ├── editorOptions.ts │ │ │ ├── editorVisibleRanges.ts │ │ │ ├── git │ │ │ │ ├── gitCommand.ts │ │ │ │ └── index.ts │ │ │ ├── recentlyChangedCodeSearch.ts │ │ │ └── workspace.ts │ │ ├── dataStore │ │ │ ├── dataFile.ts │ │ │ └── index.ts │ │ ├── env.ts │ │ ├── extensions │ │ │ └── textDocuments.ts │ │ ├── feature.ts │ │ ├── http │ │ │ ├── cloudApi.d.ts │ │ │ ├── proxy.ts │ │ │ ├── stream.ts │ │ │ └── tabbyApiClient.ts │ │ ├── index.ts │ │ ├── logger │ │ │ ├── fileLogger.ts │ │ │ ├── index.ts │ │ │ └── type.d.ts │ │ ├── protocol.ts │ │ ├── server.ts │ │ ├── status.ts │ │ ├── syntax │ │ │ └── parser.ts │ │ ├── telemetry.ts │ │ └── utils │ │ │ ├── array.ts │ │ │ ├── diff.ts │ │ │ ├── error.ts │ │ │ ├── languageId.ts │ │ │ ├── range.ts │ │ │ ├── signal.ts │ │ │ ├── string.ts │ │ │ └── types.ts │ ├── tsconfig.json │ ├── tsup.config.ts │ └── wasm │ │ ├── LICENSES │ │ ├── tree-sitter-go.wasm │ │ ├── tree-sitter-python.wasm │ │ ├── tree-sitter-ruby.wasm │ │ ├── tree-sitter-rust.wasm │ │ ├── tree-sitter-tsx.wasm │ │ └── tree-sitter.wasm ├── tabby-chat-panel │ ├── .gitignore │ ├── README.md │ ├── build.config.ts │ ├── eslint.config.js │ ├── package.json │ ├── rollup.config.js │ ├── src │ │ ├── browser.ts │ │ ├── client.ts │ │ ├── index.ts │ │ ├── react.ts │ │ ├── server.ts │ │ ├── thread.ts │ │ └── types.ts │ ├── test │ │ └── index.test.ts │ └── tsconfig.json ├── tabby-openapi │ ├── .gitignore │ ├── compatible │ │ └── index.d.ts │ ├── lib │ │ ├── index.d.ts │ │ ├── openai.d.ts │ │ └── tabby.d.ts │ ├── openapi.json │ ├── package.json │ └── scripts │ │ └── codegen.js ├── tabby-threads │ ├── .gitignore │ ├── README.md │ ├── package.json │ ├── rollup.config.js │ ├── source │ │ ├── abort-signal.ts │ │ ├── abort-signal │ │ │ ├── accept.ts │ │ │ ├── create.ts │ │ │ └── types.ts │ │ ├── constants.ts │ │ ├── encoding.ts │ │ ├── encoding │ │ │ └── basic.ts │ │ ├── index.ts │ │ ├── memory.ts │ │ ├── signals.ts │ │ ├── signals │ │ │ ├── accept.ts │ │ │ ├── create.ts │ │ │ └── types.ts │ │ ├── targets.ts │ │ ├── targets │ │ │ ├── broadcast-channel.ts │ │ │ ├── iframe │ │ │ │ ├── iframe.ts │ │ │ │ ├── nested.ts │ │ │ │ └── shared.ts │ │ │ ├── message-port.ts │ │ │ ├── target.ts │ │ │ ├── web-socket-browser.ts │ │ │ └── web-worker.ts │ │ └── types.ts │ ├── tsconfig.json │ └── tsconfig.tsbuildinfo ├── vim │ ├── .gitignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── autoload │ │ ├── tabby.vim │ │ └── tabby │ │ │ ├── inline_completion.vim │ │ │ ├── inline_completion │ │ │ ├── events.vim │ │ │ ├── keybindings.vim │ │ │ ├── service.vim │ │ │ ├── utils.vim │ │ │ └── virtual_text.vim │ │ │ ├── lsp.vim │ │ │ └── lsp │ │ │ └── nvim_lsp.vim │ ├── doc │ │ └── tabby.txt │ ├── lua │ │ ├── tabby.lua │ │ └── tabby │ │ │ ├── lsp.lua │ │ │ └── lsp │ │ │ └── nvim_lsp.lua │ └── plugin │ │ └── tabby.vim └── vscode │ ├── .eslintrc │ ├── .gitattributes │ ├── .gitignore │ ├── .mocha.env.js │ ├── .mocharc.js │ ├── .prettierrc.json │ ├── .vscode │ ├── extensions.json │ ├── launch.json │ └── tasks.json │ ├── .vscodeignore │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── LICENSE │ ├── README.md │ ├── assets │ ├── chat-panel.css │ ├── chat.svg │ ├── logo.png │ ├── tabby.png │ └── walkthroughs │ │ ├── chat.md │ │ ├── chatEdit.png │ │ ├── chatEditCompleted.png │ │ ├── chatView.png │ │ ├── chatViewWithSelected.png │ │ ├── codeCompletion.md │ │ ├── commandPalette.png │ │ ├── commands.md │ │ ├── connectToServer.md │ │ ├── connectToServer_token.png │ │ ├── connectToServer_url.png │ │ ├── keybindings.md │ │ ├── multipleChoice.png │ │ ├── setupServer.md │ │ └── statusbarReady.png │ ├── package.json │ ├── scripts │ ├── dummy.js │ └── publish.cjs │ ├── src │ ├── CodeActions.ts │ ├── Config.ts │ ├── ContextVariables.ts │ ├── InlineCompletionProvider.ts │ ├── StatusBarItem.ts │ ├── cancelableFunction.ts │ ├── chat │ │ ├── chatPanel.ts │ │ ├── context.ts │ │ ├── createClient.ts │ │ ├── dom.d.ts │ │ ├── html │ │ │ ├── error.html │ │ │ ├── index.d.ts │ │ │ └── main.html │ │ ├── sidePanel.ts │ │ ├── utils.ts │ │ └── webview.ts │ ├── code-action │ │ ├── InlineEdit.ts │ │ └── QuickFix.ts │ ├── commands │ │ ├── branchQuickPick.ts │ │ ├── commandPalette.ts │ │ ├── connectToServer.ts │ │ └── index.ts │ ├── deferred.ts │ ├── env.ts │ ├── extension.ts │ ├── findFiles.ts │ ├── findSymbols.ts │ ├── git │ │ ├── GitProvider.ts │ │ └── git.d.ts │ ├── inline-edit │ │ ├── index.ts │ │ ├── quickPick.ts │ │ ├── util.test.ts │ │ └── util.ts │ ├── keybindings.ts │ ├── logger.ts │ ├── lsp │ │ ├── AgentConfigFeature.ts │ │ ├── AgentStatusFeature.ts │ │ ├── ChatFeature.ts │ │ ├── CodeLensMiddleware.ts │ │ ├── ConfigurationMiddleware.ts │ │ ├── ConfigurationSyncFeature.ts │ │ ├── DataStoreFeature.ts │ │ ├── EditorOptionsFeature.ts │ │ ├── FileTrackFeature.ts │ │ ├── GitProviderFeature.ts │ │ ├── InitializationFeature.ts │ │ ├── InlineCompletionFeature.ts │ │ ├── LanguageSupportFeature.ts │ │ ├── TelemetryFeature.ts │ │ ├── WorkspaceFeature.ts │ │ ├── WorkspaceFileSystemFeature.ts │ │ ├── client.ts │ │ └── vscodeWindowUtils.ts │ ├── terminal.ts │ └── windowUtils.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── tsup.config.ts ├── codecov.yml ├── crates ├── aim-downloader │ ├── Cargo.toml │ ├── LICENCE.md │ ├── README.md │ └── src │ │ ├── address.rs │ │ ├── bar.rs │ │ ├── consts.rs │ │ ├── error.rs │ │ ├── hash.rs │ │ ├── https.rs │ │ ├── io.rs │ │ ├── lib.rs │ │ ├── netrc.rs │ │ └── untildify.rs ├── hash-ids │ ├── Cargo.toml │ └── src │ │ ├── README.md │ │ └── lib.rs ├── http-api-bindings │ ├── Cargo.toml │ └── src │ │ ├── chat │ │ └── mod.rs │ │ ├── completion │ │ ├── llama.rs │ │ ├── mistral.rs │ │ ├── mod.rs │ │ └── openai.rs │ │ ├── embedding │ │ ├── azure.rs │ │ ├── llama.rs │ │ ├── mod.rs │ │ └── openai.rs │ │ ├── lib.rs │ │ └── rate_limit.rs ├── llama-cpp-server │ ├── Cargo.toml │ ├── build.rs │ └── src │ │ ├── lib.rs │ │ └── supervisor.rs ├── ollama-api-bindings │ ├── Cargo.toml │ └── src │ │ ├── completion.rs │ │ ├── embedding.rs │ │ ├── lib.rs │ │ └── model.rs ├── sqlx-migrate-validate │ ├── Cargo.toml │ ├── README.md │ ├── src │ │ ├── error.rs │ │ ├── lib.rs │ │ └── validate.rs │ └── tests │ │ ├── migrations-1 │ │ └── 20230312133715_create_table.sql │ │ ├── migrations-2 │ │ ├── 20230312133715_create_table.sql │ │ └── 20230312141719_add_other_table.sql │ │ ├── migrations-3 │ │ └── 20230312141719_add_other_table.sql │ │ ├── migrations-4 │ │ └── 20230312133715_create_table.sql │ │ └── validate.rs ├── tabby-common │ ├── Cargo.toml │ ├── assets │ │ └── languages.toml │ └── src │ │ ├── api │ │ ├── code.rs │ │ ├── event.rs │ │ ├── ingestion.rs │ │ ├── mod.rs │ │ ├── server_setting.rs │ │ └── structured_doc.rs │ │ ├── axum.rs │ │ ├── config.rs │ │ ├── constants.rs │ │ ├── index │ │ ├── code │ │ │ ├── mod.rs │ │ │ └── tokenizer.rs │ │ ├── mod.rs │ │ └── structured_doc.rs │ │ ├── languages.rs │ │ ├── lib.rs │ │ ├── path.rs │ │ ├── registry.rs │ │ ├── terminal.rs │ │ └── usage.rs ├── tabby-crawler │ ├── Cargo.toml │ └── src │ │ ├── lib.rs │ │ ├── llms_txt_parser.rs │ │ └── types.rs ├── tabby-download │ ├── Cargo.toml │ └── src │ │ └── lib.rs ├── tabby-git │ ├── Cargo.toml │ └── src │ │ ├── commit.rs │ │ ├── file_search.rs │ │ ├── grep │ │ ├── mod.rs │ │ ├── output.rs │ │ ├── query.rs │ │ └── searcher.rs │ │ ├── lib.rs │ │ └── serve_git.rs ├── tabby-index-cli │ ├── Cargo.toml │ ├── README.md │ ├── assets │ │ └── queries.txt │ └── src │ │ ├── commands │ │ ├── bench.rs │ │ ├── head.rs │ │ ├── inspect.rs │ │ └── mod.rs │ │ ├── main.rs │ │ └── timer.rs ├── tabby-index │ ├── Cargo.toml │ ├── README.md │ ├── queries │ │ ├── csharp.scm │ │ ├── gdscript.scm │ │ ├── go.scm │ │ ├── kotlin.scm │ │ ├── ocaml.scm │ │ ├── rust.scm │ │ ├── scala.scm │ │ ├── solidity.scm │ │ └── tsx.scm │ ├── src │ │ ├── code │ │ │ ├── index.rs │ │ │ ├── intelligence.rs │ │ │ ├── intelligence │ │ │ │ └── id.rs │ │ │ ├── languages.rs │ │ │ ├── mod.rs │ │ │ ├── repository.rs │ │ │ ├── snapshots │ │ │ │ ├── tabby_index__code__index__tests__code_splitter-2.snap │ │ │ │ ├── tabby_index__code__index__tests__code_splitter-3.snap │ │ │ │ ├── tabby_index__code__index__tests__code_splitter-4.snap │ │ │ │ └── tabby_index__code__index__tests__code_splitter.snap │ │ │ └── types.rs │ │ ├── indexer.rs │ │ ├── indexer_tests.rs │ │ ├── lib.rs │ │ ├── structured_doc │ │ │ ├── mod.rs │ │ │ ├── public.rs │ │ │ ├── types.rs │ │ │ └── types │ │ │ │ ├── commit.rs │ │ │ │ ├── ingested.rs │ │ │ │ ├── issue.rs │ │ │ │ ├── page.rs │ │ │ │ ├── pull.rs │ │ │ │ └── web.rs │ │ ├── tantivy_utils.rs │ │ └── testutils.rs │ └── testdata │ │ └── repositories │ │ └── https_github.com_TabbyML_tabby │ │ └── rust.rs ├── tabby-inference │ ├── Cargo.toml │ └── src │ │ ├── chat.rs │ │ ├── code.rs │ │ ├── completion.rs │ │ ├── decoding.rs │ │ ├── embedding.rs │ │ └── lib.rs └── tabby │ ├── .gitignore │ ├── Cargo.toml │ ├── build.rs │ ├── src │ ├── download.rs │ ├── main.rs │ ├── otel.rs │ ├── routes │ │ ├── chat.rs │ │ ├── completions.rs │ │ ├── events.rs │ │ ├── health.rs │ │ ├── metrics.rs │ │ ├── mod.rs │ │ ├── models.rs │ │ └── server_setting.rs │ ├── serve.rs │ └── services │ │ ├── code.rs │ │ ├── completion.rs │ │ ├── completion │ │ ├── completion_prompt.rs │ │ └── next_edit_prompt.rs │ │ ├── embedding.rs │ │ ├── event.rs │ │ ├── health.rs │ │ ├── mod.rs │ │ ├── model │ │ └── mod.rs │ │ ├── structured_doc │ │ ├── mod.rs │ │ ├── serper.rs │ │ └── tantivy.rs │ │ └── tantivy.rs │ └── tests │ ├── goldentests.rs │ ├── goldentests_chat.rs │ └── snapshots │ ├── goldentests__run_golden_tests-2.snap │ ├── goldentests__run_golden_tests.snap │ ├── goldentests__run_golden_tests_cpu-2.snap │ ├── goldentests__run_golden_tests_cpu.snap │ ├── goldentests_chat__run_chat_golden_tests-2.snap │ ├── goldentests_chat__run_chat_golden_tests.snap │ └── goldentests_chat__run_chat_golden_tests_cpu.snap ├── docker ├── Dockerfile.cuda └── Dockerfile.rocm ├── ee ├── LICENSE ├── tabby-db-macros │ ├── Cargo.toml │ └── src │ │ └── lib.rs ├── tabby-db │ ├── .gitignore │ ├── Cargo.toml │ ├── docs │ │ └── sqlx.md │ ├── migrations │ │ ├── 0001_registration-token-table.down.sql │ │ ├── 0001_registration-token-table.up.sql │ │ ├── 0002_users-table.down.sql │ │ ├── 0002_users-table.up.sql │ │ ├── 0003_invitations-table.down.sql │ │ ├── 0003_invitations-table.up.sql │ │ ├── 0004_refresh-tokens.down.sql │ │ ├── 0004_refresh-tokens.up.sql │ │ ├── 0005_job-runs-table.down.sql │ │ ├── 0005_job-runs-table.up.sql │ │ ├── 0006_github-oauth-credential.down.sql │ │ ├── 0006_github-oauth-credential.up.sql │ │ ├── 0007_email-setting.down.sql │ │ ├── 0007_email-setting.up.sql │ │ ├── 0008_repositories-table.down.sql │ │ ├── 0008_repositories-table.up.sql │ │ ├── 0009_google-oauth-credential.down.sql │ │ ├── 0009_google-oauth-credential.up.sql │ │ ├── 0010_server-setting.down.sql │ │ ├── 0010_server-setting.up.sql │ │ ├── 0011_new-email-settings.down.sql │ │ ├── 0011_new-email-settings.up.sql │ │ ├── 0012_remove-redirect-uri-field-oauth.down.sql │ │ ├── 0012_remove-redirect-uri-field-oauth.up.sql │ │ ├── 0013_add-smtp-port.down.sql │ │ ├── 0013_add-smtp-port.up.sql │ │ ├── 0014_password-reset.down.sql │ │ ├── 0014_password-reset.up.sql │ │ ├── 0015_enterprise-license.down.sql │ │ ├── 0015_enterprise-license.up.sql │ │ ├── 0016_merge-oauth-tables.down.sql │ │ ├── 0016_merge-oauth-tables.up.sql │ │ ├── 0017_add-user-completions.down.sql │ │ ├── 0017_add-user-completions.up.sql │ │ ├── 0018_user-password-nullable.down.sql │ │ ├── 0018_user-password-nullable.up.sql │ │ ├── 0019_user-avatar.down.sql │ │ ├── 0019_user-avatar.up.sql │ │ ├── 0020_job-run-index.down.sql │ │ ├── 0020_job-run-index.up.sql │ │ ├── 0021_repository-name-index.down.sql │ │ ├── 0021_repository-name-index.up.sql │ │ ├── 0022_github-provider.down.sql │ │ ├── 0022_github-provider.up.sql │ │ ├── 0023_user-completions-created-at-index.down.sql │ │ ├── 0023_user-completions-created-at-index.up.sql │ │ ├── 0024_github-provided-repos.down.sql │ │ ├── 0024_github-provided-repos.up.sql │ │ ├── 0025_user-events.down.sql │ │ ├── 0025_user-events.up.sql │ │ ├── 0026_clean-up-tables.down.sql │ │ ├── 0026_clean-up-tables.up.sql │ │ ├── 0027_remove-github-repository-columns-on-oauth.down.sql │ │ ├── 0027_remove-github-repository-columns-on-oauth.up.sql │ │ ├── 0028_gitlab-provider.down.sql │ │ ├── 0028_gitlab-provider.up.sql │ │ ├── 0029_merged-provider-tables.down.sql │ │ ├── 0029_merged-provider-tables.up.sql │ │ ├── 0030_user-name.down.sql │ │ ├── 0030_user-name.up.sql │ │ ├── 0031_web-crawler-urls.down.sql │ │ ├── 0031_web-crawler-urls.up.sql │ │ ├── 0033_add-job-runs-param-column.down.sql │ │ ├── 0033_add-job-runs-param-column.up.sql │ │ ├── 0034_add-started-at-column-in-job-runs.down.sql │ │ ├── 0034_add-started-at-column-in-job-runs.up.sql │ │ ├── 0035_add-thread-message-table.down.sql │ │ ├── 0035_add-thread-message-table.up.sql │ │ ├── 0036_web_document.down.sql │ │ ├── 0036_web_document.up.sql │ │ ├── 0037_remove-webcrawler-table.down.sql │ │ ├── 0037_remove-webcrawler-table.up.sql │ │ ├── 0038_add-access-control-tables.down.sql │ │ ├── 0038_add-access-control-tables.up.sql │ │ ├── 0039_add-notification-inbox.down.sql │ │ ├── 0039_add-notification-inbox.up.sql │ │ ├── 0040_add-code-source-id-column.down.sql │ │ ├── 0040_add-code-source-id-column.up.sql │ │ ├── 0041_ldap-credential.down.sql │ │ ├── 0041_ldap-credential.up.sql │ │ ├── 0042_add-file-list-attachment.down.sql │ │ ├── 0042_add-file-list-attachment.up.sql │ │ ├── 0043_page-section.down.sql │ │ ├── 0043_page-section.up.sql │ │ ├── 0044_add-page-sources.down.sql │ │ ├── 0044_add-page-sources.up.sql │ │ ├── 0045_remove-deprecated-columns.down.sql │ │ ├── 0045_remove-deprecated-columns.up.sql │ │ ├── 0046_add-disable-password-login.down.sql │ │ ├── 0046_add-disable-password-login.up.sql │ │ ├── 0047_add-ingestion.down.sql │ │ └── 0047_add-ingestion.up.sql │ ├── schema.sqlite │ ├── schema │ │ ├── schema.sql │ │ ├── schema.svg │ │ └── sqlite-schema-visualize.sql │ └── src │ │ ├── access_policy.rs │ │ ├── attachment.rs │ │ ├── cache.rs │ │ ├── conversions.rs │ │ ├── email_setting.rs │ │ ├── ingestion.rs │ │ ├── integrations.rs │ │ ├── invitations.rs │ │ ├── job_runs.rs │ │ ├── ldap_credential.rs │ │ ├── lib.rs │ │ ├── migration_tests.rs │ │ ├── notifications.rs │ │ ├── oauth_credential.rs │ │ ├── pages.rs │ │ ├── password_reset.rs │ │ ├── provided_repositories.rs │ │ ├── refresh_tokens.rs │ │ ├── repositories.rs │ │ ├── server_setting.rs │ │ ├── threads.rs │ │ ├── user_chats.rs │ │ ├── user_completions.rs │ │ ├── user_events.rs │ │ ├── user_groups.rs │ │ ├── users.rs │ │ └── web_documents.rs ├── tabby-email │ ├── .gitignore │ ├── README.md │ ├── components │ │ └── root-layout.tsx │ ├── emails │ │ ├── invitation.tsx │ │ ├── password_reset.tsx │ │ ├── signup_success.tsx │ │ └── test.tsx │ └── package.json ├── tabby-schema │ ├── Cargo.toml │ ├── examples │ │ └── update-schema.rs │ ├── graphql │ │ └── schema.graphql │ └── src │ │ ├── dao.rs │ │ ├── env.rs │ │ ├── juniper │ │ ├── mod.rs │ │ └── relay │ │ │ ├── connection.rs │ │ │ ├── edge.rs │ │ │ ├── mod.rs │ │ │ ├── node_type.rs │ │ │ └── page_info.rs │ │ ├── lib.rs │ │ ├── policy.rs │ │ └── schema │ │ ├── access_policy.rs │ │ ├── analytic.rs │ │ ├── auth.rs │ │ ├── constants.rs │ │ ├── context.rs │ │ ├── email.rs │ │ ├── ingestion.rs │ │ ├── integration.rs │ │ ├── interface.rs │ │ ├── job.rs │ │ ├── license.rs │ │ ├── mod.rs │ │ ├── notification.rs │ │ ├── page.rs │ │ ├── page │ │ └── types.rs │ │ ├── repository │ │ ├── git.rs │ │ ├── mod.rs │ │ ├── third_party.rs │ │ └── types.rs │ │ ├── retrieval.rs │ │ ├── setting.rs │ │ ├── thread.rs │ │ ├── thread │ │ ├── inputs.rs │ │ └── types.rs │ │ ├── user_event.rs │ │ ├── user_group.rs │ │ ├── web_documents.rs │ │ └── worker.rs ├── tabby-ui │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── (dashboard) │ │ │ ├── (logs) │ │ │ │ ├── jobs │ │ │ │ │ ├── components │ │ │ │ │ │ ├── job-detail.tsx │ │ │ │ │ │ ├── job-row.tsx │ │ │ │ │ │ └── jobs.tsx │ │ │ │ │ ├── detail │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── page.tsx │ │ │ │ │ └── utils.ts │ │ │ │ └── layout.tsx │ │ │ ├── activities │ │ │ │ ├── components │ │ │ │ │ └── activity.tsx │ │ │ │ └── page.tsx │ │ │ ├── components │ │ │ │ ├── dashboard-layout.tsx │ │ │ │ ├── dashboard-main.tsx │ │ │ │ ├── dashboard-sidebar.tsx │ │ │ │ └── sidebar.tsx │ │ │ ├── experiments │ │ │ │ ├── components │ │ │ │ │ └── feature-list.tsx │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ ├── profile │ │ │ │ ├── components │ │ │ │ │ ├── avatar.tsx │ │ │ │ │ ├── change-name.tsx │ │ │ │ │ ├── change-password.tsx │ │ │ │ │ ├── email.tsx │ │ │ │ │ ├── profile-card.tsx │ │ │ │ │ └── profile.tsx │ │ │ │ └── page.tsx │ │ │ ├── reports │ │ │ │ ├── components │ │ │ │ │ ├── annual-activity.tsx │ │ │ │ │ ├── chat-daily-activity.tsx │ │ │ │ │ ├── completion-daily-activity.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ └── report.tsx │ │ │ │ └── page.tsx │ │ │ ├── settings │ │ │ │ ├── (integrations) │ │ │ │ │ ├── mail │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ ├── header.tsx │ │ │ │ │ │ │ ├── mail-form.tsx │ │ │ │ │ │ │ ├── mail-testing-form.tsx │ │ │ │ │ │ │ └── mail.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── providers │ │ │ │ │ │ ├── [kind] │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ ├── common-provider-form.tsx │ │ │ │ │ │ │ │ └── provider-list.tsx │ │ │ │ │ │ │ ├── detail │ │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ │ ├── add-repository-form.tsx │ │ │ │ │ │ │ │ │ ├── provider-detail.tsx │ │ │ │ │ │ │ │ │ └── update-provider-form.tsx │ │ │ │ │ │ │ │ ├── page.tsx │ │ │ │ │ │ │ │ └── query.ts │ │ │ │ │ │ │ ├── hooks │ │ │ │ │ │ │ │ └── use-repository-kind.ts │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── new │ │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ │ └── new-page.tsx │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ ├── access-policy-view.tsx │ │ │ │ │ │ │ ├── job-trigger.tsx │ │ │ │ │ │ │ └── nav-bar.tsx │ │ │ │ │ │ ├── constants.tsx │ │ │ │ │ │ ├── doc │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ ├── create-custom-doc.tsx │ │ │ │ │ │ │ │ ├── custom-doc.tsx │ │ │ │ │ │ │ │ └── preset-doc.tsx │ │ │ │ │ │ │ ├── new │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── git │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ ├── git.tsx │ │ │ │ │ │ │ │ └── repository-table.tsx │ │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ │ ├── new │ │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ │ ├── create-repository-form.tsx │ │ │ │ │ │ │ │ │ └── new-page.tsx │ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ └── query.ts │ │ │ │ │ └── sso │ │ │ │ │ │ ├── components │ │ │ │ │ │ ├── credential-list.tsx │ │ │ │ │ │ ├── form-sub-title.tsx │ │ │ │ │ │ ├── ldap-credential-form.tsx │ │ │ │ │ │ ├── oauth-credential-form.tsx │ │ │ │ │ │ └── sso-type-radio.tsx │ │ │ │ │ │ ├── constant.ts │ │ │ │ │ │ ├── detail │ │ │ │ │ │ ├── [oauth-provider] │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ └── oauth-credential-detail.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── ldap │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ └── ldap-credential-detail.tsx │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ ├── layout.tsx │ │ │ │ │ │ ├── new │ │ │ │ │ │ ├── component │ │ │ │ │ │ │ └── new-page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ ├── general │ │ │ │ │ ├── components │ │ │ │ │ │ ├── form-section.tsx │ │ │ │ │ │ ├── general.tsx │ │ │ │ │ │ ├── network-form.tsx │ │ │ │ │ │ └── security-form.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── subscription │ │ │ │ │ ├── components │ │ │ │ │ │ ├── license-form.tsx │ │ │ │ │ │ ├── license-table.tsx │ │ │ │ │ │ └── subscription.tsx │ │ │ │ │ └── page.tsx │ │ │ │ └── team │ │ │ │ │ ├── components │ │ │ │ │ ├── create-invitation-form.tsx │ │ │ │ │ ├── invitation-table.tsx │ │ │ │ │ ├── team-nav.tsx │ │ │ │ │ ├── team.tsx │ │ │ │ │ ├── user-role-dialog.tsx │ │ │ │ │ └── user-table.tsx │ │ │ │ │ ├── groups │ │ │ │ │ ├── components │ │ │ │ │ │ ├── create-user-group.tsx │ │ │ │ │ │ ├── membership-view.tsx │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ ├── upsert-member-dialog.tsx │ │ │ │ │ │ ├── upsert-member-form.tsx │ │ │ │ │ │ ├── user-group-item.tsx │ │ │ │ │ │ └── user-group-page.tsx │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── layout.tsx │ │ │ │ │ └── page.tsx │ │ │ └── system │ │ │ │ ├── components │ │ │ │ ├── cluster.tsx │ │ │ │ ├── ingestion-table.tsx │ │ │ │ └── worker-card.tsx │ │ │ │ └── page.tsx │ │ ├── (home) │ │ │ ├── components │ │ │ │ ├── animation-wrapper.tsx │ │ │ │ ├── daily-charts.tsx │ │ │ │ ├── related-questions.tsx │ │ │ │ ├── stats.tsx │ │ │ │ └── thread-feeds │ │ │ │ │ ├── all-threads.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── my-threads.tsx │ │ │ │ │ ├── thread-item.tsx │ │ │ │ │ └── threads-context.ts │ │ │ └── page.tsx │ │ ├── api │ │ │ └── page.tsx │ │ ├── auth │ │ │ ├── layout.tsx │ │ │ ├── reset-password │ │ │ │ ├── components │ │ │ │ │ ├── reset-password-form.tsx │ │ │ │ │ └── reset-password-page.tsx │ │ │ │ └── page.tsx │ │ │ ├── signin │ │ │ │ ├── components │ │ │ │ │ ├── ldap-signin-form.tsx │ │ │ │ │ ├── reset-password-request-form.tsx │ │ │ │ │ ├── reset-password-request-section.tsx │ │ │ │ │ ├── self-signup-form.tsx │ │ │ │ │ ├── self-signup-section.tsx │ │ │ │ │ ├── signin-section.tsx │ │ │ │ │ ├── signin.tsx │ │ │ │ │ └── user-signin-form.tsx │ │ │ │ └── page.tsx │ │ │ └── signup │ │ │ │ ├── components │ │ │ │ ├── admin-register.css │ │ │ │ ├── admin-register.tsx │ │ │ │ ├── signup.tsx │ │ │ │ └── user-register-form.tsx │ │ │ │ └── page.tsx │ │ ├── chat │ │ │ ├── components │ │ │ │ └── history-view.tsx │ │ │ ├── page.css │ │ │ └── page.tsx │ │ ├── components │ │ │ └── main.tsx │ │ ├── files │ │ │ ├── components │ │ │ │ ├── blob-header.tsx │ │ │ │ ├── blob-mode-view.tsx │ │ │ │ ├── chat-side-bar.tsx │ │ │ │ ├── code-editor-view.tsx │ │ │ │ ├── code-search-bar.tsx │ │ │ │ ├── code-search-result-view.tsx │ │ │ │ ├── code-search-result.tsx │ │ │ │ ├── error-view.tsx │ │ │ │ ├── file-directory-breadcrumb.tsx │ │ │ │ ├── file-tree-header.tsx │ │ │ │ ├── file-tree-panel.tsx │ │ │ │ ├── file-tree.tsx │ │ │ │ ├── markdown-view.tsx │ │ │ │ ├── raw-file-view.tsx │ │ │ │ ├── repository-kind-icon.tsx │ │ │ │ ├── source-code-browser.tsx │ │ │ │ ├── text-file-view.tsx │ │ │ │ ├── tree-mode-view.tsx │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── lib │ │ │ │ ├── action-bar-widget │ │ │ │ │ ├── action-bar-widget-extension.tsx │ │ │ │ │ └── action-bar-widget.tsx │ │ │ │ ├── editor-search-extension │ │ │ │ │ ├── search-panel.tsx │ │ │ │ │ └── search.tsx │ │ │ │ ├── event-emitter.ts │ │ │ │ ├── line-menu-extension │ │ │ │ │ ├── line-menu-extension.tsx │ │ │ │ │ └── line-menu.css │ │ │ │ ├── search-match-extension │ │ │ │ │ ├── index.ts │ │ │ │ │ └── style.css │ │ │ │ └── selection-extension │ │ │ │ │ └── index.ts │ │ │ └── page.tsx │ │ ├── globals.css │ │ ├── layout.tsx │ │ ├── not-found.tsx │ │ ├── pages │ │ │ ├── components │ │ │ │ ├── error-view.tsx │ │ │ │ ├── header.tsx │ │ │ │ ├── message-content-form.tsx │ │ │ │ ├── nav-bar.tsx │ │ │ │ ├── new-page-form.tsx │ │ │ │ ├── new-section-form.tsx │ │ │ │ ├── page-content.tsx │ │ │ │ ├── page-context.ts │ │ │ │ ├── page-main.tsx │ │ │ │ ├── page-title.tsx │ │ │ │ ├── section-content.tsx │ │ │ │ ├── section-form.tsx │ │ │ │ ├── section-title.tsx │ │ │ │ └── skeleton.tsx │ │ │ ├── lib │ │ │ │ ├── query.ts │ │ │ │ └── utils.ts │ │ │ ├── page.tsx │ │ │ └── types.ts │ │ └── search │ │ │ ├── components │ │ │ ├── assistant-message-section.tsx │ │ │ ├── codebase-tree.tsx │ │ │ ├── header.tsx │ │ │ ├── intermediate-step.tsx │ │ │ ├── messages-skeleton.tsx │ │ │ ├── reading-code-step.tsx │ │ │ ├── reading-doc-step.tsx │ │ │ ├── search-context.ts │ │ │ ├── search.tsx │ │ │ ├── types.ts │ │ │ └── user-message-section.tsx │ │ │ └── page.tsx │ ├── assets │ │ ├── default-favicon.png │ │ ├── fonts │ │ │ ├── Inter-Bold.woff │ │ │ └── Inter-Regular.woff │ │ ├── logo-dark.png │ │ ├── logo.png │ │ └── tabby.png │ ├── codegen.ts │ ├── components.json │ ├── components │ │ ├── button-scroll-to-bottom.tsx │ │ ├── chat │ │ │ ├── chat-context.ts │ │ │ ├── chat-panel.tsx │ │ │ ├── chat-scroll-anchor.tsx │ │ │ ├── chat.tsx │ │ │ ├── code-references.tsx │ │ │ ├── empty-screen.tsx │ │ │ ├── form-editor │ │ │ │ ├── helper.ts │ │ │ │ ├── mention.tsx │ │ │ │ └── utils.tsx │ │ │ ├── git │ │ │ │ └── utils.tsx │ │ │ ├── imtermediate-step.tsx │ │ │ ├── prompt-form.css │ │ │ ├── prompt-form.tsx │ │ │ ├── question-answer.tsx │ │ │ ├── reading-doc-stepper.tsx │ │ │ ├── reading-repo-stepper.tsx │ │ │ ├── repo-select.tsx │ │ │ ├── skeletion.tsx │ │ │ ├── thread-item.tsx │ │ │ └── types.ts │ │ ├── client-only.tsx │ │ ├── code-range-label.tsx │ │ ├── codemirror │ │ │ ├── basic-setup.ts │ │ │ ├── code-tag-widget-extension.ts │ │ │ ├── codemirror.tsx │ │ │ ├── hover-highlight.ts │ │ │ ├── line-click-extension.ts │ │ │ ├── name-tag-extension.ts │ │ │ ├── style.css │ │ │ ├── tag-range-highlight-extension.ts │ │ │ ├── tooltip-extesion.ts │ │ │ └── utils.ts │ │ ├── collapsible-container.tsx │ │ ├── copy-button.tsx │ │ ├── date-range-picker.tsx │ │ ├── demo-banner.tsx │ │ ├── dev-panel.tsx │ │ ├── error-view.tsx │ │ ├── external-link.tsx │ │ ├── footer.tsx │ │ ├── header.tsx │ │ ├── license-banner.tsx │ │ ├── license-guard.tsx │ │ ├── load-more-indicator.tsx │ │ ├── loading-wrapper.tsx │ │ ├── markdown.tsx │ │ ├── mention-tag.tsx │ │ ├── message-markdown │ │ │ ├── code.tsx │ │ │ ├── custom-strip-tags-plugin.ts │ │ │ ├── doc-detail-view.tsx │ │ │ ├── index.tsx │ │ │ ├── markdown-context.tsx │ │ │ └── style.css │ │ ├── not-found-page.tsx │ │ ├── notification-box.tsx │ │ ├── password-check-list.tsx │ │ ├── prompt-editor │ │ │ ├── index.tsx │ │ │ ├── mention-extension.ts │ │ │ ├── mention-list.tsx │ │ │ ├── styles.css │ │ │ ├── suggestion.tsx │ │ │ └── types.ts │ │ ├── providers.tsx │ │ ├── quick-nav-pagination.tsx │ │ ├── searchable-select.tsx │ │ ├── site-favicon.tsx │ │ ├── skeleton.tsx │ │ ├── slack-dialog.tsx │ │ ├── source-icon.tsx │ │ ├── sub-header.tsx │ │ ├── tailwind-indicator.tsx │ │ ├── textarea-search │ │ │ ├── index.tsx │ │ │ ├── model-select.tsx │ │ │ └── repo-select.tsx │ │ ├── theme-toggle.tsx │ │ ├── topbar-progress-indicator.tsx │ │ ├── ui │ │ │ ├── accordion.tsx │ │ │ ├── alert-dialog.tsx │ │ │ ├── alert.tsx │ │ │ ├── avatar.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── calendar.tsx │ │ │ ├── card.tsx │ │ │ ├── carousel.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── codeblock.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── command.tsx │ │ │ ├── dialog.tsx │ │ │ ├── dropdown-menu.tsx │ │ │ ├── form.tsx │ │ │ ├── hover-card.tsx │ │ │ ├── icons.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── pagination.tsx │ │ │ ├── popover.tsx │ │ │ ├── radio-group.tsx │ │ │ ├── resizable.tsx │ │ │ ├── scroll-area.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── sheet.tsx │ │ │ ├── sidebar.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── sonner.tsx │ │ │ ├── switch.tsx │ │ │ ├── table.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ ├── toggle.tsx │ │ │ └── tooltip.tsx │ │ ├── user-avatar.tsx │ │ └── user-panel.tsx │ ├── lib │ │ ├── constants │ │ │ ├── index.ts │ │ │ └── regex.ts │ │ ├── experiment-flags.ts │ │ ├── fonts.ts │ │ ├── gql │ │ │ └── .gitignore │ │ ├── hooks │ │ │ ├── use-all-members.tsx │ │ │ ├── use-at-bottom.tsx │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-current-theme.tsx │ │ │ ├── use-debounce.ts │ │ │ ├── use-enter-submit.tsx │ │ │ ├── use-hash.ts │ │ │ ├── use-health.tsx │ │ │ ├── use-hydration.ts │ │ │ ├── use-interval.ts │ │ │ ├── use-is-sticky.ts │ │ │ ├── use-latest-release.tsx │ │ │ ├── use-latest.ts │ │ │ ├── use-license.ts │ │ │ ├── use-me.ts │ │ │ ├── use-mobile.tsx │ │ │ ├── use-models.tsx │ │ │ ├── use-network-setting.tsx │ │ │ ├── use-repositories.ts │ │ │ ├── use-router-stuff.ts │ │ │ ├── use-scroll-top.ts │ │ │ ├── use-server-info.ts │ │ │ ├── use-statistics.ts │ │ │ ├── use-store.ts │ │ │ ├── use-thread-run.ts │ │ │ ├── use-unmount.ts │ │ │ └── use-workers.ts │ │ ├── language-utils │ │ │ ├── index.ts │ │ │ ├── language-colors.json │ │ │ └── languages.ts │ │ ├── posthog.tsx │ │ ├── stores │ │ │ ├── answer-engine-store.tsx │ │ │ ├── chat-store.ts │ │ │ ├── page-store.ts │ │ │ ├── scroll-store.ts │ │ │ ├── user-preferences-store.ts │ │ │ └── utils.ts │ │ ├── tabby │ │ │ ├── auth.tsx │ │ │ ├── fetcher.ts │ │ │ ├── gql.ts │ │ │ ├── query.ts │ │ │ └── token-management.ts │ │ ├── types │ │ │ ├── chat.ts │ │ │ ├── common.ts │ │ │ ├── index.ts │ │ │ ├── repositories.ts │ │ │ └── sso.ts │ │ └── utils │ │ │ ├── attachment.ts │ │ │ ├── chat.ts │ │ │ ├── index.ts │ │ │ ├── markdown.ts │ │ │ ├── markdown │ │ │ ├── remark-codeblock-to-placeholder.ts │ │ │ └── remark-placeholder-parser.ts │ │ │ ├── pagination.ts │ │ │ └── repository.ts │ ├── next-env.d.ts │ ├── next.config.js │ ├── package.json │ ├── postcss.config.js │ ├── prettier.config.cjs │ ├── public │ │ └── favicon.ico │ ├── tailwind.config.js │ ├── test │ │ ├── components │ │ │ └── chat │ │ │ │ └── form-editor │ │ │ │ └── helper.test.ts │ │ ├── index.test.ts │ │ └── utils │ │ │ ├── markdown.test.ts │ │ │ ├── remark-codeblock-to-placeholder.test.ts │ │ │ └── remark-placeholder-parser.test.ts │ └── tsconfig.json └── tabby-webserver │ ├── Cargo.toml │ ├── development │ └── Caddyfile │ ├── docs │ └── api_spec.md │ ├── email_templates │ ├── invitation.html │ ├── password_reset.html │ ├── signup_success.html │ └── test.html │ ├── keys │ ├── .gitignore │ └── license.key.pub │ ├── src │ ├── axum │ │ ├── extract.rs │ │ ├── mod.rs │ │ └── websocket.rs │ ├── hub.rs │ ├── jwt.rs │ ├── ldap.rs │ ├── lib.rs │ ├── oauth │ │ ├── github.rs │ │ ├── gitlab.rs │ │ ├── google.rs │ │ └── mod.rs │ ├── path.rs │ ├── rate_limit.rs │ ├── routes │ │ ├── hub.rs │ │ ├── ingestion.rs │ │ ├── mod.rs │ │ ├── oauth.rs │ │ ├── repositories │ │ │ ├── mod.rs │ │ │ └── resolve.rs │ │ └── ui.rs │ ├── service │ │ ├── access_policy.rs │ │ ├── analytic.rs │ │ ├── answer.rs │ │ ├── answer │ │ │ ├── prompt_tools.rs │ │ │ └── testutils │ │ │ │ └── mod.rs │ │ ├── auth.rs │ │ ├── auth │ │ │ └── testutils.rs │ │ ├── background_job │ │ │ ├── daily.rs │ │ │ ├── db.rs │ │ │ ├── git.rs │ │ │ ├── helper │ │ │ │ ├── cron.rs │ │ │ │ ├── logger.rs │ │ │ │ └── mod.rs │ │ │ ├── hourly.rs │ │ │ ├── index_commits.rs │ │ │ ├── index_garbage_collection.rs │ │ │ ├── index_ingestion.rs │ │ │ ├── index_pages.rs │ │ │ ├── license_check.rs │ │ │ ├── mod.rs │ │ │ ├── third_party_integration.rs │ │ │ ├── third_party_integration │ │ │ │ ├── error.rs │ │ │ │ ├── issues.rs │ │ │ │ └── pulls.rs │ │ │ └── web_crawler.rs │ │ ├── context.rs │ │ ├── email │ │ │ ├── mod.rs │ │ │ ├── templates.rs │ │ │ └── testutils.rs │ │ ├── embedding.rs │ │ ├── event_logger.rs │ │ ├── ingestion.rs │ │ ├── integration.rs │ │ ├── job.rs │ │ ├── license.rs │ │ ├── mod.rs │ │ ├── notification.rs │ │ ├── page.rs │ │ ├── page │ │ │ └── prompt_tools.rs │ │ ├── preset_web_documents_data.rs │ │ ├── repository │ │ │ ├── git.rs │ │ │ ├── mod.rs │ │ │ ├── prompt_tools.rs │ │ │ ├── third_party.rs │ │ │ └── third_party │ │ │ │ ├── fetch.rs │ │ │ │ └── fetch │ │ │ │ ├── github.rs │ │ │ │ └── gitlab.rs │ │ ├── retrieval.rs │ │ ├── retrieval │ │ │ └── testutils.rs │ │ ├── setting.rs │ │ ├── snapshots │ │ │ └── tabby_webserver__service__answer__tests__convert_messages_to_chat_completion_request.snap │ │ ├── thread.rs │ │ ├── user_event.rs │ │ ├── user_group.rs │ │ ├── utils │ │ │ ├── mod.rs │ │ │ └── prompt.rs │ │ └── web_documents.rs │ └── webserver.rs │ └── ui │ ├── 404.html │ ├── _next │ └── static │ │ ├── 6THjZwODOtNUmFQ4Gzp5t │ │ ├── _buildManifest.js │ │ └── _ssgManifest.js │ │ ├── chunks │ │ ├── 0b0d3d93-d1b36f377edd7fea.js │ │ ├── 1002-09e560a83c07e9f4.js │ │ ├── 1009-d77352b43d12203a.js │ │ ├── 1243.dc94f6775e949adb.js │ │ ├── 1283-393050764b70ab39.js │ │ ├── 1454-fd65c91d069bd7ed.js │ │ ├── 1460-849850f3e0fcced7.js │ │ ├── 1544-f96cdf5bcfa8f0e4.js │ │ ├── 1565-6d9dbbf6faebff31.js │ │ ├── 1731-8ddc21d17c1db3d5.js │ │ ├── 1775.7417f7959f9622d5.js │ │ ├── 1889-808f5c268ba4d728.js │ │ ├── 216.272953c1841d35e1.js │ │ ├── 21c8b353-925bb40fc9c4670c.js │ │ ├── 2285-d0148b347779ec93.js │ │ ├── 240-6e4dd6e33fcf5a86.js │ │ ├── 2429-f7966c8cf910a416.js │ │ ├── 2483.f250a3fa245e0644.js │ │ ├── 2529-33007b8c432baaa8.js │ │ ├── 265-88dc5785788a8710.js │ │ ├── 2718-d762fd3fac1c2178.js │ │ ├── 2928-98ebfedf06caf8e1.js │ │ ├── 2959-2f5ae7e1fa23b9a8.js │ │ ├── 3004.16106b790da84440.js │ │ ├── 3013.40f5d6107e27b343.js │ │ ├── 3087-090080c04c344643.js │ │ ├── 3179-72a03be258e531a2.js │ │ ├── 3396-2ca6ad3ee124641e.js │ │ ├── 340-8b69198c1e94e4f2.js │ │ ├── 3454.b1f455fa1bcb659c.js │ │ ├── 3492-7ca10e8ef6aab493.js │ │ ├── 3721-353be68b8fa07c6b.js │ │ ├── 3c5aa50f-8b4f1f89b347e3ff.js │ │ ├── 4007-80fb4e0338c67b28.js │ │ ├── 4017-15bebe1f3a3c44e0.js │ │ ├── 410-2d9f0445fa0cca52.js │ │ ├── 436-401a51e7af01c90f.js │ │ ├── 4421-0da05343b4d5e17a.js │ │ ├── 4496-17761fa90faf34fd.js │ │ ├── 4526-b6d4584afffa9c34.js │ │ ├── 4546-05756522a4929864.js │ │ ├── 4691-3ed340b4558906b1.js │ │ ├── 4795.29765224db054a66.js │ │ ├── 4915.de1d26bbe2e4c5fb.js │ │ ├── 5289-682125a3379532f6.js │ │ ├── 54180a3d-2885e2285ca2b331.js │ │ ├── 5455.36cbc74f9a3f22ee.js │ │ ├── 55-55623c01484a5724.js │ │ ├── 557.95696512f7ebf6cb.js │ │ ├── 5605-b7e57fceb5667e91.js │ │ ├── 5665-32ab36ba93f52f1f.js │ │ ├── 5723-34db62fac9667d56.js │ │ ├── 5972-14d626d9e01ad6c3.js │ │ ├── 6036.4d2976f72b7994b0.js │ │ ├── 6065-17553e3578c58f7b.js │ │ ├── 6092-2449363334b4c30a.js │ │ ├── 6095-23d24a26b0b31c28.js │ │ ├── 6338-49e7c4b55ba8981d.js │ │ ├── 6432-33866c51c441c1bc.js │ │ ├── 6520.c41bfe83286324b2.js │ │ ├── 659.afb08e85af1127d0.js │ │ ├── 6635-85423d316922c3d8.js │ │ ├── 6805-48f0b1146fe740f9.js │ │ ├── 6887-53dfec50a8a5eeda.js │ │ ├── 6968-4ea1bbf8c29f201a.js │ │ ├── 6978-91523ca6231ea70b.js │ │ ├── 7003-05c7a4c5b4e5989f.js │ │ ├── 7051-7a80262a5dbfe971.js │ │ ├── 7070-0361b26f2c124ca9.js │ │ ├── 726.fabc3cae8413c409.js │ │ ├── 7350-fbd056e17fc64df9.js │ │ ├── 7548-9d3520e9c948edb5.js │ │ ├── 7cd0a9a7-fa3b9a0f20fcec7d.js │ │ ├── 8040-e8a363d23bfc20c6.js │ │ ├── 8194-f2af5792032c1d6a.js │ │ ├── 8511-ad410fc9ccc47ec5.js │ │ ├── 8708-1cf948906a401249.js │ │ ├── 8847-0ee06515da7fd053.js │ │ ├── 9153-56303a38b361663f.js │ │ ├── 9188-e6ada579b4333d65.js │ │ ├── 9218-32f27de639e19ba1.js │ │ ├── 9223.6aabf819095d1397.js │ │ ├── 9275-6df9aca1b01ee03d.js │ │ ├── 9435-d0785650712e5454.js │ │ ├── 9505.8db27f67df404d9a.js │ │ ├── 9536-cc91f53b736e156c.js │ │ ├── 9561-f3c7a8ea95f1deff.js │ │ ├── 95919c35-2a0243d5f6d0cb88.js │ │ ├── 9604-e2b028696ed86f56.js │ │ ├── 9634-eb02e61df3d21583.js │ │ ├── 9675.25c95da0af0c9d10.js │ │ ├── 9691.177c11908e45c2d4.js │ │ ├── 97.8963da16f6cabc24.js │ │ ├── 9860-b2cab0e640a501ef.js │ │ ├── 9906-125e9641f98e1ae5.js │ │ ├── 9e33a154-31f26770480dd557.js │ │ ├── app │ │ │ ├── (dashboard) │ │ │ │ ├── (logs) │ │ │ │ │ ├── jobs │ │ │ │ │ │ ├── detail │ │ │ │ │ │ │ └── page-c30115076238b46c.js │ │ │ │ │ │ └── page-3bfd6036ee5b415b.js │ │ │ │ │ └── layout-d1f15da5bee43367.js │ │ │ │ ├── activities │ │ │ │ │ └── page-3977d3802bc061d5.js │ │ │ │ ├── experiments │ │ │ │ │ └── page-1b27d52c5f423f8c.js │ │ │ │ ├── layout-de28a1a7a97aea73.js │ │ │ │ ├── profile │ │ │ │ │ └── page-fa19607bf35351b7.js │ │ │ │ ├── reports │ │ │ │ │ └── page-807426d1dd1598fa.js │ │ │ │ ├── settings │ │ │ │ │ ├── (integrations) │ │ │ │ │ │ ├── mail │ │ │ │ │ │ │ └── page-47f53ca20844ff8e.js │ │ │ │ │ │ ├── providers │ │ │ │ │ │ │ ├── [kind] │ │ │ │ │ │ │ │ ├── detail │ │ │ │ │ │ │ │ │ └── page-3e8a5c95f318fe68.js │ │ │ │ │ │ │ │ ├── layout-9688fa1599db2b7b.js │ │ │ │ │ │ │ │ ├── new │ │ │ │ │ │ │ │ │ └── page-2078198166a995dc.js │ │ │ │ │ │ │ │ └── page-8f2bf20ea03adec0.js │ │ │ │ │ │ │ ├── doc │ │ │ │ │ │ │ │ ├── new │ │ │ │ │ │ │ │ │ └── page-b558042910b63bae.js │ │ │ │ │ │ │ │ └── page-95cb24a09802216c.js │ │ │ │ │ │ │ ├── git │ │ │ │ │ │ │ │ ├── layout-4f6c4896a9b7682c.js │ │ │ │ │ │ │ │ ├── new │ │ │ │ │ │ │ │ │ └── page-ff974a5ec621eea3.js │ │ │ │ │ │ │ │ └── page-24e0bfa359cf56d3.js │ │ │ │ │ │ │ └── layout-73ce9c8d662cc1f1.js │ │ │ │ │ │ └── sso │ │ │ │ │ │ │ ├── detail │ │ │ │ │ │ │ ├── [oauth-provider] │ │ │ │ │ │ │ │ └── page-5ce39dfa6afbb089.js │ │ │ │ │ │ │ └── ldap │ │ │ │ │ │ │ │ └── page-7c7b53efa1463ce7.js │ │ │ │ │ │ │ ├── layout-98376daac2e91693.js │ │ │ │ │ │ │ ├── new │ │ │ │ │ │ │ └── page-3def33fbf85c587b.js │ │ │ │ │ │ │ └── page-702da305aed26a3c.js │ │ │ │ │ ├── general │ │ │ │ │ │ └── page-9e03891fb9a47616.js │ │ │ │ │ ├── subscription │ │ │ │ │ │ └── page-e862c807ef8188f0.js │ │ │ │ │ └── team │ │ │ │ │ │ ├── groups │ │ │ │ │ │ └── page-52d201da16a5f9af.js │ │ │ │ │ │ ├── layout-0b7a68a98ff6c355.js │ │ │ │ │ │ └── page-2dad63389dceb323.js │ │ │ │ └── system │ │ │ │ │ └── page-6326d40f0b98eb81.js │ │ │ ├── (home) │ │ │ │ └── page-aa009efa8145ca58.js │ │ │ ├── api │ │ │ │ └── page-95ba40586a9993a3.js │ │ │ ├── auth │ │ │ │ ├── layout-3980bdd380a2cd2a.js │ │ │ │ ├── reset-password │ │ │ │ │ └── page-69756c66773a93dd.js │ │ │ │ ├── signin │ │ │ │ │ └── page-3f25dc36f3976142.js │ │ │ │ └── signup │ │ │ │ │ └── page-eb8aecaa87991541.js │ │ │ ├── chat │ │ │ │ └── page-2122febecd87f45a.js │ │ │ ├── files │ │ │ │ └── page-9f080cd4c45921e2.js │ │ │ ├── layout-a9dfde7e4294922d.js │ │ │ ├── not-found-8fdd48e65bd803b1.js │ │ │ ├── pages │ │ │ │ └── page-28e4faf63b5e2311.js │ │ │ └── search │ │ │ │ └── page-f08cae58be4c1433.js │ │ ├── c0672f29-5c54ef189b1b49b1.js │ │ ├── d04f95b7-32b56781246774be.js │ │ ├── framework-d01b68062ece2457.js │ │ ├── main-82f15b1d71f96502.js │ │ ├── main-app-bf380fe6274af3be.js │ │ ├── pages │ │ │ ├── _app-6f18eea95a933635.js │ │ │ └── _error-e9871f0a501df54a.js │ │ ├── polyfills-c67a75d1b6f99dc8.js │ │ └── webpack-2a37924b5137759d.js │ │ ├── css │ │ ├── 1df4303b470c4ade.css │ │ ├── 2191927085951a57.css │ │ ├── 4d92cebb017c1f0c.css │ │ ├── 68f52fface9b0518.css │ │ ├── a672f7c938d6675d.css │ │ ├── ae578fb5bf44c678.css │ │ ├── d556bf5522245bf5.css │ │ └── e61a9e1e462340ef.css │ │ └── media │ │ ├── 055106fdf8549d7a-s.woff2 │ │ ├── 0aa834ed78bf6d07-s.woff2 │ │ ├── 26a46d62cd723877-s.woff2 │ │ ├── 33f26bc6e74df765-s.woff2 │ │ ├── 55c55f0601d81cf3-s.woff2 │ │ ├── 581909926a08bbc8-s.woff2 │ │ ├── 6406d8793413ef02-s.woff2 │ │ ├── 67957d42bae0796d-s.woff2 │ │ ├── 6d93bde91c0c2823-s.woff2 │ │ ├── 886030b0b59bc5a7-s.woff2 │ │ ├── 939c4f875ee75fbb-s.woff2 │ │ ├── 97e0cb1ae144a2a9-s.woff2 │ │ ├── a34f9d1faa5f3315-s.p.woff2 │ │ ├── ac2397f7be75f086-s.woff2 │ │ ├── bb3ef058b751a6ad-s.p.woff2 │ │ ├── default-favicon.a2df8fbb.png │ │ ├── df0a9ae256c0569c-s.woff2 │ │ ├── f75d6d02e2924b13-s.p.woff2 │ │ ├── f911b923c6adde36-s.woff2 │ │ ├── logo-dark.362a169d.png │ │ ├── logo.526f7cf9.png │ │ └── tabby.16ac81a9.png │ ├── activities.html │ ├── activities.txt │ ├── api.html │ ├── api.txt │ ├── auth │ ├── reset-password.html │ ├── reset-password.txt │ ├── signin.html │ ├── signin.txt │ ├── signup.html │ └── signup.txt │ ├── chat.html │ ├── chat.txt │ ├── experiments.html │ ├── experiments.txt │ ├── favicon.ico │ ├── files.html │ ├── files.txt │ ├── index.html │ ├── index.txt │ ├── jobs.html │ ├── jobs.txt │ ├── jobs │ ├── detail.html │ └── detail.txt │ ├── pages.html │ ├── pages.txt │ ├── profile.html │ ├── profile.txt │ ├── reports.html │ ├── reports.txt │ ├── search.html │ ├── search.txt │ ├── settings │ ├── general.html │ ├── general.txt │ ├── mail.html │ ├── mail.txt │ ├── providers │ │ ├── doc.html │ │ ├── doc.txt │ │ ├── doc │ │ │ ├── new.html │ │ │ └── new.txt │ │ ├── git.html │ │ ├── git.txt │ │ ├── git │ │ │ ├── new.html │ │ │ └── new.txt │ │ ├── github-self-hosted.html │ │ ├── github-self-hosted.txt │ │ ├── github-self-hosted │ │ │ ├── detail.html │ │ │ ├── detail.txt │ │ │ ├── new.html │ │ │ └── new.txt │ │ ├── github.html │ │ ├── github.txt │ │ ├── github │ │ │ ├── detail.html │ │ │ ├── detail.txt │ │ │ ├── new.html │ │ │ └── new.txt │ │ ├── gitlab-self-hosted.html │ │ ├── gitlab-self-hosted.txt │ │ ├── gitlab-self-hosted │ │ │ ├── detail.html │ │ │ ├── detail.txt │ │ │ ├── new.html │ │ │ └── new.txt │ │ ├── gitlab.html │ │ ├── gitlab.txt │ │ └── gitlab │ │ │ ├── detail.html │ │ │ ├── detail.txt │ │ │ ├── new.html │ │ │ └── new.txt │ ├── sso.html │ ├── sso.txt │ ├── sso │ │ ├── detail │ │ │ ├── github.html │ │ │ ├── github.txt │ │ │ ├── gitlab.html │ │ │ ├── gitlab.txt │ │ │ ├── google.html │ │ │ ├── google.txt │ │ │ ├── ldap.html │ │ │ └── ldap.txt │ │ ├── new.html │ │ └── new.txt │ ├── subscription.html │ ├── subscription.txt │ ├── team.html │ ├── team.txt │ └── team │ │ ├── groups.html │ │ └── groups.txt │ ├── system.html │ └── system.txt ├── experimental ├── copy-to-modelscope │ ├── .gitignore │ ├── README.md │ ├── main.sh │ └── sync.sh ├── deploy │ ├── Caddyfile │ └── docker-compose.yaml ├── eval │ ├── gen-client.sh │ ├── output.jsonl │ ├── python.yaml │ ├── sample.jsonl │ ├── tabby-python-client │ │ ├── .gitignore │ │ ├── README.md │ │ ├── pyproject.toml │ │ ├── setup.py │ │ └── tabby_python_client │ │ │ ├── __init__.py │ │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── v1 │ │ │ │ ├── __init__.py │ │ │ │ ├── completion.py │ │ │ │ ├── event.py │ │ │ │ └── health.py │ │ │ └── v1beta │ │ │ │ ├── __init__.py │ │ │ │ └── search.py │ │ │ ├── client.py │ │ │ ├── errors.py │ │ │ ├── models │ │ │ ├── __init__.py │ │ │ ├── chat_completion_chunk.py │ │ │ ├── chat_completion_request.py │ │ │ ├── choice.py │ │ │ ├── completion_request.py │ │ │ ├── completion_response.py │ │ │ ├── debug_data.py │ │ │ ├── debug_options.py │ │ │ ├── health_state.py │ │ │ ├── hit.py │ │ │ ├── hit_document.py │ │ │ ├── log_event_request.py │ │ │ ├── message.py │ │ │ ├── search_response.py │ │ │ ├── segments.py │ │ │ ├── snippet.py │ │ │ └── version.py │ │ │ ├── py.typed │ │ │ └── types.py │ └── tabby.py ├── model-converter │ └── update-llama-model.sh ├── openapi │ └── python.yaml ├── prompt-rewrite-eval │ ├── README.md │ ├── dashboard.py │ ├── eval.toml │ ├── evaluator.py │ └── requirements.txt ├── scheduler │ ├── completion.py │ ├── dataset.py │ └── search.py └── supervisor │ └── app.py ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── python ├── tabby-eval │ └── modal │ │ ├── predict.py │ │ └── tabby_python_client │ │ ├── .gitignore │ │ ├── README.md │ │ ├── pyproject.toml │ │ ├── setup.py │ │ └── tabby_python_client │ │ ├── __init__.py │ │ ├── api │ │ ├── __init__.py │ │ ├── v1 │ │ │ ├── __init__.py │ │ │ ├── completion.py │ │ │ ├── event.py │ │ │ └── health.py │ │ └── v1beta │ │ │ ├── __init__.py │ │ │ └── search.py │ │ ├── client.py │ │ ├── errors.py │ │ ├── models │ │ ├── __init__.py │ │ ├── chat_completion_chunk.py │ │ ├── chat_completion_request.py │ │ ├── choice.py │ │ ├── completion_request.py │ │ ├── completion_response.py │ │ ├── debug_data.py │ │ ├── debug_options.py │ │ ├── health_state.py │ │ ├── hit.py │ │ ├── hit_document.py │ │ ├── log_event_request.py │ │ ├── message.py │ │ ├── search_response.py │ │ ├── segments.py │ │ ├── snippet.py │ │ └── version.py │ │ ├── py.typed │ │ └── types.py ├── tabby-loadtest │ ├── README.md │ ├── loadtest.js │ ├── record.csv │ ├── run.sh │ └── server.py └── tabby │ └── trainer.py ├── rules ├── do-not-use-logkit-crate.yml ├── do-not-use-next-pages.yml ├── only-dao-and-policy-can-depend-tabby-db.yml ├── use-basic-job.yml ├── use-schema-result.yml └── validate-requires-code.yml ├── sgconfig.yml ├── turbo.json └── website ├── .gitattributes ├── .gitignore ├── babel.config.js ├── blog ├── 2023-08-31-first-stable-release.md ├── 2023-09-05-deploy-tabby-to-huggingface-space │ ├── building.png │ ├── curl.png │ ├── docker-space.png │ ├── edit-dockerfile.png │ ├── edit-readme.png │ ├── empty-readme.png │ ├── empty-space.png │ ├── index.md │ ├── new-space.png │ └── tabby-swagger.png ├── 2023-09-18-release-0-1-1-metal │ ├── index.md │ ├── staring-tabby-on-llama-cpp.png │ └── twitter-img.jpg ├── 2023-09-30-stream-laziness-in-tabby │ ├── cancellation.png │ ├── index.md │ ├── intro.png │ ├── stream-flush.png │ └── stream.png ├── 2023-10-14-seed-round-release-0-3-0-RAG.md ├── 2023-10-16-repository-context-for-code-completion │ ├── index.md │ └── whiteboard.jpg ├── 2023-10-21-incremental-decoding │ ├── beam.png │ ├── greedy.png │ ├── index.md │ ├── probability.png │ └── twitter-decoding.png ├── 2023-11-13-model-evaluation │ ├── cceval.png │ ├── human-eval-plus.png │ ├── index.md │ ├── repobench.png │ ├── repocoder.png │ └── twitter-eval.png ├── 2023-11-23-coding-llm-leaderboard │ ├── index.mdx │ ├── leaderboard.png │ └── next-line-accuracy.png ├── 2024-01-24-running-tabby-locally-with-rocm │ ├── chat-session.png │ ├── index.md │ ├── rocm-packages.png │ ├── tabby-rocm-docker.png │ ├── tabby-running.png │ └── using-completions.png ├── 2024-02-05-create-tabby-extension-with-language-server-protocol │ ├── coc-tabby-completion.png │ ├── index.md │ ├── npx-run-tabby-agent.gif │ ├── tabby-agent-lsp.png │ └── tabby-agent.png ├── 2024-03-25-deploy-tabby-in-air-gapped-environment-with-docker │ ├── cli-output.png │ ├── index.md │ └── no-internet.png ├── 2024-03-26-tabby-with-replicas-behind-reverse-proxy │ ├── Caddyfile │ ├── docker-compose.yml │ └── index.mdx ├── 2024-04-08-connect-private-github-repository-to-tabby │ ├── code-search-preview.png │ ├── github-pat-contents-access.png │ ├── github-pat-filling-info.png │ ├── github-pat-generate-new-token.png │ ├── github-pat-generate-token.png │ └── index.md ├── 2024-05-01-vulkan-support │ ├── completion.png │ ├── index.md │ ├── vulkan-installed-on-arch.png │ └── vulkan-running.png ├── 2024-06-11-rank-fusion-in-tabby-code-completion │ ├── index.md │ └── repository-context-triggered.png ├── 2024-07-09-tabby-codestral │ ├── codestral_api.jpeg │ ├── index.mdx │ ├── tabby-mistral.png │ └── tabby_codestral.mp4 └── authors.yml ├── docs ├── administration │ ├── _category_.yml │ ├── answer-engine │ │ ├── answer_engine.png │ │ ├── doc_thinking_process.png │ │ ├── index.mdx │ │ ├── mention_documentation.png │ │ ├── recent_activities.png │ │ ├── repository_select.png │ │ ├── repository_thinking_process.png │ │ ├── share_link_button.png │ │ └── web_search.png │ ├── backup.md │ ├── code-completion.md │ ├── config-toml.md │ ├── context │ │ ├── code-browser-entry.png │ │ ├── code-browser.png │ │ ├── context-providers.png │ │ ├── document.png │ │ ├── git.png │ │ ├── github-gitlab.png │ │ ├── index.mdx │ │ ├── repository-job-run.png │ │ ├── repository-job.png │ │ └── select-repo.png │ ├── general-settings │ │ ├── index.mdx │ │ └── sign-in.png │ ├── index-custom-document │ │ ├── index-custom-document.mdx │ │ ├── ingestion-status.png │ │ └── registration-token.png │ ├── license │ │ ├── index.md │ │ ├── reset.png │ │ └── subscription.png │ ├── model │ │ ├── index.mdx │ │ └── model_card.png │ ├── reverse-proxy.mdx │ ├── smtp │ │ ├── index.md │ │ ├── ses.png │ │ └── test-email.png │ ├── sso │ │ ├── index.mdx │ │ ├── integrations_sso.png │ │ ├── ldap │ │ │ ├── configuration.png │ │ │ ├── index.mdx │ │ │ ├── ldap-signin.png │ │ │ ├── ldap-user.png │ │ │ └── ldap-with-oauth.png │ │ ├── sso_create.png │ │ └── sso_signin.png │ ├── upgrade.md │ ├── usage-analytics │ │ ├── activity_chart.png │ │ ├── chat_section.png │ │ ├── code_completions_section.png │ │ └── index.mdx │ ├── usage-collection.md │ └── user │ │ ├── access_control.png │ │ ├── groups.png │ │ ├── index.mdx │ │ ├── invite_link.png │ │ └── invite_member.png ├── extensions │ ├── _category_.yml │ ├── configurations.md │ ├── installation │ │ ├── _category_.yml │ │ ├── intellij.mdx │ │ ├── vim.mdx │ │ └── vscode.mdx │ └── troubleshooting │ │ ├── index.md │ │ ├── intellij-choose-boot-runtime-for-the-ide.png │ │ └── vscode-output-view.png ├── faq.mdx ├── models │ ├── index.mdx │ └── index.mdx.tmpl ├── quick-start │ ├── _category_.yml │ ├── code-completion.png │ ├── connect-success.png │ ├── installation │ │ ├── _category_.yml │ │ ├── apple.md │ │ ├── docker-compose.mdx │ │ ├── docker.mdx │ │ ├── linux │ │ │ ├── assets.png │ │ │ └── index.mdx │ │ └── windows │ │ │ ├── assets.png │ │ │ ├── index.mdx │ │ │ └── success.png │ ├── personal-token.png │ ├── register-account │ │ ├── admin-ui.png │ │ ├── homepage.png │ │ ├── index.md │ │ ├── invite-user.png │ │ └── setup-admin.png │ ├── setup-endpoint.png │ └── setup-ide.md ├── references │ ├── _category_.yaml │ ├── cloud-deployment │ │ ├── _category_.yml │ │ ├── bentoml │ │ │ ├── app-running.png │ │ │ ├── bentodeploy.yaml │ │ │ ├── bentofile.yaml │ │ │ ├── index.md │ │ │ ├── service.py │ │ │ ├── setup-docker.sh │ │ │ └── twitter-img.png │ │ ├── hugging-face │ │ │ ├── agent-config.png │ │ │ ├── code-completion.png │ │ │ ├── duplicate-space.png │ │ │ ├── index.md │ │ │ ├── swagger-ui.png │ │ │ └── tabby-connected.png │ │ ├── modal │ │ │ ├── app-running.png │ │ │ ├── app.py │ │ │ └── index.md │ │ └── skypilot │ │ │ ├── index.md │ │ │ ├── service-ready.png │ │ │ ├── start-service.png │ │ │ ├── tabby-ready.png │ │ │ └── tabby.yaml │ ├── models-http-api │ │ ├── _category_.yml │ │ ├── amazon-bedrock.md │ │ ├── anthropic-claude.md │ │ ├── azure-openai.md │ │ ├── deepinfra.md │ │ ├── deepseek.md │ │ ├── fireworks.md │ │ ├── jan.ai.md │ │ ├── llama.cpp.mdx │ │ ├── llamafile.md │ │ ├── lm-studio.md │ │ ├── mistral-ai.md │ │ ├── ollama.md │ │ ├── openai.md │ │ ├── openrouter.md │ │ ├── perplexity.md │ │ ├── vllm.md │ │ └── voyage-ai.md │ └── programming-languages.md ├── roadmap.mdx └── welcome.mdx ├── docusaurus.config.js ├── package.json ├── sidebars.js ├── src ├── components │ ├── Collapse.jsx │ ├── HomepageFeatures │ │ ├── index.js │ │ └── styles.module.css │ └── Monaco │ │ └── index.js ├── css │ └── custom.css ├── pages │ ├── index.js │ ├── index.module.css │ ├── playground.js │ └── terms.mdx └── theme │ └── Admonition.js ├── static ├── .nojekyll ├── img │ ├── demo.gif │ ├── favicon.ico │ ├── logo.png │ └── tabby-social-card.png ├── openapi.json └── robots.txt ├── tailwind.config.js └── yarn.lock /.changes/header.tpl.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this project will be documented in this file. 3 | 4 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 5 | adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), 6 | and is generated by [Changie](https://github.com/miniscruff/changie). 7 | -------------------------------------------------------------------------------- /.changes/unreleased/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/.changes/unreleased/.gitkeep -------------------------------------------------------------------------------- /.changes/v0.11.1.md: -------------------------------------------------------------------------------- 1 | ## v0.11.1 (2024-05-14) 2 | 3 | ### Fixed and Improvements 4 | 5 | * Fixed display of files where the path contains special characters. ([#2081](https://github.com/TabbyML/tabby/issues/2081)) 6 | * Fixed non-admin users not being able to see the repository in Code Browser. ([#2110](https://github.com/TabbyML/tabby/discussions/2110)) 7 | -------------------------------------------------------------------------------- /.changes/v0.13.1.md: -------------------------------------------------------------------------------- 1 | ## v0.13.1 (2024-07-10) 2 | 3 | ### Fixed and Improvements 4 | 5 | * Bump llama.cpp version to b3334, supporting Deepseek V2 series models. 6 | * Turn on fast attention for Qwen2-1.5B model to fix the quantization error. 7 | * Properly set number of GPU layers (to zero) when device is CPU. -------------------------------------------------------------------------------- /.changes/v0.17.0.md: -------------------------------------------------------------------------------- 1 | ## v0.17.0 (2024-09-10) 2 | 3 | ### Notice 4 | 5 | * We've reworked the `Web` (a beta feature) context provider into the `Developer Docs` context provider. Previously added context in the `Web` tab has been cleared and needs to be manually migrated to `Developer Docs`. 6 | 7 | ### Features 8 | 9 | * Extensive rework has been done in the answer engine search box. 10 | - Developer Docs / Web search is now triggered by `@`. 11 | - Repository Context is now selected using `#`. 12 | 13 | * Supports OCaml 14 | -------------------------------------------------------------------------------- /.changes/v0.18.0.md: -------------------------------------------------------------------------------- 1 | ## v0.18.0 (2024-10-08) 2 | 3 | ### Notice 4 | 5 | * The Chat Side Panel implementation has been redesigned in version 0.18, necessitating an extension version bump for compatibility with 0.18.0. 6 | - VSCode: >= 1.12.0 7 | - IntelliJ: >= 1.8.0 8 | 9 | ### Features 10 | 11 | * User Groups Access Control: Server Administrators can now assign user groups to specific context providers to precisely control which contexts can be accessed by which user groups. 12 | -------------------------------------------------------------------------------- /.changes/v0.20.0.md: -------------------------------------------------------------------------------- 1 | ## v0.20.0 (2024-11-08) 2 | 3 | ### Features 4 | 5 | * Search results can now be edited directly. 6 | * Allow switching backend chat models in Answer Engine. 7 | * Added a connection test button in the `System` tab to test the connection to the backend LLM server. 8 | 9 | ### Fixes and Improvements 10 | 11 | * Optimized CR-LF inference in code completion. ([#3279](https://github.com/TabbyML/tabby/issues/3279)) 12 | * Bumped `llama.cpp` version to `b3995`. 13 | -------------------------------------------------------------------------------- /.changes/v0.21.1.md: -------------------------------------------------------------------------------- 1 | ## v0.21.1 (2024-12-09) 2 | 3 | ### Notice 4 | 5 | * This is a patch release, please also check [the full release note](https://github.com/TabbyML/tabby/releases/tag/v0.21.0) for 0.21. 6 | 7 | ### Fixed and Improvements 8 | 9 | * Fixed Gitlab Context Provider. -------------------------------------------------------------------------------- /.changes/v0.21.2.md: -------------------------------------------------------------------------------- 1 | ## v0.21.2 (2024-12-18) 2 | 3 | ### Notice 4 | 5 | * This is a patch release, please also check [the full release note](https://github.com/TabbyML/tabby/releases/tag/v0.21.1) for 0.21.1. 6 | 7 | ### Fixed and Improvements 8 | 9 | * Adapt extension side changes in new versions. 10 | - VSCode: 1.16.0 11 | - IntelliJ Platform: 1.9.1 12 | -------------------------------------------------------------------------------- /.changes/v0.23.1.md: -------------------------------------------------------------------------------- 1 | ## v0.23.1 (2025-01-31) 2 | 3 | ### Fixed and Improvements 4 | 5 | * Fix the issue of being unable to download remote models due to changes in HuggingFace API. ([#3772](https://github.com/TabbyML/tabby/pull/3772)) 6 | -------------------------------------------------------------------------------- /.changes/v0.25.1.md: -------------------------------------------------------------------------------- 1 | ## v0.25.1 (2025-02-25) 2 | 3 | ### Notice 4 | 5 | * This is a patch release, please also check [the full release note](https://github.com/TabbyML/tabby/releases/tag/v0.25.0) for 0.25. 6 | 7 | ### Fixed and Improvements 8 | 9 | * Refine the UI details in Answer Engine. ([#3888](https://github.com/TabbyML/tabby/pull/3888)) ([#3889](https://github.com/TabbyML/tabby/pull/3889)) ([#3891](https://github.com/TabbyML/tabby/pull/3891)) 10 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .idea 2 | ci 3 | clients 4 | .github 5 | python 6 | **/target 7 | **/node_modules 8 | website 9 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | DATABASE_URL=sqlite://ee/tabby-db/schema.sqlite 2 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.bin filter=lfs diff=lfs merge=lfs -text 2 | website/** linguist-vendored 3 | clients/** linguist-vendored 4 | ee/tabby-ui/** linguist-vendored 5 | ee/tabby-webserver/ui/** linguist-vendored 6 | experimental/** linguist-vendored 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug-unconfirmed 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **Information about your version** 14 | Please provide output of `tabby --version` 15 | 16 | **Information about your GPU** 17 | Please provide output of `nvidia-smi` 18 | 19 | **Additional context** 20 | Add any other context about the problem here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Please describe the feature you want** 11 | 12 | 13 | 14 | **Additional context** 15 | Add any other context or screenshots about the feature request here. 16 | 17 | --- 18 | Please reply with a 👍 if you want this feature. 19 | -------------------------------------------------------------------------------- /.github/workflows/ast-grep-lint.yml: -------------------------------------------------------------------------------- 1 | name: ast-grep lint 2 | on: [push] 3 | 4 | jobs: 5 | sg-lint: 6 | runs-on: ubuntu-latest 7 | name: ast-grep-lint 8 | steps: 9 | - name: Checkout 10 | uses: actions/checkout@v4 11 | 12 | - name: ast-grep lint step 13 | uses: ast-grep/action@v1.4 14 | with: 15 | version: 0.20.1 -------------------------------------------------------------------------------- /.github/workflows/nightly.yml: -------------------------------------------------------------------------------- 1 | name: Update nightly tag 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: '0 20 */1 * *' 7 | 8 | jobs: 9 | sync-branches: 10 | runs-on: ubuntu-latest 11 | name: Update nightly tag 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v2 15 | with: 16 | ssh-key: "${{ secrets.COMMIT_KEY }}" 17 | 18 | - name: Run latest-tag 19 | uses: EndBug/latest-tag@latest 20 | with: 21 | ref: nightly 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | node_modules 3 | .idea/ 4 | .DS_Store 5 | .vscode/ 6 | local/ 7 | __pycache__ 8 | .turbo 9 | 10 | # ignore cargo flamegraph temp files 11 | flamegraph.svg 12 | cargo-flamegraph.stacks 13 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "crates/llama-cpp-server/llama.cpp"] 2 | path = crates/llama-cpp-server/llama.cpp 3 | url = https://github.com/ggml-org/llama.cpp.git 4 | -------------------------------------------------------------------------------- /.rustfmt.toml: -------------------------------------------------------------------------------- 1 | reorder_imports = true 2 | imports_granularity = "crate" 3 | group_imports = "StdExternalCrate" 4 | -------------------------------------------------------------------------------- /.tmuxinator/tabby.yml: -------------------------------------------------------------------------------- 1 | name: tabby 2 | root: ./ 3 | 4 | windows: 5 | - caddy: 6 | panes: 7 | - caddy run --watch --config ee/tabby-webserver/development/Caddyfile 8 | - server: 9 | layout: even-horizontal 10 | panes: 11 | - cargo run serve --port 8081 12 | - cd ee/tabby-ui && pnpm dev 13 | -------------------------------------------------------------------------------- /ci/prepare_build_environment.ps1: -------------------------------------------------------------------------------- 1 | choco install --yes protoc -------------------------------------------------------------------------------- /clients/eclipse/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | plugin/tabby-agent 4 | plugin/chat-panel/tabby-chat-panel.min.js 5 | -------------------------------------------------------------------------------- /clients/eclipse/docs/eclipse-export-archive-select-features.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/docs/eclipse-export-archive-select-features.jpg -------------------------------------------------------------------------------- /clients/eclipse/docs/eclipse-export-archive-select-wizard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/docs/eclipse-export-archive-select-wizard.jpg -------------------------------------------------------------------------------- /clients/eclipse/docs/eclipse-import-project-select-project.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/docs/eclipse-import-project-select-project.jpg -------------------------------------------------------------------------------- /clients/eclipse/docs/eclipse-import-project-select-wizard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/docs/eclipse-import-project-select-wizard.jpg -------------------------------------------------------------------------------- /clients/eclipse/docs/eclipse-launch-application.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/docs/eclipse-launch-application.jpg -------------------------------------------------------------------------------- /clients/eclipse/feature/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | features.tabby4eclipse 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.pde.FeatureBuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.pde.FeatureNature 16 | 17 | 18 | -------------------------------------------------------------------------------- /clients/eclipse/feature/build.properties: -------------------------------------------------------------------------------- 1 | bin.includes = feature.xml 2 | -------------------------------------------------------------------------------- /clients/eclipse/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tabby4eclipse", 3 | "private": true, 4 | "scripts": { 5 | "build": "node scripts/copy-dependencies.js" 6 | }, 7 | "devDependencies": { 8 | "tabby-agent": "workspace:*", 9 | "tabby-chat-panel": "workspace:*", 10 | "fs-extra": "^11.1.1" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/.gitignore: -------------------------------------------------------------------------------- 1 | /bin/ 2 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/build.properties: -------------------------------------------------------------------------------- 1 | source.. = src/ 2 | output.. = bin/ 3 | bin.includes = plugin.xml,\ 4 | META-INF/,\ 5 | images/, \ 6 | tabby-agent/,\ 7 | chat-panel/,\ 8 | .\ 9 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/add_obj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/add_obj.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/add_obj@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/add_obj@2x.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/chat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/chat.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/chat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/chat@2x.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/check_tsk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/check_tsk.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/check_tsk@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/check_tsk@2x.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/hprio_tsk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/hprio_tsk.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/hprio_tsk@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/hprio_tsk@2x.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/progress_task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/progress_task.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/progress_task@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/progress_task@2x.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/settings.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/settings@2x.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/time_obj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/time_obj.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/time_obj@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/time_obj@2x.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/warn_tsk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/warn_tsk.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/images/warn_tsk@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/eclipse/plugin/images/warn_tsk@2x.png -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/Utils.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse; 2 | 3 | public class Utils { 4 | public static boolean isWindows() { 5 | return System.getProperty("os.name").toLowerCase().contains("win"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/chat/ChatCommand.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.chat; 2 | 3 | public abstract class ChatCommand { 4 | public static final String EXPLAIN = "explain"; 5 | public static final String FIX = "fix"; 6 | public static final String GENERATE_DOCS = "generate-docs"; 7 | public static final String GENERATE_TESTS = "generate-tests"; 8 | } 9 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/chat/ChatViewType.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.chat; 2 | 3 | public abstract class ChatViewType { 4 | public static final String NEW_CHAT = "new-chat"; 5 | public static final String HISTORY = "history"; 6 | } 7 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/chat/FileLocation.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.chat; 2 | 3 | public class FileLocation { 4 | private final Filepath filepath; 5 | private final Object location; 6 | 7 | public FileLocation(Filepath filepath, Object location) { 8 | this.filepath = filepath; 9 | this.location = location; 10 | } 11 | 12 | public Filepath getFilepath() { 13 | return filepath; 14 | } 15 | 16 | public Object getLocation() { 17 | return location; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/chat/Filepath.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.chat; 2 | 3 | public abstract class Filepath { 4 | private final String kind; 5 | 6 | protected Filepath(String kind) { 7 | this.kind = kind; 8 | } 9 | 10 | public String getKind() { 11 | return kind; 12 | } 13 | 14 | public static class Kind { 15 | public static final String GIT = "git"; 16 | public static final String WORKSPACE = "workspace"; 17 | public static final String URI = "uri"; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/chat/FilepathUri.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.chat; 2 | 3 | public class FilepathUri extends Filepath { 4 | private final String uri; 5 | 6 | public FilepathUri(String uri) { 7 | super(Kind.URI); 8 | this.uri = uri; 9 | } 10 | 11 | public String getUri() { 12 | return uri; 13 | } 14 | } -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/chat/GitRepository.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.chat; 2 | 3 | public class GitRepository { 4 | private final String url; 5 | 6 | public GitRepository(String url) { 7 | this.url = url; 8 | } 9 | 10 | public String getUrl() { 11 | return url; 12 | } 13 | } -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/chat/LineRange.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.chat; 2 | 3 | public class LineRange extends Range { 4 | private final int start; 5 | private final int end; 6 | 7 | public LineRange(int start, int end) { 8 | this.start = start; 9 | this.end = end; 10 | } 11 | 12 | public int getStart() { 13 | return start; 14 | } 15 | 16 | public int getEnd() { 17 | return end; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/chat/Position.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.chat; 2 | 3 | public class Position { 4 | private final int line; 5 | private final int character; 6 | 7 | public Position(int line, int character) { 8 | this.line = line; 9 | this.character = character; 10 | } 11 | 12 | public int getLine() { 13 | return line; 14 | } 15 | 16 | public int getCharacter() { 17 | return character; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/chat/PositionRange.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.chat; 2 | 3 | public class PositionRange extends Range { 4 | private final Position start; 5 | private final Position end; 6 | 7 | public PositionRange(Position start, Position end) { 8 | this.start = start; 9 | this.end = end; 10 | } 11 | 12 | public Position getStart() { 13 | return start; 14 | } 15 | 16 | public Position getEnd() { 17 | return end; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/chat/Range.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.chat; 2 | 3 | public abstract class Range { 4 | } 5 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/git/NoOpGitProvider.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.git; 2 | 3 | public class NoOpGitProvider implements IGitProvider { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/lsp/protocol/GitDiffResult.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.lsp.protocol; 2 | 3 | public class GitDiffResult { 4 | private String diff; 5 | 6 | public GitDiffResult() { 7 | } 8 | 9 | public GitDiffResult(String diff) { 10 | this.diff = diff; 11 | } 12 | 13 | public String getDiff() { 14 | return diff; 15 | } 16 | 17 | public void setDiff(String diff) { 18 | this.diff = diff; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/lsp/protocol/GitRepositoryParams.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.lsp.protocol; 2 | 3 | public class GitRepositoryParams { 4 | private String uri; 5 | 6 | public GitRepositoryParams(String uri) { 7 | this.uri = uri; 8 | } 9 | 10 | public String getUri() { 11 | return uri; 12 | } 13 | 14 | public void setUri(String uri) { 15 | this.uri = uri; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/lsp/protocol/IConfigService.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.lsp.protocol; 2 | 3 | import java.util.concurrent.CompletableFuture; 4 | 5 | import org.eclipse.lsp4j.jsonrpc.services.JsonRequest; 6 | import org.eclipse.lsp4j.jsonrpc.services.JsonSegment; 7 | 8 | @JsonSegment("tabby") 9 | public interface IConfigService { 10 | @JsonRequest("config") 11 | CompletableFuture getConfig(Object params); 12 | } 13 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/lsp/protocol/ITelemetryService.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.lsp.protocol; 2 | 3 | import org.eclipse.lsp4j.jsonrpc.services.JsonNotification; 4 | import org.eclipse.lsp4j.jsonrpc.services.JsonSegment; 5 | 6 | @JsonSegment("tabby/telemetry") 7 | public interface ITelemetryService { 8 | @JsonNotification 9 | void event(EventParams params); 10 | } 11 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/lsp/protocol/ITextDocumentServiceExt.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.lsp.protocol; 2 | 3 | import java.util.concurrent.CompletableFuture; 4 | 5 | import org.eclipse.lsp4j.jsonrpc.services.JsonRequest; 6 | import org.eclipse.lsp4j.jsonrpc.services.JsonSegment; 7 | 8 | @JsonSegment("textDocument") 9 | public interface ITextDocumentServiceExt { 10 | @JsonRequest 11 | CompletableFuture inlineCompletion(InlineCompletionParams params); 12 | } 13 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/lsp/protocol/ReadFileResult.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.lsp.protocol; 2 | 3 | public class ReadFileResult { 4 | private String text; 5 | 6 | public ReadFileResult() { 7 | } 8 | 9 | public ReadFileResult(String text) { 10 | this.text = text; 11 | } 12 | 13 | public String getText() { 14 | return text; 15 | } 16 | 17 | public void setText(String text) { 18 | this.text = text; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /clients/eclipse/plugin/src/com/tabbyml/tabby4eclipse/lsp/protocol/StatusRequestParams.java: -------------------------------------------------------------------------------- 1 | package com.tabbyml.tabby4eclipse.lsp.protocol; 2 | 3 | public class StatusRequestParams { 4 | private boolean recheckConnection; 5 | 6 | public StatusRequestParams() { 7 | } 8 | 9 | public boolean getRecheckConnection() { 10 | return recheckConnection; 11 | } 12 | 13 | public void setRecheckConnection(boolean recheckConnection) { 14 | this.recheckConnection = recheckConnection; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /clients/example-vscode-lsp/README.md: -------------------------------------------------------------------------------- 1 | This example has been outdated and removed. 2 | 3 | As of tabby-agent v1.7, the Language Server Protocol (LSP) has become the only supported method to connect to tabby-agent. 4 | For examples of creating IDE extensions that connect with tabby-agent using LSP, please refer to the source code of our IDE extensions: 5 | - [VSCode Extension](https://github.com/TabbyML/tabby/tree/main/clients/vscode) 6 | - [IntelliJ Platform Plugin](https://github.com/TabbyML/tabby/tree/main/clients/intellij) 7 | -------------------------------------------------------------------------------- /clients/intellij/.gitattributes: -------------------------------------------------------------------------------- 1 | *.wasm filter=lfs diff=lfs merge=lfs -text -------------------------------------------------------------------------------- /clients/intellij/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /clients/intellij/.idea/.name: -------------------------------------------------------------------------------- 1 | intellij-tabby -------------------------------------------------------------------------------- /clients/intellij/.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /clients/intellij/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /clients/intellij/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /clients/intellij/gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.stdlib.default.dependency=false 2 | -------------------------------------------------------------------------------- /clients/intellij/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/clients/intellij/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /clients/intellij/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /clients/intellij/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "intellij-tabby", 3 | "private": true, 4 | "devDependencies": { 5 | "tabby-agent": "workspace:*", 6 | "tabby-chat-panel": "workspace:*" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /clients/intellij/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | mavenCentral() 4 | gradlePluginPortal() 5 | } 6 | } 7 | 8 | rootProject.name = "intellij-tabby" -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/actionPromoter/HasPriority.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.actionPromoter 2 | 3 | interface HasPriority { 4 | val priority: Int 5 | } -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/actions/JoinTabbySlackCommunity.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.actions 2 | 3 | import com.intellij.ide.BrowserUtil 4 | import com.intellij.openapi.actionSystem.AnAction 5 | import com.intellij.openapi.actionSystem.AnActionEvent 6 | 7 | class JoinTabbySlackCommunity : AnAction() { 8 | override fun actionPerformed(e: AnActionEvent) { 9 | BrowserUtil.browse("https://links.tabbyml.com/join-slack-extensions") 10 | } 11 | } -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/actions/OpenModelRegistry.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.actions 2 | 3 | import com.intellij.ide.BrowserUtil 4 | import com.intellij.openapi.actionSystem.AnAction 5 | import com.intellij.openapi.actionSystem.AnActionEvent 6 | 7 | class OpenModelRegistry : AnAction() { 8 | override fun actionPerformed(e: AnActionEvent) { 9 | BrowserUtil.browse("https://tabby.tabbyml.com/docs/models/") 10 | } 11 | } -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/actions/OpenOnlineDocumentation.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.actions 2 | 3 | import com.intellij.ide.BrowserUtil 4 | import com.intellij.openapi.actionSystem.AnAction 5 | import com.intellij.openapi.actionSystem.AnActionEvent 6 | 7 | class OpenOnlineDocumentation : AnAction() { 8 | override fun actionPerformed(e: AnActionEvent) { 9 | BrowserUtil.browse("https://tabby.tabbyml.com/docs") 10 | } 11 | } -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/actions/OpenTabbyGithubRepo.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.actions 2 | 3 | import com.intellij.ide.BrowserUtil 4 | import com.intellij.openapi.actionSystem.AnAction 5 | import com.intellij.openapi.actionSystem.AnActionEvent 6 | 7 | class OpenTabbyGithubRepo : AnAction() { 8 | override fun actionPerformed(e: AnActionEvent) { 9 | BrowserUtil.browse("https://github.com/tabbyml/tabby") 10 | } 11 | } -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/actions/chat/AddFileToChat.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.actions.chat 2 | 3 | import com.intellij.openapi.editor.Editor 4 | import com.tabbyml.intellijtabby.chat.ChatBrowser 5 | 6 | class AddFileToChat : ChatAction(object : ChatActionHandler { 7 | override fun doExecute(editor: Editor, chatBrowser: ChatBrowser) { 8 | chatBrowser.addActiveEditorAsContext(ChatBrowser.RangeStrategy.FILE) 9 | } 10 | }) -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/actions/chat/ChatActionHandler.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.actions.chat 2 | 3 | import com.intellij.openapi.editor.Editor 4 | import com.tabbyml.intellijtabby.chat.ChatBrowser 5 | 6 | interface ChatActionHandler { 7 | fun doExecute(editor: Editor, chatBrowser: ChatBrowser) 8 | fun isEnabled(editor: Editor, chatBrowser: ChatBrowser?): Boolean { 9 | return true 10 | } 11 | } -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/actions/chat/OpenChatToolWindow.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.actions.chat 2 | 3 | import com.intellij.openapi.actionSystem.AnAction 4 | import com.intellij.openapi.actionSystem.AnActionEvent 5 | import com.tabbyml.intellijtabby.widgets.openChatToolWindow 6 | 7 | class OpenChatToolWindow : AnAction() { 8 | override fun actionPerformed(e: AnActionEvent) { 9 | e.project?.let { openChatToolWindow(it) } 10 | } 11 | } -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/actions/chat/ShowChatHistory.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.actions.chat 2 | 3 | import com.tabbyml.intellijtabby.chat.ChatView 4 | 5 | class ShowChatHistory : ChatNavigationAction(ChatView.HISTORY) -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/actions/chat/ShowNewChat.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.actions.chat 2 | 3 | import com.tabbyml.intellijtabby.chat.ChatView 4 | 5 | class ShowNewChat : ChatNavigationAction(ChatView.NEW_CHAT) -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/events/CaretListener.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.events 2 | 3 | import com.intellij.openapi.editor.Editor 4 | import com.intellij.openapi.editor.event.CaretEvent 5 | import com.intellij.util.messages.Topic 6 | 7 | interface CaretListener { 8 | fun caretPositionChanged(editor: Editor, event: CaretEvent) {} 9 | 10 | companion object { 11 | @Topic.ProjectLevel 12 | val TOPIC = Topic(CaretListener::class.java, Topic.BroadcastDirection.NONE) 13 | } 14 | } -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/git/DummyGitProvider.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.git 2 | 3 | class DummyGitProvider : GitProvider { 4 | override fun isSupported(): Boolean { 5 | return false 6 | } 7 | } -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/lsp/protocol/server/ConfigFeature.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.lsp.protocol.server 2 | 3 | import com.tabbyml.intellijtabby.lsp.protocol.Config 4 | import org.eclipse.lsp4j.jsonrpc.services.JsonRequest 5 | import org.eclipse.lsp4j.jsonrpc.services.JsonSegment 6 | import java.util.concurrent.CompletableFuture 7 | 8 | @JsonSegment("tabby") 9 | interface ConfigFeature { 10 | @JsonRequest("config") 11 | fun getConfig(): CompletableFuture 12 | } 13 | -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/lsp/protocol/server/EditorsFeature.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.lsp.protocol.server 2 | 3 | import com.tabbyml.intellijtabby.lsp.protocol.DidChangeActiveEditorParams 4 | import org.eclipse.lsp4j.jsonrpc.services.JsonNotification 5 | import org.eclipse.lsp4j.jsonrpc.services.JsonSegment 6 | 7 | @JsonSegment("tabby/editors") 8 | interface EditorsFeature { 9 | @JsonNotification 10 | fun didChangeActiveEditor(params: DidChangeActiveEditorParams) 11 | } 12 | -------------------------------------------------------------------------------- /clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/lsp/protocol/server/TelemetryFeature.kt: -------------------------------------------------------------------------------- 1 | package com.tabbyml.intellijtabby.lsp.protocol.server 2 | 3 | import com.tabbyml.intellijtabby.lsp.protocol.EventParams 4 | import org.eclipse.lsp4j.jsonrpc.services.JsonNotification 5 | import org.eclipse.lsp4j.jsonrpc.services.JsonSegment 6 | 7 | @JsonSegment("tabby/telemetry") 8 | interface TelemetryFeature { 9 | @JsonNotification 10 | fun event(params: EventParams) 11 | } 12 | -------------------------------------------------------------------------------- /clients/intellij/src/main/resources/META-INF/plugin-kotlin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /clients/intellij/src/main/resources/icons/chat.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /clients/intellij/src/main/resources/icons/chat_dark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /clients/intellij/src/main/resources/icons/new-ui/chat.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /clients/intellij/src/main/resources/icons/new-ui/chat_dark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /clients/intellij/src/main/resources/strings.properties: -------------------------------------------------------------------------------- 1 | tabby.info=Tabby notification 2 | tabby.warning=Tabby warnings -------------------------------------------------------------------------------- /clients/tabby-agent/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "es2020": true, 5 | "node": true 6 | }, 7 | "parser": "@typescript-eslint/parser", 8 | "plugins": ["@typescript-eslint"], 9 | "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"], 10 | "rules": { 11 | "@typescript-eslint/no-explicit-any": 0, 12 | "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }] 13 | }, 14 | "ignorePatterns": ["dist", "node_modules"] 15 | } 16 | -------------------------------------------------------------------------------- /clients/tabby-agent/.gitattributes: -------------------------------------------------------------------------------- 1 | *.wasm filter=lfs diff=lfs merge=lfs -text -------------------------------------------------------------------------------- /clients/tabby-agent/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | -------------------------------------------------------------------------------- /clients/tabby-agent/.mocha.env.js: -------------------------------------------------------------------------------- 1 | process.env.NODE_ENV = "test"; 2 | process.env.IS_TEST = 1; 3 | -------------------------------------------------------------------------------- /clients/tabby-agent/.mocharc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | spec: ["src/**/*.test.ts"], 3 | require: ["ts-node/register", "./.mocha.env.js"], 4 | }; 5 | -------------------------------------------------------------------------------- /clients/tabby-agent/.prettierignore: -------------------------------------------------------------------------------- 1 | **/prompts/** 2 | -------------------------------------------------------------------------------- /clients/tabby-agent/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120 3 | } 4 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/chat/global.ts: -------------------------------------------------------------------------------- 1 | export let mutexAbortController: AbortController | undefined = undefined; 2 | 3 | // reset global mutexAbortController to undefined 4 | export const resetMutexAbortController = () => { 5 | mutexAbortController = undefined; 6 | }; 7 | 8 | // initialize global mutexAbortController 9 | export const initMutexAbortController = () => { 10 | if (!mutexAbortController) { 11 | mutexAbortController = new AbortController(); 12 | } 13 | return mutexAbortController; 14 | }; 15 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/chat/prompts/fix-spelling-and-grammar.md: -------------------------------------------------------------------------------- 1 | You are an AI writing assistant. 2 | You help fix spelling, improve grammar and reply the fixed text enclosed in XML tags. 3 | You should not use other XML tags in response unless they are parts of the user document. 4 | The text content to be processed will be enclosed in XML tags. 5 | 6 | {{document}} -------------------------------------------------------------------------------- /clients/tabby-agent/src/chat/prompts/generate-commit-message.md: -------------------------------------------------------------------------------- 1 | You are an AI coding assistant. You should generate a commit message based on the given diff. 2 | You should reply the commit message in the following format: 3 | (): . 4 | 5 | 6 | The could be feat, fix, docs, refactor, style, test, build, ci, or chore. 7 | The scope is optional. 8 | For examples: 9 | - feat: add support for chat. 10 | - fix(ui): fix homepage links. 11 | 12 | The diff is: 13 | ```diff 14 | {{diff}} 15 | ``` -------------------------------------------------------------------------------- /clients/tabby-agent/src/chat/prompts/include-file-context-item.md: -------------------------------------------------------------------------------- 1 | title="{{filepath}}" 2 | referrer="{{referrer}}" 3 | {{content}} 4 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/chat/prompts/include-file-context-list.md: -------------------------------------------------------------------------------- 1 | Here is the list of files available for reference. Each file has a full path as the "title", a short form used as the "referrer" in the user command, and the content enclosed in XML tags. 2 | {{fileList}} -------------------------------------------------------------------------------- /clients/tabby-agent/src/chat/prompts/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.md" { 2 | const content: string; 3 | export default content; 4 | } 5 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/codeCompletion/postprocess/golden/basic_fibonacci_test/python.toml: -------------------------------------------------------------------------------- 1 | description = 'Basic python function fibonacci' 2 | 3 | [config] 4 | # use default config 5 | 6 | [context] 7 | filepath = 'fibonacci.py' 8 | language = 'python' 9 | # indentation = ' ' # not specified 10 | text = ''' 11 | def fibonacci(n): 12 | ├if n == 0 or n == 1: 13 | return n┤ 14 | return fibonacci(n - 1) + fibonacci(n - 2) 15 | ''' 16 | 17 | [expected] 18 | unchanged = true 19 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/codeCompletion/postprocess/golden/remove_duplication/basic.toml: -------------------------------------------------------------------------------- 1 | description = 'Remove duplication: keep unchanged' 2 | 3 | [config] 4 | # use default config 5 | 6 | [context] 7 | filepath = 'foo.js' 8 | language = 'javascript' 9 | # indentation = ' ' # not specified 10 | text = ''' 11 | function print(obj) { 12 | ├console.log(obj);┤ 13 | console.log(obj); 14 | } 15 | ''' 16 | 17 | [expected] 18 | discard = true 19 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/codeCompletion/postprocess/golden/remove_duplication/similar_lines_01.toml: -------------------------------------------------------------------------------- 1 | description = 'Remove duplication: similar lines: bad case 01' 2 | 3 | [config] 4 | # use default config 5 | 6 | [context] 7 | filepath = 'checks.js' 8 | language = 'javascript' 9 | # indentation = ' ' # not specified 10 | text = ''' 11 | function check(obj) { 12 | if (obj.a) { 13 | return true; 14 | ├}┤ 15 | } 16 | ''' 17 | 18 | [expected] 19 | unchanged = true 20 | notEqual = true # FIXME: fix bad case 21 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/codeCompletion/postprocess/golden/replace_range/basic.toml: -------------------------------------------------------------------------------- 1 | description = 'Replace range: basic' 2 | 3 | [config] 4 | # use default config 5 | 6 | [context] 7 | filepath = 'hello.js' 8 | language = 'javascript' 9 | # indentation = ' ' # not specified 10 | text = ''' 11 | function printHello(├) { 12 | console.log('Hello'); 13 | }┤) 14 | ''' 15 | 16 | [expected] 17 | text = ''' 18 | function printHello(├) { 19 | console.log('Hello'); 20 | }┤)╣ 21 | ''' 22 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/codeCompletion/postprocess/golden/replace_range/typescript_01.toml: -------------------------------------------------------------------------------- 1 | description = 'Replace range: typescript 01' 2 | 3 | [config] 4 | # use default config 5 | 6 | [context] 7 | filepath = 'print.ts' 8 | language = 'typescript' 9 | # indentation = ' ' # not specified 10 | text = ''' 11 | function print(obj: any) { 12 | console.log("Obj: ├", obj);┤") 13 | } 14 | ''' 15 | 16 | [expected] 17 | text = ''' 18 | function print(obj: any) { 19 | console.log("Obj: ├", obj);┤")╣ 20 | } 21 | ''' 22 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/env.ts: -------------------------------------------------------------------------------- 1 | // FIXME: refactor env variables for running tests 2 | export const isBrowser = !!process.env["IS_BROWSER"]; 3 | export const isTest = !!process.env["IS_TEST"]; 4 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import * as dns from "node:dns"; 4 | import { isBrowser } from "./env"; 5 | import { Server } from "./server"; 6 | 7 | if (!isBrowser) { 8 | dns.setDefaultResultOrder("ipv4first"); 9 | } 10 | 11 | const server = new Server(); 12 | server.listen(); 13 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/logger/type.d.ts: -------------------------------------------------------------------------------- 1 | export interface Logger { 2 | error: (msg: string, error: any) => void; 3 | warn: (msg: string) => void; 4 | info: (msg: string) => void; 5 | debug: (msg: string) => void; 6 | trace: (msg: string, verbose?: any) => void; 7 | } 8 | -------------------------------------------------------------------------------- /clients/tabby-agent/src/utils/types.ts: -------------------------------------------------------------------------------- 1 | import { Range } from "vscode-languageserver"; 2 | import { TextDocument } from "vscode-languageserver-textdocument"; 3 | 4 | export interface DocumentRange { 5 | document: TextDocument; 6 | range: Range; 7 | } 8 | -------------------------------------------------------------------------------- /clients/tabby-agent/wasm/tree-sitter-go.wasm: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1b69c5af834fd23053238e484c7fe9ed2f121d5b1fe32242af78576d67e49f1e 3 | size 240169 4 | -------------------------------------------------------------------------------- /clients/tabby-agent/wasm/tree-sitter-python.wasm: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:72d0f97ba6c3134d7873ec5c9d0fd3c1f5137f4eac4dda0709993d92809e62b6 3 | size 474189 4 | -------------------------------------------------------------------------------- /clients/tabby-agent/wasm/tree-sitter-ruby.wasm: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1190cddd839b78c2aec737573399a71c23fe9a546d3543f86304c4c68ca73852 3 | size 990787 4 | -------------------------------------------------------------------------------- /clients/tabby-agent/wasm/tree-sitter-rust.wasm: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:273f9ce6f2c595ad4e63b3195513b61974ae1ec513efcce39da1afa90574ef38 3 | size 844087 4 | -------------------------------------------------------------------------------- /clients/tabby-agent/wasm/tree-sitter-tsx.wasm: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:060422a330f9c819a10e7310788d336dbcb53cc6a4be0e91d40f644564080f97 3 | size 1182114 4 | -------------------------------------------------------------------------------- /clients/tabby-agent/wasm/tree-sitter.wasm: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:17382e1a69bd628107e8dfe37d31d57f7ba948e5f2da77e56a8aa010488dc5ae 3 | size 186526 4 | -------------------------------------------------------------------------------- /clients/tabby-chat-panel/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | -------------------------------------------------------------------------------- /clients/tabby-chat-panel/README.md: -------------------------------------------------------------------------------- 1 | # tabby-chat-panel 2 | -------------------------------------------------------------------------------- /clients/tabby-chat-panel/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild' 2 | 3 | export default defineBuildConfig({ 4 | entries: [ 5 | 'src/index', 6 | 'src/react', 7 | ], 8 | declaration: true, 9 | clean: true, 10 | rollup: { 11 | emitCJS: true, 12 | }, 13 | }) 14 | -------------------------------------------------------------------------------- /clients/tabby-chat-panel/eslint.config.js: -------------------------------------------------------------------------------- 1 | import antfu from '@antfu/eslint-config' 2 | 3 | export default antfu({ 4 | rules: { 5 | curly: ['off', 'all'], 6 | }, 7 | }) 8 | -------------------------------------------------------------------------------- /clients/tabby-chat-panel/src/browser.ts: -------------------------------------------------------------------------------- 1 | import { createThreadFromIframe } from 'tabby-threads' 2 | import { createClient as createClientFromThread } from './thread' 3 | import type { ClientApi } from './client' 4 | import type { ServerApi, ServerApiList } from './server' 5 | 6 | export async function createClient(iframe: HTMLIFrameElement, api: ClientApi): Promise { 7 | const thread = createThreadFromIframe(iframe, { expose: api }) 8 | return await createClientFromThread(thread) 9 | } 10 | -------------------------------------------------------------------------------- /clients/tabby-chat-panel/src/index.ts: -------------------------------------------------------------------------------- 1 | import { version } from '../package.json' 2 | 3 | export const TABBY_CHAT_PANEL_API_VERSION: string = version 4 | export * from './types' 5 | export * from './thread' 6 | export * from './server' 7 | export * from './client' 8 | -------------------------------------------------------------------------------- /clients/tabby-chat-panel/test/index.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | 3 | describe('should', () => { 4 | it('exported', () => { 5 | expect(1).toEqual(1) 6 | }) 7 | }) 8 | -------------------------------------------------------------------------------- /clients/tabby-chat-panel/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "jsx": "react", 5 | "lib": ["ESNext", "DOM"], 6 | "module": "ESNext", 7 | "moduleResolution": "Bundler", 8 | "resolveJsonModule": true, 9 | "strict": true, 10 | "strictNullChecks": true, 11 | "esModuleInterop": true, 12 | "skipDefaultLibCheck": true, 13 | "skipLibCheck": true 14 | }, 15 | "include": ["src", "test", "build.config.ts"] 16 | } 17 | -------------------------------------------------------------------------------- /clients/tabby-openapi/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /clients/tabby-openapi/lib/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from "./tabby"; 2 | -------------------------------------------------------------------------------- /clients/tabby-threads/.gitignore: -------------------------------------------------------------------------------- 1 | .rollup.cache 2 | dist -------------------------------------------------------------------------------- /clients/tabby-threads/source/abort-signal.ts: -------------------------------------------------------------------------------- 1 | export { acceptThreadAbortSignal } from "./abort-signal/accept"; 2 | export { createThreadAbortSignal } from "./abort-signal/create"; 3 | export type { ThreadAbortSignal } from "./abort-signal/types"; 4 | -------------------------------------------------------------------------------- /clients/tabby-threads/source/constants.ts: -------------------------------------------------------------------------------- 1 | export const RETAIN_METHOD = Symbol.for('quilt.threads.retain'); 2 | export const RELEASE_METHOD = Symbol.for('quilt.threads.release'); 3 | export const RETAINED_BY = Symbol.for('quilt.threads.retained-by'); 4 | export const ENCODE_METHOD = Symbol.for('quilt.threads.encode'); 5 | export const TRANSFERABLE = Symbol.for('quilt.threads.transferable'); 6 | -------------------------------------------------------------------------------- /clients/tabby-threads/source/encoding.ts: -------------------------------------------------------------------------------- 1 | export { createBasicEncoder } from "./encoding/basic"; 2 | -------------------------------------------------------------------------------- /clients/tabby-threads/source/signals.ts: -------------------------------------------------------------------------------- 1 | export { createThreadSignal } from "./signals/create.js"; 2 | export { acceptThreadSignal, isThreadSignal } from "./signals/accept.js"; 3 | export type { ThreadSignal } from "./signals/types.js"; 4 | -------------------------------------------------------------------------------- /clients/tabby-threads/source/targets/iframe/shared.ts: -------------------------------------------------------------------------------- 1 | export const CHECK_MESSAGE = 'quilt.threads.ping'; 2 | export const RESPONSE_MESSAGE = 'quilt.threads.pong'; 3 | -------------------------------------------------------------------------------- /clients/vim/.gitignore: -------------------------------------------------------------------------------- 1 | /doc/tags 2 | -------------------------------------------------------------------------------- /clients/vim/autoload/tabby.vim: -------------------------------------------------------------------------------- 1 | if exists('g:autoloaded_tabby') 2 | finish 3 | endif 4 | let g:autoloaded_tabby = 1 5 | 6 | let g:tabby_version = "2.0.0-dev" 7 | 8 | function! tabby#Setup() 9 | call tabby#lsp#Setup() 10 | call tabby#inline_completion#Setup() 11 | endfunction 12 | -------------------------------------------------------------------------------- /clients/vim/lua/tabby.lua: -------------------------------------------------------------------------------- 1 | return { 2 | lsp = require 'tabby.lsp', 3 | } 4 | -------------------------------------------------------------------------------- /clients/vim/lua/tabby/lsp.lua: -------------------------------------------------------------------------------- 1 | return { 2 | nvim_lsp = require 'tabby.lsp.nvim_lsp', 3 | } 4 | -------------------------------------------------------------------------------- /clients/vim/plugin/tabby.vim: -------------------------------------------------------------------------------- 1 | if exists('g:loaded_tabby') 2 | finish 3 | endif 4 | let g:loaded_tabby = 1 5 | 6 | call tabby#Setup() 7 | -------------------------------------------------------------------------------- /clients/vscode/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "es2020": true, 5 | "node": true 6 | }, 7 | "parser": "@typescript-eslint/parser", 8 | "plugins": ["@typescript-eslint"], 9 | "extends": [ 10 | "eslint:recommended", 11 | "plugin:@typescript-eslint/strict", 12 | "plugin:@typescript-eslint/stylistic", 13 | "prettier" 14 | ], 15 | "ignorePatterns": ["dist", "node_modules"] 16 | } 17 | -------------------------------------------------------------------------------- /clients/vscode/.gitattributes: -------------------------------------------------------------------------------- 1 | *.png filter=lfs diff=lfs merge=lfs -text 2 | *.svg filter=lfs diff=lfs merge=lfs -text -------------------------------------------------------------------------------- /clients/vscode/.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | dist 3 | node_modules 4 | generated 5 | .vscode-test/ 6 | .vscode-test-web/ 7 | *.vsix 8 | chat-panel/ -------------------------------------------------------------------------------- /clients/vscode/.mocha.env.js: -------------------------------------------------------------------------------- 1 | process.env.NODE_ENV = "test"; 2 | process.env.IS_TEST = 1; 3 | -------------------------------------------------------------------------------- /clients/vscode/.mocharc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | spec: ["src/**/*.test.ts"], 3 | require: ["ts-node/register", "./.mocha.env.js"], 4 | }; 5 | -------------------------------------------------------------------------------- /clients/vscode/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120 3 | } 4 | -------------------------------------------------------------------------------- /clients/vscode/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | .vscode-test-web/** 4 | out/** 5 | **/node_modules/** 6 | src/** 7 | .gitignore 8 | .gitattributes 9 | .prettierrc.json 10 | tsup.config.ts 11 | .yarnrc 12 | **/tsconfig.json 13 | **/.eslintrc.json 14 | **/*.map 15 | **/*.ts 16 | scripts/** 17 | .turbo 18 | -------------------------------------------------------------------------------- /clients/vscode/assets/chat.svg: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4826ce8f21a55f8b020b23f491fc241f6bc275c709596898dddb44fd4c9bb8f3 3 | size 297 4 | -------------------------------------------------------------------------------- /clients/vscode/assets/logo.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:5f358d0230465ca2eb0c1d4d7f2e89b1cb369289ddf0ffa5db01e91b4b9c052c 3 | size 245810 4 | -------------------------------------------------------------------------------- /clients/vscode/assets/tabby.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:163ea1f583c171e1bdfed2c3a3c94347bd7956c2ad4a9f07a0c4edcdba53ddcd 3 | size 46728 4 | -------------------------------------------------------------------------------- /clients/vscode/assets/walkthroughs/chatEdit.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:c5050d25444340107a29cc9fb7f46c4698a65e144dea5310f886566621bfd076 3 | size 53699 4 | -------------------------------------------------------------------------------- /clients/vscode/assets/walkthroughs/chatEditCompleted.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:ed5e0c8b606a0de6318bb5d958184a11348e8e9e4337c20c90de9bc590a85f62 3 | size 81022 4 | -------------------------------------------------------------------------------- /clients/vscode/assets/walkthroughs/chatView.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:a56ad3fa79321fc45006abfbe6b42b9c23d8877ae4510e6048da717b2da21811 3 | size 138447 4 | -------------------------------------------------------------------------------- /clients/vscode/assets/walkthroughs/chatViewWithSelected.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:457fb1986ecf55677d2a9fde55aeed96a54b0e82e82671c459bf06bd248aab1b 3 | size 175550 4 | -------------------------------------------------------------------------------- /clients/vscode/assets/walkthroughs/commandPalette.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:85ccb0d0393819d71d271628fef949e949f1c663bed9b58dfc8be529fcf4b4b0 3 | size 50890 4 | -------------------------------------------------------------------------------- /clients/vscode/assets/walkthroughs/connectToServer_token.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:b956f540455128fe311b69669ec68563c37748515d12531e213fc449fd1f8307 3 | size 19537 4 | -------------------------------------------------------------------------------- /clients/vscode/assets/walkthroughs/connectToServer_url.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:00508e2b1296196a885bc2e24e7c53b95f02088c0c7d6a17ab1f751b4ebc8fd8 3 | size 37449 4 | -------------------------------------------------------------------------------- /clients/vscode/assets/walkthroughs/multipleChoice.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:44164f2e086b599f681858c0a2a11a9df928e5323cec8bdbdc49dd2ac84e411d 3 | size 49039 4 | -------------------------------------------------------------------------------- /clients/vscode/assets/walkthroughs/statusbarReady.png: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:a87247c8ca9e1a5f7bd7fce491049c6af1edb90f880b6f1215f221f93a1b3b59 3 | size 13746 4 | -------------------------------------------------------------------------------- /clients/vscode/scripts/dummy.js: -------------------------------------------------------------------------------- 1 | // This dummy js file is used as the entrypoint of the copy tabby-agent task. 2 | -------------------------------------------------------------------------------- /clients/vscode/scripts/publish.cjs: -------------------------------------------------------------------------------- 1 | const packageJson = require("../package.json"); 2 | const semver = require("semver"); 3 | 4 | const minor = semver.minor(packageJson.version); 5 | 6 | if (minor % 2 === 0) { 7 | console.warn("Even minor version, release as stable channel"); 8 | console.log("publish"); 9 | } else { 10 | console.warn("Odd minor version, release as prerelease channel"); 11 | console.log("publish-prerelease"); 12 | } 13 | -------------------------------------------------------------------------------- /clients/vscode/src/chat/dom.d.ts: -------------------------------------------------------------------------------- 1 | // We don't include DOM types in typescript building config 2 | 3 | // FIXME: Types used in `tabby-chat-panel` and `tabby-threads` 4 | declare type HTMLIFrameElement = unknown; 5 | declare type KeyboardEventInit = unknown; 6 | -------------------------------------------------------------------------------- /clients/vscode/src/chat/html/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.html" { 2 | const content: string; 3 | export default content; 4 | } 5 | -------------------------------------------------------------------------------- /clients/vscode/src/deferred.ts: -------------------------------------------------------------------------------- 1 | export const noop = () => { 2 | // 3 | }; 4 | 5 | export class Deferred { 6 | public resolve: (value: T | PromiseLike) => void = noop; 7 | public reject: (err?: unknown) => void = noop; 8 | public readonly promise: Promise; 9 | 10 | constructor() { 11 | this.promise = new Promise((resolve, reject) => { 12 | this.resolve = resolve; 13 | this.reject = reject; 14 | }); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /clients/vscode/src/env.ts: -------------------------------------------------------------------------------- 1 | export const isBrowser = !!process.env["IS_BROWSER"]; 2 | -------------------------------------------------------------------------------- /clients/vscode/src/lsp/ConfigurationMiddleware.ts: -------------------------------------------------------------------------------- 1 | import { ConfigurationMiddleware as VscodeLspConfigurationMiddleware } from "vscode-languageclient"; 2 | import { ClientProvidedConfig } from "tabby-agent"; 3 | import { Config } from "../Config"; 4 | 5 | export class ConfigurationMiddleware implements VscodeLspConfigurationMiddleware { 6 | constructor(private readonly config: Config) {} 7 | 8 | async configuration(): Promise { 9 | return [this.config.buildClientProvidedConfig()]; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /clients/vscode/src/lsp/vscodeWindowUtils.ts: -------------------------------------------------------------------------------- 1 | import { window, TextEditor, Uri } from "vscode"; 2 | 3 | export function findTextEditor(uri: Uri): TextEditor | undefined { 4 | if (window.activeTextEditor?.document.uri.toString() === uri.toString()) { 5 | return window.activeTextEditor; 6 | } 7 | return window.visibleTextEditors.find((editor) => editor.document.uri.toString() === uri.toString()); 8 | } 9 | -------------------------------------------------------------------------------- /clients/vscode/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "noUnusedLocals": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | project: 4 | default: 5 | threshold: 0% 6 | patch: 7 | default: 8 | target: 75% 9 | threshold: 0% -------------------------------------------------------------------------------- /crates/aim-downloader/README.md: -------------------------------------------------------------------------------- 1 | # http_downloader 2 | 3 | Adopted from https://github.com/mihaigalos/aim -------------------------------------------------------------------------------- /crates/aim-downloader/src/consts.rs: -------------------------------------------------------------------------------- 1 | use clap::crate_version; 2 | 3 | pub const CLIENT_ID: &str = concat!( 4 | env!("CARGO_PKG_REPOSITORY"), 5 | "/releases/tag/", 6 | crate_version!() 7 | ); 8 | -------------------------------------------------------------------------------- /crates/aim-downloader/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod bar; 2 | pub mod error; 3 | pub mod https; 4 | 5 | mod address; 6 | mod consts; 7 | pub mod hash; 8 | mod io; 9 | mod netrc; 10 | mod untildify; 11 | -------------------------------------------------------------------------------- /crates/hash-ids/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "hash-ids" 3 | version.workspace = true 4 | edition.workspace = true 5 | authors.workspace = true 6 | homepage.workspace = true 7 | 8 | [dependencies] 9 | -------------------------------------------------------------------------------- /crates/hash-ids/src/README.md: -------------------------------------------------------------------------------- 1 | # hash-ids 2 | 3 | Vendored fork from https://github.com/kardeiz/hash-ids (MIT License) -------------------------------------------------------------------------------- /crates/ollama-api-bindings/src/lib.rs: -------------------------------------------------------------------------------- 1 | mod model; 2 | 3 | mod completion; 4 | pub use completion::create as create_completion; 5 | 6 | mod embedding; 7 | pub use embedding::create as create_embedding; 8 | -------------------------------------------------------------------------------- /crates/sqlx-migrate-validate/README.md: -------------------------------------------------------------------------------- 1 | # sqlx-migrate-validate 2 | 3 | Vendored fork of https://github.com/tobikris/sqlx-migrate-validate -------------------------------------------------------------------------------- /crates/sqlx-migrate-validate/src/error.rs: -------------------------------------------------------------------------------- 1 | use sqlx::migrate::MigrateError; 2 | 3 | #[derive(Debug, thiserror::Error)] 4 | #[non_exhaustive] 5 | pub enum ValidateError { 6 | #[error("migration {0} was not applied")] 7 | VersionNotApplied(i64), 8 | 9 | #[error(transparent)] 10 | MigrateError(#[from] MigrateError), 11 | } 12 | -------------------------------------------------------------------------------- /crates/sqlx-migrate-validate/tests/migrations-1/20230312133715_create_table.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE users ( 2 | user_id TEXT PRIMARY KEY, 3 | username TEXT NOT NULL 4 | ); -------------------------------------------------------------------------------- /crates/sqlx-migrate-validate/tests/migrations-2/20230312133715_create_table.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE users ( 2 | user_id TEXT PRIMARY KEY, 3 | username TEXT NOT NULL 4 | ); -------------------------------------------------------------------------------- /crates/sqlx-migrate-validate/tests/migrations-2/20230312141719_add_other_table.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE roles ( 2 | role_id TEXT PRIMARY KEY, 3 | role_name TEXT NOT NULL 4 | ); -------------------------------------------------------------------------------- /crates/sqlx-migrate-validate/tests/migrations-3/20230312141719_add_other_table.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE roles ( 2 | role_id TEXT PRIMARY KEY, 3 | role_name TEXT NOT NULL 4 | ); -------------------------------------------------------------------------------- /crates/sqlx-migrate-validate/tests/migrations-4/20230312133715_create_table.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE users ( 2 | user_id TEXT PRIMARY KEY, 3 | username TEXT NOT NULL, 4 | email TEXT NOT NULL 5 | ); -------------------------------------------------------------------------------- /crates/tabby-common/src/api/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod code; 2 | pub mod event; 3 | pub mod ingestion; 4 | pub mod server_setting; 5 | pub mod structured_doc; 6 | -------------------------------------------------------------------------------- /crates/tabby-common/src/api/server_setting.rs: -------------------------------------------------------------------------------- 1 | use serde::{Deserialize, Serialize}; 2 | use utoipa::ToSchema; 3 | 4 | #[derive(Serialize, Deserialize, ToSchema, Clone, Debug)] 5 | pub struct ServerSetting { 6 | pub disable_client_side_telemetry: bool, 7 | } 8 | -------------------------------------------------------------------------------- /crates/tabby-common/src/constants.rs: -------------------------------------------------------------------------------- 1 | pub static USER_HEADER_FIELD_NAME: &str = "x-tabby-user"; 2 | -------------------------------------------------------------------------------- /crates/tabby-common/src/lib.rs: -------------------------------------------------------------------------------- 1 | //! Common tabby types and utilities. 2 | //! Defines common types and utilities used across multiple tabby subprojects, especially serialization and deserialization targets. 3 | pub mod api; 4 | pub mod axum; 5 | pub mod config; 6 | pub mod constants; 7 | pub mod index; 8 | pub mod languages; 9 | pub mod path; 10 | pub mod registry; 11 | pub mod terminal; 12 | pub mod usage; 13 | -------------------------------------------------------------------------------- /crates/tabby-download/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "tabby-download" 3 | version = "0.30.0-dev.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | aim-downloader = { path = "../aim-downloader" } 8 | tabby-common = { path = "../tabby-common" } 9 | anyhow = { workspace = true } 10 | tracing = { workspace = true } 11 | tokio-retry = { workspace = true } 12 | 13 | [dev-dependencies] 14 | serial_test = { workspace = true } 15 | -------------------------------------------------------------------------------- /crates/tabby-index-cli/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "tabby-index-cli" 3 | version.workspace = true 4 | edition.workspace = true 5 | authors.workspace = true 6 | homepage.workspace = true 7 | 8 | [dependencies] 9 | clap = { workspace = true, features = ["derive"]} 10 | tantivy.workspace = true 11 | tabby-common = { path = "../tabby-common" } 12 | anyhow.workspace = true 13 | serde.workspace = true 14 | serde_json.workspace = true 15 | -------------------------------------------------------------------------------- /crates/tabby-index-cli/README.md: -------------------------------------------------------------------------------- 1 | # tabby-index-cli 2 | 3 | A cli tool to help debugging tabby's index, deriving from https://github.com/quickwit-oss/tantivy-cli -------------------------------------------------------------------------------- /crates/tabby-index-cli/assets/queries.txt: -------------------------------------------------------------------------------- 1 | chunk_tokens:embedding_one_1 AND chunk_tokens:embedding_zero_2 -------------------------------------------------------------------------------- /crates/tabby-index-cli/src/commands/mod.rs: -------------------------------------------------------------------------------- 1 | mod bench; 2 | mod head; 3 | mod inspect; 4 | 5 | pub use self::{ 6 | bench::{run_bench_cli, BenchArgs}, 7 | head::{run_head_cli, HeadArgs}, 8 | inspect::run_inspect_cli, 9 | }; 10 | -------------------------------------------------------------------------------- /crates/tabby-index/README.md: -------------------------------------------------------------------------------- 1 | # tabby-index 2 | 3 | This package contains indexer definition for Code / Documentation corpus. -------------------------------------------------------------------------------- /crates/tabby-index/queries/csharp.scm: -------------------------------------------------------------------------------- 1 | ( 2 | (class_declaration (identifier) @name) @definition.class 3 | ) 4 | 5 | ( 6 | (struct_declaration (identifier) @name) @definition.struct 7 | ) 8 | 9 | ( 10 | (method_declaration (identifier) @name) @definition.method 11 | ) 12 | 13 | ( 14 | (interface_declaration (identifier) @name) @definition.interface 15 | ) 16 | 17 | ( 18 | (local_function_statement (identifier) @name) @definition.function 19 | ) -------------------------------------------------------------------------------- /crates/tabby-index/queries/gdscript.scm: -------------------------------------------------------------------------------- 1 | 2 | ( 3 | (class_definition (name) @name) @definition.class 4 | ) 5 | 6 | ( 7 | (function_definition (name) @name) @definition.function 8 | ) 9 | 10 | ( 11 | (call (identifier) @name) @reference.call 12 | ) 13 | -------------------------------------------------------------------------------- /crates/tabby-index/queries/kotlin.scm: -------------------------------------------------------------------------------- 1 | ( 2 | (function_declaration (simple_identifier) @name) @definition.function 3 | ) 4 | 5 | ( 6 | (class_declaration (type_identifier) @name) @definition.class 7 | ) 8 | 9 | ( 10 | (object_literal (delegation_specifier) @name) @definition.object 11 | ) 12 | 13 | -------------------------------------------------------------------------------- /crates/tabby-inference/src/embedding.rs: -------------------------------------------------------------------------------- 1 | use async_trait::async_trait; 2 | 3 | #[async_trait] 4 | pub trait Embedding: Sync + Send { 5 | async fn embed(&self, prompt: &str) -> anyhow::Result>; 6 | } 7 | -------------------------------------------------------------------------------- /crates/tabby/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /crates/tabby/src/routes/metrics.rs: -------------------------------------------------------------------------------- 1 | use std::sync::Arc; 2 | 3 | use axum::extract::State; 4 | use axum_prometheus::metrics_exporter_prometheus::PrometheusHandle; 5 | 6 | pub async fn metrics(State(state): State>) -> String { 7 | state.render() 8 | } 9 | -------------------------------------------------------------------------------- /crates/tabby/src/services/embedding.rs: -------------------------------------------------------------------------------- 1 | use std::sync::Arc; 2 | 3 | use tabby_common::config::ModelConfig; 4 | use tabby_inference::Embedding; 5 | 6 | use super::model; 7 | 8 | pub async fn create(config: &ModelConfig) -> Arc { 9 | model::load_embedding(config).await 10 | } 11 | -------------------------------------------------------------------------------- /crates/tabby/src/services/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod code; 2 | pub mod completion; 3 | pub mod embedding; 4 | pub mod event; 5 | pub mod health; 6 | pub mod model; 7 | pub mod structured_doc; 8 | pub mod tantivy; 9 | -------------------------------------------------------------------------------- /crates/tabby/tests/snapshots/goldentests__run_golden_tests_cpu-2.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: crates/tabby/tests/goldentests.rs 3 | expression: "golden_test(json!({\n \"language\": \"python\", \"seed\": 0, \"segments\":\n { \"prefix\": \"def char_frequencies(str):\\n freqs = {}\\n \", }\n })).await" 4 | --- 5 | choices: 6 | - index: 0 7 | text: "for c in str:\n freqs[c] = freqs.get(c, 0) + 1\n return freqs" 8 | debug_data: {} 9 | id: test-id 10 | -------------------------------------------------------------------------------- /crates/tabby/tests/snapshots/goldentests_chat__run_chat_golden_tests_cpu.snap: -------------------------------------------------------------------------------- 1 | --- 2 | source: crates/tabby/tests/goldentests_chat.rs 3 | expression: "golden_test(json!({\n \"seed\": 0, \"model\": \"default\", \"messages\":\n [{ \"role\": \"user\", \"content\": \"How are you?\" }]\n })).await" 4 | --- 5 | " I'm an AI language model, so I don't have feelings or emotions like a human does. I'm here to help you with any questions or tasks you have. How can I assist you today?" 6 | -------------------------------------------------------------------------------- /ee/tabby-db-macros/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "tabby-db-macros" 3 | version.workspace = true 4 | edition.workspace = true 5 | authors.workspace = true 6 | homepage.workspace = true 7 | 8 | [lib] 9 | proc-macro = true 10 | 11 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 12 | 13 | [dependencies] 14 | quote = "1.0.35" 15 | syn = { version = "2.0.52", features = ["full"] } 16 | -------------------------------------------------------------------------------- /ee/tabby-db/.gitignore: -------------------------------------------------------------------------------- 1 | schema.sqlite-* 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0001_registration-token-table.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE registration_token; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0001_registration-token-table.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS registration_token ( 2 | id INTEGER PRIMARY KEY AUTOINCREMENT, 3 | token VARCHAR(255) NOT NULL, 4 | created_at TIMESTAMP DEFAULT (DATETIME('now')), 5 | updated_at TIMESTAMP DEFAULT (DATETIME('now')), 6 | CONSTRAINT `idx_token` UNIQUE (`token`) 7 | ); -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0002_users-table.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE users; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0003_invitations-table.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE invitations; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0003_invitations-table.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS invitations ( 2 | id INTEGER PRIMARY KEY AUTOINCREMENT, 3 | email VARCHAR(150) NOT NULL COLLATE NOCASE, 4 | code VARCHAR(36) NOT NULL, 5 | created_at TIMESTAMP DEFAULT (DATETIME('now')), 6 | CONSTRAINT `idx_email` UNIQUE (`email`) 7 | CONSTRAINT `idx_code` UNIQUE (`code`) 8 | ); -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0004_refresh-tokens.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE refresh_tokens; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0004_refresh-tokens.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS refresh_tokens ( 2 | id INTEGER PRIMARY KEY AUTOINCREMENT, 3 | user_id INTEGER NOT NULL, 4 | token VARCHAR(255) NOT NULL COLLATE NOCASE, 5 | expires_at TIMESTAMP NOT NULL, 6 | created_at TIMESTAMP DEFAULT (DATETIME('now')), 7 | CONSTRAINT `idx_token` UNIQUE (`token`) 8 | ); -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0005_job-runs-table.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE job_runs; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0005_job-runs-table.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS job_runs ( 2 | id INTEGER PRIMARY KEY AUTOINCREMENT, 3 | job VARCHAR(255) NOT NULL, 4 | start_ts TIMESTAMP NOT NULL, 5 | end_ts TIMESTAMP, 6 | exit_code INTEGER, 7 | stdout TEXT NOT NULL, 8 | stderr TEXT NOT NULL, 9 | created_at TIMESTAMP DEFAULT (DATETIME('now')), 10 | updated_at TIMESTAMP DEFAULT (DATETIME('now')) 11 | ); -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0006_github-oauth-credential.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE github_oauth_credential; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0006_github-oauth-credential.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS github_oauth_credential ( 2 | id INTEGER PRIMARY KEY AUTOINCREMENT, 3 | client_id VARCHAR(32) NOT NULL, 4 | client_secret VARCHAR(64) NOT NULL, 5 | created_at TIMESTAMP NOT NULL DEFAULT (DATETIME('now')), 6 | updated_at TIMESTAMP NOT NULL DEFAULT (DATETIME('now')) 7 | ); 8 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0007_email-setting.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE email_setting; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0007_email-setting.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS email_setting( 2 | id INTEGER PRIMARY KEY AUTOINCREMENT, 3 | smtp_username VARCHAR(255) NOT NULL, 4 | smtp_password VARCHAR(255) NOT NULL, 5 | smtp_server VARCHAR(255) NOT NULL 6 | ); 7 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0008_repositories-table.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE repositories; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0008_repositories-table.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS repositories ( 2 | id INTEGER PRIMARY KEY AUTOINCREMENT, 3 | name VARCHAR(255) NOT NULL, 4 | git_url VARCHAR(255) NOT NULL, 5 | CONSTRAINT `idx_name` UNIQUE (`name`) 6 | CONSTRAINT `idx_git_url` UNIQUE (`git_url`) 7 | ); 8 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0009_google-oauth-credential.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE google_oauth_credential; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0009_google-oauth-credential.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS google_oauth_credential ( 2 | id INTEGER PRIMARY KEY AUTOINCREMENT, 3 | client_id VARCHAR(256) NOT NULL, 4 | client_secret VARCHAR(64) NOT NULL, 5 | redirect_uri VARCHAR(256) NOT NULL, 6 | created_at TIMESTAMP DEFAULT (DATETIME('now')), 7 | updated_at TIMESTAMP DEFAULT (DATETIME('now')) 8 | ); 9 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0010_server-setting.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE server_setting; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0010_server-setting.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE server_setting ( 2 | id INTEGER PRIMARY KEY AUTOINCREMENT, 3 | security_allowed_register_domain_list STRING, 4 | security_disable_client_side_telemetry BOOLEAN NOT NULL DEFAULT FALSE, 5 | network_external_url STRING NOT NULL DEFAULT 'http://localhost:8080' 6 | ); 7 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0011_new-email-settings.down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE email_setting DROP COLUMN from_address; 2 | ALTER TABLE email_setting DROP COLUMN encryption; 3 | ALTER TABLE email_setting DROP COLUMN auth_method; 4 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0011_new-email-settings.up.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE email_setting; 2 | CREATE TABLE IF NOT EXISTS email_setting( 3 | id INTEGER PRIMARY KEY AUTOINCREMENT, 4 | smtp_username VARCHAR(255) NOT NULL, 5 | smtp_password VARCHAR(255) NOT NULL, 6 | smtp_server VARCHAR(255) NOT NULL, 7 | from_address VARCHAR(255) NOT NULL, 8 | encryption VARCHAR(255) NOT NULL DEFAULT 'ssltls', 9 | auth_method VARCHAR(255) NOT NULL DEFAULT 'plain' 10 | ); 11 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0012_remove-redirect-uri-field-oauth.down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE google_oauth_credential ADD COLUMN redirect_uri VARCHAR(256); -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0012_remove-redirect-uri-field-oauth.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE google_oauth_credential DROP COLUMN redirect_uri; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0013_add-smtp-port.down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE email_setting DROP COLUMN smtp_port; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0013_add-smtp-port.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE email_setting ADD COLUMN smtp_port INTEGER NOT NULL DEFAULT 25; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0014_password-reset.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE password_reset; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0014_password-reset.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE password_reset( 2 | id INTEGER PRIMARY KEY AUTOINCREMENT, 3 | user_id INTEGER NOT NULL UNIQUE, 4 | code VARCHAR(36) NOT NULL, 5 | created_at TIMESTAMP NOT NULL DEFAULT (DATETIME('now')) 6 | ); 7 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0015_enterprise-license.down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE server_setting DROP COLUMN billing_enterprise_license; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0015_enterprise-license.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE server_setting ADD COLUMN billing_enterprise_license STRING; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0016_merge-oauth-tables.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE oauth_credential; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0017_add-user-completions.down.sql: -------------------------------------------------------------------------------- 1 | DROP INDEX user_completions_completion_id_idx; 2 | DROP INDEX user_completions_user_id_language_idx; 3 | DROP TABLE user_completions; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0018_user-password-nullable.down.sql: -------------------------------------------------------------------------------- 1 | UPDATE users SET password_encrypted = 2 | CASE 3 | WHEN password_encrypted IS NULL THEN '' 4 | ELSE password_encrypted 5 | END; 6 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0018_user-password-nullable.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users ADD COLUMN password_encrypted_nullable VARCHAR(128); 2 | 3 | UPDATE users SET password_encrypted_nullable = 4 | CASE 5 | WHEN LENGTH(password_encrypted) = 0 THEN NULL 6 | ELSE password_encrypted 7 | END; 8 | 9 | ALTER TABLE users DROP COLUMN password_encrypted; 10 | ALTER TABLE users RENAME password_encrypted_nullable TO password_encrypted; 11 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0019_user-avatar.down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users DROP COLUMN avatar; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0019_user-avatar.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users ADD COLUMN avatar BLOB DEFAULT NULL; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0020_job-run-index.down.sql: -------------------------------------------------------------------------------- 1 | DROP INDEX idx_job_created_at; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0020_job-run-index.up.sql: -------------------------------------------------------------------------------- 1 | CREATE INDEX idx_job_created_at ON job_runs(job, created_at); 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0021_repository-name-index.down.sql: -------------------------------------------------------------------------------- 1 | DROP INDEX idx_repository_name; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0021_repository-name-index.up.sql: -------------------------------------------------------------------------------- 1 | CREATE INDEX idx_repository_name ON repositories(name); 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0022_github-provider.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE github_repository_provider; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0022_github-provider.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE github_repository_provider( 2 | id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 3 | display_name TEXT NOT NULL, 4 | application_id TEXT NOT NULL, 5 | secret TEXT NOT NULL, 6 | access_token TEXT, 7 | CONSTRAINT `idx_application_id` UNIQUE (`application_id`) 8 | ); 9 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0023_user-completions-created-at-index.down.sql: -------------------------------------------------------------------------------- 1 | DROP INDEX idx_user_completion_user_id_created_at_language; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0023_user-completions-created-at-index.up.sql: -------------------------------------------------------------------------------- 1 | DROP INDEX user_completions_user_id_language_idx; 2 | CREATE INDEX idx_user_completion_user_id_created_at_language ON user_completions(user_id, created_at, language); 3 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0024_github-provided-repos.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE github_provided_repositories; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0025_user-events.down.sql: -------------------------------------------------------------------------------- 1 | DROP INDEX idx_user_events_user_id; 2 | DROP INDEX idx_user_events_created_at; 3 | DROP TABLE user_events; 4 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0025_user-events.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE user_events ( 2 | id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 3 | user_id INTEGER NOT NULL, 4 | kind TEXT NOT NULL, 5 | created_at TIMESTAMP NOT NULL DEFAULT (DATETIME('now')), 6 | payload BLOB NOT NULL, 7 | FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE 8 | ); 9 | CREATE INDEX idx_user_events_user_id ON user_events(user_id); 10 | CREATE INDEX idx_user_events_created_at ON user_events(created_at); 11 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0026_clean-up-tables.down.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/ee/tabby-db/migrations/0026_clean-up-tables.down.sql -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0027_remove-github-repository-columns-on-oauth.down.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/ee/tabby-db/migrations/0027_remove-github-repository-columns-on-oauth.down.sql -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0027_remove-github-repository-columns-on-oauth.up.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE github_repository_provider; 2 | 3 | CREATE TABLE github_repository_provider( 4 | id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 5 | display_name TEXT NOT NULL, 6 | access_token TEXT, 7 | synced_at TIMESTAMP 8 | ); 9 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0028_gitlab-provider.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE gitlab_provided_repositories; 2 | DROP TABLE gitlab_repository_provider; 3 | 4 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0029_merged-provider-tables.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE integrations; 2 | DROP TABLE provided_repositories; 3 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0030_user-name.down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users DROP COLUMN name; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0030_user-name.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE users ADD COLUMN name VARCHAR(255); 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0031_web-crawler-urls.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE web_crawler_urls; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0031_web-crawler-urls.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE web_crawler_urls( 2 | id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 3 | url TEXT NOT NULL, 4 | created_at TIMESTAMP NOT NULL DEFAULT (DATETIME('now')), 5 | CONSTRAINT `unique_url` UNIQUE(url) 6 | ); 7 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0033_add-job-runs-param-column.down.sql: -------------------------------------------------------------------------------- 1 | DROP INDEX `idx_job_runs_command`; 2 | ALTER TABLE job_runs DROP COLUMN command; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0033_add-job-runs-param-column.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE job_runs ADD COLUMN command TEXT; 2 | CREATE INDEX `idx_job_runs_command` ON job_runs(command); 3 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0034_add-started-at-column-in-job-runs.down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE job_runs DROP COLUMN started_at; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0034_add-started-at-column-in-job-runs.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE job_runs ADD COLUMN started_at TIMESTAMP; 2 | 3 | -- Set started_at to created_at for all job runs that have already finished. 4 | UPDATE job_runs SET started_at = created_at WHERE exit_code IS NOT NULL; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0035_add-thread-message-table.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE thread_messages; 2 | DROP TABLE threads; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0036_web_document.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE web_documents; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0036_web_document.up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE web_documents( 2 | id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 3 | name VARCHAR(255) NOT NULL, 4 | url TEXT NOT NULL, 5 | is_preset BOOLEAN NOT NULL DEFAULT FALSE, 6 | created_at TIMESTAMP NOT NULL DEFAULT(DATETIME('now')), 7 | updated_at TIMESTAMP NOT NULL DEFAULT(DATETIME('now')), 8 | CONSTRAINT idx_name UNIQUE(name), 9 | CONSTRAINT idx_url UNIQUE(url) 10 | ); 11 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0037_remove-webcrawler-table.down.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/ee/tabby-db/migrations/0037_remove-webcrawler-table.down.sql -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0037_remove-webcrawler-table.up.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE web_crawler_urls; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0038_add-access-control-tables.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE user_groups; 2 | DROP TABLE user_group_memberships; 3 | DROP TABLE source_id_read_access_policies; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0039_add-notification-inbox.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE notifications; 2 | DROP TABLE read_notifications; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0040_add-code-source-id-column.down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE thread_messages 2 | DROP code_source_id; 3 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0040_add-code-source-id-column.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE thread_messages 2 | ADD code_source_id VARCHAR(255); -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0041_ldap-credential.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE ldap_credential; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0042_add-file-list-attachment.down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE thread_messages 2 | DROP attachment; 3 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0043_page-section.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE page_sections; 2 | DROP TABLE pages; 3 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0044_add-page-sources.down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE pages DROP COLUMN source_id; 2 | 3 | ALTER TABLE page_sections DROP COLUMN attachment; 4 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0044_add-page-sources.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE pages ADD code_source_id VARCHAR(255); 2 | 3 | ALTER TABLE page_sections ADD attachment BLOB NOT NULL DEFAULT '{}'; 4 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0045_remove-deprecated-columns.down.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/ee/tabby-db/migrations/0045_remove-deprecated-columns.down.sql -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0045_remove-deprecated-columns.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE thread_messages DROP COLUMN code_attachments; 2 | ALTER TABLE thread_messages DROP COLUMN client_code_attachments; 3 | ALTER TABLE thread_messages DROP COLUMN doc_attachments; -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0046_add-disable-password-login.down.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE server_setting DROP column security_disable_password_login; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0046_add-disable-password-login.up.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE server_setting ADD column security_disable_password_login BOOLEAN NOT NULL DEFAULT FALSE; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/migrations/0047_add-ingestion.down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE ingested_documents; 2 | -------------------------------------------------------------------------------- /ee/tabby-db/schema.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TabbyML/tabby/9f939f9ae752a7a5608e7286aabdee09b13640a0/ee/tabby-db/schema.sqlite -------------------------------------------------------------------------------- /ee/tabby-db/src/conversions.rs: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ee/tabby-email/.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | .react-email 3 | -------------------------------------------------------------------------------- /ee/tabby-email/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "emails", 3 | "version": "0.0.19", 4 | "private": true, 5 | "scripts": { 6 | "build": "email build && email export", 7 | "dev": "email dev" 8 | }, 9 | "devDependencies": { 10 | "react-email": "2.1.3", 11 | "@react-email/components": "0.0.18", 12 | "@react-email/tailwind": "0.0.17", 13 | "react": "18.2.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ee/tabby-schema/examples/update-schema.rs: -------------------------------------------------------------------------------- 1 | use std::fs::write; 2 | 3 | use tabby_schema::create_schema; 4 | 5 | fn main() { 6 | let schema = create_schema(); 7 | write("ee/tabby-schema/graphql/schema.graphql", schema.as_sdl()).unwrap(); 8 | } 9 | -------------------------------------------------------------------------------- /ee/tabby-schema/src/env.rs: -------------------------------------------------------------------------------- 1 | pub fn is_demo_mode() -> bool { 2 | std::env::var("TABBY_WEBSERVER_DEMO_MODE").is_ok() 3 | } 4 | -------------------------------------------------------------------------------- /ee/tabby-schema/src/juniper/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod relay; 2 | -------------------------------------------------------------------------------- /ee/tabby-schema/src/juniper/relay/page_info.rs: -------------------------------------------------------------------------------- 1 | use juniper::GraphQLObject; 2 | 3 | #[derive(Default, GraphQLObject)] 4 | #[graphql(name = "PageInfo")] 5 | pub struct PageInfo { 6 | pub has_previous_page: bool, 7 | pub has_next_page: bool, 8 | pub start_cursor: Option, 9 | pub end_cursor: Option, 10 | } 11 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/(logs)/jobs/detail/page.tsx: -------------------------------------------------------------------------------- 1 | import JobRunDetail from '../components/job-detail' 2 | 3 | export default function JobDetailPage() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/(logs)/jobs/page.tsx: -------------------------------------------------------------------------------- 1 | import { Metadata } from 'next' 2 | 3 | import JobRunsPage from './components/jobs' 4 | 5 | export const metadata: Metadata = { 6 | title: 'Jobs' 7 | } 8 | 9 | export default function IndexPage() { 10 | return 11 | } 12 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/(logs)/layout.tsx: -------------------------------------------------------------------------------- 1 | export default function LogsLayout({ 2 | children 3 | }: { 4 | children: React.ReactNode 5 | }) { 6 | return
{children}
7 | } 8 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/activities/page.tsx: -------------------------------------------------------------------------------- 1 | import { Metadata } from 'next' 2 | 3 | import Activity from './components/activity' 4 | 5 | export const metadata: Metadata = { 6 | title: 'Activities' 7 | } 8 | export default function Page() { 9 | return 10 | } 11 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/profile/components/email.tsx: -------------------------------------------------------------------------------- 1 | import { noop } from 'lodash-es' 2 | 3 | import { useMe } from '@/lib/hooks/use-me' 4 | import { Input } from '@/components/ui/input' 5 | 6 | export const Email = () => { 7 | const [{ data }] = useMe() 8 | 9 | return ( 10 |
11 | 17 |
18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/profile/page.tsx: -------------------------------------------------------------------------------- 1 | import { Metadata } from 'next' 2 | 3 | import Profile from './components/profile' 4 | 5 | export const metadata: Metadata = { 6 | title: 'Profile' 7 | } 8 | 9 | export default function Page() { 10 | return 11 | } 12 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/reports/components/constants.ts: -------------------------------------------------------------------------------- 1 | export const KEY_SELECT_ALL = 'all' 2 | export const DEFAULT_DATE_RANGE = '-14d' 3 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/reports/page.tsx: -------------------------------------------------------------------------------- 1 | import { Metadata } from 'next' 2 | 3 | import { Report } from './components/report' 4 | 5 | export const metadata: Metadata = { 6 | title: 'Reports' 7 | } 8 | 9 | export default function Page() { 10 | return 11 | } 12 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/mail/components/header.tsx: -------------------------------------------------------------------------------- 1 | import { SubHeader } from '@/components/sub-header' 2 | 3 | export const MailDeliveryHeader = ({ className }: { className?: string }) => { 4 | return ( 5 | 6 | Configuring SMTP information will enable users to receive database reports 7 | via email, such as slow query weekly reports. 8 | 9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/mail/page.tsx: -------------------------------------------------------------------------------- 1 | import { Metadata } from 'next' 2 | 3 | import { Mail } from './components/mail' 4 | 5 | export const metadata: Metadata = { 6 | title: 'Mail Delivery' 7 | } 8 | 9 | export default function MailPage() { 10 | return 11 | } 12 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/providers/[kind]/detail/page.tsx: -------------------------------------------------------------------------------- 1 | import ProviderDetail from './components/provider-detail' 2 | 3 | export default function IndexPage() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/providers/[kind]/detail/query.ts: -------------------------------------------------------------------------------- 1 | import { graphql } from '@/lib/gql/generates' 2 | 3 | export const updateIntegratedRepositoryActiveMutation = graphql(/* GraphQL */ ` 4 | mutation UpdateIntegratedRepositoryActive($id: ID!, $active: Boolean!) { 5 | updateIntegratedRepositoryActive(id: $id, active: $active) 6 | } 7 | `) 8 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/providers/[kind]/new/page.tsx: -------------------------------------------------------------------------------- 1 | import { NewProvider } from './components/new-page' 2 | 3 | export default function IndexPage() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/providers/[kind]/page.tsx: -------------------------------------------------------------------------------- 1 | import RepositoryProvidersPage from './components/provider-list' 2 | 3 | export default function IntegrateGitPage() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/providers/doc/new/page.tsx: -------------------------------------------------------------------------------- 1 | import CreateCustomDocument from '../components/create-custom-doc' 2 | 3 | export default function CreateCustomDocumentPage() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/providers/git/new/components/new-page.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { useRouter } from 'next/navigation' 4 | 5 | import RepositoryForm from './create-repository-form' 6 | 7 | export const NewRepository = () => { 8 | const router = useRouter() 9 | 10 | const onCreated = () => { 11 | router.back() 12 | } 13 | 14 | return ( 15 | <> 16 | 17 | 18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/providers/git/new/page.tsx: -------------------------------------------------------------------------------- 1 | import { NewRepository } from './components/new-page' 2 | 3 | export default function IndexPage() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/providers/git/page.tsx: -------------------------------------------------------------------------------- 1 | import Git from './components/git' 2 | 3 | export default function GitTabPage() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/providers/query.ts: -------------------------------------------------------------------------------- 1 | import { graphql } from '@/lib/gql/generates' 2 | 3 | export const triggerJobRunMutation = graphql(/* GraphQL */ ` 4 | mutation triggerJobRun($command: String!) { 5 | triggerJobRun(command: $command) 6 | } 7 | `) 8 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/sso/components/form-sub-title.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from '@/lib/utils' 2 | 3 | export function SubTitle({ 4 | className, 5 | ...rest 6 | }: React.HTMLAttributes) { 7 | return
8 | } 9 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/sso/detail/ldap/page.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { LdapCredentialDetail } from './components/ldap-credential-detail' 4 | 5 | export default function LDAPCredentialDetailPage() { 6 | return 7 | } 8 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/sso/new/page.tsx: -------------------------------------------------------------------------------- 1 | import { NewPage as NewPageComponent } from './component/new-page' 2 | 3 | const NewPage = () => { 4 | return 5 | } 6 | 7 | export default NewPage 8 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/(integrations)/sso/page.tsx: -------------------------------------------------------------------------------- 1 | import { CredentialList } from './components/credential-list' 2 | 3 | export default function CredentialPage() { 4 | return 5 | } 6 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/general/page.tsx: -------------------------------------------------------------------------------- 1 | import { Metadata } from 'next' 2 | 3 | import General from './components/general' 4 | 5 | export const metadata: Metadata = { 6 | title: 'General' 7 | } 8 | 9 | export default function GeneralSettings() { 10 | return 11 | } 12 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/subscription/page.tsx: -------------------------------------------------------------------------------- 1 | import { Metadata } from 'next' 2 | 3 | import Subscription from './components/subscription' 4 | 5 | export const metadata: Metadata = { 6 | title: 'Subscription' 7 | } 8 | 9 | export default function SubscriptionPage() { 10 | return 11 | } 12 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/team/groups/components/types.ts: -------------------------------------------------------------------------------- 1 | import { UserGroupsQuery } from '@/lib/gql/generates/graphql' 2 | 3 | export type MemberShips = UserGroupsQuery['userGroups'][0]['members'] 4 | export type MemberShipUser = MemberShips[number]['user'] 5 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/team/groups/page.tsx: -------------------------------------------------------------------------------- 1 | import { Metadata } from 'next' 2 | 3 | import UserGroup from './components/user-group-page' 4 | 5 | export const metadata: Metadata = { 6 | title: 'Groups' 7 | } 8 | 9 | export default function UserGroupPage() { 10 | return 11 | } 12 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/team/layout.tsx: -------------------------------------------------------------------------------- 1 | import { TeamNav } from './components/team-nav' 2 | 3 | export default function TeamLayout({ 4 | children 5 | }: { 6 | children: React.ReactNode 7 | }) { 8 | return ( 9 | <> 10 | 11 | {children} 12 | 13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/settings/team/page.tsx: -------------------------------------------------------------------------------- 1 | import { Metadata } from 'next' 2 | 3 | import Team from './components/team' 4 | 5 | export const metadata: Metadata = { 6 | title: 'Members' 7 | } 8 | 9 | export default function IndexPage() { 10 | return 11 | } 12 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/(dashboard)/system/page.tsx: -------------------------------------------------------------------------------- 1 | import { Metadata } from 'next' 2 | 3 | import ClusterInfo from './components/cluster' 4 | 5 | export const metadata: Metadata = { 6 | title: 'System' 7 | } 8 | 9 | export default function IndexPage() { 10 | return 11 | } 12 | -------------------------------------------------------------------------------- /ee/tabby-ui/app/api/page.tsx: -------------------------------------------------------------------------------- 1 | import { Metadata } from 'next' 2 | 3 | export const metadata: Metadata = { 4 | title: 'API' 5 | } 6 | 7 | export default function IndexPage() { 8 | return