@opensip-cli/fitness 0.1.9 → 0.1.11
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 +4 -2
- package/dist/__tests__/check-utils.test.js +11 -0
- package/dist/__tests__/check-utils.test.js.map +1 -1
- package/dist/__tests__/fit-execute-opts.test.js +35 -1
- package/dist/__tests__/fit-execute-opts.test.js.map +1 -1
- package/dist/__tests__/public-api.test.js +7 -2
- package/dist/__tests__/public-api.test.js.map +1 -1
- package/dist/__tests__/tool.test.js +18 -9
- package/dist/__tests__/tool.test.js.map +1 -1
- package/dist/check-utils/check-authoring-helpers.d.ts +14 -0
- package/dist/check-utils/check-authoring-helpers.d.ts.map +1 -0
- package/dist/check-utils/check-authoring-helpers.js +18 -0
- package/dist/check-utils/check-authoring-helpers.js.map +1 -0
- package/dist/check-utils/index.d.ts +1 -0
- package/dist/check-utils/index.d.ts.map +1 -1
- package/dist/check-utils/index.js +1 -0
- package/dist/check-utils/index.js.map +1 -1
- package/dist/cli/__tests__/fit-fail-closed.test.d.ts +8 -0
- package/dist/cli/__tests__/fit-fail-closed.test.d.ts.map +1 -0
- package/dist/cli/__tests__/fit-fail-closed.test.js +200 -0
- package/dist/cli/__tests__/fit-fail-closed.test.js.map +1 -0
- package/dist/cli/__tests__/fit-modes-live.test.js +33 -3
- package/dist/cli/__tests__/fit-modes-live.test.js.map +1 -1
- package/dist/cli/__tests__/fit-runner.test.d.ts +5 -0
- package/dist/cli/__tests__/fit-runner.test.d.ts.map +1 -0
- package/dist/cli/__tests__/fit-runner.test.js +145 -0
- package/dist/cli/__tests__/fit-runner.test.js.map +1 -0
- package/dist/cli/__tests__/report-data.test.js +37 -2
- package/dist/cli/__tests__/report-data.test.js.map +1 -1
- package/dist/cli/fit/__tests__/envelope-view-table.test.d.ts +2 -0
- package/dist/cli/fit/__tests__/envelope-view-table.test.d.ts.map +1 -0
- package/dist/cli/fit/__tests__/envelope-view-table.test.js +64 -0
- package/dist/cli/fit/__tests__/envelope-view-table.test.js.map +1 -0
- package/dist/cli/fit/__tests__/fit-export-command-spec.test.js +5 -2
- package/dist/cli/fit/__tests__/fit-export-command-spec.test.js.map +1 -1
- package/dist/cli/fit/check-loader.d.ts.map +1 -1
- package/dist/cli/fit/check-loader.js +28 -25
- package/dist/cli/fit/check-loader.js.map +1 -1
- package/dist/cli/fit/envelope-view.d.ts +1 -3
- package/dist/cli/fit/envelope-view.d.ts.map +1 -1
- package/dist/cli/fit/envelope-view.js +1 -7
- package/dist/cli/fit/envelope-view.js.map +1 -1
- package/dist/cli/fit/fit-aux-command-specs.d.ts +4 -4
- package/dist/cli/fit/fit-aux-command-specs.d.ts.map +1 -1
- package/dist/cli/fit/fit-aux-command-specs.js +13 -15
- package/dist/cli/fit/fit-aux-command-specs.js.map +1 -1
- package/dist/cli/fit/fit-command-spec.d.ts +3 -3
- package/dist/cli/fit/fit-command-spec.d.ts.map +1 -1
- package/dist/cli/fit/fit-command-spec.js +5 -9
- package/dist/cli/fit/fit-command-spec.js.map +1 -1
- package/dist/cli/fit/load-outcome.d.ts +24 -0
- package/dist/cli/fit/load-outcome.d.ts.map +1 -0
- package/dist/cli/fit/load-outcome.js +211 -0
- package/dist/cli/fit/load-outcome.js.map +1 -0
- package/dist/cli/fit/result-builders.d.ts.map +1 -1
- package/dist/cli/fit/result-builders.js +3 -4
- package/dist/cli/fit/result-builders.js.map +1 -1
- package/dist/cli/fit-modes.d.ts.map +1 -1
- package/dist/cli/fit-modes.js +50 -18
- package/dist/cli/fit-modes.js.map +1 -1
- package/dist/cli/fit-runner-progress.d.ts +0 -2
- package/dist/cli/fit-runner-progress.d.ts.map +1 -1
- package/dist/cli/fit-runner-progress.js +0 -3
- package/dist/cli/fit-runner-progress.js.map +1 -1
- package/dist/cli/fit-runner.d.ts +1 -34
- package/dist/cli/fit-runner.d.ts.map +1 -1
- package/dist/cli/fit-runner.js +90 -241
- package/dist/cli/fit-runner.js.map +1 -1
- package/dist/cli/fit-worker.d.ts.map +1 -1
- package/dist/cli/fit-worker.js +0 -1
- package/dist/cli/fit-worker.js.map +1 -1
- package/dist/cli/fit.d.ts +1 -0
- package/dist/cli/fit.d.ts.map +1 -1
- package/dist/cli/fit.js +6 -0
- package/dist/cli/fit.js.map +1 -1
- package/dist/cli/report-data.d.ts.map +1 -1
- package/dist/cli/report-data.js +0 -1
- package/dist/cli/report-data.js.map +1 -1
- package/dist/framework/__tests__/define-check.test.js +0 -1
- package/dist/framework/__tests__/define-check.test.js.map +1 -1
- package/dist/framework/__tests__/define-regex-list-check.test.js +15 -0
- package/dist/framework/__tests__/define-regex-list-check.test.js.map +1 -1
- package/dist/framework/__tests__/scope-registry.test.js +2 -0
- package/dist/framework/__tests__/scope-registry.test.js.map +1 -1
- package/dist/framework/abortable-exec.d.ts.map +1 -1
- package/dist/framework/abortable-exec.js +0 -1
- package/dist/framework/abortable-exec.js.map +1 -1
- package/dist/framework/check-config.d.ts +0 -8
- package/dist/framework/check-config.d.ts.map +1 -1
- package/dist/framework/check-config.js +0 -1
- package/dist/framework/check-config.js.map +1 -1
- package/dist/framework/constants.d.ts.map +1 -1
- package/dist/framework/constants.js +0 -1
- package/dist/framework/constants.js.map +1 -1
- package/dist/framework/define-check.d.ts.map +1 -1
- package/dist/framework/define-check.js +0 -1
- package/dist/framework/define-check.js.map +1 -1
- package/dist/framework/define-regex-list-check.d.ts +6 -0
- package/dist/framework/define-regex-list-check.d.ts.map +1 -1
- package/dist/framework/define-regex-list-check.js +4 -0
- package/dist/framework/define-regex-list-check.js.map +1 -1
- package/dist/framework/file-accessor.d.ts.map +1 -1
- package/dist/framework/file-accessor.js +0 -4
- package/dist/framework/file-accessor.js.map +1 -1
- package/dist/framework/file-cache.d.ts +1 -0
- package/dist/framework/file-cache.d.ts.map +1 -1
- package/dist/framework/file-cache.js +1 -4
- package/dist/framework/file-cache.js.map +1 -1
- package/dist/framework/import-graph.d.ts.map +1 -1
- package/dist/framework/import-graph.js +0 -1
- package/dist/framework/import-graph.js.map +1 -1
- package/dist/framework/parse-cache.d.ts.map +1 -1
- package/dist/framework/parse-cache.js +0 -1
- package/dist/framework/parse-cache.js.map +1 -1
- package/dist/framework/scope-registry.d.ts.map +1 -1
- package/dist/framework/scope-registry.js +7 -1
- package/dist/framework/scope-registry.js.map +1 -1
- package/dist/framework/severity-mapping.d.ts.map +1 -1
- package/dist/framework/severity-mapping.js +0 -1
- package/dist/framework/severity-mapping.js.map +1 -1
- package/dist/identity.d.ts +11 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +11 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +2 -1
- package/dist/plugins/loader.js.map +1 -1
- package/dist/recipes/__tests__/execution-branches.test.d.ts.map +1 -1
- package/dist/recipes/__tests__/execution-branches.test.js +0 -1
- package/dist/recipes/__tests__/execution-branches.test.js.map +1 -1
- package/dist/recipes/__tests__/service.test.d.ts.map +1 -1
- package/dist/recipes/__tests__/service.test.js +0 -1
- package/dist/recipes/__tests__/service.test.js.map +1 -1
- package/dist/recipes/check-result-processor.d.ts.map +1 -1
- package/dist/recipes/check-result-processor.js +0 -1
- package/dist/recipes/check-result-processor.js.map +1 -1
- package/dist/recipes/service-adhoc.d.ts +24 -0
- package/dist/recipes/service-adhoc.d.ts.map +1 -0
- package/dist/recipes/service-adhoc.js +53 -0
- package/dist/recipes/service-adhoc.js.map +1 -0
- package/dist/recipes/service-check-resolution.d.ts +18 -0
- package/dist/recipes/service-check-resolution.d.ts.map +1 -0
- package/dist/recipes/service-check-resolution.js +65 -0
- package/dist/recipes/service-check-resolution.js.map +1 -0
- package/dist/recipes/service-prepare.d.ts +23 -0
- package/dist/recipes/service-prepare.d.ts.map +1 -0
- package/dist/recipes/service-prepare.js +30 -0
- package/dist/recipes/service-prepare.js.map +1 -0
- package/dist/recipes/service-prewarm.d.ts +12 -0
- package/dist/recipes/service-prewarm.d.ts.map +1 -0
- package/dist/recipes/service-prewarm.js +25 -0
- package/dist/recipes/service-prewarm.js.map +1 -0
- package/dist/recipes/service-session.d.ts +17 -0
- package/dist/recipes/service-session.d.ts.map +1 -0
- package/dist/recipes/service-session.js +78 -0
- package/dist/recipes/service-session.js.map +1 -0
- package/dist/recipes/service.d.ts +2 -19
- package/dist/recipes/service.d.ts.map +1 -1
- package/dist/recipes/service.js +23 -219
- package/dist/recipes/service.js.map +1 -1
- package/dist/scaffold/index.d.ts +3 -0
- package/dist/scaffold/index.d.ts.map +1 -0
- package/dist/scaffold/index.js +3 -0
- package/dist/scaffold/index.js.map +1 -0
- package/dist/scope-augmentation.d.ts +11 -0
- package/dist/scope-augmentation.d.ts.map +1 -1
- package/dist/signalers/loader.d.ts.map +1 -1
- package/dist/signalers/loader.js +0 -2
- package/dist/signalers/loader.js.map +1 -1
- package/dist/targets/loader.d.ts.map +1 -1
- package/dist/targets/loader.js +0 -2
- package/dist/targets/loader.js.map +1 -1
- package/dist/tool.d.ts.map +1 -1
- package/dist/tool.js +12 -16
- package/dist/tool.js.map +1 -1
- package/dist/types/severity.d.ts.map +1 -1
- package/dist/types/severity.js +0 -1
- package/dist/types/severity.js.map +1 -1
- package/package.json +27 -16
- package/dist/cli/fit-runner-views.d.ts +0 -33
- package/dist/cli/fit-runner-views.d.ts.map +0 -1
- package/dist/cli/fit-runner-views.js +0 -92
- package/dist/cli/fit-runner-views.js.map +0 -1
package/dist/cli/fit-runner.js
CHANGED
|
@@ -1,106 +1,60 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
1
|
/**
|
|
3
|
-
* fit-runner —
|
|
4
|
-
*
|
|
5
|
-
* Layer 5 Phase 3 lifted the fit live view out of `opensip-cli`.
|
|
6
|
-
* The state machine (loading → running → done | error), `executeFit`
|
|
7
|
-
* orchestration, `reportToCloud` post-call, and the Ink/React render
|
|
8
|
-
* tree all live here, in the package that owns the fitness command
|
|
9
|
-
* surface. Adding a fourth tool with a live view requires zero CLI
|
|
10
|
-
* edits — each tool ships its own renderer and registers it via
|
|
11
|
-
* `cli.registerLiveView(key, renderer)`.
|
|
12
|
-
*
|
|
13
|
-
* Shared presentational primitives (Banner, RunHeader, Spinner, theme
|
|
14
|
-
* tokens) come from `@opensip-cli/cli-ui`. Tool-specific render
|
|
15
|
-
* pieces (results table, findings block, cloud-report status) live in
|
|
16
|
-
* `cli/fit-runner-views.tsx`; they're imported here so this module
|
|
17
|
-
* stays focused on the state machine and entry point.
|
|
18
|
-
*
|
|
19
|
-
* Single exit-code write path: error-result conditions route through the
|
|
20
|
-
* supplied `setExitCode` callback (`ToolCliContext.setExitCode`) so the CLI keeps
|
|
21
|
-
* its single `process.exitCode` mutator. The findings exit is host-owned
|
|
22
|
-
* (ADR-0035: derived from the envelope verdict in `deliverSignals`). The
|
|
23
|
-
* historical `process.exitCode = N` writes that lived in FitView are
|
|
24
|
-
* gone.
|
|
2
|
+
* fit-runner — live-view entry for `opensip fit` via @opensip-cli/cli-live.
|
|
25
3
|
*/
|
|
26
4
|
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
27
5
|
import { tmpdir } from 'node:os';
|
|
28
6
|
import { join } from 'node:path';
|
|
29
|
-
import {
|
|
7
|
+
import { runToolLiveView } from '@opensip-cli/cli-live';
|
|
30
8
|
import { runOffThreadOrInProcess, currentScope, liveEngineCorrelation, } from '@opensip-cli/core';
|
|
31
|
-
import {
|
|
32
|
-
import
|
|
33
|
-
import { envelopeToFitRows } from './fit/envelope-view.js';
|
|
9
|
+
import { FITNESS_LAYOUT_KEY } from '../identity.js';
|
|
10
|
+
import { buildFitVerboseDetail, envelopeToFitRows } from './fit/envelope-view.js';
|
|
34
11
|
import { buildFitnessSessionPayload } from './fit/result-builders.js';
|
|
35
|
-
import { checkCountLabel,
|
|
36
|
-
import { ResultsTable, WarningsBlock } from './fit-runner-views.js';
|
|
12
|
+
import { checkCountLabel, withCheckCountFromProgress } from './fit-runner-progress.js';
|
|
37
13
|
import { ensureChecksLoaded, executeFit, getEnabledCheckCount } from './fit.js';
|
|
38
|
-
// Theme constants used by tool-specific sub-components below. The shared
|
|
39
|
-
// presentational primitives (Banner, RunHeader, Spinner, ErrorMessage)
|
|
40
|
-
// pull their colors from cli-ui's ThemeProvider; the tool-specific
|
|
41
|
-
// renderers also use useTheme() to stay consistent.
|
|
42
14
|
const FIT_TOOL_TITLE = 'Fitness Checks';
|
|
43
15
|
const FIT_TOOL_DESCRIPTION = 'Scanning your codebase for quality, security, and architecture issues.';
|
|
44
|
-
// Pool-shape surfaces for the shared <LiveProgress> renderer. fit's checks are a
|
|
45
|
-
// dynamic pool (many, counted), not a fixed pipeline — so it renders as one
|
|
46
|
-
// spinner + completed/total counter. The synthetic stage id is 'checks'.
|
|
47
16
|
const FIT_LOADING_SURFACE = { shape: 'pool', label: 'Loading checks...' };
|
|
48
17
|
const FIT_RUNNING_SURFACE = { shape: 'pool', label: 'Running checks...' };
|
|
49
|
-
const NO_PROGRESS = () => {
|
|
50
|
-
// The loading phase has no live event stream yet — LiveProgress renders a bare
|
|
51
|
-
// animated spinner from a no-op subscription.
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* Run fit, translating the engine's monotonic (completed, total) callback into
|
|
55
|
-
* pool-shape ProgressEvents on the `'checks'` stage. Hoisted to module scope so
|
|
56
|
-
* the emit translation isn't a 5th-level nested function inside the runner's
|
|
57
|
-
* effect.
|
|
58
|
-
*/
|
|
59
18
|
function executeFitWithProgress(args, emit) {
|
|
60
19
|
emit({ type: 'stage-start', stage: 'checks', label: 'Running checks...' });
|
|
61
20
|
return executeFit(args, {
|
|
62
21
|
onProgress: (completed, total) => emit({ type: 'stage-progress', stage: 'checks', completed, total }),
|
|
63
22
|
});
|
|
64
23
|
}
|
|
65
|
-
function
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
24
|
+
function fitRowsToLiveRunTable(rows) {
|
|
25
|
+
return rows.map((row) => ({
|
|
26
|
+
unit: row.check,
|
|
27
|
+
status: row.status,
|
|
28
|
+
errors: row.errors,
|
|
29
|
+
warnings: row.warnings,
|
|
30
|
+
durationMs: row.durationMs,
|
|
31
|
+
validated: row.validated,
|
|
32
|
+
ignored: row.ignored,
|
|
33
|
+
itemType: row.itemType,
|
|
34
|
+
}));
|
|
71
35
|
}
|
|
72
|
-
function
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
36
|
+
export async function renderFitLive(args, contextOrDatastore, options) {
|
|
37
|
+
const liveContext = contextOrDatastore && contextOrDatastore.runSession
|
|
38
|
+
? contextOrDatastore
|
|
39
|
+
: undefined;
|
|
40
|
+
const recipe = args.tags && args.tags.length > 0 ? `tags: ${args.tags.join(',')}` : (args.recipe ?? 'default');
|
|
41
|
+
let availableCount = 0;
|
|
42
|
+
return runToolLiveView({
|
|
43
|
+
tool: 'fitness',
|
|
44
|
+
meta: { title: FIT_TOOL_TITLE, description: FIT_TOOL_DESCRIPTION },
|
|
45
|
+
surface: FIT_RUNNING_SURFACE,
|
|
46
|
+
loadingSurface: FIT_LOADING_SURFACE,
|
|
47
|
+
verbose: args.verbose === true,
|
|
48
|
+
quiet: args.quiet === true,
|
|
49
|
+
initialShowRunHeader: false,
|
|
50
|
+
projectPath: args.cwd,
|
|
51
|
+
walkedUp: currentScope()?.projectContext?.walkedUp,
|
|
52
|
+
produce: async (emit, helpers) => {
|
|
85
53
|
await ensureChecksLoaded(args.cwd);
|
|
86
|
-
|
|
87
|
-
if (cancelled)
|
|
88
|
-
return;
|
|
89
|
-
// Execute OFF the main process (ADR-0028): fork the CLI to `fit-run-worker`,
|
|
90
|
-
// which re-bootstraps the full scope and streams progress + the final result
|
|
91
|
-
// over IPC, so this process stays free to animate the spinner + 80ms clock.
|
|
92
|
-
// `runOffThreadOrInProcess` falls back to the in-process closure when forking
|
|
93
|
-
// is disabled/unavailable (OPENSIP_CLI_NO_WORKER) — identical result either
|
|
94
|
-
// way. The worker reads its run spec (the serializable FitOptions) from a
|
|
95
|
-
// temp file we clean up after the run settles.
|
|
54
|
+
availableCount = getEnabledCheckCount();
|
|
96
55
|
const specDir = mkdtempSync(join(tmpdir(), 'fit-worker-'));
|
|
97
56
|
const specPath = join(specDir, 'spec.json');
|
|
98
57
|
writeFileSync(specPath, JSON.stringify(args), 'utf8');
|
|
99
|
-
// Forward the parent run's correlation bag (composition root, Phase 0) so
|
|
100
|
-
// the forked live-engine worker's logs attribute to this run — symmetric to
|
|
101
|
-
// the spawn-path shard-runner. The transport injects OPENSIP_RUN_ID from
|
|
102
|
-
// currentScope()?.runId (B1); the descriptor omits runId and marks the
|
|
103
|
-
// live-engine fork via workerKind.
|
|
104
58
|
const correlation = liveEngineCorrelation(currentScope()?.correlation);
|
|
105
59
|
const run = runOffThreadOrInProcess({
|
|
106
60
|
descriptor: {
|
|
@@ -108,10 +62,23 @@ function FitRunner({ args, setExitCode, onEnvelope, onSession, liveContext, }) {
|
|
|
108
62
|
argv: ['fit-run-worker', specPath],
|
|
109
63
|
...(correlation ? { correlation } : {}),
|
|
110
64
|
},
|
|
111
|
-
inProcess: (
|
|
65
|
+
inProcess: (workerEmit) => executeFitWithProgress(args, workerEmit),
|
|
112
66
|
});
|
|
113
|
-
const subscribe = withCheckCountFromProgress(run.onProgress,
|
|
114
|
-
|
|
67
|
+
const subscribe = withCheckCountFromProgress(run.onProgress, (checkCount) => {
|
|
68
|
+
helpers.setShowRunHeader(true);
|
|
69
|
+
helpers.setHeaderMetadata([
|
|
70
|
+
{ label: 'Recipe', value: recipe },
|
|
71
|
+
{
|
|
72
|
+
label: 'Checks',
|
|
73
|
+
value: checkCountLabel({
|
|
74
|
+
running: checkCount,
|
|
75
|
+
available: availableCount,
|
|
76
|
+
verbose: args.verbose === true,
|
|
77
|
+
}),
|
|
78
|
+
},
|
|
79
|
+
]);
|
|
80
|
+
});
|
|
81
|
+
helpers.setRunning(subscribe);
|
|
115
82
|
let fitResult;
|
|
116
83
|
try {
|
|
117
84
|
fitResult = await run.result;
|
|
@@ -119,167 +86,49 @@ function FitRunner({ args, setExitCode, onEnvelope, onSession, liveContext, }) {
|
|
|
119
86
|
finally {
|
|
120
87
|
rmSync(specDir, { recursive: true, force: true });
|
|
121
88
|
}
|
|
122
|
-
if (cancelled)
|
|
123
|
-
return;
|
|
124
89
|
if (fitResult.result.type === 'error') {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
90
|
+
const err = fitResult.result;
|
|
91
|
+
return {
|
|
92
|
+
kind: 'error',
|
|
93
|
+
message: err.message,
|
|
94
|
+
exitCode: err.exitCode,
|
|
95
|
+
...(err.suggestion === undefined ? {} : { suggestion: err.suggestion }),
|
|
96
|
+
};
|
|
129
97
|
}
|
|
130
98
|
const { result } = fitResult;
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
// Host-owned persistence (host-owned-run-timing Phase 2): the component no
|
|
136
|
-
// longer writes the session. It surfaces the contribution; the host
|
|
137
|
-
// completes the lifecycle and persists after `renderLive` resolves.
|
|
138
|
-
if (result.envelope) {
|
|
139
|
-
onSession?.({
|
|
140
|
-
tool: 'fit',
|
|
141
|
-
cwd: args.cwd,
|
|
142
|
-
recipe: result.envelope.recipe,
|
|
143
|
-
score: result.envelope.verdict.score,
|
|
144
|
-
passed: result.envelope.verdict.passed,
|
|
145
|
-
payload: buildFitnessSessionPayload(result.envelope),
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
// Effectful egress (cloud + `--report-to`) lives at the composition root
|
|
149
|
-
// now (ADR-0011): `renderFitLive` returns this envelope and the tool's
|
|
150
|
-
// `registerLiveView` callback delivers it once the Ink app exits.
|
|
151
|
-
onEnvelope?.(result.envelope);
|
|
152
|
-
setState({
|
|
153
|
-
phase: 'done',
|
|
154
|
-
result,
|
|
155
|
-
warnings,
|
|
156
|
-
checkCount: firstUnitCount(result.envelope),
|
|
157
|
-
availableCount,
|
|
158
|
-
});
|
|
159
|
-
setTimeout(() => exit(), 100);
|
|
160
|
-
})();
|
|
161
|
-
return () => {
|
|
162
|
-
cancelled = true;
|
|
163
|
-
};
|
|
164
|
-
}, []);
|
|
165
|
-
const recipe = args.tags && args.tags.length > 0 ? `tags: ${args.tags.join(',')}` : (args.recipe ?? 'default');
|
|
166
|
-
// Banner + RunHeader both live in <Static> so Ink writes them once above the
|
|
167
|
-
// dynamic redraw region and never touches those bytes again. The dynamic
|
|
168
|
-
// region contains ONLY the things that actually change between frames
|
|
169
|
-
// (spinner during loading/running; summary block during done) — small,
|
|
170
|
-
// stable-width content that Ink can redraw without its line-clear heuristic
|
|
171
|
-
// miscounting and producing overdraw.
|
|
172
|
-
//
|
|
173
|
-
// Static is incremental: items added in later renders are appended below
|
|
174
|
-
// existing static content. We start with just the banner (we don't know
|
|
175
|
-
// checkCount yet during loading), and append the header once checkCount is
|
|
176
|
-
// known. RunHeader's metadata only changes once (when loading→running), and
|
|
177
|
-
// after that it's stable for the rest of the run — perfect Static fit.
|
|
178
|
-
const checkCount = state.phase === 'running' || state.phase === 'done' ? state.checkCount : null;
|
|
179
|
-
const availableCount = state.phase === 'running' || state.phase === 'done' ? state.availableCount : null;
|
|
180
|
-
const staticItems = computeStaticItems(args.quiet === true, checkCount);
|
|
181
|
-
// Presentation settings resolved once in the pre-action hook. The live
|
|
182
|
-
// view runs inside that scope, so it reads the same banner size + version
|
|
183
|
-
// the static path does. `mini` carries the project path in its box, so we
|
|
184
|
-
// drop the separate ProjectHeader line for it (matches App.tsx) and pass
|
|
185
|
-
// the scope's walkedUp so mini keeps the "(found N levels up)" hint.
|
|
186
|
-
const scope = currentScope();
|
|
187
|
-
const ui = scope?.ui;
|
|
188
|
-
const walkedUp = scope?.projectContext?.walkedUp;
|
|
189
|
-
const bannerSize = normalizeBannerSize(ui?.bannerSize);
|
|
190
|
-
const showProjectHeader = bannerSize !== 'mini';
|
|
191
|
-
const renderStaticItem = (item) => {
|
|
192
|
-
if (item === 'banner') {
|
|
193
|
-
return (_jsxs(React.Fragment, { children: [_jsx(Banner, { size: bannerSize, version: ui?.version, projectPath: args.cwd, walkedUp: walkedUp, update: ui?.update }), bannerSize === 'mini' && ui?.update !== undefined && _jsx(UpdateHint, {}), showProjectHeader && _jsx(ProjectHeader, { root: args.cwd, walkedUp: walkedUp })] }, item));
|
|
194
|
-
}
|
|
195
|
-
const metadata = [
|
|
196
|
-
{ label: 'Recipe', value: recipe },
|
|
197
|
-
{
|
|
198
|
-
label: 'Checks',
|
|
199
|
-
value: checkCountLabel({
|
|
200
|
-
running: checkCount ?? 0,
|
|
201
|
-
available: availableCount ?? checkCount ?? 0,
|
|
202
|
-
verbose: args.verbose === true,
|
|
203
|
-
}),
|
|
204
|
-
},
|
|
205
|
-
];
|
|
206
|
-
return (_jsx(RunHeader, { tool: FIT_TOOL_TITLE, description: FIT_TOOL_DESCRIPTION, metadata: metadata }, item));
|
|
207
|
-
};
|
|
208
|
-
const staticHeader = _jsx(Static, { items: staticItems, children: renderStaticItem });
|
|
209
|
-
switch (state.phase) {
|
|
210
|
-
case 'loading': {
|
|
211
|
-
return (_jsxs(_Fragment, { children: [staticHeader, _jsx(Box, { paddingTop: 1, children: _jsx(LiveProgress, { surface: FIT_LOADING_SURFACE, subscribe: NO_PROGRESS }) })] }));
|
|
212
|
-
}
|
|
213
|
-
case 'running': {
|
|
214
|
-
return (_jsxs(_Fragment, { children: [staticHeader, _jsx(LiveProgress, { surface: FIT_RUNNING_SURFACE, subscribe: state.subscribe })] }));
|
|
215
|
-
}
|
|
216
|
-
case 'done': {
|
|
217
|
-
const { envelope, verboseDetail } = state.result;
|
|
218
|
-
const { summary } = envelope.verdict;
|
|
219
|
-
const renderPolicy = { verbose: args.verbose === true };
|
|
220
|
-
// Host-owned timing (via provider from liveContext or outer host wrap):
|
|
221
|
-
// omit explicit durationMs so RunSummary reads from RunTimingProvider.
|
|
222
|
-
// The displayed Duration now matches the value stamped into StoredSession
|
|
223
|
-
// by the host RunTimer at record time.
|
|
224
|
-
// ADR-0021: the verbose surface is driven by args.verbose alone. The
|
|
225
|
-
// detail body renders through the shared viewFindingsGroups producer (same
|
|
226
|
-
// path as the static `fit --verbose | cat` render), not the retired local
|
|
227
|
-
// FindingsBlock.
|
|
228
|
-
const findingsDetail = verboseDetail?.kind === 'findings' && verboseDetail.groups.length > 0
|
|
229
|
-
? verboseDetail
|
|
99
|
+
const envelope = result.envelope;
|
|
100
|
+
const verboseDetail = buildFitVerboseDetail(envelope, { verbose: args.verbose === true });
|
|
101
|
+
const findingsGroups = verboseDetail?.kind === 'findings' && verboseDetail.groups.length > 0
|
|
102
|
+
? verboseDetail.groups
|
|
230
103
|
: undefined;
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
* The fitness tool wires this in via `setUpFitLiveView` / `registerLiveView`.
|
|
261
|
-
* `setExitCode` is the single mutator path on `process.exitCode`; the runner
|
|
262
|
-
* calls it for error-result outcomes (the findings exit is host-owned via the
|
|
263
|
-
* delivered envelope verdict, ADR-0035).
|
|
264
|
-
*/
|
|
265
|
-
export async function renderFitLive(args, contextOrDatastore, options) {
|
|
266
|
-
let envelope;
|
|
267
|
-
let session;
|
|
268
|
-
// A raw DataStore arm is accepted for backward compat but no longer threaded
|
|
269
|
-
// (the host owns persistence). Only a LiveViewContext is forwarded.
|
|
270
|
-
const liveContext = contextOrDatastore && contextOrDatastore.runSession
|
|
271
|
-
? contextOrDatastore
|
|
272
|
-
: undefined;
|
|
273
|
-
const app = render(_jsx(ThemeProvider, { children: _jsx(ClockProvider, { children: _jsx(FitRunner, { args: args, setExitCode: options?.setExitCode, onEnvelope: (e) => {
|
|
274
|
-
envelope = e;
|
|
275
|
-
}, onSession: (c) => {
|
|
276
|
-
session = c;
|
|
277
|
-
}, liveContext: liveContext }) }) }));
|
|
278
|
-
await app.waitUntilExit();
|
|
279
|
-
// Trailing newline so shell prompt starts on a new line.
|
|
280
|
-
process.stdout.write('\n');
|
|
281
|
-
// host-owned-run-timing Phase 3: the host persists the returned session
|
|
282
|
-
// contribution after this live renderer resolves.
|
|
283
|
-
return { envelope, session };
|
|
104
|
+
return {
|
|
105
|
+
kind: 'done',
|
|
106
|
+
done: {
|
|
107
|
+
summary: {
|
|
108
|
+
passed: envelope.verdict.passed,
|
|
109
|
+
errors: envelope.verdict.summary.errors,
|
|
110
|
+
warnings: envelope.verdict.summary.warnings,
|
|
111
|
+
},
|
|
112
|
+
...(findingsGroups === undefined ? {} : { verboseFindings: findingsGroups }),
|
|
113
|
+
...(args.verbose === true
|
|
114
|
+
? { table: fitRowsToLiveRunTable(envelopeToFitRows(envelope)) }
|
|
115
|
+
: {}),
|
|
116
|
+
warnings: fitResult.warnings ?? [],
|
|
117
|
+
},
|
|
118
|
+
envelope,
|
|
119
|
+
session: {
|
|
120
|
+
tool: FITNESS_LAYOUT_KEY,
|
|
121
|
+
cwd: args.cwd,
|
|
122
|
+
recipe: envelope.recipe,
|
|
123
|
+
score: envelope.verdict.score,
|
|
124
|
+
passed: envelope.verdict.passed,
|
|
125
|
+
payload: buildFitnessSessionPayload(envelope),
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
},
|
|
129
|
+
}, {
|
|
130
|
+
setExitCode: options?.setExitCode,
|
|
131
|
+
liveContext,
|
|
132
|
+
});
|
|
284
133
|
}
|
|
285
134
|
//# sourceMappingURL=fit-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fit-runner.js","sourceRoot":"","sources":["../../src/cli/fit-runner.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fit-runner.js","sourceRoot":"","sources":["../../src/cli/fit-runner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fit-worker.d.ts","sourceRoot":"","sources":["../../src/cli/fit-worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fit-worker.d.ts","sourceRoot":"","sources":["../../src/cli/fit-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAgB3B;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBtE;AAED,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,OAAO,EAAE,cAAc,CAiBvE,CAAC"}
|
package/dist/cli/fit-worker.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @fitness-ignore-file detached-promises -- this worker's `send()` helper is synchronous (it calls process.send, which returns immediately); the name-based heuristic mistakes the floating send(...) IPC posts for promise-returning calls. The one genuine async call (executeFit) is awaited.
|
|
2
1
|
/**
|
|
3
2
|
* `fit-run-worker <specPath>` — the headless fit run forked by the live view
|
|
4
3
|
* (ADR-0028). The live runner forks `node <cliScript> fit-run-worker <spec>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fit-worker.js","sourceRoot":"","sources":["../../src/cli/fit-worker.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fit-worker.js","sourceRoot":"","sources":["../../src/cli/fit-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EACL,aAAa,GAId,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAStC,kEAAkE;AAClE,SAAS,IAAI,CAAC,GAAkD;IAC9D,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAe,CAAC;QACtE,IAAI,CAAC;YACH,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE;SAC5E,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE;YACvC,UAAU,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAC/B,IAAI,CAAC;gBACH,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;aACrE,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/D,GAAG,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAyC,aAAa,CAGxF;IACA,IAAI,EAAE,gBAAgB;IACtB,UAAU,EAAE,UAAU;IACtB,WAAW,EACT,6FAA6F;IAC/F,WAAW,EAAE,EAAE;IACf,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC;IAChF,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,YAAY;IACpB,eAAe,EAAE,YAAY;IAC7B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAiB,EAAE;QACxC,MAAM,QAAQ,GAAI,OAAyC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7E,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF,CAAC,CAAC"}
|
package/dist/cli/fit.d.ts
CHANGED
package/dist/cli/fit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fit.d.ts","sourceRoot":"","sources":["../../src/cli/fit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"fit.d.ts","sourceRoot":"","sources":["../../src/cli/fit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAuBH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAShC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAMpE;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAMN;IACE,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GACD;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,CACtE,CAuGA"}
|
package/dist/cli/fit.js
CHANGED
|
@@ -26,6 +26,7 @@ import { buildScopeBasedFileMap } from '../framework/scope-resolver.js';
|
|
|
26
26
|
import { FitnessRecipeService } from '../recipes/service.js';
|
|
27
27
|
import { ensureChecksLoaded, getLoadWarnings } from './fit/check-loader.js';
|
|
28
28
|
import { loadFitConfig, validateLanguagesAgainstAdapters } from './fit/config-loader.js';
|
|
29
|
+
import { fitCommandErrorResult, fitLoadCommandError, fitLoadIsDegraded, } from './fit/load-outcome.js';
|
|
29
30
|
import { runRecipeOrAdHoc, selectRecipe } from './fit/recipe-selector.js';
|
|
30
31
|
import { resolvedFitnessConfig } from './fit/resolved-fitness-config.js';
|
|
31
32
|
import { buildFitEnvelope, buildFitCallbacks, buildFitPresentation, } from './fit/result-builders.js';
|
|
@@ -63,6 +64,10 @@ export { getDisplayName, getIcon } from './fit/display-registry.js';
|
|
|
63
64
|
export async function executeFit(args, opts = {}) {
|
|
64
65
|
logger.info({ evt: 'cli.checks.loading', module: 'cli:fit' });
|
|
65
66
|
await ensureChecksLoaded(args.cwd);
|
|
67
|
+
const loadCommandError = fitLoadCommandError();
|
|
68
|
+
if (loadCommandError !== undefined) {
|
|
69
|
+
return { result: fitCommandErrorResult(loadCommandError) };
|
|
70
|
+
}
|
|
66
71
|
const checkRegistry = currentCheckRegistry();
|
|
67
72
|
logger.info({
|
|
68
73
|
evt: 'cli.checks.loaded',
|
|
@@ -146,6 +151,7 @@ export async function executeFit(args, opts = {}) {
|
|
|
146
151
|
// warnings ride as a sibling field (not on the presentation): the non-Ink
|
|
147
152
|
// paths surface them via emitWarningsToStderr, the live runner in its summary.
|
|
148
153
|
...(warnings.length > 0 ? { warnings } : {}),
|
|
154
|
+
...(fitLoadIsDegraded() ? { runOutcome: 'degraded' } : {}),
|
|
149
155
|
};
|
|
150
156
|
}
|
|
151
157
|
//# sourceMappingURL=fit.js.map
|
package/dist/cli/fit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fit.js","sourceRoot":"","sources":["../../src/cli/fit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AASlC,8EAA8E;AAC9E,mEAAmE;AACnE,kEAAkE;AAClE,wEAAwE;AACxE,iDAAiD;AACjD,8EAA8E;AAE9E,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAyBpE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAgB,EAChB,OAA0B,EAAE;
|
|
1
|
+
{"version":3,"file":"fit.js","sourceRoot":"","sources":["../../src/cli/fit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AASlC,8EAA8E;AAC9E,mEAAmE;AACnE,kEAAkE;AAClE,wEAAwE;AACxE,iDAAiD;AACjD,8EAA8E;AAE9E,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAyBpE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAgB,EAChB,OAA0B,EAAE;IAe5B,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9D,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnC,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,EAAE,MAAM,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAC7D,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,mBAAmB;QACxB,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,aAAa,CAAC,WAAW,EAAE,CAAC,MAAM;KAC/C,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,OAAO,IAAI,YAAY;QAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC;IACnE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC;IAExE,+EAA+E;IAC/E,+EAA+E;IAC/E,6EAA6E;IAC7E,iEAAiE;IACjE,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;IAEhD,+EAA+E;IAC/E,+EAA+E;IAC/E,wBAAwB;IACxB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE;QACpC,UAAU,EAAE,eAAe,EAAE,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM;KACtE,CAAC,CAAC;IACH,IAAI,OAAO,IAAI,UAAU;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;IAC/D,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC;IAElC,MAAM,kBAAkB,GAAG,MAAM,gCAAgC,CAAC,cAAc,CAAC,CAAC;IAElF,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtD,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IAC9E,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,sBAAsB,CAAC,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5F,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAElE,yGAAyG;IACzG,+GAA+G;IAC/G,mFAAmF;IACnF,MAAM,eAAe,GAAG;QACtB,GAAG,CAAC,eAAe,EAAE,cAAc,IAAI,EAAE,CAAC;QAC1C,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;KACxB,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC;QACvC,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,gBAAgB;QAChB,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QAC7C,cAAc,EAAE,eAAe;QAC/B,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,aAAa,CAAC,cAAc;KAC7C,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC3E,IAAI,OAAO,IAAI,gBAAgB;QAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAC3E,MAAM,aAAa,GAAG,gBAAgB,CAAC;IAEvC,4EAA4E;IAC5E,oEAAoE;IACpE,2EAA2E;IAC3E,2EAA2E;IAC3E,gDAAgD;IAChD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAE9E,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,CAAC,GAAG,eAAe,EAAE,EAAE,GAAG,kBAAkB,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAG,oBAAoB,CAAC;QAClC,IAAI;QACJ,aAAa;QACb,QAAQ;QACR,eAAe;QACf,UAAU;KACX,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,kBAAkB;QACvB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;QAC7B,MAAM,EAAE,aAAa,CAAC,OAAO;QAC7B,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,WAAW;QAC9C,UAAU,EAAE,aAAa,CAAC,UAAU;KACrC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,QAAQ;QACR,0EAA0E;QAC1E,+EAA+E;QAC/E,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-data.d.ts","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"report-data.d.ts","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAanD,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;CAC3C;AAED,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAwCD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkCjG"}
|
package/dist/cli/report-data.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @fitness-ignore-file error-handling-quality -- report-data collection is a best-effort UX action: signalers-config load failures degrade gracefully to ungoverned mode (surfaced separately by the fitness run). The CLI composition root owns file-writing and browser launch; this module only contributes fitness's catalog inputs.
|
|
2
1
|
/**
|
|
3
2
|
* report-data contribution — fitness's inputs to the cross-tool HTML
|
|
4
3
|
* report.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-data.js","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"report-data.js","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAsCvE,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,SAAS,mBAAmB,CAAC,SAA6B;IACxD,OAAO,SAAS,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CAAC,UAAmB;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,IAAI,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;QACnE,wDAAwD;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAAgB;IAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,EAAE,WAAW,CAAC;IACrD,MAAM,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAwB,aAAa,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3E,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;YACvB,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YACvC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW;YACrC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe;YAC7C,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACpC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,QAAQ;YAC/C,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC;SACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAyB,CAAC,GAAG,qBAAqB,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAC1F,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACzB,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;QAC3B,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI;QACtB,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,IAAI,MAAM;KACvC,CAAC,CACH,CAAC;IAEF,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @fitness-ignore-file file-length-limit -- behavior fixture suite; related scenarios stay together while covered domains are split into focused tests.
|
|
2
1
|
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
2
|
import { tmpdir } from 'node:os';
|
|
4
3
|
import { dirname, join } from 'node:path';
|