[tab] package.json (json)
{
  "name": "crowd-pilot",
  "displayName": "crowd-pilot-extension",
  "description": "Teaching language models to code like humans.",
  "publisher": "p-doom",
  "version": "0.0.1",
  "repository": {
    "type": "git",
    "url": "https://github.com/p-doom/crowd-pilot-extension"
  },
  "engines": {
    "vscode": "^1.99.3"
  },
  "categories": [
    "Other"
  ],
  "activationEvents": [
    "onStartupFinished"
  ],
  "main": "./out/extension.js",
  "contributes": {
    "commands": [
      {
        "command": "crowd-pilot.toggleSuggestions",
        "title": "crowd-pilot: Toggle Tab Suggestions"
      },
      {
        "command": "crowd-pilot.hideUi",
        "title": "crowd-pilot: Hide Preview"
      },
      {
        "command": "crowd-pilot.sglangTest",
        "title": "crowd-pilot: Test SGLang"
      },
      {
        "command": "crowd-pilot.modelRun",
        "title": "crowd-pilot: Model Plan & Run"
      },
      {
        "command": "crowd-pilot.clearContext",
        "title": "crowd-pilot: Clear Context"
      },
      {
        "command": "crowd-pilot.openPreferenceLog",
        "title": "crowd-pilot: Open Preference Log"
      },
      {
        "command": "crowd-pilot.showPendingAction",
        "title": "crowd-pilot: Show Pending Suggestion"
      }
    ],
    "configuration": {
      "title": "crowd-pilot",
      "properties": {
        "crowd-pilot.hostname": {
          "type": "string",
          "default": "hai002",
          "description": "Hostname of the SGLang server"
        },
        "crowd-pilot.port": {
          "type": "number",
          "default": 30000,
          "description": "Port of the SGLang server"
        },
        "crowd-pilot.basePath": {
          "type": "string",
          "default": "/v1/chat/completions",
          "description": "Base path for the SGLang API endpoint"
        },
        "crowd-pilot.modelName": {
          "type": "string",
          "default": "qwen/qwen3-8b",
          "description": "Model name to use for completions"
        },
        "crowd-pilot.minAvgLogprob": {
          "type": "number",
          "default": -1.0,
          "description": "Minimum average log-probability per token for displaying suggestions. Higher values (closer to 0) require more confidence. -1.0 ≈ perplexity 2.7"
        },
        "crowd-pilot.maxContextTokens": {
          "type": "number",
          "default": 120000,
          "description": "Context length (in tokens). Older messages are truncated to fit. Set below your model's limit to leave room for the response."
        },
        "crowd-pilot.enablePreferenceLogging": {
          "type": "boolean",
          "default": true,
          "description": "Enable logging of accept/reject data for reward model training and RLHF/DPO"
        },
        "crowd-pilot.preferenceLogPath": {
          "type": "string",
          "default": "",
          "description": "Custom path for the preference log file (JSONL format). If empty, uses workspace/.crowd-pilot-preferences.jsonl"
        },
        "crowd-pilot.viewportRadius": {
          "type": "number",
          "default": 10,
          "description": "Number of lines above/below cursor to include in file viewports"
        }
      }
    },
    "keybindings": [
      {
        "command": "crowd-pilot.modelRun",
        "key": "tab",
        "mac": "tab",
        "when": "editorTextFocus && crowdPilot.uiVisible"
      },
      {
        "command": "crowd-pilot.modelRun",
        "key": "tab",
        "mac": "tab",
        "when": "inQuickOpen && crowdPilot.uiVisible"
      },
      {
        "command": "crowd-pilot.hideUi",
        "key": "escape",
        "mac": "escape",
        "when": "crowdPilot.uiVisible"
      },
      {
        "command": "crowd-pilot.showPendingAction",
        "key": "ctrl+,",
        "mac": "cmd+,",
        "when": "terminalFocus && crowdPilot.hasPendingAction"
      }
    ]
  },
  "scripts": {
    "vscode:prepublish": "npm run compile",
    "compile": "tsc -p ./",
    "watch": "tsc -watch -p ./",
    "pretest": "npm run compile && npm run lint",
    "lint": "eslint src",
    "test": "vscode-test",
    "clean": "rm -rf out *.tgz",
    "clean:all": "rm -rf out *.tgz node_modules package-lock.json",
    "rebuild-serializer": "cd crowd-pilot-serializer/crates/napi && npm install && rm -f index.d.ts index.js && npm run build && npm pack && mv *.tgz ../../../ && cd ../../.. && rm -rf node_modules/@crowd-pilot && npm install"
  },
  "dependencies": {
    "@crowd-pilot/serializer": "file:./crowd-pilot-serializer-0.1.0.tgz"
  },
  "devDependencies": {
    "@types/vscode": "^1.99.3",
    "@types/mocha": "^10.0.10",
    "@types/node": "22.x",
    "@typescript-eslint/eslint-plugin": "^8.45.0",
    "@typescript-eslint/parser": "^8.45.0",
    "eslint": "^9.36.0",
    "typescript": "^5.9.3",
    "@vscode/test-cli": "^0.0.11",
    "@vscode/test-electron": "^2.5.2"
  }
}