{
  "name": "vscode-tabby",
  "publisher": "TabbyML",
  "displayName": "Tabby",
  "description": "Tabby is a self-hosted AI coding assistant that can suggest multi-line code or full functions in real-time.",
  "homepage": "https://tabby.tabbyml.com/",
  "repository": "https://github.com/TabbyML/tabby",
  "bugs": "https://github.com/TabbyML/tabby/issues",
  "license": "Apache-2.0",
  "version": "1.2.0-dev",
  "keywords": [
    "ai",
    "autocomplete",
    "code completion",
    "copilot",
    "intellisense",
    "intellicode",
    "snippets",
    "tabby"
  ],
  "icon": "assets/logo.png",
  "engines": {
    "vscode": "^1.82.0"
  },
  "categories": [
    "Programming Languages",
    "Machine Learning",
    "Other"
  ],
  "activationEvents": [
    "onStartupFinished"
  ],
  "main": "./dist/node/extension.js",
  "browser": "./dist/web/extension.js",
  "contributes": {
    "commands": [
      {
        "command": "tabby.toggleInlineCompletionTriggerMode",
        "title": "Tabby: Toggle Code Completion Trigger Mode (Automatic/Manual)"
      },
      {
        "command": "tabby.inlineCompletion.trigger",
        "title": "Tabby: Trigger Code Completion Manually"
      },
      {
        "command": "tabby.setApiEndpoint",
        "title": "Tabby: Specify API Endpoint of Tabby"
      },
      {
        "command": "tabby.openSettings",
        "title": "Tabby: Open Settings"
      },
      {
        "command": "tabby.openTabbyAgentSettings",
        "title": "Tabby: Open Tabby Agent Settings"
      },
      {
        "command": "tabby.gettingStarted",
        "title": "Tabby: Getting Started"
      },
      {
        "command": "tabby.openOnlineHelp",
        "title": "Tabby: Online Help"
      },
      {
        "command": "tabby.notifications.resetMuted",
        "title": "Tabby: Reset notifications marked as \"Don't Show Again\""
      }
    ],
    "menus": {
      "commandPalette": [
        {
          "command": "tabby.inlineCompletion.trigger",
          "when": "config.tabby.inlineCompletion.triggerMode === 'manual' && !editorHasSelection && !inlineSuggestionsVisible"
        },
        {
          "command": "tabby.openTabbyAgentSettings",
          "when": "!isWeb"
        }
      ]
    },
    "walkthroughs": [
      {
        "id": "gettingStarted",
        "title": "Getting Started with Tabby",
        "description": "Set up your own AI coding assistant",
        "steps": [
          {
            "id": "getTabbyServerReady",
            "title": "Get Tabby Server Ready",
            "description": "The Tabby VSCode extension requires a Tabby server to work. Please follow this guide to get your Tabby server ready.",
            "media": {
              "markdown": "assets/walkthroughs/server.md"
            }
          },
          {
            "id": "connectToTabbyServer",
            "title": "Connect to Tabby Server",
            "description": "Once your Tabby server is ready, specify the server API endpoint here. \n[Specify API Endpoint](command:tabby.setApiEndpoint)",
            "media": {
              "markdown": "assets/walkthroughs/setApiEndpoint.md"
            }
          },
          {
            "id": "codeCompletion",
            "title": "Code Completion",
            "description": "Tabby provides inline suggestions automatically by default, and you can accept suggestions by just pressing the Tab key.",
            "media": {
              "markdown": "assets/walkthroughs/codeCompletion.md"
            }
          },
          {
            "id": "commands",
            "title": "Commands",
            "description": "Type `>Tabby:` in command palette to list all Tabby commands. \n[Tabby commands](command:workbench.action.quickOpen?%5B%22%3ETabby%3A%22%5D)",
            "media": {
              "markdown": "assets/walkthroughs/commands.md"
            }
          }
        ]
      }
    ],
    "configuration": {
      "title": "Tabby",
      "properties": {
        "tabby.api.endpoint": {
          "type": "string",
          "default": "",
          "pattern": "(^$)|(^https?:\\/\\/\\S+$)",
          "patternErrorMessage": "Please enter a validate http or https URL.",
          "markdownDescription": "Specify API Endpoint of Tabby.  \nIf leave empty, server endpoint in [Tabby Agent Settings](command:tabby.openTabbyAgentSettings) will be used."
        },
        "tabby.inlineCompletion.triggerMode": {
          "type": "string",
          "enum": [
            "automatic",
            "manual"
          ],
          "default": "automatic",
          "description": "Select the code completion trigger mode.",
          "enumDescriptions": [
            "Automatic trigger when you stop typing",
            "Manual trigger by pressing `Alt + \\`"
          ]
        },
        "tabby.keybindings": {
          "type": "string",
          "enum": [
            "vscode-style",
            "tabby-style"
          ],
          "default": "vscode-style",
          "markdownDescription": "Select the keybinding profile to accept shown inline completion. \n | | Next Line | Full Completion | Next Word | \n |:---:|:---:|:---:|:---:| \n | _vscode-style_ | - | Tab | Ctrl + RightArrow | \n | _tabby-style_ <br/> _(experimental)_ | Tab | Ctrl + Tab | Ctrl + RightArrow | \n"
        },
        "tabby.usage.anonymousUsageTracking": {
          "type": "boolean",
          "default": false,
          "markdownDescription": "**Disable anonymous usage tracking**  \nTabby collects aggregated anonymous usage data and sends it to the Tabby team to help improve our products.  \nYour code, generated completions, or any identifying information is never tracked or transmitted.  \nFor more details on data collection, please check our [online documentation](https://tabby.tabbyml.com/docs/extensions/configurations#usage-collection)."
        }
      }
    },
    "keybindings": [
      {
        "key": "alt+\\",
        "command": "tabby.inlineCompletion.trigger",
        "when": "config.tabby.inlineCompletion.triggerMode === 'manual' && editorTextFocus && !editorHasSelection && !inlineSuggestionsVisible"
      },
      {
        "command": "tabby.inlineCompletion.accept",
        "key": "tab",
        "when": "config.tabby.keybindings === 'vscode-style' && inlineSuggestionVisible && !editorReadonly && !suggestWidgetVisible && !editorHoverFocused && !editorTabMovesFocus && inlineSuggestionHasIndentationLessThanTabSize"
      },
      {
        "command": "tabby.inlineCompletion.acceptNextWord",
        "key": "ctrl+right",
        "when": "config.tabby.keybindings === 'vscode-style' && inlineSuggestionVisible && !editorReadonly && !suggestWidgetVisible"
      },
      {
        "command": "tabby.inlineCompletion.accept",
        "key": "ctrl+tab",
        "when": "config.tabby.keybindings === 'tabby-style' && inlineSuggestionVisible && !editorReadonly && !suggestWidgetVisible"
      },
      {
        "command": "tabby.inlineCompletion.acceptNextWord",
        "key": "ctrl+right",
        "when": "config.tabby.keybindings === 'tabby-style' && inlineSuggestionVisible && !editorReadonly && !suggestWidgetVisible"
      },
      {
        "command": "tabby.inlineCompletion.acceptNextLine",
        "key": "tab",
        "when": "config.tabby.keybindings === 'tabby-style' && inlineSuggestionVisible && !editorReadonly && !suggestWidgetVisible && !editorHoverFocused && !editorTabMovesFocus"
      }
    ]
  },
  "scripts": {
    "prebuild": "cd ../tabby-agent && yarn build",
    "build": "tsc --noEmit && tsup --minify --treeshake smallest",
    "watch": "tsup --sourcemap --watch ./ --ignore-watch ./dist --ignore-watch ./.vscode-test-web --watch ../tabby-agent/dist",
    "dev": "code --extensionDevelopmentPath=$PWD --disable-extensions && yarn watch",
    "dev:browser": "vscode-test-web --extensionDevelopmentPath=$PWD --browserType=chromium --port=3000 && yarn watch",
    "lint": "eslint --fix --ext .ts ./src && prettier --write .",
    "lint:check": "eslint --ext .ts ./src && prettier --check .",
    "vscode:prepackage": "yarn build",
    "vscode:package": "vsce package --no-dependencies",
    "vscode:prepublish": "yarn build",
    "vscode:publish": "vsce publish --no-dependencies"
  },
  "devDependencies": {
    "@types/mocha": "^10.0.1",
    "@types/node": "18.x",
    "@types/vscode": "^1.82.0",
    "@typescript-eslint/eslint-plugin": "^6.13.1",
    "@typescript-eslint/parser": "^6.13.1",
    "@vscode/test-electron": "^2.1.5",
    "@vscode/test-web": "^0.0.44",
    "@vscode/vsce": "^2.15.0",
    "assert": "^2.0.0",
    "esbuild-plugin-copy": "^2.1.1",
    "esbuild-plugin-polyfill-node": "^0.3.0",
    "eslint": "^8.55.0",
    "eslint-config-prettier": "^9.0.0",
    "prettier": "^3.0.0",
    "tsup": "^7.1.0",
    "typescript": "^5.3.2"
  },
  "dependencies": {
    "@xstate/fsm": "^2.0.1",
    "tabby-agent": "1.2.0-dev"
  }
}
