@harness-engineering/cli 1.26.1 → 1.27.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/cleanup-dead-code/SKILL.md +3 -1
- package/dist/agents/skills/claude-code/detect-doc-drift/SKILL.md +3 -1
- package/dist/agents/skills/claude-code/harness-architecture-advisor/SKILL.md +4 -0
- package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +55 -24
- package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +16 -5
- package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +21 -6
- package/dist/agents/skills/claude-code/harness-codebase-cleanup/SKILL.md +2 -0
- package/dist/agents/skills/claude-code/harness-debugging/SKILL.md +13 -1
- package/dist/agents/skills/claude-code/harness-dependency-health/SKILL.md +4 -0
- package/dist/agents/skills/claude-code/harness-execution/SKILL.md +16 -6
- package/dist/agents/skills/claude-code/harness-impact-analysis/SKILL.md +2 -0
- package/dist/agents/skills/claude-code/harness-integration/SKILL.md +560 -0
- package/dist/agents/skills/claude-code/harness-integration/skill.yaml +65 -0
- package/dist/agents/skills/claude-code/harness-integrity/SKILL.md +2 -0
- package/dist/agents/skills/claude-code/harness-onboarding/SKILL.md +4 -0
- package/dist/agents/skills/claude-code/harness-perf/SKILL.md +9 -7
- package/dist/agents/skills/claude-code/harness-planning/SKILL.md +77 -10
- package/dist/agents/skills/claude-code/harness-refactoring/SKILL.md +13 -4
- package/dist/agents/skills/claude-code/harness-security-scan/SKILL.md +3 -1
- package/dist/agents/skills/claude-code/harness-soundness-review/SKILL.md +4 -0
- package/dist/agents/skills/claude-code/harness-tdd/SKILL.md +5 -2
- package/dist/agents/skills/claude-code/harness-verification/SKILL.md +4 -0
- package/dist/agents/skills/codex/cleanup-dead-code/SKILL.md +3 -1
- package/dist/agents/skills/codex/detect-doc-drift/SKILL.md +3 -1
- package/dist/agents/skills/codex/harness-architecture-advisor/SKILL.md +4 -0
- package/dist/agents/skills/codex/harness-autopilot/SKILL.md +55 -24
- package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +16 -5
- package/dist/agents/skills/codex/harness-code-review/SKILL.md +21 -6
- package/dist/agents/skills/codex/harness-codebase-cleanup/SKILL.md +2 -0
- package/dist/agents/skills/codex/harness-debugging/SKILL.md +13 -1
- package/dist/agents/skills/codex/harness-dependency-health/SKILL.md +4 -0
- package/dist/agents/skills/codex/harness-execution/SKILL.md +16 -6
- package/dist/agents/skills/codex/harness-impact-analysis/SKILL.md +2 -0
- package/dist/agents/skills/codex/harness-integration/SKILL.md +560 -0
- package/dist/agents/skills/codex/harness-integration/skill.yaml +65 -0
- package/dist/agents/skills/codex/harness-integrity/SKILL.md +2 -0
- package/dist/agents/skills/codex/harness-onboarding/SKILL.md +4 -0
- package/dist/agents/skills/codex/harness-perf/SKILL.md +9 -7
- package/dist/agents/skills/codex/harness-planning/SKILL.md +77 -10
- package/dist/agents/skills/codex/harness-refactoring/SKILL.md +13 -4
- package/dist/agents/skills/codex/harness-security-scan/SKILL.md +3 -1
- package/dist/agents/skills/codex/harness-soundness-review/SKILL.md +4 -0
- package/dist/agents/skills/codex/harness-tdd/SKILL.md +5 -2
- package/dist/agents/skills/codex/harness-verification/SKILL.md +4 -0
- package/dist/agents/skills/cursor/cleanup-dead-code/SKILL.md +3 -1
- package/dist/agents/skills/cursor/detect-doc-drift/SKILL.md +3 -1
- package/dist/agents/skills/cursor/harness-architecture-advisor/SKILL.md +4 -0
- package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +55 -24
- package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +16 -5
- package/dist/agents/skills/cursor/harness-code-review/SKILL.md +21 -6
- package/dist/agents/skills/cursor/harness-codebase-cleanup/SKILL.md +2 -0
- package/dist/agents/skills/cursor/harness-debugging/SKILL.md +13 -1
- package/dist/agents/skills/cursor/harness-dependency-health/SKILL.md +4 -0
- package/dist/agents/skills/cursor/harness-execution/SKILL.md +16 -6
- package/dist/agents/skills/cursor/harness-impact-analysis/SKILL.md +2 -0
- package/dist/agents/skills/cursor/harness-integration/SKILL.md +560 -0
- package/dist/agents/skills/cursor/harness-integration/skill.yaml +65 -0
- package/dist/agents/skills/cursor/harness-integrity/SKILL.md +2 -0
- package/dist/agents/skills/cursor/harness-onboarding/SKILL.md +4 -0
- package/dist/agents/skills/cursor/harness-perf/SKILL.md +9 -7
- package/dist/agents/skills/cursor/harness-planning/SKILL.md +77 -10
- package/dist/agents/skills/cursor/harness-refactoring/SKILL.md +13 -4
- package/dist/agents/skills/cursor/harness-security-scan/SKILL.md +3 -1
- package/dist/agents/skills/cursor/harness-soundness-review/SKILL.md +4 -0
- package/dist/agents/skills/cursor/harness-tdd/SKILL.md +5 -2
- package/dist/agents/skills/cursor/harness-verification/SKILL.md +4 -0
- package/dist/agents/skills/gemini-cli/cleanup-dead-code/SKILL.md +3 -1
- package/dist/agents/skills/gemini-cli/detect-doc-drift/SKILL.md +3 -1
- package/dist/agents/skills/gemini-cli/harness-architecture-advisor/SKILL.md +4 -0
- package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +55 -24
- package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +16 -5
- package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +21 -6
- package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/SKILL.md +2 -0
- package/dist/agents/skills/gemini-cli/harness-debugging/SKILL.md +13 -1
- package/dist/agents/skills/gemini-cli/harness-dependency-health/SKILL.md +4 -0
- package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +16 -6
- package/dist/agents/skills/gemini-cli/harness-impact-analysis/SKILL.md +2 -0
- package/dist/agents/skills/gemini-cli/harness-integration/SKILL.md +560 -0
- package/dist/agents/skills/gemini-cli/harness-integration/skill.yaml +65 -0
- package/dist/agents/skills/gemini-cli/harness-integrity/SKILL.md +2 -0
- package/dist/agents/skills/gemini-cli/harness-onboarding/SKILL.md +4 -0
- package/dist/agents/skills/gemini-cli/harness-perf/SKILL.md +9 -7
- package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +77 -10
- package/dist/agents/skills/gemini-cli/harness-refactoring/SKILL.md +13 -4
- package/dist/agents/skills/gemini-cli/harness-security-scan/SKILL.md +3 -1
- package/dist/agents/skills/gemini-cli/harness-soundness-review/SKILL.md +4 -0
- package/dist/agents/skills/gemini-cli/harness-tdd/SKILL.md +5 -2
- package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +4 -0
- package/dist/{agents-md-VI3HLR7E.js → agents-md-2RN666DE.js} +3 -3
- package/dist/{architecture-ZDDKEVID.js → architecture-ZR33YKJB.js} +4 -4
- package/dist/{assess-project-Y6W7YDUA.js → assess-project-LLWWEQEV.js} +1 -1
- package/dist/bin/harness-mcp.js +17 -16
- package/dist/bin/harness.js +27 -26
- package/dist/{business-knowledge-6RHYJOB3.js → business-knowledge-EISPR7FU.js} +1 -1
- package/dist/{check-phase-gate-CXR3VM22.js → check-phase-gate-ZVG56NT2.js} +4 -4
- package/dist/chunk-27AJKSQY.js +107 -0
- package/dist/{chunk-DBIX3X4H.js → chunk-2FOLD76X.js} +2 -2
- package/dist/{chunk-3AMQYWGT.js → chunk-3AJW7VQ3.js} +2 -2
- package/dist/{chunk-FUND5WJR.js → chunk-3XMOWLK3.js} +2 -2
- package/dist/{chunk-OLW7BJ5N.js → chunk-776JFSPK.js} +1 -1
- package/dist/{chunk-VKS3F46M.js → chunk-A4ETL34H.js} +7 -2
- package/dist/{chunk-JV4Y2U5F.js → chunk-BO4AJZRE.js} +1 -1
- package/dist/{chunk-WZ7UHPT3.js → chunk-BZZNYHRY.js} +9 -9
- package/dist/{chunk-ZN6ROTYP.js → chunk-C7RPQWBG.js} +1 -1
- package/dist/{chunk-RAVD7QLY.js → chunk-CJYNZMOP.js} +8 -8
- package/dist/{chunk-PNNFCVW4.js → chunk-EGRQHLDM.js} +5 -5
- package/dist/{chunk-N6B6RKQQ.js → chunk-EICASBYP.js} +1 -1
- package/dist/{chunk-K56DTX7G.js → chunk-F3Y64VNF.js} +6 -6
- package/dist/{chunk-ORNEK65Y.js → chunk-FUS4OOGC.js} +1 -1
- package/dist/{chunk-2FPUPRCY.js → chunk-GAIOIINV.js} +594 -127
- package/dist/{chunk-YC4EYIER.js → chunk-IBTHD2UA.js} +132 -77
- package/dist/{chunk-RC5ZY3EV.js → chunk-IOW3MW2K.js} +2 -2
- package/dist/{chunk-B66LRB5M.js → chunk-L3Y7L4EG.js} +1 -1
- package/dist/{chunk-BK4DJIIY.js → chunk-MGPVA2EM.js} +27 -4
- package/dist/{chunk-NY7DTZ6K.js → chunk-Q5DKIL46.js} +3 -3
- package/dist/{chunk-Q3ZLVMQM.js → chunk-QTXW5TIS.js} +1 -1
- package/dist/{chunk-AMRC4FU2.js → chunk-SA57FVGX.js} +92 -55
- package/dist/{chunk-TY2ESLVL.js → chunk-SDDQPMZK.js} +1 -1
- package/dist/{chunk-7GY6WNEI.js → chunk-SDPHFDQS.js} +1 -1
- package/dist/{chunk-56A6OXVA.js → chunk-T7UZOJF4.js} +9 -9
- package/dist/{chunk-2BPPS6YQ.js → chunk-TCMVZ3B7.js} +457 -362
- package/dist/{chunk-TSVYBDDE.js → chunk-YZH4I4JO.js} +1 -1
- package/dist/{ci-workflow-EW37KVPS.js → ci-workflow-JFOL4YWW.js} +3 -3
- package/dist/{dist-NCNAXUFD.js → dist-BZS2XRLG.js} +5 -1
- package/dist/{dist-CJDGASPP.js → dist-CPKL5Y2R.js} +2 -2
- package/dist/{docs-4XI2FQW2.js → docs-FUTRJQHA.js} +4 -4
- package/dist/{engine-4L4CDTHU.js → engine-FB3HCNVT.js} +3 -3
- package/dist/{entropy-PBYSIQYS.js → entropy-FIEE4YDA.js} +3 -3
- package/dist/{feedback-OTIFW5MK.js → feedback-7EC4T6XG.js} +1 -1
- package/dist/{generate-agent-definitions-CZGUXIIN.js → generate-agent-definitions-FOSFADNR.js} +4 -4
- package/dist/{graph-loader-RDXSEBD7.js → graph-loader-QEI7SYOQ.js} +1 -1
- package/dist/hooks/adoption-tracker.js +36 -8
- package/dist/hooks/sentinel-pre.js +3 -2
- package/dist/hooks/telemetry-reporter.js +34 -15
- package/dist/index-builder-3AOQ3ZII.js +13 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +29 -28
- package/dist/{loader-UZOXCWFC.js → loader-HXUOBTYA.js} +3 -3
- package/dist/{mcp-GWVVV6LH.js → mcp-ICXMTAD3.js} +17 -16
- package/dist/{performance-5UQPP3XX.js → performance-TYXBCTR7.js} +4 -4
- package/dist/{review-pipeline-65V4EO6O.js → review-pipeline-B4WPU6BQ.js} +3 -3
- package/dist/{runtime-PXX7HNB3.js → runtime-HQQNOARD.js} +3 -3
- package/dist/{scan-WM7XDUF7.js → scan-TX55R6QS.js} +1 -1
- package/dist/{security-CAYDRZIZ.js → security-25VFLIAO.js} +1 -1
- package/dist/templates/orchestrator/harness.orchestrator.md +18 -8
- package/dist/{validate-CWGXR7QM.js → validate-EAVGKZQB.js} +4 -4
- package/dist/{validate-cross-check-BKCNLZYG.js → validate-cross-check-SPL3H4O5.js} +3 -3
- package/package.json +13 -5
- package/dist/hooks/profiles.ts +0 -48
|
@@ -1,19 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
generateRuntime
|
|
3
|
+
} from "./chunk-EICASBYP.js";
|
|
1
4
|
import {
|
|
2
5
|
generateAgentsMd
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-C7RPQWBG.js";
|
|
4
7
|
import {
|
|
5
8
|
generateCIWorkflow
|
|
6
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-FUS4OOGC.js";
|
|
7
10
|
import {
|
|
8
11
|
TemplateEngine
|
|
9
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-L3Y7L4EG.js";
|
|
10
13
|
import {
|
|
11
14
|
generate,
|
|
12
15
|
validate
|
|
13
16
|
} from "./chunk-CQ553GZO.js";
|
|
14
|
-
import {
|
|
15
|
-
generateRuntime
|
|
16
|
-
} from "./chunk-N6B6RKQQ.js";
|
|
17
17
|
import {
|
|
18
18
|
runPersona
|
|
19
19
|
} from "./chunk-GISMXMVL.js";
|
|
@@ -28,21 +28,21 @@ import {
|
|
|
28
28
|
OutputMode,
|
|
29
29
|
createCheckPhaseGateCommand,
|
|
30
30
|
findFiles
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-3XMOWLK3.js";
|
|
32
32
|
import {
|
|
33
33
|
createGenerateAgentDefinitionsCommand,
|
|
34
34
|
generateAgentDefinitions
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-SDDQPMZK.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-BO4AJZRE.js";
|
|
43
43
|
import {
|
|
44
44
|
createScanCommand
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-QTXW5TIS.js";
|
|
46
46
|
import {
|
|
47
47
|
appendFrameworkAgents,
|
|
48
48
|
captureHealthSnapshot,
|
|
@@ -54,14 +54,19 @@ import {
|
|
|
54
54
|
handleOrphanDeletion,
|
|
55
55
|
isSnapshotFresh,
|
|
56
56
|
loadCachedSnapshot,
|
|
57
|
-
loadOrRebuildIndex,
|
|
58
57
|
persistToolingConfig,
|
|
59
58
|
recommend
|
|
60
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-TCMVZ3B7.js";
|
|
60
|
+
import {
|
|
61
|
+
loadGraphStore
|
|
62
|
+
} from "./chunk-776JFSPK.js";
|
|
63
|
+
import {
|
|
64
|
+
loadOrRebuildIndex
|
|
65
|
+
} from "./chunk-27AJKSQY.js";
|
|
61
66
|
import {
|
|
62
67
|
findConfigFile,
|
|
63
68
|
resolveConfig
|
|
64
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-A4ETL34H.js";
|
|
65
70
|
import {
|
|
66
71
|
VALID_PLATFORMS
|
|
67
72
|
} from "./chunk-3ISINLYT.js";
|
|
@@ -73,9 +78,6 @@ import {
|
|
|
73
78
|
resolveSkillsDir,
|
|
74
79
|
resolveTemplatesDir
|
|
75
80
|
} from "./chunk-6B6UN6SG.js";
|
|
76
|
-
import {
|
|
77
|
-
loadGraphStore
|
|
78
|
-
} from "./chunk-OLW7BJ5N.js";
|
|
79
81
|
import {
|
|
80
82
|
CLI_VERSION
|
|
81
83
|
} from "./chunk-BM3PWGXQ.js";
|
|
@@ -149,7 +151,7 @@ import {
|
|
|
149
151
|
validateKnowledgeMap,
|
|
150
152
|
writeConfig,
|
|
151
153
|
writeLockfile
|
|
152
|
-
} from "./chunk-
|
|
154
|
+
} from "./chunk-IBTHD2UA.js";
|
|
153
155
|
import {
|
|
154
156
|
Err,
|
|
155
157
|
Ok
|
|
@@ -363,7 +365,7 @@ function registerSkillsCommand(adoption) {
|
|
|
363
365
|
const globalOpts = cmd.optsWithGlobals();
|
|
364
366
|
const limit = Math.max(parseInt(opts.limit, 10) || 20, 1);
|
|
365
367
|
const cwd = process.cwd();
|
|
366
|
-
const { readAdoptionRecords, aggregateBySkill } = await import("./dist-
|
|
368
|
+
const { readAdoptionRecords, aggregateBySkill } = await import("./dist-CPKL5Y2R.js");
|
|
367
369
|
const records = readAdoptionRecords(cwd);
|
|
368
370
|
if (records.length === 0) {
|
|
369
371
|
if (globalOpts.json) {
|
|
@@ -399,7 +401,7 @@ function registerRecentCommand(adoption) {
|
|
|
399
401
|
const globalOpts = cmd.optsWithGlobals();
|
|
400
402
|
const limit = Math.max(parseInt(opts.limit, 10) || 20, 1);
|
|
401
403
|
const cwd = process.cwd();
|
|
402
|
-
const { readAdoptionRecords } = await import("./dist-
|
|
404
|
+
const { readAdoptionRecords } = await import("./dist-CPKL5Y2R.js");
|
|
403
405
|
const records = readAdoptionRecords(cwd);
|
|
404
406
|
if (records.length === 0) {
|
|
405
407
|
if (globalOpts.json) {
|
|
@@ -477,7 +479,7 @@ function registerSkillCommand(adoption) {
|
|
|
477
479
|
adoption.command("skill <name>").description("Show detail for a specific skill").action(async (name, _opts, cmd) => {
|
|
478
480
|
const globalOpts = cmd.optsWithGlobals();
|
|
479
481
|
const cwd = process.cwd();
|
|
480
|
-
const { readAdoptionRecords, aggregateBySkill } = await import("./dist-
|
|
482
|
+
const { readAdoptionRecords, aggregateBySkill } = await import("./dist-CPKL5Y2R.js");
|
|
481
483
|
const records = readAdoptionRecords(cwd);
|
|
482
484
|
const skillRecords = records.filter((r) => r.skill === name);
|
|
483
485
|
if (skillRecords.length === 0) {
|
|
@@ -2766,7 +2768,7 @@ import { Command as Command25 } from "commander";
|
|
|
2766
2768
|
// src/commands/graph/status.ts
|
|
2767
2769
|
import * as path15 from "path";
|
|
2768
2770
|
async function runGraphStatus(projectPath) {
|
|
2769
|
-
const { GraphStore } = await import("./dist-
|
|
2771
|
+
const { GraphStore } = await import("./dist-BZS2XRLG.js");
|
|
2770
2772
|
const graphDir = path15.join(projectPath, ".harness", "graph");
|
|
2771
2773
|
const store = new GraphStore();
|
|
2772
2774
|
const loaded = await store.load(graphDir);
|
|
@@ -2806,7 +2808,7 @@ async function runGraphStatus(projectPath) {
|
|
|
2806
2808
|
// src/commands/graph/export.ts
|
|
2807
2809
|
import * as path16 from "path";
|
|
2808
2810
|
async function runGraphExport(projectPath, format) {
|
|
2809
|
-
const { GraphStore } = await import("./dist-
|
|
2811
|
+
const { GraphStore } = await import("./dist-BZS2XRLG.js");
|
|
2810
2812
|
const graphDir = path16.join(projectPath, ".harness", "graph");
|
|
2811
2813
|
const store = new GraphStore();
|
|
2812
2814
|
const loaded = await store.load(graphDir);
|
|
@@ -2842,7 +2844,7 @@ import * as path19 from "path";
|
|
|
2842
2844
|
import { Command as Command23 } from "commander";
|
|
2843
2845
|
import * as path17 from "path";
|
|
2844
2846
|
async function runQuery(projectPath, rootNodeId, opts) {
|
|
2845
|
-
const { GraphStore, ContextQL } = await import("./dist-
|
|
2847
|
+
const { GraphStore, ContextQL } = await import("./dist-BZS2XRLG.js");
|
|
2846
2848
|
const store = new GraphStore();
|
|
2847
2849
|
const graphDir = path17.join(projectPath, ".harness", "graph");
|
|
2848
2850
|
const loaded = await store.load(graphDir);
|
|
@@ -2935,8 +2937,10 @@ async function runIngest(projectPath, source, opts) {
|
|
|
2935
2937
|
JiraConnector,
|
|
2936
2938
|
SlackConnector,
|
|
2937
2939
|
CIConnector,
|
|
2938
|
-
ConfluenceConnector
|
|
2939
|
-
|
|
2940
|
+
ConfluenceConnector,
|
|
2941
|
+
FigmaConnector,
|
|
2942
|
+
MiroConnector
|
|
2943
|
+
} = await import("./dist-BZS2XRLG.js");
|
|
2940
2944
|
const graphDir = path18.join(projectPath, ".harness", "graph");
|
|
2941
2945
|
const store = new GraphStore();
|
|
2942
2946
|
await store.load(graphDir);
|
|
@@ -2946,7 +2950,7 @@ async function runIngest(projectPath, source, opts) {
|
|
|
2946
2950
|
new TopologicalLinker(store).link();
|
|
2947
2951
|
const knowledgeResult = await new KnowledgeIngestor(store).ingestAll(projectPath);
|
|
2948
2952
|
const gitResult = await new GitIngestor(store).ingest(projectPath);
|
|
2949
|
-
const { createExtractionRunner } = await import("./dist-
|
|
2953
|
+
const { createExtractionRunner } = await import("./dist-BZS2XRLG.js");
|
|
2950
2954
|
const extractedDir = path18.join(projectPath, ".harness", "knowledge", "extracted");
|
|
2951
2955
|
const signalsResult = await createExtractionRunner().run(projectPath, store, extractedDir);
|
|
2952
2956
|
const syncManager = new SyncManager(store, graphDir);
|
|
@@ -2954,7 +2958,9 @@ async function runIngest(projectPath, source, opts) {
|
|
|
2954
2958
|
jira: () => new JiraConnector(),
|
|
2955
2959
|
slack: () => new SlackConnector(),
|
|
2956
2960
|
ci: () => new CIConnector(),
|
|
2957
|
-
confluence: () => new ConfluenceConnector()
|
|
2961
|
+
confluence: () => new ConfluenceConnector(),
|
|
2962
|
+
figma: () => new FigmaConnector(),
|
|
2963
|
+
miro: () => new MiroConnector()
|
|
2958
2964
|
};
|
|
2959
2965
|
for (const [name, factory] of Object.entries(connectorMap)) {
|
|
2960
2966
|
const config = await loadConnectorConfig(projectPath, name);
|
|
@@ -2984,16 +2990,16 @@ async function runIngest(projectPath, source, opts) {
|
|
|
2984
2990
|
result = await new GitIngestor(store).ingest(projectPath);
|
|
2985
2991
|
break;
|
|
2986
2992
|
case "business-signals": {
|
|
2987
|
-
const { createExtractionRunner } = await import("./dist-
|
|
2993
|
+
const { createExtractionRunner } = await import("./dist-BZS2XRLG.js");
|
|
2988
2994
|
const extractedDir = path18.join(projectPath, ".harness", "knowledge", "extracted");
|
|
2989
2995
|
result = await createExtractionRunner().run(projectPath, store, extractedDir);
|
|
2990
2996
|
break;
|
|
2991
2997
|
}
|
|
2992
2998
|
default: {
|
|
2993
|
-
const knownConnectors = ["jira", "slack", "ci", "confluence"];
|
|
2999
|
+
const knownConnectors = ["jira", "slack", "ci", "confluence", "figma", "miro"];
|
|
2994
3000
|
if (!knownConnectors.includes(source)) {
|
|
2995
3001
|
throw new Error(
|
|
2996
|
-
`Unknown source: ${source}. Available: code, knowledge, git, business-signals, jira, slack, ci, confluence`
|
|
3002
|
+
`Unknown source: ${source}. Available: code, knowledge, git, business-signals, jira, slack, ci, confluence, figma, miro`
|
|
2997
3003
|
);
|
|
2998
3004
|
}
|
|
2999
3005
|
if (!SyncManager) {
|
|
@@ -3006,7 +3012,9 @@ async function runIngest(projectPath, source, opts) {
|
|
|
3006
3012
|
jira: () => new JiraConnector(),
|
|
3007
3013
|
slack: () => new SlackConnector(),
|
|
3008
3014
|
ci: () => new CIConnector(),
|
|
3009
|
-
confluence: () => new ConfluenceConnector()
|
|
3015
|
+
confluence: () => new ConfluenceConnector(),
|
|
3016
|
+
figma: () => new FigmaConnector(),
|
|
3017
|
+
miro: () => new MiroConnector()
|
|
3010
3018
|
};
|
|
3011
3019
|
const factory = extConnectorMap[source];
|
|
3012
3020
|
const config = await loadConnectorConfig(projectPath, source);
|
|
@@ -3021,7 +3029,7 @@ async function runIngest(projectPath, source, opts) {
|
|
|
3021
3029
|
function createIngestCommand() {
|
|
3022
3030
|
return new Command24("ingest").description("Ingest data into the knowledge graph").option(
|
|
3023
3031
|
"--source <name>",
|
|
3024
|
-
"Source to ingest (code, knowledge, git, business-signals, jira, slack, ci, confluence)"
|
|
3032
|
+
"Source to ingest (code, knowledge, git, business-signals, jira, slack, ci, confluence, figma, miro)"
|
|
3025
3033
|
).option("--all", "Run all sources (code, knowledge, git, and configured connectors)").option("--full", "Force full re-ingestion").action(async (opts, cmd) => {
|
|
3026
3034
|
if (!opts.source && !opts.all) {
|
|
3027
3035
|
console.error("Error: --source or --all is required");
|
|
@@ -3840,7 +3848,9 @@ var ALL_MCP_TOOLS = [
|
|
|
3840
3848
|
"compute_blast_radius",
|
|
3841
3849
|
"dispatch_skills",
|
|
3842
3850
|
"compact",
|
|
3843
|
-
"detect_constraint_emergence"
|
|
3851
|
+
"detect_constraint_emergence",
|
|
3852
|
+
"run_ci_checks",
|
|
3853
|
+
"generate_blueprint"
|
|
3844
3854
|
];
|
|
3845
3855
|
async function runCursorToolPicker() {
|
|
3846
3856
|
try {
|
|
@@ -3996,7 +4006,7 @@ function printMcpResult(configured, skipped, trustedFolder) {
|
|
|
3996
4006
|
` - ${ALL_MCP_TOOLS.length} tools for validation, entropy detection, skill execution, graph querying, and more`
|
|
3997
4007
|
);
|
|
3998
4008
|
console.log(
|
|
3999
|
-
" -
|
|
4009
|
+
" - 9 resources for project context, skills, rules, learnings, state, graph, and business knowledge data"
|
|
4000
4010
|
);
|
|
4001
4011
|
console.log("");
|
|
4002
4012
|
console.log(`Run ${chalk2.cyan("harness skill list")} to see available skills.`);
|
|
@@ -5276,12 +5286,12 @@ import chalk6 from "chalk";
|
|
|
5276
5286
|
function createKnowledgePipelineCommand() {
|
|
5277
5287
|
return new Command41("knowledge-pipeline").description("Run knowledge extraction, drift detection, and gap analysis").option("--fix", "Enable convergence-based auto-remediation (default: detect-only)").option("--ci", "Non-interactive mode \u2014 apply safe fixes only, report everything else").option("--domain <name>", "Limit pipeline to a specific knowledge domain").option("--drift-check", "Exit 1 if unresolved drift exists (CI gate mode)").option("--analyze-images", "Enable vision model analysis of image files").option("--image-paths <paths>", "Comma-separated image file paths for analysis").option("--coverage", "Display per-domain coverage report").option("--check-contradictions", "Display cross-source contradiction report").action(async (opts, cmd) => {
|
|
5278
5288
|
const globalOpts = cmd.optsWithGlobals();
|
|
5279
|
-
const projectDir =
|
|
5289
|
+
const projectDir = process.cwd();
|
|
5280
5290
|
try {
|
|
5281
5291
|
const graphDir = path38.join(projectDir, ".harness", "graph");
|
|
5282
5292
|
const fs41 = await import("fs/promises");
|
|
5283
5293
|
await fs41.mkdir(graphDir, { recursive: true });
|
|
5284
|
-
const { GraphStore, KnowledgePipelineRunner } = await import("./dist-
|
|
5294
|
+
const { GraphStore, KnowledgePipelineRunner } = await import("./dist-BZS2XRLG.js");
|
|
5285
5295
|
const store = new GraphStore();
|
|
5286
5296
|
try {
|
|
5287
5297
|
await store.load(graphDir);
|
|
@@ -5301,8 +5311,15 @@ function createKnowledgePipelineCommand() {
|
|
|
5301
5311
|
if (opts.analyzeImages) {
|
|
5302
5312
|
try {
|
|
5303
5313
|
const intelligence = await import("@harness-engineering/intelligence");
|
|
5304
|
-
const
|
|
5305
|
-
|
|
5314
|
+
const Provider = intelligence.AnthropicAnalysisProvider;
|
|
5315
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
5316
|
+
if (!apiKey) {
|
|
5317
|
+
logger.error(
|
|
5318
|
+
"ANTHROPIC_API_KEY environment variable is required for --analyze-images"
|
|
5319
|
+
);
|
|
5320
|
+
process.exit(1);
|
|
5321
|
+
}
|
|
5322
|
+
pipelineOpts.analysisProvider = new Provider({ apiKey });
|
|
5306
5323
|
} catch {
|
|
5307
5324
|
logger.error(
|
|
5308
5325
|
"Image analysis requires @harness-engineering/intelligence with ANTHROPIC_API_KEY set."
|
|
@@ -5325,7 +5342,9 @@ function createKnowledgePipelineCommand() {
|
|
|
5325
5342
|
extraction: result.extraction,
|
|
5326
5343
|
gaps: {
|
|
5327
5344
|
domains: result.gaps.domains.length,
|
|
5328
|
-
totalEntries: result.gaps.totalEntries
|
|
5345
|
+
totalEntries: result.gaps.totalEntries,
|
|
5346
|
+
totalExtracted: result.gaps.totalExtracted,
|
|
5347
|
+
totalGaps: result.gaps.totalGaps
|
|
5329
5348
|
},
|
|
5330
5349
|
remediations: result.remediations,
|
|
5331
5350
|
contradictions: {
|
|
@@ -5336,7 +5355,16 @@ function createKnowledgePipelineCommand() {
|
|
|
5336
5355
|
overallScore: result.coverage.overallScore,
|
|
5337
5356
|
overallGrade: result.coverage.overallGrade,
|
|
5338
5357
|
domains: result.coverage.domains.length
|
|
5339
|
-
}
|
|
5358
|
+
},
|
|
5359
|
+
...result.materialization ? {
|
|
5360
|
+
materialization: {
|
|
5361
|
+
created: result.materialization.created.length,
|
|
5362
|
+
skipped: result.materialization.skipped.length,
|
|
5363
|
+
files: result.materialization.created.map(
|
|
5364
|
+
(d) => d.filePath
|
|
5365
|
+
)
|
|
5366
|
+
}
|
|
5367
|
+
} : {}
|
|
5340
5368
|
},
|
|
5341
5369
|
null,
|
|
5342
5370
|
2
|
|
@@ -5355,7 +5383,7 @@ function createKnowledgePipelineCommand() {
|
|
|
5355
5383
|
` Extraction: ${result.extraction.codeSignals} code signals, ${result.extraction.diagrams} diagrams, ${result.extraction.linkerFacts} linker facts, ${result.extraction.businessKnowledge} business knowledge, ${result.extraction.images} images`
|
|
5356
5384
|
);
|
|
5357
5385
|
console.log(
|
|
5358
|
-
` Gaps: ${result.gaps.domains.length} domains
|
|
5386
|
+
` Gaps: ${result.gaps.domains.length} domains \u2014 ${result.gaps.totalEntries} documented / ${result.gaps.totalExtracted} extracted / ${result.gaps.totalGaps} undocumented`
|
|
5359
5387
|
);
|
|
5360
5388
|
if (result.iterations > 1) {
|
|
5361
5389
|
console.log(` Convergence: ${result.iterations} iterations`);
|
|
@@ -5363,6 +5391,15 @@ function createKnowledgePipelineCommand() {
|
|
|
5363
5391
|
if (result.remediations.length > 0) {
|
|
5364
5392
|
console.log(` Remediations: ${result.remediations.length} applied`);
|
|
5365
5393
|
}
|
|
5394
|
+
if (result.materialization) {
|
|
5395
|
+
const mat = result.materialization;
|
|
5396
|
+
console.log(
|
|
5397
|
+
` Materialization: ${mat.created.length} docs created, ${mat.skipped.length} skipped`
|
|
5398
|
+
);
|
|
5399
|
+
for (const doc of mat.created) {
|
|
5400
|
+
console.log(` ${chalk6.green("+")} ${doc.filePath}`);
|
|
5401
|
+
}
|
|
5402
|
+
}
|
|
5366
5403
|
if (opts.checkContradictions || result.contradictions.contradictions.length > 0) {
|
|
5367
5404
|
console.log("");
|
|
5368
5405
|
console.log(
|
|
@@ -5589,7 +5626,7 @@ function createMcpCommand() {
|
|
|
5589
5626
|
parseBudget
|
|
5590
5627
|
).action(async (opts) => {
|
|
5591
5628
|
const [{ startServer: startServer2, getToolDefinitions: getToolDefinitions2 }, { selectTier }] = await Promise.all([
|
|
5592
|
-
import("./mcp-
|
|
5629
|
+
import("./mcp-ICXMTAD3.js"),
|
|
5593
5630
|
import("./tool-tiers-7QGZ3FKY.js")
|
|
5594
5631
|
]);
|
|
5595
5632
|
if (opts.tools && opts.tools.length > 0) {
|
|
@@ -5655,7 +5692,7 @@ function registerBenchCommand(perf) {
|
|
|
5655
5692
|
perf.command("bench [glob]").description("Run benchmarks via vitest bench").action(async (glob2, _opts, cmd) => {
|
|
5656
5693
|
const globalOpts = cmd.optsWithGlobals();
|
|
5657
5694
|
const cwd = process.cwd();
|
|
5658
|
-
const { BenchmarkRunner } = await import("./dist-
|
|
5695
|
+
const { BenchmarkRunner } = await import("./dist-CPKL5Y2R.js");
|
|
5659
5696
|
const runner = new BenchmarkRunner();
|
|
5660
5697
|
const benchFiles = runner.discover(cwd, glob2);
|
|
5661
5698
|
if (benchFiles.length === 0) {
|
|
@@ -5719,7 +5756,7 @@ async function runBaselinesShow(globalOpts) {
|
|
|
5719
5756
|
}
|
|
5720
5757
|
async function runBaselinesUpdate(globalOpts) {
|
|
5721
5758
|
const cwd = process.cwd();
|
|
5722
|
-
const { BenchmarkRunner } = await import("./dist-
|
|
5759
|
+
const { BenchmarkRunner } = await import("./dist-CPKL5Y2R.js");
|
|
5723
5760
|
const runner = new BenchmarkRunner();
|
|
5724
5761
|
const manager = new BaselineManager(cwd);
|
|
5725
5762
|
logger.info("Running benchmarks to update baselines...");
|
|
@@ -5760,7 +5797,7 @@ function registerReportCommand(perf) {
|
|
|
5760
5797
|
perf.command("report").description("Full performance report with metrics, trends, and hotspots").action(async (_opts, cmd) => {
|
|
5761
5798
|
const globalOpts = cmd.optsWithGlobals();
|
|
5762
5799
|
const cwd = process.cwd();
|
|
5763
|
-
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-
|
|
5800
|
+
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-CPKL5Y2R.js");
|
|
5764
5801
|
const analyzer = new EntropyAnalyzer2({
|
|
5765
5802
|
rootDir: path41.resolve(cwd),
|
|
5766
5803
|
analyze: { complexity: true, coupling: true }
|
|
@@ -6151,7 +6188,7 @@ async function runPublishAnalyses(opts) {
|
|
|
6151
6188
|
const nameToExternalId = buildNameToExternalIdMap(projectPath);
|
|
6152
6189
|
if (!nameToExternalId) return process.exit(1);
|
|
6153
6190
|
const { AnalysisArchive } = await import("@harness-engineering/orchestrator");
|
|
6154
|
-
const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-
|
|
6191
|
+
const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-CPKL5Y2R.js");
|
|
6155
6192
|
const archive = new AnalysisArchive(path43.join(projectPath, ".harness", "analyses"));
|
|
6156
6193
|
const analyses = await archive.list();
|
|
6157
6194
|
if (analyses.length === 0) {
|
|
@@ -6677,7 +6714,7 @@ function ensureHooks(cwd) {
|
|
|
6677
6714
|
}
|
|
6678
6715
|
async function runInitialGraphScan(cwd) {
|
|
6679
6716
|
try {
|
|
6680
|
-
const { runScan: runScan2 } = await import("./scan-
|
|
6717
|
+
const { runScan: runScan2 } = await import("./scan-TX55R6QS.js");
|
|
6681
6718
|
const result = await runScan2(cwd);
|
|
6682
6719
|
return {
|
|
6683
6720
|
status: "pass",
|
|
@@ -8180,7 +8217,7 @@ async function runSyncAnalyses(opts) {
|
|
|
8180
8217
|
return;
|
|
8181
8218
|
}
|
|
8182
8219
|
const { AnalysisArchive, loadPublishedIndex: loadPublishedIndex2, savePublishedIndex: savePublishedIndex2 } = await import("@harness-engineering/orchestrator");
|
|
8183
|
-
const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-
|
|
8220
|
+
const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-CPKL5Y2R.js");
|
|
8184
8221
|
const adapter = new GitHubIssuesSyncAdapter2({ token, config: trackerConfig });
|
|
8185
8222
|
const archive = new AnalysisArchive(path59.join(projectPath, ".harness", "analyses"));
|
|
8186
8223
|
const publishedIndex = loadPublishedIndex2(projectPath);
|
|
@@ -8707,7 +8744,7 @@ async function runTraceability(options) {
|
|
|
8707
8744
|
const projectPath = process.cwd();
|
|
8708
8745
|
const store = await loadGraphStore(projectPath);
|
|
8709
8746
|
if (!store) handleNoStore(mode);
|
|
8710
|
-
const graphModule = await import("./dist-
|
|
8747
|
+
const graphModule = await import("./dist-BZS2XRLG.js");
|
|
8711
8748
|
const filterOptions = buildFilterOptions(options);
|
|
8712
8749
|
const results = graphModule.queryTraceability(store, filterOptions);
|
|
8713
8750
|
if (results.length === 0) handleEmptyResults(mode);
|
|
@@ -9121,7 +9158,7 @@ function createUpdateCommand() {
|
|
|
9121
9158
|
// src/commands/usage.ts
|
|
9122
9159
|
import { Command as Command83 } from "commander";
|
|
9123
9160
|
async function loadAndPriceRecords(cwd, includeClaudeSessions = false) {
|
|
9124
|
-
const { readCostRecords, loadPricingData, calculateCost, parseCCRecords } = await import("./dist-
|
|
9161
|
+
const { readCostRecords, loadPricingData, calculateCost, parseCCRecords } = await import("./dist-CPKL5Y2R.js");
|
|
9125
9162
|
const records = readCostRecords(cwd);
|
|
9126
9163
|
if (includeClaudeSessions) {
|
|
9127
9164
|
const ccRecords = parseCCRecords();
|
|
@@ -9214,7 +9251,7 @@ function registerDailyCommand(usage) {
|
|
|
9214
9251
|
else logger.info("No usage data found. Run some harness sessions first.");
|
|
9215
9252
|
return;
|
|
9216
9253
|
}
|
|
9217
|
-
const { aggregateByDay } = await import("./dist-
|
|
9254
|
+
const { aggregateByDay } = await import("./dist-CPKL5Y2R.js");
|
|
9218
9255
|
const limited = aggregateByDay(records).slice(0, days);
|
|
9219
9256
|
if (globalOpts.json) {
|
|
9220
9257
|
console.log(
|
|
@@ -9243,7 +9280,7 @@ function registerSessionsCommand(usage) {
|
|
|
9243
9280
|
}
|
|
9244
9281
|
return;
|
|
9245
9282
|
}
|
|
9246
|
-
const { aggregateBySession } = await import("./dist-
|
|
9283
|
+
const { aggregateBySession } = await import("./dist-CPKL5Y2R.js");
|
|
9247
9284
|
const sessionData = aggregateBySession(records);
|
|
9248
9285
|
const limited = sessionData.slice(0, limit);
|
|
9249
9286
|
if (globalOpts.json) {
|
|
@@ -9323,7 +9360,7 @@ function registerSessionCommand(usage) {
|
|
|
9323
9360
|
cwd,
|
|
9324
9361
|
globalOpts.includeClaudeSessions
|
|
9325
9362
|
);
|
|
9326
|
-
const { aggregateBySession } = await import("./dist-
|
|
9363
|
+
const { aggregateBySession } = await import("./dist-CPKL5Y2R.js");
|
|
9327
9364
|
const sessionData = aggregateBySession(records);
|
|
9328
9365
|
const match = sessionData.find((s) => s.sessionId === id);
|
|
9329
9366
|
if (!match) {
|
|
@@ -9358,7 +9395,7 @@ function registerLatestCommand(usage) {
|
|
|
9358
9395
|
}
|
|
9359
9396
|
return;
|
|
9360
9397
|
}
|
|
9361
|
-
const { aggregateBySession } = await import("./dist-
|
|
9398
|
+
const { aggregateBySession } = await import("./dist-CPKL5Y2R.js");
|
|
9362
9399
|
const sessionData = aggregateBySession(records);
|
|
9363
9400
|
const latest = sessionData[0];
|
|
9364
9401
|
if (!latest) {
|
|
@@ -9482,7 +9519,7 @@ function resolveValidateMode(globalOpts) {
|
|
|
9482
9519
|
return OutputMode.TEXT;
|
|
9483
9520
|
}
|
|
9484
9521
|
async function printCrossCheckWarnings(mode) {
|
|
9485
|
-
const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-
|
|
9522
|
+
const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-SPL3H4O5.js");
|
|
9486
9523
|
const cwd = process.cwd();
|
|
9487
9524
|
const crossResult = await runCrossCheck2({
|
|
9488
9525
|
specsDir: path63.join(cwd, "docs", "specs"),
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
findConfigFile,
|
|
9
9
|
loadConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-A4ETL34H.js";
|
|
11
11
|
import {
|
|
12
12
|
init_dist
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-IBTHD2UA.js";
|
|
14
14
|
import {
|
|
15
15
|
Ok
|
|
16
16
|
} from "./chunk-RL4VMEXL.js";
|
|
@@ -50,18 +50,18 @@ async function handleCheckDocs(input) {
|
|
|
50
50
|
const projectPath = sanitizePath(input.path);
|
|
51
51
|
const scope = input.scope ?? "coverage";
|
|
52
52
|
if (scope === "integrity") {
|
|
53
|
-
const { validateKnowledgeMap } = await import("./dist-
|
|
53
|
+
const { validateKnowledgeMap } = await import("./dist-CPKL5Y2R.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-CPKL5Y2R.js");
|
|
59
59
|
const domain2 = input.domain ?? "src";
|
|
60
|
-
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-
|
|
60
|
+
const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-QEI7SYOQ.js");
|
|
61
61
|
const store2 = await loadGraphStore2(projectPath);
|
|
62
62
|
let graphCoverage2;
|
|
63
63
|
if (store2) {
|
|
64
|
-
const { Assembler } = await import("./dist-
|
|
64
|
+
const { Assembler } = await import("./dist-BZS2XRLG.js");
|
|
65
65
|
const assembler = new Assembler(store2);
|
|
66
66
|
const report = assembler.checkCoverage();
|
|
67
67
|
graphCoverage2 = {
|
|
@@ -94,13 +94,13 @@ async function handleCheckDocs(input) {
|
|
|
94
94
|
}
|
|
95
95
|
return resultToMcpResponse(Ok({ coverage, integrity }));
|
|
96
96
|
}
|
|
97
|
-
const { checkDocCoverage } = await import("./dist-
|
|
97
|
+
const { checkDocCoverage } = await import("./dist-CPKL5Y2R.js");
|
|
98
98
|
const domain = input.domain ?? "src";
|
|
99
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
99
|
+
const { loadGraphStore } = await import("./graph-loader-QEI7SYOQ.js");
|
|
100
100
|
const store = await loadGraphStore(projectPath);
|
|
101
101
|
let graphCoverage;
|
|
102
102
|
if (store) {
|
|
103
|
-
const { Assembler } = await import("./dist-
|
|
103
|
+
const { Assembler } = await import("./dist-BZS2XRLG.js");
|
|
104
104
|
const assembler = new Assembler(store);
|
|
105
105
|
const report = assembler.checkCoverage();
|
|
106
106
|
graphCoverage = {
|