@harness-engineering/cli 2.3.0 → 2.4.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/agents/skills/claude-code/harness-compliance/SKILL.md +19 -0
- package/dist/agents/skills/codex/harness-compliance/SKILL.md +19 -0
- package/dist/agents/skills/cursor/harness-compliance/SKILL.md +19 -0
- package/dist/agents/skills/gemini-cli/harness-compliance/SKILL.md +19 -0
- package/dist/{agents-md-N7YBQPE3.js → agents-md-ROTDQOXM.js} +3 -3
- package/dist/{architecture-PP7WERSV.js → architecture-I2G7PNQB.js} +4 -4
- package/dist/{assess-project-WXFCJQTX.js → assess-project-LO6NCLE7.js} +1 -1
- package/dist/bin/harness-mcp.js +15 -15
- package/dist/bin/harness.js +25 -25
- package/dist/{check-phase-gate-R3KQFBAH.js → check-phase-gate-52SQFNJB.js} +4 -4
- package/dist/{chunk-5PPV4WYY.js → chunk-27EHWQPK.js} +5 -5
- package/dist/{chunk-7PGYJO3L.js → chunk-2L2A6W6I.js} +3 -3
- package/dist/{chunk-GTXUUGFG.js → chunk-4XB37LST.js} +9 -9
- package/dist/{chunk-5KTTKXQN.js → chunk-54JTO4NZ.js} +1 -1
- package/dist/{chunk-D2LZUJLP.js → chunk-5YOHXTK3.js} +2 -2
- package/dist/{chunk-YG4ZBGEH.js → chunk-7BNK4M23.js} +1 -1
- package/dist/{chunk-MKPRB4PL.js → chunk-DJRRTZGD.js} +1 -1
- package/dist/{chunk-DLBMYLYR.js → chunk-FJJYQWUP.js} +1 -1
- package/dist/{chunk-4DWOMGUM.js → chunk-GDJ2MRYH.js} +476 -85
- package/dist/{chunk-4NFV5UZO.js → chunk-GN2CSZC6.js} +3 -3
- package/dist/{chunk-L3CEN42B.js → chunk-JGPOQJ73.js} +1 -1
- package/dist/{chunk-PW3U4YJV.js → chunk-KPWUZSHL.js} +32 -4
- package/dist/{chunk-MT2MMBUA.js → chunk-MQRKPF46.js} +9 -9
- package/dist/{chunk-NP2ZI6E3.js → chunk-MSBVH6ER.js} +1 -1
- package/dist/{chunk-LM4F5KBK.js → chunk-NGCM4B4V.js} +5 -5
- package/dist/{chunk-6CHNY3NJ.js → chunk-OFMQEUYN.js} +1 -1
- package/dist/{chunk-3LPOTTPX.js → chunk-Q43LM7CO.js} +92 -92
- package/dist/{chunk-GUIX2TMZ.js → chunk-RYVL76ZF.js} +1 -1
- package/dist/{chunk-YEBUFRTT.js → chunk-RZASDABE.js} +2 -2
- package/dist/{chunk-35FI23SO.js → chunk-TCR5PKMU.js} +216 -119
- package/dist/{chunk-KTWKW6KJ.js → chunk-TIQU5VY7.js} +1 -1
- package/dist/{chunk-KUVPSUG4.js → chunk-TVJZX53C.js} +1 -1
- package/dist/{chunk-KWD6FF7M.js → chunk-U4XK4BB3.js} +8 -8
- package/dist/{chunk-EJPR5VCT.js → chunk-WY2J54IZ.js} +6 -6
- package/dist/{chunk-BMM3GXV6.js → chunk-XPRGWHBL.js} +80 -37
- package/dist/{ci-workflow-GFCXFJ4G.js → ci-workflow-MYBH64CR.js} +3 -3
- package/dist/{dist-D27LJR2T.js → dist-SQAOKWXM.js} +5 -3
- package/dist/{dist-I4LWG3IN.js → dist-ZJGFXGIB.js} +10 -2
- package/dist/{docs-UXKDKPJF.js → docs-7CW7WUFB.js} +4 -4
- package/dist/{engine-A63FRDLF.js → engine-Y75QZW6N.js} +3 -3
- package/dist/{entropy-IFIP4ZP4.js → entropy-P6QELTFA.js} +3 -3
- package/dist/{feedback-W36DSJQA.js → feedback-PJWCDRRZ.js} +1 -1
- package/dist/{generate-agent-definitions-F4YMKQLP.js → generate-agent-definitions-ONDIJHHK.js} +4 -4
- package/dist/{glob-helper-FZPPTGJN.js → glob-helper-JE3MO4UD.js} +1 -1
- package/dist/{graph-loader-5MKHAJJF.js → graph-loader-TJU4E7KL.js} +1 -1
- package/dist/index.d.ts +66 -0
- package/dist/index.js +25 -25
- package/dist/{loader-4UAOGUSS.js → loader-DQRNWKOZ.js} +3 -3
- package/dist/{mcp-YW7PLXVQ.js → mcp-UUNLS3MC.js} +15 -15
- package/dist/{performance-AZ5UYPOQ.js → performance-7X3EFAOD.js} +4 -4
- package/dist/{review-pipeline-OLQVGBWJ.js → review-pipeline-GAJ22PBC.js} +3 -3
- package/dist/{runtime-GG3U5HH5.js → runtime-6TK6U72R.js} +3 -3
- package/dist/{scan-BIJYHOE7.js → scan-SFX5U3TE.js} +1 -1
- package/dist/{security-MYTRFSR7.js → security-ZSU643D7.js} +1 -1
- package/dist/{validate-QI4V4JY6.js → validate-IDX6RI3U.js} +4 -4
- package/dist/{validate-cross-check-XRSSAXJP.js → validate-cross-check-5YEWZ3EW.js} +3 -3
- package/package.json +7 -7
|
@@ -27,7 +27,7 @@ var runSecurityScanDefinition = {
|
|
|
27
27
|
};
|
|
28
28
|
async function handleRunSecurityScan(input) {
|
|
29
29
|
try {
|
|
30
|
-
const core = await import("./dist-
|
|
30
|
+
const core = await import("./dist-ZJGFXGIB.js");
|
|
31
31
|
const projectRoot = sanitizePath(input.path);
|
|
32
32
|
let configData = {};
|
|
33
33
|
try {
|
|
@@ -50,7 +50,7 @@ async function handleRunSecurityScan(input) {
|
|
|
50
50
|
if (input.files && input.files.length > 0) {
|
|
51
51
|
filesToScan = input.files.map((f) => path.resolve(projectRoot, f));
|
|
52
52
|
} else {
|
|
53
|
-
const { globFiles } = await import("./glob-helper-
|
|
53
|
+
const { globFiles } = await import("./glob-helper-JE3MO4UD.js");
|
|
54
54
|
filesToScan = await globFiles(projectRoot, securityConfig.exclude);
|
|
55
55
|
}
|
|
56
56
|
const result = await scanner.scanFiles(filesToScan);
|
|
@@ -114,7 +114,7 @@ var getSecurityTrendsDefinition = {
|
|
|
114
114
|
};
|
|
115
115
|
async function handleGetSecurityTrends(input) {
|
|
116
116
|
try {
|
|
117
|
-
const core = await import("./dist-
|
|
117
|
+
const core = await import("./dist-ZJGFXGIB.js");
|
|
118
118
|
const projectRoot = sanitizePath(input.path);
|
|
119
119
|
const manager = new core.SecurityTimelineManager(projectRoot);
|
|
120
120
|
const trendOptions = {};
|
|
@@ -3,23 +3,28 @@ import {
|
|
|
3
3
|
} from "./chunk-ZCZD7FHU.js";
|
|
4
4
|
import {
|
|
5
5
|
ArchConfigSchema,
|
|
6
|
-
init_dist
|
|
7
|
-
} from "./chunk-
|
|
6
|
+
init_dist as init_dist2
|
|
7
|
+
} from "./chunk-GDJ2MRYH.js";
|
|
8
8
|
import {
|
|
9
9
|
Err,
|
|
10
10
|
Ok
|
|
11
11
|
} from "./chunk-RL4VMEXL.js";
|
|
12
|
+
import {
|
|
13
|
+
init_dist,
|
|
14
|
+
skipDirGlobs
|
|
15
|
+
} from "./chunk-XPRGWHBL.js";
|
|
12
16
|
import {
|
|
13
17
|
CLIError,
|
|
14
18
|
ExitCode
|
|
15
19
|
} from "./chunk-3WGJMBKH.js";
|
|
16
20
|
|
|
17
21
|
// src/config/loader.ts
|
|
18
|
-
|
|
22
|
+
init_dist2();
|
|
19
23
|
import * as fs from "fs";
|
|
20
24
|
import * as path from "path";
|
|
21
25
|
|
|
22
26
|
// src/config/schema.ts
|
|
27
|
+
init_dist2();
|
|
23
28
|
init_dist();
|
|
24
29
|
import { z } from "zod";
|
|
25
30
|
var LayerSchema = z.object({
|
|
@@ -54,7 +59,7 @@ var EntropyConfigSchema = z.object({
|
|
|
54
59
|
/** Explicit entry points for reachability analysis (overrides auto-detection) */
|
|
55
60
|
entryPoints: z.array(z.string()).optional(),
|
|
56
61
|
/** Patterns to exclude from entropy analysis */
|
|
57
|
-
excludePatterns: z.array(z.string()).default([
|
|
62
|
+
excludePatterns: z.array(z.string()).default([...skipDirGlobs(), "**/*.test.ts"]),
|
|
58
63
|
/** Whether to automatically attempt to fix simple entropy issues */
|
|
59
64
|
autoFix: z.boolean().default(false)
|
|
60
65
|
});
|
|
@@ -214,6 +219,26 @@ var KnowledgeConfigSchema = z.object({
|
|
|
214
219
|
/** Caller-supplied blocklisted path segments (e.g. `["scratch", "fixtures"]`). Extends defaults. */
|
|
215
220
|
domainBlocklist: z.array(z.string().min(1)).optional().default([])
|
|
216
221
|
});
|
|
222
|
+
var BranchingConfigSchema = z.object({
|
|
223
|
+
/** Allowed branch name prefixes */
|
|
224
|
+
prefixes: z.array(z.string()).default(["feat", "fix", "chore", "docs", "refactor", "test", "perf"]),
|
|
225
|
+
/** Whether to enforce kebab-case for the branch slug */
|
|
226
|
+
enforceKebabCase: z.boolean().default(true),
|
|
227
|
+
/**
|
|
228
|
+
* Optional regex that fully replaces the default prefix and kebab-case checks.
|
|
229
|
+
* When set, only the ignore list and this regex are evaluated; `prefixes`,
|
|
230
|
+
* `enforceKebabCase`, and `maxLength` are bypassed.
|
|
231
|
+
*/
|
|
232
|
+
customRegex: z.string().optional(),
|
|
233
|
+
/** List of ignored branch names (exact match or glob) */
|
|
234
|
+
ignore: z.array(z.string()).default(["main", "release/**", "dependabot/**", "harness/**"]),
|
|
235
|
+
/** Maximum slug length (characters after the first `/`). Set to 0 to disable. */
|
|
236
|
+
maxLength: z.number().int().nonnegative().default(60)
|
|
237
|
+
});
|
|
238
|
+
var ComplianceConfigSchema = z.object({
|
|
239
|
+
/** Branch naming convention settings */
|
|
240
|
+
branching: BranchingConfigSchema.default({})
|
|
241
|
+
});
|
|
217
242
|
var HarnessConfigSchema = z.object({
|
|
218
243
|
/** Configuration schema version */
|
|
219
244
|
version: z.literal(1),
|
|
@@ -304,6 +329,8 @@ var HarnessConfigSchema = z.object({
|
|
|
304
329
|
/** Whether adoption tracking is enabled (default: true) */
|
|
305
330
|
enabled: z.boolean().default(true)
|
|
306
331
|
}).optional(),
|
|
332
|
+
/** Compliance and convention enforcement settings */
|
|
333
|
+
compliance: ComplianceConfigSchema.optional(),
|
|
307
334
|
/** Central telemetry collection settings */
|
|
308
335
|
telemetry: z.object({
|
|
309
336
|
/** Whether anonymous telemetry is enabled (default: true) */
|
|
@@ -372,6 +399,7 @@ function resolveConfig(configPath) {
|
|
|
372
399
|
}
|
|
373
400
|
|
|
374
401
|
export {
|
|
402
|
+
BranchingConfigSchema,
|
|
375
403
|
findConfigFile,
|
|
376
404
|
loadConfig,
|
|
377
405
|
resolveConfig
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
findConfigFile,
|
|
9
9
|
loadConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KPWUZSHL.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-GDJ2MRYH.js";
|
|
14
14
|
import {
|
|
15
15
|
Ok
|
|
16
16
|
} from "./chunk-RL4VMEXL.js";
|
|
@@ -50,18 +50,18 @@ async function handleCheckDocs(input) {
|
|
|
50
50
|
const projectPath = sanitizePath(input.path);
|
|
51
51
|
const scope = input.scope ?? "coverage";
|
|
52
52
|
if (scope === "integrity") {
|
|
53
|
-
const { validateKnowledgeMap } = await import("./dist-
|
|
53
|
+
const { validateKnowledgeMap } = await import("./dist-ZJGFXGIB.js");
|
|
54
54
|
const result2 = await validateKnowledgeMap(projectPath);
|
|
55
55
|
return resultToMcpResponse(result2);
|
|
56
56
|
}
|
|
57
57
|
if (scope === "all") {
|
|
58
|
-
const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-
|
|
58
|
+
const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-ZJGFXGIB.js");
|
|
59
59
|
const domain2 = input.domain ?? "src";
|
|
60
|
-
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-
|
|
60
|
+
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-TJU4E7KL.js");
|
|
61
61
|
const store2 = await loadGraphStore2(projectPath);
|
|
62
62
|
let graphCoverage2;
|
|
63
63
|
if (store2) {
|
|
64
|
-
const { Assembler } = await import("./dist-
|
|
64
|
+
const { Assembler } = await import("./dist-SQAOKWXM.js");
|
|
65
65
|
const assembler = new Assembler(store2);
|
|
66
66
|
const report = assembler.checkCoverage();
|
|
67
67
|
graphCoverage2 = {
|
|
@@ -94,13 +94,13 @@ async function handleCheckDocs(input) {
|
|
|
94
94
|
}
|
|
95
95
|
return resultToMcpResponse(Ok({ coverage, integrity }));
|
|
96
96
|
}
|
|
97
|
-
const { checkDocCoverage } = await import("./dist-
|
|
97
|
+
const { checkDocCoverage } = await import("./dist-ZJGFXGIB.js");
|
|
98
98
|
const domain = input.domain ?? "src";
|
|
99
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
99
|
+
const { loadGraphStore } = await import("./graph-loader-TJU4E7KL.js");
|
|
100
100
|
const store = await loadGraphStore(projectPath);
|
|
101
101
|
let graphCoverage;
|
|
102
102
|
if (store) {
|
|
103
|
-
const { Assembler } = await import("./dist-
|
|
103
|
+
const { Assembler } = await import("./dist-SQAOKWXM.js");
|
|
104
104
|
const assembler = new Assembler(store);
|
|
105
105
|
const report = assembler.checkCoverage();
|
|
106
106
|
graphCoverage = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveProjectConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-OFMQEUYN.js";
|
|
4
4
|
import {
|
|
5
5
|
resultToMcpResponse
|
|
6
6
|
} from "./chunk-EPUKTTJZ.js";
|
|
@@ -38,7 +38,7 @@ async function handleCheckDependencies(input) {
|
|
|
38
38
|
const configResult = resolveProjectConfig(projectPath);
|
|
39
39
|
if (!configResult.ok) return resultToMcpResponse(configResult);
|
|
40
40
|
try {
|
|
41
|
-
const { validateDependencies, TypeScriptParser } = await import("./dist-
|
|
41
|
+
const { validateDependencies, TypeScriptParser } = await import("./dist-ZJGFXGIB.js");
|
|
42
42
|
const config = configResult.value;
|
|
43
43
|
const rawLayers = Array.isArray(config.layers) ? config.layers : [];
|
|
44
44
|
const layers = rawLayers.map((l) => ({
|
|
@@ -47,11 +47,11 @@ async function handleCheckDependencies(input) {
|
|
|
47
47
|
allowedDependencies: l.allowedDependencies
|
|
48
48
|
}));
|
|
49
49
|
const parser = new TypeScriptParser();
|
|
50
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
50
|
+
const { loadGraphStore } = await import("./graph-loader-TJU4E7KL.js");
|
|
51
51
|
const store = await loadGraphStore(projectPath);
|
|
52
52
|
let graphDependencyData;
|
|
53
53
|
if (store) {
|
|
54
|
-
const { GraphConstraintAdapter } = await import("./dist-
|
|
54
|
+
const { GraphConstraintAdapter } = await import("./dist-SQAOKWXM.js");
|
|
55
55
|
const adapter = new GraphConstraintAdapter(store);
|
|
56
56
|
const graphData = adapter.computeDependencyGraph();
|
|
57
57
|
graphDependencyData = {
|
|
@@ -69,7 +69,7 @@ async function handleCheckDependencies(input) {
|
|
|
69
69
|
if (store) {
|
|
70
70
|
const designTokenNodes = store.findNodes({ type: "design_token" });
|
|
71
71
|
if (designTokenNodes.length > 0) {
|
|
72
|
-
const { DesignConstraintAdapter } = await import("./dist-
|
|
72
|
+
const { DesignConstraintAdapter } = await import("./dist-SQAOKWXM.js");
|
|
73
73
|
const designAdapter = new DesignConstraintAdapter(store);
|
|
74
74
|
const fileNodes = store.findNodes({ type: "file" });
|
|
75
75
|
for (const fileNode of fileNodes) {
|