{
  "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.0.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"
      }
    ],
    "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,
          "description": "Disable anonymous usage tracking."
        }
      }
    },
    "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": "tsup --minify --treeshake smallest",
    "watch": "tsup --sourcemap --watch ./ --ignore-watch ./dist --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": "prettier --write .",
    "lint:check": "prettier --check .",
    "vscode:prepackage": "yarn build",
    "vscode:package": "vsce package --no-dependencies",
    "vscode:prepublish": "yarn build",
    "vscode:publish": "vsce publish --no-dependencies"
  },
  "devDependencies": {
    "@types/glob": "^7.2.0",
    "@types/mocha": "^10.0.1",
    "@types/node": "18.x",
    "@types/vscode": "^1.82.0",
    "@typescript-eslint/eslint-plugin": "^5.31.0",
    "@typescript-eslint/parser": "^5.31.0",
    "@vscode/test-electron": "^2.1.5",
    "@vscode/test-web": "^0.0.44",
    "@vscode/vsce": "^2.15.0",
    "assert": "^2.0.0",
    "esbuild-plugin-polyfill-node": "^0.3.0",
    "eslint": "^8.20.0",
    "glob": "^8.0.3",
    "prettier": "^3.0.0",
    "tsup": "^7.1.0",
    "typescript": "^4.7.4"
  },
  "dependencies": {
    "@xstate/fsm": "^2.0.1",
    "tabby-agent": "0.4.0-dev"
  }
}
