@harness-engineering/cli 2.6.1 → 2.7.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/align-design-system/SKILL.md +174 -0
- package/dist/agents/skills/claude-code/align-design-system/skill.yaml +57 -0
- package/dist/agents/skills/claude-code/audit-brand-compliance/SKILL.md +189 -0
- package/dist/agents/skills/claude-code/audit-brand-compliance/skill.yaml +50 -0
- package/dist/agents/skills/claude-code/audit-component-anatomy/SKILL.md +181 -0
- package/dist/agents/skills/claude-code/audit-component-anatomy/skill.yaml +51 -0
- package/dist/agents/skills/claude-code/copy-craft/SKILL.md +192 -0
- package/dist/agents/skills/claude-code/copy-craft/skill.yaml +52 -0
- package/dist/agents/skills/claude-code/detect-design-drift/SKILL.md +139 -0
- package/dist/agents/skills/claude-code/detect-design-drift/skill.yaml +50 -0
- package/dist/agents/skills/claude-code/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-design-craft/SKILL.md +212 -0
- package/dist/agents/skills/claude-code/harness-design-craft/skill.yaml +57 -0
- package/dist/agents/skills/claude-code/harness-design-pipeline/SKILL.md +266 -0
- package/dist/agents/skills/claude-code/harness-design-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/claude-code/knowledge-craft/SKILL.md +180 -0
- package/dist/agents/skills/claude-code/knowledge-craft/skill.yaml +49 -0
- package/dist/agents/skills/claude-code/naming-craft/SKILL.md +172 -0
- package/dist/agents/skills/claude-code/naming-craft/skill.yaml +51 -0
- package/dist/agents/skills/claude-code/security-craft/SKILL.md +205 -0
- package/dist/agents/skills/claude-code/security-craft/skill.yaml +58 -0
- package/dist/agents/skills/claude-code/spec-craft/SKILL.md +184 -0
- package/dist/agents/skills/claude-code/spec-craft/skill.yaml +55 -0
- package/dist/agents/skills/claude-code/test-craft/SKILL.md +212 -0
- package/dist/agents/skills/claude-code/test-craft/skill.yaml +58 -0
- package/dist/agents/skills/codex/align-design-system/SKILL.md +174 -0
- package/dist/agents/skills/codex/align-design-system/skill.yaml +57 -0
- package/dist/agents/skills/codex/audit-brand-compliance/SKILL.md +189 -0
- package/dist/agents/skills/codex/audit-brand-compliance/skill.yaml +50 -0
- package/dist/agents/skills/codex/audit-component-anatomy/SKILL.md +181 -0
- package/dist/agents/skills/codex/audit-component-anatomy/skill.yaml +51 -0
- package/dist/agents/skills/codex/copy-craft/SKILL.md +192 -0
- package/dist/agents/skills/codex/copy-craft/skill.yaml +52 -0
- package/dist/agents/skills/codex/detect-design-drift/SKILL.md +139 -0
- package/dist/agents/skills/codex/detect-design-drift/skill.yaml +50 -0
- package/dist/agents/skills/codex/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-design-craft/SKILL.md +212 -0
- package/dist/agents/skills/codex/harness-design-craft/skill.yaml +57 -0
- package/dist/agents/skills/codex/harness-design-pipeline/SKILL.md +266 -0
- package/dist/agents/skills/codex/harness-design-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/codex/knowledge-craft/SKILL.md +180 -0
- package/dist/agents/skills/codex/knowledge-craft/skill.yaml +49 -0
- package/dist/agents/skills/codex/naming-craft/SKILL.md +172 -0
- package/dist/agents/skills/codex/naming-craft/skill.yaml +51 -0
- package/dist/agents/skills/codex/security-craft/SKILL.md +205 -0
- package/dist/agents/skills/codex/security-craft/skill.yaml +58 -0
- package/dist/agents/skills/codex/spec-craft/SKILL.md +184 -0
- package/dist/agents/skills/codex/spec-craft/skill.yaml +55 -0
- package/dist/agents/skills/codex/test-craft/SKILL.md +212 -0
- package/dist/agents/skills/codex/test-craft/skill.yaml +58 -0
- package/dist/agents/skills/cursor/align-design-system/SKILL.md +174 -0
- package/dist/agents/skills/cursor/align-design-system/skill.yaml +57 -0
- package/dist/agents/skills/cursor/audit-brand-compliance/SKILL.md +189 -0
- package/dist/agents/skills/cursor/audit-brand-compliance/skill.yaml +50 -0
- package/dist/agents/skills/cursor/audit-component-anatomy/SKILL.md +181 -0
- package/dist/agents/skills/cursor/audit-component-anatomy/skill.yaml +51 -0
- package/dist/agents/skills/cursor/copy-craft/SKILL.md +192 -0
- package/dist/agents/skills/cursor/copy-craft/skill.yaml +52 -0
- package/dist/agents/skills/cursor/detect-design-drift/SKILL.md +139 -0
- package/dist/agents/skills/cursor/detect-design-drift/skill.yaml +50 -0
- package/dist/agents/skills/cursor/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-design-craft/SKILL.md +212 -0
- package/dist/agents/skills/cursor/harness-design-craft/skill.yaml +57 -0
- package/dist/agents/skills/cursor/harness-design-pipeline/SKILL.md +266 -0
- package/dist/agents/skills/cursor/harness-design-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/cursor/knowledge-craft/SKILL.md +180 -0
- package/dist/agents/skills/cursor/knowledge-craft/skill.yaml +49 -0
- package/dist/agents/skills/cursor/naming-craft/SKILL.md +172 -0
- package/dist/agents/skills/cursor/naming-craft/skill.yaml +51 -0
- package/dist/agents/skills/cursor/security-craft/SKILL.md +205 -0
- package/dist/agents/skills/cursor/security-craft/skill.yaml +58 -0
- package/dist/agents/skills/cursor/spec-craft/SKILL.md +184 -0
- package/dist/agents/skills/cursor/spec-craft/skill.yaml +55 -0
- package/dist/agents/skills/cursor/test-craft/SKILL.md +212 -0
- package/dist/agents/skills/cursor/test-craft/skill.yaml +58 -0
- package/dist/agents/skills/gemini-cli/align-design-system/SKILL.md +174 -0
- package/dist/agents/skills/gemini-cli/align-design-system/skill.yaml +57 -0
- package/dist/agents/skills/gemini-cli/audit-brand-compliance/SKILL.md +189 -0
- package/dist/agents/skills/gemini-cli/audit-brand-compliance/skill.yaml +50 -0
- package/dist/agents/skills/gemini-cli/audit-component-anatomy/SKILL.md +181 -0
- package/dist/agents/skills/gemini-cli/audit-component-anatomy/skill.yaml +51 -0
- package/dist/agents/skills/gemini-cli/copy-craft/SKILL.md +192 -0
- package/dist/agents/skills/gemini-cli/copy-craft/skill.yaml +52 -0
- package/dist/agents/skills/gemini-cli/detect-design-drift/SKILL.md +139 -0
- package/dist/agents/skills/gemini-cli/detect-design-drift/skill.yaml +50 -0
- package/dist/agents/skills/gemini-cli/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-design-craft/SKILL.md +212 -0
- package/dist/agents/skills/gemini-cli/harness-design-craft/skill.yaml +57 -0
- package/dist/agents/skills/gemini-cli/harness-design-pipeline/SKILL.md +266 -0
- package/dist/agents/skills/gemini-cli/harness-design-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/gemini-cli/knowledge-craft/SKILL.md +180 -0
- package/dist/agents/skills/gemini-cli/knowledge-craft/skill.yaml +49 -0
- package/dist/agents/skills/gemini-cli/naming-craft/SKILL.md +172 -0
- package/dist/agents/skills/gemini-cli/naming-craft/skill.yaml +51 -0
- package/dist/agents/skills/gemini-cli/security-craft/SKILL.md +205 -0
- package/dist/agents/skills/gemini-cli/security-craft/skill.yaml +58 -0
- package/dist/agents/skills/gemini-cli/spec-craft/SKILL.md +184 -0
- package/dist/agents/skills/gemini-cli/spec-craft/skill.yaml +55 -0
- package/dist/agents/skills/gemini-cli/test-craft/SKILL.md +212 -0
- package/dist/agents/skills/gemini-cli/test-craft/skill.yaml +58 -0
- package/dist/{agents-md-2JUQ4FE2.js → agents-md-267R2NUJ.js} +4 -4
- package/dist/{analyzer-VY6DJVOU-4AHIJLNS.js → analyzer-VY6DJVOU-WYKV3TTW.js} +2 -2
- package/dist/{architecture-CXAVNB5X.js → architecture-ZTEHGIHD.js} +6 -6
- package/dist/{assess-project-M626SSPN.js → assess-project-OKDW3YSK.js} +2 -1
- package/dist/bin/harness-mcp.js +17 -17
- package/dist/bin/harness.js +27 -27
- package/dist/{check-phase-gate-XMU6LLUQ.js → check-phase-gate-YJWFDW66.js} +5 -5
- package/dist/{chunk-372MGNTI.js → chunk-4EGPFB7V.js} +6185 -124
- package/dist/{chunk-HFOB2MPQ.js → chunk-67RP7MLR.js} +3 -3
- package/dist/{chunk-5JNSFYZU.js → chunk-6T5AYG5S.js} +6 -6
- package/dist/{chunk-5XLLIYYL.js → chunk-6UHDQP2N.js} +1 -1
- package/dist/{chunk-YP7I25SL.js → chunk-B3B64OPD.js} +1 -1
- package/dist/{chunk-VTTNIZJL.js → chunk-B4OLYXZ4.js} +93 -3
- package/dist/{chunk-6AX6R3LM.js → chunk-CXAHK5PJ.js} +9 -9
- package/dist/{chunk-BCFDGOMA.js → chunk-H2ZJOJ7A.js} +81 -1
- package/dist/{chunk-CQOMVZDC.js → chunk-HLPY3RHE.js} +1641 -292
- package/dist/{chunk-Q6ZR2L6Q.js → chunk-HMMSWRWR.js} +2 -2
- package/dist/{chunk-YYRQCQPZ.js → chunk-IY2TZLY5.js} +176 -107
- package/dist/{chunk-I6K43QQS.js → chunk-MQG7FHXX.js} +3 -3
- package/dist/{chunk-43M3RLFQ.js → chunk-OLTVDPA2.js} +2 -2
- package/dist/{chunk-JFZOWO7D.js → chunk-OQE6ME2Z.js} +1 -1
- package/dist/{chunk-GWE5LL3R.js → chunk-P7EO7USC.js} +10 -10
- package/dist/{chunk-24KCOJJG.js → chunk-PARV3G2F.js} +1 -1
- package/dist/{chunk-QOKMDDBJ.js → chunk-QUPC37UB.js} +6 -6
- package/dist/{chunk-EPUKTTJZ.js → chunk-RC3OI5NK.js} +5 -1
- package/dist/{chunk-L5BCZ5XS.js → chunk-S7GEONXL.js} +1 -1
- package/dist/{chunk-5FDBXUFW.js → chunk-TIH53QXY.js} +1 -1
- package/dist/{chunk-OA6SWTU4.js → chunk-TIZ3L6CU.js} +11 -8
- package/dist/{chunk-GWF2OILZ.js → chunk-VG6UK6G6.js} +1 -1
- package/dist/{chunk-SZEFU6XC.js → chunk-W3PDVZ4I.js} +1 -1
- package/dist/{chunk-VUCGB2KH.js → chunk-WOXR6I3R.js} +1 -1
- package/dist/{chunk-K246XQ2L.js → chunk-XTIPZUPR.js} +1 -1
- package/dist/{chunk-HMW3VKUF.js → chunk-Z2GUITAS.js} +10 -10
- package/dist/{chunk-PFZEADQM.js → chunk-ZKA3TGYS.js} +79 -2
- package/dist/{ci-workflow-3JNDZQYD.js → ci-workflow-YGTQTNVC.js} +4 -4
- package/dist/{dist-QPWXPCPL.js → dist-R3TOOPJ7.js} +1 -1
- package/dist/{dist-OHDQBTSO.js → dist-XIJWWQ5N.js} +3 -3
- package/dist/{docs-5RYMDHN3.js → docs-KCTLXK2G.js} +6 -6
- package/dist/{engine-GKGT5ULT.js → engine-J64WPH5K.js} +4 -4
- package/dist/{entropy-DQTAPSSE.js → entropy-M27JUL3V.js} +5 -5
- package/dist/{feedback-WH6XPQJS.js → feedback-W25QO3OL.js} +2 -2
- package/dist/{generate-agent-definitions-SZA4QIHN.js → generate-agent-definitions-RNMU5U5R.js} +5 -5
- package/dist/{glob-helper-XE2UGEOV.js → glob-helper-EX4YZKZO.js} +1 -1
- package/dist/{graph-loader-EQBOIHFZ.js → graph-loader-EIFEOUVI.js} +1 -1
- package/dist/index.d.ts +587 -6
- package/dist/index.js +27 -27
- package/dist/{loader-BNKGM23C.js → loader-HZKJ5ABV.js} +4 -4
- package/dist/{mcp-YKKPWUMH.js → mcp-NEAPIDTT.js} +17 -17
- package/dist/{performance-54TMJOEU.js → performance-3AVQUDRG.js} +6 -6
- package/dist/{review-pipeline-OTDDVPNY.js → review-pipeline-KA7SGUXJ.js} +4 -4
- package/dist/{runtime-W5THSNAL.js → runtime-IP6FVV5M.js} +4 -4
- package/dist/{scan-4PPP6ZXT.js → scan-LYKLM4EQ.js} +1 -1
- package/dist/{security-27HW7CYT.js → security-EAR4FJWI.js} +1 -1
- package/dist/{validate-QRVCD4GP.js → validate-EVH3UXIC.js} +5 -5
- package/dist/{validate-cross-check-BUAGBAPO.js → validate-cross-check-SNE3SQOB.js} +4 -4
- package/package.json +8 -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-XIJWWQ5N.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-EX4YZKZO.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-XIJWWQ5N.js");
|
|
118
118
|
const projectRoot = sanitizePath(input.path);
|
|
119
119
|
const manager = new core.SecurityTimelineManager(projectRoot);
|
|
120
120
|
const trendOptions = {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveProjectConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VG6UK6G6.js";
|
|
4
4
|
import {
|
|
5
5
|
resultToMcpResponse
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-RC3OI5NK.js";
|
|
7
7
|
import {
|
|
8
8
|
sanitizePath
|
|
9
9
|
} from "./chunk-W6Y7ZW3Y.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-XIJWWQ5N.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-EIFEOUVI.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-R3TOOPJ7.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-R3TOOPJ7.js");
|
|
73
73
|
const designAdapter = new DesignConstraintAdapter(store);
|
|
74
74
|
const fileNodes = store.findNodes({ type: "file" });
|
|
75
75
|
for (const fileNode of fileNodes) {
|
|
@@ -41,7 +41,7 @@ async function runScan(projectPath) {
|
|
|
41
41
|
KnowledgeIngestor,
|
|
42
42
|
GitIngestor,
|
|
43
43
|
RequirementIngestor
|
|
44
|
-
} = await import("./dist-
|
|
44
|
+
} = await import("./dist-R3TOOPJ7.js");
|
|
45
45
|
const store = new GraphStore();
|
|
46
46
|
const start = Date.now();
|
|
47
47
|
const ingestOptions = loadIngestOptions(projectPath);
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "./chunk-3WGJMBKH.js";
|
|
8
8
|
import {
|
|
9
9
|
init_dist as init_dist2
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-IY2TZLY5.js";
|
|
11
11
|
import {
|
|
12
12
|
Err,
|
|
13
13
|
Ok
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
import {
|
|
16
16
|
init_dist,
|
|
17
17
|
skipDirGlobs
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-H2ZJOJ7A.js";
|
|
19
19
|
import {
|
|
20
20
|
ArchConfigSchema
|
|
21
21
|
} from "./chunk-QCLOIUMX.js";
|
|
@@ -99,6 +99,86 @@ var PerformanceConfigSchema = z.object({
|
|
|
99
99
|
/** Size budget for bundles or directories */
|
|
100
100
|
sizeBudget: z.record(z.unknown()).optional()
|
|
101
101
|
}).passthrough();
|
|
102
|
+
var ComponentAnatomyAuditConfigSchema = z.object({
|
|
103
|
+
/** Gate for the entire audit AND the harness-accessibility deferral */
|
|
104
|
+
enabled: z.boolean().default(true),
|
|
105
|
+
/** "default" or a path to a project-supplied override catalog */
|
|
106
|
+
catalog: z.string().default("default"),
|
|
107
|
+
/** "all", "none", or an explicit list of pattern codes (e.g. ["ANAT-P001"]) */
|
|
108
|
+
patterns: z.union([z.literal("all"), z.literal("none"), z.array(z.string())]).default("all"),
|
|
109
|
+
/** Fast-mode controls (validate-time scope cap + pattern opt-in) */
|
|
110
|
+
fastMode: z.object({
|
|
111
|
+
/** Whether validate-time runs pattern queries (default false — patterns are full-mode only) */
|
|
112
|
+
patterns: z.boolean().default(false),
|
|
113
|
+
/** Cap to keep validate fast on large repos */
|
|
114
|
+
maxFiles: z.number().int().positive().default(500)
|
|
115
|
+
}).default({})
|
|
116
|
+
});
|
|
117
|
+
var DriftDetectionConfigSchema = z.object({
|
|
118
|
+
/** Gate for the entire drift verifier */
|
|
119
|
+
enabled: z.boolean().default(true),
|
|
120
|
+
/** Rule toggles — defaults align with v1 scope (T* + P*) */
|
|
121
|
+
rules: z.object({
|
|
122
|
+
/** Token bypass rules (DRIFT-T001-T004). Default: true. */
|
|
123
|
+
tokenBypass: z.boolean().default(true),
|
|
124
|
+
/** Primitive adoption rules (DRIFT-P001-P004). Default: true. */
|
|
125
|
+
primitiveAdoption: z.boolean().default(true)
|
|
126
|
+
}).default({}),
|
|
127
|
+
/** Fast-mode controls (validate-time scope cap) */
|
|
128
|
+
fastMode: z.object({
|
|
129
|
+
/** Cap to keep validate fast on large repos */
|
|
130
|
+
maxFiles: z.number().int().positive().default(500)
|
|
131
|
+
}).default({})
|
|
132
|
+
});
|
|
133
|
+
var BrandComplianceConfigSchema = z.object({
|
|
134
|
+
/** Gate for the entire brand verifier */
|
|
135
|
+
enabled: z.boolean().default(true),
|
|
136
|
+
/** Rule toggles — defaults align with v1 scope (BRAND-T* + BRAND-V001) */
|
|
137
|
+
rules: z.object({
|
|
138
|
+
/** Token-misuse rules (BRAND-T001 via $extensions.harness.brand.forbidden_contexts). Default: true. */
|
|
139
|
+
tokenMisuse: z.boolean().default(true),
|
|
140
|
+
/** Voice rule (BRAND-V001 forbidden phrases in JSX text + string attributes). Default: true. */
|
|
141
|
+
voice: z.boolean().default(true)
|
|
142
|
+
}).default({}),
|
|
143
|
+
/** Fast-mode controls (validate-time scope cap) */
|
|
144
|
+
fastMode: z.object({
|
|
145
|
+
maxFiles: z.number().int().positive().default(500)
|
|
146
|
+
}).default({})
|
|
147
|
+
});
|
|
148
|
+
var DesignAuditConfigSchema = z.object({
|
|
149
|
+
/** Component-anatomy audit (design-pipeline #2) */
|
|
150
|
+
componentAnatomy: ComponentAnatomyAuditConfigSchema.optional(),
|
|
151
|
+
/** Design-system drift detection (design-pipeline #1, detect half) */
|
|
152
|
+
driftDetection: DriftDetectionConfigSchema.optional(),
|
|
153
|
+
/** Brand-compliance audit (design-pipeline #3) */
|
|
154
|
+
brandCompliance: BrandComplianceConfigSchema.optional()
|
|
155
|
+
});
|
|
156
|
+
var DesignCraftConfigSchema = z.object({
|
|
157
|
+
/** Gate for the entire skill AND the harness-design overlap deferral */
|
|
158
|
+
enabled: z.boolean().default(true),
|
|
159
|
+
/** Default invocation mode — "fast" (code-only LLM) or "deep" (rendered + vision-LLM) */
|
|
160
|
+
mode: z.enum(["fast", "deep"]).default("fast"),
|
|
161
|
+
/** B' detect-and-offer behavior when preconditions missing */
|
|
162
|
+
autoCapture: z.enum(["prompt", "auto", "skip"]).default("prompt"),
|
|
163
|
+
/** LLM provider configuration */
|
|
164
|
+
llm: z.object({
|
|
165
|
+
provider: z.string().default("anthropic"),
|
|
166
|
+
model: z.string().default("claude-sonnet-4-6"),
|
|
167
|
+
visionModel: z.string().optional()
|
|
168
|
+
}).optional(),
|
|
169
|
+
/** Catalog scoping */
|
|
170
|
+
catalog: z.object({
|
|
171
|
+
path: z.string().default("default"),
|
|
172
|
+
rubrics: z.union([z.literal("all"), z.literal("none"), z.array(z.string())]).default("all"),
|
|
173
|
+
patterns: z.union([z.literal("all"), z.literal("none"), z.array(z.string())]).default("all"),
|
|
174
|
+
exemplars: z.union([z.literal("all"), z.literal("none"), z.array(z.string())]).default("all")
|
|
175
|
+
}).optional(),
|
|
176
|
+
/** Signal feedback loop (CRITIQUE recurrence → pattern proposal) */
|
|
177
|
+
signal: z.object({
|
|
178
|
+
/** N=5 by default — emit candidate pattern proposal after this many recurrences */
|
|
179
|
+
proposalThreshold: z.number().int().positive().default(5)
|
|
180
|
+
}).optional()
|
|
181
|
+
});
|
|
102
182
|
var DesignConfigSchema = z.object({
|
|
103
183
|
/**
|
|
104
184
|
* Whether design-system tooling is enabled for this project. Set during init.
|
|
@@ -113,7 +193,17 @@ var DesignConfigSchema = z.object({
|
|
|
113
193
|
/** Path to design tokens (e.g. JSON or CSS) */
|
|
114
194
|
tokenPath: z.string().optional(),
|
|
115
195
|
/** Brief description of the intended aesthetic direction */
|
|
116
|
-
aestheticIntent: z.string().optional()
|
|
196
|
+
aestheticIntent: z.string().optional(),
|
|
197
|
+
/**
|
|
198
|
+
* Design-pipeline audit configuration (rule-based floor layer).
|
|
199
|
+
* Omit to use built-in defaults.
|
|
200
|
+
*/
|
|
201
|
+
audit: DesignAuditConfigSchema.optional(),
|
|
202
|
+
/**
|
|
203
|
+
* Design-craft configuration (LLM-judgment ceiling layer, design-pipeline #6).
|
|
204
|
+
* Omit to use built-in defaults.
|
|
205
|
+
*/
|
|
206
|
+
craft: DesignCraftConfigSchema.optional()
|
|
117
207
|
}).superRefine((value, ctx) => {
|
|
118
208
|
if (value.enabled === true && (!value.platforms || value.platforms.length === 0)) {
|
|
119
209
|
ctx.addIssue({
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resultToMcpResponse
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RC3OI5NK.js";
|
|
4
4
|
import {
|
|
5
5
|
sanitizePath
|
|
6
6
|
} from "./chunk-W6Y7ZW3Y.js";
|
|
7
7
|
import {
|
|
8
8
|
findConfigFile,
|
|
9
9
|
loadConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-B4OLYXZ4.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-IY2TZLY5.js";
|
|
14
14
|
import {
|
|
15
15
|
Ok
|
|
16
16
|
} from "./chunk-OH3NXXUY.js";
|
|
@@ -35,7 +35,7 @@ var checkPerformanceDefinition = {
|
|
|
35
35
|
};
|
|
36
36
|
async function handleCheckPerformance(input) {
|
|
37
37
|
try {
|
|
38
|
-
const { EntropyAnalyzer } = await import("./dist-
|
|
38
|
+
const { EntropyAnalyzer } = await import("./dist-XIJWWQ5N.js");
|
|
39
39
|
const typeFilter = input.type ?? "all";
|
|
40
40
|
const projectPath = sanitizePath(input.path);
|
|
41
41
|
let entryPoints;
|
|
@@ -58,10 +58,10 @@ async function handleCheckPerformance(input) {
|
|
|
58
58
|
});
|
|
59
59
|
let graphOptions;
|
|
60
60
|
try {
|
|
61
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
61
|
+
const { loadGraphStore } = await import("./graph-loader-EIFEOUVI.js");
|
|
62
62
|
const store = await loadGraphStore(projectPath);
|
|
63
63
|
if (store) {
|
|
64
|
-
const { GraphComplexityAdapter, GraphCouplingAdapter } = await import("./dist-
|
|
64
|
+
const { GraphComplexityAdapter, GraphCouplingAdapter } = await import("./dist-R3TOOPJ7.js");
|
|
65
65
|
const complexityAdapter = new GraphComplexityAdapter(store);
|
|
66
66
|
const couplingAdapter = new GraphCouplingAdapter(store);
|
|
67
67
|
graphOptions = {
|
|
@@ -98,7 +98,7 @@ var getPerfBaselinesDefinition = {
|
|
|
98
98
|
};
|
|
99
99
|
async function handleGetPerfBaselines(input) {
|
|
100
100
|
try {
|
|
101
|
-
const { BaselineManager } = await import("./dist-
|
|
101
|
+
const { BaselineManager } = await import("./dist-XIJWWQ5N.js");
|
|
102
102
|
const manager = new BaselineManager(sanitizePath(input.path));
|
|
103
103
|
const baselines = manager.load();
|
|
104
104
|
return resultToMcpResponse(
|
|
@@ -146,7 +146,7 @@ var updatePerfBaselinesDefinition = {
|
|
|
146
146
|
};
|
|
147
147
|
async function handleUpdatePerfBaselines(input) {
|
|
148
148
|
try {
|
|
149
|
-
const { BaselineManager } = await import("./dist-
|
|
149
|
+
const { BaselineManager } = await import("./dist-XIJWWQ5N.js");
|
|
150
150
|
const manager = new BaselineManager(sanitizePath(input.path));
|
|
151
151
|
manager.save(input.results, input.commitHash);
|
|
152
152
|
const updated = manager.load();
|
|
@@ -176,7 +176,7 @@ var getCriticalPathsDefinition = {
|
|
|
176
176
|
};
|
|
177
177
|
async function handleGetCriticalPaths(input) {
|
|
178
178
|
try {
|
|
179
|
-
const { CriticalPathResolver } = await import("./dist-
|
|
179
|
+
const { CriticalPathResolver } = await import("./dist-XIJWWQ5N.js");
|
|
180
180
|
const resolver = new CriticalPathResolver(sanitizePath(input.path));
|
|
181
181
|
const result = await resolver.resolve();
|
|
182
182
|
return resultToMcpResponse(Ok(result));
|
|
@@ -1643,7 +1643,7 @@ function parseAntiPatterns(content) {
|
|
|
1643
1643
|
}
|
|
1644
1644
|
return patterns;
|
|
1645
1645
|
}
|
|
1646
|
-
var NODE_TYPES, EDGE_TYPES, OBSERVABILITY_TYPES, CURRENT_SCHEMA_VERSION, NODE_STABILITY, GraphNodeSchema, GraphEdgeSchema, POISONED_KEYS, GraphStore, VectorStore, DEFAULT_TTL_MS, PackedSummaryCache, ContextQL, TEST_TYPES, DOC_TYPES, CODE_TYPES, DEFAULT_SKIP_DIRS, SKIP_METHOD_NAMES, FUNCTION_PATTERNS, CLASS_PATTERNS, INTERFACE_PATTERNS, METHOD_PATTERNS, GO_METHOD_PATTERN, VARIABLE_PATTERNS, SUPPORTED_EXTENSIONS, SKIP_EXTENSIONS, CodeIngestor, execFileAsync, GitIngestor, TopologicalLinker, CODE_NODE_TYPES, DOCS_OWNED_BY_OTHER_INGESTORS, KnowledgeIngestor, BUG_TRACK_CATEGORIES, KNOWLEDGE_TRACK_CATEGORIES, ISO_DATE, SolutionBaseSchema, SolutionDocFrontmatterSchema, BUSINESS_KNOWLEDGE_TYPES, GOVERNS_SOURCE_TYPES, CODE_NODE_TYPES2, MEASURABLE_TYPES, BusinessKnowledgeIngestor, CODE_NODE_TYPES3, DecisionIngestor, REQUIREMENT_SECTIONS, SECTION_HEADING_RE, NUMBERED_ITEM_RE, CODE_NODE_TYPES4, RequirementIngestor, DEFAULT_PATTERNS, DEFAULT_BLOCKLIST, CODE_EXTENSIONS, MermaidParser, D2Parser, PlantUmlParser, DIAGRAM_EXTENSIONS, DiagramParser, HEURISTIC_PATTERNS, SCANNABLE_TYPES, KnowledgeLinker, StructuralDriftDetector, BUSINESS_NODE_TYPES, KnowledgeStagingAggregator, EXT_TO_LANGUAGE, SKIP_EXTENSIONS2, EXTRACTOR_EDGE_TYPE, ExtractionRunner, PATTERNS, TestDescriptionExtractor, EnumConstantExtractor, ValidationRuleExtractor, ApiPathExtractor, ALL_EXTRACTORS, ImageAnalysisExtractor, KNOWLEDGE_NODE_TYPES, SIMILARITY_THRESHOLD, SEVERITY_MAP, ContradictionDetector, KNOWLEDGE_TYPES, CODE_TYPES2, KNOWLEDGE_EDGE_TYPES, CoverageScorer, VALID_BUSINESS_TYPES, DEFAULT_MAX_DOCS, MAX_COLLISION_SUFFIX, KnowledgeDocMaterializer, BUSINESS_NODE_TYPES2, SNAPSHOT_NODE_TYPES, KnowledgePipelineRunner, CODE_NODE_TYPES5, RETRYABLE_STATUSES, SANITIZE_RULES, SyncManager, SUMMARIZE_PROMPT, JiraConnector, SlackConnector, ConfluenceConnector, CIConnector, CONSTRAINT_KEYWORDS, FigmaConnector, MIN_CONTENT_LENGTH, CONCEPT_ITEM_TYPES, MiroConnector, STOP_WORDS, FusionLayer, CODE_NODE_TYPES6, GraphEntropyAdapter, GraphComplexityAdapter, GraphCouplingAdapter, DEFAULT_THRESHOLD, DEFAULT_METRICS, RECOGNIZED_METRICS, GraphAnomalyAdapter, INTENTS, SIGNAL_WEIGHTS, INTENT_SIGNALS, IntentClassifier, INTENT_KEYWORDS, STOP_WORDS2, PASCAL_OR_CAMEL_RE, FILE_PATH_RE, QUOTED_RE, EntityExtractor, EntityResolver, ResponseFormatter, CompositeProbabilityStrategy, DEFAULT_PROBABILITY_FLOOR, DEFAULT_MAX_DEPTH, CascadeSimulator, ENTITY_REQUIRED_INTENTS, classifier, extractor, formatter, PHASE_NODE_TYPES, CODE_NODE_TYPES7, Assembler, GraphConstraintAdapter, DesignIngestor, DesignConstraintAdapter, GraphFeedbackAdapter, DEFAULT_EDGE_TYPES, TaskIndependenceAnalyzer, ConflictPredictor, VERSION;
|
|
1646
|
+
var NODE_TYPES, EDGE_TYPES, OBSERVABILITY_TYPES, CURRENT_SCHEMA_VERSION, NODE_STABILITY, GraphNodeSchema, GraphEdgeSchema, POISONED_KEYS, GraphStore, VectorStore, DEFAULT_TTL_MS, PackedSummaryCache, ContextQL, TEST_TYPES, DOC_TYPES, CODE_TYPES, DEFAULT_SKIP_DIRS, SKIP_METHOD_NAMES, FUNCTION_PATTERNS, CLASS_PATTERNS, INTERFACE_PATTERNS, METHOD_PATTERNS, GO_METHOD_PATTERN, VARIABLE_PATTERNS, SUPPORTED_EXTENSIONS, SKIP_EXTENSIONS, CodeIngestor, execFileAsync, GitIngestor, TopologicalLinker, CODE_NODE_TYPES, DOCS_OWNED_BY_OTHER_INGESTORS, KnowledgeIngestor, BUG_TRACK_CATEGORIES, KNOWLEDGE_TRACK_CATEGORIES, ISO_DATE, SolutionBaseSchema, SolutionDocFrontmatterSchema, BUSINESS_KNOWLEDGE_TYPES, GOVERNS_SOURCE_TYPES, CODE_NODE_TYPES2, MEASURABLE_TYPES, BusinessKnowledgeIngestor, CODE_NODE_TYPES3, DecisionIngestor, REQUIREMENT_SECTIONS, SECTION_HEADING_RE, NUMBERED_ITEM_RE, CODE_NODE_TYPES4, RequirementIngestor, DEFAULT_PATTERNS, DEFAULT_BLOCKLIST, CODE_EXTENSIONS, MermaidParser, D2Parser, PlantUmlParser, DIAGRAM_EXTENSIONS, DiagramParser, HEURISTIC_PATTERNS, SCANNABLE_TYPES, KnowledgeLinker, StructuralDriftDetector, BUSINESS_NODE_TYPES, KnowledgeStagingAggregator, EXT_TO_LANGUAGE, SKIP_EXTENSIONS2, EXTRACTOR_EDGE_TYPE, ExtractionRunner, PATTERNS, TestDescriptionExtractor, EnumConstantExtractor, ValidationRuleExtractor, ApiPathExtractor, ALL_EXTRACTORS, ImageAnalysisExtractor, KNOWLEDGE_NODE_TYPES, SIMILARITY_THRESHOLD, SEVERITY_MAP, ContradictionDetector, KNOWLEDGE_TYPES, CODE_TYPES2, KNOWLEDGE_EDGE_TYPES, CoverageScorer, VALID_BUSINESS_TYPES, DEFAULT_MAX_DOCS, MAX_COLLISION_SUFFIX, KnowledgeDocMaterializer, BUSINESS_NODE_TYPES2, SNAPSHOT_NODE_TYPES, KnowledgePipelineRunner, CODE_NODE_TYPES5, RETRYABLE_STATUSES, SANITIZE_RULES, SyncManager, SUMMARIZE_PROMPT, JiraConnector, SlackConnector, ConfluenceConnector, CIConnector, CONSTRAINT_KEYWORDS, FigmaConnector, MIN_CONTENT_LENGTH, CONCEPT_ITEM_TYPES, MiroConnector, STOP_WORDS, FusionLayer, CODE_NODE_TYPES6, GraphEntropyAdapter, GraphComplexityAdapter, GraphCouplingAdapter, DEFAULT_THRESHOLD, DEFAULT_METRICS, RECOGNIZED_METRICS, GraphAnomalyAdapter, INTENTS, SIGNAL_WEIGHTS, INTENT_SIGNALS, IntentClassifier, INTENT_KEYWORDS, STOP_WORDS2, PASCAL_OR_CAMEL_RE, FILE_PATH_RE, QUOTED_RE, EntityExtractor, EntityResolver, ResponseFormatter, CompositeProbabilityStrategy, DEFAULT_PROBABILITY_FLOOR, DEFAULT_MAX_DEPTH, CascadeSimulator, ENTITY_REQUIRED_INTENTS, classifier, extractor, formatter, PHASE_NODE_TYPES, CODE_NODE_TYPES7, Assembler, GraphConstraintAdapter, DesignIngestor, CODE_PREFIX_LABELS, DesignConstraintAdapter, GraphFeedbackAdapter, DEFAULT_EDGE_TYPES, TaskIndependenceAnalyzer, ConflictPredictor, VERSION;
|
|
1647
1647
|
var init_dist = __esm({
|
|
1648
1648
|
"../graph/dist/index.mjs"() {
|
|
1649
1649
|
NODE_TYPES = [
|
|
@@ -9141,6 +9141,16 @@ ${replyLines.join("\n")}`;
|
|
|
9141
9141
|
return { ...merged, durationMs: Date.now() - start };
|
|
9142
9142
|
}
|
|
9143
9143
|
};
|
|
9144
|
+
CODE_PREFIX_LABELS = {
|
|
9145
|
+
"ANAT-D": "Component anatomy (definition)",
|
|
9146
|
+
"ANAT-P": "Component anatomy (pattern presence)",
|
|
9147
|
+
"ANAT-U": "Component anatomy (usage)",
|
|
9148
|
+
"CRAFT-C": "Design craft (critique)",
|
|
9149
|
+
"CRAFT-P": "Design craft (polish)",
|
|
9150
|
+
"CRAFT-B": "Design craft (benchmark)",
|
|
9151
|
+
"DESIGN-": "Design constraint (legacy)",
|
|
9152
|
+
"A11Y-": "Accessibility"
|
|
9153
|
+
};
|
|
9144
9154
|
DesignConstraintAdapter = class {
|
|
9145
9155
|
constructor(store) {
|
|
9146
9156
|
this.store = store;
|
|
@@ -9222,6 +9232,76 @@ ${replyLines.join("\n")}`;
|
|
|
9222
9232
|
return "error";
|
|
9223
9233
|
}
|
|
9224
9234
|
}
|
|
9235
|
+
/**
|
|
9236
|
+
* Record externally-computed craft findings (audit-component-anatomy,
|
|
9237
|
+
* harness-design-craft, etc.) as graph state. Idempotent — re-running on
|
|
9238
|
+
* the same findings produces no duplicate nodes or edges thanks to
|
|
9239
|
+
* GraphStore's keyed merge semantics.
|
|
9240
|
+
*
|
|
9241
|
+
* Each finding becomes:
|
|
9242
|
+
* • a `design_constraint` node keyed by finding code (created lazily
|
|
9243
|
+
* if absent; metadata merged on re-record so the most recent message
|
|
9244
|
+
* / severity wins)
|
|
9245
|
+
* • a `violates_design` edge from the source file (id = file path) to
|
|
9246
|
+
* the constraint node, with per-finding metadata (line, severity,
|
|
9247
|
+
* message, evidence, runId)
|
|
9248
|
+
*
|
|
9249
|
+
* The file node is NOT created here — it's assumed to already exist in
|
|
9250
|
+
* the graph from a prior ingest. If it does not, the edge will still be
|
|
9251
|
+
* created (graph stores edges by key, not by referential integrity) and
|
|
9252
|
+
* a subsequent ingest will populate the file node.
|
|
9253
|
+
*/
|
|
9254
|
+
recordFindings(findings) {
|
|
9255
|
+
let constraintsAdded = 0;
|
|
9256
|
+
let edgesAdded = 0;
|
|
9257
|
+
const seenConstraintIds = /* @__PURE__ */ new Set();
|
|
9258
|
+
for (const finding of findings) {
|
|
9259
|
+
const constraintId = `design_constraint:${finding.code}`;
|
|
9260
|
+
if (!seenConstraintIds.has(finding.code)) {
|
|
9261
|
+
const existing = this.store.getNode(constraintId);
|
|
9262
|
+
if (!existing) constraintsAdded += 1;
|
|
9263
|
+
this.store.addNode({
|
|
9264
|
+
id: constraintId,
|
|
9265
|
+
type: "design_constraint",
|
|
9266
|
+
name: finding.code,
|
|
9267
|
+
metadata: {
|
|
9268
|
+
code: finding.code,
|
|
9269
|
+
label: this.labelForCode(finding.code),
|
|
9270
|
+
mostRecentMessage: finding.message,
|
|
9271
|
+
mostRecentSeverity: finding.severity
|
|
9272
|
+
}
|
|
9273
|
+
});
|
|
9274
|
+
seenConstraintIds.add(finding.code);
|
|
9275
|
+
}
|
|
9276
|
+
const fileId = finding.file;
|
|
9277
|
+
const edgeMetadata = {
|
|
9278
|
+
message: finding.message,
|
|
9279
|
+
severity: finding.severity
|
|
9280
|
+
};
|
|
9281
|
+
if (finding.line !== void 0) edgeMetadata.line = finding.line;
|
|
9282
|
+
if (finding.evidence !== void 0) edgeMetadata.evidence = finding.evidence;
|
|
9283
|
+
if (finding.runId !== void 0) edgeMetadata.runId = finding.runId;
|
|
9284
|
+
const before = this.store.getEdges({
|
|
9285
|
+
from: fileId,
|
|
9286
|
+
to: constraintId,
|
|
9287
|
+
type: "violates_design"
|
|
9288
|
+
});
|
|
9289
|
+
this.store.addEdge({
|
|
9290
|
+
from: fileId,
|
|
9291
|
+
to: constraintId,
|
|
9292
|
+
type: "violates_design",
|
|
9293
|
+
metadata: edgeMetadata
|
|
9294
|
+
});
|
|
9295
|
+
if (before.length === 0) edgesAdded += 1;
|
|
9296
|
+
}
|
|
9297
|
+
return { constraintsAdded, edgesAdded };
|
|
9298
|
+
}
|
|
9299
|
+
labelForCode(code) {
|
|
9300
|
+
for (const prefix of Object.keys(CODE_PREFIX_LABELS)) {
|
|
9301
|
+
if (code.startsWith(prefix)) return CODE_PREFIX_LABELS[prefix];
|
|
9302
|
+
}
|
|
9303
|
+
return "Design constraint";
|
|
9304
|
+
}
|
|
9225
9305
|
};
|
|
9226
9306
|
GraphFeedbackAdapter = class {
|
|
9227
9307
|
constructor(store) {
|