@vyuhlabs/dxkit 2.21.1 → 2.22.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 +47 -0
- package/dist/analyzers/flow/config.d.ts +10 -0
- package/dist/analyzers/flow/config.d.ts.map +1 -1
- package/dist/analyzers/flow/config.js +29 -0
- package/dist/analyzers/flow/config.js.map +1 -1
- package/dist/analyzers/flow/contract.d.ts +12 -0
- package/dist/analyzers/flow/contract.d.ts.map +1 -1
- package/dist/analyzers/flow/contract.js +20 -0
- package/dist/analyzers/flow/contract.js.map +1 -1
- package/dist/analyzers/flow/diagnose.d.ts +62 -0
- package/dist/analyzers/flow/diagnose.d.ts.map +1 -0
- package/dist/analyzers/flow/diagnose.js +120 -0
- package/dist/analyzers/flow/diagnose.js.map +1 -0
- package/dist/analyzers/flow/publish.d.ts +47 -0
- package/dist/analyzers/flow/publish.d.ts.map +1 -0
- package/dist/analyzers/flow/publish.js +146 -0
- package/dist/analyzers/flow/publish.js.map +1 -0
- package/dist/analyzers/flow/setup.d.ts +71 -0
- package/dist/analyzers/flow/setup.d.ts.map +1 -0
- package/dist/analyzers/flow/setup.js +136 -0
- package/dist/analyzers/flow/setup.js.map +1 -0
- package/dist/baseline/check.d.ts.map +1 -1
- package/dist/baseline/check.js +10 -6
- package/dist/baseline/check.js.map +1 -1
- package/dist/baseline/flow-gate-check.d.ts +16 -7
- package/dist/baseline/flow-gate-check.d.ts.map +1 -1
- package/dist/baseline/flow-gate-check.js +17 -7
- package/dist/baseline/flow-gate-check.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +52 -2
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts +7 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +38 -1
- package/dist/doctor.js.map +1 -1
- package/dist/flow-cli.d.ts +10 -0
- package/dist/flow-cli.d.ts.map +1 -1
- package/dist/flow-cli.js +46 -0
- package/dist/flow-cli.js.map +1 -1
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +6 -0
- package/dist/generator.js.map +1 -1
- package/dist/prompts.d.ts +15 -0
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +66 -0
- package/dist/prompts.js.map +1 -1
- package/dist/workspace.d.ts +52 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +130 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +1 -1
- package/templates/.claude/skills/dxkit-config/SKILL.md +14 -0
- package/templates/.claude/skills/dxkit-fix/SKILL.md +2 -0
- package/templates/.claude/skills/dxkit-flow/SKILL.md +83 -0
- package/templates/.claude/skills/dxkit-hooks/SKILL.md +1 -1
- package/templates/.claude/skills/dxkit-init/SKILL.md +5 -0
- package/templates/.claude/skills/dxkit-onboard/SKILL.md +2 -0
package/dist/flow-cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-cli.d.ts","sourceRoot":"","sources":["../src/flow-cli.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"flow-cli.d.ts","sourceRoot":"","sources":["../src/flow-cli.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AA8CD,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5E;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCrE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC5F;AAeD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BzE;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCzE"}
|
package/dist/flow-cli.js
CHANGED
|
@@ -42,6 +42,7 @@ exports.runFlowExtract = runFlowExtract;
|
|
|
42
42
|
exports.runFlowMap = runFlowMap;
|
|
43
43
|
exports.runFlowTrace = runFlowTrace;
|
|
44
44
|
exports.runFlowRefresh = runFlowRefresh;
|
|
45
|
+
exports.runFlowPublish = runFlowPublish;
|
|
45
46
|
const child_process_1 = require("child_process");
|
|
46
47
|
const fs = __importStar(require("fs"));
|
|
47
48
|
const path = __importStar(require("path"));
|
|
@@ -52,6 +53,7 @@ const model_1 = require("./analyzers/flow/model");
|
|
|
52
53
|
const flow_view_1 = require("./explore/flow-view");
|
|
53
54
|
const config_1 = require("./analyzers/flow/config");
|
|
54
55
|
const contract_1 = require("./analyzers/flow/contract");
|
|
56
|
+
const publish_1 = require("./analyzers/flow/publish");
|
|
55
57
|
/**
|
|
56
58
|
* Emit a machine payload to stdout. In `--json` mode cli.ts routes all logger
|
|
57
59
|
* prose to stderr (`setJsonMode`), so the JSON contract requires writing the
|
|
@@ -242,4 +244,48 @@ async function runFlowRefresh(opts) {
|
|
|
242
244
|
logger.info('');
|
|
243
245
|
logger.info('Commit these so the counterpart repo can gate against them.');
|
|
244
246
|
}
|
|
247
|
+
/**
|
|
248
|
+
* `vyuh-dxkit flow publish` — the multi-repo handshake. Reads
|
|
249
|
+
* `.dxkit/workspace.json`, gathers every participant's served routes (from its
|
|
250
|
+
* local path, or pinned at a git ref), and writes this repo's `served.json` as
|
|
251
|
+
* the UNION of the whole mesh — so this repo's gate resolves calls against
|
|
252
|
+
* services it does not co-locate. With no participants it publishes this repo's
|
|
253
|
+
* own served/consumed (the monorepo case). See `flow refresh` for the
|
|
254
|
+
* single-repo snapshot without the mesh union.
|
|
255
|
+
*/
|
|
256
|
+
async function runFlowPublish(opts) {
|
|
257
|
+
if (!opts.json)
|
|
258
|
+
logger.header('vyuh-dxkit flow publish');
|
|
259
|
+
const config = (0, config_1.readFlowConfig)(opts.cwd);
|
|
260
|
+
const commitSha = headCommitSha(opts.cwd);
|
|
261
|
+
const result = await (0, publish_1.publishFlow)(opts.cwd, {
|
|
262
|
+
stripUrlPrefixes: config.stripUrlPrefixes,
|
|
263
|
+
specs: [
|
|
264
|
+
...splitPaths(opts.specs, opts.cwd),
|
|
265
|
+
...config.specs.map((s) => path.resolve(opts.cwd, s)),
|
|
266
|
+
],
|
|
267
|
+
generatedAt: new Date().toISOString(),
|
|
268
|
+
...(commitSha !== undefined ? { commitSha } : {}),
|
|
269
|
+
});
|
|
270
|
+
if (opts.json) {
|
|
271
|
+
emitJson({
|
|
272
|
+
servedPath: result.servedPath,
|
|
273
|
+
consumedPath: result.consumedPath,
|
|
274
|
+
totalServedRoutes: result.totalServedRoutes,
|
|
275
|
+
consumedBindings: result.consumedBindings,
|
|
276
|
+
contentHash: result.contentHash,
|
|
277
|
+
participants: result.participants,
|
|
278
|
+
});
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
logger.success(`Published mesh contract: ${result.totalServedRoutes} served route(s) across ${result.participants.length} participant(s) + this repo (hash ${result.contentHash}).`);
|
|
282
|
+
for (const p of result.participants) {
|
|
283
|
+
const detail = p.source === 'missing' ? 'path not found — skipped' : `${p.routes} route(s) (${p.source})`;
|
|
284
|
+
logger.info(` • ${p.name}: ${detail}`);
|
|
285
|
+
}
|
|
286
|
+
logger.info(` ${path.relative(opts.cwd, result.servedPath)}`);
|
|
287
|
+
logger.info(` ${path.relative(opts.cwd, result.consumedPath)}`);
|
|
288
|
+
logger.info('');
|
|
289
|
+
logger.info('Commit these so this repo can gate against the whole mesh offline.');
|
|
290
|
+
}
|
|
245
291
|
//# 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/dist/generator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAsKnE,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,OAAO,EACd,OAAO,UAAQ,EACf,eAAe,UAAQ,GACtB,OAAO,CAAC,cAAc,CAAC,CAmHzB"}
|
package/dist/generator.js
CHANGED
|
@@ -183,6 +183,12 @@ const DXKIT_SKILLS = [
|
|
|
183
183
|
// ledger, and switches the security-only / full-debt posture. The
|
|
184
184
|
// operator surface for the deterministic preflight/postflight layer.
|
|
185
185
|
'dxkit-loop',
|
|
186
|
+
// dxkit-flow: configure/diagnose/fix the UI→API integration gate.
|
|
187
|
+
// Thin orchestration over the CLI — setup folds into `init --flow`,
|
|
188
|
+
// diagnose reads `doctor`'s flow section, fix repairs a net-new
|
|
189
|
+
// broken integration the guardrail flagged (never suppresses it),
|
|
190
|
+
// and the handshake mode drives `flow publish` for cross-repo meshes.
|
|
191
|
+
'dxkit-flow',
|
|
186
192
|
];
|
|
187
193
|
async function generate(targetDir, config, mode, force, _noScan = false, withDxkitAgents = false) {
|
|
188
194
|
const variables = (0, constants_1.buildVariables)(config);
|
package/dist/generator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|
package/dist/prompts.d.ts
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import { DetectedStack, ResolvedConfig, GenerationMode } from './types';
|
|
2
|
+
import type { FlowDetection, FlowSetupDecision } from './analyzers/flow/setup';
|
|
3
|
+
/**
|
|
4
|
+
* The interactive flow-setup step folded into `init` (there is no standalone
|
|
5
|
+
* `flow init`). Called only when `detectFlowTopology` found a UI→API surface;
|
|
6
|
+
* a repo with none never reaches here, so init stays silent on non-flow repos.
|
|
7
|
+
*
|
|
8
|
+
* Non-interactive (`--yes` / `--detect`, or `forceOn` from `--flow`) takes the
|
|
9
|
+
* gentle default: `warn` posture plus the dominant host-helper strip-prefix.
|
|
10
|
+
* Interactive lets the user pick the posture (with a one-line description of
|
|
11
|
+
* each) and confirm the auto-detected strip-prefix + services.
|
|
12
|
+
*/
|
|
13
|
+
export declare function promptFlowSetup(detection: FlowDetection, options: {
|
|
14
|
+
yes: boolean;
|
|
15
|
+
forceOn: boolean;
|
|
16
|
+
}): Promise<FlowSetupDecision>;
|
|
2
17
|
export declare function promptForConfig(detected: DetectedStack, options: {
|
|
3
18
|
yes: boolean;
|
|
4
19
|
detect: boolean;
|
package/dist/prompts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAuB/E;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC1C,OAAO,CAAC,iBAAiB,CAAC,CAwD5B;AAiBD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CAiE3D"}
|
package/dist/prompts.js
CHANGED
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.promptFlowSetup = promptFlowSetup;
|
|
36
37
|
exports.promptForConfig = promptForConfig;
|
|
37
38
|
const readline = __importStar(require("readline/promises"));
|
|
38
39
|
const process_1 = require("process");
|
|
@@ -49,6 +50,71 @@ async function confirm(rl, question, defaultYes) {
|
|
|
49
50
|
return defaultYes;
|
|
50
51
|
return answer.trim().toLowerCase().startsWith('y');
|
|
51
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* The interactive flow-setup step folded into `init` (there is no standalone
|
|
55
|
+
* `flow init`). Called only when `detectFlowTopology` found a UI→API surface;
|
|
56
|
+
* a repo with none never reaches here, so init stays silent on non-flow repos.
|
|
57
|
+
*
|
|
58
|
+
* Non-interactive (`--yes` / `--detect`, or `forceOn` from `--flow`) takes the
|
|
59
|
+
* gentle default: `warn` posture plus the dominant host-helper strip-prefix.
|
|
60
|
+
* Interactive lets the user pick the posture (with a one-line description of
|
|
61
|
+
* each) and confirm the auto-detected strip-prefix + services.
|
|
62
|
+
*/
|
|
63
|
+
async function promptFlowSetup(detection, options) {
|
|
64
|
+
const defaultPrefixes = detection.suggestedStripPrefixes.slice(0, 1);
|
|
65
|
+
// Non-interactive default: warn + the dominant strip-prefix, no participants
|
|
66
|
+
// (recording multiple services is an explicit interactive confirm).
|
|
67
|
+
if (options.yes || options.forceOn) {
|
|
68
|
+
return { mode: 'warn', stripUrlPrefixes: defaultPrefixes };
|
|
69
|
+
}
|
|
70
|
+
const rl = readline.createInterface({ input: process_1.stdin, output: process_1.stdout });
|
|
71
|
+
try {
|
|
72
|
+
logger.header('UI→API integration gate');
|
|
73
|
+
logger.info(`Detected ${detection.callCount} client call(s) → ${detection.routeCount} route(s) ` +
|
|
74
|
+
`(${detection.resolvedCount} already resolved).`);
|
|
75
|
+
if (detection.topology !== 'monorepo') {
|
|
76
|
+
logger.info(`This repo has only the ${detection.topology === 'consumer-only' ? 'client' : 'server'} ` +
|
|
77
|
+
`side; the gate resolves calls against a counterpart contract (set up later with ` +
|
|
78
|
+
`cross-repo publish) and stays inert until one is present.`);
|
|
79
|
+
}
|
|
80
|
+
console.log(''); // slop-ok
|
|
81
|
+
console.log(' How should a PR that breaks an integration be treated?'); // slop-ok
|
|
82
|
+
console.log(' warn surface broken integrations as warnings (recommended)'); // slop-ok
|
|
83
|
+
console.log(' block fail the check on an exact broken integration (confidence-gated)'); // slop-ok
|
|
84
|
+
console.log(' off scaffold config only, do not gate yet'); // slop-ok
|
|
85
|
+
const mode = await selectMode(rl, 'Posture?', 'warn');
|
|
86
|
+
let stripUrlPrefixes = [];
|
|
87
|
+
if (detection.suggestedStripPrefixes.length > 0) {
|
|
88
|
+
const top = detection.suggestedStripPrefixes[0];
|
|
89
|
+
const ok = await confirm(rl, `Strip base-URL prefix "${top}" so calls match served routes?`, true);
|
|
90
|
+
if (ok)
|
|
91
|
+
stripUrlPrefixes = [top];
|
|
92
|
+
}
|
|
93
|
+
let participants;
|
|
94
|
+
if (detection.detectedServices.length >= 2) {
|
|
95
|
+
const list = detection.detectedServices.join(', ');
|
|
96
|
+
const ok = await confirm(rl, `Detected ${detection.detectedServices.length} services (${list}). Record them as participants?`, true);
|
|
97
|
+
if (ok)
|
|
98
|
+
participants = detection.detectedServices.map((name) => ({ name, path: name }));
|
|
99
|
+
}
|
|
100
|
+
return { mode, stripUrlPrefixes, ...(participants ? { participants } : {}) };
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
rl.close();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** Ask for a flow posture, re-prompting until a valid value (or the default on
|
|
107
|
+
* an empty answer). Kept local — the only three-way select dxkit prompts for. */
|
|
108
|
+
async function selectMode(rl, question, defaultValue) {
|
|
109
|
+
for (;;) {
|
|
110
|
+
const answer = (await rl.question(` ${question} [${defaultValue}]: `)).trim().toLowerCase();
|
|
111
|
+
if (!answer)
|
|
112
|
+
return defaultValue;
|
|
113
|
+
if (answer === 'warn' || answer === 'block' || answer === 'off')
|
|
114
|
+
return answer;
|
|
115
|
+
logger.warn('Enter one of: warn, block, off.');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
52
118
|
async function promptForConfig(detected, options) {
|
|
53
119
|
// Non-interactive: accept all defaults
|
|
54
120
|
if (options.yes || options.detect) {
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `.dxkit/workspace.json` — the cross-repo participants primitive.
|
|
3
|
+
*
|
|
4
|
+
* A deliberately shared seam, NOT nested under `flow`: it names the repos /
|
|
5
|
+
* services that make up a system, and flow contributes the FIRST relationship
|
|
6
|
+
* over it (consumer→provider api-bindings). Future cross-repo concerns
|
|
7
|
+
* (shared-datastore, emits/consumes-event, build-dependency) read the same
|
|
8
|
+
* participant list, so the primitive lives at the top level rather than inside
|
|
9
|
+
* any one feature's config.
|
|
10
|
+
*
|
|
11
|
+
* A `participant` is a repo/service with a source path and optional base URLs
|
|
12
|
+
* (the addresses its served routes answer on). An `external` is a third-party
|
|
13
|
+
* API addressed by base URL — optionally with an OpenAPI spec dxkit consumes to
|
|
14
|
+
* verify calls — that this system talks to but does not serve.
|
|
15
|
+
*
|
|
16
|
+
* Single reader/writer of the file (Rule 2). Fail-open: a missing or malformed
|
|
17
|
+
* file yields `null` (no participants), never a throw — the same posture every
|
|
18
|
+
* other flow surface takes toward optional config.
|
|
19
|
+
*/
|
|
20
|
+
/** A repo/service in the system — a source root plus the base URLs its served
|
|
21
|
+
* routes answer on (used to attribute a consumed call to the provider it
|
|
22
|
+
* targets). `path` is repo-relative or a `../sibling` path. */
|
|
23
|
+
export interface WorkspaceParticipant {
|
|
24
|
+
readonly name: string;
|
|
25
|
+
readonly path: string;
|
|
26
|
+
readonly baseUrls?: readonly string[];
|
|
27
|
+
/** Git ref to pin the participant's contract at when publishing (e.g. `main`).
|
|
28
|
+
* Omitted → gather from the participant's current working tree. */
|
|
29
|
+
readonly ref?: string;
|
|
30
|
+
}
|
|
31
|
+
/** A third-party API the system consumes but does not serve. `spec` (an
|
|
32
|
+
* OpenAPI/spec file) lets dxkit verify the call shape without serving it. */
|
|
33
|
+
export interface WorkspaceExternal {
|
|
34
|
+
readonly name: string;
|
|
35
|
+
readonly baseUrls?: readonly string[];
|
|
36
|
+
readonly spec?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface Workspace {
|
|
39
|
+
readonly participants: readonly WorkspaceParticipant[];
|
|
40
|
+
readonly external: readonly WorkspaceExternal[];
|
|
41
|
+
}
|
|
42
|
+
/** Absolute path to a repo's workspace file. */
|
|
43
|
+
export declare function workspacePath(cwd: string): string;
|
|
44
|
+
/** Structure-check a parsed workspace object. Returns `null` when it names no
|
|
45
|
+
* participants and no externals (an empty file is indistinguishable from an
|
|
46
|
+
* absent one — both mean "no configured topology"). */
|
|
47
|
+
export declare function normalizeWorkspace(raw: unknown): Workspace | null;
|
|
48
|
+
/** Read `.dxkit/workspace.json`. Fail-open: absent or malformed → `null`. */
|
|
49
|
+
export declare function readWorkspace(cwd: string): Workspace | null;
|
|
50
|
+
/** Write `.dxkit/workspace.json`, creating `.dxkit/` as needed. */
|
|
51
|
+
export declare function writeWorkspace(cwd: string, ws: Workspace): void;
|
|
52
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH;;gEAEgE;AAChE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC;wEACoE;IACpE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;8EAC8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvD,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACjD;AAID,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD;AA+BD;;wDAEwD;AACxD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAWjE;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAQ3D;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAI/D"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `.dxkit/workspace.json` — the cross-repo participants primitive.
|
|
4
|
+
*
|
|
5
|
+
* A deliberately shared seam, NOT nested under `flow`: it names the repos /
|
|
6
|
+
* services that make up a system, and flow contributes the FIRST relationship
|
|
7
|
+
* over it (consumer→provider api-bindings). Future cross-repo concerns
|
|
8
|
+
* (shared-datastore, emits/consumes-event, build-dependency) read the same
|
|
9
|
+
* participant list, so the primitive lives at the top level rather than inside
|
|
10
|
+
* any one feature's config.
|
|
11
|
+
*
|
|
12
|
+
* A `participant` is a repo/service with a source path and optional base URLs
|
|
13
|
+
* (the addresses its served routes answer on). An `external` is a third-party
|
|
14
|
+
* API addressed by base URL — optionally with an OpenAPI spec dxkit consumes to
|
|
15
|
+
* verify calls — that this system talks to but does not serve.
|
|
16
|
+
*
|
|
17
|
+
* Single reader/writer of the file (Rule 2). Fail-open: a missing or malformed
|
|
18
|
+
* file yields `null` (no participants), never a throw — the same posture every
|
|
19
|
+
* other flow surface takes toward optional config.
|
|
20
|
+
*/
|
|
21
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
24
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
25
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
26
|
+
}
|
|
27
|
+
Object.defineProperty(o, k2, desc);
|
|
28
|
+
}) : (function(o, m, k, k2) {
|
|
29
|
+
if (k2 === undefined) k2 = k;
|
|
30
|
+
o[k2] = m[k];
|
|
31
|
+
}));
|
|
32
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
33
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
34
|
+
}) : function(o, v) {
|
|
35
|
+
o["default"] = v;
|
|
36
|
+
});
|
|
37
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
38
|
+
var ownKeys = function(o) {
|
|
39
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
40
|
+
var ar = [];
|
|
41
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
42
|
+
return ar;
|
|
43
|
+
};
|
|
44
|
+
return ownKeys(o);
|
|
45
|
+
};
|
|
46
|
+
return function (mod) {
|
|
47
|
+
if (mod && mod.__esModule) return mod;
|
|
48
|
+
var result = {};
|
|
49
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
50
|
+
__setModuleDefault(result, mod);
|
|
51
|
+
return result;
|
|
52
|
+
};
|
|
53
|
+
})();
|
|
54
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
+
exports.workspacePath = workspacePath;
|
|
56
|
+
exports.normalizeWorkspace = normalizeWorkspace;
|
|
57
|
+
exports.readWorkspace = readWorkspace;
|
|
58
|
+
exports.writeWorkspace = writeWorkspace;
|
|
59
|
+
const fs = __importStar(require("fs"));
|
|
60
|
+
const path = __importStar(require("path"));
|
|
61
|
+
const WORKSPACE_REL = path.join('.dxkit', 'workspace.json');
|
|
62
|
+
/** Absolute path to a repo's workspace file. */
|
|
63
|
+
function workspacePath(cwd) {
|
|
64
|
+
return path.join(cwd, WORKSPACE_REL);
|
|
65
|
+
}
|
|
66
|
+
function stringList(v) {
|
|
67
|
+
return Array.isArray(v) ? v.filter((s) => typeof s === 'string') : [];
|
|
68
|
+
}
|
|
69
|
+
function normalizeParticipant(v) {
|
|
70
|
+
if (!v || typeof v !== 'object')
|
|
71
|
+
return null;
|
|
72
|
+
const r = v;
|
|
73
|
+
if (typeof r.name !== 'string' || typeof r.path !== 'string')
|
|
74
|
+
return null;
|
|
75
|
+
const baseUrls = stringList(r.baseUrls);
|
|
76
|
+
return {
|
|
77
|
+
name: r.name,
|
|
78
|
+
path: r.path,
|
|
79
|
+
...(baseUrls.length ? { baseUrls } : {}),
|
|
80
|
+
...(typeof r.ref === 'string' ? { ref: r.ref } : {}),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function normalizeExternal(v) {
|
|
84
|
+
if (!v || typeof v !== 'object')
|
|
85
|
+
return null;
|
|
86
|
+
const r = v;
|
|
87
|
+
if (typeof r.name !== 'string')
|
|
88
|
+
return null;
|
|
89
|
+
const baseUrls = stringList(r.baseUrls);
|
|
90
|
+
return {
|
|
91
|
+
name: r.name,
|
|
92
|
+
...(baseUrls.length ? { baseUrls } : {}),
|
|
93
|
+
...(typeof r.spec === 'string' ? { spec: r.spec } : {}),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** Structure-check a parsed workspace object. Returns `null` when it names no
|
|
97
|
+
* participants and no externals (an empty file is indistinguishable from an
|
|
98
|
+
* absent one — both mean "no configured topology"). */
|
|
99
|
+
function normalizeWorkspace(raw) {
|
|
100
|
+
if (!raw || typeof raw !== 'object')
|
|
101
|
+
return null;
|
|
102
|
+
const r = raw;
|
|
103
|
+
const participants = Array.isArray(r.participants)
|
|
104
|
+
? r.participants.map(normalizeParticipant).filter((p) => p !== null)
|
|
105
|
+
: [];
|
|
106
|
+
const external = Array.isArray(r.external)
|
|
107
|
+
? r.external.map(normalizeExternal).filter((e) => e !== null)
|
|
108
|
+
: [];
|
|
109
|
+
if (participants.length === 0 && external.length === 0)
|
|
110
|
+
return null;
|
|
111
|
+
return { participants, external };
|
|
112
|
+
}
|
|
113
|
+
/** Read `.dxkit/workspace.json`. Fail-open: absent or malformed → `null`. */
|
|
114
|
+
function readWorkspace(cwd) {
|
|
115
|
+
let raw;
|
|
116
|
+
try {
|
|
117
|
+
raw = JSON.parse(fs.readFileSync(workspacePath(cwd), 'utf8'));
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
return normalizeWorkspace(raw);
|
|
123
|
+
}
|
|
124
|
+
/** Write `.dxkit/workspace.json`, creating `.dxkit/` as needed. */
|
|
125
|
+
function writeWorkspace(cwd, ws) {
|
|
126
|
+
const abs = workspacePath(cwd);
|
|
127
|
+
fs.mkdirSync(path.dirname(abs), { recursive: true });
|
|
128
|
+
fs.writeFileSync(abs, JSON.stringify(ws, null, 2) + '\n', 'utf8');
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.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.22.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",
|
|
@@ -126,6 +126,20 @@ A repo running autonomous coding loops behind the dxkit Stop-gate has a **loop-o
|
|
|
126
126
|
|
|
127
127
|
This key is read **only by the Stop-gate** (`vyuh-dxkit hook stop-gate`) — your CI / PR guardrail always uses the full policy above, so changing the loop posture never weakens your CI gate. Edit it here, or run `npx vyuh-dxkit init --claude-loop --loop-preset full-debt`. Use `full-debt` only when you deliberately want an unattended loop to also close test/quality gaps (it can drive a long repair). For setting up or operating the loop, hand off to the **dxkit-loop** skill.
|
|
128
128
|
|
|
129
|
+
### Switching the flow-gate posture (`flow.mode`)
|
|
130
|
+
|
|
131
|
+
The UI→API integration gate has its own posture under `flow.mode` in the same file:
|
|
132
|
+
|
|
133
|
+
```jsonc
|
|
134
|
+
{ "flow": { "mode": "warn" } } // warn (default) | block | off
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
- `warn` — surface net-new broken integrations as warnings, never fail a build.
|
|
138
|
+
- `block` — fail the check on an exact break (confidence-gated: only fully-specified bindings block).
|
|
139
|
+
- `off` — the gate does not run.
|
|
140
|
+
|
|
141
|
+
The gate is additive and fail-open: it only fires when a change touches a client call / route / spec, and self-skips when there is no served-side truth to check against. Set it up with `npx vyuh-dxkit init --flow`, or hand off to the **dxkit-flow** skill for setup / diagnosis / repair.
|
|
142
|
+
|
|
129
143
|
## Configuring deep-SAST ingestion (`.vyuh-dxkit.json:deepSast`)
|
|
130
144
|
|
|
131
145
|
dxkit's bundled SAST is intraprocedural; interprocedural findings (path traversal, info exposure, SSRF, injection) come from an external engine (Snyk Code or CodeQL) ingested via the `dxkit-ingest` skill. Persist the engine + Snyk project once so `ingest --from-snyk` needs no flags:
|
|
@@ -18,6 +18,8 @@ The skill consumes `npx vyuh-dxkit doctor --json` output. Doctor returns a struc
|
|
|
18
18
|
|
|
19
19
|
The skill iterates `summary.fixable[]`, asks the customer for confirmation on each fix (with the command shown), runs it, then re-runs doctor at the end to verify everything closed.
|
|
20
20
|
|
|
21
|
+
Doctor also carries an optional top-level `flow` field when the repo has a UI→API surface — a diagnosis of the integration contract (unresolved client calls with reasons + suggestions, served routes nobody consumes, and how the served side is resolved). This is **diagnostic, not an install fix**: it does not appear in `summary.fixable[]`, and dxkit-fix leaves it alone. It surfaces contract health (e.g. a call to a route no backend serves) rather than a broken-install signal.
|
|
22
|
+
|
|
21
23
|
## The repair loop
|
|
22
24
|
|
|
23
25
|
```
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dxkit-flow
|
|
3
|
+
description: Configure, diagnose, and repair the dxkit UI→API integration gate — set up flow gating, explain the flow-contract diagnosis, fix a net-new broken integration a guardrail flagged, and run the cross-repo handshake. Use when the user says "set up the flow gate", "why is this call unresolved", "the guardrail says I broke an integration", "a route was removed but something still calls it", "wire up flow across repos", "publish the flow contract", or anything about the UI→API integration gate.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# dxkit-flow
|
|
7
|
+
|
|
8
|
+
This skill owns the **UI→API integration gate**: dxkit statically reconstructs which client calls (`METHOD url`) bind to which server routes, and fails a PR that net-new breaks one — a frontend call to an endpoint no backend serves, or a removed route a consumer still calls.
|
|
9
|
+
|
|
10
|
+
It is **thin orchestration over the deterministic CLI.** It never re-implements extraction: it runs `init` / `doctor` / `guardrail check` / `flow publish`, reads their structured output, and supplies judgment + code edits. The determinism stays in the CLI; the agent supplies the reasoning.
|
|
11
|
+
|
|
12
|
+
## Modes
|
|
13
|
+
|
|
14
|
+
Pick the mode from what the user is doing. They share context — a fix often starts from a diagnose.
|
|
15
|
+
|
|
16
|
+
### setup — turn the gate on
|
|
17
|
+
|
|
18
|
+
Flow setup is folded into `init`; **there is no `flow init` command.**
|
|
19
|
+
|
|
20
|
+
- Fresh or re-run: `npx vyuh-dxkit init --flow` (forces `warn` posture, no prompt) or plain `npx vyuh-dxkit init` (interactive — it detects a UI→API surface and asks for the posture). If the repo has no client calls / routes, init stays silent; there is nothing to gate.
|
|
21
|
+
- The posture lives in `.dxkit/policy.json:flow.mode`:
|
|
22
|
+
- `warn` — surfaces net-new breaks as warnings, never fails a build (the default; good for adoption).
|
|
23
|
+
- `block` — fails the check on an exact break (confidence-gated: only fully-specified bindings block).
|
|
24
|
+
- `off` — scaffold config only, do not gate.
|
|
25
|
+
- To change it later, edit `flow.mode` (or defer to **dxkit-config**).
|
|
26
|
+
|
|
27
|
+
### diagnose — read the contract's current state
|
|
28
|
+
|
|
29
|
+
`doctor` carries the flow diagnosis; **there is no `flow doctor` command.**
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
npx vyuh-dxkit doctor --json → read the top-level `flow` field
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`flow` (when the repo has a UI→API surface) contains:
|
|
36
|
+
- `topology` (monorepo / consumer-only / provider-only), `calls`, `routes`, `resolved`
|
|
37
|
+
- `unresolved[]` — each `{ method, path, reason, suggestion, file, line }`. `reason` is `no-route` / `external` / `placeholder-only`; `suggestion` is `add-route` / `configure-participant` / `adopt-spec` / `annotate`.
|
|
38
|
+
- `servedUnconsumed[]` — served routes no in-repo call hits (dead route, or a cross-repo consumer).
|
|
39
|
+
- `connection.rung` — how the served side is resolved (`monorepo` / `committed-counterpart` / `configured-participants` / `unresolved`).
|
|
40
|
+
|
|
41
|
+
Walk the `unresolved` tail and, per item, act on its `suggestion`: add the missing route, configure a participant (handshake mode), adopt a spec, or annotate an intentional external call.
|
|
42
|
+
|
|
43
|
+
### fix — repair a net-new broken integration ⭐
|
|
44
|
+
|
|
45
|
+
When a guardrail check (or the loop Stop-gate) reports a flow block, read it:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
npx vyuh-dxkit guardrail check --json → read `flowGate.findings[]`
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Each finding is `{ method, path, file, line, reason, verdict }`. `reason` is `no-route` (a call to nothing) or `route-removed` (a served route the PR deleted, still consumed). For each:
|
|
52
|
+
|
|
53
|
+
1. Explain it in one line: which call, which route, what the PR changed.
|
|
54
|
+
2. Propose the **repair** — restore the removed route, update the consumer to the new route, or (only if genuinely intentional) add an explicit annotation / a per-finding allowlist entry that a human reviews.
|
|
55
|
+
|
|
56
|
+
**Load-bearing safety rule — repair, never suppress.** Fix the integration; do not clear the block by refreshing the baseline or silently allowlisting the finding. An intentional break requires an explicit, reviewed acceptance, never a quiet re-baseline. This mirrors the loop discipline (do NOT refresh the baseline to clear a block) and is what keeps the gate honest when an agent is the one clearing it.
|
|
57
|
+
|
|
58
|
+
### handshake — gate across repos
|
|
59
|
+
|
|
60
|
+
When the provider a call targets lives in another repo, the gate needs that repo's served contract. Two ways, both landing in `.dxkit/flow/served.json` (which the gate reads offline):
|
|
61
|
+
|
|
62
|
+
- **Committed counterpart** — the provider commits its own `served.json`; this repo vendors it. Fully offline, diff-reviewable.
|
|
63
|
+
- **Workspace participants** — declare the services in `.dxkit/workspace.json` (`participants[]` with a local `path` and optional `ref`), then:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
npx vyuh-dxkit flow publish → unions every participant's served routes into this repo's served.json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`flow refresh` writes just this repo's snapshots; `flow publish` unions the whole mesh so this repo resolves calls to services it does not co-locate. Commit the result.
|
|
70
|
+
|
|
71
|
+
## What lives where
|
|
72
|
+
|
|
73
|
+
| Artifact | Role |
|
|
74
|
+
|---|---|
|
|
75
|
+
| `.dxkit/policy.json:flow` | posture (`mode`) + URL strip-prefixes + specs |
|
|
76
|
+
| `.dxkit/workspace.json` | the participants (name, path, ref, base URLs) of a multi-repo system |
|
|
77
|
+
| `.dxkit/flow/served.json` / `consumed.json` | the committed contract snapshots the gate reads |
|
|
78
|
+
|
|
79
|
+
## Boundaries
|
|
80
|
+
|
|
81
|
+
- WHETHER to gate + posture → this skill (setup) or **dxkit-config**.
|
|
82
|
+
- A broken integration found during a PR → this skill (fix). If it surfaced through the loop Stop-gate, **dxkit-loop** explains the block; the repair is here.
|
|
83
|
+
- Do not use this skill to re-extract flow by hand or to write CSVs — that is the CLI's job.
|
|
@@ -13,7 +13,7 @@ This skill handles the git-hook surface dxkit ships. Use it to install hooks, de
|
|
|
13
13
|
|
|
14
14
|
`.githooks/pre-commit` (opt-in via `--with-precommit-hook`) — same guardrail check but on every commit. Slower on large repos (~1-3 min on 500+ file repos). Not in `--full` by default because the wall-clock cost gates adoption.
|
|
15
15
|
|
|
16
|
-
Both run `npx vyuh-dxkit guardrail check`. The check exits 1 (blocking) on net-new findings vs. the baseline.
|
|
16
|
+
Both run `npx vyuh-dxkit guardrail check`. The check exits 1 (blocking) on net-new findings vs. the baseline. The same check also runs the **flow integration gate** — a net-new broken UI→API integration (a call to an endpoint no backend serves, or a removed route a consumer still calls) blocks or warns per `.dxkit/policy.json:flow.mode`. To set up, diagnose, or repair that gate, hand off to the **dxkit-flow** skill.
|
|
17
17
|
|
|
18
18
|
## Installation
|
|
19
19
|
|