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