@harness-engineering/cli 1.10.0 → 1.12.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 (59) hide show
  1. package/dist/agents/skills/claude-code/enforce-architecture/SKILL.md +4 -0
  2. package/dist/agents/skills/claude-code/harness-parallel-agents/SKILL.md +105 -20
  3. package/dist/agents/skills/claude-code/harness-pre-commit-review/SKILL.md +37 -0
  4. package/dist/agents/skills/gemini-cli/enforce-architecture/SKILL.md +4 -0
  5. package/dist/agents/skills/gemini-cli/harness-parallel-agents/SKILL.md +105 -20
  6. package/dist/agents/skills/gemini-cli/harness-pre-commit-review/SKILL.md +37 -0
  7. package/dist/{agents-md-EMRFLNBC.js → agents-md-KIS2RSMG.js} +1 -1
  8. package/dist/{architecture-5JNN5L3M.js → architecture-AJAUDRQQ.js} +2 -2
  9. package/dist/bin/harness-mcp.js +14 -14
  10. package/dist/bin/harness.js +20 -20
  11. package/dist/{check-phase-gate-WOKIYGAM.js → check-phase-gate-K7QCSYRJ.js} +4 -4
  12. package/dist/{chunk-FPIPT36X.js → chunk-2SWJ4VO7.js} +6 -6
  13. package/dist/{chunk-OPXH4CQN.js → chunk-2YPZKGAG.js} +1 -1
  14. package/dist/{chunk-B7HFEHWP.js → chunk-3WGJMBKH.js} +10 -0
  15. package/dist/{chunk-ECUJQS3B.js → chunk-6N4R6FVX.js} +3 -3
  16. package/dist/{chunk-LXU5M77O.js → chunk-747VBPA4.js} +390 -57
  17. package/dist/{chunk-NX6DSZSM.js → chunk-AE2OWWDH.js} +4497 -2640
  18. package/dist/{chunk-PAHHT2IK.js → chunk-B5SBNH4S.js} +2833 -918
  19. package/dist/{chunk-F4PTVZWA.js → chunk-CTTFXXKJ.js} +7 -7
  20. package/dist/{chunk-PSXF277V.js → chunk-EAURF4LH.js} +1 -1
  21. package/dist/chunk-EBJQ6N4M.js +39 -0
  22. package/dist/{chunk-4PFMY3H7.js → chunk-FLOEMHDF.js} +9 -9
  23. package/dist/{chunk-46YA6FI3.js → chunk-GNGELAXY.js} +2 -2
  24. package/dist/{chunk-EOLRW32Q.js → chunk-HD4IBGLA.js} +9 -1
  25. package/dist/{chunk-CWZ4Y2PO.js → chunk-JLXOEO5C.js} +4 -4
  26. package/dist/{chunk-F3YDAJFQ.js → chunk-L2KLU56K.js} +2 -2
  27. package/dist/{chunk-MO4YQOMB.js → chunk-OIGVQF5V.js} +3 -3
  28. package/dist/{chunk-PMTFPOCT.js → chunk-TJVVU3HB.js} +1 -1
  29. package/dist/{chunk-MDUK2J2O.js → chunk-VRFZWGMS.js} +2 -1
  30. package/dist/{chunk-FX7SQHGD.js → chunk-YXOG2277.js} +2 -2
  31. package/dist/{chunk-7X7ZAYMY.js → chunk-ZU2UBYBY.js} +102 -5
  32. package/dist/{ci-workflow-ZBBUNTHQ.js → ci-workflow-NBL4OT4A.js} +1 -1
  33. package/dist/create-skill-WPXHSLX2.js +11 -0
  34. package/dist/{dist-PBTNVK6K.js → dist-IJ4J4C5G.js} +103 -1
  35. package/dist/{dist-I7DB5VKB.js → dist-M6BQODWC.js} +1145 -0
  36. package/dist/{docs-PTJGD6XI.js → docs-CPTMH3VY.js} +2 -2
  37. package/dist/{engine-SCMZ3G3E.js → engine-BUWPAAGD.js} +1 -1
  38. package/dist/{entropy-YIUBGKY7.js → entropy-Z4FYVQ7L.js} +2 -2
  39. package/dist/{feedback-WEVQSLAA.js → feedback-TT6WF5YX.js} +1 -1
  40. package/dist/{generate-agent-definitions-BU5LOJTI.js → generate-agent-definitions-J5HANRNR.js} +4 -4
  41. package/dist/{graph-loader-RLO3KRIX.js → graph-loader-KO4GJ5N2.js} +1 -1
  42. package/dist/index.d.ts +355 -12
  43. package/dist/index.js +33 -21
  44. package/dist/{loader-6S6PVGSF.js → loader-PCU5YWRH.js} +1 -1
  45. package/dist/mcp-YM6QLHLZ.js +34 -0
  46. package/dist/{performance-5TVW6SA6.js → performance-YJVXOKIB.js} +2 -2
  47. package/dist/{review-pipeline-4JTQAWKW.js → review-pipeline-KGMIMLIE.js} +1 -1
  48. package/dist/{runtime-PXIM7UV6.js → runtime-F6R27LD6.js} +1 -1
  49. package/dist/{security-URYTKLGK.js → security-MX5VVXBC.js} +1 -1
  50. package/dist/skill-executor-RG45LUO5.js +8 -0
  51. package/dist/templates/orchestrator/WORKFLOW.md +48 -0
  52. package/dist/templates/orchestrator/template.json +6 -0
  53. package/dist/{validate-KSDUUK2M.js → validate-EFNMSFKD.js} +2 -2
  54. package/dist/{validate-cross-check-WZAX357V.js → validate-cross-check-LJX65SBS.js} +1 -1
  55. package/package.json +10 -6
  56. package/dist/chunk-HIOXKZYF.js +0 -15
  57. package/dist/create-skill-LUWO46WF.js +0 -11
  58. package/dist/mcp-BNLBTCXZ.js +0 -34
  59. package/dist/skill-executor-KVS47DAU.js +0 -8
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { Command } from 'commander';
2
2
  import { ContextQLResult, IngestResult } from '@harness-engineering/graph';
3
- import { Result } from '@harness-engineering/core';
3
+ import { Result, Violation, ConflictReport } from '@harness-engineering/core';
4
4
  import { z } from 'zod';
5
5
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
6
+ import { Result as Result$1 } from '@harness-engineering/types';
6
7
 
7
8
  interface Phase {
8
9
  name: string;
@@ -52,23 +53,40 @@ declare function runGraphStatus(projectPath: string): Promise<GraphStatusResult>
52
53
  declare function runGraphExport(projectPath: string, format: string): Promise<string>;
53
54
 
54
55
  /**
55
- * CLI Exit Codes
56
+ * Standard exit codes for the Harness CLI.
56
57
  */
57
58
  declare const ExitCode: {
59
+ /** Command completed successfully */
58
60
  readonly SUCCESS: 0;
61
+ /** Command failed because of a validation error (e.g. check-docs found issues) */
59
62
  readonly VALIDATION_FAILED: 1;
63
+ /** Command failed because of an unexpected error or misconfiguration */
60
64
  readonly ERROR: 2;
61
65
  };
66
+ /**
67
+ * Type representing one of the supported exit codes.
68
+ */
62
69
  type ExitCodeType = (typeof ExitCode)[keyof typeof ExitCode];
63
70
  /**
64
- * CLI-specific error with exit code
71
+ * Custom error class for CLI-specific failures.
72
+ * Includes an exit code that should be used when terminating the process.
65
73
  */
66
74
  declare class CLIError extends Error {
75
+ /** The exit code associated with this error */
67
76
  readonly exitCode: ExitCodeType;
77
+ /**
78
+ * Creates a new CLIError.
79
+ *
80
+ * @param message - Human-readable error message.
81
+ * @param exitCode - Exit code to use when process terminates. Defaults to ExitCode.ERROR.
82
+ */
68
83
  constructor(message: string, exitCode?: ExitCodeType);
69
84
  }
70
85
  /**
71
- * Handle error and exit process
86
+ * Handles an error by logging it to stderr and exiting the process with the appropriate code.
87
+ *
88
+ * @param error - The error to handle.
89
+ * @throws Never returns, as it terminates the process.
72
90
  */
73
91
  declare function handleError(error: unknown): never;
74
92
 
@@ -143,59 +161,138 @@ declare function generateSlashCommands(opts: GenerateOptions): GenerateResult[];
143
161
 
144
162
  interface SkillSource {
145
163
  dir: string;
146
- source: 'project' | 'global';
164
+ source: 'project' | 'community' | 'global';
147
165
  }
148
166
 
167
+ /**
168
+ * Supported output modes for the CLI.
169
+ */
149
170
  declare const OutputMode: {
171
+ /** Output as formatted JSON */
150
172
  readonly JSON: "json";
173
+ /** Output as human-readable text */
151
174
  readonly TEXT: "text";
175
+ /** Minimal output, only errors and successes */
152
176
  readonly QUIET: "quiet";
177
+ /** Full output with detailed context and suggestions */
153
178
  readonly VERBOSE: "verbose";
154
179
  };
180
+ /**
181
+ * Type representing one of the supported output modes.
182
+ */
155
183
  type OutputModeType = (typeof OutputMode)[keyof typeof OutputMode];
184
+ /**
185
+ * Represents a single issue discovered during validation.
186
+ */
156
187
  interface ValidationIssue {
188
+ /** The file where the issue was found */
157
189
  file?: string;
190
+ /** A human-readable description of the issue */
158
191
  message: string;
192
+ /** The line number where the issue occurs */
159
193
  line?: number;
194
+ /** A suggested fix or next step */
160
195
  suggestion?: string;
161
196
  }
197
+ /**
198
+ * The result of a validation operation.
199
+ */
162
200
  interface ValidationResult {
201
+ /** Whether the validation passed overall */
163
202
  valid: boolean;
203
+ /** A list of issues found during validation */
164
204
  issues: ValidationIssue[];
165
205
  }
206
+ /**
207
+ * Formats data and results for CLI output based on the selected mode.
208
+ */
166
209
  declare class OutputFormatter {
167
210
  private mode;
211
+ /**
212
+ * Creates a new OutputFormatter.
213
+ *
214
+ * @param mode - The output mode to use. Defaults to TEXT.
215
+ */
168
216
  constructor(mode?: OutputModeType);
169
217
  /**
170
- * Format raw data (for JSON mode)
218
+ * Formats raw data for output.
219
+ *
220
+ * @param data - The data to format.
221
+ * @returns A string representation of the data based on the current mode.
171
222
  */
172
223
  format(data: unknown): string;
173
224
  /**
174
- * Format validation result
225
+ * Formats a validation result into a user-friendly string.
226
+ *
227
+ * @param result - The validation result to format.
228
+ * @returns A formatted string containing the validation status and any issues.
175
229
  */
176
230
  formatValidation(result: ValidationResult): string;
177
231
  /**
178
- * Format a summary line
232
+ * Formats a summary line with a success/failure icon and label.
233
+ *
234
+ * @param label - The name of the field to summarize.
235
+ * @param value - The value to display.
236
+ * @param success - Whether the summary represents a success or failure state.
237
+ * @returns A formatted summary string, or an empty string in JSON or QUIET modes.
179
238
  */
180
239
  formatSummary(label: string, value: string | number, success: boolean): string;
181
240
  }
182
241
 
242
+ /**
243
+ * Simple logger for CLI output with color-coded icons.
244
+ */
183
245
  declare const logger: {
246
+ /**
247
+ * Logs an informational message with a blue 'i' icon.
248
+ * @param message - The message to log.
249
+ */
184
250
  info: (message: string) => void;
251
+ /**
252
+ * Logs a success message with a green 'v' icon.
253
+ * @param message - The message to log.
254
+ */
185
255
  success: (message: string) => void;
256
+ /**
257
+ * Logs a warning message with a yellow '!' icon.
258
+ * @param message - The message to log.
259
+ */
186
260
  warn: (message: string) => void;
261
+ /**
262
+ * Logs an error message with a red 'x' icon to stderr.
263
+ * @param message - The message to log.
264
+ */
187
265
  error: (message: string) => void;
266
+ /**
267
+ * Logs a dimmed message.
268
+ * @param message - The message to log.
269
+ */
188
270
  dim: (message: string) => void;
271
+ /**
272
+ * Logs raw data as a formatted JSON string.
273
+ * Useful for JSON output mode.
274
+ * @param data - The data to log.
275
+ */
189
276
  raw: (data: unknown) => void;
190
277
  };
191
278
 
279
+ /**
280
+ * The main Harness configuration schema.
281
+ */
192
282
  declare const HarnessConfigSchema: z.ZodObject<{
283
+ /** Configuration schema version */
193
284
  version: z.ZodLiteral<1>;
285
+ /** Human-readable name of the project */
194
286
  name: z.ZodOptional<z.ZodString>;
287
+ /** Root directory of the project, relative to the config file */
195
288
  rootDir: z.ZodDefault<z.ZodString>;
289
+ /** Layered architecture definitions */
196
290
  layers: z.ZodOptional<z.ZodArray<z.ZodObject<{
291
+ /** Human-readable name of the layer */
197
292
  name: z.ZodString;
293
+ /** Glob pattern matching files in this layer */
198
294
  pattern: z.ZodString;
295
+ /** Names of other layers this layer is allowed to import from */
199
296
  allowedDependencies: z.ZodArray<z.ZodString, "many">;
200
297
  }, "strip", z.ZodTypeAny, {
201
298
  name: string;
@@ -206,9 +303,13 @@ declare const HarnessConfigSchema: z.ZodObject<{
206
303
  pattern: string;
207
304
  allowedDependencies: string[];
208
305
  }>, "many">>;
306
+ /** Rules for forbidden cross-module imports */
209
307
  forbiddenImports: z.ZodOptional<z.ZodArray<z.ZodObject<{
308
+ /** Glob pattern matching source files this rule applies to */
210
309
  from: z.ZodString;
310
+ /** List of modules or patterns that are not allowed to be imported */
211
311
  disallow: z.ZodArray<z.ZodString, "many">;
312
+ /** Optional custom message to display on violation */
212
313
  message: z.ZodOptional<z.ZodString>;
213
314
  }, "strip", z.ZodTypeAny, {
214
315
  from: string;
@@ -219,18 +320,26 @@ declare const HarnessConfigSchema: z.ZodObject<{
219
320
  disallow: string[];
220
321
  message?: string | undefined;
221
322
  }>, "many">>;
323
+ /** Boundary enforcement settings */
222
324
  boundaries: z.ZodOptional<z.ZodObject<{
325
+ /** List of globs where files MUST have a corresponding schema/definition */
223
326
  requireSchema: z.ZodArray<z.ZodString, "many">;
224
327
  }, "strip", z.ZodTypeAny, {
225
328
  requireSchema: string[];
226
329
  }, {
227
330
  requireSchema: string[];
228
331
  }>>;
332
+ /** Path to the project's knowledge map (AGENTS.md) */
229
333
  agentsMapPath: z.ZodDefault<z.ZodString>;
334
+ /** Directory containing project documentation */
230
335
  docsDir: z.ZodDefault<z.ZodString>;
336
+ /** Agent orchestration settings */
231
337
  agent: z.ZodOptional<z.ZodObject<{
338
+ /** The execution environment for agents */
232
339
  executor: z.ZodDefault<z.ZodEnum<["subprocess", "cloud", "noop"]>>;
340
+ /** Maximum execution time in milliseconds */
233
341
  timeout: z.ZodDefault<z.ZodNumber>;
342
+ /** Optional list of skill IDs pre-authorized for the agent */
234
343
  skills: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
235
344
  }, "strip", z.ZodTypeAny, {
236
345
  executor: "subprocess" | "cloud" | "noop";
@@ -241,8 +350,11 @@ declare const HarnessConfigSchema: z.ZodObject<{
241
350
  timeout?: number | undefined;
242
351
  skills?: string[] | undefined;
243
352
  }>>;
353
+ /** Drift and stale code management settings */
244
354
  entropy: z.ZodOptional<z.ZodObject<{
355
+ /** Patterns to exclude from entropy analysis */
245
356
  excludePatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
357
+ /** Whether to automatically attempt to fix simple entropy issues */
246
358
  autoFix: z.ZodDefault<z.ZodBoolean>;
247
359
  }, "strip", z.ZodTypeAny, {
248
360
  excludePatterns: string[];
@@ -251,38 +363,65 @@ declare const HarnessConfigSchema: z.ZodObject<{
251
363
  excludePatterns?: string[] | undefined;
252
364
  autoFix?: boolean | undefined;
253
365
  }>>;
366
+ /** Security scanning configuration */
254
367
  security: z.ZodOptional<z.ZodObject<{
368
+ /** Whether security scanning is enabled */
255
369
  enabled: z.ZodDefault<z.ZodBoolean>;
370
+ /** Whether to fail on any security warning */
256
371
  strict: z.ZodDefault<z.ZodBoolean>;
372
+ /** Rule-specific severity overrides */
257
373
  rules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["off", "error", "warning", "info"]>>>;
374
+ /** Patterns to exclude from security scans */
258
375
  exclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
259
376
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
377
+ /** Whether security scanning is enabled */
260
378
  enabled: z.ZodDefault<z.ZodBoolean>;
379
+ /** Whether to fail on any security warning */
261
380
  strict: z.ZodDefault<z.ZodBoolean>;
381
+ /** Rule-specific severity overrides */
262
382
  rules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["off", "error", "warning", "info"]>>>;
383
+ /** Patterns to exclude from security scans */
263
384
  exclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
264
385
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
386
+ /** Whether security scanning is enabled */
265
387
  enabled: z.ZodDefault<z.ZodBoolean>;
388
+ /** Whether to fail on any security warning */
266
389
  strict: z.ZodDefault<z.ZodBoolean>;
390
+ /** Rule-specific severity overrides */
267
391
  rules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["off", "error", "warning", "info"]>>>;
392
+ /** Patterns to exclude from security scans */
268
393
  exclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
269
394
  }, z.ZodTypeAny, "passthrough">>>;
395
+ /** Performance and complexity budget settings */
270
396
  performance: z.ZodOptional<z.ZodObject<{
397
+ /** Complexity thresholds per module or pattern */
271
398
  complexity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
399
+ /** Coupling limits between modules */
272
400
  coupling: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
401
+ /** Size budget for bundles or directories */
273
402
  sizeBudget: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
274
403
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
404
+ /** Complexity thresholds per module or pattern */
275
405
  complexity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
406
+ /** Coupling limits between modules */
276
407
  coupling: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
408
+ /** Size budget for bundles or directories */
277
409
  sizeBudget: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
278
410
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
411
+ /** Complexity thresholds per module or pattern */
279
412
  complexity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
413
+ /** Coupling limits between modules */
280
414
  coupling: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
415
+ /** Size budget for bundles or directories */
281
416
  sizeBudget: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
282
417
  }, z.ZodTypeAny, "passthrough">>>;
418
+ /** Project template settings (used by 'harness init') */
283
419
  template: z.ZodOptional<z.ZodObject<{
420
+ /** Complexity level of the template */
284
421
  level: z.ZodEnum<["basic", "intermediate", "advanced"]>;
422
+ /** Primary technology framework */
285
423
  framework: z.ZodOptional<z.ZodString>;
424
+ /** Template version */
286
425
  version: z.ZodNumber;
287
426
  }, "strip", z.ZodTypeAny, {
288
427
  version: number;
@@ -293,11 +432,17 @@ declare const HarnessConfigSchema: z.ZodObject<{
293
432
  level: "basic" | "intermediate" | "advanced";
294
433
  framework?: string | undefined;
295
434
  }>>;
435
+ /** Phase gate and readiness check configuration */
296
436
  phaseGates: z.ZodOptional<z.ZodObject<{
437
+ /** Whether phase gate checks are enabled */
297
438
  enabled: z.ZodDefault<z.ZodBoolean>;
439
+ /** Severity level when a phase gate check fails */
298
440
  severity: z.ZodDefault<z.ZodEnum<["error", "warning"]>>;
441
+ /** List of implementation-to-spec mappings */
299
442
  mappings: z.ZodDefault<z.ZodArray<z.ZodObject<{
443
+ /** Pattern for implementation files */
300
444
  implPattern: z.ZodString;
445
+ /** Pattern for corresponding specification files */
301
446
  specPattern: z.ZodString;
302
447
  }, "strip", z.ZodTypeAny, {
303
448
  implPattern: string;
@@ -321,10 +466,15 @@ declare const HarnessConfigSchema: z.ZodObject<{
321
466
  specPattern: string;
322
467
  }[] | undefined;
323
468
  }>>;
469
+ /** Design system consistency settings */
324
470
  design: z.ZodOptional<z.ZodObject<{
471
+ /** Strictness of design system enforcement */
325
472
  strictness: z.ZodDefault<z.ZodEnum<["strict", "standard", "permissive"]>>;
473
+ /** Supported target platforms */
326
474
  platforms: z.ZodDefault<z.ZodArray<z.ZodEnum<["web", "mobile"]>, "many">>;
475
+ /** Path to design tokens (e.g. JSON or CSS) */
327
476
  tokenPath: z.ZodOptional<z.ZodString>;
477
+ /** Brief description of the intended aesthetic direction */
328
478
  aestheticIntent: z.ZodOptional<z.ZodString>;
329
479
  }, "strip", z.ZodTypeAny, {
330
480
  strictness: "strict" | "standard" | "permissive";
@@ -337,21 +487,37 @@ declare const HarnessConfigSchema: z.ZodObject<{
337
487
  tokenPath?: string | undefined;
338
488
  aestheticIntent?: string | undefined;
339
489
  }>>;
490
+ /** Internationalization (i18n) settings */
340
491
  i18n: z.ZodOptional<z.ZodObject<{
492
+ /** Whether i18n management is enabled */
341
493
  enabled: z.ZodDefault<z.ZodBoolean>;
494
+ /** Strictness of i18n rule enforcement */
342
495
  strictness: z.ZodDefault<z.ZodEnum<["strict", "standard", "permissive"]>>;
496
+ /** The primary language used for development */
343
497
  sourceLocale: z.ZodDefault<z.ZodString>;
498
+ /** List of locales that translations are required for */
344
499
  targetLocales: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
500
+ /** The i18n framework in use */
345
501
  framework: z.ZodDefault<z.ZodEnum<["auto", "i18next", "react-intl", "vue-i18n", "flutter-intl", "apple", "android", "custom"]>>;
502
+ /** Storage format for translation files */
346
503
  format: z.ZodDefault<z.ZodString>;
504
+ /** Syntax used for message formatting */
347
505
  messageFormat: z.ZodDefault<z.ZodEnum<["icu", "i18next", "custom"]>>;
506
+ /** Convention for translation keys */
348
507
  keyConvention: z.ZodDefault<z.ZodEnum<["dot-notation", "snake_case", "camelCase", "custom"]>>;
508
+ /** Mapping of locales to their file paths */
349
509
  translationPaths: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
510
+ /** Platforms targeted by this configuration */
350
511
  platforms: z.ZodDefault<z.ZodArray<z.ZodEnum<["web", "mobile", "backend"]>, "many">>;
512
+ /** Industry vertical (for contextual translations) */
351
513
  industry: z.ZodOptional<z.ZodString>;
514
+ /** Translation coverage requirements */
352
515
  coverage: z.ZodOptional<z.ZodObject<{
516
+ /** Minimum required translation percentage */
353
517
  minimumPercent: z.ZodDefault<z.ZodNumber>;
518
+ /** Whether plural forms are required for all keys */
354
519
  requirePlurals: z.ZodDefault<z.ZodBoolean>;
520
+ /** Whether to detect untranslated strings in source code */
355
521
  detectUntranslated: z.ZodDefault<z.ZodBoolean>;
356
522
  }, "strip", z.ZodTypeAny, {
357
523
  minimumPercent: number;
@@ -362,9 +528,13 @@ declare const HarnessConfigSchema: z.ZodObject<{
362
528
  requirePlurals?: boolean | undefined;
363
529
  detectUntranslated?: boolean | undefined;
364
530
  }>>;
531
+ /** Locale used for pseudo-localization testing */
365
532
  pseudoLocale: z.ZodOptional<z.ZodString>;
533
+ /** MCP server for AI-assisted translation */
366
534
  mcp: z.ZodOptional<z.ZodObject<{
535
+ /** Name or URL of the MCP server */
367
536
  server: z.ZodString;
537
+ /** Project ID on the remote i18n platform */
368
538
  projectId: z.ZodOptional<z.ZodString>;
369
539
  }, "strip", z.ZodTypeAny, {
370
540
  server: string;
@@ -418,10 +588,15 @@ declare const HarnessConfigSchema: z.ZodObject<{
418
588
  projectId?: string | undefined;
419
589
  } | undefined;
420
590
  }>>;
591
+ /** Code review settings */
421
592
  review: z.ZodOptional<z.ZodObject<{
593
+ /** Custom model tier mappings for reviewers */
422
594
  model_tiers: z.ZodOptional<z.ZodObject<{
595
+ /** Model ID to use for fast/cheap operations */
423
596
  fast: z.ZodOptional<z.ZodString>;
597
+ /** Model ID to use for standard reasoning tasks */
424
598
  standard: z.ZodOptional<z.ZodString>;
599
+ /** Model ID to use for complex/critical analysis */
425
600
  strong: z.ZodOptional<z.ZodString>;
426
601
  }, "strip", z.ZodTypeAny, {
427
602
  standard?: string | undefined;
@@ -445,6 +620,24 @@ declare const HarnessConfigSchema: z.ZodObject<{
445
620
  strong?: string | undefined;
446
621
  } | undefined;
447
622
  }>>;
623
+ /** General architectural enforcement settings */
624
+ architecture: z.ZodOptional<z.ZodObject<{
625
+ enabled: z.ZodDefault<z.ZodBoolean>;
626
+ baselinePath: z.ZodDefault<z.ZodString>;
627
+ 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>]>>>;
628
+ 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>]>>>>;
629
+ }, "strip", z.ZodTypeAny, {
630
+ thresholds: Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>;
631
+ modules: Record<string, Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>>;
632
+ enabled: boolean;
633
+ baselinePath: string;
634
+ }, {
635
+ thresholds?: Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>> | undefined;
636
+ modules?: Record<string, Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>> | undefined;
637
+ enabled?: boolean | undefined;
638
+ baselinePath?: string | undefined;
639
+ }>>;
640
+ /** How often (in ms) to check for CLI updates */
448
641
  updateCheckInterval: z.ZodOptional<z.ZodNumber>;
449
642
  }, "strip", z.ZodTypeAny, {
450
643
  version: 1;
@@ -475,14 +668,21 @@ declare const HarnessConfigSchema: z.ZodObject<{
475
668
  autoFix: boolean;
476
669
  } | undefined;
477
670
  security?: z.objectOutputType<{
671
+ /** Whether security scanning is enabled */
478
672
  enabled: z.ZodDefault<z.ZodBoolean>;
673
+ /** Whether to fail on any security warning */
479
674
  strict: z.ZodDefault<z.ZodBoolean>;
675
+ /** Rule-specific severity overrides */
480
676
  rules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["off", "error", "warning", "info"]>>>;
677
+ /** Patterns to exclude from security scans */
481
678
  exclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
482
679
  }, z.ZodTypeAny, "passthrough"> | undefined;
483
680
  performance?: z.objectOutputType<{
681
+ /** Complexity thresholds per module or pattern */
484
682
  complexity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
683
+ /** Coupling limits between modules */
485
684
  coupling: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
685
+ /** Size budget for bundles or directories */
486
686
  sizeBudget: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
487
687
  }, z.ZodTypeAny, "passthrough"> | undefined;
488
688
  template?: {
@@ -534,6 +734,12 @@ declare const HarnessConfigSchema: z.ZodObject<{
534
734
  strong?: string | undefined;
535
735
  } | undefined;
536
736
  } | undefined;
737
+ architecture?: {
738
+ thresholds: Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>;
739
+ modules: Record<string, Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>>;
740
+ enabled: boolean;
741
+ baselinePath: string;
742
+ } | undefined;
537
743
  updateCheckInterval?: number | undefined;
538
744
  }, {
539
745
  version: 1;
@@ -564,14 +770,21 @@ declare const HarnessConfigSchema: z.ZodObject<{
564
770
  autoFix?: boolean | undefined;
565
771
  } | undefined;
566
772
  security?: z.objectInputType<{
773
+ /** Whether security scanning is enabled */
567
774
  enabled: z.ZodDefault<z.ZodBoolean>;
775
+ /** Whether to fail on any security warning */
568
776
  strict: z.ZodDefault<z.ZodBoolean>;
777
+ /** Rule-specific severity overrides */
569
778
  rules: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<["off", "error", "warning", "info"]>>>;
779
+ /** Patterns to exclude from security scans */
570
780
  exclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
571
781
  }, z.ZodTypeAny, "passthrough"> | undefined;
572
782
  performance?: z.objectInputType<{
783
+ /** Complexity thresholds per module or pattern */
573
784
  complexity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
785
+ /** Coupling limits between modules */
574
786
  coupling: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
787
+ /** Size budget for bundles or directories */
575
788
  sizeBudget: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
576
789
  }, z.ZodTypeAny, "passthrough"> | undefined;
577
790
  template?: {
@@ -623,20 +836,40 @@ declare const HarnessConfigSchema: z.ZodObject<{
623
836
  strong?: string | undefined;
624
837
  } | undefined;
625
838
  } | undefined;
839
+ architecture?: {
840
+ thresholds?: Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>> | undefined;
841
+ modules?: Record<string, Partial<Record<"complexity" | "coupling" | "circular-deps" | "layer-violations" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>> | undefined;
842
+ enabled?: boolean | undefined;
843
+ baselinePath?: string | undefined;
844
+ } | undefined;
626
845
  updateCheckInterval?: number | undefined;
627
846
  }>;
847
+ /**
848
+ * Type representing the full Harness configuration.
849
+ */
628
850
  type HarnessConfig = z.infer<typeof HarnessConfigSchema>;
629
851
 
630
852
  /**
631
- * Find config file starting from given directory
853
+ * Searches for a Harness configuration file starting from the given directory
854
+ * and moving up the directory tree until the root is reached.
855
+ *
856
+ * @param startDir - The directory to start searching from. Defaults to current working directory.
857
+ * @returns An Ok result containing the absolute path to the config file, or an Err with a CLIError if not found.
632
858
  */
633
859
  declare function findConfigFile(startDir?: string): Result<string, CLIError>;
634
860
  /**
635
- * Load and validate config from file
861
+ * Loads and validates a Harness configuration from a JSON file.
862
+ *
863
+ * @param configPath - The path to the configuration file.
864
+ * @returns An Ok result with the validated HarnessConfig, or an Err with a CLIError if loading or validation fails.
636
865
  */
637
866
  declare function loadConfig(configPath: string): Result<HarnessConfig, CLIError>;
638
867
  /**
639
- * Load config from default location or specified path
868
+ * Resolves the Harness configuration by either loading from a specified path
869
+ * or searching for the default config file in the current directory tree.
870
+ *
871
+ * @param configPath - Optional path to a specific configuration file.
872
+ * @returns An Ok result with the resolved configuration, or an Err with a CLIError.
640
873
  */
641
874
  declare function resolveConfig(configPath?: string): Result<HarnessConfig, CLIError>;
642
875
 
@@ -988,6 +1221,39 @@ declare function renderClaudeCodeAgent(def: AgentDefinition): string;
988
1221
 
989
1222
  declare function renderGeminiAgent(def: AgentDefinition): string;
990
1223
 
1224
+ interface ImpactPreviewOptions {
1225
+ detailed?: boolean;
1226
+ perFile?: boolean;
1227
+ path?: string;
1228
+ }
1229
+ declare function runImpactPreview(options: ImpactPreviewOptions): Promise<string>;
1230
+
1231
+ interface CheckArchOptions {
1232
+ cwd?: string;
1233
+ configPath?: string;
1234
+ updateBaseline?: boolean;
1235
+ json?: boolean;
1236
+ module?: string;
1237
+ }
1238
+ interface CheckArchResult {
1239
+ passed: boolean;
1240
+ mode: 'baseline' | 'threshold-only';
1241
+ totalViolations: number;
1242
+ newViolations: Violation[];
1243
+ resolvedViolations: string[];
1244
+ preExisting: string[];
1245
+ regressions: Array<{
1246
+ category: string;
1247
+ baselineValue: number;
1248
+ currentValue: number;
1249
+ delta: number;
1250
+ }>;
1251
+ thresholdViolations: Violation[];
1252
+ baselineUpdated?: boolean;
1253
+ warning?: string;
1254
+ }
1255
+ declare function runCheckArch(options: CheckArchOptions): Promise<Result<CheckArchResult, CLIError>>;
1256
+
991
1257
  type ToolDefinition = {
992
1258
  name: string;
993
1259
  description: string;
@@ -997,6 +1263,83 @@ declare function getToolDefinitions(): ToolDefinition[];
997
1263
  declare function createHarnessServer(projectRoot?: string): Server;
998
1264
  declare function startServer(): Promise<void>;
999
1265
 
1266
+ interface InstallOptions {
1267
+ version?: string;
1268
+ force?: boolean;
1269
+ from?: string;
1270
+ registry?: string;
1271
+ /** Internal: tracks which package triggered this install (for transitive deps) */
1272
+ _dependencyOf?: string | null;
1273
+ }
1274
+ interface InstallResult {
1275
+ installed: boolean;
1276
+ skipped?: boolean;
1277
+ upgraded?: boolean;
1278
+ name: string;
1279
+ version: string;
1280
+ previousVersion?: string;
1281
+ warnings?: string[];
1282
+ }
1283
+ declare function runInstall(skillName: string, options: InstallOptions): Promise<InstallResult>;
1284
+
1285
+ interface InstallConstraintsOptions {
1286
+ source: string;
1287
+ configPath: string;
1288
+ lockfilePath: string;
1289
+ forceLocal?: boolean;
1290
+ forcePackage?: boolean;
1291
+ dryRun?: boolean;
1292
+ }
1293
+ interface InstallConstraintsSuccess {
1294
+ installed: boolean;
1295
+ packageName: string;
1296
+ version: string;
1297
+ contributionsCount: number;
1298
+ conflicts: ConflictReport[];
1299
+ alreadyInstalled?: boolean;
1300
+ dryRun?: boolean;
1301
+ }
1302
+ declare function runInstallConstraints(options: InstallConstraintsOptions): Promise<Result$1<InstallConstraintsSuccess, string>>;
1303
+
1304
+ interface UninstallConstraintsOptions {
1305
+ packageName: string;
1306
+ configPath: string;
1307
+ lockfilePath: string;
1308
+ }
1309
+ interface UninstallConstraintsSuccess {
1310
+ removed: boolean;
1311
+ packageName: string;
1312
+ version: string;
1313
+ sectionsRemoved: string[];
1314
+ }
1315
+ declare function runUninstallConstraints(options: UninstallConstraintsOptions): Promise<Result$1<UninstallConstraintsSuccess, string>>;
1316
+
1317
+ interface UninstallOptions {
1318
+ force?: boolean;
1319
+ }
1320
+ interface UninstallResult {
1321
+ removed: boolean;
1322
+ name: string;
1323
+ version: string;
1324
+ warnings?: string[];
1325
+ }
1326
+ declare function runUninstall(skillName: string, options: UninstallOptions): Promise<UninstallResult>;
1327
+
1328
+ /**
1329
+ * @harness-engineering/cli
1330
+ *
1331
+ * Command-line interface for the Harness Engineering toolkit.
1332
+ *
1333
+ * This package provides a unified `harness` command with subcommands for
1334
+ * validation, documentation management, dependency checking, and agent
1335
+ * orchestration.
1336
+ */
1337
+
1338
+ /**
1339
+ * Creates and configures the main Harness CLI program.
1340
+ *
1341
+ * @returns A Commander instance with all subcommands registered.
1342
+ */
1000
1343
  declare function createProgram(): Command;
1001
1344
 
1002
- export { AGENT_DESCRIPTIONS, ALLOWED_PERSONA_COMMANDS, type AgentDefinition, CLIError, type CommandExecutor, type CommandStep, type CreateSkillOptions, DEFAULT_TOOLS, ExitCode, GEMINI_TOOL_MAP, type GenerateAgentDefsOptions, type GenerateAgentDefsResult, type GenerateResult, type HandoffContext, type HarnessConfig, OutputFormatter, OutputMode, type Persona, type PersonaMetadata, type PersonaRunReport, type RenderedFiles, type SkillExecutionContext, type SkillExecutionResult, type SkillExecutor, type SkillSource, type SkillStep, type Step, type StepExecutionContext, type StepReport, type TemplateContext, TemplateEngine, type TriggerContext, type TriggerDetectionResult, buildPreamble, createHarnessServer, createProgram, detectTrigger, executeSkill, findConfigFile, generateAgentDefinition, generateAgentDefinitions, generateAgentsMd, generateCIWorkflow, generateRuntime, generateSkillFiles, generateSlashCommands, getToolDefinitions, handleError, listPersonas, loadConfig, loadPersona, logger, renderClaudeCodeAgent, renderGeminiAgent, resolveConfig, runCheckPhaseGate, runCrossCheck, runGraphExport, runGraphStatus, runIngest, runPersona, runQuery, runScan, startServer };
1345
+ export { AGENT_DESCRIPTIONS, ALLOWED_PERSONA_COMMANDS, type AgentDefinition, CLIError, type CheckArchResult, type CommandExecutor, type CommandStep, type CreateSkillOptions, DEFAULT_TOOLS, ExitCode, GEMINI_TOOL_MAP, type GenerateAgentDefsOptions, type GenerateAgentDefsResult, type GenerateResult, type HandoffContext, type HarnessConfig, type InstallConstraintsOptions, type InstallConstraintsSuccess, type InstallResult, OutputFormatter, OutputMode, type Persona, type PersonaMetadata, type PersonaRunReport, type RenderedFiles, type SkillExecutionContext, type SkillExecutionResult, type SkillExecutor, type SkillSource, type SkillStep, type Step, type StepExecutionContext, type StepReport, type TemplateContext, TemplateEngine, type TriggerContext, type TriggerDetectionResult, type UninstallConstraintsOptions, type UninstallConstraintsSuccess, type UninstallResult, buildPreamble, createHarnessServer, createProgram, detectTrigger, executeSkill, findConfigFile, generateAgentDefinition, generateAgentDefinitions, generateAgentsMd, generateCIWorkflow, generateRuntime, generateSkillFiles, generateSlashCommands, getToolDefinitions, handleError, listPersonas, loadConfig, loadPersona, logger, renderClaudeCodeAgent, renderGeminiAgent, resolveConfig, runCheckArch, runCheckPhaseGate, runCrossCheck, runGraphExport, runGraphStatus, runImpactPreview, runIngest, runInstall, runInstallConstraints, runPersona, runQuery, runScan, runUninstall, runUninstallConstraints, startServer };