{
	"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": ">=26.1.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"
	}
}
