@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/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
- async function runFlowExtract(opts) {
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); // monorepo default: scan cwd
77
- logger.header('vyuh-dxkit flow extract');
78
- const model = await (0, gather_1.gatherFlowModel)({
79
- roots,
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
- logger.info(JSON.stringify({ ...summary, outDir, files: Object.keys(files) }));
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
@@ -1 +1 @@
1
- {"version":3,"file":"flow-cli.js","sourceRoot":"","sources":["../src/flow-cli.ts"],"names":[],"mappings":"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"}
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.19.0",
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",