@opensip-cli/yagni 0.1.11 → 0.1.12
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/README.md +2 -2
- package/dist/__tests__/architecture-invariants.test.d.ts +6 -0
- package/dist/__tests__/architecture-invariants.test.d.ts.map +1 -0
- package/dist/__tests__/architecture-invariants.test.js +37 -0
- package/dist/__tests__/architecture-invariants.test.js.map +1 -0
- package/dist/__tests__/detector-progress.test.d.ts +2 -0
- package/dist/__tests__/detector-progress.test.d.ts.map +1 -0
- package/dist/__tests__/detector-progress.test.js +73 -0
- package/dist/__tests__/detector-progress.test.js.map +1 -0
- package/dist/__tests__/duplicate-parity.test.d.ts +15 -0
- package/dist/__tests__/duplicate-parity.test.d.ts.map +1 -0
- package/dist/__tests__/duplicate-parity.test.js +304 -0
- package/dist/__tests__/duplicate-parity.test.js.map +1 -0
- package/dist/__tests__/hardening.test.d.ts +2 -0
- package/dist/__tests__/hardening.test.d.ts.map +1 -0
- package/dist/__tests__/hardening.test.js +101 -0
- package/dist/__tests__/hardening.test.js.map +1 -0
- package/dist/__tests__/session-payload.test.d.ts +2 -0
- package/dist/__tests__/session-payload.test.d.ts.map +1 -0
- package/dist/__tests__/session-payload.test.js +57 -0
- package/dist/__tests__/session-payload.test.js.map +1 -0
- package/dist/__tests__/walk-typescript-files.test.js +15 -1
- package/dist/__tests__/walk-typescript-files.test.js.map +1 -1
- package/dist/__tests__/yagni-coverage.test.js +24 -199
- package/dist/__tests__/yagni-coverage.test.js.map +1 -1
- package/dist/__tests__/yagni-golden.test.js +7 -24
- package/dist/__tests__/yagni-golden.test.js.map +1 -1
- package/dist/__tests__/yagni-presentation.test.js +4 -5
- package/dist/__tests__/yagni-presentation.test.js.map +1 -1
- package/dist/cli/__tests__/yagni-runner.test.js +4 -6
- package/dist/cli/__tests__/yagni-runner.test.js.map +1 -1
- package/dist/cli/execute-yagni.d.ts +15 -4
- package/dist/cli/execute-yagni.d.ts.map +1 -1
- package/dist/cli/execute-yagni.js +68 -30
- package/dist/cli/execute-yagni.js.map +1 -1
- package/dist/cli/report-data.d.ts +0 -2
- package/dist/cli/report-data.d.ts.map +1 -1
- package/dist/cli/report-data.js +0 -2
- package/dist/cli/report-data.js.map +1 -1
- package/dist/cli/yagni-command-spec.d.ts.map +1 -1
- package/dist/cli/yagni-command-spec.js +4 -19
- package/dist/cli/yagni-command-spec.js.map +1 -1
- package/dist/cli/yagni-config-schema.d.ts +1 -7
- package/dist/cli/yagni-config-schema.d.ts.map +1 -1
- package/dist/cli/yagni-config-schema.js +4 -6
- package/dist/cli/yagni-config-schema.js.map +1 -1
- package/dist/cli/yagni-config.d.ts.map +1 -1
- package/dist/cli/yagni-config.js +3 -7
- package/dist/cli/yagni-config.js.map +1 -1
- package/dist/cli/yagni-presentation.d.ts +1 -2
- package/dist/cli/yagni-presentation.d.ts.map +1 -1
- package/dist/cli/yagni-presentation.js +4 -4
- package/dist/cli/yagni-presentation.js.map +1 -1
- package/dist/cli/yagni-runner.d.ts +0 -2
- package/dist/cli/yagni-runner.d.ts.map +1 -1
- package/dist/cli/yagni-runner.js +40 -8
- package/dist/cli/yagni-runner.js.map +1 -1
- package/dist/detectors/duplicate-body-candidate.d.ts +9 -2
- package/dist/detectors/duplicate-body-candidate.d.ts.map +1 -1
- package/dist/detectors/duplicate-body-candidate.js +123 -120
- package/dist/detectors/duplicate-body-candidate.js.map +1 -1
- package/dist/detectors/registry.d.ts +9 -1
- package/dist/detectors/registry.d.ts.map +1 -1
- package/dist/detectors/registry.js +9 -1
- package/dist/detectors/registry.js.map +1 -1
- package/dist/detectors/types.d.ts +1 -2
- package/dist/detectors/types.d.ts.map +1 -1
- package/dist/detectors/unused-config-surface.d.ts.map +1 -1
- package/dist/detectors/unused-config-surface.js +0 -2
- package/dist/detectors/unused-config-surface.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/build-ts-inventory.d.ts +33 -0
- package/dist/lib/build-ts-inventory.d.ts.map +1 -0
- package/dist/lib/build-ts-inventory.js +252 -0
- package/dist/lib/build-ts-inventory.js.map +1 -0
- package/dist/persistence/session-payload.d.ts +7 -10
- package/dist/persistence/session-payload.d.ts.map +1 -1
- package/dist/persistence/session-payload.js +64 -6
- package/dist/persistence/session-payload.js.map +1 -1
- package/dist/scoring/__tests__/confidence.test.js +3 -4
- package/dist/scoring/__tests__/confidence.test.js.map +1 -1
- package/dist/scoring/confidence.d.ts +1 -1
- package/dist/scoring/confidence.d.ts.map +1 -1
- package/dist/scoring/confidence.js +1 -2
- package/dist/scoring/confidence.js.map +1 -1
- package/dist/types/yagni-config.d.ts +1 -4
- package/dist/types/yagni-config.d.ts.map +1 -1
- package/dist/types/yagni-config.js +0 -1
- package/dist/types/yagni-config.js.map +1 -1
- package/dist/types/yagni-metadata.d.ts +0 -1
- package/dist/types/yagni-metadata.d.ts.map +1 -1
- package/package.json +10 -10
- package/dist/__tests__/graph-evidence.test.d.ts +0 -2
- package/dist/__tests__/graph-evidence.test.d.ts.map +0 -1
- package/dist/__tests__/graph-evidence.test.js +0 -159
- package/dist/__tests__/graph-evidence.test.js.map +0 -1
- package/dist/evidence/graph-evidence.d.ts +0 -15
- package/dist/evidence/graph-evidence.d.ts.map +0 -1
- package/dist/evidence/graph-evidence.js +0 -89
- package/dist/evidence/graph-evidence.js.map +0 -1
- package/dist/evidence/load-graph-adapters.d.ts +0 -13
- package/dist/evidence/load-graph-adapters.d.ts.map +0 -1
- package/dist/evidence/load-graph-adapters.js +0 -67
- package/dist/evidence/load-graph-adapters.js.map +0 -1
- package/dist/lib/isolate-exit-code.d.ts +0 -8
- package/dist/lib/isolate-exit-code.d.ts.map +0 -1
- package/dist/lib/isolate-exit-code.js +0 -27
- package/dist/lib/isolate-exit-code.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yagni-golden.test.js","sourceRoot":"","sources":["../../src/__tests__/yagni-golden.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"yagni-golden.test.js","sourceRoot":"","sources":["../../src/__tests__/yagni-golden.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it, vi } from 'vitest';
|
|
2
2
|
import { executeYagni } from '../cli/execute-yagni.js';
|
|
3
3
|
import { buildYagniPresentationLines } from '../cli/yagni-presentation.js';
|
|
4
|
-
import { duplicateBodyCandidateDetector } from '../detectors/duplicate-body-candidate.js';
|
|
5
4
|
import { unusedConfigSurfaceDetector } from '../detectors/unused-config-surface.js';
|
|
6
5
|
const FIXTURE_ROOT = new URL('fixtures/unused-config-surface/pkg', import.meta.url).pathname;
|
|
7
6
|
function stubCli() {
|
|
@@ -14,17 +13,17 @@ describe('yagni presentation', () => {
|
|
|
14
13
|
it('renders compact summary with net footer for default output', async () => {
|
|
15
14
|
const outcome = await executeYagni({
|
|
16
15
|
cwd: FIXTURE_ROOT,
|
|
17
|
-
config: {
|
|
18
|
-
graphMode: 'off',
|
|
16
|
+
config: { defaultMinConfidence: 'low' },
|
|
19
17
|
includeTests: true,
|
|
20
|
-
}, stubCli(), [unusedConfigSurfaceDetector
|
|
21
|
-
const lines = buildYagniPresentationLines(outcome.envelope, FIXTURE_ROOT,
|
|
18
|
+
}, stubCli(), [unusedConfigSurfaceDetector]);
|
|
19
|
+
const lines = buildYagniPresentationLines(outcome.envelope, FIXTURE_ROOT, outcome.session.payload.summary.skippedDetectors, false);
|
|
22
20
|
const text = lines.join('\n');
|
|
23
21
|
expect(text).toContain('YAGNI audit: 1 reduction candidates');
|
|
24
22
|
expect(text).toContain('High confidence');
|
|
25
23
|
expect(text).toContain('unused-config-surface');
|
|
26
24
|
expect(text).toContain('net: ~1 LOC possible');
|
|
27
25
|
expect(text).not.toContain('Run with --verbose for evidence');
|
|
26
|
+
expect(text).not.toContain('Graph:');
|
|
28
27
|
});
|
|
29
28
|
});
|
|
30
29
|
//# sourceMappingURL=yagni-presentation.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yagni-presentation.test.js","sourceRoot":"","sources":["../../src/__tests__/yagni-presentation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"yagni-presentation.test.js","sourceRoot":"","sources":["../../src/__tests__/yagni-presentation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AAIpF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,oCAAoC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAE7F,SAAS,OAAO;IACd,OAAO;QACL,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE;QACrC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;KACtC,CAAC;AACjC,CAAC;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,OAAO,GAAG,MAAM,YAAY,CAChC;YACE,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE;YACvC,YAAY,EAAE,IAAI;SACnB,EACD,OAAO,EAAE,EACT,CAAC,2BAA2B,CAAC,CAC9B,CAAC;QACF,MAAM,KAAK,GAAG,2BAA2B,CACvC,OAAO,CAAC,QAAQ,EAChB,YAAY,EACZ,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAChD,KAAK,CACN,CAAC;QACF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -51,12 +51,10 @@ function stubExecuteOutcome() {
|
|
|
51
51
|
errors: 0,
|
|
52
52
|
warnings: 1,
|
|
53
53
|
skippedDetectors: [],
|
|
54
|
-
graphMode: 'off',
|
|
55
54
|
yagni: {
|
|
56
55
|
totalCandidates: 1,
|
|
57
56
|
byConfidence: { high: 1, medium: 0, low: 0 },
|
|
58
57
|
estimatedTotalLocReduction: 10,
|
|
59
|
-
graphMode: 'off',
|
|
60
58
|
skippedDetectors: [],
|
|
61
59
|
},
|
|
62
60
|
},
|
|
@@ -81,20 +79,20 @@ beforeEach(() => {
|
|
|
81
79
|
});
|
|
82
80
|
describe('renderYagniLive produce mapping', () => {
|
|
83
81
|
it('routes through runToolLiveView with the yagni tool key', async () => {
|
|
84
|
-
await renderYagniLive({ cwd: '/proj'
|
|
82
|
+
await renderYagniLive({ cwd: '/proj' }, stubCli());
|
|
85
83
|
expect(runToolLiveView).toHaveBeenCalledTimes(1);
|
|
86
84
|
expect(capturedSpec?.tool).toBe('yagni');
|
|
87
85
|
});
|
|
88
86
|
it('passes the host exit-code hook to runToolLiveView', async () => {
|
|
89
87
|
const setExitCode = vi.fn();
|
|
90
|
-
await renderYagniLive({ cwd: '/proj'
|
|
88
|
+
await renderYagniLive({ cwd: '/proj' }, {
|
|
91
89
|
...stubCli(),
|
|
92
90
|
setExitCode,
|
|
93
91
|
});
|
|
94
92
|
expect(capturedGlue).toMatchObject({ setExitCode });
|
|
95
93
|
});
|
|
96
94
|
it('omits verbose table and lines on compact runs', async () => {
|
|
97
|
-
await renderYagniLive({ cwd: '/proj',
|
|
95
|
+
await renderYagniLive({ cwd: '/proj', verbose: false }, stubCli());
|
|
98
96
|
const outcome = await capturedSpec.produce(vi.fn(), {
|
|
99
97
|
setRunning: vi.fn(),
|
|
100
98
|
setHeaderMetadata: vi.fn(),
|
|
@@ -110,7 +108,7 @@ describe('renderYagniLive produce mapping', () => {
|
|
|
110
108
|
expect(outcome.session?.passed).toBe(false);
|
|
111
109
|
});
|
|
112
110
|
it('includes verbose table and lines when --verbose is set', async () => {
|
|
113
|
-
await renderYagniLive({ cwd: '/proj',
|
|
111
|
+
await renderYagniLive({ cwd: '/proj', verbose: true }, stubCli());
|
|
114
112
|
const outcome = await capturedSpec.produce(vi.fn(), {
|
|
115
113
|
setRunning: vi.fn(),
|
|
116
114
|
setHeaderMetadata: vi.fn(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yagni-runner.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/yagni-runner.test.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAuB,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAIrD,MAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAElD,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,eAAe;CAChB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CACnC,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;CACtB,CAAC,CAAC,CAAC;AAEJ,MAAM,gBAAgB,GAAG,YAAmD,CAAC;AAE7E,SAAS,OAAO;IACd,OAAO;QACL,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE;QACrC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;KACtC,CAAC;AACjC,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,mBAAmB,CAAC;QACzB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,WAAW;QAClB,SAAS,EAAE,0BAA0B;QACrC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC/E,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,4BAA4B;QACpC,UAAU,EAAE,KAAK;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;QACL,QAAQ,EAAE,aAAa,EAAE;QACzB,OAAO,EAAE;YACP,IAAI,EAAE,OAAgB;YACtB,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,SAAS,EAAE,CAAU;gBACrB,OAAO,EAAE;oBACP,KAAK,EAAE,CAAC;oBACR,MAAM,EAAE,CAAC;oBACT,MAAM,EAAE,CAAC;oBACT,MAAM,EAAE,CAAC;oBACT,QAAQ,EAAE,CAAC;oBACX,gBAAgB,EAAE,EAAE;oBACpB,
|
|
1
|
+
{"version":3,"file":"yagni-runner.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/yagni-runner.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { buildYagniSessionPayload } from '../persistence/session-payload.js';
|
|
2
2
|
import type { YagniDetector } from '../detectors/types.js';
|
|
3
|
-
import type { YagniConfig
|
|
3
|
+
import type { YagniConfig } from '../types/yagni-config.js';
|
|
4
4
|
import type { YagniConfidence } from '../types/yagni-metadata.js';
|
|
5
5
|
import type { SignalEnvelope } from '@opensip-cli/contracts';
|
|
6
6
|
import type { ToolCliContext } from '@opensip-cli/core';
|
|
@@ -8,13 +8,18 @@ import type { ToolCliContext } from '@opensip-cli/core';
|
|
|
8
8
|
export interface ExecuteYagniOptions {
|
|
9
9
|
readonly cwd: string;
|
|
10
10
|
readonly config?: YagniConfig;
|
|
11
|
-
readonly graphMode?: YagniGraphMode;
|
|
12
11
|
readonly minConfidence?: YagniConfidence;
|
|
13
12
|
readonly detectors?: readonly string[];
|
|
14
13
|
readonly categories?: readonly string[];
|
|
15
14
|
readonly includeTests?: boolean;
|
|
16
15
|
readonly pathRoots?: readonly string[];
|
|
16
|
+
/** Aggregate count progress (pool-shape live view). */
|
|
17
17
|
readonly onProgress?: (completed: number, total: number) => void;
|
|
18
|
+
/** Per-detector lifecycle, for a phases-shape live view that names each detector. */
|
|
19
|
+
readonly onDetectorStart?: (slug: string) => void;
|
|
20
|
+
readonly onDetectorDone?: (slug: string, durationMs: number) => void;
|
|
21
|
+
/** The detectors `planDetectors` excluded (filtered out or disabled), emitted once. */
|
|
22
|
+
readonly onDetectorsSkipped?: (slugs: readonly string[]) => void;
|
|
18
23
|
}
|
|
19
24
|
/** Envelope plus session payload returned to the host command runner. */
|
|
20
25
|
export interface ExecuteYagniResult {
|
|
@@ -27,6 +32,12 @@ export interface ExecuteYagniResult {
|
|
|
27
32
|
readonly payload: ReturnType<typeof buildYagniSessionPayload>;
|
|
28
33
|
};
|
|
29
34
|
}
|
|
30
|
-
/**
|
|
31
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Run the selected YAGNI detectors and build the persisted signal envelope.
|
|
37
|
+
*
|
|
38
|
+
* `_cli` is retained in the signature for API stability and the Track 2 reduction
|
|
39
|
+
* coordinator (which will re-acquire graph/fitness evidence through it); the
|
|
40
|
+
* current detector-only path does not use it.
|
|
41
|
+
*/
|
|
42
|
+
export declare function executeYagni(opts: ExecuteYagniOptions, _cli: ToolCliContext, detectors?: readonly YagniDetector[]): Promise<ExecuteYagniResult>;
|
|
32
43
|
//# sourceMappingURL=execute-yagni.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-yagni.d.ts","sourceRoot":"","sources":["../../src/cli/execute-yagni.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execute-yagni.d.ts","sourceRoot":"","sources":["../../src/cli/execute-yagni.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAQ7E,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAU,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEhE,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,eAAe,CAAC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,uDAAuD;IACvD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,qFAAqF;IACrF,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,uFAAuF;IACvF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;CAClE;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;KAC/D,CAAC;CACH;AA+FD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,mBAAmB,EACzB,IAAI,EAAE,cAAc,EACpB,SAAS,GAAE,SAAS,aAAa,EAAoB,GACpD,OAAO,CAAC,kBAAkB,CAAC,CAoF7B"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { isAbsolute, join } from 'node:path';
|
|
4
|
+
import { buildSignalEnvelope, groupSignalsBySource } from '@opensip-cli/contracts';
|
|
5
|
+
import { filterSignalsBySuppressions, isErrorSignal, yieldToEventLoop } from '@opensip-cli/core';
|
|
4
6
|
import { yagniFingerprintStrategy } from '../baseline-strategy.js';
|
|
5
7
|
import { YAGNI_DETECTORS } from '../detectors/registry.js';
|
|
6
|
-
import { resolveGraphEvidence } from '../evidence/graph-evidence.js';
|
|
7
8
|
import { YAGNI_LAYOUT_KEY } from '../identity.js';
|
|
8
9
|
import { buildYagniSessionPayload } from '../persistence/session-payload.js';
|
|
9
10
|
import { buildYagniRunSummary, filterByMinConfidence, filterByReductionCategories, sortYagniSignals, } from '../scoring/confidence.js';
|
|
11
|
+
const YAGNI_SUPPRESSION_KEYWORDS = {
|
|
12
|
+
file: '@yagni-ignore-file',
|
|
13
|
+
nextLine: '@yagni-ignore-next-line',
|
|
14
|
+
};
|
|
10
15
|
function isDisabled(detector, config) {
|
|
11
16
|
const disabled = config.disabledDetectors ?? [];
|
|
12
17
|
return disabled.includes(detector.id) || disabled.includes(detector.slug);
|
|
@@ -18,7 +23,7 @@ function matchesDetectorFilter(detector, filter) {
|
|
|
18
23
|
slug === detector.slug ||
|
|
19
24
|
slug === detector.slug.replace(/^yagni:/, ''));
|
|
20
25
|
}
|
|
21
|
-
function planDetectors(detectors, config,
|
|
26
|
+
function planDetectors(detectors, config, detectorFilter) {
|
|
22
27
|
const run = [];
|
|
23
28
|
const skipped = [];
|
|
24
29
|
for (const detector of detectors) {
|
|
@@ -32,39 +37,74 @@ function planDetectors(detectors, config, graphAvailable, detectorFilter) {
|
|
|
32
37
|
});
|
|
33
38
|
continue;
|
|
34
39
|
}
|
|
35
|
-
if (detector.requiresGraph && !graphAvailable) {
|
|
36
|
-
skipped.push({
|
|
37
|
-
id: detector.id,
|
|
38
|
-
slug: detector.slug,
|
|
39
|
-
reason: 'graph-required',
|
|
40
|
-
detail: 'graph evidence unavailable',
|
|
41
|
-
});
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
40
|
run.push(detector);
|
|
45
41
|
}
|
|
46
42
|
return { run, skipped };
|
|
47
43
|
}
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
function yagniDirectiveId(signal) {
|
|
45
|
+
return signal.ruleId.startsWith('yagni:') ? signal.ruleId.slice('yagni:'.length) : signal.ruleId;
|
|
46
|
+
}
|
|
47
|
+
function sourcePath(cwd, filePath) {
|
|
48
|
+
return isAbsolute(filePath) ? filePath : join(cwd, filePath);
|
|
49
|
+
}
|
|
50
|
+
async function filterYagniSuppressions(cwd, signals) {
|
|
51
|
+
const { kept, suppressed } = await filterSignalsBySuppressions({
|
|
52
|
+
signals,
|
|
53
|
+
keywords: YAGNI_SUPPRESSION_KEYWORDS,
|
|
54
|
+
readFile: (filePath) => readFile(sourcePath(cwd, filePath), 'utf8'),
|
|
55
|
+
ruleIdOf: yagniDirectiveId,
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
kept,
|
|
59
|
+
suppressed: suppressed.map((match) => match.signal),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function suppressionAdjustedUnits(units, keptSignals, suppressedSignals) {
|
|
63
|
+
const keptBySource = groupSignalsBySource(keptSignals);
|
|
64
|
+
const suppressedBySource = groupSignalsBySource(suppressedSignals);
|
|
65
|
+
return units.map((unit) => {
|
|
66
|
+
const signals = keptBySource.get(unit.slug) ?? [];
|
|
67
|
+
const ignoredCount = suppressedBySource.get(unit.slug)?.length ?? 0;
|
|
68
|
+
return {
|
|
69
|
+
...unit,
|
|
70
|
+
passed: unit.error === undefined && signals.every((s) => !isErrorSignal(s)),
|
|
71
|
+
violationCount: signals.length,
|
|
72
|
+
...(ignoredCount === 0 ? {} : { ignoredCount }),
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Run the selected YAGNI detectors and build the persisted signal envelope.
|
|
78
|
+
*
|
|
79
|
+
* `_cli` is retained in the signature for API stability and the Track 2 reduction
|
|
80
|
+
* coordinator (which will re-acquire graph/fitness evidence through it); the
|
|
81
|
+
* current detector-only path does not use it.
|
|
82
|
+
*/
|
|
83
|
+
export async function executeYagni(opts, _cli, detectors = YAGNI_DETECTORS) {
|
|
50
84
|
const config = opts.config ?? {};
|
|
51
|
-
const graphMode = opts.graphMode ?? config.graphMode ?? 'auto';
|
|
52
|
-
const graphEvidence = await resolveGraphEvidence(opts.cwd, graphMode, cli);
|
|
53
|
-
const graphAvailable = graphEvidence.catalog !== null;
|
|
54
85
|
const includeTests = opts.includeTests ?? config.includeTests ?? false;
|
|
55
86
|
const minConfidence = opts.minConfidence ?? config.defaultMinConfidence ?? 'medium';
|
|
56
|
-
const { run, skipped } = planDetectors(detectors, config,
|
|
87
|
+
const { run, skipped } = planDetectors(detectors, config, opts.detectors ?? []);
|
|
57
88
|
const allSignals = [];
|
|
58
89
|
const units = [];
|
|
59
90
|
const total = run.length;
|
|
60
91
|
opts.onProgress?.(0, total);
|
|
92
|
+
if (skipped.length > 0)
|
|
93
|
+
opts.onDetectorsSkipped?.(skipped.map((s) => s.slug));
|
|
61
94
|
for (const detector of run) {
|
|
62
95
|
const started = Date.now();
|
|
96
|
+
opts.onDetectorStart?.(detector.slug);
|
|
97
|
+
// Yield so a phases live view paints the running spinner + live elapsed on
|
|
98
|
+
// this detector before a fast/synchronous detector blocks the event loop —
|
|
99
|
+
// mirrors graph's runStage, which yields right after stage-start so the
|
|
100
|
+
// spinner moves to the active row instead of jumping straight to done.
|
|
101
|
+
if (opts.onDetectorStart)
|
|
102
|
+
await yieldToEventLoop();
|
|
63
103
|
try {
|
|
64
104
|
const result = await detector.run({
|
|
65
105
|
cwd: opts.cwd,
|
|
66
106
|
config,
|
|
67
|
-
graphCatalog:
|
|
107
|
+
graphCatalog: null,
|
|
68
108
|
includeTests,
|
|
69
109
|
...(opts.pathRoots === undefined ? {} : { pathRoots: opts.pathRoots }),
|
|
70
110
|
});
|
|
@@ -86,10 +126,13 @@ export async function executeYagni(opts, cli, detectors = YAGNI_DETECTORS) {
|
|
|
86
126
|
error: error instanceof Error ? error.message : String(error),
|
|
87
127
|
});
|
|
88
128
|
}
|
|
129
|
+
opts.onDetectorDone?.(detector.slug, units.at(-1)?.durationMs ?? Date.now() - started);
|
|
89
130
|
opts.onProgress?.(units.length, total);
|
|
90
131
|
}
|
|
91
132
|
const categoryFiltered = filterByReductionCategories(allSignals, opts.categories ?? []);
|
|
92
|
-
const
|
|
133
|
+
const { kept, suppressed } = await filterYagniSuppressions(opts.cwd, categoryFiltered);
|
|
134
|
+
const sortedSignals = sortYagniSignals(kept);
|
|
135
|
+
const finalUnits = suppressionAdjustedUnits(units, sortedSignals, suppressed);
|
|
93
136
|
const runId = randomUUID();
|
|
94
137
|
const createdAt = new Date().toISOString();
|
|
95
138
|
const policy = {
|
|
@@ -100,19 +143,14 @@ export async function executeYagni(opts, cli, detectors = YAGNI_DETECTORS) {
|
|
|
100
143
|
tool: 'yagni',
|
|
101
144
|
runId,
|
|
102
145
|
createdAt,
|
|
103
|
-
units,
|
|
146
|
+
units: finalUnits,
|
|
104
147
|
signals: sortedSignals,
|
|
105
148
|
policy,
|
|
106
|
-
runFaulted:
|
|
149
|
+
runFaulted: finalUnits.some((u) => u.error !== undefined),
|
|
107
150
|
fingerprintStrategy: yagniFingerprintStrategy,
|
|
108
151
|
});
|
|
109
|
-
const yagniSummary = buildYagniRunSummary(envelope.signals,
|
|
110
|
-
const sessionPayload = buildYagniSessionPayload(envelope, skipped,
|
|
111
|
-
graphMode: graphEvidence.mode,
|
|
112
|
-
graphBuilt: graphEvidence.built,
|
|
113
|
-
graphDetail: graphEvidence.detail,
|
|
114
|
-
yagniSummary,
|
|
115
|
-
});
|
|
152
|
+
const yagniSummary = buildYagniRunSummary(envelope.signals, skipped);
|
|
153
|
+
const sessionPayload = buildYagniSessionPayload(envelope, skipped, yagniSummary);
|
|
116
154
|
return {
|
|
117
155
|
envelope,
|
|
118
156
|
session: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-yagni.js","sourceRoot":"","sources":["../../src/cli/execute-yagni.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"execute-yagni.js","sourceRoot":"","sources":["../../src/cli/execute-yagni.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,10 @@ export interface YagniDetectorCatalogEntry {
|
|
|
7
7
|
readonly id: string;
|
|
8
8
|
readonly slug: string;
|
|
9
9
|
readonly description: string;
|
|
10
|
-
readonly requiresGraph: boolean;
|
|
11
10
|
}
|
|
12
11
|
/** Static summary of the bundled detector catalog. */
|
|
13
12
|
export interface YagniSummaryCatalog {
|
|
14
13
|
readonly detectorCount: number;
|
|
15
|
-
readonly graphBackedCount: number;
|
|
16
14
|
readonly contractVersion: string;
|
|
17
15
|
}
|
|
18
16
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-data.d.ts","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,gDAAgD;AAChD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"report-data.d.ts","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,gDAAgD;AAChD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWjF"}
|
package/dist/cli/report-data.js
CHANGED
|
@@ -11,11 +11,9 @@ export function collectYagniReportData(_scope) {
|
|
|
11
11
|
id: d.id,
|
|
12
12
|
slug: d.slug,
|
|
13
13
|
description: d.description,
|
|
14
|
-
requiresGraph: d.requiresGraph,
|
|
15
14
|
}));
|
|
16
15
|
const yagniSummary = {
|
|
17
16
|
detectorCount: YAGNI_DETECTORS.length,
|
|
18
|
-
graphBackedCount: YAGNI_DETECTORS.filter((d) => d.requiresGraph).length,
|
|
19
17
|
contractVersion: '1.0.0',
|
|
20
18
|
};
|
|
21
19
|
return { yagniCatalog, yagniSummary };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-data.js","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"report-data.js","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAiB3D;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,YAAY,GAAgC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;KAC3B,CAAC,CAAC,CAAC;IACJ,MAAM,YAAY,GAAwB;QACxC,aAAa,EAAE,eAAe,CAAC,MAAM;QACrC,eAAe,EAAE,OAAO;KACzB,CAAC;IACF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yagni-command-spec.d.ts","sourceRoot":"","sources":["../../src/cli/yagni-command-spec.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"yagni-command-spec.d.ts","sourceRoot":"","sources":["../../src/cli/yagni-command-spec.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,mBAAmB,CAAC;AA8H3E,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,gFA4CjF"}
|
|
@@ -8,11 +8,6 @@ import { resolveYagniPositionalPaths } from '../lib/resolve-positional-paths.js'
|
|
|
8
8
|
import { executeYagni } from './execute-yagni.js';
|
|
9
9
|
import { loadYagniConfig } from './yagni-config.js';
|
|
10
10
|
import { buildYagniRunPresentation } from './yagni-presentation.js';
|
|
11
|
-
function parseGraphMode(raw) {
|
|
12
|
-
if (raw === 'auto' || raw === 'reuse' || raw === 'build' || raw === 'off')
|
|
13
|
-
return raw;
|
|
14
|
-
return undefined;
|
|
15
|
-
}
|
|
16
11
|
function parseMinConfidence(raw) {
|
|
17
12
|
if (raw === 'low' || raw === 'medium' || raw === 'high')
|
|
18
13
|
return raw;
|
|
@@ -23,12 +18,11 @@ function normalizeRepeatable(raw) {
|
|
|
23
18
|
return [];
|
|
24
19
|
return Array.isArray(raw) ? raw : [raw];
|
|
25
20
|
}
|
|
26
|
-
function buildYagniLiveArgs(opts,
|
|
21
|
+
function buildYagniLiveArgs(opts, pathRoots) {
|
|
27
22
|
return {
|
|
28
23
|
cwd: opts.cwd,
|
|
29
24
|
verbose: opts.verbose === true,
|
|
30
25
|
quiet: opts.quiet === true,
|
|
31
|
-
graphMode,
|
|
32
26
|
minConfidence: parseMinConfidence(opts.minConfidence),
|
|
33
27
|
detectors: normalizeRepeatable(opts.detector),
|
|
34
28
|
categories: normalizeRepeatable(opts.category),
|
|
@@ -52,14 +46,13 @@ async function deliverYagniRun(opts, cli, config, outcome) {
|
|
|
52
46
|
async function runYagniCommand(rawOpts, cli, setUpLiveView) {
|
|
53
47
|
const opts = rawOpts;
|
|
54
48
|
const config = loadYagniConfig(opts.cwd);
|
|
55
|
-
const graphMode = parseGraphMode(opts.graph) ?? config.graphMode ?? 'auto';
|
|
56
49
|
const positionals = opts._args ?? [];
|
|
57
50
|
const paths = (positionals[0] ?? []);
|
|
58
51
|
const pathRoots = paths.length > 0 ? resolveYagniPositionalPaths(paths, opts.cwd) : undefined;
|
|
59
52
|
const useLiveView = opts.json !== true && process.stdout.isTTY === true && pathRoots === undefined;
|
|
60
53
|
if (useLiveView) {
|
|
61
54
|
setUpLiveView(cli);
|
|
62
|
-
const completion = await cli.renderLive(YAGNI_LIVE_VIEW_KEY, buildYagniLiveArgs(opts,
|
|
55
|
+
const completion = await cli.renderLive(YAGNI_LIVE_VIEW_KEY, buildYagniLiveArgs(opts, pathRoots));
|
|
63
56
|
const envelope = completion?.envelope;
|
|
64
57
|
if (envelope !== undefined) {
|
|
65
58
|
await deliverYagniRun(opts, cli, config, { envelope });
|
|
@@ -70,15 +63,14 @@ async function runYagniCommand(rawOpts, cli, setUpLiveView) {
|
|
|
70
63
|
const outcome = await executeYagni({
|
|
71
64
|
cwd: opts.cwd,
|
|
72
65
|
config,
|
|
73
|
-
graphMode,
|
|
74
66
|
minConfidence: parseMinConfidence(opts.minConfidence),
|
|
75
67
|
detectors: normalizeRepeatable(opts.detector),
|
|
76
68
|
categories: normalizeRepeatable(opts.category),
|
|
77
69
|
includeTests: opts.includeTests ?? config.includeTests,
|
|
78
70
|
pathRoots,
|
|
79
71
|
}, cli);
|
|
80
|
-
//
|
|
81
|
-
//
|
|
72
|
+
// Re-affirm advisory exit policy before the host wraps the envelope
|
|
73
|
+
// (emitEnvelope snapshots getExitCode at write time; --report-to may set exit 4).
|
|
82
74
|
applyAdvisoryExitCode(cli, config);
|
|
83
75
|
if (opts.json === true) {
|
|
84
76
|
cli.emitEnvelope(outcome.envelope);
|
|
@@ -88,7 +80,6 @@ async function runYagniCommand(rawOpts, cli, setUpLiveView) {
|
|
|
88
80
|
const presentation = buildYagniRunPresentation({
|
|
89
81
|
envelope: outcome.envelope,
|
|
90
82
|
cwd: opts.cwd,
|
|
91
|
-
graphMode: outcome.session.payload.summary.graphMode ?? graphMode,
|
|
92
83
|
skippedDetectors: outcome.session.payload.summary.skippedDetectors,
|
|
93
84
|
verbose: opts.verbose === true,
|
|
94
85
|
durationMs,
|
|
@@ -103,12 +94,6 @@ export function buildYagniCommandSpec(setUpLiveView) {
|
|
|
103
94
|
description: 'Run YAGNI reduction audit detectors (advisory; exit 0 by default)',
|
|
104
95
|
commonFlags: ['cwd', 'json', 'quiet', 'verbose', 'debug', 'reportTo', 'apiKey', 'open'],
|
|
105
96
|
options: [
|
|
106
|
-
{
|
|
107
|
-
flag: '--graph',
|
|
108
|
-
value: '<mode>',
|
|
109
|
-
description: 'Graph evidence mode: auto (reuse or build), reuse, build, or off (default from config)',
|
|
110
|
-
choices: ['auto', 'reuse', 'build', 'off'],
|
|
111
|
-
},
|
|
112
97
|
{
|
|
113
98
|
flag: '--min-confidence',
|
|
114
99
|
value: '<level>',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yagni-command-spec.js","sourceRoot":"","sources":["../../src/cli/yagni-command-spec.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"yagni-command-spec.js","sourceRoot":"","sources":["../../src/cli/yagni-command-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,15 +14,9 @@ export declare const YagniConfigSchema: z.ZodObject<{
|
|
|
14
14
|
medium: "medium";
|
|
15
15
|
high: "high";
|
|
16
16
|
}>>;
|
|
17
|
-
graphMode: z.ZodOptional<z.ZodEnum<{
|
|
18
|
-
auto: "auto";
|
|
19
|
-
reuse: "reuse";
|
|
20
|
-
build: "build";
|
|
21
|
-
off: "off";
|
|
22
|
-
}>>;
|
|
23
17
|
includeTests: z.ZodOptional<z.ZodBoolean>;
|
|
24
18
|
disabledDetectors: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
25
19
|
detectorSettings: z.ZodOptional<z.ZodReadonly<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>>;
|
|
26
|
-
}, z.core.$
|
|
20
|
+
}, z.core.$strict>;
|
|
27
21
|
export declare const yagniConfigDeclaration: ToolConfigDeclaration;
|
|
28
22
|
//# sourceMappingURL=yagni-config-schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yagni-config-schema.d.ts","sourceRoot":"","sources":["../../src/cli/yagni-config-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"yagni-config-schema.d.ts","sourceRoot":"","sources":["../../src/cli/yagni-config-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAIjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;kBASnB,CAAC;AAMZ,eAAO,MAAM,sBAAsB,EAAE,qBAiBpC,CAAC"}
|
|
@@ -5,17 +5,17 @@
|
|
|
5
5
|
* `failOnWarnings`) default to `0` so advisory findings never fail the run.
|
|
6
6
|
*/
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
-
const graphMode = z.enum(['auto', 'reuse', 'build', 'off']);
|
|
9
8
|
const confidenceLevel = z.enum(['low', 'medium', 'high']);
|
|
10
|
-
export const YagniConfigSchema = z
|
|
9
|
+
export const YagniConfigSchema = z
|
|
10
|
+
.object({
|
|
11
11
|
failOnErrors: z.number().int().min(0).optional(),
|
|
12
12
|
failOnWarnings: z.number().int().min(0).optional(),
|
|
13
13
|
defaultMinConfidence: confidenceLevel.optional(),
|
|
14
|
-
graphMode: graphMode.optional(),
|
|
15
14
|
includeTests: z.boolean().optional(),
|
|
16
15
|
disabledDetectors: z.array(z.string().min(1)).readonly().optional(),
|
|
17
16
|
detectorSettings: z.record(z.string(), z.record(z.string(), z.unknown())).readonly().optional(),
|
|
18
|
-
})
|
|
17
|
+
})
|
|
18
|
+
.strict();
|
|
19
19
|
export const yagniConfigDeclaration = {
|
|
20
20
|
namespace: 'yagni',
|
|
21
21
|
schema: YagniConfigSchema,
|
|
@@ -23,11 +23,9 @@ export const yagniConfigDeclaration = {
|
|
|
23
23
|
failOnErrors: 0,
|
|
24
24
|
failOnWarnings: 0,
|
|
25
25
|
defaultMinConfidence: 'medium',
|
|
26
|
-
graphMode: 'auto',
|
|
27
26
|
includeTests: false,
|
|
28
27
|
},
|
|
29
28
|
env: [
|
|
30
|
-
{ envVar: 'OPENSIP_YAGNI_GRAPH_MODE', key: 'graphMode' },
|
|
31
29
|
{ envVar: 'OPENSIP_YAGNI_MIN_CONFIDENCE', key: 'defaultMinConfidence' },
|
|
32
30
|
{
|
|
33
31
|
envVar: 'OPENSIP_YAGNI_INCLUDE_TESTS',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yagni-config-schema.js","sourceRoot":"","sources":["../../src/cli/yagni-config-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,
|
|
1
|
+
{"version":3,"file":"yagni-config-schema.js","sourceRoot":"","sources":["../../src/cli/yagni-config-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClD,oBAAoB,EAAE,eAAe,CAAC,QAAQ,EAAE;IAChD,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACnE,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAChG,CAAC;KACD,MAAM,EAAE,CAAC;AAMZ,MAAM,CAAC,MAAM,sBAAsB,GAA0B;IAC3D,SAAS,EAAE,OAAO;IAClB,MAAM,EAAE,iBAAiB;IACzB,QAAQ,EAAE;QACR,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,oBAAoB,EAAE,QAAQ;QAC9B,YAAY,EAAE,KAAK;KACpB;IACD,GAAG,EAAE;QACH,EAAE,MAAM,EAAE,8BAA8B,EAAE,GAAG,EAAE,sBAAsB,EAAE;QACvE;YACE,MAAM,EAAE,6BAA6B;YACrC,GAAG,EAAE,cAAc;YACnB,IAAI,EAAE,SAAS;SAChB;KACF;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yagni-config.d.ts","sourceRoot":"","sources":["../../src/cli/yagni-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"yagni-config.d.ts","sourceRoot":"","sources":["../../src/cli/yagni-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAaH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAe5D;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CA0B/E"}
|