@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.
Files changed (62) hide show
  1. package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +2 -2
  2. package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +1 -1
  3. package/dist/agents/skills/claude-code/harness-execution/SKILL.md +1 -1
  4. package/dist/agents/skills/claude-code/harness-roadmap/SKILL.md +5 -5
  5. package/dist/agents/skills/claude-code/harness-roadmap-pilot/SKILL.md +18 -14
  6. package/dist/agents/skills/codex/harness-autopilot/SKILL.md +2 -2
  7. package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +1 -1
  8. package/dist/agents/skills/codex/harness-execution/SKILL.md +1 -1
  9. package/dist/agents/skills/codex/harness-roadmap/SKILL.md +5 -5
  10. package/dist/agents/skills/codex/harness-roadmap-pilot/SKILL.md +18 -14
  11. package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +2 -2
  12. package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +1 -1
  13. package/dist/agents/skills/cursor/harness-execution/SKILL.md +1 -1
  14. package/dist/agents/skills/cursor/harness-roadmap/SKILL.md +5 -5
  15. package/dist/agents/skills/cursor/harness-roadmap-pilot/SKILL.md +18 -14
  16. package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +2 -2
  17. package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +1 -1
  18. package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +1 -1
  19. package/dist/agents/skills/gemini-cli/harness-roadmap/SKILL.md +5 -5
  20. package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/SKILL.md +18 -14
  21. package/dist/{agents-md-PM7LO74M.js → agents-md-GLKJSGKT.js} +2 -2
  22. package/dist/{architecture-OVOCDTI6.js → architecture-EDSBAGR4.js} +3 -3
  23. package/dist/{assess-project-R2OZIDDS.js → assess-project-CEDY4JU3.js} +1 -1
  24. package/dist/bin/harness-mcp.js +14 -14
  25. package/dist/bin/harness.js +16 -16
  26. package/dist/{check-phase-gate-7JQ6EW5R.js → check-phase-gate-N3DTKFCZ.js} +4 -4
  27. package/dist/{chunk-SOTTK27D.js → chunk-26AUZBV4.js} +19 -19
  28. package/dist/{chunk-5FBWWMY2.js → chunk-2LAEDVOC.js} +6 -6
  29. package/dist/{chunk-TEZI27SA.js → chunk-5SWE24IG.js} +1 -1
  30. package/dist/{chunk-PUOMFNRO.js → chunk-A4AI3H3R.js} +1 -1
  31. package/dist/{chunk-W6MPLFXU.js → chunk-AIBAYANF.js} +3 -3
  32. package/dist/{chunk-ZEIEUCZL.js → chunk-AKVG4MMZ.js} +9 -9
  33. package/dist/{chunk-J7W4LTRK.js → chunk-ENA4O4WD.js} +2 -2
  34. package/dist/{chunk-GRJ7A4WT.js → chunk-GJRUIXUK.js} +1 -1
  35. package/dist/{chunk-5QTWFO24.js → chunk-HT4VPPB4.js} +8 -8
  36. package/dist/{chunk-B4WHXHF7.js → chunk-LIWGCYON.js} +1 -1
  37. package/dist/{chunk-FSLFBLYW.js → chunk-QUKH6QCJ.js} +7 -7
  38. package/dist/{chunk-DJEBBENF.js → chunk-SM22U22L.js} +95 -81
  39. package/dist/{chunk-DXYOAQQC.js → chunk-TD6MQUV2.js} +1 -1
  40. package/dist/{chunk-IK5GSLW6.js → chunk-TJ6NLLAY.js} +4 -4
  41. package/dist/{chunk-ASS5TD2Y.js → chunk-TLDCCPUZ.js} +1 -1
  42. package/dist/{chunk-U44JNY3Y.js → chunk-XDAIFVGC.js} +1 -1
  43. package/dist/{ci-workflow-OTTEERPF.js → ci-workflow-LE3QF4FP.js} +2 -2
  44. package/dist/{dist-IA6XYKNO.js → dist-OEXTQQZC.js} +1 -1
  45. package/dist/{dist-LCR2IO7U.js → dist-YIKUBJLQ.js} +2 -2
  46. package/dist/{docs-CHAYSGOP.js → docs-F5G7NAFF.js} +4 -4
  47. package/dist/{engine-4MY2U5RZ.js → engine-LX5RVGXN.js} +2 -2
  48. package/dist/{entropy-AKSZG7G5.js → entropy-A5Q2USYX.js} +3 -3
  49. package/dist/{feedback-QGCSW7SB.js → feedback-2EU25RIW.js} +1 -1
  50. package/dist/{generate-agent-definitions-KU6X2UQN.js → generate-agent-definitions-HNJHO5YQ.js} +2 -2
  51. package/dist/{graph-loader-FJN4H7Y4.js → graph-loader-XULF5QF7.js} +1 -1
  52. package/dist/index.d.ts +8 -8
  53. package/dist/index.js +16 -16
  54. package/dist/{loader-AV5XEMER.js → loader-GWIEW4HM.js} +2 -2
  55. package/dist/{mcp-LWHVQRG7.js → mcp-ID3LR6JB.js} +14 -14
  56. package/dist/{performance-ETZVXXGQ.js → performance-YAY2A6A6.js} +4 -4
  57. package/dist/{review-pipeline-3ZS3GJSP.js → review-pipeline-YD4WI3JM.js} +1 -1
  58. package/dist/{runtime-KQTJRK3H.js → runtime-UJ4YO4CA.js} +2 -2
  59. package/dist/{security-LJCLZES6.js → security-IBSUKMVD.js} +1 -1
  60. package/dist/{validate-4IA5RPEX.js → validate-NHXWKMCR.js} +3 -3
  61. package/dist/{validate-cross-check-VX2BAHQI.js → validate-cross-check-R3GV2MLM.js} +2 -2
  62. 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 `assignFeature(roadmap, feature, currentUser, todayDate)` from `@harness-engineering/core`.
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
- 2. Serialize and write the updated roadmap to `docs/roadmap.md`.
87
+ ```json
88
+ manage_roadmap({
89
+ path: "<project-root>",
90
+ action: "update",
91
+ feature: "<feature-name>",
92
+ assignee: "<currentUser>"
93
+ })
94
+ ```
90
95
 
91
- 3. If tracker config exists in `harness.config.json`, sync the assignment:
92
- - Call the external tracker's `assignTicket` to push the assignment
93
- - Log result but do not block on failure
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
- 4. Determine the transition target:
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
- 5. Present the transition to the human via `emit_interaction`:
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
- 6. Run `harness validate`.
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
- - **`assignFeature`** -- Assignment with history tracking. Import from `@harness-engineering/core`. Handles new assignment and reassignment (unassigned + assigned records).
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
- Assigned: Graph Connector -> @cwarner
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,9 +1,9 @@
1
1
  import {
2
2
  generateAgentsMd
3
3
  } from "./chunk-OD3S2NHN.js";
4
- import "./chunk-U44JNY3Y.js";
4
+ import "./chunk-XDAIFVGC.js";
5
5
  import "./chunk-ERS5EVUZ.js";
6
- import "./chunk-TEZI27SA.js";
6
+ import "./chunk-5SWE24IG.js";
7
7
  export {
8
8
  generateAgentsMd
9
9
  };
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  checkDependenciesDefinition,
3
3
  handleCheckDependencies
4
- } from "./chunk-W6MPLFXU.js";
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-U44JNY3Y.js";
8
+ import "./chunk-XDAIFVGC.js";
9
9
  import "./chunk-ERS5EVUZ.js";
10
- import "./chunk-TEZI27SA.js";
10
+ import "./chunk-5SWE24IG.js";
11
11
  export {
12
12
  checkDependenciesDefinition,
13
13
  handleCheckDependencies
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  assessProjectDefinition,
3
3
  handleAssessProject
4
- } from "./chunk-5FBWWMY2.js";
4
+ } from "./chunk-2LAEDVOC.js";
5
5
  import "./chunk-W6Y7ZW3Y.js";
6
6
  export {
7
7
  assessProjectDefinition,
@@ -1,28 +1,28 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  startServer
4
- } from "../chunk-DJEBBENF.js";
5
- import "../chunk-IK5GSLW6.js";
6
- import "../chunk-FSLFBLYW.js";
7
- import "../chunk-ZEIEUCZL.js";
8
- import "../chunk-DXYOAQQC.js";
9
- import "../chunk-B4WHXHF7.js";
10
- import "../chunk-5FBWWMY2.js";
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-J7W4LTRK.js";
13
- import "../chunk-ASS5TD2Y.js";
14
- import "../chunk-W6MPLFXU.js";
12
+ import "../chunk-ENA4O4WD.js";
13
+ import "../chunk-TLDCCPUZ.js";
14
+ import "../chunk-AIBAYANF.js";
15
15
  import "../chunk-H7Y5CKTM.js";
16
- import "../chunk-5QTWFO24.js";
17
- import "../chunk-GRJ7A4WT.js";
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-U44JNY3Y.js";
23
+ import "../chunk-XDAIFVGC.js";
24
24
  import "../chunk-ERS5EVUZ.js";
25
- import "../chunk-TEZI27SA.js";
25
+ import "../chunk-5SWE24IG.js";
26
26
 
27
27
  // src/bin/harness-mcp.ts
28
28
  import "dotenv/config";
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  createProgram,
4
4
  printFirstRunWelcome
5
- } from "../chunk-SOTTK27D.js";
5
+ } from "../chunk-26AUZBV4.js";
6
6
  import "../chunk-OD3S2NHN.js";
7
7
  import "../chunk-SD3SQOZ2.js";
8
- import "../chunk-PUOMFNRO.js";
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-DJEBBENF.js";
21
- import "../chunk-IK5GSLW6.js";
22
- import "../chunk-FSLFBLYW.js";
23
- import "../chunk-ZEIEUCZL.js";
24
- import "../chunk-DXYOAQQC.js";
25
- import "../chunk-B4WHXHF7.js";
26
- import "../chunk-5FBWWMY2.js";
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-J7W4LTRK.js";
29
- import "../chunk-ASS5TD2Y.js";
30
- import "../chunk-W6MPLFXU.js";
28
+ import "../chunk-ENA4O4WD.js";
29
+ import "../chunk-TLDCCPUZ.js";
30
+ import "../chunk-AIBAYANF.js";
31
31
  import "../chunk-H7Y5CKTM.js";
32
- import "../chunk-5QTWFO24.js";
32
+ import "../chunk-HT4VPPB4.js";
33
33
  import {
34
34
  findConfigFile,
35
35
  loadConfig
36
- } from "../chunk-GRJ7A4WT.js";
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-U44JNY3Y.js";
54
+ } from "../chunk-XDAIFVGC.js";
55
55
  import "../chunk-ERS5EVUZ.js";
56
- import "../chunk-TEZI27SA.js";
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-PUOMFNRO.js";
4
+ } from "./chunk-A4AI3H3R.js";
5
5
  import "./chunk-EBJQ6N4M.js";
6
- import "./chunk-GRJ7A4WT.js";
6
+ import "./chunk-GJRUIXUK.js";
7
7
  import "./chunk-3WGJMBKH.js";
8
- import "./chunk-U44JNY3Y.js";
8
+ import "./chunk-XDAIFVGC.js";
9
9
  import "./chunk-ERS5EVUZ.js";
10
- import "./chunk-TEZI27SA.js";
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-PUOMFNRO.js";
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-DJEBBENF.js";
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-GRJ7A4WT.js";
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-U44JNY3Y.js";
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-VX2BAHQI.js");
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-LCR2IO7U.js");
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-LCR2IO7U.js");
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-LCR2IO7U.js");
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-IA6XYKNO.js");
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-IA6XYKNO.js");
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-IA6XYKNO.js");
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-IA6XYKNO.js");
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-IA6XYKNO.js");
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-LWHVQRG7.js");
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-LCR2IO7U.js");
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-LCR2IO7U.js");
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-LCR2IO7U.js");
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-LCR2IO7U.js");
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-LCR2IO7U.js");
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-4IA5RPEX.js");
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-OVOCDTI6.js");
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-CHAYSGOP.js");
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-AKSZG7G5.js");
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-LJCLZES6.js");
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-ETZVXXGQ.js");
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 && node.path.replace(/\\/g, "/").includes("/tests/") ? "verified_by" : "requires";
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,
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-EBJQ6N4M.js";
4
4
  import {
5
5
  resolveConfig
6
- } from "./chunk-GRJ7A4WT.js";
6
+ } from "./chunk-GJRUIXUK.js";
7
7
  import {
8
8
  ExitCode
9
9
  } from "./chunk-3WGJMBKH.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-LCR2IO7U.js");
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-FJN4H7Y4.js");
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-IA6XYKNO.js");
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-LCR2IO7U.js");
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-FJN4H7Y4.js");
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-IA6XYKNO.js");
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-LCR2IO7U.js");
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-FJN4H7Y4.js");
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-IA6XYKNO.js");
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-LCR2IO7U.js");
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-FJN4H7Y4.js");
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-IA6XYKNO.js");
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-LCR2IO7U.js");
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-LCR2IO7U.js");
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);
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-3WGJMBKH.js";
5
5
  import {
6
6
  ArchConfigSchema
7
- } from "./chunk-U44JNY3Y.js";
7
+ } from "./chunk-XDAIFVGC.js";
8
8
  import {
9
9
  Err,
10
10
  Ok
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  findConfigFile,
3
3
  loadConfig
4
- } from "./chunk-GRJ7A4WT.js";
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-LCR2IO7U.js");
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-LCR2IO7U.js");
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-FJN4H7Y4.js");
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-IA6XYKNO.js");
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-LCR2IO7U.js");
93
+ const { checkDocCoverage } = await import("./dist-YIKUBJLQ.js");
94
94
  const domain = input.domain ?? "src";
95
- const { loadGraphStore } = await import("./graph-loader-FJN4H7Y4.js");
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-IA6XYKNO.js");
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-LCR2IO7U.js");
48
+ const { parseDiff, runReviewPipeline } = await import("./dist-YIKUBJLQ.js");
49
49
  const parseResult = parseDiff(input.diff);
50
50
  if (!parseResult.ok) {
51
51
  return {