@mmnto/cli 1.15.10 → 1.16.1
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/dist/commands/recurrence-stats.d.ts +19 -0
- package/dist/commands/recurrence-stats.d.ts.map +1 -0
- package/dist/commands/recurrence-stats.js +412 -0
- package/dist/commands/recurrence-stats.js.map +1 -0
- package/dist/commands/recurrence-stats.test.d.ts +2 -0
- package/dist/commands/recurrence-stats.test.d.ts.map +1 -0
- package/dist/commands/recurrence-stats.test.js +379 -0
- package/dist/commands/recurrence-stats.test.js.map +1 -0
- package/dist/commands/shield-estimate.d.ts +24 -0
- package/dist/commands/shield-estimate.d.ts.map +1 -0
- package/dist/commands/shield-estimate.js +55 -0
- package/dist/commands/shield-estimate.js.map +1 -0
- package/dist/commands/shield-estimate.test.d.ts +2 -0
- package/dist/commands/shield-estimate.test.d.ts.map +1 -0
- package/dist/commands/shield-estimate.test.js +309 -0
- package/dist/commands/shield-estimate.test.js.map +1 -0
- package/dist/commands/shield-templates.d.ts +9 -0
- package/dist/commands/shield-templates.d.ts.map +1 -1
- package/dist/commands/shield-templates.js +9 -0
- package/dist/commands/shield-templates.js.map +1 -1
- package/dist/commands/shield.d.ts +13 -0
- package/dist/commands/shield.d.ts.map +1 -1
- package/dist/commands/shield.js +33 -0
- package/dist/commands/shield.js.map +1 -1
- package/dist/commands/stats.d.ts +7 -1
- package/dist/commands/stats.d.ts.map +1 -1
- package/dist/commands/stats.js +10 -1
- package/dist/commands/stats.js.map +1 -1
- package/dist/index.js +39 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
6
|
+
import { cleanTmpDir } from '../test-utils.js';
|
|
7
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
// ─── Mocks ──────────────────────────────────────────────
|
|
9
|
+
//
|
|
10
|
+
// `shield-estimate.ts` lazy-imports `../git.js`, `./run-compiled-rules.js`,
|
|
11
|
+
// and `../ui.js` per the dynamic-imports-in-CLI policy (CR R1 on
|
|
12
|
+
// `mmnto-ai/totem#1729`). vi.mock is hoisted, so these stubs are in place
|
|
13
|
+
// before runEstimate's dynamic imports resolve.
|
|
14
|
+
vi.mock('../git.js', async () => {
|
|
15
|
+
const actual = await vi.importActual('../git.js');
|
|
16
|
+
return {
|
|
17
|
+
...actual,
|
|
18
|
+
getDiffForReview: vi.fn(),
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
vi.mock('./run-compiled-rules.js', () => ({
|
|
22
|
+
runCompiledRules: vi.fn(),
|
|
23
|
+
}));
|
|
24
|
+
vi.mock('../ui.js', () => ({
|
|
25
|
+
log: {
|
|
26
|
+
info: vi.fn(),
|
|
27
|
+
success: vi.fn(),
|
|
28
|
+
warn: vi.fn(),
|
|
29
|
+
error: vi.fn(),
|
|
30
|
+
dim: vi.fn(),
|
|
31
|
+
},
|
|
32
|
+
}));
|
|
33
|
+
// Stub config loading so the second describe block (which exercises
|
|
34
|
+
// shieldCommand directly) can run without scaffolding a real
|
|
35
|
+
// totem.config.ts on disk. Same shape as `lint.test.ts`.
|
|
36
|
+
vi.mock('../utils.js', async () => {
|
|
37
|
+
const actual = await vi.importActual('../utils.js');
|
|
38
|
+
return {
|
|
39
|
+
...actual,
|
|
40
|
+
resolveConfigPath: (cwd) => path.join(cwd, 'totem.config.ts'),
|
|
41
|
+
loadConfig: async () => ({
|
|
42
|
+
targets: [],
|
|
43
|
+
totemDir: '.totem',
|
|
44
|
+
ignorePatterns: [],
|
|
45
|
+
}),
|
|
46
|
+
loadEnv: () => { },
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
const gitModule = await import('../git.js');
|
|
50
|
+
const rcrModule = await import('./run-compiled-rules.js');
|
|
51
|
+
const uiModule = await import('../ui.js');
|
|
52
|
+
const mockGetDiffForReview = vi.mocked(gitModule.getDiffForReview);
|
|
53
|
+
const mockRunCompiledRules = vi.mocked(rcrModule.runCompiledRules);
|
|
54
|
+
const mockLog = vi.mocked(uiModule.log);
|
|
55
|
+
// ─── Helpers ────────────────────────────────────────────
|
|
56
|
+
function makeConfig() {
|
|
57
|
+
// Minimal TotemConfig surface that runEstimate touches: totemDir +
|
|
58
|
+
// ignorePatterns. The real schema has more fields but they are not
|
|
59
|
+
// read on the estimate path.
|
|
60
|
+
return {
|
|
61
|
+
totemDir: '.totem',
|
|
62
|
+
ignorePatterns: ['package-lock.json', '*.snap'],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const SAMPLE_DIFF = 'diff --git a/foo.ts b/foo.ts\n--- a/foo.ts\n+++ b/foo.ts\n@@ -1 +1,2 @@\n existing\n+new line\n';
|
|
66
|
+
function diffResult(overrides = {}) {
|
|
67
|
+
return {
|
|
68
|
+
diff: SAMPLE_DIFF,
|
|
69
|
+
changedFiles: ['foo.ts'],
|
|
70
|
+
source: 'uncommitted',
|
|
71
|
+
...overrides,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function runCompiledRulesPassResult() {
|
|
75
|
+
return {
|
|
76
|
+
violations: [],
|
|
77
|
+
rules: [],
|
|
78
|
+
output: 'PASS',
|
|
79
|
+
findings: [],
|
|
80
|
+
regexTimeouts: [],
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// ─── Tests ──────────────────────────────────────────────
|
|
84
|
+
describe('runEstimate', () => {
|
|
85
|
+
let tmpDir;
|
|
86
|
+
let originalCwd;
|
|
87
|
+
beforeEach(() => {
|
|
88
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-estimate-'));
|
|
89
|
+
originalCwd = process.cwd();
|
|
90
|
+
mockGetDiffForReview.mockReset();
|
|
91
|
+
mockRunCompiledRules.mockReset();
|
|
92
|
+
for (const fn of Object.values(mockLog)) {
|
|
93
|
+
fn.mockReset();
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
afterEach(() => {
|
|
97
|
+
process.chdir(originalCwd);
|
|
98
|
+
cleanTmpDir(tmpDir);
|
|
99
|
+
});
|
|
100
|
+
// ─── Empty-diff branch ────────────────────────────
|
|
101
|
+
it('returns clean and skips runCompiledRules when getDiffForReview returns null', async () => {
|
|
102
|
+
mockGetDiffForReview.mockResolvedValue(null);
|
|
103
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
104
|
+
await expect(runEstimate({ estimate: true }, makeConfig(), tmpDir, tmpDir)).resolves.toBeUndefined();
|
|
105
|
+
expect(mockRunCompiledRules).not.toHaveBeenCalled();
|
|
106
|
+
// Empty-diff branch logs the "No changes detected" line under the
|
|
107
|
+
// Estimate tag — never under Review.
|
|
108
|
+
const noChangesCall = mockLog.info.mock.calls.find((c) => String(c[1]).includes('No changes detected. Nothing to estimate.'));
|
|
109
|
+
expect(noChangesCall).toBeDefined();
|
|
110
|
+
expect(noChangesCall[0]).toBe('Estimate');
|
|
111
|
+
});
|
|
112
|
+
// ─── Tag invariant ────────────────────────────────
|
|
113
|
+
it('passes the Estimate tag (never Review) to getDiffForReview and runCompiledRules', async () => {
|
|
114
|
+
mockGetDiffForReview.mockResolvedValue(diffResult());
|
|
115
|
+
mockRunCompiledRules.mockResolvedValue(runCompiledRulesPassResult());
|
|
116
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
117
|
+
await runEstimate({ estimate: true }, makeConfig(), tmpDir, tmpDir);
|
|
118
|
+
// getDiffForReview's 4th arg is the tag.
|
|
119
|
+
expect(mockGetDiffForReview).toHaveBeenCalledTimes(1);
|
|
120
|
+
expect(mockGetDiffForReview.mock.calls[0][3]).toBe('Estimate');
|
|
121
|
+
// runCompiledRules.tag must be Estimate.
|
|
122
|
+
expect(mockRunCompiledRules).toHaveBeenCalledTimes(1);
|
|
123
|
+
const rcrArgs = mockRunCompiledRules.mock.calls[0][0];
|
|
124
|
+
expect(rcrArgs.tag).toBe('Estimate');
|
|
125
|
+
// No log line on the estimate path may use the Review tag.
|
|
126
|
+
for (const call of mockLog.info.mock.calls) {
|
|
127
|
+
expect(call[0]).not.toBe('Review');
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
it('emits a [Estimate] preamble before delegating to getDiffForReview', async () => {
|
|
131
|
+
mockGetDiffForReview.mockResolvedValue(diffResult());
|
|
132
|
+
mockRunCompiledRules.mockResolvedValue(runCompiledRulesPassResult());
|
|
133
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
134
|
+
await runEstimate({ estimate: true }, makeConfig(), tmpDir, tmpDir);
|
|
135
|
+
const preambleCall = mockLog.info.mock.calls.find((c) => String(c[1]).includes('Pre-flight prediction'));
|
|
136
|
+
expect(preambleCall).toBeDefined();
|
|
137
|
+
expect(preambleCall[0]).toBe('Estimate');
|
|
138
|
+
});
|
|
139
|
+
// ─── Diff pass-through ────────────────────────────
|
|
140
|
+
it('forwards the diff returned by getDiffForReview unchanged to runCompiledRules', async () => {
|
|
141
|
+
mockGetDiffForReview.mockResolvedValue(diffResult());
|
|
142
|
+
mockRunCompiledRules.mockResolvedValue(runCompiledRulesPassResult());
|
|
143
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
144
|
+
await runEstimate({ estimate: true }, makeConfig(), tmpDir, tmpDir);
|
|
145
|
+
const rcrArgs = mockRunCompiledRules.mock.calls[0][0];
|
|
146
|
+
expect(rcrArgs.diff).toBe(SAMPLE_DIFF);
|
|
147
|
+
});
|
|
148
|
+
it('forwards ignorePatterns from config into runCompiledRules', async () => {
|
|
149
|
+
mockGetDiffForReview.mockResolvedValue(diffResult());
|
|
150
|
+
mockRunCompiledRules.mockResolvedValue(runCompiledRulesPassResult());
|
|
151
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
152
|
+
await runEstimate({ estimate: true }, makeConfig(), tmpDir, tmpDir);
|
|
153
|
+
const rcrArgs = mockRunCompiledRules.mock.calls[0][0];
|
|
154
|
+
expect(rcrArgs.ignorePatterns).toEqual(['package-lock.json', '*.snap']);
|
|
155
|
+
});
|
|
156
|
+
it('forwards configRoot, totemDir, and isStaged into runCompiledRules', async () => {
|
|
157
|
+
mockGetDiffForReview.mockResolvedValue(diffResult({ source: 'staged' }));
|
|
158
|
+
mockRunCompiledRules.mockResolvedValue(runCompiledRulesPassResult());
|
|
159
|
+
const configRoot = path.join(tmpDir, 'sub-root');
|
|
160
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
161
|
+
await runEstimate({ estimate: true, staged: true }, makeConfig(), tmpDir, configRoot);
|
|
162
|
+
const rcrArgs = mockRunCompiledRules.mock.calls[0][0];
|
|
163
|
+
expect(rcrArgs.configRoot).toBe(configRoot);
|
|
164
|
+
expect(rcrArgs.totemDir).toBe('.totem');
|
|
165
|
+
expect(rcrArgs.isStaged).toBe(true);
|
|
166
|
+
});
|
|
167
|
+
// mmnto-ai/totem#1732 CR R2 — `--diff` outranks `--staged` in
|
|
168
|
+
// `getDiffForReview`. `isStaged` must follow the resolved
|
|
169
|
+
// `DiffForReviewSource`, not the raw CLI flag, so the staged-index
|
|
170
|
+
// read strategy only kicks in for genuinely staged runs.
|
|
171
|
+
it('derives isStaged from diffResult.source, not options.staged, when both --diff and --staged are passed', async () => {
|
|
172
|
+
mockGetDiffForReview.mockResolvedValue(diffResult({ source: 'explicit-range' }));
|
|
173
|
+
mockRunCompiledRules.mockResolvedValue(runCompiledRulesPassResult());
|
|
174
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
175
|
+
await runEstimate({ estimate: true, staged: true, diff: 'main...HEAD' }, makeConfig(), tmpDir, tmpDir);
|
|
176
|
+
const rcrArgs = mockRunCompiledRules.mock.calls[0][0];
|
|
177
|
+
expect(rcrArgs.isStaged).toBe(false);
|
|
178
|
+
});
|
|
179
|
+
it.each([
|
|
180
|
+
['uncommitted', false],
|
|
181
|
+
['branch-vs-base', false],
|
|
182
|
+
['explicit-range', false],
|
|
183
|
+
['staged', true],
|
|
184
|
+
])('isStaged is true iff resolved source is "staged" (source=%s → isStaged=%s)', async (source, expected) => {
|
|
185
|
+
mockGetDiffForReview.mockResolvedValue(diffResult({ source }));
|
|
186
|
+
mockRunCompiledRules.mockResolvedValue(runCompiledRulesPassResult());
|
|
187
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
188
|
+
await runEstimate({ estimate: true }, makeConfig(), tmpDir, tmpDir);
|
|
189
|
+
const rcrArgs = mockRunCompiledRules.mock.calls[0][0];
|
|
190
|
+
expect(rcrArgs.isStaged).toBe(expected);
|
|
191
|
+
});
|
|
192
|
+
it('forwards options.out as outPath into runCompiledRules', async () => {
|
|
193
|
+
mockGetDiffForReview.mockResolvedValue(diffResult());
|
|
194
|
+
mockRunCompiledRules.mockResolvedValue(runCompiledRulesPassResult());
|
|
195
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
196
|
+
await runEstimate({ estimate: true, out: 'estimate.txt' }, makeConfig(), tmpDir, tmpDir);
|
|
197
|
+
const rcrArgs = mockRunCompiledRules.mock.calls[0][0];
|
|
198
|
+
expect(rcrArgs.outPath).toBe('estimate.txt');
|
|
199
|
+
// Format is always 'text' on the estimate path — SARIF/JSON are
|
|
200
|
+
// lint's territory and `runReview` already rejects --format.
|
|
201
|
+
expect(rcrArgs.format).toBe('text');
|
|
202
|
+
});
|
|
203
|
+
// ─── Diff-source resolution branches ──────────────
|
|
204
|
+
it.each([
|
|
205
|
+
['explicit-range', { estimate: true, diff: 'HEAD^..HEAD' }],
|
|
206
|
+
['staged', { estimate: true, staged: true }],
|
|
207
|
+
['uncommitted', { estimate: true }],
|
|
208
|
+
['branch-vs-base', { estimate: true }],
|
|
209
|
+
])('honors getDiffForReview source resolution for %s', async (source, options) => {
|
|
210
|
+
mockGetDiffForReview.mockResolvedValue(diffResult({ source }));
|
|
211
|
+
mockRunCompiledRules.mockResolvedValue(runCompiledRulesPassResult());
|
|
212
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
213
|
+
await runEstimate(options, makeConfig(), tmpDir, tmpDir);
|
|
214
|
+
// Whatever source getDiffForReview chose, the diff is the one
|
|
215
|
+
// passed to runCompiledRules.
|
|
216
|
+
expect(mockRunCompiledRules.mock.calls[0][0].diff).toBe(SAMPLE_DIFF);
|
|
217
|
+
// And the options object is forwarded to getDiffForReview so it
|
|
218
|
+
// can do its own implicit-source label logging.
|
|
219
|
+
expect(mockGetDiffForReview).toHaveBeenCalledWith(options, expect.any(Object), tmpDir, 'Estimate');
|
|
220
|
+
});
|
|
221
|
+
// ─── Exit code parity with lint ───────────────────
|
|
222
|
+
it('lets SHIELD_FAILED from runCompiledRules propagate (matches lint exit semantics)', async () => {
|
|
223
|
+
mockGetDiffForReview.mockResolvedValue(diffResult());
|
|
224
|
+
const { TotemError } = await import('@mmnto/totem');
|
|
225
|
+
mockRunCompiledRules.mockRejectedValue(new TotemError('SHIELD_FAILED', 'Violations detected', 'Fix the violations above.'));
|
|
226
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
227
|
+
await expect(runEstimate({ estimate: true }, makeConfig(), tmpDir, tmpDir)).rejects.toMatchObject({ code: 'SHIELD_FAILED' });
|
|
228
|
+
});
|
|
229
|
+
it('completes without throwing on a clean pass (zero violations)', async () => {
|
|
230
|
+
mockGetDiffForReview.mockResolvedValue(diffResult());
|
|
231
|
+
mockRunCompiledRules.mockResolvedValue(runCompiledRulesPassResult());
|
|
232
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
233
|
+
await expect(runEstimate({ estimate: true }, makeConfig(), tmpDir, tmpDir)).resolves.toBeUndefined();
|
|
234
|
+
});
|
|
235
|
+
// ─── No-LLM invariant ─────────────────────────────
|
|
236
|
+
it('never imports the orchestrator or embedding modules from shield-estimate.ts', async () => {
|
|
237
|
+
// Static-source check: a regex-grep over the on-disk shield-estimate
|
|
238
|
+
// source asserts no LLM-path import exists. This catches a future
|
|
239
|
+
// drift where someone adds `runOrchestrator` or `requireEmbedding`
|
|
240
|
+
// to the estimator without going through code review. Pairs with
|
|
241
|
+
// the runtime tag-invariant tests above.
|
|
242
|
+
const estimatePath = path.join(__dirname, 'shield-estimate.ts');
|
|
243
|
+
const source = fs.readFileSync(estimatePath, 'utf-8');
|
|
244
|
+
// Forbidden symbols anywhere in the file — including `import`,
|
|
245
|
+
// re-exports, or string references. shield-templates.ts is a pure
|
|
246
|
+
// constants module so importing ESTIMATE_DISPLAY_TAG from it is
|
|
247
|
+
// safe; the ban is on the LLM/embedding/Lance surfaces.
|
|
248
|
+
expect(source).not.toMatch(/runOrchestrator/);
|
|
249
|
+
expect(source).not.toMatch(/requireEmbedding/);
|
|
250
|
+
expect(source).not.toMatch(/LanceStore/);
|
|
251
|
+
expect(source).not.toMatch(/createEmbedder/);
|
|
252
|
+
// ../utils.js exposes both runOrchestrator and orchestrator
|
|
253
|
+
// helpers; importing it would silently widen the surface even if
|
|
254
|
+
// none of those symbols are referenced. Block the import path
|
|
255
|
+
// outright.
|
|
256
|
+
expect(source).not.toMatch(/from ['"]\.\.\/utils\.js['"]/);
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
// ─── Incompatibility table — driven through shieldCommand ─
|
|
260
|
+
describe('shieldCommand --estimate incompatibility guard', () => {
|
|
261
|
+
let tmpDir;
|
|
262
|
+
let originalCwd;
|
|
263
|
+
beforeEach(() => {
|
|
264
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'totem-est-incompat-'));
|
|
265
|
+
originalCwd = process.cwd();
|
|
266
|
+
process.chdir(tmpDir);
|
|
267
|
+
fs.writeFileSync(path.join(tmpDir, 'totem.config.ts'), 'export default {};', 'utf-8');
|
|
268
|
+
mockGetDiffForReview.mockReset();
|
|
269
|
+
mockRunCompiledRules.mockReset();
|
|
270
|
+
});
|
|
271
|
+
afterEach(() => {
|
|
272
|
+
process.chdir(originalCwd);
|
|
273
|
+
cleanTmpDir(tmpDir);
|
|
274
|
+
vi.restoreAllMocks();
|
|
275
|
+
});
|
|
276
|
+
it.each([
|
|
277
|
+
['learn', { learn: true }, '--learn'],
|
|
278
|
+
['autoCapture', { autoCapture: true }, '--auto-capture'],
|
|
279
|
+
['override', { override: 'this is a long enough reason' }, '--override'],
|
|
280
|
+
['suppress', { suppress: ['some-label'] }, '--suppress'],
|
|
281
|
+
['fresh', { fresh: true }, '--fresh'],
|
|
282
|
+
['mode-standard', { mode: 'standard' }, '--mode'],
|
|
283
|
+
['mode-structural', { mode: 'structural' }, '--mode'],
|
|
284
|
+
['raw', { raw: true }, '--raw'],
|
|
285
|
+
])('throws CONFIG_INVALID when --estimate is combined with %s', async (_name, extra, expectedFlag) => {
|
|
286
|
+
const { shieldCommand } = await import('./shield.js');
|
|
287
|
+
const { TotemConfigError } = await import('@mmnto/totem');
|
|
288
|
+
const promise = shieldCommand({ estimate: true, ...extra });
|
|
289
|
+
await expect(promise).rejects.toBeInstanceOf(TotemConfigError);
|
|
290
|
+
await expect(promise).rejects.toMatchObject({ code: 'CONFIG_INVALID' });
|
|
291
|
+
await expect(promise).rejects.toThrow(new RegExp(`${expectedFlag.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')} is incompatible with --estimate`));
|
|
292
|
+
});
|
|
293
|
+
it('does NOT trip the --override length check when --estimate is set', async () => {
|
|
294
|
+
// Without --estimate, a 5-char --override would throw "must be at
|
|
295
|
+
// least 10 characters". With --estimate, the incompatibility guard
|
|
296
|
+
// fires first and the error names the actual conflict.
|
|
297
|
+
const { shieldCommand } = await import('./shield.js');
|
|
298
|
+
await expect(shieldCommand({ estimate: true, override: 'short' })).rejects.toThrow(/--override is incompatible with --estimate/);
|
|
299
|
+
});
|
|
300
|
+
it('treats an empty --suppress array as compatible (commander accumulator default)', async () => {
|
|
301
|
+
// Commander seeds --suppress with `[]`. An empty array MUST NOT
|
|
302
|
+
// trigger the incompatibility error — only a non-empty array
|
|
303
|
+
// counts as the user actually passing --suppress.
|
|
304
|
+
mockGetDiffForReview.mockResolvedValue(null);
|
|
305
|
+
const { shieldCommand } = await import('./shield.js');
|
|
306
|
+
await expect(shieldCommand({ estimate: true, suppress: [] })).resolves.toBeUndefined();
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
//# sourceMappingURL=shield-estimate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shield-estimate.test.js","sourceRoot":"","sources":["../../src/commands/shield-estimate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,15 @@ export declare const TAG = "Shield";
|
|
|
32
32
|
* config-key lookup (e.g. `runOrchestrator({ tag: TAG })`).
|
|
33
33
|
*/
|
|
34
34
|
export declare const DISPLAY_TAG = "Review";
|
|
35
|
+
/**
|
|
36
|
+
* User-visible log prefix for the `totem review --estimate` pre-flight
|
|
37
|
+
* deterministic-rule run (mmnto-ai/totem#1714). Distinct from
|
|
38
|
+
* `DISPLAY_TAG` so estimator output is unmistakably labeled as a
|
|
39
|
+
* forecast rather than a final LLM verdict. Every `log.info` /
|
|
40
|
+
* `log.dim` / `log.warn` call emitted from the estimate code path
|
|
41
|
+
* (`shield-estimate.ts`) MUST use this constant, never `DISPLAY_TAG`.
|
|
42
|
+
*/
|
|
43
|
+
export declare const ESTIMATE_DISPLAY_TAG = "Estimate";
|
|
35
44
|
export declare const MAX_DIFF_CHARS = 50000;
|
|
36
45
|
export declare const QUERY_DIFF_TRUNCATE = 2000;
|
|
37
46
|
export declare const SPEC_SEARCH_POOL = 15;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shield-templates.d.ts","sourceRoot":"","sources":["../../src/commands/shield-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,GAAG,WAAW,CAAC;AAE5B;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"shield-templates.d.ts","sourceRoot":"","sources":["../../src/commands/shield-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,GAAG,WAAW,CAAC;AAE5B;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,aAAa,CAAC;AAE/C,eAAO,MAAM,cAAc,QAAS,CAAC;AACrC,eAAO,MAAM,mBAAmB,OAAQ,CAAC;AACzC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAC7C,eAAO,MAAM,cAAc,MAAM,CAAC;AAIlC,eAAO,MAAM,2BAA2B,yCAAuC,CAAC;AAChF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EAM9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGxC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAIpF,eAAO,MAAM,aAAa,g6EAqCzB,CAAC;AAEF,OAAO,EAAE,aAAa,IAAI,oBAAoB,EAAE,CAAC;AAIjD,eAAO,MAAM,gBAAgB,6vFA+C5B,CAAC;AAIF,eAAO,MAAM,wBAAwB,kuFAqCpC,CAAC;AAIF,eAAO,MAAM,2BAA2B,mhIA2DvC,CAAC;AAIF,eAAO,MAAM,0BAA0B,0yCA6BtC,CAAC;AAOF,eAAO,MAAM,UAAU,QAC4E,CAAC"}
|
|
@@ -33,6 +33,15 @@ export const TAG = 'Shield';
|
|
|
33
33
|
* config-key lookup (e.g. `runOrchestrator({ tag: TAG })`).
|
|
34
34
|
*/
|
|
35
35
|
export const DISPLAY_TAG = 'Review';
|
|
36
|
+
/**
|
|
37
|
+
* User-visible log prefix for the `totem review --estimate` pre-flight
|
|
38
|
+
* deterministic-rule run (mmnto-ai/totem#1714). Distinct from
|
|
39
|
+
* `DISPLAY_TAG` so estimator output is unmistakably labeled as a
|
|
40
|
+
* forecast rather than a final LLM verdict. Every `log.info` /
|
|
41
|
+
* `log.dim` / `log.warn` call emitted from the estimate code path
|
|
42
|
+
* (`shield-estimate.ts`) MUST use this constant, never `DISPLAY_TAG`.
|
|
43
|
+
*/
|
|
44
|
+
export const ESTIMATE_DISPLAY_TAG = 'Estimate';
|
|
36
45
|
export const MAX_DIFF_CHARS = 50_000;
|
|
37
46
|
export const QUERY_DIFF_TRUNCATE = 2_000;
|
|
38
47
|
export const SPEC_SEARCH_POOL = 15;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shield-templates.js","sourceRoot":"","sources":["../../src/commands/shield-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,2DAA2D;AAE3D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC;AAE5B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"shield-templates.js","sourceRoot":"","sources":["../../src/commands/shield-templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,2DAA2D;AAE3D;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,QAAQ,CAAC;AAE5B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,2DAA2D;AAE3D,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAGhF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,2BAA2B;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAGH,2DAA2D;AAE3D,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC5B,CAAC;AAEF,OAAO,EAAE,aAAa,IAAI,oBAAoB,EAAE,CAAC;AAEjD,2DAA2D;AAE3D,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+C/B,CAAC;AAEF,4DAA4D;AAE5D,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCvC,CAAC;AAEF,6DAA6D;AAE7D,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2D1C,CAAC;AAEF,wDAAwD;AAExD,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BzC,CAAC;AAEF,2DAA2D;AAE3D,yFAAyF;AACzF,qFAAqF;AACrF,wHAAwH;AACxH,MAAM,CAAC,MAAM,UAAU,GACrB,iGAAiG,CAAC"}
|
|
@@ -78,6 +78,19 @@ export interface ShieldOptions {
|
|
|
78
78
|
override?: string;
|
|
79
79
|
suppress?: string[];
|
|
80
80
|
autoCapture?: boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Pre-flight deterministic-rule estimator (mmnto-ai/totem#1714). When
|
|
83
|
+
* true, `shieldCommand` short-circuits to `runEstimate` in
|
|
84
|
+
* `shield-estimate.ts`: same diff-resolution chain as the LLM review
|
|
85
|
+
* path, then `runCompiledRules` against `compiled-rules.json`, then
|
|
86
|
+
* return — no orchestrator, no embedder, no LanceDB. Output is labeled
|
|
87
|
+
* `[Estimate]` (`ESTIMATE_DISPLAY_TAG`) instead of `[Review]` so log
|
|
88
|
+
* lines unmistakably read as a forecast. Mutually incompatible with
|
|
89
|
+
* `--learn`, `--auto-capture`, `--override`, `--suppress`, `--fresh`,
|
|
90
|
+
* `--mode`, and `--raw` — these only apply to the LLM path; combining
|
|
91
|
+
* them throws `TotemConfigError CONFIG_INVALID`.
|
|
92
|
+
*/
|
|
93
|
+
estimate?: boolean;
|
|
81
94
|
}
|
|
82
95
|
export declare function learnFromVerdict(verdictContent: string, diff: string, options: ShieldOptions, config: TotemConfig, cwd: string, configRoot?: string): Promise<void>;
|
|
83
96
|
/** @internal — exported for testing */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shield.d.ts","sourceRoot":"","sources":["../../src/commands/shield.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"shield.d.ts","sourceRoot":"","sources":["../../src/commands/shield.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/shield.js
CHANGED
|
@@ -745,6 +745,39 @@ export async function shieldCommand(options) {
|
|
|
745
745
|
const { filterDiffByPatterns, getDiffForReview } = await import('../git.js');
|
|
746
746
|
const { classifyChangedFiles } = await import('./shield-classify.js');
|
|
747
747
|
const { extractShieldContextAnnotations, extractShieldHints } = await import('./shield-hints.js');
|
|
748
|
+
// mmnto-ai/totem#1714: --estimate is the deterministic-rule pre-flight
|
|
749
|
+
// path. Reject incompatible flag combinations BEFORE any other
|
|
750
|
+
// validation (e.g. the --override length check below) so the user-
|
|
751
|
+
// facing error names the actual conflict (`--override is incompatible
|
|
752
|
+
// with --estimate`) instead of a misleading downstream constraint.
|
|
753
|
+
if (options.estimate) {
|
|
754
|
+
const incompatible = [
|
|
755
|
+
['learn', '--learn'],
|
|
756
|
+
['autoCapture', '--auto-capture'],
|
|
757
|
+
['override', '--override'],
|
|
758
|
+
['suppress', '--suppress'],
|
|
759
|
+
['fresh', '--fresh'],
|
|
760
|
+
['mode', '--mode'],
|
|
761
|
+
['raw', '--raw'],
|
|
762
|
+
];
|
|
763
|
+
for (const [key, flag] of incompatible) {
|
|
764
|
+
const value = options[key];
|
|
765
|
+
// totem-context: boolean OR in a presence-test, not a numeric-metric default — `??` would change "absent or explicitly-disabled" to "absent" and let `--fresh=false` slip through
|
|
766
|
+
if (value === undefined || value === false)
|
|
767
|
+
continue;
|
|
768
|
+
if (Array.isArray(value) && value.length === 0)
|
|
769
|
+
continue;
|
|
770
|
+
throw new TotemConfigError(`${flag} is incompatible with --estimate.`, 'Drop the incompatible flag, or run without --estimate.', 'CONFIG_INVALID');
|
|
771
|
+
}
|
|
772
|
+
const cwd = process.cwd();
|
|
773
|
+
const configPath = resolveConfigPath(cwd);
|
|
774
|
+
const configRoot = path.dirname(configPath);
|
|
775
|
+
loadEnv(cwd);
|
|
776
|
+
const config = await loadConfig(configPath);
|
|
777
|
+
const { runEstimate } = await import('./shield-estimate.js');
|
|
778
|
+
await runEstimate(options, config, cwd, configRoot);
|
|
779
|
+
return;
|
|
780
|
+
}
|
|
748
781
|
if (options.mode && options.mode !== 'standard' && options.mode !== 'structural') {
|
|
749
782
|
throw new TotemConfigError(`Invalid --mode "${options.mode}". Use "standard" or "structural".`, 'Check `totem review --help` for valid options.', 'CONFIG_INVALID');
|
|
750
783
|
}
|