@vyuhlabs/dxkit 2.19.0 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +38 -13
- package/dist/cli.js.map +1 -1
- package/dist/dashboard/graph-adapter.d.ts.map +1 -1
- package/dist/dashboard/graph-adapter.js +1 -4
- package/dist/dashboard/graph-adapter.js.map +1 -1
- package/dist/explore/flow-graph.d.ts +62 -0
- package/dist/explore/flow-graph.d.ts.map +1 -0
- package/dist/explore/flow-graph.js +202 -0
- package/dist/explore/flow-graph.js.map +1 -0
- package/dist/explore/flow-view.d.ts +33 -0
- package/dist/explore/flow-view.d.ts.map +1 -0
- package/dist/explore/flow-view.js +85 -0
- package/dist/explore/flow-view.js.map +1 -0
- package/dist/explore/load.d.ts.map +1 -1
- package/dist/explore/load.js +16 -3
- package/dist/explore/load.js.map +1 -1
- package/dist/explore/queries.d.ts +92 -1
- package/dist/explore/queries.d.ts.map +1 -1
- package/dist/explore/queries.js +142 -0
- package/dist/explore/queries.js.map +1 -1
- package/dist/explore/types.d.ts +56 -3
- package/dist/explore/types.d.ts.map +1 -1
- package/dist/explore/types.js +10 -2
- package/dist/explore/types.js.map +1 -1
- package/dist/flow-cli.d.ts +22 -0
- package/dist/flow-cli.d.ts.map +1 -1
- package/dist/flow-cli.js +108 -6
- package/dist/flow-cli.js.map +1 -1
- package/package.json +1 -1
package/dist/flow-cli.js
CHANGED
|
@@ -39,12 +39,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
39
39
|
})();
|
|
40
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
41
|
exports.runFlowExtract = runFlowExtract;
|
|
42
|
+
exports.runFlowMap = runFlowMap;
|
|
43
|
+
exports.runFlowTrace = runFlowTrace;
|
|
42
44
|
const fs = __importStar(require("fs"));
|
|
43
45
|
const path = __importStar(require("path"));
|
|
44
46
|
const logger = __importStar(require("./logger"));
|
|
45
47
|
const gather_1 = require("./analyzers/flow/gather");
|
|
46
48
|
const csv_1 = require("./analyzers/flow/csv");
|
|
47
49
|
const model_1 = require("./analyzers/flow/model");
|
|
50
|
+
const flow_view_1 = require("./explore/flow-view");
|
|
48
51
|
/** Host-helper strip prefixes from `.dxkit/policy.json:flow.stripUrlPrefixes`. */
|
|
49
52
|
function readStripPrefixes(cwd) {
|
|
50
53
|
try {
|
|
@@ -59,6 +62,15 @@ function readStripPrefixes(cwd) {
|
|
|
59
62
|
return [];
|
|
60
63
|
}
|
|
61
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Emit a machine payload to stdout. In `--json` mode cli.ts routes all logger
|
|
67
|
+
* prose to stderr (`setJsonMode`), so the JSON contract requires writing the
|
|
68
|
+
* payload straight to stdout — never through the logger, which would land it on
|
|
69
|
+
* stderr and corrupt the contract. Mirrors the allowlist / reviewers CLIs.
|
|
70
|
+
*/
|
|
71
|
+
function emitJson(payload) {
|
|
72
|
+
process.stdout.write(JSON.stringify(payload) + '\n');
|
|
73
|
+
}
|
|
62
74
|
function splitPaths(value, cwd) {
|
|
63
75
|
return (value ?? '')
|
|
64
76
|
.split(',')
|
|
@@ -66,20 +78,28 @@ function splitPaths(value, cwd) {
|
|
|
66
78
|
.filter(Boolean)
|
|
67
79
|
.map((s) => path.resolve(cwd, s));
|
|
68
80
|
}
|
|
69
|
-
|
|
81
|
+
/** Resolve scan roots from --frontend/--backend, defaulting to cwd (monorepo). */
|
|
82
|
+
function resolveRoots(opts) {
|
|
70
83
|
const roots = [];
|
|
71
84
|
if (opts.frontend)
|
|
72
85
|
roots.push(path.resolve(opts.cwd, opts.frontend));
|
|
73
86
|
if (opts.backend)
|
|
74
87
|
roots.push(path.resolve(opts.cwd, opts.backend));
|
|
75
88
|
if (roots.length === 0)
|
|
76
|
-
roots.push(opts.cwd);
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
89
|
+
roots.push(opts.cwd);
|
|
90
|
+
return roots;
|
|
91
|
+
}
|
|
92
|
+
/** Gather one flow model — shared by extract / map / trace. */
|
|
93
|
+
async function gatherModel(opts) {
|
|
94
|
+
return (0, gather_1.gatherFlowModel)({
|
|
95
|
+
roots: resolveRoots(opts),
|
|
80
96
|
specs: splitPaths(opts.specs, opts.cwd),
|
|
81
97
|
stripUrlPrefixes: readStripPrefixes(opts.cwd),
|
|
82
98
|
});
|
|
99
|
+
}
|
|
100
|
+
async function runFlowExtract(opts) {
|
|
101
|
+
logger.header('vyuh-dxkit flow extract');
|
|
102
|
+
const model = await gatherModel(opts);
|
|
83
103
|
const summary = (0, model_1.summarize)(model);
|
|
84
104
|
const outDir = path.resolve(opts.cwd, opts.out ?? 'csv_output');
|
|
85
105
|
fs.mkdirSync(outDir, { recursive: true });
|
|
@@ -88,11 +108,93 @@ async function runFlowExtract(opts) {
|
|
|
88
108
|
fs.writeFileSync(path.join(outDir, name), content);
|
|
89
109
|
}
|
|
90
110
|
if (opts.json) {
|
|
91
|
-
|
|
111
|
+
emitJson({ ...summary, outDir, files: Object.keys(files) });
|
|
92
112
|
return;
|
|
93
113
|
}
|
|
94
114
|
const pct = summary.calls ? Math.round((100 * summary.resolved) / summary.calls) : 0;
|
|
95
115
|
logger.success(`${summary.calls} client calls, ${summary.routes} routes · ${summary.resolved}/${summary.calls} bound (${pct}%)`);
|
|
96
116
|
logger.info(`CSVs written to ${outDir} — ${Object.keys(files).join(', ')}`);
|
|
97
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* `vyuh-dxkit flow` — the traceability map. Writes the flow overlay onto
|
|
120
|
+
* graph.json (the native artifact the dashboard + gate also read) and prints
|
|
121
|
+
* every served endpoint with how many UI surfaces consume it, plus the
|
|
122
|
+
* served-but-unconsumed set (dead-route or cross-repo candidates).
|
|
123
|
+
*/
|
|
124
|
+
async function runFlowMap(opts) {
|
|
125
|
+
if (!opts.json)
|
|
126
|
+
logger.header('vyuh-dxkit flow');
|
|
127
|
+
const model = await gatherModel(opts);
|
|
128
|
+
const map = (0, flow_view_1.buildFlowMap)(opts.cwd, model);
|
|
129
|
+
if (opts.json) {
|
|
130
|
+
emitJson(map);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
logger.success(`${map.totalEndpoints} endpoints · ${map.totalBindings} UI→API bindings · ${map.unconsumedEndpoints.length} unconsumed`);
|
|
134
|
+
if (map.endpoints.length) {
|
|
135
|
+
logger.info('');
|
|
136
|
+
logger.info('Consumed endpoints (by UI surfaces):');
|
|
137
|
+
for (const row of map.endpoints) {
|
|
138
|
+
const files = row.consumerFiles.slice(0, 3).join(', ');
|
|
139
|
+
const more = row.consumerFiles.length > 3 ? ` +${row.consumerFiles.length - 3} more` : '';
|
|
140
|
+
logger.info(` ${row.endpoint.label} ← ${row.consumerCount} call(s): ${files}${more}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (map.unconsumedEndpoints.length) {
|
|
144
|
+
logger.info('');
|
|
145
|
+
logger.info('Served but unconsumed (dead route or cross-repo consumer):');
|
|
146
|
+
for (const ep of map.unconsumedEndpoints.slice(0, 20)) {
|
|
147
|
+
logger.info(` ${ep.label}`);
|
|
148
|
+
}
|
|
149
|
+
if (map.unconsumedEndpoints.length > 20) {
|
|
150
|
+
logger.info(` … and ${map.unconsumedEndpoints.length - 20} more`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
logger.info('');
|
|
154
|
+
logger.info('Trace one: vyuh-dxkit flow trace "<METHOD> <path>"');
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* `vyuh-dxkit flow trace "<METHOD> <path>"` — the full trace for one endpoint:
|
|
158
|
+
* its served-side handler + every UI call site + the change blast radius.
|
|
159
|
+
*/
|
|
160
|
+
async function runFlowTrace(opts) {
|
|
161
|
+
if (!opts.json)
|
|
162
|
+
logger.header('vyuh-dxkit flow trace');
|
|
163
|
+
const model = await gatherModel(opts);
|
|
164
|
+
const { trace, candidates } = (0, flow_view_1.buildFlowTrace)(opts.cwd, model, opts.target);
|
|
165
|
+
if (opts.json) {
|
|
166
|
+
emitJson({ trace, candidates });
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (!trace.found || !trace.endpoint) {
|
|
170
|
+
logger.fail(`No endpoint matches "${opts.target}".`);
|
|
171
|
+
if (candidates.length) {
|
|
172
|
+
logger.info('Known endpoints:');
|
|
173
|
+
for (const c of candidates.slice(0, 20))
|
|
174
|
+
logger.info(` ${c}`);
|
|
175
|
+
if (candidates.length > 20)
|
|
176
|
+
logger.info(` … and ${candidates.length - 20} more`);
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const ep = trace.endpoint;
|
|
181
|
+
logger.success(ep.label);
|
|
182
|
+
logger.info(` handler: ${trace.handler ?? '(unknown)'} · via: ${ep.via}`);
|
|
183
|
+
logger.info(` served at: ${ep.sourceFile}${ep.line ? `:${ep.line}` : ''}`);
|
|
184
|
+
logger.info('');
|
|
185
|
+
if (trace.consumers.length) {
|
|
186
|
+
logger.info(`Consumed by ${trace.consumers.length} UI call site(s):`);
|
|
187
|
+
for (const c of trace.consumers) {
|
|
188
|
+
const sym = c.symbol ? `${c.symbol} ` : '';
|
|
189
|
+
logger.info(` ${sym}${c.file}${c.line ? `:${c.line}` : ''}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
logger.info('No UI call site in this scan consumes it.');
|
|
194
|
+
}
|
|
195
|
+
const br = trace.blastRadius;
|
|
196
|
+
logger.info('');
|
|
197
|
+
logger.info(`Blast radius: ${br.directConsumers} direct consumer(s) in ${br.consumerFiles} file(s)` +
|
|
198
|
+
(br.upstreamCallers ? `, ${br.upstreamCallers} upstream caller(s)` : ''));
|
|
199
|
+
}
|
|
98
200
|
//# sourceMappingURL=flow-cli.js.map
|
package/dist/flow-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-cli.js","sourceRoot":"","sources":["../src/flow-cli.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"flow-cli.js","sourceRoot":"","sources":["../src/flow-cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vyuhlabs/dxkit",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.20.0",
|
|
4
4
|
"description": "A deterministic stop condition and code-graph context layer for AI coding agents: gives agents a code graph to make changes, then blocks only net-new detector-backed regressions at the stop boundary, with no model in the gate.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Vyuh Labs",
|