@harness-engineering/cli 4.0.0 → 4.1.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.
Files changed (79) hide show
  1. package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +9 -8
  2. package/dist/agents/skills/claude-code/pre-merge-brief/SKILL.md +86 -0
  3. package/dist/agents/skills/claude-code/pre-merge-brief/skill.yaml +67 -0
  4. package/dist/agents/skills/claude-code/product-advisor/SKILL.md +202 -0
  5. package/dist/agents/skills/claude-code/product-advisor/skill.yaml +74 -0
  6. package/dist/agents/skills/codex/harness-autopilot/SKILL.md +9 -8
  7. package/dist/agents/skills/codex/pre-merge-brief/SKILL.md +86 -0
  8. package/dist/agents/skills/codex/pre-merge-brief/skill.yaml +67 -0
  9. package/dist/agents/skills/codex/product-advisor/SKILL.md +202 -0
  10. package/dist/agents/skills/codex/product-advisor/skill.yaml +74 -0
  11. package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +9 -8
  12. package/dist/agents/skills/cursor/pre-merge-brief/SKILL.md +86 -0
  13. package/dist/agents/skills/cursor/pre-merge-brief/skill.yaml +67 -0
  14. package/dist/agents/skills/cursor/product-advisor/SKILL.md +202 -0
  15. package/dist/agents/skills/cursor/product-advisor/skill.yaml +74 -0
  16. package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +9 -8
  17. package/dist/agents/skills/gemini-cli/pre-merge-brief/SKILL.md +86 -0
  18. package/dist/agents/skills/gemini-cli/pre-merge-brief/skill.yaml +67 -0
  19. package/dist/agents/skills/gemini-cli/product-advisor/SKILL.md +202 -0
  20. package/dist/agents/skills/gemini-cli/product-advisor/skill.yaml +74 -0
  21. package/dist/{agents-md-7OSNWU52.js → agents-md-7L4PKKOM.js} +4 -4
  22. package/dist/analyzer-XRCV63KC-HLTEIKAJ.js +26 -0
  23. package/dist/{architecture-2XYGJGT3.js → architecture-RCHFDI7E.js} +5 -5
  24. package/dist/{assess-project-3KPP2D6M.js → assess-project-YUDPNRS6.js} +5 -3
  25. package/dist/bin/harness-mcp.js +16 -16
  26. package/dist/bin/harness.js +27 -27
  27. package/dist/{check-phase-gate-46U5AAXE.js → check-phase-gate-56GS3A72.js} +5 -5
  28. package/dist/{chunk-MSBJ445U.js → chunk-4SKWGVYD.js} +5 -5
  29. package/dist/{chunk-CLI4K2CH.js → chunk-4U5LDFCY.js} +1 -1
  30. package/dist/{chunk-6YXCZV33.js → chunk-ABRYIEWJ.js} +1090 -714
  31. package/dist/{chunk-AK67S3O4.js → chunk-AU4YPEIE.js} +3 -3
  32. package/dist/{chunk-BV45354Q.js → chunk-DGVT4DBI.js} +9 -9
  33. package/dist/{chunk-363V6GPR.js → chunk-GLHLXTKC.js} +9 -9
  34. package/dist/{chunk-VTUINXWR.js → chunk-GSYBGOY3.js} +1 -1
  35. package/dist/{chunk-FZ4Q73HA.js → chunk-IGWJRAJT.js} +1 -1
  36. package/dist/{chunk-S2RQPPL6.js → chunk-N4AI2WFH.js} +1 -1
  37. package/dist/{chunk-HXMAIVV2.js → chunk-NCMJXBEO.js} +1 -1
  38. package/dist/{chunk-ZEYAOYJL.js → chunk-OZSKLJQW.js} +1 -1
  39. package/dist/{chunk-VTU3QOJT.js → chunk-P4NA5OQX.js} +1 -1
  40. package/dist/{chunk-WL3O2PKJ.js → chunk-RY2U77OY.js} +8 -8
  41. package/dist/{chunk-TTWNGOBT.js → chunk-RZQZXWEL.js} +32 -7
  42. package/dist/{chunk-KLPX55TI.js → chunk-UACYZCW4.js} +239 -146
  43. package/dist/{chunk-IYWT3JJW.js → chunk-VG4G3R2V.js} +1 -1
  44. package/dist/{chunk-PP6ZRL5T.js → chunk-WZJR6SOI.js} +536 -422
  45. package/dist/{chunk-PHX45JYN.js → chunk-XW5XVVMI.js} +2 -2
  46. package/dist/{chunk-MYVTYFQD.js → chunk-XZNCONFG.js} +1 -1
  47. package/dist/{chunk-GXCPDAS5.js → chunk-Y33P35U3.js} +26 -8
  48. package/dist/{chunk-XFHZ7GCI.js → chunk-Y5HPJMTM.js} +19 -3
  49. package/dist/{chunk-N55WOGN3.js → chunk-YJYUJSWK.js} +59 -21
  50. package/dist/{chunk-SPE7P4GL.js → chunk-YWRPQZL7.js} +1 -1
  51. package/dist/{chunk-6NCREWWM.js → chunk-YXOPQEFZ.js} +3 -3
  52. package/dist/{chunk-2N4OENGE.js → chunk-YYFSFSB3.js} +1 -1
  53. package/dist/{chunk-ERILXQBP.js → chunk-Z4XWWNYX.js} +615 -433
  54. package/dist/{chunk-HMW3C5DP.js → chunk-ZU6T7W3U.js} +2 -2
  55. package/dist/{ci-workflow-XJN4UO3Q.js → ci-workflow-TFAA5BK7.js} +4 -4
  56. package/dist/{dist-OWHMNL4W.js → dist-DWBTZXR5.js} +1 -1
  57. package/dist/{dist-IPVFYGY2.js → dist-MCTEX5QH.js} +5 -3
  58. package/dist/{docs-RSFZTNPG.js → docs-BBMAN3CY.js} +5 -5
  59. package/dist/{engine-DJIHY4JT.js → engine-R2YH74AL.js} +4 -4
  60. package/dist/{entropy-EAEKJKRM.js → entropy-5UP5N6AF.js} +7 -4
  61. package/dist/{feedback-JT5X3DBC.js → feedback-6MDCCFZL.js} +1 -1
  62. package/dist/{generate-agent-definitions-CC6KED3E.js → generate-agent-definitions-KKAN5DB5.js} +5 -5
  63. package/dist/{glob-helper-GLZAURJC.js → glob-helper-VR6UCZZB.js} +1 -1
  64. package/dist/{graph-loader-HHXN5FLP.js → graph-loader-STFGYKZH.js} +1 -1
  65. package/dist/hooks/sentinel-pre.js +15 -138
  66. package/dist/index.d.ts +61 -0
  67. package/dist/index.js +27 -27
  68. package/dist/{loader-UWNVTYBY.js → loader-2WT2ZE2T.js} +4 -4
  69. package/dist/{mcp-TCLNK7HG.js → mcp-5V4LPMB3.js} +16 -16
  70. package/dist/{performance-R6O3N3UB.js → performance-2N3CFXLR.js} +5 -5
  71. package/dist/{review-pipeline-MOOWXWSQ.js → review-pipeline-XZIGBU3Q.js} +4 -4
  72. package/dist/{runtime-RIWQUKBQ.js → runtime-POME3GTR.js} +4 -4
  73. package/dist/{scan-P7YFKB77.js → scan-IYSVRPD2.js} +1 -1
  74. package/dist/{security-U76C54W6.js → security-QLJLMSIW.js} +1 -1
  75. package/dist/{state-events-F44CUUZG.js → state-events-YY5KBZTC.js} +4 -4
  76. package/dist/{validate-IUAV7MOU.js → validate-VZORVK43.js} +5 -5
  77. package/dist/{validate-cross-check-M2ZM6RFY.js → validate-cross-check-OYKEDCST.js} +4 -4
  78. package/package.json +5 -4
  79. package/dist/analyzer-V633GUHY-MBCQWKDU.js +0 -26
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveProjectConfig
3
- } from "./chunk-ZEYAOYJL.js";
3
+ } from "./chunk-OZSKLJQW.js";
4
4
  import {
5
5
  sanitizePath
6
6
  } from "./chunk-W6Y7ZW3Y.js";
@@ -49,7 +49,7 @@ async function handleValidateProject(input) {
49
49
  checks.config = "pass";
50
50
  const config = configResult.value;
51
51
  try {
52
- const core = await import("./dist-IPVFYGY2.js");
52
+ const core = await import("./dist-MCTEX5QH.js");
53
53
  if (typeof core.validateFileStructure === "function" && Array.isArray(config.conventions)) {
54
54
  const conventions = config.conventions;
55
55
  const structureResult = await core.validateFileStructure(projectPath, conventions);
@@ -68,7 +68,7 @@ async function handleValidateProject(input) {
68
68
  } catch {
69
69
  }
70
70
  try {
71
- const core = await import("./dist-IPVFYGY2.js");
71
+ const core = await import("./dist-MCTEX5QH.js");
72
72
  if (typeof core.validateAgentsMap === "function") {
73
73
  const agentsMapPath = path.join(projectPath, "AGENTS.md");
74
74
  const agentsResult = await core.validateAgentsMap(agentsMapPath);
@@ -33,7 +33,7 @@ var createSelfReviewDefinition = {
33
33
  };
34
34
  async function handleCreateSelfReview(input) {
35
35
  try {
36
- const { parseDiff, createSelfReview } = await import("./dist-IPVFYGY2.js");
36
+ const { parseDiff, createSelfReview } = await import("./dist-MCTEX5QH.js");
37
37
  const parseResult = parseDiff(input.diff);
38
38
  if (!parseResult.ok) {
39
39
  return resultToMcpResponse(parseResult);
@@ -53,11 +53,11 @@ async function handleCreateSelfReview(input) {
53
53
  ...input.maxFileCount !== void 0 ? { maxChangedFiles: input.maxFileCount } : {}
54
54
  }
55
55
  };
56
- const { loadGraphStore } = await import("./graph-loader-HHXN5FLP.js");
56
+ const { loadGraphStore } = await import("./graph-loader-STFGYKZH.js");
57
57
  const store = await loadGraphStore(projectPath);
58
58
  let graphData;
59
59
  if (store) {
60
- const { GraphFeedbackAdapter } = await import("./dist-OWHMNL4W.js");
60
+ const { GraphFeedbackAdapter } = await import("./dist-DWBTZXR5.js");
61
61
  const adapter = new GraphFeedbackAdapter(store);
62
62
  const changedFiles = parseResult.value.files.map((f) => f.path);
63
63
  const impact = adapter.computeImpactData(changedFiles);
@@ -119,7 +119,7 @@ var analyzeDiffDefinition = {
119
119
  };
120
120
  async function handleAnalyzeDiff(input) {
121
121
  try {
122
- const { parseDiff, analyzeDiff } = await import("./dist-IPVFYGY2.js");
122
+ const { parseDiff, analyzeDiff } = await import("./dist-MCTEX5QH.js");
123
123
  const parseResult = parseDiff(input.diff);
124
124
  if (!parseResult.ok) {
125
125
  return resultToMcpResponse(parseResult);
@@ -139,10 +139,10 @@ async function handleAnalyzeDiff(input) {
139
139
  let graphImpactData;
140
140
  if (input.path) {
141
141
  try {
142
- const { loadGraphStore } = await import("./graph-loader-HHXN5FLP.js");
142
+ const { loadGraphStore } = await import("./graph-loader-STFGYKZH.js");
143
143
  const store = await loadGraphStore(sanitizePath(input.path));
144
144
  if (store) {
145
- const { GraphFeedbackAdapter } = await import("./dist-OWHMNL4W.js");
145
+ const { GraphFeedbackAdapter } = await import("./dist-DWBTZXR5.js");
146
146
  const adapter = new GraphFeedbackAdapter(store);
147
147
  const changedFiles = parseResult.value.files.map((f) => f.path);
148
148
  const impact = adapter.computeImpactData(changedFiles);
@@ -195,7 +195,7 @@ var requestPeerReviewDefinition = {
195
195
  };
196
196
  async function handleRequestPeerReview(input) {
197
197
  try {
198
- const { parseDiff, requestPeerReview } = await import("./dist-IPVFYGY2.js");
198
+ const { parseDiff, requestPeerReview } = await import("./dist-MCTEX5QH.js");
199
199
  const parseResult = parseDiff(input.diff);
200
200
  if (!parseResult.ok) {
201
201
  return resultToMcpResponse(parseResult);
@@ -206,10 +206,10 @@ async function handleRequestPeerReview(input) {
206
206
  ...input.context ? { metadata: { context: input.context } } : {}
207
207
  };
208
208
  try {
209
- const { loadGraphStore } = await import("./graph-loader-HHXN5FLP.js");
209
+ const { loadGraphStore } = await import("./graph-loader-STFGYKZH.js");
210
210
  const store = await loadGraphStore(sanitizePath(input.path));
211
211
  if (store) {
212
- const { GraphFeedbackAdapter } = await import("./dist-OWHMNL4W.js");
212
+ const { GraphFeedbackAdapter } = await import("./dist-DWBTZXR5.js");
213
213
  const adapter = new GraphFeedbackAdapter(store);
214
214
  const changedFiles = parseResult.value.files.map((f) => f.path);
215
215
  const impactData = adapter.computeImpactData(changedFiles);
@@ -7,10 +7,10 @@ import {
7
7
  import {
8
8
  findConfigFile,
9
9
  loadConfig
10
- } from "./chunk-XFHZ7GCI.js";
10
+ } from "./chunk-Y5HPJMTM.js";
11
11
  import {
12
12
  init_dist
13
- } from "./chunk-KLPX55TI.js";
13
+ } from "./chunk-UACYZCW4.js";
14
14
  import {
15
15
  Ok
16
16
  } from "./chunk-BDGTZRZ6.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-IPVFYGY2.js");
53
+ const { validateKnowledgeMap } = await import("./dist-MCTEX5QH.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-IPVFYGY2.js");
58
+ const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-MCTEX5QH.js");
59
59
  const domain2 = input.domain ?? "src";
60
- const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-HHXN5FLP.js");
60
+ const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-STFGYKZH.js");
61
61
  const store2 = await loadGraphStore2(projectPath);
62
62
  let graphCoverage2;
63
63
  if (store2) {
64
- const { Assembler } = await import("./dist-OWHMNL4W.js");
64
+ const { Assembler } = await import("./dist-DWBTZXR5.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-IPVFYGY2.js");
97
+ const { checkDocCoverage } = await import("./dist-MCTEX5QH.js");
98
98
  const domain = input.domain ?? "src";
99
- const { loadGraphStore } = await import("./graph-loader-HHXN5FLP.js");
99
+ const { loadGraphStore } = await import("./graph-loader-STFGYKZH.js");
100
100
  const store = await loadGraphStore(projectPath);
101
101
  let graphCoverage;
102
102
  if (store) {
103
- const { Assembler } = await import("./dist-OWHMNL4W.js");
103
+ const { Assembler } = await import("./dist-DWBTZXR5.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
  init_dist
3
- } from "./chunk-KLPX55TI.js";
3
+ } from "./chunk-UACYZCW4.js";
4
4
  import {
5
5
  Ok
6
6
  } from "./chunk-BDGTZRZ6.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  init_dist
3
- } from "./chunk-KLPX55TI.js";
3
+ } from "./chunk-UACYZCW4.js";
4
4
  import {
5
5
  Err,
6
6
  Ok
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-KET4QQZB.js";
4
4
  import {
5
5
  init_dist
6
- } from "./chunk-KLPX55TI.js";
6
+ } from "./chunk-UACYZCW4.js";
7
7
  import {
8
8
  Err,
9
9
  Ok
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  init_dist
3
- } from "./chunk-KLPX55TI.js";
3
+ } from "./chunk-UACYZCW4.js";
4
4
  import {
5
5
  Err,
6
6
  Ok
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  init_dist
3
- } from "./chunk-KLPX55TI.js";
3
+ } from "./chunk-UACYZCW4.js";
4
4
  import {
5
5
  Err,
6
6
  Ok
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  init_dist
3
- } from "./chunk-KLPX55TI.js";
3
+ } from "./chunk-UACYZCW4.js";
4
4
  import {
5
5
  Err,
6
6
  Ok
@@ -7,10 +7,10 @@ import {
7
7
  import {
8
8
  findConfigFile,
9
9
  loadConfig
10
- } from "./chunk-XFHZ7GCI.js";
10
+ } from "./chunk-Y5HPJMTM.js";
11
11
  import {
12
12
  init_dist
13
- } from "./chunk-KLPX55TI.js";
13
+ } from "./chunk-UACYZCW4.js";
14
14
  import {
15
15
  Ok
16
16
  } from "./chunk-BDGTZRZ6.js";
@@ -35,7 +35,7 @@ var checkPerformanceDefinition = {
35
35
  };
36
36
  async function handleCheckPerformance(input) {
37
37
  try {
38
- const { EntropyAnalyzer } = await import("./dist-IPVFYGY2.js");
38
+ const { EntropyAnalyzer } = await import("./dist-MCTEX5QH.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-HHXN5FLP.js");
61
+ const { loadGraphStore } = await import("./graph-loader-STFGYKZH.js");
62
62
  const store = await loadGraphStore(projectPath);
63
63
  if (store) {
64
- const { GraphComplexityAdapter, GraphCouplingAdapter } = await import("./dist-OWHMNL4W.js");
64
+ const { GraphComplexityAdapter, GraphCouplingAdapter } = await import("./dist-DWBTZXR5.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-IPVFYGY2.js");
101
+ const { BaselineManager } = await import("./dist-MCTEX5QH.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-IPVFYGY2.js");
149
+ const { BaselineManager } = await import("./dist-MCTEX5QH.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-IPVFYGY2.js");
179
+ const { CriticalPathResolver } = await import("./dist-MCTEX5QH.js");
180
180
  const resolver = new CriticalPathResolver(sanitizePath(input.path));
181
181
  const result = await resolver.resolve();
182
182
  return resultToMcpResponse(Ok(result));
@@ -6,6 +6,29 @@ import {
6
6
  } from "./chunk-W6Y7ZW3Y.js";
7
7
 
8
8
  // src/mcp/tools/assess-project.ts
9
+ import * as fs from "fs";
10
+ import * as path from "path";
11
+ var TURBO_LINT = { command: "npx", args: ["turbo", "run", "lint", "--force"] };
12
+ function resolveLintCommand(projectPath) {
13
+ let linter;
14
+ try {
15
+ const raw = fs.readFileSync(path.join(projectPath, "harness.config.json"), "utf-8");
16
+ const config = JSON.parse(raw);
17
+ linter = config.tooling?.linter ?? config.template?.tooling?.linter;
18
+ } catch {
19
+ return TURBO_LINT;
20
+ }
21
+ switch (linter) {
22
+ case "ruff":
23
+ return { command: "ruff", args: ["check", "."] };
24
+ case "golangci-lint":
25
+ return { command: "golangci-lint", args: ["run"] };
26
+ case "clippy":
27
+ return { command: "cargo", args: ["clippy"] };
28
+ default:
29
+ return TURBO_LINT;
30
+ }
31
+ }
9
32
  var assessProjectDefinition = {
10
33
  name: "assess_project",
11
34
  description: "Run all project health checks in parallel and return a unified report. Checks: validate, dependencies, docs, entropy, security, performance, lint.",
@@ -75,7 +98,7 @@ async function handleAssessProject(input) {
75
98
  let validateResult = null;
76
99
  if (checksToRun.has("validate")) {
77
100
  try {
78
- const { handleValidateProject } = await import("./validate-IUAV7MOU.js");
101
+ const { handleValidateProject } = await import("./validate-VZORVK43.js");
79
102
  const result = await handleValidateProject({ path: projectPath });
80
103
  const out = parseToolResponse(result, "validate");
81
104
  if ("error" in out) {
@@ -104,7 +127,7 @@ async function handleAssessProject(input) {
104
127
  parallelChecks.push(
105
128
  (async () => {
106
129
  try {
107
- const { handleCheckDependencies } = await import("./architecture-2XYGJGT3.js");
130
+ const { handleCheckDependencies } = await import("./architecture-RCHFDI7E.js");
108
131
  const result = await handleCheckDependencies({ path: projectPath });
109
132
  const out = parseToolResponse(result, "deps");
110
133
  if ("error" in out) return out.error;
@@ -132,7 +155,7 @@ async function handleAssessProject(input) {
132
155
  parallelChecks.push(
133
156
  (async () => {
134
157
  try {
135
- const { handleCheckDocs } = await import("./docs-RSFZTNPG.js");
158
+ const { handleCheckDocs } = await import("./docs-BBMAN3CY.js");
136
159
  const result = await handleCheckDocs({ path: projectPath, scope: "coverage" });
137
160
  const out = parseToolResponse(result, "docs");
138
161
  if ("error" in out) return out.error;
@@ -160,7 +183,7 @@ async function handleAssessProject(input) {
160
183
  parallelChecks.push(
161
184
  (async () => {
162
185
  try {
163
- const { handleDetectEntropy } = await import("./entropy-EAEKJKRM.js");
186
+ const { handleDetectEntropy } = await import("./entropy-5UP5N6AF.js");
164
187
  const result = await handleDetectEntropy({ path: projectPath, type: "all" });
165
188
  const out = parseToolResponse(result, "entropy");
166
189
  if ("error" in out) return out.error;
@@ -191,7 +214,7 @@ async function handleAssessProject(input) {
191
214
  parallelChecks.push(
192
215
  (async () => {
193
216
  try {
194
- const { handleRunSecurityScan } = await import("./security-U76C54W6.js");
217
+ const { handleRunSecurityScan } = await import("./security-QLJLMSIW.js");
195
218
  const result = await handleRunSecurityScan({ path: projectPath });
196
219
  const out = parseToolResponse(result, "security");
197
220
  if ("error" in out) return out.error;
@@ -224,7 +247,7 @@ async function handleAssessProject(input) {
224
247
  parallelChecks.push(
225
248
  (async () => {
226
249
  try {
227
- const { handleCheckPerformance } = await import("./performance-R6O3N3UB.js");
250
+ const { handleCheckPerformance } = await import("./performance-2N3CFXLR.js");
228
251
  const result = await handleCheckPerformance({ path: projectPath });
229
252
  if ("isError" in result && result.isError) {
230
253
  const msg = result.content[0]?.text ?? "Performance check failed";
@@ -266,7 +289,8 @@ async function handleAssessProject(input) {
266
289
  (async () => {
267
290
  try {
268
291
  const { execFileSync } = await import("child_process");
269
- const output = execFileSync("npx", ["turbo", "run", "lint", "--force"], {
292
+ const { command, args } = resolveLintCommand(projectPath);
293
+ const output = execFileSync(command, args, {
270
294
  cwd: projectPath,
271
295
  encoding: "utf-8",
272
296
  timeout: 6e4,
@@ -324,6 +348,7 @@ async function handleAssessProject(input) {
324
348
  }
325
349
 
326
350
  export {
351
+ resolveLintCommand,
327
352
  assessProjectDefinition,
328
353
  parseToolResponse,
329
354
  handleAssessProject