@harness-engineering/cli 2.1.0 → 2.2.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/initialize-harness-project/SKILL.md +168 -13
- package/dist/agents/skills/codex/initialize-harness-project/SKILL.md +168 -13
- package/dist/agents/skills/cursor/initialize-harness-project/SKILL.md +168 -13
- package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +168 -13
- package/dist/{agents-md-XCAWON2D.js → agents-md-L4X4MOWT.js} +2 -2
- package/dist/{architecture-KERHEEQZ.js → architecture-WJRIYQ45.js} +3 -3
- package/dist/{assess-project-NPYA3UVI.js → assess-project-PHC2HO3V.js} +1 -1
- package/dist/bin/harness-mcp.js +13 -13
- package/dist/bin/harness.js +22 -22
- package/dist/{check-phase-gate-GE5ALEEU.js → check-phase-gate-646KY67H.js} +3 -3
- package/dist/{chunk-IIX5OJES.js → chunk-224XKVLP.js} +1 -1
- package/dist/{chunk-UWIOBHZL.js → chunk-2QPHCR22.js} +5 -5
- package/dist/{chunk-URLDPALI.js → chunk-2ZURBWEV.js} +3 -3
- package/dist/{chunk-EFA4OEEN.js → chunk-36X7TRUI.js} +2 -2
- package/dist/{chunk-HBQ3BK2E.js → chunk-4HKVZO7R.js} +1 -1
- package/dist/{chunk-OXFFN3FD.js → chunk-CPYL6LJR.js} +1 -1
- package/dist/{chunk-WW6AUOA3.js → chunk-E7W3YOXL.js} +2 -2
- package/dist/{chunk-FQAJAM54.js → chunk-GOOTYTTV.js} +71 -29
- package/dist/{chunk-D5FE4L2O.js → chunk-JPWICLXQ.js} +1 -1
- package/dist/{chunk-MAFI6UWT.js → chunk-K4WRQTEF.js} +137 -39
- package/dist/{chunk-M4C3ZIGL.js → chunk-KV7A5OZT.js} +3 -3
- package/dist/{chunk-T7MNLCUD.js → chunk-L2IDE7WS.js} +122 -76
- package/dist/{chunk-4FVHBBPY.js → chunk-LO7ZLV7S.js} +1 -1
- package/dist/{chunk-GCYGGQFM.js → chunk-OJMO4JBQ.js} +61 -6
- package/dist/{chunk-PCX4GPNT.js → chunk-QTUPHTTK.js} +1 -1
- package/dist/{chunk-AEFZJ543.js → chunk-TNZYQTEE.js} +1 -1
- package/dist/{chunk-DRD7LLFC.js → chunk-VJQLUS5I.js} +1 -1
- package/dist/{chunk-LY2TY6NE.js → chunk-VKDBM3RX.js} +3 -3
- package/dist/{chunk-FBQYKH7R.js → chunk-W4AFGFFB.js} +2 -2
- package/dist/{chunk-YBGVZQQE.js → chunk-YLOAQZLA.js} +2 -2
- package/dist/{chunk-GHPWBWUW.js → chunk-YLTRFZAT.js} +6 -6
- package/dist/{chunk-RCHXBL2M.js → chunk-YWD6WXXM.js} +6 -6
- package/dist/{ci-workflow-A2E2RTOP.js → ci-workflow-TOS5X527.js} +2 -2
- package/dist/{dist-K22DQUYY.js → dist-6RT2AVYU.js} +1 -1
- package/dist/{docs-GXJOFVCF.js → docs-HOJMQYDZ.js} +3 -3
- package/dist/{engine-JBUIA2XO.js → engine-D6UYH6DB.js} +2 -2
- package/dist/{entropy-Y7LUT4BZ.js → entropy-LZ4IDGZR.js} +2 -2
- package/dist/{feedback-BHOBVKI3.js → feedback-WV7EQVK7.js} +1 -1
- package/dist/{generate-agent-definitions-VL3ZVR32.js → generate-agent-definitions-GFNXJCBY.js} +3 -3
- package/dist/index.d.ts +17 -8
- package/dist/index.js +22 -22
- package/dist/{loader-WCKVMDYR.js → loader-Z23JTXIZ.js} +2 -2
- package/dist/{mcp-FA2CKHFY.js → mcp-JDJGELGD.js} +13 -13
- package/dist/{performance-NISUL5AA.js → performance-7ATLHTQU.js} +3 -3
- package/dist/{review-pipeline-CHE5LJ5D.js → review-pipeline-COBGGXHJ.js} +2 -2
- package/dist/{runtime-3SKKEVPF.js → runtime-KCBNQUXK.js} +2 -2
- package/dist/{security-MF54MY3P.js → security-MAPRIFQT.js} +1 -1
- package/dist/{validate-SIWFNTXI.js → validate-74XTQR7Q.js} +3 -3
- package/dist/{validate-cross-check-GBX7B7CQ.js → validate-cross-check-MI5MZ7MB.js} +2 -2
- package/package.json +4 -4
package/dist/bin/harness.js
CHANGED
|
@@ -3,43 +3,43 @@ import {
|
|
|
3
3
|
createProgram,
|
|
4
4
|
installCommandTelemetry,
|
|
5
5
|
printFirstRunWelcome
|
|
6
|
-
} from "../chunk-
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-
|
|
11
|
-
import "../chunk-
|
|
6
|
+
} from "../chunk-GOOTYTTV.js";
|
|
7
|
+
import "../chunk-TNZYQTEE.js";
|
|
8
|
+
import "../chunk-4HKVZO7R.js";
|
|
9
|
+
import "../chunk-JPWICLXQ.js";
|
|
10
|
+
import "../chunk-QTUPHTTK.js";
|
|
11
|
+
import "../chunk-224XKVLP.js";
|
|
12
12
|
import "../chunk-CQ553GZO.js";
|
|
13
13
|
import "../chunk-GISMXMVL.js";
|
|
14
14
|
import "../chunk-WWACIIBA.js";
|
|
15
15
|
import "../chunk-TEFCFC4H.js";
|
|
16
|
-
import "../chunk-
|
|
17
|
-
import "../chunk-
|
|
16
|
+
import "../chunk-E7W3YOXL.js";
|
|
17
|
+
import "../chunk-OJMO4JBQ.js";
|
|
18
18
|
import "../chunk-KET4QQZB.js";
|
|
19
|
-
import "../chunk-
|
|
19
|
+
import "../chunk-VJQLUS5I.js";
|
|
20
20
|
import "../chunk-YG4ZBGEH.js";
|
|
21
21
|
import {
|
|
22
22
|
dispatchSkillsFromGit
|
|
23
|
-
} from "../chunk-
|
|
24
|
-
import "../chunk-
|
|
25
|
-
import "../chunk-
|
|
23
|
+
} from "../chunk-L2IDE7WS.js";
|
|
24
|
+
import "../chunk-36X7TRUI.js";
|
|
25
|
+
import "../chunk-YWD6WXXM.js";
|
|
26
26
|
import "../chunk-IOW3MW2K.js";
|
|
27
|
-
import "../chunk-
|
|
28
|
-
import "../chunk-
|
|
27
|
+
import "../chunk-2ZURBWEV.js";
|
|
28
|
+
import "../chunk-W4AFGFFB.js";
|
|
29
29
|
import "../chunk-KTWKW6KJ.js";
|
|
30
|
-
import "../chunk-
|
|
31
|
-
import "../chunk-
|
|
32
|
-
import "../chunk-
|
|
33
|
-
import "../chunk-
|
|
34
|
-
import "../chunk-
|
|
35
|
-
import "../chunk-
|
|
30
|
+
import "../chunk-VKDBM3RX.js";
|
|
31
|
+
import "../chunk-YLOAQZLA.js";
|
|
32
|
+
import "../chunk-CPYL6LJR.js";
|
|
33
|
+
import "../chunk-2QPHCR22.js";
|
|
34
|
+
import "../chunk-KV7A5OZT.js";
|
|
35
|
+
import "../chunk-YLTRFZAT.js";
|
|
36
36
|
import "../chunk-EPUKTTJZ.js";
|
|
37
37
|
import "../chunk-W6Y7ZW3Y.js";
|
|
38
38
|
import "../chunk-27AJKSQY.js";
|
|
39
39
|
import {
|
|
40
40
|
findConfigFile,
|
|
41
41
|
loadConfig
|
|
42
|
-
} from "../chunk-
|
|
42
|
+
} from "../chunk-LO7ZLV7S.js";
|
|
43
43
|
import "../chunk-3ISINLYT.js";
|
|
44
44
|
import "../chunk-6B6UN6SG.js";
|
|
45
45
|
import "../chunk-ZCZD7FHU.js";
|
|
@@ -53,7 +53,7 @@ import {
|
|
|
53
53
|
readCheckState,
|
|
54
54
|
shouldRunCheck,
|
|
55
55
|
spawnBackgroundCheck
|
|
56
|
-
} from "../chunk-
|
|
56
|
+
} from "../chunk-K4WRQTEF.js";
|
|
57
57
|
import "../chunk-RL4VMEXL.js";
|
|
58
58
|
import "../chunk-BMM3GXV6.js";
|
|
59
59
|
import "../chunk-ZP5E7YET.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createCheckPhaseGateCommand,
|
|
3
3
|
runCheckPhaseGate
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-E7W3YOXL.js";
|
|
5
|
+
import "./chunk-LO7ZLV7S.js";
|
|
6
6
|
import "./chunk-ZCZD7FHU.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-K4WRQTEF.js";
|
|
8
8
|
import "./chunk-RL4VMEXL.js";
|
|
9
9
|
import "./chunk-BMM3GXV6.js";
|
|
10
10
|
import "./chunk-EBJQ6N4M.js";
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
findConfigFile,
|
|
9
9
|
loadConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-LO7ZLV7S.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-K4WRQTEF.js";
|
|
14
14
|
import {
|
|
15
15
|
Ok
|
|
16
16
|
} from "./chunk-RL4VMEXL.js";
|
|
@@ -50,12 +50,12 @@ async function handleCheckDocs(input) {
|
|
|
50
50
|
const projectPath = sanitizePath(input.path);
|
|
51
51
|
const scope = input.scope ?? "coverage";
|
|
52
52
|
if (scope === "integrity") {
|
|
53
|
-
const { validateKnowledgeMap } = await import("./dist-
|
|
53
|
+
const { validateKnowledgeMap } = await import("./dist-6RT2AVYU.js");
|
|
54
54
|
const result2 = await validateKnowledgeMap(projectPath);
|
|
55
55
|
return resultToMcpResponse(result2);
|
|
56
56
|
}
|
|
57
57
|
if (scope === "all") {
|
|
58
|
-
const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-
|
|
58
|
+
const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-6RT2AVYU.js");
|
|
59
59
|
const domain2 = input.domain ?? "src";
|
|
60
60
|
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-5MKHAJJF.js");
|
|
61
61
|
const store2 = await loadGraphStore2(projectPath);
|
|
@@ -94,7 +94,7 @@ async function handleCheckDocs(input) {
|
|
|
94
94
|
}
|
|
95
95
|
return resultToMcpResponse(Ok({ coverage, integrity }));
|
|
96
96
|
}
|
|
97
|
-
const { checkDocCoverage } = await import("./dist-
|
|
97
|
+
const { checkDocCoverage } = await import("./dist-6RT2AVYU.js");
|
|
98
98
|
const domain = input.domain ?? "src";
|
|
99
99
|
const { loadGraphStore } = await import("./graph-loader-5MKHAJJF.js");
|
|
100
100
|
const store = await loadGraphStore(projectPath);
|
|
@@ -33,7 +33,7 @@ var createSelfReviewDefinition = {
|
|
|
33
33
|
};
|
|
34
34
|
async function handleCreateSelfReview(input) {
|
|
35
35
|
try {
|
|
36
|
-
const { parseDiff, createSelfReview } = await import("./dist-
|
|
36
|
+
const { parseDiff, createSelfReview } = await import("./dist-6RT2AVYU.js");
|
|
37
37
|
const parseResult = parseDiff(input.diff);
|
|
38
38
|
if (!parseResult.ok) {
|
|
39
39
|
return resultToMcpResponse(parseResult);
|
|
@@ -119,7 +119,7 @@ var analyzeDiffDefinition = {
|
|
|
119
119
|
};
|
|
120
120
|
async function handleAnalyzeDiff(input) {
|
|
121
121
|
try {
|
|
122
|
-
const { parseDiff, analyzeDiff } = await import("./dist-
|
|
122
|
+
const { parseDiff, analyzeDiff } = await import("./dist-6RT2AVYU.js");
|
|
123
123
|
const parseResult = parseDiff(input.diff);
|
|
124
124
|
if (!parseResult.ok) {
|
|
125
125
|
return resultToMcpResponse(parseResult);
|
|
@@ -195,7 +195,7 @@ var requestPeerReviewDefinition = {
|
|
|
195
195
|
};
|
|
196
196
|
async function handleRequestPeerReview(input) {
|
|
197
197
|
try {
|
|
198
|
-
const { parseDiff, requestPeerReview } = await import("./dist-
|
|
198
|
+
const { parseDiff, requestPeerReview } = await import("./dist-6RT2AVYU.js");
|
|
199
199
|
const parseResult = parseDiff(input.diff);
|
|
200
200
|
if (!parseResult.ok) {
|
|
201
201
|
return resultToMcpResponse(parseResult);
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
init_dist,
|
|
6
6
|
paginate
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-K4WRQTEF.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-6RT2AVYU.js");
|
|
83
83
|
const parseResult = parseDiff(input.diff);
|
|
84
84
|
if (!parseResult.ok) {
|
|
85
85
|
return {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
generateRuntime
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TNZYQTEE.js";
|
|
4
4
|
import {
|
|
5
5
|
generateAgentsMd
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-4HKVZO7R.js";
|
|
7
7
|
import {
|
|
8
8
|
generateCIWorkflow
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-JPWICLXQ.js";
|
|
10
10
|
import {
|
|
11
11
|
TemplateEngine
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-224XKVLP.js";
|
|
13
13
|
import {
|
|
14
14
|
generate,
|
|
15
15
|
validate
|
|
@@ -28,18 +28,18 @@ import {
|
|
|
28
28
|
OutputMode,
|
|
29
29
|
createCheckPhaseGateCommand,
|
|
30
30
|
findFiles
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-E7W3YOXL.js";
|
|
32
32
|
import {
|
|
33
33
|
createGenerateAgentDefinitionsCommand,
|
|
34
34
|
generateAgentDefinitions
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-OJMO4JBQ.js";
|
|
36
36
|
import {
|
|
37
37
|
toKebabCase
|
|
38
38
|
} from "./chunk-KET4QQZB.js";
|
|
39
39
|
import {
|
|
40
40
|
listPersonas,
|
|
41
41
|
loadPersona
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-VJQLUS5I.js";
|
|
43
43
|
import {
|
|
44
44
|
createScanCommand,
|
|
45
45
|
loadIngestOptions
|
|
@@ -57,7 +57,7 @@ import {
|
|
|
57
57
|
loadCachedSnapshot,
|
|
58
58
|
persistToolingConfig,
|
|
59
59
|
recommend
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-L2IDE7WS.js";
|
|
61
61
|
import {
|
|
62
62
|
loadGraphStore
|
|
63
63
|
} from "./chunk-KTWKW6KJ.js";
|
|
@@ -67,7 +67,7 @@ import {
|
|
|
67
67
|
import {
|
|
68
68
|
findConfigFile,
|
|
69
69
|
resolveConfig
|
|
70
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-LO7ZLV7S.js";
|
|
71
71
|
import {
|
|
72
72
|
VALID_PLATFORMS
|
|
73
73
|
} from "./chunk-3ISINLYT.js";
|
|
@@ -164,7 +164,7 @@ import {
|
|
|
164
164
|
validateSolutionsDir,
|
|
165
165
|
writeConfig,
|
|
166
166
|
writeLockfile
|
|
167
|
-
} from "./chunk-
|
|
167
|
+
} from "./chunk-K4WRQTEF.js";
|
|
168
168
|
import {
|
|
169
169
|
Err,
|
|
170
170
|
Ok
|
|
@@ -378,7 +378,7 @@ function registerSkillsCommand(adoption) {
|
|
|
378
378
|
const globalOpts = cmd.optsWithGlobals();
|
|
379
379
|
const limit = Math.max(parseInt(opts.limit, 10) || 20, 1);
|
|
380
380
|
const cwd = process.cwd();
|
|
381
|
-
const { readAdoptionRecords, aggregateBySkill } = await import("./dist-
|
|
381
|
+
const { readAdoptionRecords, aggregateBySkill } = await import("./dist-6RT2AVYU.js");
|
|
382
382
|
const records = readAdoptionRecords(cwd);
|
|
383
383
|
if (records.length === 0) {
|
|
384
384
|
if (globalOpts.json) {
|
|
@@ -414,7 +414,7 @@ function registerRecentCommand(adoption) {
|
|
|
414
414
|
const globalOpts = cmd.optsWithGlobals();
|
|
415
415
|
const limit = Math.max(parseInt(opts.limit, 10) || 20, 1);
|
|
416
416
|
const cwd = process.cwd();
|
|
417
|
-
const { readAdoptionRecords } = await import("./dist-
|
|
417
|
+
const { readAdoptionRecords } = await import("./dist-6RT2AVYU.js");
|
|
418
418
|
const records = readAdoptionRecords(cwd);
|
|
419
419
|
if (records.length === 0) {
|
|
420
420
|
if (globalOpts.json) {
|
|
@@ -492,7 +492,7 @@ function registerSkillCommand(adoption) {
|
|
|
492
492
|
adoption.command("skill <name>").description("Show detail for a specific skill").action(async (name, _opts, cmd) => {
|
|
493
493
|
const globalOpts = cmd.optsWithGlobals();
|
|
494
494
|
const cwd = process.cwd();
|
|
495
|
-
const { readAdoptionRecords, aggregateBySkill } = await import("./dist-
|
|
495
|
+
const { readAdoptionRecords, aggregateBySkill } = await import("./dist-6RT2AVYU.js");
|
|
496
496
|
const records = readAdoptionRecords(cwd);
|
|
497
497
|
const skillRecords = records.filter((r) => r.skill === name);
|
|
498
498
|
if (skillRecords.length === 0) {
|
|
@@ -968,8 +968,7 @@ async function runCheckArch(options) {
|
|
|
968
968
|
const manager = new ArchBaselineManager(cwd, archConfig.baselinePath);
|
|
969
969
|
if (options.updateBaseline) {
|
|
970
970
|
const commitHash = getCommitHash(cwd);
|
|
971
|
-
|
|
972
|
-
manager.save(baseline2);
|
|
971
|
+
manager.update(results, commitHash);
|
|
973
972
|
return Ok({
|
|
974
973
|
passed: true,
|
|
975
974
|
mode: "baseline",
|
|
@@ -2411,6 +2410,22 @@ function writeMcpEntry(filePath, name, entry) {
|
|
|
2411
2410
|
config.mcpServers[name] = entry;
|
|
2412
2411
|
writeJson(filePath, config);
|
|
2413
2412
|
}
|
|
2413
|
+
function readOpencodeConfig(filePath) {
|
|
2414
|
+
const config = readJsonSafe(filePath);
|
|
2415
|
+
if (!config) return { mcp: {} };
|
|
2416
|
+
if (!config.mcp) config.mcp = {};
|
|
2417
|
+
return config;
|
|
2418
|
+
}
|
|
2419
|
+
function writeOpencodeMcpEntry(filePath, name, entry) {
|
|
2420
|
+
const config = readOpencodeConfig(filePath);
|
|
2421
|
+
config.mcp[name] = {
|
|
2422
|
+
type: "local",
|
|
2423
|
+
command: [entry.command, ...entry.args ?? []],
|
|
2424
|
+
enabled: true,
|
|
2425
|
+
...entry.env ? { environment: entry.env } : {}
|
|
2426
|
+
};
|
|
2427
|
+
writeJson(filePath, config);
|
|
2428
|
+
}
|
|
2414
2429
|
function removeMcpEntry(filePath, name) {
|
|
2415
2430
|
if (!fs6.existsSync(filePath)) return;
|
|
2416
2431
|
const config = readMcpConfig(filePath);
|
|
@@ -4107,6 +4122,16 @@ function setupMcp(cwd, client) {
|
|
|
4107
4122
|
configured.push("Cursor");
|
|
4108
4123
|
}
|
|
4109
4124
|
}
|
|
4125
|
+
if (client === "all" || client === "opencode") {
|
|
4126
|
+
const configPath = path26.join(cwd, "opencode.json");
|
|
4127
|
+
const existing = readJsonFile(configPath);
|
|
4128
|
+
if (existing?.mcp?.["harness"]) {
|
|
4129
|
+
skipped.push("OpenCode");
|
|
4130
|
+
} else {
|
|
4131
|
+
writeOpencodeMcpEntry(configPath, "harness", { command: "harness", args: ["mcp"] });
|
|
4132
|
+
configured.push("OpenCode");
|
|
4133
|
+
}
|
|
4134
|
+
}
|
|
4110
4135
|
return { configured, skipped, trustedFolder };
|
|
4111
4136
|
}
|
|
4112
4137
|
async function resolveCursorWithPicker(cwd, pick) {
|
|
@@ -4156,7 +4181,11 @@ function printMcpResult(configured, skipped, trustedFolder) {
|
|
|
4156
4181
|
console.log("");
|
|
4157
4182
|
}
|
|
4158
4183
|
function createSetupMcpCommand() {
|
|
4159
|
-
return new Command34("setup-mcp").description("Configure MCP server for AI agent integration").option(
|
|
4184
|
+
return new Command34("setup-mcp").description("Configure MCP server for AI agent integration").option(
|
|
4185
|
+
"--client <client>",
|
|
4186
|
+
"Client to configure (claude, gemini, codex, cursor, opencode, all)",
|
|
4187
|
+
"all"
|
|
4188
|
+
).option("--pick", "Launch interactive tool picker (Cursor only)").option("--yes", "Bypass interactive picker and use curated 25-tool set (Cursor only)").action(async (opts, cmd) => {
|
|
4160
4189
|
const globalOpts = cmd.optsWithGlobals();
|
|
4161
4190
|
const cwd = process.cwd();
|
|
4162
4191
|
let configured;
|
|
@@ -5776,7 +5805,7 @@ function createMcpCommand() {
|
|
|
5776
5805
|
parseBudget
|
|
5777
5806
|
).action(async (opts) => {
|
|
5778
5807
|
const [{ startServer: startServer2, getToolDefinitions: getToolDefinitions2 }, { selectTier }] = await Promise.all([
|
|
5779
|
-
import("./mcp-
|
|
5808
|
+
import("./mcp-JDJGELGD.js"),
|
|
5780
5809
|
import("./tool-tiers-7QGZ3FKY.js")
|
|
5781
5810
|
]);
|
|
5782
5811
|
if (opts.tools && opts.tools.length > 0) {
|
|
@@ -6267,7 +6296,7 @@ function registerBenchCommand(perf) {
|
|
|
6267
6296
|
perf.command("bench [glob]").description("Run benchmarks via vitest bench").action(async (glob2, _opts, cmd) => {
|
|
6268
6297
|
const globalOpts = cmd.optsWithGlobals();
|
|
6269
6298
|
const cwd = process.cwd();
|
|
6270
|
-
const { BenchmarkRunner } = await import("./dist-
|
|
6299
|
+
const { BenchmarkRunner } = await import("./dist-6RT2AVYU.js");
|
|
6271
6300
|
const runner = new BenchmarkRunner();
|
|
6272
6301
|
const benchFiles = runner.discover(cwd, glob2);
|
|
6273
6302
|
if (benchFiles.length === 0) {
|
|
@@ -6331,7 +6360,7 @@ async function runBaselinesShow(globalOpts) {
|
|
|
6331
6360
|
}
|
|
6332
6361
|
async function runBaselinesUpdate(globalOpts) {
|
|
6333
6362
|
const cwd = process.cwd();
|
|
6334
|
-
const { BenchmarkRunner } = await import("./dist-
|
|
6363
|
+
const { BenchmarkRunner } = await import("./dist-6RT2AVYU.js");
|
|
6335
6364
|
const runner = new BenchmarkRunner();
|
|
6336
6365
|
const manager = new BaselineManager(cwd);
|
|
6337
6366
|
logger.info("Running benchmarks to update baselines...");
|
|
@@ -6372,7 +6401,7 @@ function registerReportCommand(perf) {
|
|
|
6372
6401
|
perf.command("report").description("Full performance report with metrics, trends, and hotspots").action(async (_opts, cmd) => {
|
|
6373
6402
|
const globalOpts = cmd.optsWithGlobals();
|
|
6374
6403
|
const cwd = process.cwd();
|
|
6375
|
-
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-
|
|
6404
|
+
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-6RT2AVYU.js");
|
|
6376
6405
|
const analyzer = new EntropyAnalyzer2({
|
|
6377
6406
|
rootDir: path42.resolve(cwd),
|
|
6378
6407
|
analyze: { complexity: true, coupling: true }
|
|
@@ -6763,7 +6792,7 @@ async function runPublishAnalyses(opts) {
|
|
|
6763
6792
|
const nameToExternalId = buildNameToExternalIdMap(projectPath);
|
|
6764
6793
|
if (!nameToExternalId) return process.exit(1);
|
|
6765
6794
|
const { AnalysisArchive } = await import("@harness-engineering/orchestrator");
|
|
6766
|
-
const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-
|
|
6795
|
+
const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-6RT2AVYU.js");
|
|
6767
6796
|
const archive = new AnalysisArchive(path44.join(projectPath, ".harness", "analyses"));
|
|
6768
6797
|
const analyses = await archive.list();
|
|
6769
6798
|
if (analyses.length === 0) {
|
|
@@ -7303,7 +7332,13 @@ async function runMcpSetup(cwd) {
|
|
|
7303
7332
|
configTarget: ".gemini/settings.json"
|
|
7304
7333
|
},
|
|
7305
7334
|
{ name: "Codex CLI", dir: ".codex", client: "codex", configTarget: ".codex/config.toml" },
|
|
7306
|
-
{ name: "Cursor", dir: ".cursor", client: "cursor", configTarget: ".cursor/mcp.json" }
|
|
7335
|
+
{ name: "Cursor", dir: ".cursor", client: "cursor", configTarget: ".cursor/mcp.json" },
|
|
7336
|
+
{
|
|
7337
|
+
name: "OpenCode",
|
|
7338
|
+
dir: path47.join(".config", "opencode"),
|
|
7339
|
+
client: "opencode",
|
|
7340
|
+
configTarget: "opencode.json"
|
|
7341
|
+
}
|
|
7307
7342
|
];
|
|
7308
7343
|
for (const { name, dir, client, configTarget } of clients) {
|
|
7309
7344
|
if (!detectClient(dir)) {
|
|
@@ -7351,6 +7386,13 @@ function configureTier0Integrations(cwd) {
|
|
|
7351
7386
|
}
|
|
7352
7387
|
}
|
|
7353
7388
|
}
|
|
7389
|
+
const opencodePath = path47.join(cwd, "opencode.json");
|
|
7390
|
+
const opencodeGlobalDir = path47.join(os7.homedir(), ".config", "opencode");
|
|
7391
|
+
if (fs29.existsSync(opencodePath) || fs29.existsSync(opencodeGlobalDir)) {
|
|
7392
|
+
for (const integration of tier0) {
|
|
7393
|
+
writeOpencodeMcpEntry(opencodePath, integration.name, integration.mcpConfig);
|
|
7394
|
+
}
|
|
7395
|
+
}
|
|
7354
7396
|
if (added.length === 0) {
|
|
7355
7397
|
return { status: "pass", message: "Tier 0 MCP integrations already configured" };
|
|
7356
7398
|
}
|
|
@@ -8908,7 +8950,7 @@ async function runSyncAnalyses(opts) {
|
|
|
8908
8950
|
return;
|
|
8909
8951
|
}
|
|
8910
8952
|
const { AnalysisArchive, loadPublishedIndex: loadPublishedIndex2, savePublishedIndex: savePublishedIndex2 } = await import("@harness-engineering/orchestrator");
|
|
8911
|
-
const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-
|
|
8953
|
+
const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-6RT2AVYU.js");
|
|
8912
8954
|
const adapter = new GitHubIssuesSyncAdapter2({ token, config: trackerConfig });
|
|
8913
8955
|
const archive = new AnalysisArchive(path60.join(projectPath, ".harness", "analyses"));
|
|
8914
8956
|
const publishedIndex = loadPublishedIndex2(projectPath);
|
|
@@ -9854,7 +9896,7 @@ function createUpdateCommand() {
|
|
|
9854
9896
|
// src/commands/usage.ts
|
|
9855
9897
|
import { Command as Command88 } from "commander";
|
|
9856
9898
|
async function loadAndPriceRecords(cwd, includeClaudeSessions = false) {
|
|
9857
|
-
const { readCostRecords, loadPricingData, calculateCost, parseCCRecords } = await import("./dist-
|
|
9899
|
+
const { readCostRecords, loadPricingData, calculateCost, parseCCRecords } = await import("./dist-6RT2AVYU.js");
|
|
9858
9900
|
const records = readCostRecords(cwd);
|
|
9859
9901
|
if (includeClaudeSessions) {
|
|
9860
9902
|
const ccRecords = parseCCRecords();
|
|
@@ -9947,7 +9989,7 @@ function registerDailyCommand(usage) {
|
|
|
9947
9989
|
else logger.info("No usage data found. Run some harness sessions first.");
|
|
9948
9990
|
return;
|
|
9949
9991
|
}
|
|
9950
|
-
const { aggregateByDay } = await import("./dist-
|
|
9992
|
+
const { aggregateByDay } = await import("./dist-6RT2AVYU.js");
|
|
9951
9993
|
const limited = aggregateByDay(records).slice(0, days);
|
|
9952
9994
|
if (globalOpts.json) {
|
|
9953
9995
|
console.log(
|
|
@@ -9976,7 +10018,7 @@ function registerSessionsCommand(usage) {
|
|
|
9976
10018
|
}
|
|
9977
10019
|
return;
|
|
9978
10020
|
}
|
|
9979
|
-
const { aggregateBySession } = await import("./dist-
|
|
10021
|
+
const { aggregateBySession } = await import("./dist-6RT2AVYU.js");
|
|
9980
10022
|
const sessionData = aggregateBySession(records);
|
|
9981
10023
|
const limited = sessionData.slice(0, limit);
|
|
9982
10024
|
if (globalOpts.json) {
|
|
@@ -10056,7 +10098,7 @@ function registerSessionCommand(usage) {
|
|
|
10056
10098
|
cwd,
|
|
10057
10099
|
globalOpts.includeClaudeSessions
|
|
10058
10100
|
);
|
|
10059
|
-
const { aggregateBySession } = await import("./dist-
|
|
10101
|
+
const { aggregateBySession } = await import("./dist-6RT2AVYU.js");
|
|
10060
10102
|
const sessionData = aggregateBySession(records);
|
|
10061
10103
|
const match = sessionData.find((s) => s.sessionId === id);
|
|
10062
10104
|
if (!match) {
|
|
@@ -10091,7 +10133,7 @@ function registerLatestCommand(usage) {
|
|
|
10091
10133
|
}
|
|
10092
10134
|
return;
|
|
10093
10135
|
}
|
|
10094
|
-
const { aggregateBySession } = await import("./dist-
|
|
10136
|
+
const { aggregateBySession } = await import("./dist-6RT2AVYU.js");
|
|
10095
10137
|
const sessionData = aggregateBySession(records);
|
|
10096
10138
|
const latest = sessionData[0];
|
|
10097
10139
|
if (!latest) {
|
|
@@ -10243,7 +10285,7 @@ function resolveValidateMode(globalOpts) {
|
|
|
10243
10285
|
return OutputMode.TEXT;
|
|
10244
10286
|
}
|
|
10245
10287
|
async function printCrossCheckWarnings(mode) {
|
|
10246
|
-
const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-
|
|
10288
|
+
const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-MI5MZ7MB.js");
|
|
10247
10289
|
const cwd = process.cwd();
|
|
10248
10290
|
const crossResult = await runCrossCheck2({
|
|
10249
10291
|
specsDir: path64.join(cwd, "docs", "specs"),
|