sf-git-ai-meta-insights 2.2.0 → 2.4.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 +16 -0
- package/README.md +18 -0
- package/lib/commands/sgai/metadata/summarize.d.ts +5 -0
- package/lib/commands/sgai/metadata/summarize.js +49 -0
- package/lib/commands/sgai/metadata/summarize.js.map +1 -1
- package/messages/sgai.metadata.summarize.md +41 -0
- package/oclif.manifest.json +45 -2
- package/package.json +31 -20
- package/oclif.lock +0 -9833
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.4.0](https://github.com/mcarvin8/sf-git-ai-meta-insights/compare/v2.3.0...v2.4.0) (2026-05-02)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **ai:** bump the ai-sdk group across 1 directory with 11 updates ([#26](https://github.com/mcarvin8/sf-git-ai-meta-insights/issues/26)) ([6ab5115](https://github.com/mcarvin8/sf-git-ai-meta-insights/commit/6ab5115ec89fdd18d43d9fd312fada2e1aca4a0d))
|
|
9
|
+
* **deps:** bump actions/setup-node from 6.3.0 to 6.4.0 ([#23](https://github.com/mcarvin8/sf-git-ai-meta-insights/issues/23)) ([8ff9f9c](https://github.com/mcarvin8/sf-git-ai-meta-insights/commit/8ff9f9cbe1b3e40ef46ddc7984eb1a5955909c27))
|
|
10
|
+
* **deps:** bump googleapis/release-please-action from 4 to 5 ([#22](https://github.com/mcarvin8/sf-git-ai-meta-insights/issues/22)) ([e29d6f3](https://github.com/mcarvin8/sf-git-ai-meta-insights/commit/e29d6f34f87d662a92b3ea19889cd7b47319c2bb))
|
|
11
|
+
|
|
12
|
+
## [2.3.0](https://github.com/mcarvin8/sf-git-ai-meta-insights/compare/v2.2.0...v2.3.0) (2026-04-24)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* **diff:** add CLI flags for unified-diff token-reduction controls ([#20](https://github.com/mcarvin8/sf-git-ai-meta-insights/issues/20)) ([cbc5523](https://github.com/mcarvin8/sf-git-ai-meta-insights/commit/cbc5523959bbbc2f38aa1410a6f24170f2163c7b))
|
|
18
|
+
|
|
3
19
|
## [2.2.0](https://github.com/mcarvin8/sf-git-ai-meta-insights/compare/v2.1.0...v2.2.0) (2026-04-21)
|
|
4
20
|
|
|
5
21
|
|
package/README.md
CHANGED
|
@@ -39,6 +39,11 @@ Summarize metadata changes between two Git refs and write the generated summary
|
|
|
39
39
|
| `--output` | `-p` | No | `metadata-summary.md` | Output file path for the generated summary. |
|
|
40
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
41
|
| `--max-diff-chars` | | No | | Max characters of unified diff text sent to the model (5,000–5,000,000). |
|
|
42
|
+
| `--context-lines` | | No | _git default (3)_ | `git diff -U<n>` context lines around each change (0–1,000). Lower values cut tokens on modification-heavy diffs. |
|
|
43
|
+
| `--ignore-whitespace` | | No | `false` | Pass `-w` / `--ignore-all-space` to `git diff` so whitespace-only hunks don't consume tokens (also applied to `--numstat` / `--name-status`). |
|
|
44
|
+
| `--strip-diff-preamble` | | No | `false` | Drop low-value `diff --git`/`index`/`mode`/`similarity`/`rename`/`copy` lines from the unified diff; `--- a/…`, `+++ b/…`, and `@@` hunk headers are kept. |
|
|
45
|
+
| `--max-hunk-lines` | | No | | Cap each hunk's body (1–100,000); anything past the limit is elided to a single marker. `@@` header and `DiffSummary` totals stay intact. |
|
|
46
|
+
| `--exclude-default-noise` | | No | `false` | Merge smart-diff's built-in `DEFAULT_NOISE_EXCLUDES` list (lockfiles, `dist`, `build`, `out`, `coverage`, `node_modules`, `__snapshots__`) into excluded pathspecs. |
|
|
42
47
|
|
|
43
48
|
#### Examples
|
|
44
49
|
|
|
@@ -73,6 +78,19 @@ Override the chat model (any model id your configured provider supports):
|
|
|
73
78
|
sf sgai metadata summarize --from HEAD~1 --to HEAD --model claude-3-5-sonnet-latest
|
|
74
79
|
```
|
|
75
80
|
|
|
81
|
+
Reduce LLM token cost with unified-diff shaping (ignore whitespace, trim context, elide huge hunks, strip low-value preamble lines):
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
sf sgai metadata summarize \
|
|
85
|
+
--from HEAD~5 --to HEAD \
|
|
86
|
+
--ignore-whitespace \
|
|
87
|
+
--context-lines 1 \
|
|
88
|
+
--strip-diff-preamble \
|
|
89
|
+
--max-hunk-lines 400
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
These flags only reshape the unified diff text sent to the model — the structured change inventory (file counts, additions, deletions) is computed separately and is always accurate. See the [`@mcarvin/smart-diff` "Reducing tokens" guide](https://github.com/mcarvin8/smart-diff#reducing-tokens) for details on each option.
|
|
93
|
+
|
|
76
94
|
## Requirements
|
|
77
95
|
|
|
78
96
|
- `sf` CLI installed
|
|
@@ -17,6 +17,11 @@ export default class SgaiMetadataSummarize extends SfCommand<SgaiMetadataSummari
|
|
|
17
17
|
output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
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
|
+
'context-lines': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
21
|
+
'ignore-whitespace': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
22
|
+
'strip-diff-preamble': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
23
|
+
'max-hunk-lines': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
24
|
+
'exclude-default-noise': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
20
25
|
};
|
|
21
26
|
run(): Promise<SgaiMetadataSummarizeResult>;
|
|
22
27
|
}
|
|
@@ -14,6 +14,20 @@ function validateMaxDiffCharsRange(maxDiffChars) {
|
|
|
14
14
|
throw new SfError(`--max-diff-chars must be between 5000 and 5,000,000 (received ${maxDiffChars}).`, 'InvalidMaxDiffChars');
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
+
function validateContextLinesRange(contextLines) {
|
|
18
|
+
if (contextLines === undefined)
|
|
19
|
+
return;
|
|
20
|
+
if (!Number.isInteger(contextLines) || contextLines < 0 || contextLines > 1000) {
|
|
21
|
+
throw new SfError(`--context-lines must be an integer between 0 and 1000 (received ${contextLines}).`, 'InvalidContextLines');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function validateMaxHunkLinesRange(maxHunkLines) {
|
|
25
|
+
if (maxHunkLines === undefined)
|
|
26
|
+
return;
|
|
27
|
+
if (!Number.isInteger(maxHunkLines) || maxHunkLines < 1 || maxHunkLines > 100_000) {
|
|
28
|
+
throw new SfError(`--max-hunk-lines must be an integer between 1 and 100,000 (received ${maxHunkLines}).`, 'InvalidMaxHunkLines');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
17
31
|
function getValidatedCommitMessageRegexLists(flags) {
|
|
18
32
|
const include = mergeUniqueStrings((flags['commit-message-include'] ?? []).map((s) => s.trim()).filter((s) => s.length > 0));
|
|
19
33
|
const exclude = (flags['commit-message-exclude'] ?? []).map((s) => s.trim()).filter((s) => s.length > 0);
|
|
@@ -151,10 +165,40 @@ export default class SgaiMetadataSummarize extends SfCommand {
|
|
|
151
165
|
description: messages.getMessage('flags.max-diff-chars.description'),
|
|
152
166
|
required: false,
|
|
153
167
|
}),
|
|
168
|
+
'context-lines': Flags.integer({
|
|
169
|
+
summary: messages.getMessage('flags.context-lines.summary'),
|
|
170
|
+
description: messages.getMessage('flags.context-lines.description'),
|
|
171
|
+
required: false,
|
|
172
|
+
}),
|
|
173
|
+
'ignore-whitespace': Flags.boolean({
|
|
174
|
+
summary: messages.getMessage('flags.ignore-whitespace.summary'),
|
|
175
|
+
description: messages.getMessage('flags.ignore-whitespace.description'),
|
|
176
|
+
required: false,
|
|
177
|
+
default: false,
|
|
178
|
+
}),
|
|
179
|
+
'strip-diff-preamble': Flags.boolean({
|
|
180
|
+
summary: messages.getMessage('flags.strip-diff-preamble.summary'),
|
|
181
|
+
description: messages.getMessage('flags.strip-diff-preamble.description'),
|
|
182
|
+
required: false,
|
|
183
|
+
default: false,
|
|
184
|
+
}),
|
|
185
|
+
'max-hunk-lines': Flags.integer({
|
|
186
|
+
summary: messages.getMessage('flags.max-hunk-lines.summary'),
|
|
187
|
+
description: messages.getMessage('flags.max-hunk-lines.description'),
|
|
188
|
+
required: false,
|
|
189
|
+
}),
|
|
190
|
+
'exclude-default-noise': Flags.boolean({
|
|
191
|
+
summary: messages.getMessage('flags.exclude-default-noise.summary'),
|
|
192
|
+
description: messages.getMessage('flags.exclude-default-noise.description'),
|
|
193
|
+
required: false,
|
|
194
|
+
default: false,
|
|
195
|
+
}),
|
|
154
196
|
};
|
|
155
197
|
async run() {
|
|
156
198
|
const { flags } = await this.parse(SgaiMetadataSummarize);
|
|
157
199
|
validateMaxDiffCharsRange(flags['max-diff-chars']);
|
|
200
|
+
validateContextLinesRange(flags['context-lines']);
|
|
201
|
+
validateMaxHunkLinesRange(flags['max-hunk-lines']);
|
|
158
202
|
if (!isLlmProviderConfigured()) {
|
|
159
203
|
throw new SfError(LLM_GATEWAY_REQUIRED_MESSAGE, 'NoLlmProvider');
|
|
160
204
|
}
|
|
@@ -185,6 +229,11 @@ export default class SgaiMetadataSummarize extends SfCommand {
|
|
|
185
229
|
maxDiffChars: maxDiffCharsFlag,
|
|
186
230
|
commitMessageIncludeRegexes: commitMessageIncludeRegexes.length > 0 ? commitMessageIncludeRegexes : undefined,
|
|
187
231
|
commitMessageExcludeRegexes: commitMessageExcludeFromFlag.length > 0 ? commitMessageExcludeFromFlag : undefined,
|
|
232
|
+
contextLines: flags['context-lines'],
|
|
233
|
+
ignoreWhitespace: flags['ignore-whitespace'] || undefined,
|
|
234
|
+
stripDiffPreamble: flags['strip-diff-preamble'] || undefined,
|
|
235
|
+
maxHunkLines: flags['max-hunk-lines'],
|
|
236
|
+
excludeDefaultNoise: flags['exclude-default-noise'] || undefined,
|
|
188
237
|
});
|
|
189
238
|
await writeFile(outputPath, summary, 'utf8');
|
|
190
239
|
this.log(`Generated metadata summary at ${outputPath}`);
|
|
@@ -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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"}
|
|
@@ -94,9 +94,50 @@ Maximum size of the unified diff sent to the LLM (characters).
|
|
|
94
94
|
|
|
95
95
|
Large metadata diffs can exceed the model context window. The plugin sends at most this many characters of the unified diff (plus a fixed preamble). Allowed range is 5000 through 5000000 when set. Defaults to a conservative limit when unset; override with `LLM_MAX_DIFF_CHARS` or this flag. Only increase if your model and gateway support a larger context.
|
|
96
96
|
|
|
97
|
+
# flags.context-lines.summary
|
|
98
|
+
|
|
99
|
+
Number of context lines around each change in the unified diff.
|
|
100
|
+
|
|
101
|
+
# flags.context-lines.description
|
|
102
|
+
|
|
103
|
+
Sets `git diff -U<n>` when building the unified diff sent to the model. Lower values (1 or 0) are typically the single biggest token saver on modification-heavy diffs because they drop unchanged surrounding lines from each hunk. The structured diff summary (file counts and line totals) still reflects the full change. Allowed range is 0 through 1000 when set. When omitted, git's default (3) is used.
|
|
104
|
+
|
|
105
|
+
# flags.ignore-whitespace.summary
|
|
106
|
+
|
|
107
|
+
Ignore whitespace-only changes when building the diff.
|
|
108
|
+
|
|
109
|
+
# flags.ignore-whitespace.description
|
|
110
|
+
|
|
111
|
+
Passes `-w` / `--ignore-all-space` to `git diff` so pure-whitespace hunks don't consume tokens in the unified diff. This is also applied to the `--numstat` and `--name-status` calls used for the structured summary so file counts and line totals stay consistent with the diff text. Useful for Salesforce metadata XML where formatting churn is common. Defaults to false.
|
|
112
|
+
|
|
113
|
+
# flags.strip-diff-preamble.summary
|
|
114
|
+
|
|
115
|
+
Strip low-value `diff --git`/`index`/`mode`/`similarity`/`rename`/`copy` lines from the unified diff.
|
|
116
|
+
|
|
117
|
+
# flags.strip-diff-preamble.description
|
|
118
|
+
|
|
119
|
+
When set, removes the per-file git diff preamble lines that contain almost no semantic information (`diff --git`, `index`, `new file mode`, `deleted file mode`, `old mode`, `new mode`, `similarity index`, `dissimilarity index`, `rename from`/`rename to`, `copy from`/`copy to`). The `--- a/…`, `+++ b/…`, and `@@` hunk headers are preserved so the model can still attribute changes to files. Defaults to false.
|
|
120
|
+
|
|
121
|
+
# flags.max-hunk-lines.summary
|
|
122
|
+
|
|
123
|
+
Cap the body of each diff hunk; anything past the limit is elided.
|
|
124
|
+
|
|
125
|
+
# flags.max-hunk-lines.description
|
|
126
|
+
|
|
127
|
+
Limits the number of body lines retained per `@@` hunk in the unified diff. Lines past the limit are replaced with a single elision marker so the `@@` header and the structured diff summary totals are preserved. Use this to prevent a single massive hunk (for example a regenerated metadata file) from dominating the LLM prompt. Allowed range is 1 through 100000 when set. When omitted, hunks are not truncated.
|
|
128
|
+
|
|
129
|
+
# flags.exclude-default-noise.summary
|
|
130
|
+
|
|
131
|
+
Merge smart-diff's built-in "noise" exclude list into the excluded paths.
|
|
132
|
+
|
|
133
|
+
# flags.exclude-default-noise.description
|
|
134
|
+
|
|
135
|
+
When set, the plugin merges smart-diff's `DEFAULT_NOISE_EXCLUDES` list (lockfiles, `dist`, `build`, `out`, `coverage`, `node_modules`, `__snapshots__`) into the set of excluded pathspecs passed to git. This is additive with any `--exclude-package-directory` values you provide. Defaults to false, because Salesforce DX repos rarely contain these folders inside package directories; enable it if your repo does.
|
|
136
|
+
|
|
97
137
|
# examples
|
|
98
138
|
|
|
99
139
|
- <%= config.bin %> <%= command.id %> --from HEAD~5 --to HEAD --commit-message-include "(feature|fix)" --output changes.md
|
|
100
140
|
- <%= 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
|
|
101
141
|
- <%= config.bin %> <%= command.id %> --team "Revenue Cloud" --from release/cut --to HEAD
|
|
102
142
|
- <%= config.bin %> <%= command.id %> --from abc1234 --to HEAD
|
|
143
|
+
- <%= config.bin %> <%= command.id %> --from HEAD~5 --to HEAD --ignore-whitespace --context-lines 1 --strip-diff-preamble --max-hunk-lines 400
|
package/oclif.manifest.json
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
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",
|
|
10
10
|
"<%= config.bin %> <%= command.id %> --team \"Revenue Cloud\" --from release/cut --to HEAD",
|
|
11
|
-
"<%= config.bin %> <%= command.id %> --from abc1234 --to HEAD"
|
|
11
|
+
"<%= config.bin %> <%= command.id %> --from abc1234 --to HEAD",
|
|
12
|
+
"<%= config.bin %> <%= command.id %> --from HEAD~5 --to HEAD --ignore-whitespace --context-lines 1 --strip-diff-preamble --max-hunk-lines 400"
|
|
12
13
|
],
|
|
13
14
|
"flags": {
|
|
14
15
|
"json": {
|
|
@@ -123,6 +124,48 @@
|
|
|
123
124
|
"hasDynamicHelp": false,
|
|
124
125
|
"multiple": false,
|
|
125
126
|
"type": "option"
|
|
127
|
+
},
|
|
128
|
+
"context-lines": {
|
|
129
|
+
"description": "Sets `git diff -U<n>` when building the unified diff sent to the model. Lower values (1 or 0) are typically the single biggest token saver on modification-heavy diffs because they drop unchanged surrounding lines from each hunk. The structured diff summary (file counts and line totals) still reflects the full change. Allowed range is 0 through 1000 when set. When omitted, git's default (3) is used.",
|
|
130
|
+
"name": "context-lines",
|
|
131
|
+
"required": false,
|
|
132
|
+
"summary": "Number of context lines around each change in the unified diff.",
|
|
133
|
+
"hasDynamicHelp": false,
|
|
134
|
+
"multiple": false,
|
|
135
|
+
"type": "option"
|
|
136
|
+
},
|
|
137
|
+
"ignore-whitespace": {
|
|
138
|
+
"description": "Passes `-w` / `--ignore-all-space` to `git diff` so pure-whitespace hunks don't consume tokens in the unified diff. This is also applied to the `--numstat` and `--name-status` calls used for the structured summary so file counts and line totals stay consistent with the diff text. Useful for Salesforce metadata XML where formatting churn is common. Defaults to false.",
|
|
139
|
+
"name": "ignore-whitespace",
|
|
140
|
+
"required": false,
|
|
141
|
+
"summary": "Ignore whitespace-only changes when building the diff.",
|
|
142
|
+
"allowNo": false,
|
|
143
|
+
"type": "boolean"
|
|
144
|
+
},
|
|
145
|
+
"strip-diff-preamble": {
|
|
146
|
+
"description": "When set, removes the per-file git diff preamble lines that contain almost no semantic information (`diff --git`, `index`, `new file mode`, `deleted file mode`, `old mode`, `new mode`, `similarity index`, `dissimilarity index`, `rename from`/`rename to`, `copy from`/`copy to`). The `--- a/…`, `+++ b/…`, and `@@` hunk headers are preserved so the model can still attribute changes to files. Defaults to false.",
|
|
147
|
+
"name": "strip-diff-preamble",
|
|
148
|
+
"required": false,
|
|
149
|
+
"summary": "Strip low-value `diff --git`/`index`/`mode`/`similarity`/`rename`/`copy` lines from the unified diff.",
|
|
150
|
+
"allowNo": false,
|
|
151
|
+
"type": "boolean"
|
|
152
|
+
},
|
|
153
|
+
"max-hunk-lines": {
|
|
154
|
+
"description": "Limits the number of body lines retained per `@@` hunk in the unified diff. Lines past the limit are replaced with a single elision marker so the `@@` header and the structured diff summary totals are preserved. Use this to prevent a single massive hunk (for example a regenerated metadata file) from dominating the LLM prompt. Allowed range is 1 through 100000 when set. When omitted, hunks are not truncated.",
|
|
155
|
+
"name": "max-hunk-lines",
|
|
156
|
+
"required": false,
|
|
157
|
+
"summary": "Cap the body of each diff hunk; anything past the limit is elided.",
|
|
158
|
+
"hasDynamicHelp": false,
|
|
159
|
+
"multiple": false,
|
|
160
|
+
"type": "option"
|
|
161
|
+
},
|
|
162
|
+
"exclude-default-noise": {
|
|
163
|
+
"description": "When set, the plugin merges smart-diff's `DEFAULT_NOISE_EXCLUDES` list (lockfiles, `dist`, `build`, `out`, `coverage`, `node_modules`, `__snapshots__`) into the set of excluded pathspecs passed to git. This is additive with any `--exclude-package-directory` values you provide. Defaults to false, because Salesforce DX repos rarely contain these folders inside package directories; enable it if your repo does.",
|
|
164
|
+
"name": "exclude-default-noise",
|
|
165
|
+
"required": false,
|
|
166
|
+
"summary": "Merge smart-diff's built-in \"noise\" exclude list into the excluded paths.",
|
|
167
|
+
"allowNo": false,
|
|
168
|
+
"type": "boolean"
|
|
126
169
|
}
|
|
127
170
|
},
|
|
128
171
|
"hasDynamicHelp": false,
|
|
@@ -153,5 +196,5 @@
|
|
|
153
196
|
]
|
|
154
197
|
}
|
|
155
198
|
},
|
|
156
|
-
"version": "2.
|
|
199
|
+
"version": "2.4.0"
|
|
157
200
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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.
|
|
4
|
+
"version": "2.4.0",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@ai-sdk/amazon-bedrock": "^4.0.96",
|
|
7
7
|
"@ai-sdk/anthropic": "^3.0.71",
|
|
@@ -11,29 +11,29 @@
|
|
|
11
11
|
"@ai-sdk/groq": "^3.0.35",
|
|
12
12
|
"@ai-sdk/mistral": "^3.0.30",
|
|
13
13
|
"@ai-sdk/xai": "^3.0.83",
|
|
14
|
-
"@mcarvin/smart-diff": "^2.
|
|
14
|
+
"@mcarvin/smart-diff": "^2.1.0",
|
|
15
15
|
"@oclif/core": "^4",
|
|
16
16
|
"@salesforce/core": "^8",
|
|
17
17
|
"@salesforce/sf-plugins-core": "^12",
|
|
18
18
|
"zod": "^4.1.8"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@
|
|
21
|
+
"@commitlint/config-conventional": "^20.5.0",
|
|
22
22
|
"@oclif/plugin-command-snapshot": "^5.3.15",
|
|
23
23
|
"@salesforce/cli-plugins-testkit": "^5.3.52",
|
|
24
|
-
"@salesforce/dev-
|
|
25
|
-
"@
|
|
26
|
-
"@types/mocha": "^10.0.10",
|
|
24
|
+
"@salesforce/dev-config": "^4.3.3",
|
|
25
|
+
"@salesforce/prettier-config": "^0.0.4",
|
|
27
26
|
"@types/node": "^20.11.0",
|
|
27
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
28
|
+
"eslint-config-salesforce-typescript": "^4.0.1",
|
|
28
29
|
"eslint-plugin-sf-plugin": "^1.18.6",
|
|
29
30
|
"husky": "^9.1.7",
|
|
30
|
-
"jest": "^29.7.0",
|
|
31
|
-
"mocha": "^11.7.5",
|
|
32
31
|
"oclif": "^4.23.0",
|
|
33
32
|
"shx": "^0.4.0",
|
|
34
|
-
"ts-jest": "^29.1.0",
|
|
35
33
|
"ts-node": "^10.9.2",
|
|
36
|
-
"typescript": "^5.9.3"
|
|
34
|
+
"typescript": "^5.9.3",
|
|
35
|
+
"vitest": "^4.1.5",
|
|
36
|
+
"wireit": "^0.14.12"
|
|
37
37
|
},
|
|
38
38
|
"engines": {
|
|
39
39
|
"node": ">=20.0.0"
|
|
@@ -83,19 +83,16 @@
|
|
|
83
83
|
},
|
|
84
84
|
"scripts": {
|
|
85
85
|
"command-docs": "oclif readme",
|
|
86
|
-
"build": "
|
|
87
|
-
"clean": "sf-clean",
|
|
88
|
-
"clean-all": "sf-clean all",
|
|
86
|
+
"build": "wireit",
|
|
89
87
|
"clean:lib": "shx rm -rf lib && shx rm -rf coverage && shx rm -rf .nyc_output && shx rm -f oclif.manifest.json oclif.lock",
|
|
90
88
|
"compile": "wireit",
|
|
91
|
-
"
|
|
92
|
-
"format": "sf-format",
|
|
89
|
+
"format": "wireit",
|
|
93
90
|
"lint": "wireit",
|
|
94
91
|
"postpack": "shx rm -f oclif.manifest.json oclif.lock",
|
|
95
|
-
"prepack": "
|
|
92
|
+
"prepack": "wireit",
|
|
96
93
|
"prepare": "husky install",
|
|
97
94
|
"test": "wireit",
|
|
98
|
-
"test:nuts": "oclif manifest &&
|
|
95
|
+
"test:nuts": "oclif manifest && vitest run --config ./vitest.nut.config.ts",
|
|
99
96
|
"test:only": "wireit",
|
|
100
97
|
"version": "oclif readme"
|
|
101
98
|
},
|
|
@@ -144,6 +141,21 @@
|
|
|
144
141
|
],
|
|
145
142
|
"output": []
|
|
146
143
|
},
|
|
144
|
+
"prepack": {
|
|
145
|
+
"command": "oclif manifest && oclif readme",
|
|
146
|
+
"files": [
|
|
147
|
+
"src/commands/sgai/metadata/summarize.ts",
|
|
148
|
+
"messages/sgai.metadata.summarize.md",
|
|
149
|
+
"README.md"
|
|
150
|
+
],
|
|
151
|
+
"dependencies": [
|
|
152
|
+
"build"
|
|
153
|
+
],
|
|
154
|
+
"output": [
|
|
155
|
+
"README.md"
|
|
156
|
+
],
|
|
157
|
+
"clean": false
|
|
158
|
+
},
|
|
147
159
|
"test:compile": {
|
|
148
160
|
"command": "tsc -p \"./test\" --pretty",
|
|
149
161
|
"files": [
|
|
@@ -160,7 +172,7 @@
|
|
|
160
172
|
]
|
|
161
173
|
},
|
|
162
174
|
"test:only": {
|
|
163
|
-
"command": "
|
|
175
|
+
"command": "vitest run --coverage",
|
|
164
176
|
"env": {
|
|
165
177
|
"FORCE_COLOR": "2",
|
|
166
178
|
"NODE_OPTIONS": "--experimental-vm-modules"
|
|
@@ -169,9 +181,8 @@
|
|
|
169
181
|
"test/**/*.ts",
|
|
170
182
|
"src/**/*.ts",
|
|
171
183
|
"**/tsconfig.json",
|
|
172
|
-
".mocha*",
|
|
173
184
|
"!*.nut.ts",
|
|
174
|
-
".
|
|
185
|
+
"vitest.config.ts"
|
|
175
186
|
],
|
|
176
187
|
"output": []
|
|
177
188
|
},
|