sf-git-ai-meta-insights 2.0.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.2.0](https://github.com/mcarvin8/sf-git-ai-meta-insights/compare/v2.1.0...v2.2.0) (2026-04-21)
4
+
5
+
6
+ ### Features
7
+
8
+ * **ai:** support all Vercel AI SDK providers via smart-diff v2 ([#16](https://github.com/mcarvin8/sf-git-ai-meta-insights/issues/16)) ([8be7458](https://github.com/mcarvin8/sf-git-ai-meta-insights/commit/8be7458111081e5cad3f07646b08346154f2401b))
9
+
10
+ ## [2.1.0](https://github.com/mcarvin8/sf-git-ai-meta-insights/compare/v2.0.1...v2.1.0) (2026-04-19)
11
+
12
+
13
+ ### Features
14
+
15
+ * **smart-diff:** bump @mcarvin/smart-diff from 1.0.3 to 1.1.0 ([#14](https://github.com/mcarvin8/sf-git-ai-meta-insights/issues/14)) ([d56e96e](https://github.com/mcarvin8/sf-git-ai-meta-insights/commit/d56e96eae3020cbe6ccd88cb33dac3799756ff80))
16
+
3
17
  ## [2.0.1](https://github.com/mcarvin8/sf-git-ai-meta-insights/compare/v2.0.0...v2.0.1) (2026-04-14)
4
18
 
5
19
 
package/README.md CHANGED
@@ -1,12 +1,17 @@
1
1
  # sf-git-ai-meta-insights
2
2
 
3
- [![NPM](https://img.shields.io/npm/v/sf-git-ai-meta-insights.svg?label=sf-git-ai-meta-insights)](https://www.npmjs.com/package/sf-git-ai-meta-insights) [![Downloads/week](https://img.shields.io/npm/dw/sf-git-ai-meta-insights.svg)](https://npmjs.org/package/sf-git-ai-meta-insights) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/salesforcecli/sf-git-ai-meta-insights/main/LICENSE.md)
3
+ [![NPM](https://img.shields.io/npm/v/sf-git-ai-meta-insights.svg?label=sf-git-ai-meta-insights)](https://www.npmjs.com/package/sf-git-ai-meta-insights)
4
+ [![Downloads/week](https://img.shields.io/npm/dw/sf-git-ai-meta-insights.svg)](https://npmjs.org/package/sf-git-ai-meta-insights)
5
+ [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/salesforcecli/sf-git-ai-meta-insights/main/LICENSE.md)
6
+ [![codecov](https://codecov.io/gh/mcarvin8/sf-git-ai-meta-insights/graph/badge.svg?token=N5FKE0JPHN)](https://codecov.io/gh/mcarvin8/sf-git-ai-meta-insights)
4
7
 
5
- `sf-git-ai-meta-insights` is an `sf` plugin that generates AI-assisted summaries of Salesforce metadata changes from a git diff.
8
+ `sf-git-ai-meta-insights` is an `sf` plugin that generates AI summaries of Salesforce metadata changes from a git diff.
6
9
 
7
10
  ## Overview
8
11
 
9
- This plugin summarizes metadata changes between two Git refs, optionally filters commits by message, and writes a Markdown file using an **OpenAI-compatible** LLM. A configured gateway (API key and/or base URL and/or default headers—see below) is **required**; there is no offline or local-only summary.
12
+ This plugin summarizes metadata changes between two Git refs, optionally filters commits by message, and writes a Markdown file using any LLM provider supported by the [Vercel AI SDK](https://sdk.vercel.ai) — OpenAI, Anthropic, Google Gemini, Amazon Bedrock, Mistral, Cohere, Groq, xAI, DeepSeek, or any OpenAI-compatible gateway. A configured provider (API key, base URL, and/or default headers) is **required**.
13
+
14
+ ![Markdown Summary Example](https://raw.githubusercontent.com/mcarvin8/sf-git-ai-meta-insights/main/.github/images/summary-example.png)
10
15
 
11
16
  ## Installation
12
17
 
@@ -22,15 +27,18 @@ Summarize metadata changes between two Git refs and write the generated summary
22
27
 
23
28
  #### Flags
24
29
 
25
- - `--from` `-f` (**required**) Start reference for the git diff range. You must pass an explicit ref (for example `HEAD~1`, a tag, or a commit hash); there is no default.
26
- - `--to` `-t` End reference for the git diff range. Defaults to `HEAD`.
27
- - `--commit-message-include` `-m` Include commits whose messages match any of these regex patterns (repeatable, OR).
28
- - `--commit-message-exclude` `-e` Exclude commits whose messages match any of these regex patterns (repeatable, OR).
29
- - `--include-package-directory` `-i` Extra repo-relative package paths merged with `sfdx-project.json` package directories (repeatable).
30
- - `--exclude-package-directory` `-x` Exclude package paths: removes matching entries from the configured package list and adds git `:(exclude)` pathspecs for the diff (repeatable).
31
- - `--team` Optional team or squad label for the summary (also supported via `METADATA_AUDIT_TEAM` or `SF_GIT_AI_TEAM`).
32
- - `--output` `-p` Output file path for the generated summary. Defaults to `metadata-summary.md`.
33
- - `--model` OpenAI model used for the summary. Defaults to `gpt-4o-mini`.
30
+ | Flag | Short | Required | Default | Description |
31
+ | ----------------------------- | ----- | -------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
32
+ | `--from` | `-f` | Yes | | Start reference for the git diff range (e.g. `HEAD~1`, a tag, or a commit hash). |
33
+ | `--to` | `-t` | No | `HEAD` | End reference for the git diff range. |
34
+ | `--commit-message-include` | `-m` | No | | Include commits whose messages match any of these regex patterns (repeatable, OR). |
35
+ | `--commit-message-exclude` | `-e` | No | | Exclude commits whose messages match any of these regex patterns (repeatable, OR). |
36
+ | `--include-package-directory` | `-i` | No | | Extra repo-relative package paths merged with `sfdx-project.json` directories (repeatable). |
37
+ | `--exclude-package-directory` | `-x` | No | | Exclude package paths from the configured list and add git `:(exclude)` pathspecs (repeatable). |
38
+ | `--team` | | No | | Team or squad label for the summary (also via `METADATA_AUDIT_TEAM` or `SF_GIT_AI_TEAM`). |
39
+ | `--output` | `-p` | No | `metadata-summary.md` | Output file path for the generated summary. |
40
+ | `--model` | | No | _provider default_ | Override the chat model id. Defaults to the resolved provider's default (e.g. `gpt-4o-mini` for OpenAI, `claude-3-5-haiku-latest` for Anthropic). Can also be set with `LLM_MODEL`. |
41
+ | `--max-diff-chars` | | No | | Max characters of unified diff text sent to the model (5,000–5,000,000). |
34
42
 
35
43
  #### Examples
36
44
 
@@ -40,6 +48,13 @@ Summarize changes since the previous commit:
40
48
  sf sgai metadata summarize --from HEAD~1 --to HEAD
41
49
  ```
42
50
 
51
+ Summarize changes from the past week on main branch:
52
+
53
+ ```bash
54
+ FROM=$(git log origin/main -1 --before="1 week ago" --pretty=format:%H)
55
+ sf sgai metadata summarize --from "$FROM" --to "origin/main"
56
+ ```
57
+
43
58
  Summarize a custom range and save to `changes.md`:
44
59
 
45
60
  ```bash
@@ -52,61 +67,79 @@ Summarize only commits whose messages match a regex:
52
67
  sf sgai metadata summarize --from main --to HEAD --commit-message-include "(feature|fix)"
53
68
  ```
54
69
 
55
- Use a custom OpenAI model:
70
+ Override the chat model (any model id your configured provider supports):
56
71
 
57
72
  ```bash
58
- sf sgai metadata summarize --from HEAD~1 --to HEAD --model gpt-4o-mini
73
+ sf sgai metadata summarize --from HEAD~1 --to HEAD --model claude-3-5-sonnet-latest
59
74
  ```
60
75
 
61
76
  ## Requirements
62
77
 
63
78
  - `sf` CLI installed
64
79
  - Node.js 20 or later
65
- - **LLM gateway configuration** (see below)—at least one of `OPENAI_API_KEY` / `LLM_API_KEY`, `LLM_BASE_URL` / `OPENAI_BASE_URL`, or JSON in `OPENAI_DEFAULT_HEADERS` / `LLM_DEFAULT_HEADERS` so the OpenAI-compatible client can call your provider
80
+ - A configured LLM provider—see [Provider configuration](#provider-configuration)
66
81
  - A Salesforce DX project repository with a `sfdx-project.json` file present in the repo root (unless you pass only `--include-package-directory` paths)
67
82
  - [Git Bash](https://git-scm.com/install/)
68
83
 
69
84
  This plugin reads `packageDirectories` from `sfdx-project.json` (when present) to scope the git diff, merges optional CLI include/exclude paths, then sends context to the model.
70
85
 
71
- The plugin uses the official Node [`openai`](https://www.npmjs.com/package/openai) client: optional **`baseURL`**, optional **`defaultHeaders`** (JSON), and an API key string the SDK expects.
86
+ ### Provider configuration
87
+
88
+ The plugin delegates provider resolution to [`@mcarvin/smart-diff`](https://github.com/mcarvin8/smart-diff), which uses the Vercel AI SDK. Any of the supported providers below will work — set credentials for whichever one you want to use. If multiple are set, `LLM_PROVIDER` explicitly selects one; otherwise the resolver auto-detects based on which env vars are present.
89
+
90
+ | Provider (`LLM_PROVIDER`) | Credential env vars | Default model |
91
+ | ------------------------- | -------------------------------------------------------------------------- | ------------------------------------------ |
92
+ | `openai` | `OPENAI_API_KEY` or `LLM_API_KEY` | `gpt-4o-mini` |
93
+ | `openai-compatible` | `LLM_BASE_URL`/`OPENAI_BASE_URL` (required); API key and/or custom headers | `gpt-4o-mini` |
94
+ | `anthropic` | `ANTHROPIC_API_KEY` | `claude-3-5-haiku-latest` |
95
+ | `google` | `GOOGLE_GENERATIVE_AI_API_KEY` or `GOOGLE_API_KEY` | `gemini-2.0-flash` |
96
+ | `bedrock` | Standard AWS credential chain (env / profile / role) | `anthropic.claude-3-5-haiku-20241022-v1:0` |
97
+ | `mistral` | `MISTRAL_API_KEY` | `mistral-small-latest` |
98
+ | `cohere` | `COHERE_API_KEY` | `command-r-08-2024` |
99
+ | `groq` | `GROQ_API_KEY` | `llama-3.1-8b-instant` |
100
+ | `xai` | `XAI_API_KEY` | `grok-2-latest` |
101
+ | `deepseek` | `DEEPSEEK_API_KEY` | `deepseek-chat` |
72
102
 
73
- ### `LLM_*` overrides `OPENAI_*`
103
+ All supported provider SDKs ship with the plugin — once you run `sf plugins install sf-git-ai-meta-insights`, no extra `npm install` is needed to switch between OpenAI, Anthropic, Google, Bedrock, Mistral, Cohere, Groq, xAI, or DeepSeek. Just set the env vars for whichever provider you want to use.
74
104
 
75
- | Variable | Purpose |
76
- | ------------------------ | ------------------------------------------------------------------------------------------- |
77
- | `OPENAI_API_KEY` | Default API key for api.openai.com or your gateway. |
78
- | `LLM_API_KEY` | Overrides `OPENAI_API_KEY` when set. |
79
- | `OPENAI_BASE_URL` | Default base URL (OpenAI-compatible). |
80
- | `LLM_BASE_URL` | Overrides `OPENAI_BASE_URL` when set. |
81
- | `OPENAI_DEFAULT_HEADERS` | JSON object of extra HTTP headers (string values only). |
82
- | `LLM_DEFAULT_HEADERS` | JSON object merged **on top of** `OPENAI_DEFAULT_HEADERS` (same header names are replaced). |
105
+ #### Common env vars
83
106
 
84
- The OpenAI Node client always sends `Authorization: Bearer <apiKey>`. If you put a raw `sk-...` value in `LLM_DEFAULT_HEADERS` / `OPENAI_DEFAULT_HEADERS` as `Authorization` **without** `Bearer`, many gateways treat that as the final header and return errors like `401` with `param: api_key`. When `LLM_API_KEY` / `OPENAI_API_KEY` is unset, this plugin detects `Authorization: sk-...` or `Authorization: Bearer sk-...` in the merged JSON headers, moves that token into the client `apiKey` (so the SDK sends a proper `Bearer` value), and removes the duplicate `Authorization` entry from `defaultHeaders` while keeping your other headers (for example `x-alfa-rbac`).
107
+ | Variable | Purpose |
108
+ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- |
109
+ | `LLM_PROVIDER` | Explicit provider id from the table above. |
110
+ | `LLM_MODEL` | Overrides the per-provider default model id (also settable per-run via `--model`). |
111
+ | `OPENAI_BASE_URL` / `LLM_BASE_URL` | Base URL for an OpenAI-compatible gateway; presence alone auto-selects the `openai-compatible` provider. |
112
+ | `OPENAI_DEFAULT_HEADERS` / `LLM_DEFAULT_HEADERS` | JSON object of extra headers merged onto OpenAI / OpenAI-compatible requests. `LLM_*` overrides `OPENAI_*` key-by-key. |
113
+ | `OPENAI_MAX_DIFF_CHARS` / `LLM_MAX_DIFF_CHARS` | Max size of unified diff text sent to the model (default ~120k characters). Also settable per-run via `--max-diff-chars`. |
85
114
 
86
- Prefer setting `LLM_API_KEY` (or `OPENAI_API_KEY`) to your `sk-...` token when your gateway documents API-key auth that way.
115
+ > `LLM_*` variants override their `OPENAI_*` counterparts when both are set.
116
+ > For the full list of supported environment variables, see the [`@mcarvin/smart-diff` documentation](https://github.com/mcarvin8/smart-diff#provider-configuration).
87
117
 
88
- **PowerShell: company gateway**
118
+ #### Example: native OpenAI
89
119
 
90
120
  ```powershell
91
- $env:LLM_BASE_URL = "https://llm-gateway.mycompany.example/v1"
92
- $env:LLM_DEFAULT_HEADERS = '{"Authorization":"Bearer <token>","x-tenant-id":"salesforce"}'
121
+ $env:OPENAI_API_KEY = "sk-..."
93
122
  sf sgai metadata summarize --from HEAD~1 --to HEAD
94
123
  ```
95
124
 
96
- ![Command Example with Company Gateway](https://raw.githubusercontent.com/mcarvin8/sf-git-ai-meta-insights/main/.github/images/cmd-example.png)
97
- ![Markdown Summary Example](https://raw.githubusercontent.com/mcarvin8/sf-git-ai-meta-insights/main/.github/images/summary-example.png)
98
-
99
- ### OpenAI (api.openai.com)
125
+ #### Example: Anthropic Claude
100
126
 
101
- Set `OPENAI_API_KEY` only, or `LLM_API_KEY` if you standardize on `LLM_*` in your environment.
127
+ ```powershell
128
+ $env:ANTHROPIC_API_KEY = "sk-ant-..."
129
+ sf sgai metadata summarize --from HEAD~1 --to HEAD --model claude-3-5-sonnet-latest
130
+ ```
102
131
 
103
- ### Token limits
132
+ #### Example: company-managed OpenAI-compatible gateway
104
133
 
105
- `OPENAI_MAX_TOKENS` caps `max_tokens`; `LLM_MAX_TOKENS` overrides it when set.
134
+ ```powershell
135
+ $env:LLM_BASE_URL = "https://llm-gateway.mycompany.example/v1"
136
+ $env:LLM_DEFAULT_HEADERS = '{"Authorization":"Bearer <token>","x-tenant-id":"salesforce"}'
137
+ sf sgai metadata summarize --from HEAD~1 --to HEAD
138
+ ```
106
139
 
107
- ### Diff size (context window)
140
+ ## Built With
108
141
 
109
- The full unified diff is capped before it is sent to the LLM so requests stay within typical context limits (for example 128k tokens). If you see errors about context length exceeded, narrow `--from`/`--to`, use `--commit-message-include` / `--commit-message-exclude`, or lower `--max-diff-chars` / `LLM_MAX_DIFF_CHARS`. Only raise the cap when your model and gateway allow a larger context.
142
+ The plugin's core logic is imported from the [`@mcarvin/smart-diff`](https://github.com/mcarvin8/smart-diff) library, a general-purpose tool that turns git diffs from any repository into Markdown summaries using any Vercel AI SDK provider.
110
143
 
111
144
  ## License
112
145
 
@@ -0,0 +1,8 @@
1
+ /**
2
+ * LLM provider configuration — re-exported from `@mcarvin/smart-diff` so this plugin shares one implementation.
3
+ *
4
+ * `@mcarvin/smart-diff` v2 uses the Vercel AI SDK under the hood and supports OpenAI, OpenAI-compatible
5
+ * gateways, Anthropic, Google, Bedrock, Mistral, Cohere, Groq, xAI, and DeepSeek.
6
+ */
7
+ export type { LlmProviderId, ResolveLanguageModelOptions } from '@mcarvin/smart-diff';
8
+ export { LLM_GATEWAY_REQUIRED_MESSAGE, defaultModelForProvider, detectLlmProvider, isLlmProviderConfigured, parseLlmDefaultHeadersFromEnv, resolveLanguageModel, resolveLlmBaseUrl, } from '@mcarvin/smart-diff';
@@ -0,0 +1,2 @@
1
+ export { LLM_GATEWAY_REQUIRED_MESSAGE, defaultModelForProvider, detectLlmProvider, isLlmProviderConfigured, parseLlmDefaultHeadersFromEnv, resolveLanguageModel, resolveLlmBaseUrl, } from '@mcarvin/smart-diff';
2
+ //# sourceMappingURL=llmProviderConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llmProviderConfig.js","sourceRoot":"","sources":["../../src/ai/llmProviderConfig.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
@@ -1,2 +1,2 @@
1
- /** System prompt for OpenAI when summarizing Salesforce metadata git changes. */
2
- export declare const SALESFORCE_METADATA_SYSTEM_PROMPT = "You are a senior Salesforce architect helping developers understand Salesforce metadata changes from the git context they supplied.\nYou receive: commit subject lines (when available), changed metadata paths, and unified git patch(es) scoped to Salesforce metadata package directories\u2014either one range diff or concatenated per-commit patches, depending on how the diff was produced. Patches may be truncated mid-section with an explicit marker\u2014do not infer changes beyond visible lines.\nExplain what functionality changed: user-visible behavior, automations, integrations, data model, and security/access. Tie claims to the patch when possible.\nProduce a concise, developer-focused summary in Markdown.\nUse sections: Highlights, Risky or breaking changes, Data model changes, Automation & flows, Security & access.\nGroup related changes; do not list every individual component or file. When multiple commits appear in the context, briefly separate notable themes by commit when helpful.";
1
+ /** System prompt used by the configured LLM provider when summarizing Salesforce metadata git changes. */
2
+ export declare const SALESFORCE_METADATA_SYSTEM_PROMPT = "You are a senior Salesforce architect helping developers understand Salesforce metadata changes from the git context they supplied.\nYou receive: commit subject lines (when available), changed metadata paths, and unified git patch(es) scoped to Salesforce metadata package directories\u2014either one range diff or concatenated per-commit patches, depending on how the diff was produced. Patches may be truncated mid-section with an explicit marker\u2014do not infer changes beyond visible lines.\nExplain what functionality changed: user-visible behavior, automations, integrations, data model, and security/access. Tie claims to the patch when possible.\nProduce a concise, developer-focused summary in Markdown.\nBegin the output with the exact top-level heading \"# Metadata Change Summary\" (or \"# <Team> \u2013 Metadata Change Summary\" when the user message contains a Team line) and no content above it.\nUse sections: Highlights, Risky or breaking changes, Data model changes, Automation & flows, Security & access.\nGroup related changes; do not list every individual component or file. When multiple commits appear in the context, briefly separate notable themes by commit when helpful.";
@@ -1,8 +1,9 @@
1
- /** System prompt for OpenAI when summarizing Salesforce metadata git changes. */
1
+ /** System prompt used by the configured LLM provider when summarizing Salesforce metadata git changes. */
2
2
  export const SALESFORCE_METADATA_SYSTEM_PROMPT = `You are a senior Salesforce architect helping developers understand Salesforce metadata changes from the git context they supplied.
3
3
  You receive: commit subject lines (when available), changed metadata paths, and unified git patch(es) scoped to Salesforce metadata package directories—either one range diff or concatenated per-commit patches, depending on how the diff was produced. Patches may be truncated mid-section with an explicit marker—do not infer changes beyond visible lines.
4
4
  Explain what functionality changed: user-visible behavior, automations, integrations, data model, and security/access. Tie claims to the patch when possible.
5
5
  Produce a concise, developer-focused summary in Markdown.
6
+ Begin the output with the exact top-level heading "# Metadata Change Summary" (or "# <Team> – Metadata Change Summary" when the user message contains a Team line) and no content above it.
6
7
  Use sections: Highlights, Risky or breaking changes, Data model changes, Automation & flows, Security & access.
7
8
  Group related changes; do not list every individual component or file. When multiple commits appear in the context, briefly separate notable themes by commit when helpful.`;
8
9
  //# sourceMappingURL=salesforceMetadataPrompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"salesforceMetadataPrompt.js","sourceRoot":"","sources":["../../src/ai/salesforceMetadataPrompt.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,iCAAiC,GAAG;;;;;4KAK2H,CAAC"}
1
+ {"version":3,"file":"salesforceMetadataPrompt.js","sourceRoot":"","sources":["../../src/ai/salesforceMetadataPrompt.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAC1G,MAAM,CAAC,MAAM,iCAAiC,GAAG;;;;;;4KAM2H,CAAC"}
@@ -15,7 +15,7 @@ export default class SgaiMetadataSummarize extends SfCommand<SgaiMetadataSummari
15
15
  'exclude-package-directory': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
16
  team: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
17
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
18
- model: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
18
+ model: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
19
  'max-diff-chars': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
20
  };
21
21
  run(): Promise<SgaiMetadataSummarizeResult>;
@@ -1,7 +1,7 @@
1
1
  import { writeFile } from 'node:fs/promises';
2
2
  import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
3
3
  import { Messages, SfError } from '@salesforce/core';
4
- import { createGitClient, filterCommitsByMessageRegexes, getCommits, LLM_GATEWAY_REQUIRED_MESSAGE, shouldUseLlmGateway, summarizeGitDiff, } from '@mcarvin/smart-diff';
4
+ import { createGitClient, filterCommitsByMessageRegexes, getCommits, isLlmProviderConfigured, LLM_GATEWAY_REQUIRED_MESSAGE, summarizeGitDiff, } from '@mcarvin/smart-diff';
5
5
  import { SALESFORCE_METADATA_SYSTEM_PROMPT } from '../../../ai/salesforceMetadataPrompt.js';
6
6
  import { resolveMetadataSummaryTeam } from '../../../salesforce/metadataSummaryContext.js';
7
7
  import { getSalesforceMetadataIncludeFolders, normalizeRepoRelativeFolderPath, } from '../../../salesforce/sfdxPackagePaths.js';
@@ -145,7 +145,6 @@ export default class SgaiMetadataSummarize extends SfCommand {
145
145
  summary: messages.getMessage('flags.model.summary'),
146
146
  description: messages.getMessage('flags.model.description'),
147
147
  required: false,
148
- default: 'gpt-4o-mini',
149
148
  }),
150
149
  'max-diff-chars': Flags.integer({
151
150
  summary: messages.getMessage('flags.max-diff-chars.summary'),
@@ -156,8 +155,8 @@ export default class SgaiMetadataSummarize extends SfCommand {
156
155
  async run() {
157
156
  const { flags } = await this.parse(SgaiMetadataSummarize);
158
157
  validateMaxDiffCharsRange(flags['max-diff-chars']);
159
- if (!shouldUseLlmGateway()) {
160
- throw new SfError(LLM_GATEWAY_REQUIRED_MESSAGE, 'NoLlmGateway');
158
+ if (!isLlmProviderConfigured()) {
159
+ throw new SfError(LLM_GATEWAY_REQUIRED_MESSAGE, 'NoLlmProvider');
161
160
  }
162
161
  const from = flags.from;
163
162
  const to = flags.to ?? 'HEAD';
@@ -1 +1 @@
1
- {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../../../src/commands/sgai/metadata/summarize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../../../src/commands/sgai/metadata/summarize.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ Generate an AI-powered summary of changed Salesforce metadata from a git diff.
4
4
 
5
5
  # description
6
6
 
7
- Summarize metadata changes between two Git refs using a configured OpenAI-compatible LLM (required—see environment variables below). Optionally filter commits by include/exclude message regexes, narrow paths with `--include-package-directory` / `--exclude-package-directory`, and write the model output to a markdown file.
7
+ Summarize metadata changes between two Git refs using any LLM provider supported by the Vercel AI SDK — OpenAI, Anthropic, Google Gemini, Amazon Bedrock, Mistral, Cohere, Groq, xAI, DeepSeek, or any OpenAI-compatible gateway. A configured provider (API key, base URL, and/or default headers) is required see the README for environment variables. Optionally filter commits by include/exclude message regexes, narrow paths with `--include-package-directory` / `--exclude-package-directory`, and write the model output to a markdown file.
8
8
 
9
9
  # errors.noPackageDirectories
10
10
 
@@ -68,7 +68,7 @@ Optional team or squad label for the summary.
68
68
 
69
69
  # flags.team.description
70
70
 
71
- When set, includes a team line in the OpenAI user prompt. If omitted, `METADATA_AUDIT_TEAM` or `SF_GIT_AI_TEAM` is used when set; otherwise no team is included.
71
+ When set, includes a team line in the LLM user prompt. If omitted, `METADATA_AUDIT_TEAM` or `SF_GIT_AI_TEAM` is used when set; otherwise no team is included.
72
72
 
73
73
  # flags.output.summary
74
74
 
@@ -80,11 +80,11 @@ The path to the markdown file where the AI summary is written. Defaults to metad
80
80
 
81
81
  # flags.model.summary
82
82
 
83
- OpenAI model used for the summary.
83
+ Chat model id used for the summary.
84
84
 
85
85
  # flags.model.description
86
86
 
87
- The OpenAI model to use when creating the AI-generated metadata summary.
87
+ Override the chat model used when creating the AI-generated metadata summary. Must be a model id supported by the resolved LLM provider (for example `gpt-4o` for OpenAI, `claude-3-5-sonnet-latest` for Anthropic, `gemini-2.0-flash` for Google). When omitted, the plugin uses `LLM_MODEL` if set, otherwise the resolved provider's default model.
88
88
 
89
89
  # flags.max-diff-chars.summary
90
90
 
package/oclif.lock CHANGED
@@ -2,6 +2,116 @@
2
2
  # yarn lockfile v1
3
3
 
4
4
 
5
+ "@ai-sdk/amazon-bedrock@^4.0.96":
6
+ version "4.0.96"
7
+ resolved "https://registry.yarnpkg.com/@ai-sdk/amazon-bedrock/-/amazon-bedrock-4.0.96.tgz#75e51a1b1a8e0d2e5d2f6c2643692ebf17d4f10c"
8
+ integrity sha512-Mc4Ias2jRMD1jOB6xWtKNPdhECeuCZyIlbr9EAGfBnyBt++sS13ziZh9qv9TdyMCAZJ7xoQcpbchoRJcKwPdpA==
9
+ dependencies:
10
+ "@ai-sdk/anthropic" "3.0.71"
11
+ "@ai-sdk/provider" "3.0.8"
12
+ "@ai-sdk/provider-utils" "4.0.23"
13
+ "@smithy/eventstream-codec" "^4.0.1"
14
+ "@smithy/util-utf8" "^4.0.0"
15
+ aws4fetch "^1.0.20"
16
+
17
+ "@ai-sdk/anthropic@3.0.71", "@ai-sdk/anthropic@^3.0.71":
18
+ version "3.0.71"
19
+ resolved "https://registry.yarnpkg.com/@ai-sdk/anthropic/-/anthropic-3.0.71.tgz#33eddbbd6aa6aea51156acbb4e2d15846e9a6389"
20
+ integrity sha512-bUWOzrzR0gJKJO/PLGMR4uH2dqEgqGhrsCV+sSpk4KtOEnUQlfjZI/F7BFlqSvVpFbjdgYRRLysAeEZpJ6S1lg==
21
+ dependencies:
22
+ "@ai-sdk/provider" "3.0.8"
23
+ "@ai-sdk/provider-utils" "4.0.23"
24
+
25
+ "@ai-sdk/cohere@^3.0.30":
26
+ version "3.0.30"
27
+ resolved "https://registry.yarnpkg.com/@ai-sdk/cohere/-/cohere-3.0.30.tgz#5ab9c8c4f995d0dba255df9322c04d4c154018d2"
28
+ integrity sha512-j3fe/6lUUkHPD/51OgMXN9UD7p1QSQEAlroIinmb3MhJ1s+O0MnqdRa30IM7dRHafNp0FQ9X4YpobY85iMknUQ==
29
+ dependencies:
30
+ "@ai-sdk/provider" "3.0.8"
31
+ "@ai-sdk/provider-utils" "4.0.23"
32
+
33
+ "@ai-sdk/deepseek@^2.0.29":
34
+ version "2.0.29"
35
+ resolved "https://registry.yarnpkg.com/@ai-sdk/deepseek/-/deepseek-2.0.29.tgz#f2a959d491e3a61390c9d47f1207f4af36a373a1"
36
+ integrity sha512-cn4+xV0menm/4JKEDElnVGiUilHvi6AD4ZK/sY7DXP/Wb7Yb3Vr86NyYM6mGBE/Shk3mWHoHbzggVnF5x0uMEA==
37
+ dependencies:
38
+ "@ai-sdk/provider" "3.0.8"
39
+ "@ai-sdk/provider-utils" "4.0.23"
40
+
41
+ "@ai-sdk/gateway@3.0.104":
42
+ version "3.0.104"
43
+ resolved "https://registry.yarnpkg.com/@ai-sdk/gateway/-/gateway-3.0.104.tgz#3ad45f88907f385544d416397a33e82f1efd0758"
44
+ integrity sha512-ZKX5n74io8VIRlhIMSLWVlvT3sXC8Z7cZ9GHuWBWZDVi96+62AIsWuLGvMfcBA1STYuSoDrp6rIziZmvrTq0TA==
45
+ dependencies:
46
+ "@ai-sdk/provider" "3.0.8"
47
+ "@ai-sdk/provider-utils" "4.0.23"
48
+ "@vercel/oidc" "3.2.0"
49
+
50
+ "@ai-sdk/google@^3.0.64":
51
+ version "3.0.64"
52
+ resolved "https://registry.yarnpkg.com/@ai-sdk/google/-/google-3.0.64.tgz#14dfadcf63aa66aa7f2d22b5012803814083551f"
53
+ integrity sha512-CbR82EgGPNrj/6q0HtclwuCqe0/pDShyv3nWDP/A9DroujzWXnLMlUJVrgPOsg4b40zQCwwVs2XSKCxvt/4QaA==
54
+ dependencies:
55
+ "@ai-sdk/provider" "3.0.8"
56
+ "@ai-sdk/provider-utils" "4.0.23"
57
+
58
+ "@ai-sdk/groq@^3.0.35":
59
+ version "3.0.35"
60
+ resolved "https://registry.yarnpkg.com/@ai-sdk/groq/-/groq-3.0.35.tgz#993d843ca09c3b5129deb9117ac05e6be5932b8c"
61
+ integrity sha512-LXoPwSKaqXst9LyLN2J7gK8n7RldQLbP2zsnBYxXcOsXKrtceksqtbsmGXujvab2TM9FisquAw/ZG2hTbD5vnQ==
62
+ dependencies:
63
+ "@ai-sdk/provider" "3.0.8"
64
+ "@ai-sdk/provider-utils" "4.0.23"
65
+
66
+ "@ai-sdk/mistral@^3.0.30":
67
+ version "3.0.30"
68
+ resolved "https://registry.yarnpkg.com/@ai-sdk/mistral/-/mistral-3.0.30.tgz#1645e9c5a2e2fa3cd62ed400c29827abf113c5e6"
69
+ integrity sha512-+j4IXRSk9E661cFSafmIr+XHOzwjFagawwzMOlSqwL6U4Sq4PCFLDF+oHbX5NUqNjUL7FD1zi/9lBIfa41pUvw==
70
+ dependencies:
71
+ "@ai-sdk/provider" "3.0.8"
72
+ "@ai-sdk/provider-utils" "4.0.23"
73
+
74
+ "@ai-sdk/openai-compatible@2.0.41", "@ai-sdk/openai-compatible@^2.0.41":
75
+ version "2.0.41"
76
+ resolved "https://registry.yarnpkg.com/@ai-sdk/openai-compatible/-/openai-compatible-2.0.41.tgz#1f8269e3670b61f1d583ae985856f66753be0847"
77
+ integrity sha512-kNAGINk71AlOXx10Dq/PXw4t/9XjdK8uxfpVElRwtSFMdeSiLVt58p9TPx4/FJD+hxZuVhvxYj9r42osxWq79g==
78
+ dependencies:
79
+ "@ai-sdk/provider" "3.0.8"
80
+ "@ai-sdk/provider-utils" "4.0.23"
81
+
82
+ "@ai-sdk/openai@^3.0.53":
83
+ version "3.0.53"
84
+ resolved "https://registry.yarnpkg.com/@ai-sdk/openai/-/openai-3.0.53.tgz#e2fde1f48eca955a259c4d8fbcc5a086b53ea504"
85
+ integrity sha512-Wld+Rbc05KaUn08uBt06eEuwcgalcIFtIl32Yp+GxuZXUQwOb6YeAuq+C6da4ch6BurFoqEaLemJVwjBb7x+PQ==
86
+ dependencies:
87
+ "@ai-sdk/provider" "3.0.8"
88
+ "@ai-sdk/provider-utils" "4.0.23"
89
+
90
+ "@ai-sdk/provider-utils@4.0.23":
91
+ version "4.0.23"
92
+ resolved "https://registry.yarnpkg.com/@ai-sdk/provider-utils/-/provider-utils-4.0.23.tgz#fa0e89d6756816d8a0015f556e0b20df6df14dfa"
93
+ integrity sha512-z8GlDaCmRSDlqkMF2f4/RFgWxdarvIbyuk+m6WXT1LYgsnGiXRJGTD2Z1+SDl3LqtFuRtGX1aghYvQLoHL/9pg==
94
+ dependencies:
95
+ "@ai-sdk/provider" "3.0.8"
96
+ "@standard-schema/spec" "^1.1.0"
97
+ eventsource-parser "^3.0.6"
98
+
99
+ "@ai-sdk/provider@3.0.8":
100
+ version "3.0.8"
101
+ resolved "https://registry.yarnpkg.com/@ai-sdk/provider/-/provider-3.0.8.tgz#fd7fac7533c03534ac1d3fb710a6b96e2aa00263"
102
+ integrity sha512-oGMAgGoQdBXbZqNG0Ze56CHjDZ1IDYOwGYxYjO5KLSlz5HiNQ9udIXsPZ61VWaHGZ5XW/jyjmr6t2xz2jGVwbQ==
103
+ dependencies:
104
+ json-schema "^0.4.0"
105
+
106
+ "@ai-sdk/xai@^3.0.83":
107
+ version "3.0.83"
108
+ resolved "https://registry.yarnpkg.com/@ai-sdk/xai/-/xai-3.0.83.tgz#7ebef403450edff1fabaff45dcfda53af943fbb3"
109
+ integrity sha512-SuQz68BZGeuZjrSUJAzku97IlhdiNJJBsvG/Tvm3K2tuxkBS7TJq0fH4/AzAM7w2H2jxVUgboP7kRR6IfpRxcg==
110
+ dependencies:
111
+ "@ai-sdk/openai-compatible" "2.0.41"
112
+ "@ai-sdk/provider" "3.0.8"
113
+ "@ai-sdk/provider-utils" "4.0.23"
114
+
5
115
  "@alcalzone/ansi-tokenize@^0.1.3":
6
116
  version "0.1.3"
7
117
  resolved "https://registry.npmjs.org/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.1.3.tgz"
@@ -1649,15 +1759,26 @@
1649
1759
  resolved "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz"
1650
1760
  integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==
1651
1761
 
1652
- "@mcarvin/smart-diff@1.0.3":
1653
- version "1.0.3"
1654
- resolved "https://registry.yarnpkg.com/@mcarvin/smart-diff/-/smart-diff-1.0.3.tgz#52c14696593f8c5cacb8b8dc98688796dacfe93d"
1655
- integrity sha512-4ohYlihSH5oDiExOHSa5DcRB/QX/p/Ofx/StPBlqrTX1ytkrN12T6bwYiO6w1uq4kM9siVWe+dtjwgP37McawQ==
1762
+ "@mcarvin/smart-diff@^2.0.0":
1763
+ version "2.0.0"
1764
+ resolved "https://registry.yarnpkg.com/@mcarvin/smart-diff/-/smart-diff-2.0.0.tgz#e7d8a6d1e349199238feb0c81da4f20e105aa972"
1765
+ integrity sha512-I1vTfEmAw7dwHNZXylWth5DKMdxMCjs8BB0SmBBuDOPw9QTTP8QvyDrSSB8+8I0tlnlgdWhSuxfhpFTAWyaJ3g==
1656
1766
  dependencies:
1767
+ "@ai-sdk/openai" "^3.0.53"
1768
+ "@ai-sdk/openai-compatible" "^2.0.41"
1769
+ ai "^6.0.168"
1657
1770
  fs-extra "^11.3.4"
1658
- openai "^6.34.0"
1659
1771
  simple-git "^3.20.0"
1660
1772
  tslib "^2.6.2"
1773
+ optionalDependencies:
1774
+ "@ai-sdk/amazon-bedrock" "^4.0.96"
1775
+ "@ai-sdk/anthropic" "^3.0.71"
1776
+ "@ai-sdk/cohere" "^3.0.30"
1777
+ "@ai-sdk/deepseek" "^2.0.29"
1778
+ "@ai-sdk/google" "^3.0.64"
1779
+ "@ai-sdk/groq" "^3.0.35"
1780
+ "@ai-sdk/mistral" "^3.0.30"
1781
+ "@ai-sdk/xai" "^3.0.83"
1661
1782
 
1662
1783
  "@nodelib/fs.scandir@2.1.5":
1663
1784
  version "2.1.5"
@@ -1787,6 +1908,11 @@
1787
1908
  strip-ansi "^7.1.2"
1788
1909
  wrap-ansi "^9.0.2"
1789
1910
 
1911
+ "@opentelemetry/api@1.9.0":
1912
+ version "1.9.0"
1913
+ resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe"
1914
+ integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==
1915
+
1790
1916
  "@pinojs/redact@^0.4.0":
1791
1917
  version "0.4.0"
1792
1918
  resolved "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz"
@@ -2133,6 +2259,16 @@
2133
2259
  "@smithy/url-parser" "^4.2.13"
2134
2260
  tslib "^2.6.2"
2135
2261
 
2262
+ "@smithy/eventstream-codec@^4.0.1":
2263
+ version "4.2.14"
2264
+ resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.14.tgz#4963ca27242b80c5b1d11dcd3ea1bee2a3c5f96d"
2265
+ integrity sha512-erZq0nOIpzfeZdCyzZjdJb4nVSKLUmSkaQUVkRGQTXs30gyUGeKnrYEg+Xe1W5gE3aReS7IgsvANwVPxSzY6Pw==
2266
+ dependencies:
2267
+ "@aws-crypto/crc32" "5.2.0"
2268
+ "@smithy/types" "^4.14.1"
2269
+ "@smithy/util-hex-encoding" "^4.2.2"
2270
+ tslib "^2.6.2"
2271
+
2136
2272
  "@smithy/eventstream-codec@^4.2.13":
2137
2273
  version "4.2.13"
2138
2274
  resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.13.tgz"
@@ -2408,6 +2544,13 @@
2408
2544
  dependencies:
2409
2545
  tslib "^2.6.2"
2410
2546
 
2547
+ "@smithy/types@^4.14.1":
2548
+ version "4.14.1"
2549
+ resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.14.1.tgz#aba92b4cdb406f2a2b062e82f1e3728d809a7c23"
2550
+ integrity sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==
2551
+ dependencies:
2552
+ tslib "^2.6.2"
2553
+
2411
2554
  "@smithy/url-parser@^4.2.12", "@smithy/url-parser@^4.2.13":
2412
2555
  version "4.2.13"
2413
2556
  resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.13.tgz"
@@ -2548,7 +2691,7 @@
2548
2691
  "@smithy/util-buffer-from" "^2.2.0"
2549
2692
  tslib "^2.6.2"
2550
2693
 
2551
- "@smithy/util-utf8@^4.2.2":
2694
+ "@smithy/util-utf8@^4.0.0", "@smithy/util-utf8@^4.2.2":
2552
2695
  version "4.2.2"
2553
2696
  resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz"
2554
2697
  integrity sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==
@@ -2571,6 +2714,11 @@
2571
2714
  dependencies:
2572
2715
  tslib "^2.6.2"
2573
2716
 
2717
+ "@standard-schema/spec@^1.1.0":
2718
+ version "1.1.0"
2719
+ resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8"
2720
+ integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==
2721
+
2574
2722
  "@szmarczak/http-timer@^5.0.1":
2575
2723
  version "5.0.1"
2576
2724
  resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz"
@@ -2948,6 +3096,11 @@
2948
3096
  resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz"
2949
3097
  integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
2950
3098
 
3099
+ "@vercel/oidc@3.2.0":
3100
+ version "3.2.0"
3101
+ resolved "https://registry.yarnpkg.com/@vercel/oidc/-/oidc-3.2.0.tgz#5782a4d4904443f015808705b5537cf9c3b68528"
3102
+ integrity sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==
3103
+
2951
3104
  JSONStream@^1.3.5:
2952
3105
  version "1.3.5"
2953
3106
  resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz"
@@ -3000,6 +3153,16 @@ aggregate-error@^3.0.0:
3000
3153
  clean-stack "^2.0.0"
3001
3154
  indent-string "^4.0.0"
3002
3155
 
3156
+ ai@^6.0.168:
3157
+ version "6.0.168"
3158
+ resolved "https://registry.yarnpkg.com/ai/-/ai-6.0.168.tgz#314a8622481c3dbceaef4d911a1c132df59dc1ef"
3159
+ integrity sha512-2HqCJuO+1V2aV7vfYs5LFEUfxbkGX+5oa54q/gCCTL7KLTdbxcCu5D7TdLA5kwsrs3Szgjah9q6D9tpjHM3hUQ==
3160
+ dependencies:
3161
+ "@ai-sdk/gateway" "3.0.104"
3162
+ "@ai-sdk/provider" "3.0.8"
3163
+ "@ai-sdk/provider-utils" "4.0.23"
3164
+ "@opentelemetry/api" "1.9.0"
3165
+
3003
3166
  ajv@^6.12.4:
3004
3167
  version "6.14.0"
3005
3168
  resolved "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz"
@@ -3252,6 +3415,11 @@ available-typed-arrays@^1.0.7:
3252
3415
  dependencies:
3253
3416
  possible-typed-array-names "^1.0.0"
3254
3417
 
3418
+ aws4fetch@^1.0.20:
3419
+ version "1.0.20"
3420
+ resolved "https://registry.yarnpkg.com/aws4fetch/-/aws4fetch-1.0.20.tgz#090d6c65e32c6df645dd5e5acf04cc56da575cbe"
3421
+ integrity sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==
3422
+
3255
3423
  babel-jest@^29.7.0:
3256
3424
  version "29.7.0"
3257
3425
  resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz"
@@ -4660,6 +4828,11 @@ events@^3.3.0:
4660
4828
  resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz"
4661
4829
  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
4662
4830
 
4831
+ eventsource-parser@^3.0.6:
4832
+ version "3.0.8"
4833
+ resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.8.tgz#1c792503e4080455d00701bb1f7a1d60734d0e58"
4834
+ integrity sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ==
4835
+
4663
4836
  execa@^1.0.0:
4664
4837
  version "1.0.0"
4665
4838
  resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz"
@@ -6436,6 +6609,11 @@ json-schema-traverse@^1.0.0:
6436
6609
  resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz"
6437
6610
  integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
6438
6611
 
6612
+ json-schema@^0.4.0:
6613
+ version "0.4.0"
6614
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
6615
+ integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
6616
+
6439
6617
  json-stable-stringify-without-jsonify@^1.0.1:
6440
6618
  version "1.0.1"
6441
6619
  resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
@@ -7417,11 +7595,6 @@ oniguruma-to-es@^2.2.0:
7417
7595
  regex "^5.1.1"
7418
7596
  regex-recursion "^5.1.1"
7419
7597
 
7420
- openai@^6.34.0:
7421
- version "6.34.0"
7422
- resolved "https://registry.yarnpkg.com/openai/-/openai-6.34.0.tgz#93483a1044e2dcd62891bba580772b9cb792395d"
7423
- integrity sha512-yEr2jdGf4tVFYG6ohmr3pF6VJuveP0EA/sS8TBx+4Eq5NT10alu5zg2dmxMXMgqpihRDQlFGpRt2XwsGj+Fyxw==
7424
-
7425
7598
  optionator@^0.9.3:
7426
7599
  version "0.9.4"
7427
7600
  resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz"
@@ -9649,7 +9822,7 @@ yoga-wasm-web@~0.3.3:
9649
9822
  resolved "https://registry.npmjs.org/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz"
9650
9823
  integrity sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==
9651
9824
 
9652
- zod@^4.1.12:
9825
+ zod@^4.1.12, zod@^4.1.8:
9653
9826
  version "4.3.6"
9654
9827
  resolved "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz"
9655
9828
  integrity sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==
@@ -3,7 +3,7 @@
3
3
  "sgai:metadata:summarize": {
4
4
  "aliases": [],
5
5
  "args": {},
6
- "description": "Summarize metadata changes between two Git refs using a configured OpenAI-compatible LLM (required—see environment variables below). Optionally filter commits by include/exclude message regexes, narrow paths with `--include-package-directory` / `--exclude-package-directory`, and write the model output to a markdown file.",
6
+ "description": "Summarize metadata changes between two Git refs using any LLM provider supported by the Vercel AI SDK — OpenAI, Anthropic, Google Gemini, Amazon Bedrock, Mistral, Cohere, Groq, xAI, DeepSeek, or any OpenAI-compatible gateway. A configured provider (API key, base URL, and/or default headers) is required see the README for environment variables. Optionally filter commits by include/exclude message regexes, narrow paths with `--include-package-directory` / `--exclude-package-directory`, and write the model output to a markdown file.",
7
7
  "examples": [
8
8
  "<%= config.bin %> <%= command.id %> --from HEAD~5 --to HEAD --commit-message-include \"(feature|fix)\" --output changes.md",
9
9
  "<%= config.bin %> <%= command.id %> --from HEAD~5 --to HEAD --commit-message-include \"feat\" --commit-message-exclude \"wip\" --exclude-package-directory force-app/main/default/lwc/temp",
@@ -87,7 +87,7 @@
87
87
  "type": "option"
88
88
  },
89
89
  "team": {
90
- "description": "When set, includes a team line in the OpenAI user prompt. If omitted, `METADATA_AUDIT_TEAM` or `SF_GIT_AI_TEAM` is used when set; otherwise no team is included.",
90
+ "description": "When set, includes a team line in the LLM user prompt. If omitted, `METADATA_AUDIT_TEAM` or `SF_GIT_AI_TEAM` is used when set; otherwise no team is included.",
91
91
  "name": "team",
92
92
  "required": false,
93
93
  "summary": "Optional team or squad label for the summary.",
@@ -107,11 +107,10 @@
107
107
  "type": "option"
108
108
  },
109
109
  "model": {
110
- "description": "The OpenAI model to use when creating the AI-generated metadata summary.",
110
+ "description": "Override the chat model used when creating the AI-generated metadata summary. Must be a model id supported by the resolved LLM provider (for example `gpt-4o` for OpenAI, `claude-3-5-sonnet-latest` for Anthropic, `gemini-2.0-flash` for Google). When omitted, the plugin uses `LLM_MODEL` if set, otherwise the resolved provider's default model.",
111
111
  "name": "model",
112
112
  "required": false,
113
- "summary": "OpenAI model used for the summary.",
114
- "default": "gpt-4o-mini",
113
+ "summary": "Chat model id used for the summary.",
115
114
  "hasDynamicHelp": false,
116
115
  "multiple": false,
117
116
  "type": "option"
@@ -154,5 +153,5 @@
154
153
  ]
155
154
  }
156
155
  },
157
- "version": "2.0.1"
156
+ "version": "2.2.0"
158
157
  }
package/package.json CHANGED
@@ -1,12 +1,21 @@
1
1
  {
2
2
  "name": "sf-git-ai-meta-insights",
3
3
  "description": "Provide AI-generated summaries on Salesforce metadata changes by analyzing the git diff.",
4
- "version": "2.0.1",
4
+ "version": "2.2.0",
5
5
  "dependencies": {
6
- "@mcarvin/smart-diff": "1.0.3",
6
+ "@ai-sdk/amazon-bedrock": "^4.0.96",
7
+ "@ai-sdk/anthropic": "^3.0.71",
8
+ "@ai-sdk/cohere": "^3.0.30",
9
+ "@ai-sdk/deepseek": "^2.0.29",
10
+ "@ai-sdk/google": "^3.0.64",
11
+ "@ai-sdk/groq": "^3.0.35",
12
+ "@ai-sdk/mistral": "^3.0.30",
13
+ "@ai-sdk/xai": "^3.0.83",
14
+ "@mcarvin/smart-diff": "^2.0.0",
7
15
  "@oclif/core": "^4",
8
16
  "@salesforce/core": "^8",
9
- "@salesforce/sf-plugins-core": "^12"
17
+ "@salesforce/sf-plugins-core": "^12",
18
+ "zod": "^4.1.8"
10
19
  },
11
20
  "devDependencies": {
12
21
  "@jest/globals": "^29.7.0",
@@ -1,5 +0,0 @@
1
- /**
2
- * OpenAI-compatible LLM gateways — re-exported from `@mcarvin/smart-diff` so this plugin shares one implementation.
3
- */
4
- export type { OpenAiLikeClient, OpenAiLikeClientInit } from '@mcarvin/smart-diff';
5
- export { createOpenAiLikeClient, LLM_GATEWAY_REQUIRED_MESSAGE, parseLlmDefaultHeadersFromEnv, resolveLlmBaseUrl, resolveOpenAiLikeClientInit, shouldUseLlmGateway, splitPromotableAuthorizationFromHeaders, } from '@mcarvin/smart-diff';
@@ -1,2 +0,0 @@
1
- export { createOpenAiLikeClient, LLM_GATEWAY_REQUIRED_MESSAGE, parseLlmDefaultHeadersFromEnv, resolveLlmBaseUrl, resolveOpenAiLikeClientInit, shouldUseLlmGateway, splitPromotableAuthorizationFromHeaders, } from '@mcarvin/smart-diff';
2
- //# sourceMappingURL=openAiConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openAiConfig.js","sourceRoot":"","sources":["../../src/ai/openAiConfig.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,EAC7B,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,uCAAuC,GACxC,MAAM,qBAAqB,CAAC"}