@harness-engineering/cli 1.22.0 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +2 -2
- package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +1 -1
- package/dist/agents/skills/claude-code/harness-execution/SKILL.md +1 -1
- package/dist/agents/skills/claude-code/harness-roadmap/SKILL.md +5 -5
- package/dist/agents/skills/claude-code/harness-roadmap-pilot/SKILL.md +18 -14
- package/dist/agents/skills/codex/harness-autopilot/SKILL.md +2 -2
- package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +1 -1
- package/dist/agents/skills/codex/harness-execution/SKILL.md +1 -1
- package/dist/agents/skills/codex/harness-roadmap/SKILL.md +5 -5
- package/dist/agents/skills/codex/harness-roadmap-pilot/SKILL.md +18 -14
- package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +2 -2
- package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +1 -1
- package/dist/agents/skills/cursor/harness-execution/SKILL.md +1 -1
- package/dist/agents/skills/cursor/harness-roadmap/SKILL.md +5 -5
- package/dist/agents/skills/cursor/harness-roadmap-pilot/SKILL.md +18 -14
- package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +2 -2
- package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +1 -1
- package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +1 -1
- package/dist/agents/skills/gemini-cli/harness-roadmap/SKILL.md +5 -5
- package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/SKILL.md +18 -14
- package/dist/{agents-md-PM7LO74M.js → agents-md-GLKJSGKT.js} +2 -2
- package/dist/{architecture-OVOCDTI6.js → architecture-EDSBAGR4.js} +3 -3
- package/dist/{assess-project-R2OZIDDS.js → assess-project-CEDY4JU3.js} +1 -1
- package/dist/bin/harness-mcp.js +14 -14
- package/dist/bin/harness.js +16 -16
- package/dist/{check-phase-gate-7JQ6EW5R.js → check-phase-gate-N3DTKFCZ.js} +4 -4
- package/dist/{chunk-SOTTK27D.js → chunk-26AUZBV4.js} +19 -19
- package/dist/{chunk-5FBWWMY2.js → chunk-2LAEDVOC.js} +6 -6
- package/dist/{chunk-TEZI27SA.js → chunk-5SWE24IG.js} +1 -1
- package/dist/{chunk-PUOMFNRO.js → chunk-A4AI3H3R.js} +1 -1
- package/dist/{chunk-W6MPLFXU.js → chunk-AIBAYANF.js} +3 -3
- package/dist/{chunk-ZEIEUCZL.js → chunk-AKVG4MMZ.js} +9 -9
- package/dist/{chunk-J7W4LTRK.js → chunk-ENA4O4WD.js} +2 -2
- package/dist/{chunk-GRJ7A4WT.js → chunk-GJRUIXUK.js} +1 -1
- package/dist/{chunk-5QTWFO24.js → chunk-HT4VPPB4.js} +8 -8
- package/dist/{chunk-B4WHXHF7.js → chunk-LIWGCYON.js} +1 -1
- package/dist/{chunk-FSLFBLYW.js → chunk-QUKH6QCJ.js} +7 -7
- package/dist/{chunk-DJEBBENF.js → chunk-SM22U22L.js} +95 -81
- package/dist/{chunk-DXYOAQQC.js → chunk-TD6MQUV2.js} +1 -1
- package/dist/{chunk-IK5GSLW6.js → chunk-TJ6NLLAY.js} +4 -4
- package/dist/{chunk-ASS5TD2Y.js → chunk-TLDCCPUZ.js} +1 -1
- package/dist/{chunk-U44JNY3Y.js → chunk-XDAIFVGC.js} +1 -1
- package/dist/{ci-workflow-OTTEERPF.js → ci-workflow-LE3QF4FP.js} +2 -2
- package/dist/{dist-IA6XYKNO.js → dist-OEXTQQZC.js} +1 -1
- package/dist/{dist-LCR2IO7U.js → dist-YIKUBJLQ.js} +2 -2
- package/dist/{docs-CHAYSGOP.js → docs-F5G7NAFF.js} +4 -4
- package/dist/{engine-4MY2U5RZ.js → engine-LX5RVGXN.js} +2 -2
- package/dist/{entropy-AKSZG7G5.js → entropy-A5Q2USYX.js} +3 -3
- package/dist/{feedback-QGCSW7SB.js → feedback-2EU25RIW.js} +1 -1
- package/dist/{generate-agent-definitions-KU6X2UQN.js → generate-agent-definitions-HNJHO5YQ.js} +2 -2
- package/dist/{graph-loader-FJN4H7Y4.js → graph-loader-XULF5QF7.js} +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.js +16 -16
- package/dist/{loader-AV5XEMER.js → loader-GWIEW4HM.js} +2 -2
- package/dist/{mcp-LWHVQRG7.js → mcp-ID3LR6JB.js} +14 -14
- package/dist/{performance-ETZVXXGQ.js → performance-YAY2A6A6.js} +4 -4
- package/dist/{review-pipeline-3ZS3GJSP.js → review-pipeline-YD4WI3JM.js} +1 -1
- package/dist/{runtime-KQTJRK3H.js → runtime-UJ4YO4CA.js} +2 -2
- package/dist/{security-LJCLZES6.js → security-IBSUKMVD.js} +1 -1
- package/dist/{validate-4IA5RPEX.js → validate-NHXWKMCR.js} +3 -3
- package/dist/{validate-cross-check-VX2BAHQI.js → validate-cross-check-R3GV2MLM.js} +2 -2
- package/package.json +2 -2
|
@@ -82,21 +82,26 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
82
82
|
|
|
83
83
|
### Phase 4: ASSIGN -- Execute Assignment and Transition
|
|
84
84
|
|
|
85
|
-
1. Call `
|
|
86
|
-
- This updates the feature's `Assignee` field
|
|
87
|
-
- Appends `assigned` record to assignment history (and `unassigned` for previous assignee if reassignment)
|
|
85
|
+
1. Call `manage_roadmap` with action `update` to assign the feature:
|
|
88
86
|
|
|
89
|
-
|
|
87
|
+
```json
|
|
88
|
+
manage_roadmap({
|
|
89
|
+
path: "<project-root>",
|
|
90
|
+
action: "update",
|
|
91
|
+
feature: "<feature-name>",
|
|
92
|
+
assignee: "<currentUser>"
|
|
93
|
+
})
|
|
94
|
+
```
|
|
90
95
|
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
96
|
+
- This updates the feature's `Assignee` field with assignment history tracking
|
|
97
|
+
- Automatically triggers external sync (GitHub Issues) if tracker config exists in `harness.config.json`
|
|
98
|
+
- External sync is fire-and-forget — errors are logged but do not block the assignment
|
|
94
99
|
|
|
95
|
-
|
|
100
|
+
2. Determine the transition target:
|
|
96
101
|
- If the feature has a `spec` field (non-null): transition to `harness:autopilot`
|
|
97
102
|
- If the feature has no `spec`: transition to `harness:brainstorming`
|
|
98
103
|
|
|
99
|
-
|
|
104
|
+
3. Present the transition to the human via `emit_interaction`:
|
|
100
105
|
|
|
101
106
|
```json
|
|
102
107
|
emit_interaction({
|
|
@@ -122,7 +127,7 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
122
127
|
})
|
|
123
128
|
```
|
|
124
129
|
|
|
125
|
-
|
|
130
|
+
4. Run `harness validate`.
|
|
126
131
|
|
|
127
132
|
---
|
|
128
133
|
|
|
@@ -130,10 +135,9 @@ Proceed with Feature A? (y/n/pick another)
|
|
|
130
135
|
|
|
131
136
|
- **`parseRoadmap` / `serializeRoadmap`** -- Parse and write `docs/roadmap.md`. Import from `@harness-engineering/core`.
|
|
132
137
|
- **`scoreRoadmapCandidates`** -- Core scoring algorithm. Import from `@harness-engineering/core`. Takes a `Roadmap` and optional `PilotScoringOptions` (currentUser for affinity).
|
|
133
|
-
- **`
|
|
138
|
+
- **`manage_roadmap update`** -- Used for assignment. Supports `assignee` field which delegates to `assignFeature` internally, handles history tracking, and automatically triggers external sync (GitHub Issues).
|
|
134
139
|
- **`emit_interaction`** -- Used for the skill transition at the end. Transitions to `harness:brainstorming` (no spec) or `harness:autopilot` (spec exists).
|
|
135
140
|
- **`harness validate`** -- Run after assignment is written.
|
|
136
|
-
- **External sync** -- If `harness.config.json` has tracker config, use `fullSync` or direct `assignTicket` to push assignment to external service.
|
|
137
141
|
|
|
138
142
|
## Success Criteria
|
|
139
143
|
|
|
@@ -183,10 +187,10 @@ Human confirms **y**.
|
|
|
183
187
|
**Phase 4: ASSIGN**
|
|
184
188
|
|
|
185
189
|
```
|
|
186
|
-
|
|
190
|
+
manage_roadmap update: Graph Connector assignee -> @cwarner
|
|
187
191
|
History: +1 record (assigned, 2026-04-02)
|
|
188
192
|
Roadmap updated: docs/roadmap.md
|
|
189
|
-
External sync: github:harness-eng/harness#43 assigned
|
|
193
|
+
External sync: github:harness-eng/harness#43 assigned (automatic)
|
|
190
194
|
|
|
191
195
|
Transitioning to harness:autopilot (spec exists)...
|
|
192
196
|
```
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
checkDependenciesDefinition,
|
|
3
3
|
handleCheckDependencies
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AIBAYANF.js";
|
|
5
5
|
import "./chunk-H7Y5CKTM.js";
|
|
6
6
|
import "./chunk-IDZNPTYD.js";
|
|
7
7
|
import "./chunk-W6Y7ZW3Y.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-XDAIFVGC.js";
|
|
9
9
|
import "./chunk-ERS5EVUZ.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-5SWE24IG.js";
|
|
11
11
|
export {
|
|
12
12
|
checkDependenciesDefinition,
|
|
13
13
|
handleCheckDependencies
|
package/dist/bin/harness-mcp.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
startServer
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-SM22U22L.js";
|
|
5
|
+
import "../chunk-TJ6NLLAY.js";
|
|
6
|
+
import "../chunk-QUKH6QCJ.js";
|
|
7
|
+
import "../chunk-AKVG4MMZ.js";
|
|
8
|
+
import "../chunk-TD6MQUV2.js";
|
|
9
|
+
import "../chunk-LIWGCYON.js";
|
|
10
|
+
import "../chunk-2LAEDVOC.js";
|
|
11
11
|
import "../chunk-CJDVBBPB.js";
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
14
|
-
import "../chunk-
|
|
12
|
+
import "../chunk-ENA4O4WD.js";
|
|
13
|
+
import "../chunk-TLDCCPUZ.js";
|
|
14
|
+
import "../chunk-AIBAYANF.js";
|
|
15
15
|
import "../chunk-H7Y5CKTM.js";
|
|
16
|
-
import "../chunk-
|
|
17
|
-
import "../chunk-
|
|
16
|
+
import "../chunk-HT4VPPB4.js";
|
|
17
|
+
import "../chunk-GJRUIXUK.js";
|
|
18
18
|
import "../chunk-IDZNPTYD.js";
|
|
19
19
|
import "../chunk-W6Y7ZW3Y.js";
|
|
20
20
|
import "../chunk-N5G5QMS3.js";
|
|
21
21
|
import "../chunk-3WGJMBKH.js";
|
|
22
22
|
import "../chunk-SE4YPMLH.js";
|
|
23
|
-
import "../chunk-
|
|
23
|
+
import "../chunk-XDAIFVGC.js";
|
|
24
24
|
import "../chunk-ERS5EVUZ.js";
|
|
25
|
-
import "../chunk-
|
|
25
|
+
import "../chunk-5SWE24IG.js";
|
|
26
26
|
|
|
27
27
|
// src/bin/harness-mcp.ts
|
|
28
28
|
import "dotenv/config";
|
package/dist/bin/harness.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
createProgram,
|
|
4
4
|
printFirstRunWelcome
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-26AUZBV4.js";
|
|
6
6
|
import "../chunk-OD3S2NHN.js";
|
|
7
7
|
import "../chunk-SD3SQOZ2.js";
|
|
8
|
-
import "../chunk-
|
|
8
|
+
import "../chunk-A4AI3H3R.js";
|
|
9
9
|
import "../chunk-6KWBH4EO.js";
|
|
10
10
|
import "../chunk-YLN34N65.js";
|
|
11
11
|
import "../chunk-YQ6KC6TE.js";
|
|
@@ -17,23 +17,23 @@ import "../chunk-EBJQ6N4M.js";
|
|
|
17
17
|
import "../chunk-DBSOCI3G.js";
|
|
18
18
|
import "../chunk-FIAPHX37.js";
|
|
19
19
|
import "../chunk-KET4QQZB.js";
|
|
20
|
-
import "../chunk-
|
|
21
|
-
import "../chunk-
|
|
22
|
-
import "../chunk-
|
|
23
|
-
import "../chunk-
|
|
24
|
-
import "../chunk-
|
|
25
|
-
import "../chunk-
|
|
26
|
-
import "../chunk-
|
|
20
|
+
import "../chunk-SM22U22L.js";
|
|
21
|
+
import "../chunk-TJ6NLLAY.js";
|
|
22
|
+
import "../chunk-QUKH6QCJ.js";
|
|
23
|
+
import "../chunk-AKVG4MMZ.js";
|
|
24
|
+
import "../chunk-TD6MQUV2.js";
|
|
25
|
+
import "../chunk-LIWGCYON.js";
|
|
26
|
+
import "../chunk-2LAEDVOC.js";
|
|
27
27
|
import "../chunk-CJDVBBPB.js";
|
|
28
|
-
import "../chunk-
|
|
29
|
-
import "../chunk-
|
|
30
|
-
import "../chunk-
|
|
28
|
+
import "../chunk-ENA4O4WD.js";
|
|
29
|
+
import "../chunk-TLDCCPUZ.js";
|
|
30
|
+
import "../chunk-AIBAYANF.js";
|
|
31
31
|
import "../chunk-H7Y5CKTM.js";
|
|
32
|
-
import "../chunk-
|
|
32
|
+
import "../chunk-HT4VPPB4.js";
|
|
33
33
|
import {
|
|
34
34
|
findConfigFile,
|
|
35
35
|
loadConfig
|
|
36
|
-
} from "../chunk-
|
|
36
|
+
} from "../chunk-GJRUIXUK.js";
|
|
37
37
|
import "../chunk-IDZNPTYD.js";
|
|
38
38
|
import "../chunk-W6Y7ZW3Y.js";
|
|
39
39
|
import "../chunk-N5G5QMS3.js";
|
|
@@ -51,9 +51,9 @@ import {
|
|
|
51
51
|
readCheckState,
|
|
52
52
|
shouldRunCheck,
|
|
53
53
|
spawnBackgroundCheck
|
|
54
|
-
} from "../chunk-
|
|
54
|
+
} from "../chunk-XDAIFVGC.js";
|
|
55
55
|
import "../chunk-ERS5EVUZ.js";
|
|
56
|
-
import "../chunk-
|
|
56
|
+
import "../chunk-5SWE24IG.js";
|
|
57
57
|
|
|
58
58
|
// src/bin/harness.ts
|
|
59
59
|
import "dotenv/config";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createCheckPhaseGateCommand,
|
|
3
3
|
runCheckPhaseGate
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-A4AI3H3R.js";
|
|
5
5
|
import "./chunk-EBJQ6N4M.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-GJRUIXUK.js";
|
|
7
7
|
import "./chunk-3WGJMBKH.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-XDAIFVGC.js";
|
|
9
9
|
import "./chunk-ERS5EVUZ.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-5SWE24IG.js";
|
|
11
11
|
export {
|
|
12
12
|
createCheckPhaseGateCommand,
|
|
13
13
|
runCheckPhaseGate
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
OutputMode,
|
|
10
10
|
createCheckPhaseGateCommand,
|
|
11
11
|
findFiles
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-A4AI3H3R.js";
|
|
13
13
|
import {
|
|
14
14
|
createGenerateAgentDefinitionsCommand,
|
|
15
15
|
generateAgentDefinitions
|
|
@@ -58,14 +58,14 @@ import {
|
|
|
58
58
|
loadOrRebuildIndex,
|
|
59
59
|
persistToolingConfig,
|
|
60
60
|
recommend
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-SM22U22L.js";
|
|
62
62
|
import {
|
|
63
63
|
VALID_PLATFORMS
|
|
64
64
|
} from "./chunk-CJDVBBPB.js";
|
|
65
65
|
import {
|
|
66
66
|
findConfigFile,
|
|
67
67
|
resolveConfig
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-GJRUIXUK.js";
|
|
69
69
|
import {
|
|
70
70
|
resolveGlobalSkillsDir,
|
|
71
71
|
resolvePersonasDir,
|
|
@@ -143,7 +143,7 @@ import {
|
|
|
143
143
|
validateKnowledgeMap,
|
|
144
144
|
writeConfig,
|
|
145
145
|
writeLockfile
|
|
146
|
-
} from "./chunk-
|
|
146
|
+
} from "./chunk-XDAIFVGC.js";
|
|
147
147
|
import {
|
|
148
148
|
Err,
|
|
149
149
|
Ok
|
|
@@ -229,7 +229,7 @@ function createValidateCommand() {
|
|
|
229
229
|
process.exit(result.error.exitCode);
|
|
230
230
|
}
|
|
231
231
|
if (opts.crossCheck) {
|
|
232
|
-
const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-
|
|
232
|
+
const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-R3GV2MLM.js");
|
|
233
233
|
const cwd = process.cwd();
|
|
234
234
|
const specsDir = path.join(cwd, "docs", "specs");
|
|
235
235
|
const plansDir = path.join(cwd, "docs", "plans");
|
|
@@ -586,7 +586,7 @@ function registerBenchCommand(perf) {
|
|
|
586
586
|
perf.command("bench [glob]").description("Run benchmarks via vitest bench").action(async (glob, _opts, cmd) => {
|
|
587
587
|
const globalOpts = cmd.optsWithGlobals();
|
|
588
588
|
const cwd = process.cwd();
|
|
589
|
-
const { BenchmarkRunner } = await import("./dist-
|
|
589
|
+
const { BenchmarkRunner } = await import("./dist-YIKUBJLQ.js");
|
|
590
590
|
const runner = new BenchmarkRunner();
|
|
591
591
|
const benchFiles = runner.discover(cwd, glob);
|
|
592
592
|
if (benchFiles.length === 0) {
|
|
@@ -654,7 +654,7 @@ function registerBaselinesCommands(perf) {
|
|
|
654
654
|
baselines.command("update").description("Update baselines from latest benchmark run").action(async (_opts, cmd) => {
|
|
655
655
|
const globalOpts = cmd.optsWithGlobals();
|
|
656
656
|
const cwd = process.cwd();
|
|
657
|
-
const { BenchmarkRunner } = await import("./dist-
|
|
657
|
+
const { BenchmarkRunner } = await import("./dist-YIKUBJLQ.js");
|
|
658
658
|
const runner = new BenchmarkRunner();
|
|
659
659
|
const manager = new BaselineManager(cwd);
|
|
660
660
|
logger.info("Running benchmarks to update baselines...");
|
|
@@ -687,7 +687,7 @@ function registerReportCommand(perf) {
|
|
|
687
687
|
perf.command("report").description("Full performance report with metrics, trends, and hotspots").action(async (_opts, cmd) => {
|
|
688
688
|
const globalOpts = cmd.optsWithGlobals();
|
|
689
689
|
const cwd = process.cwd();
|
|
690
|
-
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-
|
|
690
|
+
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-YIKUBJLQ.js");
|
|
691
691
|
const analyzer = new EntropyAnalyzer2({
|
|
692
692
|
rootDir: path5.resolve(cwd),
|
|
693
693
|
analyze: { complexity: true, coupling: true }
|
|
@@ -4767,7 +4767,7 @@ function createGenerateCommand3() {
|
|
|
4767
4767
|
import { Command as Command46 } from "commander";
|
|
4768
4768
|
import * as path38 from "path";
|
|
4769
4769
|
async function runScan(projectPath) {
|
|
4770
|
-
const { GraphStore, CodeIngestor, TopologicalLinker, KnowledgeIngestor, GitIngestor } = await import("./dist-
|
|
4770
|
+
const { GraphStore, CodeIngestor, TopologicalLinker, KnowledgeIngestor, GitIngestor } = await import("./dist-OEXTQQZC.js");
|
|
4771
4771
|
const store = new GraphStore();
|
|
4772
4772
|
const start = Date.now();
|
|
4773
4773
|
await new CodeIngestor(store).ingest(projectPath);
|
|
@@ -4848,7 +4848,7 @@ async function runIngest(projectPath, source, opts) {
|
|
|
4848
4848
|
SyncManager,
|
|
4849
4849
|
JiraConnector,
|
|
4850
4850
|
SlackConnector
|
|
4851
|
-
} = await import("./dist-
|
|
4851
|
+
} = await import("./dist-OEXTQQZC.js");
|
|
4852
4852
|
const graphDir = path39.join(projectPath, ".harness", "graph");
|
|
4853
4853
|
const store = new GraphStore();
|
|
4854
4854
|
await store.load(graphDir);
|
|
@@ -4941,7 +4941,7 @@ function createIngestCommand() {
|
|
|
4941
4941
|
import { Command as Command48 } from "commander";
|
|
4942
4942
|
import * as path40 from "path";
|
|
4943
4943
|
async function runQuery(projectPath, rootNodeId, opts) {
|
|
4944
|
-
const { GraphStore, ContextQL } = await import("./dist-
|
|
4944
|
+
const { GraphStore, ContextQL } = await import("./dist-OEXTQQZC.js");
|
|
4945
4945
|
const store = new GraphStore();
|
|
4946
4946
|
const graphDir = path40.join(projectPath, ".harness", "graph");
|
|
4947
4947
|
const loaded = await store.load(graphDir);
|
|
@@ -4990,7 +4990,7 @@ import { Command as Command49 } from "commander";
|
|
|
4990
4990
|
// src/commands/graph/status.ts
|
|
4991
4991
|
import * as path41 from "path";
|
|
4992
4992
|
async function runGraphStatus(projectPath) {
|
|
4993
|
-
const { GraphStore } = await import("./dist-
|
|
4993
|
+
const { GraphStore } = await import("./dist-OEXTQQZC.js");
|
|
4994
4994
|
const graphDir = path41.join(projectPath, ".harness", "graph");
|
|
4995
4995
|
const store = new GraphStore();
|
|
4996
4996
|
const loaded = await store.load(graphDir);
|
|
@@ -5030,7 +5030,7 @@ async function runGraphStatus(projectPath) {
|
|
|
5030
5030
|
// src/commands/graph/export.ts
|
|
5031
5031
|
import * as path42 from "path";
|
|
5032
5032
|
async function runGraphExport(projectPath, format) {
|
|
5033
|
-
const { GraphStore } = await import("./dist-
|
|
5033
|
+
const { GraphStore } = await import("./dist-OEXTQQZC.js");
|
|
5034
5034
|
const graphDir = path42.join(projectPath, ".harness", "graph");
|
|
5035
5035
|
const store = new GraphStore();
|
|
5036
5036
|
const loaded = await store.load(graphDir);
|
|
@@ -5109,7 +5109,7 @@ function createGraphCommand() {
|
|
|
5109
5109
|
import { Command as Command50 } from "commander";
|
|
5110
5110
|
function createMcpCommand() {
|
|
5111
5111
|
return new Command50("mcp").description("Start the MCP (Model Context Protocol) server on stdio").option("--tools <tools...>", "Only register the specified tools (used by Cursor integration)").action(async (opts) => {
|
|
5112
|
-
const { startServer: startServer2 } = await import("./mcp-
|
|
5112
|
+
const { startServer: startServer2 } = await import("./mcp-ID3LR6JB.js");
|
|
5113
5113
|
await startServer2(opts.tools);
|
|
5114
5114
|
});
|
|
5115
5115
|
}
|
|
@@ -6608,7 +6608,7 @@ function createIntegrationsCommand() {
|
|
|
6608
6608
|
// src/commands/usage.ts
|
|
6609
6609
|
import { Command as Command67 } from "commander";
|
|
6610
6610
|
async function loadAndPriceRecords(cwd, includeClaudeSessions = false) {
|
|
6611
|
-
const { readCostRecords, loadPricingData, calculateCost, parseCCRecords } = await import("./dist-
|
|
6611
|
+
const { readCostRecords, loadPricingData, calculateCost, parseCCRecords } = await import("./dist-YIKUBJLQ.js");
|
|
6612
6612
|
const records = readCostRecords(cwd);
|
|
6613
6613
|
if (includeClaudeSessions) {
|
|
6614
6614
|
const ccRecords = parseCCRecords();
|
|
@@ -6652,7 +6652,7 @@ function registerDailyCommand(usage) {
|
|
|
6652
6652
|
}
|
|
6653
6653
|
return;
|
|
6654
6654
|
}
|
|
6655
|
-
const { aggregateByDay } = await import("./dist-
|
|
6655
|
+
const { aggregateByDay } = await import("./dist-YIKUBJLQ.js");
|
|
6656
6656
|
const dailyData = aggregateByDay(records);
|
|
6657
6657
|
const limited = dailyData.slice(0, days);
|
|
6658
6658
|
if (globalOpts.json) {
|
|
@@ -6688,7 +6688,7 @@ function registerSessionsCommand(usage) {
|
|
|
6688
6688
|
}
|
|
6689
6689
|
return;
|
|
6690
6690
|
}
|
|
6691
|
-
const { aggregateBySession } = await import("./dist-
|
|
6691
|
+
const { aggregateBySession } = await import("./dist-YIKUBJLQ.js");
|
|
6692
6692
|
const sessionData = aggregateBySession(records);
|
|
6693
6693
|
const limited = sessionData.slice(0, limit);
|
|
6694
6694
|
if (globalOpts.json) {
|
|
@@ -6717,7 +6717,7 @@ function registerSessionCommand(usage) {
|
|
|
6717
6717
|
const globalOpts = cmd.optsWithGlobals();
|
|
6718
6718
|
const cwd = process.cwd();
|
|
6719
6719
|
const records = await loadAndPriceRecords(cwd, globalOpts.includeClaudeSessions);
|
|
6720
|
-
const { aggregateBySession } = await import("./dist-
|
|
6720
|
+
const { aggregateBySession } = await import("./dist-YIKUBJLQ.js");
|
|
6721
6721
|
const sessionData = aggregateBySession(records);
|
|
6722
6722
|
const match = sessionData.find((s) => s.sessionId === id);
|
|
6723
6723
|
if (!match) {
|
|
@@ -6783,7 +6783,7 @@ function registerLatestCommand(usage) {
|
|
|
6783
6783
|
}
|
|
6784
6784
|
return;
|
|
6785
6785
|
}
|
|
6786
|
-
const { aggregateBySession } = await import("./dist-
|
|
6786
|
+
const { aggregateBySession } = await import("./dist-YIKUBJLQ.js");
|
|
6787
6787
|
const sessionData = aggregateBySession(records);
|
|
6788
6788
|
const latest = sessionData[0];
|
|
6789
6789
|
if (!latest) {
|
|
@@ -50,7 +50,7 @@ async function handleAssessProject(input) {
|
|
|
50
50
|
let validateResult = null;
|
|
51
51
|
if (checksToRun.has("validate")) {
|
|
52
52
|
try {
|
|
53
|
-
const { handleValidateProject } = await import("./validate-
|
|
53
|
+
const { handleValidateProject } = await import("./validate-NHXWKMCR.js");
|
|
54
54
|
const result = await handleValidateProject({ path: projectPath });
|
|
55
55
|
const first = result.content[0];
|
|
56
56
|
const parsed = first ? JSON.parse(first.text) : {};
|
|
@@ -75,7 +75,7 @@ async function handleAssessProject(input) {
|
|
|
75
75
|
parallelChecks.push(
|
|
76
76
|
(async () => {
|
|
77
77
|
try {
|
|
78
|
-
const { handleCheckDependencies } = await import("./architecture-
|
|
78
|
+
const { handleCheckDependencies } = await import("./architecture-EDSBAGR4.js");
|
|
79
79
|
const result = await handleCheckDependencies({ path: projectPath });
|
|
80
80
|
const first = result.content[0];
|
|
81
81
|
const parsed = first ? JSON.parse(first.text) : {};
|
|
@@ -102,7 +102,7 @@ async function handleAssessProject(input) {
|
|
|
102
102
|
parallelChecks.push(
|
|
103
103
|
(async () => {
|
|
104
104
|
try {
|
|
105
|
-
const { handleCheckDocs } = await import("./docs-
|
|
105
|
+
const { handleCheckDocs } = await import("./docs-F5G7NAFF.js");
|
|
106
106
|
const result = await handleCheckDocs({ path: projectPath, scope: "coverage" });
|
|
107
107
|
const first = result.content[0];
|
|
108
108
|
const parsed = first ? JSON.parse(first.text) : {};
|
|
@@ -129,7 +129,7 @@ async function handleAssessProject(input) {
|
|
|
129
129
|
parallelChecks.push(
|
|
130
130
|
(async () => {
|
|
131
131
|
try {
|
|
132
|
-
const { handleDetectEntropy } = await import("./entropy-
|
|
132
|
+
const { handleDetectEntropy } = await import("./entropy-A5Q2USYX.js");
|
|
133
133
|
const result = await handleDetectEntropy({ path: projectPath, type: "all" });
|
|
134
134
|
const first = result.content[0];
|
|
135
135
|
const parsed = first ? JSON.parse(first.text) : {};
|
|
@@ -156,7 +156,7 @@ async function handleAssessProject(input) {
|
|
|
156
156
|
parallelChecks.push(
|
|
157
157
|
(async () => {
|
|
158
158
|
try {
|
|
159
|
-
const { handleRunSecurityScan } = await import("./security-
|
|
159
|
+
const { handleRunSecurityScan } = await import("./security-IBSUKMVD.js");
|
|
160
160
|
const result = await handleRunSecurityScan({ path: projectPath });
|
|
161
161
|
const first = result.content[0];
|
|
162
162
|
const parsed = first ? JSON.parse(first.text) : {};
|
|
@@ -188,7 +188,7 @@ async function handleAssessProject(input) {
|
|
|
188
188
|
parallelChecks.push(
|
|
189
189
|
(async () => {
|
|
190
190
|
try {
|
|
191
|
-
const { handleCheckPerformance } = await import("./performance-
|
|
191
|
+
const { handleCheckPerformance } = await import("./performance-YAY2A6A6.js");
|
|
192
192
|
const result = await handleCheckPerformance({ path: projectPath });
|
|
193
193
|
if ("isError" in result && result.isError) {
|
|
194
194
|
const msg = result.content[0]?.text ?? "Performance check failed";
|
|
@@ -1655,7 +1655,7 @@ var RequirementIngestor = class {
|
|
|
1655
1655
|
const escaped = node.name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1656
1656
|
const namePattern = new RegExp(`\\b${escaped}\\b`, "i");
|
|
1657
1657
|
if (namePattern.test(reqText)) {
|
|
1658
|
-
const edgeType = node.path
|
|
1658
|
+
const edgeType = node.path?.replace(/\\/g, "/").includes("/tests/") ? "verified_by" : "requires";
|
|
1659
1659
|
this.store.addEdge({
|
|
1660
1660
|
from: reqId,
|
|
1661
1661
|
to: node.id,
|
|
@@ -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-YIKUBJLQ.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-XULF5QF7.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-OEXTQQZC.js");
|
|
55
55
|
const adapter = new GraphConstraintAdapter(store);
|
|
56
56
|
const graphData = adapter.computeDependencyGraph();
|
|
57
57
|
graphDependencyData = {
|
|
@@ -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-YIKUBJLQ.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-
|
|
56
|
+
const { loadGraphStore } = await import("./graph-loader-XULF5QF7.js");
|
|
57
57
|
const store = await loadGraphStore(projectPath);
|
|
58
58
|
let graphData;
|
|
59
59
|
if (store) {
|
|
60
|
-
const { GraphFeedbackAdapter } = await import("./dist-
|
|
60
|
+
const { GraphFeedbackAdapter } = await import("./dist-OEXTQQZC.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-
|
|
122
|
+
const { parseDiff, analyzeDiff } = await import("./dist-YIKUBJLQ.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-
|
|
142
|
+
const { loadGraphStore } = await import("./graph-loader-XULF5QF7.js");
|
|
143
143
|
const store = await loadGraphStore(sanitizePath(input.path));
|
|
144
144
|
if (store) {
|
|
145
|
-
const { GraphFeedbackAdapter } = await import("./dist-
|
|
145
|
+
const { GraphFeedbackAdapter } = await import("./dist-OEXTQQZC.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-
|
|
198
|
+
const { parseDiff, requestPeerReview } = await import("./dist-YIKUBJLQ.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-
|
|
209
|
+
const { loadGraphStore } = await import("./graph-loader-XULF5QF7.js");
|
|
210
210
|
const store = await loadGraphStore(sanitizePath(input.path));
|
|
211
211
|
if (store) {
|
|
212
|
-
const { GraphFeedbackAdapter } = await import("./dist-
|
|
212
|
+
const { GraphFeedbackAdapter } = await import("./dist-OEXTQQZC.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);
|
|
@@ -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-
|
|
52
|
+
const core = await import("./dist-YIKUBJLQ.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-
|
|
71
|
+
const core = await import("./dist-YIKUBJLQ.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);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
findConfigFile,
|
|
3
3
|
loadConfig
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-GJRUIXUK.js";
|
|
5
5
|
import {
|
|
6
6
|
resultToMcpResponse
|
|
7
7
|
} from "./chunk-IDZNPTYD.js";
|
|
@@ -46,18 +46,18 @@ async function handleCheckDocs(input) {
|
|
|
46
46
|
const projectPath = sanitizePath(input.path);
|
|
47
47
|
const scope = input.scope ?? "coverage";
|
|
48
48
|
if (scope === "integrity") {
|
|
49
|
-
const { validateKnowledgeMap } = await import("./dist-
|
|
49
|
+
const { validateKnowledgeMap } = await import("./dist-YIKUBJLQ.js");
|
|
50
50
|
const result2 = await validateKnowledgeMap(projectPath);
|
|
51
51
|
return resultToMcpResponse(result2);
|
|
52
52
|
}
|
|
53
53
|
if (scope === "all") {
|
|
54
|
-
const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-
|
|
54
|
+
const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-YIKUBJLQ.js");
|
|
55
55
|
const domain2 = input.domain ?? "src";
|
|
56
|
-
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-
|
|
56
|
+
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-XULF5QF7.js");
|
|
57
57
|
const store2 = await loadGraphStore2(projectPath);
|
|
58
58
|
let graphCoverage2;
|
|
59
59
|
if (store2) {
|
|
60
|
-
const { Assembler } = await import("./dist-
|
|
60
|
+
const { Assembler } = await import("./dist-OEXTQQZC.js");
|
|
61
61
|
const assembler = new Assembler(store2);
|
|
62
62
|
const report = assembler.checkCoverage();
|
|
63
63
|
graphCoverage2 = {
|
|
@@ -90,13 +90,13 @@ async function handleCheckDocs(input) {
|
|
|
90
90
|
}
|
|
91
91
|
return resultToMcpResponse(Ok({ coverage, integrity }));
|
|
92
92
|
}
|
|
93
|
-
const { checkDocCoverage } = await import("./dist-
|
|
93
|
+
const { checkDocCoverage } = await import("./dist-YIKUBJLQ.js");
|
|
94
94
|
const domain = input.domain ?? "src";
|
|
95
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
95
|
+
const { loadGraphStore } = await import("./graph-loader-XULF5QF7.js");
|
|
96
96
|
const store = await loadGraphStore(projectPath);
|
|
97
97
|
let graphCoverage;
|
|
98
98
|
if (store) {
|
|
99
|
-
const { Assembler } = await import("./dist-
|
|
99
|
+
const { Assembler } = await import("./dist-OEXTQQZC.js");
|
|
100
100
|
const assembler = new Assembler(store);
|
|
101
101
|
const report = assembler.checkCoverage();
|
|
102
102
|
graphCoverage = {
|
|
@@ -45,7 +45,7 @@ var runCodeReviewDefinition = {
|
|
|
45
45
|
};
|
|
46
46
|
async function handleRunCodeReview(input) {
|
|
47
47
|
try {
|
|
48
|
-
const { parseDiff, runReviewPipeline } = await import("./dist-
|
|
48
|
+
const { parseDiff, runReviewPipeline } = await import("./dist-YIKUBJLQ.js");
|
|
49
49
|
const parseResult = parseDiff(input.diff);
|
|
50
50
|
if (!parseResult.ok) {
|
|
51
51
|
return {
|