{ "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" } }