@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.
Files changed (149) hide show
  1. package/dist/agents/skills/claude-code/cleanup-dead-code/SKILL.md +3 -1
  2. package/dist/agents/skills/claude-code/detect-doc-drift/SKILL.md +3 -1
  3. package/dist/agents/skills/claude-code/harness-architecture-advisor/SKILL.md +4 -0
  4. package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +55 -24
  5. package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +16 -5
  6. package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +21 -6
  7. package/dist/agents/skills/claude-code/harness-codebase-cleanup/SKILL.md +2 -0
  8. package/dist/agents/skills/claude-code/harness-debugging/SKILL.md +13 -1
  9. package/dist/agents/skills/claude-code/harness-dependency-health/SKILL.md +4 -0
  10. package/dist/agents/skills/claude-code/harness-execution/SKILL.md +16 -6
  11. package/dist/agents/skills/claude-code/harness-impact-analysis/SKILL.md +2 -0
  12. package/dist/agents/skills/claude-code/harness-integration/SKILL.md +560 -0
  13. package/dist/agents/skills/claude-code/harness-integration/skill.yaml +65 -0
  14. package/dist/agents/skills/claude-code/harness-integrity/SKILL.md +2 -0
  15. package/dist/agents/skills/claude-code/harness-onboarding/SKILL.md +4 -0
  16. package/dist/agents/skills/claude-code/harness-perf/SKILL.md +9 -7
  17. package/dist/agents/skills/claude-code/harness-planning/SKILL.md +77 -10
  18. package/dist/agents/skills/claude-code/harness-refactoring/SKILL.md +13 -4
  19. package/dist/agents/skills/claude-code/harness-security-scan/SKILL.md +3 -1
  20. package/dist/agents/skills/claude-code/harness-soundness-review/SKILL.md +4 -0
  21. package/dist/agents/skills/claude-code/harness-tdd/SKILL.md +5 -2
  22. package/dist/agents/skills/claude-code/harness-verification/SKILL.md +4 -0
  23. package/dist/agents/skills/codex/cleanup-dead-code/SKILL.md +3 -1
  24. package/dist/agents/skills/codex/detect-doc-drift/SKILL.md +3 -1
  25. package/dist/agents/skills/codex/harness-architecture-advisor/SKILL.md +4 -0
  26. package/dist/agents/skills/codex/harness-autopilot/SKILL.md +55 -24
  27. package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +16 -5
  28. package/dist/agents/skills/codex/harness-code-review/SKILL.md +21 -6
  29. package/dist/agents/skills/codex/harness-codebase-cleanup/SKILL.md +2 -0
  30. package/dist/agents/skills/codex/harness-debugging/SKILL.md +13 -1
  31. package/dist/agents/skills/codex/harness-dependency-health/SKILL.md +4 -0
  32. package/dist/agents/skills/codex/harness-execution/SKILL.md +16 -6
  33. package/dist/agents/skills/codex/harness-impact-analysis/SKILL.md +2 -0
  34. package/dist/agents/skills/codex/harness-integration/SKILL.md +560 -0
  35. package/dist/agents/skills/codex/harness-integration/skill.yaml +65 -0
  36. package/dist/agents/skills/codex/harness-integrity/SKILL.md +2 -0
  37. package/dist/agents/skills/codex/harness-onboarding/SKILL.md +4 -0
  38. package/dist/agents/skills/codex/harness-perf/SKILL.md +9 -7
  39. package/dist/agents/skills/codex/harness-planning/SKILL.md +77 -10
  40. package/dist/agents/skills/codex/harness-refactoring/SKILL.md +13 -4
  41. package/dist/agents/skills/codex/harness-security-scan/SKILL.md +3 -1
  42. package/dist/agents/skills/codex/harness-soundness-review/SKILL.md +4 -0
  43. package/dist/agents/skills/codex/harness-tdd/SKILL.md +5 -2
  44. package/dist/agents/skills/codex/harness-verification/SKILL.md +4 -0
  45. package/dist/agents/skills/cursor/cleanup-dead-code/SKILL.md +3 -1
  46. package/dist/agents/skills/cursor/detect-doc-drift/SKILL.md +3 -1
  47. package/dist/agents/skills/cursor/harness-architecture-advisor/SKILL.md +4 -0
  48. package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +55 -24
  49. package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +16 -5
  50. package/dist/agents/skills/cursor/harness-code-review/SKILL.md +21 -6
  51. package/dist/agents/skills/cursor/harness-codebase-cleanup/SKILL.md +2 -0
  52. package/dist/agents/skills/cursor/harness-debugging/SKILL.md +13 -1
  53. package/dist/agents/skills/cursor/harness-dependency-health/SKILL.md +4 -0
  54. package/dist/agents/skills/cursor/harness-execution/SKILL.md +16 -6
  55. package/dist/agents/skills/cursor/harness-impact-analysis/SKILL.md +2 -0
  56. package/dist/agents/skills/cursor/harness-integration/SKILL.md +560 -0
  57. package/dist/agents/skills/cursor/harness-integration/skill.yaml +65 -0
  58. package/dist/agents/skills/cursor/harness-integrity/SKILL.md +2 -0
  59. package/dist/agents/skills/cursor/harness-onboarding/SKILL.md +4 -0
  60. package/dist/agents/skills/cursor/harness-perf/SKILL.md +9 -7
  61. package/dist/agents/skills/cursor/harness-planning/SKILL.md +77 -10
  62. package/dist/agents/skills/cursor/harness-refactoring/SKILL.md +13 -4
  63. package/dist/agents/skills/cursor/harness-security-scan/SKILL.md +3 -1
  64. package/dist/agents/skills/cursor/harness-soundness-review/SKILL.md +4 -0
  65. package/dist/agents/skills/cursor/harness-tdd/SKILL.md +5 -2
  66. package/dist/agents/skills/cursor/harness-verification/SKILL.md +4 -0
  67. package/dist/agents/skills/gemini-cli/cleanup-dead-code/SKILL.md +3 -1
  68. package/dist/agents/skills/gemini-cli/detect-doc-drift/SKILL.md +3 -1
  69. package/dist/agents/skills/gemini-cli/harness-architecture-advisor/SKILL.md +4 -0
  70. package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +55 -24
  71. package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +16 -5
  72. package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +21 -6
  73. package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/SKILL.md +2 -0
  74. package/dist/agents/skills/gemini-cli/harness-debugging/SKILL.md +13 -1
  75. package/dist/agents/skills/gemini-cli/harness-dependency-health/SKILL.md +4 -0
  76. package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +16 -6
  77. package/dist/agents/skills/gemini-cli/harness-impact-analysis/SKILL.md +2 -0
  78. package/dist/agents/skills/gemini-cli/harness-integration/SKILL.md +560 -0
  79. package/dist/agents/skills/gemini-cli/harness-integration/skill.yaml +65 -0
  80. package/dist/agents/skills/gemini-cli/harness-integrity/SKILL.md +2 -0
  81. package/dist/agents/skills/gemini-cli/harness-onboarding/SKILL.md +4 -0
  82. package/dist/agents/skills/gemini-cli/harness-perf/SKILL.md +9 -7
  83. package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +77 -10
  84. package/dist/agents/skills/gemini-cli/harness-refactoring/SKILL.md +13 -4
  85. package/dist/agents/skills/gemini-cli/harness-security-scan/SKILL.md +3 -1
  86. package/dist/agents/skills/gemini-cli/harness-soundness-review/SKILL.md +4 -0
  87. package/dist/agents/skills/gemini-cli/harness-tdd/SKILL.md +5 -2
  88. package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +4 -0
  89. package/dist/{agents-md-VI3HLR7E.js → agents-md-2RN666DE.js} +3 -3
  90. package/dist/{architecture-ZDDKEVID.js → architecture-ZR33YKJB.js} +4 -4
  91. package/dist/{assess-project-Y6W7YDUA.js → assess-project-LLWWEQEV.js} +1 -1
  92. package/dist/bin/harness-mcp.js +17 -16
  93. package/dist/bin/harness.js +27 -26
  94. package/dist/{business-knowledge-6RHYJOB3.js → business-knowledge-EISPR7FU.js} +1 -1
  95. package/dist/{check-phase-gate-CXR3VM22.js → check-phase-gate-ZVG56NT2.js} +4 -4
  96. package/dist/chunk-27AJKSQY.js +107 -0
  97. package/dist/{chunk-DBIX3X4H.js → chunk-2FOLD76X.js} +2 -2
  98. package/dist/{chunk-3AMQYWGT.js → chunk-3AJW7VQ3.js} +2 -2
  99. package/dist/{chunk-FUND5WJR.js → chunk-3XMOWLK3.js} +2 -2
  100. package/dist/{chunk-OLW7BJ5N.js → chunk-776JFSPK.js} +1 -1
  101. package/dist/{chunk-VKS3F46M.js → chunk-A4ETL34H.js} +7 -2
  102. package/dist/{chunk-JV4Y2U5F.js → chunk-BO4AJZRE.js} +1 -1
  103. package/dist/{chunk-WZ7UHPT3.js → chunk-BZZNYHRY.js} +9 -9
  104. package/dist/{chunk-ZN6ROTYP.js → chunk-C7RPQWBG.js} +1 -1
  105. package/dist/{chunk-RAVD7QLY.js → chunk-CJYNZMOP.js} +8 -8
  106. package/dist/{chunk-PNNFCVW4.js → chunk-EGRQHLDM.js} +5 -5
  107. package/dist/{chunk-N6B6RKQQ.js → chunk-EICASBYP.js} +1 -1
  108. package/dist/{chunk-K56DTX7G.js → chunk-F3Y64VNF.js} +6 -6
  109. package/dist/{chunk-ORNEK65Y.js → chunk-FUS4OOGC.js} +1 -1
  110. package/dist/{chunk-2FPUPRCY.js → chunk-GAIOIINV.js} +594 -127
  111. package/dist/{chunk-YC4EYIER.js → chunk-IBTHD2UA.js} +132 -77
  112. package/dist/{chunk-RC5ZY3EV.js → chunk-IOW3MW2K.js} +2 -2
  113. package/dist/{chunk-B66LRB5M.js → chunk-L3Y7L4EG.js} +1 -1
  114. package/dist/{chunk-BK4DJIIY.js → chunk-MGPVA2EM.js} +27 -4
  115. package/dist/{chunk-NY7DTZ6K.js → chunk-Q5DKIL46.js} +3 -3
  116. package/dist/{chunk-Q3ZLVMQM.js → chunk-QTXW5TIS.js} +1 -1
  117. package/dist/{chunk-AMRC4FU2.js → chunk-SA57FVGX.js} +92 -55
  118. package/dist/{chunk-TY2ESLVL.js → chunk-SDDQPMZK.js} +1 -1
  119. package/dist/{chunk-7GY6WNEI.js → chunk-SDPHFDQS.js} +1 -1
  120. package/dist/{chunk-56A6OXVA.js → chunk-T7UZOJF4.js} +9 -9
  121. package/dist/{chunk-2BPPS6YQ.js → chunk-TCMVZ3B7.js} +457 -362
  122. package/dist/{chunk-TSVYBDDE.js → chunk-YZH4I4JO.js} +1 -1
  123. package/dist/{ci-workflow-EW37KVPS.js → ci-workflow-JFOL4YWW.js} +3 -3
  124. package/dist/{dist-NCNAXUFD.js → dist-BZS2XRLG.js} +5 -1
  125. package/dist/{dist-CJDGASPP.js → dist-CPKL5Y2R.js} +2 -2
  126. package/dist/{docs-4XI2FQW2.js → docs-FUTRJQHA.js} +4 -4
  127. package/dist/{engine-4L4CDTHU.js → engine-FB3HCNVT.js} +3 -3
  128. package/dist/{entropy-PBYSIQYS.js → entropy-FIEE4YDA.js} +3 -3
  129. package/dist/{feedback-OTIFW5MK.js → feedback-7EC4T6XG.js} +1 -1
  130. package/dist/{generate-agent-definitions-CZGUXIIN.js → generate-agent-definitions-FOSFADNR.js} +4 -4
  131. package/dist/{graph-loader-RDXSEBD7.js → graph-loader-QEI7SYOQ.js} +1 -1
  132. package/dist/hooks/adoption-tracker.js +36 -8
  133. package/dist/hooks/sentinel-pre.js +3 -2
  134. package/dist/hooks/telemetry-reporter.js +34 -15
  135. package/dist/index-builder-3AOQ3ZII.js +13 -0
  136. package/dist/index.d.ts +15 -0
  137. package/dist/index.js +29 -28
  138. package/dist/{loader-UZOXCWFC.js → loader-HXUOBTYA.js} +3 -3
  139. package/dist/{mcp-GWVVV6LH.js → mcp-ICXMTAD3.js} +17 -16
  140. package/dist/{performance-5UQPP3XX.js → performance-TYXBCTR7.js} +4 -4
  141. package/dist/{review-pipeline-65V4EO6O.js → review-pipeline-B4WPU6BQ.js} +3 -3
  142. package/dist/{runtime-PXX7HNB3.js → runtime-HQQNOARD.js} +3 -3
  143. package/dist/{scan-WM7XDUF7.js → scan-TX55R6QS.js} +1 -1
  144. package/dist/{security-CAYDRZIZ.js → security-25VFLIAO.js} +1 -1
  145. package/dist/templates/orchestrator/harness.orchestrator.md +18 -8
  146. package/dist/{validate-CWGXR7QM.js → validate-EAVGKZQB.js} +4 -4
  147. package/dist/{validate-cross-check-BKCNLZYG.js → validate-cross-check-SPL3H4O5.js} +3 -3
  148. package/package.json +13 -5
  149. 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-ZN6ROTYP.js";
6
+ } from "./chunk-C7RPQWBG.js";
4
7
  import {
5
8
  generateCIWorkflow
6
- } from "./chunk-ORNEK65Y.js";
9
+ } from "./chunk-FUS4OOGC.js";
7
10
  import {
8
11
  TemplateEngine
9
- } from "./chunk-B66LRB5M.js";
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-FUND5WJR.js";
31
+ } from "./chunk-3XMOWLK3.js";
32
32
  import {
33
33
  createGenerateAgentDefinitionsCommand,
34
34
  generateAgentDefinitions
35
- } from "./chunk-TY2ESLVL.js";
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-JV4Y2U5F.js";
42
+ } from "./chunk-BO4AJZRE.js";
43
43
  import {
44
44
  createScanCommand
45
- } from "./chunk-Q3ZLVMQM.js";
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-2BPPS6YQ.js";
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-VKS3F46M.js";
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-YC4EYIER.js";
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-CJDGASPP.js");
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-CJDGASPP.js");
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-CJDGASPP.js");
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-NCNAXUFD.js");
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-NCNAXUFD.js");
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-NCNAXUFD.js");
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
- } = await import("./dist-NCNAXUFD.js");
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-NCNAXUFD.js");
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-NCNAXUFD.js");
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
- " - 8 resources for project context, skills, rules, learnings, state, and graph data"
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 = globalOpts.cwd ?? process.cwd();
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-NCNAXUFD.js");
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 ProviderClass = intelligence.AnthropicAnalysisProvider;
5305
- pipelineOpts.analysisProvider = new ProviderClass();
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, ${result.gaps.totalEntries} total entries`
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-GWVVV6LH.js"),
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-CJDGASPP.js");
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-CJDGASPP.js");
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-CJDGASPP.js");
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-CJDGASPP.js");
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-WM7XDUF7.js");
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-CJDGASPP.js");
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-NCNAXUFD.js");
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-CJDGASPP.js");
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-CJDGASPP.js");
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-CJDGASPP.js");
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-CJDGASPP.js");
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-CJDGASPP.js");
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-BKCNLZYG.js");
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"),
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  listPersonas,
6
6
  loadPersona
7
- } from "./chunk-JV4Y2U5F.js";
7
+ } from "./chunk-BO4AJZRE.js";
8
8
  import {
9
9
  GENERATED_HEADER_AGENT,
10
10
  VALID_PLATFORMS,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  init_dist
3
- } from "./chunk-YC4EYIER.js";
3
+ } from "./chunk-IBTHD2UA.js";
4
4
  import {
5
5
  Ok
6
6
  } from "./chunk-RL4VMEXL.js";
@@ -7,10 +7,10 @@ import {
7
7
  import {
8
8
  findConfigFile,
9
9
  loadConfig
10
- } from "./chunk-VKS3F46M.js";
10
+ } from "./chunk-A4ETL34H.js";
11
11
  import {
12
12
  init_dist
13
- } from "./chunk-YC4EYIER.js";
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-CJDGASPP.js");
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-CJDGASPP.js");
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-RDXSEBD7.js");
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-NCNAXUFD.js");
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-CJDGASPP.js");
97
+ const { checkDocCoverage } = await import("./dist-CPKL5Y2R.js");
98
98
  const domain = input.domain ?? "src";
99
- const { loadGraphStore } = await import("./graph-loader-RDXSEBD7.js");
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-NCNAXUFD.js");
103
+ const { Assembler } = await import("./dist-BZS2XRLG.js");
104
104
  const assembler = new Assembler(store);
105
105
  const report = assembler.checkCoverage();
106
106
  graphCoverage = {