@harness-engineering/cli 2.6.1 → 2.7.1
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 +244 -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 +244 -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 +244 -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 +244 -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-FKMKH6ZF.js} +4 -4
- package/dist/{analyzer-VY6DJVOU-4AHIJLNS.js → analyzer-H3AHBFSL-KPOPJYRB.js} +8 -8
- package/dist/{architecture-CXAVNB5X.js → architecture-LUR2I67H.js} +6 -6
- package/dist/{assess-project-M626SSPN.js → assess-project-OJWECOP2.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-HS5KYLRO.js} +5 -5
- package/dist/{chunk-5XLLIYYL.js → chunk-6UHDQP2N.js} +1 -1
- package/dist/{chunk-I6K43QQS.js → chunk-7AF6C5GE.js} +3 -3
- package/dist/{chunk-372MGNTI.js → chunk-7PLIWP7U.js} +6899 -133
- package/dist/{chunk-VUCGB2KH.js → chunk-B2VAYLYI.js} +1 -1
- package/dist/{chunk-HFOB2MPQ.js → chunk-CZPOPMMI.js} +3 -3
- package/dist/{chunk-43M3RLFQ.js → chunk-FC4JPM6W.js} +2 -2
- package/dist/{chunk-6AX6R3LM.js → chunk-FEKBXX2J.js} +9 -9
- package/dist/{chunk-VTTNIZJL.js → chunk-FXZI6NJ2.js} +131 -6
- package/dist/{chunk-5JNSFYZU.js → chunk-GGSNWH7P.js} +6 -6
- package/dist/{chunk-BCFDGOMA.js → chunk-H2ZJOJ7A.js} +81 -1
- package/dist/{chunk-PFZEADQM.js → chunk-INBTDBV2.js} +79 -2
- package/dist/{chunk-Q6ZR2L6Q.js → chunk-KN3EMDZ5.js} +2 -2
- package/dist/{chunk-JFZOWO7D.js → chunk-LECXPXS3.js} +1 -1
- package/dist/{chunk-CQOMVZDC.js → chunk-LGYXR2KZ.js} +2237 -604
- package/dist/{chunk-QOKMDDBJ.js → chunk-LYIPI2SJ.js} +6 -6
- package/dist/{chunk-L5BCZ5XS.js → chunk-N5NSSLMU.js} +1 -1
- package/dist/{chunk-GWE5LL3R.js → chunk-NIVWM7OW.js} +10 -10
- package/dist/{chunk-24KCOJJG.js → chunk-O2ASYKA6.js} +1 -1
- package/dist/{chunk-K246XQ2L.js → chunk-PTHX545Q.js} +1 -1
- package/dist/{chunk-EPUKTTJZ.js → chunk-RC3OI5NK.js} +5 -1
- package/dist/{chunk-YP7I25SL.js → chunk-RJ2WEES5.js} +1 -1
- package/dist/{chunk-5FDBXUFW.js → chunk-TIH53QXY.js} +1 -1
- package/dist/{chunk-OA6SWTU4.js → chunk-VI4IS55S.js} +11 -8
- package/dist/{chunk-GWF2OILZ.js → chunk-VSIRUZQP.js} +1 -1
- package/dist/{chunk-YYRQCQPZ.js → chunk-WZY5U6NS.js} +178 -109
- package/dist/{chunk-SZEFU6XC.js → chunk-Y4T6ENKQ.js} +9 -9
- package/dist/{chunk-HMW3VKUF.js → chunk-Z3TMCCZB.js} +10 -10
- package/dist/{ci-workflow-3JNDZQYD.js → ci-workflow-MDSTHJOY.js} +4 -4
- package/dist/{dist-OHDQBTSO.js → dist-72ID44UE.js} +3 -3
- package/dist/{dist-QPWXPCPL.js → dist-R3TOOPJ7.js} +1 -1
- package/dist/{docs-5RYMDHN3.js → docs-2RFOJ6XY.js} +6 -6
- package/dist/{engine-GKGT5ULT.js → engine-BSFKOGPN.js} +4 -4
- package/dist/{entropy-DQTAPSSE.js → entropy-3UX6644G.js} +5 -5
- package/dist/{feedback-WH6XPQJS.js → feedback-CVCFYND4.js} +2 -2
- package/dist/{generate-agent-definitions-SZA4QIHN.js → generate-agent-definitions-HZ3XENWO.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 +1012 -12
- package/dist/index.js +27 -27
- package/dist/{loader-BNKGM23C.js → loader-6RHWU5FH.js} +4 -4
- package/dist/{mcp-YKKPWUMH.js → mcp-OYR26JDI.js} +17 -17
- package/dist/{performance-54TMJOEU.js → performance-JJMIRXCH.js} +6 -6
- package/dist/{review-pipeline-OTDDVPNY.js → review-pipeline-BHQZIXWZ.js} +4 -4
- package/dist/{runtime-W5THSNAL.js → runtime-DALTAVTN.js} +4 -4
- package/dist/{scan-4PPP6ZXT.js → scan-LYKLM4EQ.js} +1 -1
- package/dist/{security-27HW7CYT.js → security-RMLMYFPB.js} +1 -1
- package/dist/{validate-QRVCD4GP.js → validate-R7DZRDFK.js} +5 -5
- package/dist/{validate-cross-check-BUAGBAPO.js → validate-cross-check-AUUZFNVL.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-72ID44UE.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-72ID44UE.js");
|
|
118
118
|
const projectRoot = sanitizePath(input.path);
|
|
119
119
|
const manager = new core.SecurityTimelineManager(projectRoot);
|
|
120
120
|
const trendOptions = {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FXZI6NJ2.js";
|
|
4
4
|
import {
|
|
5
5
|
logger
|
|
6
6
|
} from "./chunk-EBJQ6N4M.js";
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from "./chunk-3WGJMBKH.js";
|
|
10
10
|
import {
|
|
11
11
|
init_dist
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WZY5U6NS.js";
|
|
13
13
|
import {
|
|
14
14
|
Ok
|
|
15
15
|
} from "./chunk-OH3NXXUY.js";
|
|
@@ -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-FXZI6NJ2.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-WZY5U6NS.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-72ID44UE.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-72ID44UE.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-72ID44UE.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-72ID44UE.js");
|
|
180
180
|
const resolver = new CriticalPathResolver(sanitizePath(input.path));
|
|
181
181
|
const result = await resolver.resolve();
|
|
182
182
|
return resultToMcpResponse(Ok(result));
|
|
@@ -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-WZY5U6NS.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";
|
|
@@ -29,6 +29,7 @@ import * as path from "path";
|
|
|
29
29
|
init_dist2();
|
|
30
30
|
init_dist();
|
|
31
31
|
import { z } from "zod";
|
|
32
|
+
import { BackendDefSchema, RoutingConfigSchema } from "@harness-engineering/orchestrator";
|
|
32
33
|
var LayerSchema = z.object({
|
|
33
34
|
/** Human-readable name of the layer */
|
|
34
35
|
name: z.string(),
|
|
@@ -55,7 +56,21 @@ var AgentConfigSchema = z.object({
|
|
|
55
56
|
/** Maximum execution time in milliseconds */
|
|
56
57
|
timeout: z.number().default(3e5),
|
|
57
58
|
/** Optional list of skill IDs pre-authorized for the agent */
|
|
58
|
-
skills: z.array(z.string()).optional()
|
|
59
|
+
skills: z.array(z.string()).optional(),
|
|
60
|
+
/**
|
|
61
|
+
* Named backend definitions (Spec 2 — multi-backend routing).
|
|
62
|
+
*
|
|
63
|
+
* Each entry maps a backend name (chosen by the project) to a backend
|
|
64
|
+
* type plus its connection details (model, endpoint, apiKey, etc.).
|
|
65
|
+
* Referenced from `craft.llm.backend`, from orchestrator routing rules,
|
|
66
|
+
* and from any future subsystem that needs a configured LLM backend.
|
|
67
|
+
*
|
|
68
|
+
* Schema is re-exported from @harness-engineering/orchestrator so this
|
|
69
|
+
* file and the orchestrator runtime validate against the same source.
|
|
70
|
+
*/
|
|
71
|
+
backends: z.record(z.string(), BackendDefSchema).optional(),
|
|
72
|
+
/** Routing rules for orchestrator agent dispatch. */
|
|
73
|
+
routing: RoutingConfigSchema.optional()
|
|
59
74
|
});
|
|
60
75
|
var EntropyConfigSchema = z.object({
|
|
61
76
|
/** Explicit entry points for reachability analysis (overrides auto-detection) */
|
|
@@ -99,6 +114,86 @@ var PerformanceConfigSchema = z.object({
|
|
|
99
114
|
/** Size budget for bundles or directories */
|
|
100
115
|
sizeBudget: z.record(z.unknown()).optional()
|
|
101
116
|
}).passthrough();
|
|
117
|
+
var ComponentAnatomyAuditConfigSchema = z.object({
|
|
118
|
+
/** Gate for the entire audit AND the harness-accessibility deferral */
|
|
119
|
+
enabled: z.boolean().default(true),
|
|
120
|
+
/** "default" or a path to a project-supplied override catalog */
|
|
121
|
+
catalog: z.string().default("default"),
|
|
122
|
+
/** "all", "none", or an explicit list of pattern codes (e.g. ["ANAT-P001"]) */
|
|
123
|
+
patterns: z.union([z.literal("all"), z.literal("none"), z.array(z.string())]).default("all"),
|
|
124
|
+
/** Fast-mode controls (validate-time scope cap + pattern opt-in) */
|
|
125
|
+
fastMode: z.object({
|
|
126
|
+
/** Whether validate-time runs pattern queries (default false — patterns are full-mode only) */
|
|
127
|
+
patterns: z.boolean().default(false),
|
|
128
|
+
/** Cap to keep validate fast on large repos */
|
|
129
|
+
maxFiles: z.number().int().positive().default(500)
|
|
130
|
+
}).default({})
|
|
131
|
+
});
|
|
132
|
+
var DriftDetectionConfigSchema = z.object({
|
|
133
|
+
/** Gate for the entire drift verifier */
|
|
134
|
+
enabled: z.boolean().default(true),
|
|
135
|
+
/** Rule toggles — defaults align with v1 scope (T* + P*) */
|
|
136
|
+
rules: z.object({
|
|
137
|
+
/** Token bypass rules (DRIFT-T001-T004). Default: true. */
|
|
138
|
+
tokenBypass: z.boolean().default(true),
|
|
139
|
+
/** Primitive adoption rules (DRIFT-P001-P004). Default: true. */
|
|
140
|
+
primitiveAdoption: z.boolean().default(true)
|
|
141
|
+
}).default({}),
|
|
142
|
+
/** Fast-mode controls (validate-time scope cap) */
|
|
143
|
+
fastMode: z.object({
|
|
144
|
+
/** Cap to keep validate fast on large repos */
|
|
145
|
+
maxFiles: z.number().int().positive().default(500)
|
|
146
|
+
}).default({})
|
|
147
|
+
});
|
|
148
|
+
var BrandComplianceConfigSchema = z.object({
|
|
149
|
+
/** Gate for the entire brand verifier */
|
|
150
|
+
enabled: z.boolean().default(true),
|
|
151
|
+
/** Rule toggles — defaults align with v1 scope (BRAND-T* + BRAND-V001) */
|
|
152
|
+
rules: z.object({
|
|
153
|
+
/** Token-misuse rules (BRAND-T001 via $extensions.harness.brand.forbidden_contexts). Default: true. */
|
|
154
|
+
tokenMisuse: z.boolean().default(true),
|
|
155
|
+
/** Voice rule (BRAND-V001 forbidden phrases in JSX text + string attributes). Default: true. */
|
|
156
|
+
voice: z.boolean().default(true)
|
|
157
|
+
}).default({}),
|
|
158
|
+
/** Fast-mode controls (validate-time scope cap) */
|
|
159
|
+
fastMode: z.object({
|
|
160
|
+
maxFiles: z.number().int().positive().default(500)
|
|
161
|
+
}).default({})
|
|
162
|
+
});
|
|
163
|
+
var DesignAuditConfigSchema = z.object({
|
|
164
|
+
/** Component-anatomy audit (design-pipeline #2) */
|
|
165
|
+
componentAnatomy: ComponentAnatomyAuditConfigSchema.optional(),
|
|
166
|
+
/** Design-system drift detection (design-pipeline #1, detect half) */
|
|
167
|
+
driftDetection: DriftDetectionConfigSchema.optional(),
|
|
168
|
+
/** Brand-compliance audit (design-pipeline #3) */
|
|
169
|
+
brandCompliance: BrandComplianceConfigSchema.optional()
|
|
170
|
+
});
|
|
171
|
+
var DesignCraftConfigSchema = z.object({
|
|
172
|
+
/** Gate for the entire skill AND the harness-design overlap deferral */
|
|
173
|
+
enabled: z.boolean().default(true),
|
|
174
|
+
/** Default invocation mode — "fast" (code-only LLM) or "deep" (rendered + vision-LLM) */
|
|
175
|
+
mode: z.enum(["fast", "deep"]).default("fast"),
|
|
176
|
+
/** B' detect-and-offer behavior when preconditions missing */
|
|
177
|
+
autoCapture: z.enum(["prompt", "auto", "skip"]).default("prompt"),
|
|
178
|
+
/** LLM provider configuration */
|
|
179
|
+
llm: z.object({
|
|
180
|
+
provider: z.string().default("anthropic"),
|
|
181
|
+
model: z.string().default("claude-sonnet-4-6"),
|
|
182
|
+
visionModel: z.string().optional()
|
|
183
|
+
}).optional(),
|
|
184
|
+
/** Catalog scoping */
|
|
185
|
+
catalog: z.object({
|
|
186
|
+
path: z.string().default("default"),
|
|
187
|
+
rubrics: z.union([z.literal("all"), z.literal("none"), z.array(z.string())]).default("all"),
|
|
188
|
+
patterns: z.union([z.literal("all"), z.literal("none"), z.array(z.string())]).default("all"),
|
|
189
|
+
exemplars: z.union([z.literal("all"), z.literal("none"), z.array(z.string())]).default("all")
|
|
190
|
+
}).optional(),
|
|
191
|
+
/** Signal feedback loop (CRITIQUE recurrence → pattern proposal) */
|
|
192
|
+
signal: z.object({
|
|
193
|
+
/** N=5 by default — emit candidate pattern proposal after this many recurrences */
|
|
194
|
+
proposalThreshold: z.number().int().positive().default(5)
|
|
195
|
+
}).optional()
|
|
196
|
+
});
|
|
102
197
|
var DesignConfigSchema = z.object({
|
|
103
198
|
/**
|
|
104
199
|
* Whether design-system tooling is enabled for this project. Set during init.
|
|
@@ -113,7 +208,17 @@ var DesignConfigSchema = z.object({
|
|
|
113
208
|
/** Path to design tokens (e.g. JSON or CSS) */
|
|
114
209
|
tokenPath: z.string().optional(),
|
|
115
210
|
/** Brief description of the intended aesthetic direction */
|
|
116
|
-
aestheticIntent: z.string().optional()
|
|
211
|
+
aestheticIntent: z.string().optional(),
|
|
212
|
+
/**
|
|
213
|
+
* Design-pipeline audit configuration (rule-based floor layer).
|
|
214
|
+
* Omit to use built-in defaults.
|
|
215
|
+
*/
|
|
216
|
+
audit: DesignAuditConfigSchema.optional(),
|
|
217
|
+
/**
|
|
218
|
+
* Design-craft configuration (LLM-judgment ceiling layer, design-pipeline #6).
|
|
219
|
+
* Omit to use built-in defaults.
|
|
220
|
+
*/
|
|
221
|
+
craft: DesignCraftConfigSchema.optional()
|
|
117
222
|
}).superRefine((value, ctx) => {
|
|
118
223
|
if (value.enabled === true && (!value.platforms || value.platforms.length === 0)) {
|
|
119
224
|
ctx.addIssue({
|
|
@@ -261,6 +366,24 @@ var ComplianceConfigSchema = z.object({
|
|
|
261
366
|
/** Branch naming convention settings */
|
|
262
367
|
branching: BranchingConfigSchema.default({})
|
|
263
368
|
});
|
|
369
|
+
var CraftConfigSchema = z.object({
|
|
370
|
+
llm: z.object({
|
|
371
|
+
/**
|
|
372
|
+
* Name of an entry in `agent.backends` to route craft LLM calls
|
|
373
|
+
* through. Supported backend types: claude, anthropic, openai,
|
|
374
|
+
* local, pi, mock. (gemini is declared in agent.backends but is
|
|
375
|
+
* not yet wired through the craft adapter.)
|
|
376
|
+
*/
|
|
377
|
+
backend: z.string().optional(),
|
|
378
|
+
/**
|
|
379
|
+
* Special-case mode that doesn't correspond to a backend def.
|
|
380
|
+
* - `in-session` — defer prompts to the calling chat session
|
|
381
|
+
* via the two-step MCP flow (collect → finalize).
|
|
382
|
+
* - `mock` — deterministic mock provider, for tests / smoke runs.
|
|
383
|
+
*/
|
|
384
|
+
mode: z.enum(["in-session", "mock"]).optional()
|
|
385
|
+
}).optional()
|
|
386
|
+
});
|
|
264
387
|
var HarnessConfigSchema = z.object({
|
|
265
388
|
/** Configuration schema version */
|
|
266
389
|
version: z.literal(1),
|
|
@@ -312,6 +435,8 @@ var HarnessConfigSchema = z.object({
|
|
|
312
435
|
phaseGates: PhaseGatesConfigSchema.optional(),
|
|
313
436
|
/** Design system consistency settings */
|
|
314
437
|
design: DesignConfigSchema.optional(),
|
|
438
|
+
/** Shared configuration for craft-pipeline ceiling skills (LLM-judgment) */
|
|
439
|
+
craft: CraftConfigSchema.optional(),
|
|
315
440
|
/** Internationalization (i18n) settings */
|
|
316
441
|
i18n: I18nConfigSchema.optional(),
|
|
317
442
|
/** Code review settings */
|
|
@@ -363,7 +488,7 @@ var HarnessConfigSchema = z.object({
|
|
|
363
488
|
connectors: z.record(z.string(), z.record(z.string(), z.unknown())).default({})
|
|
364
489
|
}).optional(),
|
|
365
490
|
/**
|
|
366
|
-
*
|
|
491
|
+
* Disk-hygiene rules consumed by `harness cleanup-sessions --all`.
|
|
367
492
|
* Keys correspond to registered target names (sessions, cache, maintenance,
|
|
368
493
|
* dashboard-state, snapshots, analyzer-output); values override the default
|
|
369
494
|
* TTL in hours. Unknown keys are ignored (forward-compatible).
|
|
@@ -372,7 +497,7 @@ var HarnessConfigSchema = z.object({
|
|
|
372
497
|
ttlHours: z.record(z.string(), z.number().positive()).optional()
|
|
373
498
|
}).optional(),
|
|
374
499
|
/**
|
|
375
|
-
*
|
|
500
|
+
* Pre-launch OSV malware guard configuration.
|
|
376
501
|
* `enabled: false` disables the guard; `strict: true` reverses the default
|
|
377
502
|
* fail-open posture on OSV.dev network errors.
|
|
378
503
|
*/
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveProjectConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VSIRUZQP.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-72ID44UE.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) {
|
|
@@ -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) {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
listPersonas,
|
|
6
6
|
loadPersona
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-PTHX545Q.js";
|
|
8
8
|
import {
|
|
9
9
|
GENERATED_HEADER_AGENT,
|
|
10
10
|
VALID_PLATFORMS,
|
|
@@ -223,6 +223,78 @@ function renderCursorAgent(def) {
|
|
|
223
223
|
return lines.join("\n");
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
+
// src/agent-definitions/render-codex.ts
|
|
227
|
+
function tomlBasicString(value) {
|
|
228
|
+
const escaped = value.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, " ").replace(/\r/g, "").replace(/\t/g, " ");
|
|
229
|
+
return `"${escaped}"`;
|
|
230
|
+
}
|
|
231
|
+
function tomlMultilineString(value) {
|
|
232
|
+
if (!value.includes("'''")) {
|
|
233
|
+
return `'''
|
|
234
|
+
${value}
|
|
235
|
+
'''`;
|
|
236
|
+
}
|
|
237
|
+
const escaped = value.replace(/\\/g, "\\\\").replace(
|
|
238
|
+
/"{3,}/g,
|
|
239
|
+
(run) => run.split("").map((ch) => `\\${ch}`).join("")
|
|
240
|
+
);
|
|
241
|
+
return `"""
|
|
242
|
+
${escaped}
|
|
243
|
+
"""`;
|
|
244
|
+
}
|
|
245
|
+
function formatStep4(step, index) {
|
|
246
|
+
if ("command" in step && step.command) {
|
|
247
|
+
const cmd = step.command;
|
|
248
|
+
const when = step.when ?? "always";
|
|
249
|
+
return `${index + 1}. Run \`harness ${cmd}\` (${when})`;
|
|
250
|
+
}
|
|
251
|
+
if ("skill" in step && step.skill) {
|
|
252
|
+
const skill = step.skill;
|
|
253
|
+
const when = step.when ?? "always";
|
|
254
|
+
return `${index + 1}. Execute ${skill} skill (${when})`;
|
|
255
|
+
}
|
|
256
|
+
return `${index + 1}. Unknown step`;
|
|
257
|
+
}
|
|
258
|
+
function buildInstructionsBody(def) {
|
|
259
|
+
const sections = [];
|
|
260
|
+
sections.push("## Role");
|
|
261
|
+
sections.push("");
|
|
262
|
+
sections.push(def.role);
|
|
263
|
+
if (def.skills.length > 0) {
|
|
264
|
+
sections.push("");
|
|
265
|
+
sections.push("## Skills");
|
|
266
|
+
sections.push("");
|
|
267
|
+
for (const skill of def.skills) {
|
|
268
|
+
sections.push(`- ${skill}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (def.steps.length > 0) {
|
|
272
|
+
sections.push("");
|
|
273
|
+
sections.push("## Steps");
|
|
274
|
+
sections.push("");
|
|
275
|
+
def.steps.forEach((step, i) => {
|
|
276
|
+
sections.push(formatStep4(step, i));
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
if (def.methodology) {
|
|
280
|
+
sections.push("");
|
|
281
|
+
sections.push("## Methodology");
|
|
282
|
+
sections.push("");
|
|
283
|
+
sections.push(def.methodology);
|
|
284
|
+
}
|
|
285
|
+
return sections.join("\n");
|
|
286
|
+
}
|
|
287
|
+
function renderCodexAgent(def) {
|
|
288
|
+
const lines = [];
|
|
289
|
+
lines.push(`# ${GENERATED_HEADER_AGENT}`);
|
|
290
|
+
lines.push("");
|
|
291
|
+
lines.push(`name = ${tomlBasicString(def.name)}`);
|
|
292
|
+
lines.push(`description = ${tomlBasicString(def.description)}`);
|
|
293
|
+
lines.push(`developer_instructions = ${tomlMultilineString(buildInstructionsBody(def))}`);
|
|
294
|
+
lines.push("");
|
|
295
|
+
return lines.join("\n");
|
|
296
|
+
}
|
|
297
|
+
|
|
226
298
|
// src/commands/generate-agent-definitions.ts
|
|
227
299
|
function resolveOutputDir(platform, opts) {
|
|
228
300
|
if (opts.output) {
|
|
@@ -246,8 +318,13 @@ function loadSkillContent(skillName) {
|
|
|
246
318
|
function getRenderer(platform) {
|
|
247
319
|
if (platform === "claude-code") return renderClaudeCodeAgent;
|
|
248
320
|
if (platform === "cursor") return renderCursorAgent;
|
|
321
|
+
if (platform === "codex") return renderCodexAgent;
|
|
249
322
|
return renderGeminiAgent;
|
|
250
323
|
}
|
|
324
|
+
function agentFilename(platform, name) {
|
|
325
|
+
if (platform === "codex") return `${name}.toml`;
|
|
326
|
+
return `${name}.md`;
|
|
327
|
+
}
|
|
251
328
|
function generateAgentDefinitions(opts) {
|
|
252
329
|
const personasDir = resolvePersonasDir();
|
|
253
330
|
const personaList = listPersonas(personasDir);
|
|
@@ -268,7 +345,7 @@ function generateAgentDefinitions(opts) {
|
|
|
268
345
|
const renderer = getRenderer(platform);
|
|
269
346
|
const rendered = /* @__PURE__ */ new Map();
|
|
270
347
|
for (const def of definitions) {
|
|
271
|
-
const filename =
|
|
348
|
+
const filename = agentFilename(platform, def.name);
|
|
272
349
|
rendered.set(filename, renderer(def));
|
|
273
350
|
}
|
|
274
351
|
const plan = computeSyncPlan(outputDir, rendered);
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
init_dist,
|
|
6
6
|
paginate
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WZY5U6NS.js";
|
|
8
8
|
|
|
9
9
|
// src/mcp/tools/review-pipeline.ts
|
|
10
10
|
init_dist();
|
|
@@ -79,7 +79,7 @@ var runCodeReviewDefinition = {
|
|
|
79
79
|
};
|
|
80
80
|
async function handleRunCodeReview(input) {
|
|
81
81
|
try {
|
|
82
|
-
const { parseDiff, runReviewPipeline } = await import("./dist-
|
|
82
|
+
const { parseDiff, runReviewPipeline } = await import("./dist-72ID44UE.js");
|
|
83
83
|
const parseResult = parseDiff(input.diff);
|
|
84
84
|
if (!parseResult.ok) {
|
|
85
85
|
return {
|