{
  "name": "sf-2",
  "displayName": "SF-2",
  "description": "VS Code integration for the SF-2 coding agent — sidebar dashboard, @sf chat participant, activity feed, conversation history, code lens, session forking, slash command completion, workflow controls, and 33 commands",
  "publisher": "FluxLabs",
  "version": "0.3.0",
  "icon": "logo.jpg",
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "https://github.com/singularity-forge/sf-run"
  },
  "homepage": "https://github.com/singularity-forge/sf-run/blob/main/vscode-extension/README.md",
  "bugs": {
    "url": "https://github.com/singularity-forge/sf-run/issues"
  },
  "keywords": [
    "ai",
    "agent",
    "coding",
    "sf",
    "chat",
    "automation",
    "claude",
    "openai",
    "llm"
  ],
  "galleryBanner": {
    "color": "#1a1a2e",
    "theme": "dark"
  },
  "extensionKind": ["workspace"],
  "engines": {
    "node": ">=24.15.0",
    "vscode": "^1.95.0"
  },
  "categories": [
    "AI",
    "Chat"
  ],
  "activationEvents": [
    "onStartupFinished"
  ],
  "main": "dist/extension.js",
  "contributes": {
    "commands": [
      {
        "command": "sf.start",
        "title": "SF: Start Agent"
      },
      {
        "command": "sf.stop",
        "title": "SF: Stop Agent"
      },
      {
        "command": "sf.newSession",
        "title": "SF: New Session"
      },
      {
        "command": "sf.sendMessage",
        "title": "SF: Send Message"
      },
      {
        "command": "sf.cycleModel",
        "title": "SF: Cycle Model"
      },
      {
        "command": "sf.cycleThinking",
        "title": "SF: Cycle Thinking Level"
      },
      {
        "command": "sf.compact",
        "title": "SF: Compact Context"
      },
      {
        "command": "sf.abort",
        "title": "SF: Abort Current Operation"
      },
      {
        "command": "sf.exportHtml",
        "title": "SF: Export Conversation as HTML"
      },
      {
        "command": "sf.sessionStats",
        "title": "SF: Show Session Stats"
      },
      {
        "command": "sf.runBash",
        "title": "SF: Run Bash Command"
      },
      {
        "command": "sf.switchModel",
        "title": "SF: Switch Model"
      },
      {
        "command": "sf.setThinking",
        "title": "SF: Set Thinking Level"
      },
      {
        "command": "sf.steer",
        "title": "SF: Steer Agent"
      },
      {
        "command": "sf.listCommands",
        "title": "SF: List Available Commands"
      },
      {
        "command": "sf.toggleAutoRetry",
        "title": "SF: Toggle Auto-Retry"
      },
      {
        "command": "sf.abortRetry",
        "title": "SF: Abort Retry"
      },
      {
        "command": "sf.setSessionName",
        "title": "SF: Set Session Name"
      },
      {
        "command": "sf.copyLastResponse",
        "title": "SF: Copy Last Response"
      },
      {
        "command": "sf.switchSession",
        "title": "SF: Switch Session"
      },
      {
        "command": "sf.refreshSessions",
        "title": "SF: Refresh Sessions",
        "icon": "$(refresh)"
      },
      {
        "command": "sf.clearFileDecorations",
        "title": "SF: Clear File Decorations"
      },
      {
        "command": "sf.showHistory",
        "title": "SF: Show Conversation History"
      },
      {
        "command": "sf.askAboutSymbol",
        "title": "SF: Ask About Symbol"
      },
      {
        "command": "sf.clearActivity",
        "title": "SF: Clear Activity Feed",
        "icon": "$(clear-all)"
      },
      {
        "command": "sf.forkSession",
        "title": "SF: Fork Session"
      },
      {
        "command": "sf.toggleSteeringMode",
        "title": "SF: Toggle Steering Mode"
      },
      {
        "command": "sf.toggleFollowUpMode",
        "title": "SF: Toggle Follow-Up Mode"
      },
      {
        "command": "sf.refactorSymbol",
        "title": "SF: Refactor Symbol"
      },
      {
        "command": "sf.findBugsSymbol",
        "title": "SF: Find Bugs in Symbol"
      },
      {
        "command": "sf.generateTestsSymbol",
        "title": "SF: Generate Tests for Symbol"
      },
      {
        "command": "sf.acceptAllChanges",
        "title": "SF: Accept All Agent Changes",
        "icon": "$(check-all)"
      },
      {
        "command": "sf.discardAllChanges",
        "title": "SF: Discard All Agent Changes",
        "icon": "$(discard)"
      },
      {
        "command": "sf.acceptFileChanges",
        "title": "Accept Changes",
        "icon": "$(check)"
      },
      {
        "command": "sf.discardFileChanges",
        "title": "Discard Changes",
        "icon": "$(discard)"
      },
      {
        "command": "sf.restoreCheckpoint",
        "title": "SF: Restore Checkpoint"
      },
      {
        "command": "sf.fixProblemsInFile",
        "title": "SF: Fix Problems in File"
      },
      {
        "command": "sf.fixAllProblems",
        "title": "SF: Fix All Problems"
      },
      {
        "command": "sf.clearDiagnostics",
        "title": "SF: Clear Agent Diagnostics"
      },
      {
        "command": "sf.commitAgentChanges",
        "title": "SF: Commit Agent Changes"
      },
      {
        "command": "sf.createAgentBranch",
        "title": "SF: Create Branch for Agent Work"
      },
      {
        "command": "sf.showAgentDiff",
        "title": "SF: Show Agent Diff"
      },
      {
        "command": "sf.clearPlan",
        "title": "SF: Clear Plan View",
        "icon": "$(clear-all)"
      },
      {
        "command": "sf.cycleApprovalMode",
        "title": "SF: Cycle Approval Mode"
      },
      {
        "command": "sf.selectApprovalMode",
        "title": "SF: Select Approval Mode"
      }
    ],
    "keybindings": [
      {
        "command": "sf.newSession",
        "key": "ctrl+shift+g ctrl+shift+n",
        "mac": "cmd+shift+g cmd+shift+n"
      },
      {
        "command": "sf.cycleModel",
        "key": "ctrl+shift+g ctrl+shift+m",
        "mac": "cmd+shift+g cmd+shift+m"
      },
      {
        "command": "sf.cycleThinking",
        "key": "ctrl+shift+g ctrl+shift+t",
        "mac": "cmd+shift+g cmd+shift+t"
      },
      {
        "command": "sf.abort",
        "key": "ctrl+shift+g ctrl+shift+a",
        "mac": "cmd+shift+g cmd+shift+a"
      },
      {
        "command": "sf.steer",
        "key": "ctrl+shift+g ctrl+shift+i",
        "mac": "cmd+shift+g cmd+shift+i"
      },
      {
        "command": "sf.sendMessage",
        "key": "ctrl+shift+g ctrl+shift+p",
        "mac": "cmd+shift+g cmd+shift+p"
      }
    ],
    "viewsContainers": {
      "activitybar": [
        {
          "id": "sf",
          "title": "SF",
          "icon": "$(hubot)"
        }
      ]
    },
    "views": {
      "sf": [
        {
          "type": "webview",
          "id": "sf-sidebar",
          "name": "SF Agent"
        },
        {
          "id": "sf-sessions",
          "name": "Sessions"
        },
        {
          "id": "sf-activity",
          "name": "Activity"
        }
      ]
    },
    "menus": {
      "view/title": [
        {
          "command": "sf.refreshSessions",
          "when": "view == sf-sessions",
          "group": "navigation"
        },
        {
          "command": "sf.clearActivity",
          "when": "view == sf-activity",
          "group": "navigation"
        }
      ],
      "scm/title": [
        {
          "command": "sf.acceptAllChanges",
          "group": "navigation",
          "when": "scmProvider == sf"
        },
        {
          "command": "sf.discardAllChanges",
          "group": "navigation",
          "when": "scmProvider == sf"
        }
      ],
      "scm/resourceState/context": [
        {
          "command": "sf.acceptFileChanges",
          "group": "inline",
          "when": "scmProvider == sf"
        },
        {
          "command": "sf.discardFileChanges",
          "group": "inline",
          "when": "scmProvider == sf"
        }
      ]
    },
    "chatParticipants": [
      {
        "id": "sf.agent",
        "name": "sf",
        "fullName": "SF Agent",
        "description": "SF-2 coding agent",
        "isSticky": true
      }
    ],
    "configuration": {
      "title": "SF",
      "properties": {
        "sf.binaryPath": {
          "type": "string",
          "default": "sf",
          "description": "Path to the SF binary"
        },
        "sf.autoStart": {
          "type": "boolean",
          "default": false,
          "description": "Automatically start the SF agent when the extension activates"
        },
        "sf.autoCompaction": {
          "type": "boolean",
          "default": true,
          "description": "Enable automatic context compaction"
        },
        "sf.codeLens": {
          "type": "boolean",
          "default": true,
          "description": "Show 'Ask SF' code lens above functions and classes"
        },
        "sf.showProgressNotifications": {
          "type": "boolean",
          "default": false,
          "description": "Show progress notification while the agent is working"
        },
        "sf.activityFeedMaxItems": {
          "type": "number",
          "default": 100,
          "minimum": 10,
          "maximum": 500,
          "description": "Maximum number of items shown in the Activity feed"
        },
        "sf.showContextWarning": {
          "type": "boolean",
          "default": true,
          "description": "Warn when context window usage exceeds the threshold"
        },
        "sf.contextWarningThreshold": {
          "type": "number",
          "default": 80,
          "minimum": 50,
          "maximum": 95,
          "description": "Context window usage percentage that triggers a warning"
        },
        "sf.approvalMode": {
          "type": "string",
          "default": "auto-approve",
          "enum": ["auto-approve", "ask", "plan-only"],
          "enumDescriptions": [
            "Agent runs freely without prompts",
            "Prompt before file changes and commands",
            "Read-only mode — agent can analyze but not modify"
          ],
          "description": "Approval mode for agent actions"
        }
      }
    }
  },
  "scripts": {
    "build": "tsc",
    "watch": "tsc --watch",
    "package": "vsce package",
    "publish": "vsce publish"
  },
  "devDependencies": {
    "@types/vscode": "^1.95.0",
    "@vscode/vsce": "^3.7.1",
    "typescript": "^5.7.0"
  }
}
