Is "Unify Chat Provider" on VS Code Marketplace Safe to Install?

SmallMain · vscode · v1.0.0

# Unify Chat Provider A VS Code extension that allows you to integrate multiple LLM API providers into VS Code's Language Model Chat Provider API. Configure any number of API endpoints and use them seamlessly with GitHub Copilot Chat. ## Supported API Formats | Type | Description | Example Providers | | ----------- | ----------------------------- | ----------------------------------------------------------------------------------------- | | `anthropic` | Anthropic Messages API format | Anthropic, AWS Bedrock, Google Vertex AI, OpenRouter, and other Anthropic-compatible APIs | More API formats will be added in future releases. ## Features - Register multiple LLM API endpoints as language model providers - Support for different API formats - Multiple providers and models per provider - Streaming responses with proper cancellation handling - Tool calling support - Token counting estimation - Interactive commands to add and manage providers ## Configuration Add providers to your workspace settings (`.vscode/settings.json`) using the `unifyChatProvider.endpoints` array: ```json { "unifyChatProvider.endpoints": [ { "type": "anthropic", "name": "Anthropic", "baseUrl": "https://api.anthropic.com", "apiKey": "your-api-key", "models": ["claude-sonnet-4-20250514", "claude-opus-4-20250514"] }, { "type": "anthropic", "name": "OpenRouter", "baseUrl": "https://openrouter.ai/api", "apiKey": "your-openrouter-key", "models": ["anthropic/claude-sonnet-4", "anthropic/claude-opus-4"] } ] } ``` ### Verbose Logging By default only errors and failed requests are logged. Set `unifyChatProvider.verbose` to `true` to log full request and response details: ```json { "unifyChatProvider.verbose": true } ``` ### Model Configuration Models can be specified as simple strings or as objects with additional configuration: ```json { "unifyChatProvider.endpoints": [ { "type": "anthropic", "name": "Custom Provider", "baseUrl": "https://api.example.com", "apiKey": "your-api-key", "models": [ { "id": "model-a", "name": "Model A (Display Name)", "maxInputTokens": 200000, "maxOutputTokens": 8192 }, "model-b" ] } ] } ``` ### Provider Configuration Properties | Property | Required | Description | | --------- | -------- | ----------------------------- | | `type` | Yes | API format type | | `name` | Yes | Display name for the provider | | `baseUrl` | Yes | API base URL | | `apiKey` | No | API key for authentication | | `models` | No | List of available models | ## Commands - **Unify Chat Provider: Add Provider** - Interactive wizard to add a new provider - **Unify Chat Provider: Remove Provider** - Remove a configured provider - **Unify Chat Provider: Manage Providers** - Open settings to manage providers ## API Compatibility ### Anthropic Format (`type: "anthropic"`) Compatible with APIs that follow the Anthropic Messages API format: - **Endpoint**: POST to ` /v1/messages` - **Authentication**: `x-api-key` header - **API Version**: `anthropic-version: 2023-06-01` - **Request format**: Anthropic Messages API - **Response format**: Server-Sent Events (SSE) streaming This includes: - Anthropic's official API - AWS Bedrock (with Anthropic gateway) - Google Vertex AI (with Anthropic gateway) - OpenRouter - Other Anthropic-compatible proxies and gateways ## Development - Build: `npm run compile` - Watch: `npm run watch` ## License MIT

Risk Assessment

Analyzed
56.05
out of 100
MEDIUM

168 security findings detected across all analyzers

VS Code extension analyzed via package manifest and static code analysis

Severity Breakdown

0
Critical
39
High
129
Medium
0
Low
0
Info

Finding Categories

39
Malware Signatures
3
Network
125
IoC Indicators

YARA Rules Matched

9 rules(39 hits)
postinstall obfuscation postinstall network communication postinstall file download postinstall system command postinstall file manipulation postinstall crypto operations credential vscode credentials postinstall registry modification postinstall persistence mechanism

About This Extension

# Unify Chat Provider A VS Code extension that allows you to integrate multiple LLM API providers into VS Code's Language Model Chat Provider API. Configure any number of API endpoints and use them seamlessly with GitHub Copilot Chat. ## Supported API Formats | Type | Description | Example Providers | | ----------- | ----------------------------- | ----------------------------------------------------------------------------------------- | | `anthropic` | Anthropic Messages API format | Anthropic, AWS Bedrock, Google Vertex AI, OpenRouter, and other Anthropic-compatible APIs | More API formats will be added in future releases. ## Features - Register multiple LLM API endpoints as language model providers - Support for different API formats - Multiple providers and models per provider - Streaming responses with proper cancellation handling - Tool calling support - Token counting estimation - Interactive commands to add and manage providers ## Configuration Add providers to your workspace settings (`.vscode/settings.json`) using the `unifyChatProvider.endpoints` array: ```json { "unifyChatProvider.endpoints": [ { "type": "anthropic", "name": "Anthropic", "baseUrl": "https://api.anthropic.com", "apiKey": "your-api-key", "models": ["claude-sonnet-4-20250514", "claude-opus-4-20250514"] }, { "type": "anthropic", "name": "OpenRouter", "baseUrl": "https://openrouter.ai/api", "apiKey": "your-openrouter-key", "models": ["anthropic/claude-sonnet-4", "anthropic/claude-opus-4"] } ] } ``` ### Verbose Logging By default only errors and failed requests are logged. Set `unifyChatProvider.verbose` to `true` to log full request and response details: ```json { "unifyChatProvider.verbose": true } ``` ### Model Configuration Models can be specified as simple strings or as objects with additional configuration: ```json { "unifyChatProvider.endpoints": [ { "type": "anthropic", "name": "Custom Provider", "baseUrl": "https://api.example.com", "apiKey": "your-api-key", "models": [ { "id": "model-a", "name": "Model A (Display Name)", "maxInputTokens": 200000, "maxOutputTokens": 8192 }, "model-b" ] } ] } ``` ### Provider Configuration Properties | Property | Required | Description | | --------- | -------- | ----------------------------- | | `type` | Yes | API format type | | `name` | Yes | Display name for the provider | | `baseUrl` | Yes | API base URL | | `apiKey` | No | API key for authentication | | `models` | No | List of available models | ## Commands - **Unify Chat Provider: Add Provider** - Interactive wizard to add a new provider - **Unify Chat Provider: Remove Provider** - Remove a configured provider - **Unify Chat Provider: Manage Providers** - Open settings to manage providers ## API Compatibility ### Anthropic Format (`type: "anthropic"`) Compatible with APIs that follow the Anthropic Messages API format: - **Endpoint**: POST to `<baseUrl>/v1/messages` - **Authentication**: `x-api-key` header - **API Version**: `anthropic-version: 2023-06-01` - **Request format**: Anthropic Messages API - **Response format**: Server-Sent Events (SSE) streaming This includes: - Anthropic's official API - AWS Bedrock (with Anthropic gateway) - Google Vertex AI (with Anthropic gateway) - OpenRouter - Other Anthropic-compatible proxies and gateways ## Development - Build: `npm run compile` - Watch: `npm run watch` ## License MIT

Detailed Findings

42 total

YARA Rule Matches

9 rules

Indicators of Compromise

Network indicators, suspicious strings, and potential IoCs extracted during analysis

URLs
19
IP Addresses
1
Domains
106
Strings
125

All Indicators · 125

Domain
detected Domain: obj.id

XIOC detected Domain: obj.id

extracted_from_files

Domain
detected Domain: types.js.map

XIOC detected Domain: types.js.map

extracted_from_files

URL
detected URL: https://github.com/smallmain/vscode-unify-chat-provider.git

XIOC detected URL: https://github.com/smallmain/vscode-unify-chat-provider.git

extracted_from_files

URL
detected URL: https://github.com/smallmain/vscode-unify-chat-provider/issues

XIOC detected URL: https://github.com/smallmain/vscode-unify-chat-provider/issues

extracted_from_files

URL
detected URL: https://github.com/smallmain/vscode-unify-chat-provider#readme

XIOC detected URL: https://github.com/smallmain/vscode-unify-chat-provider#readme

extracted_from_files

URL
detected URL: https://docs.anthropic.com/en/docs/build-with-claude/tool-use/memory-tool

XIOC detected URL: https://docs.anthropic.com/en/docs/build-with-claude/tool-use/memory-tool

extracted_from_files

URL
detected URL: https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search-tool#citations

XIOC detected URL: https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search-tool#citations

extracted_from_files

URL
detected URL: https://api.example.com',

XIOC detected URL: https://api.example.com',

extracted_from_files

URL
detected URL: https://api.anthropic.com).

XIOC detected URL: https://api.anthropic.com).

extracted_from_files

URL
detected URL: https://api.anthropic.com

XIOC detected URL: https://api.anthropic.com

extracted_from_files

URL
detected URL: https://openrouter.ai/api

XIOC detected URL: https://openrouter.ai/api

extracted_from_files

Domain
detected Domain: readme.md

XIOC detected Domain: readme.md

extracted_from_files

URL
detected URL: http://schemas.openxmlformats.org/package/2006/content-types

XIOC detected URL: http://schemas.openxmlformats.org/package/2006/content-types

extracted_from_files

URL
detected URL: http://www.w3.org/1999/02/22-rdf-syntax-ns#

XIOC detected URL: http://www.w3.org/1999/02/22-rdf-syntax-ns#

extracted_from_files

URL
detected URL: http://ns.adobe.com/exif/1.0/

XIOC detected URL: http://ns.adobe.com/exif/1.0/

extracted_from_files

URL
detected URL: https://api.anthropic.com',

XIOC detected URL: https://api.anthropic.com',

extracted_from_files

URL
detected URL: https://platform.claude.com/docs/en/build-with-claude/extended-thinking#interleaved-thinking

XIOC detected URL: https://platform.claude.com/docs/en/build-with-claude/extended-thinking#interleaved-thinking

extracted_from_files

URL
detected URL: https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search-tool

XIOC detected URL: https://docs.anthropic.com/en/docs/build-with-claude/tool-use/web-search-tool

extracted_from_files

URL
detected Domain: url.js.map

XIOC detected Domain: url.js.map

extracted_from_files

Domain
detected Domain: utils.js.map

XIOC detected Domain: utils.js.map

extracted_from_files

Domain
detected Domain: well-known-models.js.map

XIOC detected Domain: well-known-models.js.map

extracted_from_files

Domain
detected Domain: github.com

XIOC detected Domain: github.com

extracted_from_files

Domain
detected Domain: openrouter.ai

XIOC detected Domain: openrouter.ai

extracted_from_files

Domain
detected Domain: schemas.microsoft.com

XIOC detected Domain: schemas.microsoft.com

extracted_from_files

Domain
detected Domain: microsoft.visualstudio.services.links.support

XIOC detected Domain: microsoft.visualstudio.services.links.support

extracted_from_files

Domain
detected Domain: m.stream

XIOC detected Domain: m.stream

extracted_from_files

Domain
detected Domain: original.stream

XIOC detected Domain: original.stream

extracted_from_files

URL
detected URL: http://schemas.microsoft.com/developer/vsx-schema/2011

XIOC detected URL: http://schemas.microsoft.com/developer/vsx-schema/2011

extracted_from_files

URL
detected URL: https://api.example.com

XIOC detected URL: https://api.example.com

extracted_from_files

IP
detected IP: ::

XIOC detected IP: ::

extracted_from_files

Domain
detected Domain: item.model.id

XIOC detected Domain: item.model.id

extracted_from_files

Domain
detected Domain: reader.read

XIOC detected Domain: reader.read

extracted_from_files

Domain
detected Domain: chatprovider.js.map

XIOC detected Domain: chatprovider.js.map

extracted_from_files

Domain
detected Domain: service.js.map

XIOC detected Domain: service.js.map

extracted_from_files

Domain
detected Domain: component.js.map

XIOC detected Domain: component.js.map

extracted_from_files

Domain
detected Domain: api.example.com

XIOC detected Domain: api.example.com

extracted_from_files

Domain
detected Domain: draft.family

XIOC detected Domain: draft.family

extracted_from_files

Domain
detected Domain: draft.stream

XIOC detected Domain: draft.stream

extracted_from_files

Domain
detected Domain: m.family

XIOC detected Domain: m.family

extracted_from_files

Domain
detected Domain: docs.anthropic.com

XIOC detected Domain: docs.anthropic.com

extracted_from_files

Domain
detected Domain: features.js.map

XIOC detected Domain: features.js.map

extracted_from_files

Domain
detected Domain: channel.show

XIOC detected Domain: channel.show

extracted_from_files

Domain
detected Domain: ch.info

XIOC detected Domain: ch.info

extracted_from_files

Domain
detected Domain: logger.js.map

XIOC detected Domain: logger.js.map

extracted_from_files

Domain
detected Domain: modelconfig.id

XIOC detected Domain: modelconfig.id

extracted_from_files

Domain
detected Domain: progress.report

XIOC detected Domain: progress.report

extracted_from_files

Domain
detected Domain: vscode.configurationtarget.global

XIOC detected Domain: vscode.configurationtarget.global

extracted_from_files

Domain
detected Domain: store.js.map

XIOC detected Domain: store.js.map

extracted_from_files

Domain
detected Domain: obj.family

XIOC detected Domain: obj.family

extracted_from_files

Domain
detected Domain: obj.stream

XIOC detected Domain: obj.stream

extracted_from_files

Domain
detected Domain: config-store.js.map

XIOC detected Domain: config-store.js.map

extracted_from_files

Domain
detected Domain: extension.js.map

XIOC detected Domain: extension.js.map

extracted_from_files

Domain
detected Domain: platform.claude.com

XIOC detected Domain: platform.claude.com

extracted_from_files

Domain
detected Domain: ui.js.map

XIOC detected Domain: ui.js.map

extracted_from_files

Domain
detected Domain: data.name

XIOC detected Domain: data.name

extracted_from_files

Domain
detected Domain: validation.js.map

XIOC detected Domain: validation.js.map

extracted_from_files

Domain
detected Domain: defaults.js.map

XIOC detected Domain: defaults.js.map

extracted_from_files

Domain
detected Domain: ondidchange.fire

XIOC detected Domain: ondidchange.fire

extracted_from_files

Domain
detected Domain: options.existingmodels.map

XIOC detected Domain: options.existingmodels.map

extracted_from_files

Domain
detected Domain: b.stream

XIOC detected Domain: b.stream

extracted_from_files

Domain
detected Domain: a.stream

XIOC detected Domain: a.stream

extracted_from_files

Domain
detected Domain: a.id

XIOC detected Domain: a.id

extracted_from_files

Domain
detected Domain: b.id

XIOC detected Domain: b.id

extracted_from_files

Domain
detected Domain: a.name

XIOC detected Domain: a.name

extracted_from_files

Domain
detected Domain: b.name

XIOC detected Domain: b.name

extracted_from_files

Domain
detected Domain: state.js.map

XIOC detected Domain: state.js.map

extracted_from_files

Domain
detected Domain: qp.show

XIOC detected Domain: qp.show

extracted_from_files

Domain
detected Domain: model.name

XIOC detected Domain: model.name

extracted_from_files

Domain
detected Domain: draft.id

XIOC detected Domain: draft.id

extracted_from_files

Domain
detected Domain: provider.models.map

XIOC detected Domain: provider.models.map

extracted_from_files

Domain
detected Domain: provider.name

XIOC detected Domain: provider.name

extracted_from_files

Domain
detected Domain: draft.models.map

XIOC detected Domain: draft.models.map

extracted_from_files

Domain
detected Domain: models.map

XIOC detected Domain: models.map

extracted_from_files

Domain
detected Domain: original.name

XIOC detected Domain: original.name

extracted_from_files

Domain
detected Domain: m.name

XIOC detected Domain: m.name

extracted_from_files

Domain
detected Domain: m.id

XIOC detected Domain: m.id

extracted_from_files

Domain
detected Domain: existing.name

XIOC detected Domain: existing.name

extracted_from_files

Domain
detected Domain: options.map

XIOC detected Domain: options.map

extracted_from_files

Domain
detected Domain: draft.name

XIOC detected Domain: draft.name

extracted_from_files

Domain
detected Domain: api.anthropic.com

XIOC detected Domain: api.anthropic.com

extracted_from_files

Domain
detected Domain: selectedmodel.id

XIOC detected Domain: selectedmodel.id

extracted_from_files

Domain
detected Domain: anthropic.js.map

XIOC detected Domain: anthropic.js.map

extracted_from_files

Domain
detected Domain: index.js.map

XIOC detected Domain: index.js.map

extracted_from_files

Domain
detected Domain: interface.js.map

XIOC detected Domain: interface.js.map

extracted_from_files

Domain
detected Domain: providertypes.js.map

XIOC detected Domain: providertypes.js.map

extracted_from_files

Domain
detected Domain: registry.js.map

XIOC detected Domain: registry.js.map

extracted_from_files

Domain
detected Domain: endpoints.map

XIOC detected Domain: endpoints.map

extracted_from_files

Domain
detected Domain: p.name

XIOC detected Domain: p.name

extracted_from_files

Domain
detected Domain: currenttoolcall.name

XIOC detected Domain: currenttoolcall.name

extracted_from_files

Domain
detected Domain: currentservertooluse.id

XIOC detected Domain: currentservertooluse.id

extracted_from_files

Domain
detected Domain: currentservertooluse.name

XIOC detected Domain: currentservertooluse.name

extracted_from_files

Domain
detected Domain: original.id

XIOC detected Domain: original.id

extracted_from_files

Domain
detected Domain: obj.name

XIOC detected Domain: obj.name

extracted_from_files

Domain
detected Domain: tools.map

XIOC detected Domain: tools.map

extracted_from_files

Domain
detected Domain: parsed.search

XIOC detected Domain: parsed.search

extracted_from_files

Domain
detected Domain: toolblock.id

XIOC detected Domain: toolblock.id

extracted_from_files

Domain
detected Domain: toolblock.name

XIOC detected Domain: toolblock.name

extracted_from_files

Domain
detected Domain: redactedblock.data

XIOC detected Domain: redactedblock.data

extracted_from_files

Domain
detected Domain: servertoolblock.id

XIOC detected Domain: servertoolblock.id

extracted_from_files

Domain
detected Domain: servertoolblock.name

XIOC detected Domain: servertoolblock.name

extracted_from_files

Domain
detected Domain: currenttoolcall.id

XIOC detected Domain: currenttoolcall.id

extracted_from_files

Domain
detected Domain: requestbody.tools

XIOC detected Domain: requestbody.tools

extracted_from_files

Domain
detected Domain: model.stream

XIOC detected Domain: model.stream

extracted_from_files

Domain
detected Domain: requestbody.stream

XIOC detected Domain: requestbody.stream

extracted_from_files

Domain
detected Domain: requestbody.top

XIOC detected Domain: requestbody.top

extracted_from_files

Domain
detected Domain: this.config.name

XIOC detected Domain: this.config.name

extracted_from_files

Domain
detected Domain: block.id

XIOC detected Domain: block.id

extracted_from_files

Domain
detected Domain: block.name

XIOC detected Domain: block.name

extracted_from_files

Domain
detected Domain: part.name

XIOC detected Domain: part.name

extracted_from_files

Domain
detected Domain: toolresultblock.is

XIOC detected Domain: toolresultblock.is

extracted_from_files

Domain
detected Domain: blocks.at

XIOC detected Domain: blocks.at

extracted_from_files

Domain
detected Domain: model.id

XIOC detected Domain: model.id

extracted_from_files

Domain
detected Domain: model.family

XIOC detected Domain: model.family

extracted_from_files

Domain
detected Domain: tool.name

XIOC detected Domain: tool.name

extracted_from_files

Domain
detected Domain: options.tools

XIOC detected Domain: options.tools

extracted_from_files

Domain
detected Domain: schemas.openxmlformats.org

XIOC detected Domain: schemas.openxmlformats.org

extracted_from_files

Domain
detected Domain: www.w3.org

XIOC detected Domain: www.w3.org

extracted_from_files

Domain
detected Domain: ns.adobe.com

XIOC detected Domain: ns.adobe.com

extracted_from_files

Domain
detected Domain: 8.ht

XIOC detected Domain: 8.ht

extracted_from_files

Domain
detected Domain: ɔ.sb

XIOC detected Domain: ɔ.sb

extracted_from_files

Domain
detected Domain: object.prototype.hasownproperty.call

XIOC detected Domain: object.prototype.hasownproperty.call

extracted_from_files

Domain
detected Domain: part.data

XIOC detected Domain: part.data

extracted_from_files

Domain
detected Domain: data.data

XIOC detected Domain: data.data

extracted_from_files

Domain
detected Domain: client.js.map

XIOC detected Domain: client.js.map

extracted_from_files

URL
detected URL: http://schemas.microsoft.com/developer/vsx-schema-design/2011

XIOC detected URL: http://schemas.microsoft.com/developer/vsx-schema-design/2011

extracted_from_files

Security Analysis Summary

Security Analysis Overview

Unify Chat Provider is a Visual Studio Code Marketplace extension published by SmallMain. Version 1.0.0 has been analyzed by the Risky Plugins security platform, receiving a risk score of 56.05/100 (MEDIUM risk) based on 168 security findings.

Risk Assessment

This extension presents moderate security risk. Several findings were detected that may warrant attention. Users should carefully review the permissions and findings before installation.

Findings Breakdown

  • High: 39 finding(s)
  • Medium: 129 finding(s)

What Was Analyzed

The security assessment covers multiple analysis categories:

  • Malware Detection: YARA rule matching against 2,400+ malware signatures
  • Secret Detection: Scanning for exposed API keys, tokens, and credentials
  • Static Analysis: Code-level security analysis for common vulnerability patterns
  • Network Analysis: Detection of suspicious network communications and endpoints
  • Obfuscation Detection: Identification of code obfuscation techniques

Developer Information

Unify Chat Provider is published by SmallMain on the Visual Studio Code Marketplace marketplace. The extension has approximately 1 users.

Recommendation

Exercise caution with this extension. Review the detailed findings and ensure the requested permissions align with the extension's stated functionality before installation.

Frequently Asked Questions