@harness-engineering/cli 2.0.0 → 2.1.1

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 (95) hide show
  1. package/dist/agents/skills/claude-code/harness-compound/SKILL.md +153 -0
  2. package/dist/agents/skills/claude-code/harness-compound/skill.yaml +60 -0
  3. package/dist/agents/skills/claude-code/harness-knowledge-pipeline/SKILL.md +12 -1
  4. package/dist/agents/skills/claude-code/harness-observability/SKILL.md +2 -0
  5. package/dist/agents/skills/claude-code/harness-pulse/SKILL.md +138 -0
  6. package/dist/agents/skills/claude-code/harness-pulse/references/interview.md +77 -0
  7. package/dist/agents/skills/claude-code/harness-pulse/skill.yaml +61 -0
  8. package/dist/agents/skills/claude-code/harness-roadmap-pilot/SKILL.md +25 -1
  9. package/dist/agents/skills/codex/harness-compound/SKILL.md +153 -0
  10. package/dist/agents/skills/codex/harness-compound/skill.yaml +60 -0
  11. package/dist/agents/skills/codex/harness-knowledge-pipeline/SKILL.md +12 -1
  12. package/dist/agents/skills/codex/harness-observability/SKILL.md +2 -0
  13. package/dist/agents/skills/codex/harness-pulse/SKILL.md +138 -0
  14. package/dist/agents/skills/codex/harness-pulse/references/interview.md +77 -0
  15. package/dist/agents/skills/codex/harness-pulse/skill.yaml +61 -0
  16. package/dist/agents/skills/codex/harness-roadmap-pilot/SKILL.md +25 -1
  17. package/dist/agents/skills/cursor/harness-compound/SKILL.md +153 -0
  18. package/dist/agents/skills/cursor/harness-compound/skill.yaml +60 -0
  19. package/dist/agents/skills/cursor/harness-knowledge-pipeline/SKILL.md +12 -1
  20. package/dist/agents/skills/cursor/harness-observability/SKILL.md +2 -0
  21. package/dist/agents/skills/cursor/harness-pulse/SKILL.md +138 -0
  22. package/dist/agents/skills/cursor/harness-pulse/references/interview.md +77 -0
  23. package/dist/agents/skills/cursor/harness-pulse/skill.yaml +61 -0
  24. package/dist/agents/skills/cursor/harness-roadmap-pilot/SKILL.md +25 -1
  25. package/dist/agents/skills/gemini-cli/harness-compound/SKILL.md +153 -0
  26. package/dist/agents/skills/gemini-cli/harness-compound/skill.yaml +60 -0
  27. package/dist/agents/skills/gemini-cli/harness-knowledge-pipeline/SKILL.md +12 -1
  28. package/dist/agents/skills/gemini-cli/harness-observability/SKILL.md +2 -0
  29. package/dist/agents/skills/gemini-cli/harness-pulse/SKILL.md +138 -0
  30. package/dist/agents/skills/gemini-cli/harness-pulse/references/interview.md +77 -0
  31. package/dist/agents/skills/gemini-cli/harness-pulse/skill.yaml +61 -0
  32. package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/SKILL.md +25 -1
  33. package/dist/agents/skills/package.json +1 -0
  34. package/dist/agents/skills/tests/fixtures/harness-compound/bug-track-fixture/input.json +10 -0
  35. package/dist/agents/skills/tests/fixtures/harness-compound/duplicate-detection-fixture/docs/solutions/bug-track/integration-issues/stalled-lease-cleanup.md +28 -0
  36. package/dist/agents/skills/tests/fixtures/harness-compound/duplicate-detection-fixture/expected.json +4 -0
  37. package/dist/agents/skills/tests/fixtures/harness-compound/duplicate-detection-fixture/input.json +10 -0
  38. package/dist/agents/skills/tests/fixtures/harness-compound/knowledge-track-fixture/input.json +10 -0
  39. package/dist/agents/skills/tests/harness-compound.test.ts +86 -0
  40. package/dist/{agents-md-6SAMHE7H.js → agents-md-L4X4MOWT.js} +3 -3
  41. package/dist/{architecture-5YR52NSV.js → architecture-WJRIYQ45.js} +4 -4
  42. package/dist/{assess-project-5X7TYQFM.js → assess-project-PHC2HO3V.js} +1 -1
  43. package/dist/bin/harness-mcp.js +16 -15
  44. package/dist/bin/harness.js +26 -25
  45. package/dist/{check-phase-gate-PLV2VDOL.js → check-phase-gate-646KY67H.js} +5 -4
  46. package/dist/{chunk-ZYLBIDLE.js → chunk-224XKVLP.js} +1 -1
  47. package/dist/{chunk-ELJ2MXMO.js → chunk-2QPHCR22.js} +9 -9
  48. package/dist/{chunk-SITVRO7K.js → chunk-2ZURBWEV.js} +9 -9
  49. package/dist/{chunk-2IBXUG6J.js → chunk-36X7TRUI.js} +2 -2
  50. package/dist/{chunk-6L2BU4BP.js → chunk-4HKVZO7R.js} +1 -1
  51. package/dist/{chunk-74YADB7T.js → chunk-7XQYOXTB.js} +96 -94
  52. package/dist/{chunk-S2WB4LE7.js → chunk-BMM3GXV6.js} +384 -28
  53. package/dist/{chunk-BYS3TQOO.js → chunk-CPYL6LJR.js} +1 -1
  54. package/dist/{chunk-QDRBWVVY.js → chunk-E7W3YOXL.js} +2 -2
  55. package/dist/{chunk-MTPHNOJW.js → chunk-FNCJ3UCU.js} +507 -244
  56. package/dist/{chunk-RYDPFIJY.js → chunk-JPWICLXQ.js} +1 -1
  57. package/dist/{chunk-RFYF7TJS.js → chunk-K4WRQTEF.js} +1835 -805
  58. package/dist/{chunk-DXGI7DL3.js → chunk-KTWKW6KJ.js} +1 -1
  59. package/dist/{chunk-JNKALGRM.js → chunk-KV7A5OZT.js} +5 -5
  60. package/dist/{chunk-KJD4J54I.js → chunk-LO7ZLV7S.js} +6 -1
  61. package/dist/{chunk-XHOGGZS7.js → chunk-QTUPHTTK.js} +1 -1
  62. package/dist/{chunk-R2CBBZA6.js → chunk-SVC7THFK.js} +1 -1
  63. package/dist/{chunk-PFM3BVVU.js → chunk-TNZYQTEE.js} +1 -1
  64. package/dist/{chunk-HT7HYYGT.js → chunk-VJQLUS5I.js} +1 -1
  65. package/dist/{chunk-6GXSJGSW.js → chunk-VKDBM3RX.js} +3 -3
  66. package/dist/{chunk-JZST2WZS.js → chunk-W4AFGFFB.js} +3 -3
  67. package/dist/{chunk-YJE23GRZ.js → chunk-YG4ZBGEH.js} +39 -5
  68. package/dist/{chunk-5ME3WG3G.js → chunk-YLOAQZLA.js} +5 -5
  69. package/dist/{chunk-7JQ7HLM4.js → chunk-YLTRFZAT.js} +8 -8
  70. package/dist/{chunk-BFBZK6BC.js → chunk-YWD6WXXM.js} +6 -6
  71. package/dist/chunk-ZCZD7FHU.js +16 -0
  72. package/dist/{ci-workflow-7T2XKB3P.js → ci-workflow-TOS5X527.js} +3 -3
  73. package/dist/{dist-77VNTHWV.js → dist-6RT2AVYU.js} +78 -2
  74. package/dist/{dist-42AYXCAK.js → dist-D27LJR2T.js} +7 -1
  75. package/dist/{docs-MSIJ6SDO.js → docs-HOJMQYDZ.js} +5 -4
  76. package/dist/{engine-F4P5RBE4.js → engine-D6UYH6DB.js} +3 -3
  77. package/dist/{entropy-GSUTIORR.js → entropy-LZ4IDGZR.js} +3 -3
  78. package/dist/{feedback-NST6T4HI.js → feedback-WV7EQVK7.js} +1 -1
  79. package/dist/{generate-agent-definitions-BOUGQIPA.js → generate-agent-definitions-ZHFFS6YG.js} +4 -4
  80. package/dist/glob-helper-FZPPTGJN.js +62 -0
  81. package/dist/{graph-loader-IAUPGLRV.js → graph-loader-5MKHAJJF.js} +1 -1
  82. package/dist/index.d.ts +44 -6
  83. package/dist/index.js +26 -25
  84. package/dist/{loader-6QTJC7IN.js → loader-Z23JTXIZ.js} +3 -3
  85. package/dist/{mcp-QFBGTUX6.js → mcp-QFZDPFNP.js} +16 -15
  86. package/dist/{performance-B2NAAIE5.js → performance-7ATLHTQU.js} +5 -4
  87. package/dist/{review-pipeline-6EYMBS6B.js → review-pipeline-COBGGXHJ.js} +3 -3
  88. package/dist/{runtime-VFZK6BCZ.js → runtime-KCBNQUXK.js} +3 -3
  89. package/dist/{scan-DB6FNYGG.js → scan-BIJYHOE7.js} +2 -1
  90. package/dist/{security-HRNTYHPM.js → security-MAPRIFQT.js} +1 -1
  91. package/dist/templates/orchestrator/harness.orchestrator.md +9 -1
  92. package/dist/{validate-YEMAFWJE.js → validate-74XTQR7Q.js} +4 -4
  93. package/dist/{validate-cross-check-DGHTJFVH.js → validate-cross-check-MI5MZ7MB.js} +3 -3
  94. package/package.json +7 -6
  95. package/dist/glob-helper-VCQXK5XY.js +0 -54
package/dist/index.d.ts CHANGED
@@ -48,6 +48,15 @@ interface GraphStatusResult {
48
48
  lastScanTimestamp?: string;
49
49
  connectorSyncStatus?: Record<string, string>;
50
50
  }
51
+ /**
52
+ * Reports graph statistics. Reads `metadata.json` only — it carries node/edge
53
+ * counts and per-type breakdowns (since schema v2). This avoids the streaming
54
+ * graph.json read entirely, so `harness graph status` returns instantly even on
55
+ * multi-GB graphs that would otherwise take seconds (or trip pre-v2 callers).
56
+ *
57
+ * Falls back to a full graph load only when the metadata file lacks `nodesByType`,
58
+ * which happens for graphs written before that field was added.
59
+ */
51
60
  declare function runGraphStatus(projectPath: string): Promise<GraphStatusResult>;
52
61
 
53
62
  declare function runGraphExport(projectPath: string, format: string): Promise<string>;
@@ -389,6 +398,23 @@ declare const HarnessConfigSchema: z.ZodObject<{
389
398
  timeout?: number | undefined;
390
399
  skills?: string[] | undefined;
391
400
  }>>;
401
+ /** Source-file ingestion controls (skip-dirs, exclude patterns, gitignore handling) */
402
+ ingest: z.ZodOptional<z.ZodObject<{
403
+ skipDirs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
404
+ additionalSkipDirs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
405
+ excludePatterns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
406
+ respectGitignore: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
407
+ }, "strip", z.ZodTypeAny, {
408
+ respectGitignore: boolean;
409
+ skipDirs?: string[] | undefined;
410
+ additionalSkipDirs?: string[] | undefined;
411
+ excludePatterns?: string[] | undefined;
412
+ }, {
413
+ skipDirs?: string[] | undefined;
414
+ additionalSkipDirs?: string[] | undefined;
415
+ excludePatterns?: string[] | undefined;
416
+ respectGitignore?: boolean | undefined;
417
+ }>>;
392
418
  /** Drift and stale code management settings */
393
419
  entropy: z.ZodOptional<z.ZodObject<{
394
420
  /** Explicit entry points for reachability analysis (overrides auto-detection) */
@@ -402,8 +428,8 @@ declare const HarnessConfigSchema: z.ZodObject<{
402
428
  autoFix: boolean;
403
429
  entryPoints?: string[] | undefined;
404
430
  }, {
405
- entryPoints?: string[] | undefined;
406
431
  excludePatterns?: string[] | undefined;
432
+ entryPoints?: string[] | undefined;
407
433
  autoFix?: boolean | undefined;
408
434
  }>>;
409
435
  /** Security scanning configuration */
@@ -752,14 +778,14 @@ declare const HarnessConfigSchema: z.ZodObject<{
752
778
  thresholds: z.ZodDefault<z.ZodRecord<z.ZodEnum<["circular-deps", "layer-violations", "complexity", "coupling", "forbidden-imports", "module-size", "dependency-depth"]>, z.ZodUnion<[z.ZodNumber, z.ZodRecord<z.ZodString, z.ZodNumber>]>>>;
753
779
  modules: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodEnum<["circular-deps", "layer-violations", "complexity", "coupling", "forbidden-imports", "module-size", "dependency-depth"]>, z.ZodUnion<[z.ZodNumber, z.ZodRecord<z.ZodString, z.ZodNumber>]>>>>;
754
780
  }, "strip", z.ZodTypeAny, {
781
+ enabled: boolean;
755
782
  thresholds: Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>;
756
783
  modules: Record<string, Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>>;
757
- enabled: boolean;
758
784
  baselinePath: string;
759
785
  }, {
786
+ enabled?: boolean | undefined;
760
787
  thresholds?: Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>> | undefined;
761
788
  modules?: Record<string, Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>> | undefined;
762
- enabled?: boolean | undefined;
763
789
  baselinePath?: string | undefined;
764
790
  }>>;
765
791
  /** Skill loading, suggestion, and tier override settings */
@@ -919,6 +945,12 @@ declare const HarnessConfigSchema: z.ZodObject<{
919
945
  timeout: number;
920
946
  skills?: string[] | undefined;
921
947
  } | undefined;
948
+ ingest?: {
949
+ respectGitignore: boolean;
950
+ skipDirs?: string[] | undefined;
951
+ additionalSkipDirs?: string[] | undefined;
952
+ excludePatterns?: string[] | undefined;
953
+ } | undefined;
922
954
  entropy?: {
923
955
  excludePatterns: string[];
924
956
  autoFix: boolean;
@@ -1007,9 +1039,9 @@ declare const HarnessConfigSchema: z.ZodObject<{
1007
1039
  dismissed: string[];
1008
1040
  } | undefined;
1009
1041
  architecture?: {
1042
+ enabled: boolean;
1010
1043
  thresholds: Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>;
1011
1044
  modules: Record<string, Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>>;
1012
- enabled: boolean;
1013
1045
  baselinePath: string;
1014
1046
  } | undefined;
1015
1047
  traceability?: {
@@ -1071,9 +1103,15 @@ declare const HarnessConfigSchema: z.ZodObject<{
1071
1103
  timeout?: number | undefined;
1072
1104
  skills?: string[] | undefined;
1073
1105
  } | undefined;
1106
+ ingest?: {
1107
+ skipDirs?: string[] | undefined;
1108
+ additionalSkipDirs?: string[] | undefined;
1109
+ excludePatterns?: string[] | undefined;
1110
+ respectGitignore?: boolean | undefined;
1111
+ } | undefined;
1074
1112
  entropy?: {
1075
- entryPoints?: string[] | undefined;
1076
1113
  excludePatterns?: string[] | undefined;
1114
+ entryPoints?: string[] | undefined;
1077
1115
  autoFix?: boolean | undefined;
1078
1116
  } | undefined;
1079
1117
  security?: z.objectInputType<{
@@ -1159,9 +1197,9 @@ declare const HarnessConfigSchema: z.ZodObject<{
1159
1197
  dismissed?: string[] | undefined;
1160
1198
  } | undefined;
1161
1199
  architecture?: {
1200
+ enabled?: boolean | undefined;
1162
1201
  thresholds?: Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>> | undefined;
1163
1202
  modules?: Record<string, Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>> | undefined;
1164
- enabled?: boolean | undefined;
1165
1203
  baselinePath?: string | undefined;
1166
1204
  } | undefined;
1167
1205
  traceability?: {
package/dist/index.js CHANGED
@@ -12,22 +12,22 @@ import {
12
12
  runSnapshotCapture,
13
13
  runUninstall,
14
14
  runUninstallConstraints
15
- } from "./chunk-MTPHNOJW.js";
15
+ } from "./chunk-FNCJ3UCU.js";
16
16
  import {
17
17
  generateRuntime
18
- } from "./chunk-PFM3BVVU.js";
18
+ } from "./chunk-TNZYQTEE.js";
19
19
  import {
20
20
  generateAgentsMd
21
- } from "./chunk-6L2BU4BP.js";
21
+ } from "./chunk-4HKVZO7R.js";
22
22
  import {
23
23
  generateCIWorkflow
24
- } from "./chunk-RYDPFIJY.js";
24
+ } from "./chunk-JPWICLXQ.js";
25
25
  import {
26
26
  runCrossCheck
27
- } from "./chunk-XHOGGZS7.js";
27
+ } from "./chunk-QTUPHTTK.js";
28
28
  import {
29
29
  TemplateEngine
30
- } from "./chunk-ZYLBIDLE.js";
30
+ } from "./chunk-224XKVLP.js";
31
31
  import "./chunk-CQ553GZO.js";
32
32
  import {
33
33
  detectTrigger,
@@ -43,7 +43,7 @@ import {
43
43
  OutputFormatter,
44
44
  OutputMode,
45
45
  runCheckPhaseGate
46
- } from "./chunk-QDRBWVVY.js";
46
+ } from "./chunk-E7W3YOXL.js";
47
47
  import {
48
48
  AGENT_DESCRIPTIONS,
49
49
  DEFAULT_TOOLS,
@@ -52,33 +52,33 @@ import {
52
52
  generateAgentDefinitions,
53
53
  renderClaudeCodeAgent,
54
54
  renderGeminiAgent
55
- } from "./chunk-R2CBBZA6.js";
55
+ } from "./chunk-SVC7THFK.js";
56
56
  import "./chunk-KET4QQZB.js";
57
57
  import {
58
58
  listPersonas,
59
59
  loadPersona
60
- } from "./chunk-HT7HYYGT.js";
60
+ } from "./chunk-VJQLUS5I.js";
61
61
  import {
62
62
  runScan
63
- } from "./chunk-YJE23GRZ.js";
63
+ } from "./chunk-YG4ZBGEH.js";
64
64
  import {
65
65
  createHarnessServer,
66
66
  generateSlashCommands,
67
67
  getToolDefinitions,
68
68
  startServer
69
- } from "./chunk-74YADB7T.js";
70
- import "./chunk-2IBXUG6J.js";
71
- import "./chunk-BFBZK6BC.js";
69
+ } from "./chunk-7XQYOXTB.js";
70
+ import "./chunk-36X7TRUI.js";
71
+ import "./chunk-YWD6WXXM.js";
72
72
  import "./chunk-IOW3MW2K.js";
73
- import "./chunk-SITVRO7K.js";
74
- import "./chunk-JZST2WZS.js";
75
- import "./chunk-DXGI7DL3.js";
76
- import "./chunk-6GXSJGSW.js";
77
- import "./chunk-5ME3WG3G.js";
78
- import "./chunk-BYS3TQOO.js";
79
- import "./chunk-ELJ2MXMO.js";
80
- import "./chunk-JNKALGRM.js";
81
- import "./chunk-7JQ7HLM4.js";
73
+ import "./chunk-2ZURBWEV.js";
74
+ import "./chunk-W4AFGFFB.js";
75
+ import "./chunk-KTWKW6KJ.js";
76
+ import "./chunk-VKDBM3RX.js";
77
+ import "./chunk-YLOAQZLA.js";
78
+ import "./chunk-CPYL6LJR.js";
79
+ import "./chunk-2QPHCR22.js";
80
+ import "./chunk-KV7A5OZT.js";
81
+ import "./chunk-YLTRFZAT.js";
82
82
  import "./chunk-EPUKTTJZ.js";
83
83
  import "./chunk-W6Y7ZW3Y.js";
84
84
  import "./chunk-27AJKSQY.js";
@@ -86,13 +86,14 @@ import {
86
86
  findConfigFile,
87
87
  loadConfig,
88
88
  resolveConfig
89
- } from "./chunk-KJD4J54I.js";
89
+ } from "./chunk-LO7ZLV7S.js";
90
90
  import "./chunk-3ISINLYT.js";
91
91
  import "./chunk-6B6UN6SG.js";
92
+ import "./chunk-ZCZD7FHU.js";
92
93
  import "./chunk-BM3PWGXQ.js";
93
- import "./chunk-RFYF7TJS.js";
94
+ import "./chunk-K4WRQTEF.js";
94
95
  import "./chunk-RL4VMEXL.js";
95
- import "./chunk-S2WB4LE7.js";
96
+ import "./chunk-BMM3GXV6.js";
96
97
  import {
97
98
  generateSkillFiles
98
99
  } from "./chunk-ZP5E7YET.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  listPersonas,
3
3
  loadPersona
4
- } from "./chunk-HT7HYYGT.js";
5
- import "./chunk-RFYF7TJS.js";
4
+ } from "./chunk-VJQLUS5I.js";
5
+ import "./chunk-K4WRQTEF.js";
6
6
  import "./chunk-RL4VMEXL.js";
7
- import "./chunk-S2WB4LE7.js";
7
+ import "./chunk-BMM3GXV6.js";
8
8
  import "./chunk-KFQGP6VL.js";
9
9
  export {
10
10
  listPersonas,
@@ -2,32 +2,33 @@ import {
2
2
  createHarnessServer,
3
3
  getToolDefinitions,
4
4
  startServer
5
- } from "./chunk-74YADB7T.js";
6
- import "./chunk-2IBXUG6J.js";
7
- import "./chunk-BFBZK6BC.js";
5
+ } from "./chunk-7XQYOXTB.js";
6
+ import "./chunk-36X7TRUI.js";
7
+ import "./chunk-YWD6WXXM.js";
8
8
  import "./chunk-IOW3MW2K.js";
9
- import "./chunk-SITVRO7K.js";
10
- import "./chunk-JZST2WZS.js";
11
- import "./chunk-DXGI7DL3.js";
12
- import "./chunk-6GXSJGSW.js";
13
- import "./chunk-5ME3WG3G.js";
9
+ import "./chunk-2ZURBWEV.js";
10
+ import "./chunk-W4AFGFFB.js";
11
+ import "./chunk-KTWKW6KJ.js";
12
+ import "./chunk-VKDBM3RX.js";
13
+ import "./chunk-YLOAQZLA.js";
14
14
  import {
15
15
  resolveProjectConfig
16
- } from "./chunk-BYS3TQOO.js";
17
- import "./chunk-ELJ2MXMO.js";
18
- import "./chunk-JNKALGRM.js";
19
- import "./chunk-7JQ7HLM4.js";
16
+ } from "./chunk-CPYL6LJR.js";
17
+ import "./chunk-2QPHCR22.js";
18
+ import "./chunk-KV7A5OZT.js";
19
+ import "./chunk-YLTRFZAT.js";
20
20
  import {
21
21
  resultToMcpResponse
22
22
  } from "./chunk-EPUKTTJZ.js";
23
23
  import "./chunk-W6Y7ZW3Y.js";
24
24
  import "./chunk-27AJKSQY.js";
25
- import "./chunk-KJD4J54I.js";
25
+ import "./chunk-LO7ZLV7S.js";
26
26
  import "./chunk-3ISINLYT.js";
27
27
  import "./chunk-6B6UN6SG.js";
28
- import "./chunk-RFYF7TJS.js";
28
+ import "./chunk-ZCZD7FHU.js";
29
+ import "./chunk-K4WRQTEF.js";
29
30
  import "./chunk-RL4VMEXL.js";
30
- import "./chunk-S2WB4LE7.js";
31
+ import "./chunk-BMM3GXV6.js";
31
32
  import "./chunk-HIK6OEUF.js";
32
33
  import "./chunk-EBJQ6N4M.js";
33
34
  import "./chunk-3WGJMBKH.js";
@@ -7,13 +7,14 @@ import {
7
7
  handleGetPerfBaselines,
8
8
  handleUpdatePerfBaselines,
9
9
  updatePerfBaselinesDefinition
10
- } from "./chunk-7JQ7HLM4.js";
10
+ } from "./chunk-YLTRFZAT.js";
11
11
  import "./chunk-EPUKTTJZ.js";
12
12
  import "./chunk-W6Y7ZW3Y.js";
13
- import "./chunk-KJD4J54I.js";
14
- import "./chunk-RFYF7TJS.js";
13
+ import "./chunk-LO7ZLV7S.js";
14
+ import "./chunk-ZCZD7FHU.js";
15
+ import "./chunk-K4WRQTEF.js";
15
16
  import "./chunk-RL4VMEXL.js";
16
- import "./chunk-S2WB4LE7.js";
17
+ import "./chunk-BMM3GXV6.js";
17
18
  import "./chunk-3WGJMBKH.js";
18
19
  import "./chunk-KFQGP6VL.js";
19
20
  export {
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  handleRunCodeReview,
3
3
  runCodeReviewDefinition
4
- } from "./chunk-2IBXUG6J.js";
4
+ } from "./chunk-36X7TRUI.js";
5
5
  import "./chunk-W6Y7ZW3Y.js";
6
- import "./chunk-RFYF7TJS.js";
6
+ import "./chunk-K4WRQTEF.js";
7
7
  import "./chunk-RL4VMEXL.js";
8
- import "./chunk-S2WB4LE7.js";
8
+ import "./chunk-BMM3GXV6.js";
9
9
  import "./chunk-KFQGP6VL.js";
10
10
  export {
11
11
  handleRunCodeReview,
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  generateRuntime
3
- } from "./chunk-PFM3BVVU.js";
3
+ } from "./chunk-TNZYQTEE.js";
4
4
  import "./chunk-KET4QQZB.js";
5
- import "./chunk-RFYF7TJS.js";
5
+ import "./chunk-K4WRQTEF.js";
6
6
  import "./chunk-RL4VMEXL.js";
7
- import "./chunk-S2WB4LE7.js";
7
+ import "./chunk-BMM3GXV6.js";
8
8
  import "./chunk-KFQGP6VL.js";
9
9
  export {
10
10
  generateRuntime
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  createScanCommand,
3
3
  runScan
4
- } from "./chunk-YJE23GRZ.js";
4
+ } from "./chunk-YG4ZBGEH.js";
5
+ import "./chunk-ZCZD7FHU.js";
5
6
  import "./chunk-KFQGP6VL.js";
6
7
  export {
7
8
  createScanCommand,
@@ -3,7 +3,7 @@ import {
3
3
  handleGetSecurityTrends,
4
4
  handleRunSecurityScan,
5
5
  runSecurityScanDefinition
6
- } from "./chunk-JZST2WZS.js";
6
+ } from "./chunk-W4AFGFFB.js";
7
7
  import "./chunk-W6Y7ZW3Y.js";
8
8
  import "./chunk-KFQGP6VL.js";
9
9
  export {
@@ -96,6 +96,12 @@ high-quality, architecturally sound delivery:
96
96
  integration tier.
97
97
  6. **Code Review:** Use `/harness:code-review` and `/harness:pre-commit-review`
98
98
  to perform a final quality check before completing the task.
99
+ 6b. **Compound (when applicable):** Run `/harness:compound` when ANY of these
100
+ three concrete triggers fired during this issue:
101
+ (a) `/harness:debugging` was invoked at any point (regardless of outcome),
102
+ (b) the fix required more than one commit on the issue branch, or
103
+ (c) execution involved >1 attempt (`Attempt Number` above is greater than 1).
104
+ Otherwise skip silently. The triggers are mechanical — no judgment required.
99
105
  7. **Ship:** When the review is clean, you are pre-authorized to ship without asking:
100
106
  - Create a topic branch if you are still on `main`/`master` (e.g. `feat/{{ issue.identifier }}`).
101
107
  - Stage your changes and create a descriptive commit (Conventional Commits style).
@@ -115,7 +121,9 @@ high-quality, architecturally sound delivery:
115
121
 
116
122
  - Always verify your changes with `harness validate`.
117
123
  - Adhere to the architectural constraints defined in `harness.config.json`.
118
- - Document your progress and any learnings in `.harness/learnings.md`.
124
+ - For non-trivial learnings, run `/harness:compound` (writes structured docs to
125
+ `docs/solutions/<track>/<category>/`). The `.harness/learnings.md` file remains
126
+ for ephemeral session notes only and is not preserved as compounding knowledge.
119
127
  - Step 7 (Ship) is part of the standard workflow. Do not pause to ask for commit authorization — completing the issue means the PR has been opened.
120
128
 
121
129
  Attempt Number: {{ attempt }}
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  handleValidateProject,
3
3
  validateToolDefinition
4
- } from "./chunk-6GXSJGSW.js";
5
- import "./chunk-BYS3TQOO.js";
4
+ } from "./chunk-VKDBM3RX.js";
5
+ import "./chunk-CPYL6LJR.js";
6
6
  import "./chunk-W6Y7ZW3Y.js";
7
- import "./chunk-RFYF7TJS.js";
7
+ import "./chunk-K4WRQTEF.js";
8
8
  import "./chunk-RL4VMEXL.js";
9
- import "./chunk-S2WB4LE7.js";
9
+ import "./chunk-BMM3GXV6.js";
10
10
  import "./chunk-KFQGP6VL.js";
11
11
  export {
12
12
  handleValidateProject,
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  runCrossCheck
3
- } from "./chunk-XHOGGZS7.js";
4
- import "./chunk-RFYF7TJS.js";
3
+ } from "./chunk-QTUPHTTK.js";
4
+ import "./chunk-K4WRQTEF.js";
5
5
  import "./chunk-RL4VMEXL.js";
6
- import "./chunk-S2WB4LE7.js";
6
+ import "./chunk-BMM3GXV6.js";
7
7
  import "./chunk-KFQGP6VL.js";
8
8
  export {
9
9
  runCrossCheck
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@harness-engineering/cli",
3
- "version": "2.0.0",
3
+ "version": "2.1.1",
4
4
  "description": "CLI for Harness Engineering toolkit",
5
5
  "type": "module",
6
6
  "bin": {
@@ -30,6 +30,7 @@
30
30
  "dotenv": "^16.6.1",
31
31
  "ejs": "^3.1.10",
32
32
  "glob": "^13.0.6",
33
+ "gray-matter": "^4.0.3",
33
34
  "handlebars": "^4.7.9",
34
35
  "minimatch": "^10.2.5",
35
36
  "semver": "^7.7.4",
@@ -37,15 +38,15 @@
37
38
  "web-tree-sitter": "^0.24.7",
38
39
  "yaml": "^2.8.3",
39
40
  "zod": "^3.25.76",
40
- "@harness-engineering/core": "0.23.6",
41
- "@harness-engineering/dashboard": "0.5.0",
42
- "@harness-engineering/graph": "0.7.1",
41
+ "@harness-engineering/core": "0.23.8",
42
+ "@harness-engineering/dashboard": "0.5.2",
43
+ "@harness-engineering/graph": "0.8.0",
43
44
  "@harness-engineering/linter-gen": "0.1.7",
44
- "@harness-engineering/orchestrator": "0.3.0",
45
+ "@harness-engineering/orchestrator": "0.3.2",
45
46
  "@harness-engineering/types": "0.11.0"
46
47
  },
47
48
  "peerDependencies": {
48
- "@harness-engineering/intelligence": "0.2.0"
49
+ "@harness-engineering/intelligence": "0.2.1"
49
50
  },
50
51
  "peerDependenciesMeta": {
51
52
  "@harness-engineering/intelligence": {
@@ -1,54 +0,0 @@
1
- import "./chunk-KFQGP6VL.js";
2
-
3
- // src/mcp/utils/glob-helper.ts
4
- import * as fs from "fs/promises";
5
- import * as path from "path";
6
- var SOURCE_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx", ".go", ".py"]);
7
- function globToRegex(pattern) {
8
- const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*\*/g, "\xA7\xA7").replace(/\*/g, "[^/]*").replace(/§§/g, ".*");
9
- return new RegExp(escaped);
10
- }
11
- function isExcluded(relativePath, excludeRegexes) {
12
- for (const regex of excludeRegexes) {
13
- if (regex.test(relativePath)) return true;
14
- }
15
- return false;
16
- }
17
- var SKIP_DIRS = /* @__PURE__ */ new Set(["node_modules", ".git", "dist", ".next", ".nuxt", "__pycache__"]);
18
- async function walkDir(dir, rootDir, excludeRegexes, files) {
19
- let entries;
20
- try {
21
- entries = await fs.readdir(dir, { withFileTypes: true });
22
- } catch {
23
- return;
24
- }
25
- for (const entry of entries) {
26
- const fullPath = path.join(dir, entry.name);
27
- const relativePath = path.relative(rootDir, fullPath).replaceAll("\\", "/");
28
- if (entry.isDirectory()) {
29
- if (SKIP_DIRS.has(entry.name)) continue;
30
- if (isExcluded(relativePath + "/", excludeRegexes)) continue;
31
- await walkDir(fullPath, rootDir, excludeRegexes, files);
32
- } else if (entry.isFile()) {
33
- const ext = path.extname(entry.name);
34
- if (!SOURCE_EXTENSIONS.has(ext)) continue;
35
- if (isExcluded(relativePath, excludeRegexes)) continue;
36
- files.push(fullPath);
37
- }
38
- }
39
- }
40
- async function globFiles(rootDir, exclude) {
41
- const patterns = exclude ?? [
42
- "**/node_modules/**",
43
- "**/dist/**",
44
- "**/*.test.ts",
45
- "**/fixtures/**"
46
- ];
47
- const excludeRegexes = patterns.map(globToRegex);
48
- const files = [];
49
- await walkDir(rootDir, rootDir, excludeRegexes, files);
50
- return files;
51
- }
52
- export {
53
- globFiles
54
- };