--- name: core-extension-api description: Public API exported by salesforcedx-vscode-core activate(). Use when modifying SalesforceVSCodeCoreApi, the api object in activate(), exports from core index.ts, services sub-object, or evaluating whether a change to core is breaking. Also use when someone asks "does anything use X" for a core export. review: never --- # Core Extension Public API `packages/salesforcedx-vscode-core/src/index.ts` — `activate()` returns `SalesforceVSCodeCoreApi`. Consumers access via: ```typescript const ext = vscode.extensions.getExtension( 'salesforce.salesforcedx-vscode-core' ); const api = ext.exports; ``` Also consumed indirectly via [`@salesforce/vscode-service-provider`](https://github.com/forcedotcom/salesforcedx-vscode-service-provider). ## Public API — external consumers depend on this See [external-consumers](../external-consumers/SKILL.md) for full list and search commands. **Breaking** (check consumers first): - Remove field from `SalesforceVSCodeCoreApi` - Change field type - Change behavior (even same signature) - Change static methods on `services.*` classes (`.getInstance()`) - Rename/restructure `services` sub-object **Non-breaking**: add new fields. ## API surface ### Top-level (instances/functions) ``` workspaceContextUtils ``` `WorkspaceContext` is only `services.WorkspaceContext`, not a top-level `activate()` field. **Note**: the top-level `channelService` field was removed (W-23348840). Consumers must use `services.ChannelService`. **Note**: the top-level `telemetryService` field was removed (W-24265117). Callers use `services.TelemetryService.getInstance` or `sf.vscode.core.get.telemetry`. **Note**: the top-level `getUserId` field was removed (W-24265117). No API replacement. ### `services` (class constructors with static methods) ``` ChannelService (.getInstance(name)), TelemetryService (.getInstance(name)), WorkspaceContext (.getInstance()), CommandEventDispatcher (.getInstance()) ``` External consumers predominantly use `services.*`. The `.getInstance()` signatures are public contract. ## Before changing 1. Read [external-consumers](../external-consumers/SKILL.md) 2. Grep monorepo: `\.exports\.MEMBER` — catches direct access outside wrapper files 3. Search org: ```bash gh api -X GET "search/code?q=SYMBOL+org:forcedotcom&per_page=30" \ --jq '.items[] | "\(.repository.name): \(.path)"' # also search salesforcecli org gh api -X GET "search/code?q=SYMBOL+org:salesforcecli&per_page=30" \ --jq '.items[] | "\(.repository.name): \(.path)"' # also search for exports.SYMBOL (direct access pattern) gh api -X GET "search/code?q=exports.SYMBOL+org:forcedotcom&per_page=30" \ --jq '.items[] | "\(.repository.name): \(.path)"' ``` 4. Read private repos: `gh api repos/forcedotcom/REPO/contents/PATH --jq '.content' | base64 -d` 5. Removing something unused in monorepo? Confirm unused externally too 6. Changing behavior? Check consumer version gates and minimum versions ## Consumer patterns - `extensionDependencies: ["salesforce.salesforcedx-vscode-core"]` - Version-check core (`semver.satisfies(version, '>=X.Y.Z')`) - Define own minimal type (don't import `SalesforceVSCodeCoreApi` directly) - Call `.getInstance(extensionName)` on services classes - Graceful degradation if core missing/outdated