sf-agent-framework
Version:
AI Agent Orchestration Framework for Salesforce Development - Two-phase architecture with 70% context reduction
506 lines (378 loc) • 11.4 kB
Markdown
# Salesforce CLI (sf) Command Reference
## Overview
This document provides the complete reference for Salesforce CLI (`sf`) commands, replacing the deprecated `sfdx` commands. All agents and tasks should use these commands for Salesforce operations.
**Last Updated:** Dynamic - Always check latest Salesforce CLI documentation
**CLI Version:** sf (v2.x) - Unified Salesforce CLI
**API Version:** Read from `sfdx-project.json` in project root
## Important Notes
- Always use `sf` instead of `sfdx`
- API version should be read from `sfdx-project.json`
- Project structure follows `sfdx-project.json` configuration
- Default source directory is typically `force-app/main/default`
## Command Migration Guide
### Authentication & Org Management
#### Login to Org
```bash
# Old: sfdx force:auth:web:login
# New:
sf org login web --alias <alias> --instance-url <url>
# Login to sandbox
sf org login web --alias <alias> --instance-url https://test.salesforce.com
# Login to production
sf org login web --alias <alias> --instance-url https://login.salesforce.com
# Login using access token
sf org login access-token --instance-url <url> --access-token <token>
```
#### List Orgs
```bash
# Old: sfdx force:org:list
# New:
sf org list
sf org list --all
sf org list --clean
```
#### Display Org Details
```bash
# Old: sfdx force:org:display
# New:
sf org display --target-org <alias>
sf org display --target-org <alias> --json
```
#### Open Org
```bash
# Old: sfdx force:org:open
# New:
sf org open --target-org <alias>
sf org open --target-org <alias> --path <path>
```
### Project & Source Management
#### Create Project
```bash
# Old: sfdx force:project:create
# New:
sf project generate --name <name>
sf project generate --name <name> --template standard
sf project generate --name <name> --manifest
```
#### Deploy Source
```bash
# Old: sfdx force:source:deploy
# New:
sf project deploy start --target-org <alias>
sf project deploy start --source-dir force-app
sf project deploy start --metadata <type>:<name>
sf project deploy start --manifest manifest/package.xml
# Deploy with tests
sf project deploy start --test-level RunLocalTests
sf project deploy start --test-level RunSpecifiedTests --tests TestClass1,TestClass2
sf project deploy start --test-level RunAllTestsInOrg
```
#### Retrieve Source
```bash
# Old: sfdx force:source:retrieve
# New:
sf project retrieve start --target-org <alias>
sf project retrieve start --source-dir force-app
sf project retrieve start --metadata <type>:<name>
sf project retrieve start --manifest manifest/package.xml
```
#### Pull Changes
```bash
# Old: sfdx force:source:pull
# New:
sf project retrieve start --target-org <alias>
```
#### Push Changes
```bash
# Old: sfdx force:source:push
# New:
sf project deploy start --target-org <alias>
```
#### Validate Deployment
```bash
# Old: sfdx force:source:deploy --checkonly
# New:
sf project deploy validate --target-org <alias>
sf project deploy validate --source-dir force-app
sf project deploy validate --test-level RunLocalTests
```
### Apex Development
#### Execute Anonymous Apex
```bash
# Old: sfdx force:apex:execute
# New:
sf apex run --target-org <alias> --file <filepath>
sf apex run --target-org <alias> --apex-code "<code>"
```
#### Run Apex Tests
```bash
# Old: sfdx force:apex:test:run
# New:
sf apex test run --target-org <alias>
sf apex test run --test-level RunLocalTests
sf apex test run --class-names TestClass1,TestClass2
sf apex test run --suite-names TestSuite1
sf apex test run --code-coverage
sf apex test run --result-format json
```
#### Get Test Results
```bash
# Old: sfdx force:apex:test:report
# New:
sf apex test report --test-run-id <id>
sf apex test report --test-run-id <id> --code-coverage
```
#### View Logs
```bash
# Old: sfdx force:apex:log:list
# New:
sf apex log list --target-org <alias>
# Old: sfdx force:apex:log:get
# New:
sf apex log get --log-id <id>
sf apex log tail --target-org <alias>
```
### Data Management
#### Execute SOQL Query
```bash
# Old: sfdx force:data:soql:query
# New:
sf data query --query "<SOQL>" --target-org <alias>
sf data query --query "<SOQL>" --use-tooling-api
sf data query --query "<SOQL>" --result-format csv
```
#### Export Data
```bash
# Old: sfdx force:data:tree:export
# New:
sf data export tree --query "<SOQL>" --target-org <alias>
sf data export tree --plan --output-dir data
```
#### Import Data
```bash
# Old: sfdx force:data:tree:import
# New:
sf data import tree --files <filepath> --target-org <alias>
sf data import tree --plan <planfile>
```
#### Bulk Upsert
```bash
# Old: sfdx force:data:bulk:upsert
# New:
sf data upsert bulk --sobject <object> --file <csv> --external-id <field>
```
### Package Management
#### Create Package
```bash
# Old: sfdx force:package:create
# New:
sf package create --name <name> --package-type Unlocked
sf package create --name <name> --package-type Managed
```
#### Create Package Version
```bash
# Old: sfdx force:package:version:create
# New:
sf package version create --package <package> --installation-key <key>
sf package version create --package <package> --wait 30
```
#### Install Package
```bash
# Old: sfdx force:package:install
# New:
sf package install --package <packageId> --target-org <alias>
sf package install --package <packageId> --wait 30
```
### Lightning Web Components
#### Create LWC
```bash
# Old: sfdx force:lightning:component:create
# New:
sf lightning generate component --name <name> --output-dir force-app/main/default/lwc
```
#### Create Aura Component
```bash
# Old: sfdx force:lightning:component:create --type aura
# New:
sf lightning generate component --name <name> --type aura
```
### Metadata API
#### List Metadata
```bash
# Old: sfdx force:mdapi:listmetadata
# New:
sf org list metadata --metadata-type <type> --target-org <alias>
```
#### Deploy Metadata
```bash
# Old: sfdx force:mdapi:deploy
# New:
sf project deploy start --metadata-dir <dir> --target-org <alias>
```
#### Retrieve Metadata
```bash
# Old: sfdx force:mdapi:retrieve
# New:
sf project retrieve start --metadata <type> --target-org <alias>
```
### Schema & Object Management
#### Describe Object
```bash
# Old: sfdx force:schema:sobject:describe
# New:
sf sobject describe --sobject <object> --target-org <alias>
```
#### List Objects
```bash
# Old: sfdx force:schema:sobject:list
# New:
sf sobject list --target-org <alias>
```
### User Management
#### Create User
```bash
# Old: sfdx force:user:create
# New:
sf org create user --target-org <alias>
sf org create user --definition-file config/user-def.json
```
#### Assign Permission Set
```bash
# Old: sfdx force:user:permset:assign
# New:
sf org assign permset --name <permset> --target-org <alias>
sf org assign permset --name <permset> --on-behalf-of <username>
```
### Environment Management
#### Create Scratch Org
```bash
# Old: sfdx force:org:create
# New:
sf org create scratch --definition-file config/project-scratch-def.json
sf org create scratch --alias <alias> --duration-days 30
sf org create scratch --edition developer --set-default
```
#### Delete Scratch Org
```bash
# Old: sfdx force:org:delete
# New:
sf org delete scratch --target-org <alias>
sf org delete scratch --target-org <alias> --no-prompt
```
### Configuration & Settings
#### Set Default Org
```bash
# Old: sfdx force:config:set defaultusername=<alias>
# New:
sf config set target-org=<alias>
```
#### Set Default Dev Hub
```bash
# Old: sfdx force:config:set defaultdevhubusername=<alias>
# New:
sf config set target-dev-hub=<alias>
```
#### List Configuration
```bash
# Old: sfdx force:config:list
# New:
sf config list
```
## Reading Project Configuration
### Get API Version from sfdx-project.json
```javascript
// Read sfdx-project.json
const fs = require('fs');
const projectConfig = JSON.parse(fs.readFileSync('sfdx-project.json', 'utf8'));
const apiVersion = projectConfig.sourceApiVersion;
// Use in commands
`sf project deploy start --api-version ${apiVersion}`;
```
### Get Package Directories
```javascript
const packageDirectories = projectConfig.packageDirectories;
// Default is usually:
// [{ "path": "force-app", "default": true }]
```
## Best Practices
### 1. Always Check for sfdx-project.json
```bash
# Before running any command, verify project
if [ ! -f "sfdx-project.json" ]; then
echo "Error: Not a Salesforce DX project directory"
exit 1
fi
```
### 2. Use Dynamic API Version
```bash
# Extract API version from sfdx-project.json
API_VERSION=$(cat sfdx-project.json | grep sourceApiVersion | cut -d'"' -f4)
sf project deploy start --api-version $API_VERSION
```
### 3. Follow Project Structure
```bash
# Read package directories from sfdx-project.json
PACKAGE_DIR=$(cat sfdx-project.json | jq -r '.packageDirectories[0].path')
sf project deploy start --source-dir $PACKAGE_DIR
```
### 4. Error Handling
```bash
# Always check command results
if sf project deploy start --target-org myorg; then
echo "Deployment successful"
else
echo "Deployment failed"
exit 1
fi
```
### 5. JSON Output for Automation
```bash
# Use --json flag for parsing results
RESULT=$(sf org display --json)
ORG_ID=$(echo $RESULT | jq -r '.result.id')
```
## Common Workflows
### Deploy to Production
```bash
# Validate first
sf project deploy validate --source-dir force-app --test-level RunLocalTests --target-org prod
# Deploy if validation passes
sf project deploy start --source-dir force-app --test-level RunLocalTests --target-org prod
```
### Quick Deploy After Validation
```bash
# Get validation ID from validate command
VALIDATION_ID=$(sf project deploy validate --json | jq -r '.result.id')
# Quick deploy using validation ID
sf project deploy quick --job-id $VALIDATION_ID --target-org prod
```
### CI/CD Pipeline Commands
```bash
# Authenticate using SFDX Auth URL
echo $SFDX_AUTH_URL | sf org login sfdx-url --sfdx-url-stdin --alias ci-org
# Run tests and capture coverage
sf apex test run --test-level RunLocalTests --code-coverage --result-format json --wait 30
# Deploy with specific tests
sf project deploy start --test-level RunSpecifiedTests --tests MyTest1,MyTest2
```
## Migration Checklist
When migrating from `sfdx` to `sf`:
1. ✅ Replace all `sfdx` commands with `sf` equivalents
2. ✅ Remove `force:` namespace from commands
3. ✅ Update `--targetusername` to `--target-org`
4. ✅ Update `--targetdevhubusername` to `--target-dev-hub`
5. ✅ Use `sfdx-project.json` for API version
6. ✅ Use `sfdx-project.json` for package directories
7. ✅ Update CI/CD scripts with new commands
8. ✅ Update documentation with new commands
9. ✅ Test all workflows with new CLI
## Additional Resources
- [Salesforce CLI Command Reference](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_unified.htm)
- [Migration from SFDX to SF](https://developer.salesforce.com/docs/atlas.en-us.sfdx_setup.meta/sfdx_setup/sfdx_setup_move_to_sf_v2.htm)
- [Salesforce DX Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_intro.htm)
## Notes
- This reference uses the unified `sf` CLI (v2)
- All deprecated `sfdx` commands should be replaced
- API versions should always be read from `sfdx-project.json`
- Project structure is defined in `sfdx-project.json`
- Always use dynamic dates and current system time