@harness-engineering/cli 1.12.0 → 1.13.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 (49) hide show
  1. package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +57 -9
  2. package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +1 -1
  3. package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +19 -2
  4. package/dist/agents/skills/claude-code/harness-execution/SKILL.md +39 -12
  5. package/dist/agents/skills/claude-code/harness-planning/SKILL.md +28 -11
  6. package/dist/agents/skills/claude-code/harness-roadmap/SKILL.md +34 -0
  7. package/dist/agents/skills/claude-code/harness-verification/SKILL.md +42 -0
  8. package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +57 -9
  9. package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +1 -1
  10. package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +19 -2
  11. package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +39 -12
  12. package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +28 -11
  13. package/dist/agents/skills/gemini-cli/harness-roadmap/SKILL.md +34 -0
  14. package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +42 -0
  15. package/dist/{agents-md-KIS2RSMG.js → agents-md-P2RHSUV7.js} +1 -1
  16. package/dist/{architecture-AJAUDRQQ.js → architecture-ESOOE26S.js} +2 -2
  17. package/dist/bin/harness-mcp.js +10 -10
  18. package/dist/bin/harness.js +12 -12
  19. package/dist/{check-phase-gate-K7QCSYRJ.js → check-phase-gate-S2MZKLFQ.js} +2 -2
  20. package/dist/{chunk-2SWJ4VO7.js → chunk-2VU4MFM3.js} +4 -4
  21. package/dist/{chunk-ZU2UBYBY.js → chunk-3KOLLWWE.js} +1 -1
  22. package/dist/{chunk-EAURF4LH.js → chunk-5VY23YK3.js} +1 -1
  23. package/dist/{chunk-747VBPA4.js → chunk-7KQSUZVG.js} +96 -50
  24. package/dist/{chunk-FLOEMHDF.js → chunk-7PZWR4LI.js} +3 -3
  25. package/dist/{chunk-AE2OWWDH.js → chunk-KELT6K6M.js} +590 -253
  26. package/dist/{chunk-TJVVU3HB.js → chunk-LD3DKUK5.js} +1 -1
  27. package/dist/{chunk-JLXOEO5C.js → chunk-MACVXDZK.js} +2 -2
  28. package/dist/{chunk-CTTFXXKJ.js → chunk-MI5XJQDY.js} +3 -3
  29. package/dist/{chunk-YXOG2277.js → chunk-PSNN4LWX.js} +2 -2
  30. package/dist/{chunk-B5SBNH4S.js → chunk-RZSUJBZZ.js} +74 -14
  31. package/dist/{chunk-OIGVQF5V.js → chunk-WPPDRIJL.js} +1 -1
  32. package/dist/{ci-workflow-NBL4OT4A.js → ci-workflow-4NYBUG6R.js} +1 -1
  33. package/dist/{dist-IJ4J4C5G.js → dist-WF4C7A4A.js} +25 -1
  34. package/dist/{docs-CPTMH3VY.js → docs-BPYCN2DR.js} +2 -2
  35. package/dist/{engine-BUWPAAGD.js → engine-LXLIWQQ3.js} +1 -1
  36. package/dist/{entropy-Z4FYVQ7L.js → entropy-4VDVV5CR.js} +2 -2
  37. package/dist/{feedback-TT6WF5YX.js → feedback-63QB5RCA.js} +1 -1
  38. package/dist/{generate-agent-definitions-J5HANRNR.js → generate-agent-definitions-QABOJG56.js} +1 -1
  39. package/dist/index.d.ts +41 -41
  40. package/dist/index.js +12 -12
  41. package/dist/{loader-PCU5YWRH.js → loader-Z2IT7QX3.js} +1 -1
  42. package/dist/{mcp-YM6QLHLZ.js → mcp-KQHEL5IF.js} +10 -10
  43. package/dist/{performance-YJVXOKIB.js → performance-26BH47O4.js} +2 -2
  44. package/dist/{review-pipeline-KGMIMLIE.js → review-pipeline-GHR3WFBI.js} +1 -1
  45. package/dist/{runtime-F6R27LD6.js → runtime-PDWD7UIK.js} +1 -1
  46. package/dist/{security-MX5VVXBC.js → security-UQFUZXEN.js} +1 -1
  47. package/dist/{validate-EFNMSFKD.js → validate-N7QJOKFZ.js} +2 -2
  48. package/dist/{validate-cross-check-LJX65SBS.js → validate-cross-check-EDQ5QGTM.js} +1 -1
  49. package/package.json +4 -4
@@ -45,7 +45,7 @@ var runCodeReviewDefinition = {
45
45
  };
46
46
  async function handleRunCodeReview(input) {
47
47
  try {
48
- const { parseDiff, runReviewPipeline } = await import("./dist-IJ4J4C5G.js");
48
+ const { parseDiff, runReviewPipeline } = await import("./dist-WF4C7A4A.js");
49
49
  const parseResult = parseDiff(input.diff);
50
50
  if (!parseResult.ok) {
51
51
  return {
@@ -84,7 +84,7 @@ var detectEntropyDefinition = {
84
84
  };
85
85
  async function handleDetectEntropy(input) {
86
86
  try {
87
- const { EntropyAnalyzer } = await import("./dist-IJ4J4C5G.js");
87
+ const { EntropyAnalyzer } = await import("./dist-WF4C7A4A.js");
88
88
  const typeFilter = input.type ?? "all";
89
89
  const analyzer = new EntropyAnalyzer({
90
90
  rootDir: sanitizePath(input.path),
@@ -144,7 +144,7 @@ async function handleDetectEntropy(input) {
144
144
  return resultToMcpResponse(result);
145
145
  }
146
146
  if (!result.ok) return resultToMcpResponse(result);
147
- const { createFixes, applyFixes, generateSuggestions } = await import("./dist-IJ4J4C5G.js");
147
+ const { createFixes, applyFixes, generateSuggestions } = await import("./dist-WF4C7A4A.js");
148
148
  const report = result.value;
149
149
  const deadCode = report.deadCode;
150
150
  const fixTypesConfig = input.fixTypes ? { fixTypes: input.fixTypes } : void 0;
@@ -32,12 +32,12 @@ async function handleCheckDocs(input) {
32
32
  const projectPath = sanitizePath(input.path);
33
33
  const scope = input.scope ?? "coverage";
34
34
  if (scope === "integrity") {
35
- const { validateKnowledgeMap } = await import("./dist-IJ4J4C5G.js");
35
+ const { validateKnowledgeMap } = await import("./dist-WF4C7A4A.js");
36
36
  const result2 = await validateKnowledgeMap(projectPath);
37
37
  return resultToMcpResponse(result2);
38
38
  }
39
39
  if (scope === "all") {
40
- const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-IJ4J4C5G.js");
40
+ const { checkDocCoverage: checkDocCoverage2, validateKnowledgeMap } = await import("./dist-WF4C7A4A.js");
41
41
  const domain2 = input.domain ?? "src";
42
42
  const { loadGraphStore: loadGraphStore2 } = await import("./graph-loader-KO4GJ5N2.js");
43
43
  const store2 = await loadGraphStore2(projectPath);
@@ -76,7 +76,7 @@ async function handleCheckDocs(input) {
76
76
  }
77
77
  return resultToMcpResponse(Ok({ coverage, integrity }));
78
78
  }
79
- const { checkDocCoverage } = await import("./dist-IJ4J4C5G.js");
79
+ const { checkDocCoverage } = await import("./dist-WF4C7A4A.js");
80
80
  const domain = input.domain ?? "src";
81
81
  const { loadGraphStore } = await import("./graph-loader-KO4GJ5N2.js");
82
82
  const store = await loadGraphStore(projectPath);
@@ -49,7 +49,7 @@ async function handleValidateProject(input) {
49
49
  checks.config = "pass";
50
50
  const config = configResult.value;
51
51
  try {
52
- const core = await import("./dist-IJ4J4C5G.js");
52
+ const core = await import("./dist-WF4C7A4A.js");
53
53
  if (typeof core.validateFileStructure === "function" && Array.isArray(config.conventions)) {
54
54
  const conventions = config.conventions;
55
55
  const structureResult = await core.validateFileStructure(projectPath, conventions);
@@ -68,7 +68,7 @@ async function handleValidateProject(input) {
68
68
  } catch {
69
69
  }
70
70
  try {
71
- const core = await import("./dist-IJ4J4C5G.js");
71
+ const core = await import("./dist-WF4C7A4A.js");
72
72
  if (typeof core.validateAgentsMap === "function") {
73
73
  const agentsMapPath = path.join(projectPath, "AGENTS.md");
74
74
  const agentsResult = await core.validateAgentsMap(agentsMapPath);
@@ -8,7 +8,7 @@ import {
8
8
  findConfigFile,
9
9
  findFiles,
10
10
  resolveConfig
11
- } from "./chunk-ZU2UBYBY.js";
11
+ } from "./chunk-3KOLLWWE.js";
12
12
  import {
13
13
  createGenerateAgentDefinitionsCommand,
14
14
  generateAgentDefinitions
@@ -50,7 +50,7 @@ import {
50
50
  generateSlashCommands,
51
51
  handleGetImpact,
52
52
  handleOrphanDeletion
53
- } from "./chunk-747VBPA4.js";
53
+ } from "./chunk-7KQSUZVG.js";
54
54
  import {
55
55
  VALID_PLATFORMS
56
56
  } from "./chunk-ZOAWBDWU.js";
@@ -108,6 +108,7 @@ import {
108
108
  parseDiff,
109
109
  parseManifest,
110
110
  parseSecurityConfig,
111
+ pruneLearnings,
111
112
  readLockfile,
112
113
  removeContributions,
113
114
  removeProvenance,
@@ -122,14 +123,14 @@ import {
122
123
  validateKnowledgeMap,
123
124
  writeConfig,
124
125
  writeLockfile
125
- } from "./chunk-AE2OWWDH.js";
126
+ } from "./chunk-KELT6K6M.js";
126
127
  import {
127
128
  Err,
128
129
  Ok
129
130
  } from "./chunk-MHBMTPW7.js";
130
131
 
131
132
  // src/index.ts
132
- import { Command as Command53 } from "commander";
133
+ import { Command as Command55 } from "commander";
133
134
 
134
135
  // src/commands/validate.ts
135
136
  import { Command } from "commander";
@@ -208,7 +209,7 @@ function createValidateCommand() {
208
209
  process.exit(result.error.exitCode);
209
210
  }
210
211
  if (opts.crossCheck) {
211
- const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-LJX65SBS.js");
212
+ const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-EDQ5QGTM.js");
212
213
  const cwd = process.cwd();
213
214
  const specsDir = path.join(cwd, "docs", "specs");
214
215
  const plansDir = path.join(cwd, "docs", "plans");
@@ -566,7 +567,7 @@ function createPerfCommand() {
566
567
  perf.command("bench [glob]").description("Run benchmarks via vitest bench").action(async (glob, _opts, cmd) => {
567
568
  const globalOpts = cmd.optsWithGlobals();
568
569
  const cwd = process.cwd();
569
- const { BenchmarkRunner } = await import("./dist-IJ4J4C5G.js");
570
+ const { BenchmarkRunner } = await import("./dist-WF4C7A4A.js");
570
571
  const runner = new BenchmarkRunner();
571
572
  const benchFiles = runner.discover(cwd, glob);
572
573
  if (benchFiles.length === 0) {
@@ -635,7 +636,7 @@ Results (${result.results.length} benchmarks):`);
635
636
  baselines.command("update").description("Update baselines from latest benchmark run").action(async (_opts, cmd) => {
636
637
  const globalOpts = cmd.optsWithGlobals();
637
638
  const cwd = process.cwd();
638
- const { BenchmarkRunner } = await import("./dist-IJ4J4C5G.js");
639
+ const { BenchmarkRunner } = await import("./dist-WF4C7A4A.js");
639
640
  const runner = new BenchmarkRunner();
640
641
  const manager = new BaselineManager(cwd);
641
642
  logger.info("Running benchmarks to update baselines...");
@@ -663,7 +664,7 @@ Results (${result.results.length} benchmarks):`);
663
664
  perf.command("report").description("Full performance report with metrics, trends, and hotspots").action(async (_opts, cmd) => {
664
665
  const globalOpts = cmd.optsWithGlobals();
665
666
  const cwd = process.cwd();
666
- const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-IJ4J4C5G.js");
667
+ const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-WF4C7A4A.js");
667
668
  const analyzer = new EntropyAnalyzer2({
668
669
  rootDir: path5.resolve(cwd),
669
670
  analyze: { complexity: true, coupling: true }
@@ -3027,8 +3028,8 @@ function createResetCommand() {
3027
3028
  }
3028
3029
  if (!opts.yes) {
3029
3030
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
3030
- const answer = await new Promise((resolve27) => {
3031
- rl.question("Reset project state? This cannot be undone. [y/N] ", resolve27);
3031
+ const answer = await new Promise((resolve28) => {
3032
+ rl.question("Reset project state? This cannot be undone. [y/N] ", resolve28);
3032
3033
  });
3033
3034
  rl.close();
3034
3035
  if (answer.toLowerCase() !== "y" && answer.toLowerCase() !== "yes") {
@@ -3435,10 +3436,10 @@ function prompt(question) {
3435
3436
  input: process.stdin,
3436
3437
  output: process.stdout
3437
3438
  });
3438
- return new Promise((resolve27) => {
3439
+ return new Promise((resolve28) => {
3439
3440
  rl.question(question, (answer) => {
3440
3441
  rl.close();
3441
- resolve27(answer.trim().toLowerCase());
3442
+ resolve28(answer.trim().toLowerCase());
3442
3443
  });
3443
3444
  });
3444
3445
  }
@@ -3920,7 +3921,7 @@ function createGraphCommand() {
3920
3921
  import { Command as Command43 } from "commander";
3921
3922
  function createMcpCommand() {
3922
3923
  return new Command43("mcp").description("Start the MCP (Model Context Protocol) server on stdio").action(async () => {
3923
- const { startServer: startServer2 } = await import("./mcp-YM6QLHLZ.js");
3924
+ const { startServer: startServer2 } = await import("./mcp-KQHEL5IF.js");
3924
3925
  await startServer2();
3925
3926
  });
3926
3927
  }
@@ -5108,9 +5109,67 @@ function createOrchestratorCommand() {
5108
5109
  return orchestrator;
5109
5110
  }
5110
5111
 
5112
+ // src/commands/learnings/index.ts
5113
+ import { Command as Command54 } from "commander";
5114
+
5115
+ // src/commands/learnings/prune.ts
5116
+ import { Command as Command53 } from "commander";
5117
+ import * as path44 from "path";
5118
+ async function handlePrune(opts) {
5119
+ const projectPath = path44.resolve(opts.path);
5120
+ const result = await pruneLearnings(projectPath, opts.stream);
5121
+ if (!result.ok) {
5122
+ logger.error(result.error.message);
5123
+ process.exit(ExitCode.ERROR);
5124
+ return;
5125
+ }
5126
+ const { kept, archived, patterns } = result.value;
5127
+ if (archived === 0 && patterns.length === 0) {
5128
+ logger.info(`Nothing to prune. ${kept} learnings in file, all within retention window.`);
5129
+ process.exit(ExitCode.SUCCESS);
5130
+ return;
5131
+ }
5132
+ if (patterns.length > 0) {
5133
+ printPatternProposals(patterns);
5134
+ }
5135
+ if (archived > 0) {
5136
+ logger.success(`Pruned ${archived} entries. ${kept} most recent entries retained.`);
5137
+ logger.info("Archived entries written to .harness/learnings-archive/");
5138
+ } else {
5139
+ logger.info(`No entries archived. ${kept} entries retained.`);
5140
+ }
5141
+ process.exit(ExitCode.SUCCESS);
5142
+ }
5143
+ function printPatternProposals(patterns) {
5144
+ console.log("\n--- Improvement Proposals ---\n");
5145
+ for (const pattern of patterns) {
5146
+ console.log(` [${pattern.tag}] ${pattern.count} learnings with this theme.`);
5147
+ console.log(` Proposal: These learnings suggest a recurring pattern in "${pattern.tag}".`);
5148
+ console.log(
5149
+ ` To add to roadmap: harness mcp manage_roadmap --action add --feature "<improvement>" --status planned
5150
+ `
5151
+ );
5152
+ }
5153
+ console.log(
5154
+ "Review the proposals above. If any warrant a process improvement, add them to the roadmap manually or via manage_roadmap.\n"
5155
+ );
5156
+ }
5157
+ function createPruneCommand() {
5158
+ return new Command53("prune").description(
5159
+ "Analyze global learnings for patterns, present improvement proposals, and archive old entries"
5160
+ ).option("--path <path>", "Project root path", ".").option("--stream <name>", "Target a specific stream").action(handlePrune);
5161
+ }
5162
+
5163
+ // src/commands/learnings/index.ts
5164
+ function createLearningsCommand() {
5165
+ const command = new Command54("learnings").description("Learnings management commands");
5166
+ command.addCommand(createPruneCommand());
5167
+ return command;
5168
+ }
5169
+
5111
5170
  // src/index.ts
5112
5171
  function createProgram() {
5113
- const program = new Command53();
5172
+ const program = new Command55();
5114
5173
  program.name("harness").description("CLI for Harness Engineering toolkit").version(CLI_VERSION).option("-c, --config <path>", "Path to config file").option("--json", "Output as JSON").option("--verbose", "Verbose output").option("--quiet", "Minimal output");
5115
5174
  program.addCommand(createValidateCommand());
5116
5175
  program.addCommand(createCheckDepsCommand());
@@ -5127,6 +5186,7 @@ function createProgram() {
5127
5186
  program.addCommand(createPersonaCommand());
5128
5187
  program.addCommand(createSkillCommand());
5129
5188
  program.addCommand(createStateCommand());
5189
+ program.addCommand(createLearningsCommand());
5130
5190
  program.addCommand(createCheckPhaseGateCommand());
5131
5191
  program.addCommand(createCreateSkillCommand());
5132
5192
  program.addCommand(createSetupMcpCommand());
@@ -38,7 +38,7 @@ async function handleCheckDependencies(input) {
38
38
  const configResult = resolveProjectConfig(projectPath);
39
39
  if (!configResult.ok) return resultToMcpResponse(configResult);
40
40
  try {
41
- const { validateDependencies, TypeScriptParser } = await import("./dist-IJ4J4C5G.js");
41
+ const { validateDependencies, TypeScriptParser } = await import("./dist-WF4C7A4A.js");
42
42
  const config = configResult.value;
43
43
  const rawLayers = Array.isArray(config.layers) ? config.layers : [];
44
44
  const layers = rawLayers.map((l) => ({
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  generateCIWorkflow
3
3
  } from "./chunk-VUCPTQ6G.js";
4
- import "./chunk-AE2OWWDH.js";
4
+ import "./chunk-KELT6K6M.js";
5
5
  import "./chunk-MHBMTPW7.js";
6
6
  export {
7
7
  generateCIWorkflow
@@ -74,6 +74,7 @@ import {
74
74
  ViolationSchema,
75
75
  addProvenance,
76
76
  analyzeDiff,
77
+ analyzeLearningPatterns,
77
78
  appendFailure,
78
79
  appendLearning,
79
80
  applyFixes,
@@ -82,6 +83,7 @@ import {
82
83
  archModule,
83
84
  architecture,
84
85
  archiveFailures,
86
+ archiveLearnings,
85
87
  archiveStream,
86
88
  buildDependencyGraph,
87
89
  buildExclusionSet,
@@ -89,6 +91,8 @@ import {
89
91
  checkDocCoverage,
90
92
  checkEligibility,
91
93
  classifyFinding,
94
+ clearFailuresCache,
95
+ clearLearningsCache,
92
96
  configureFeedback,
93
97
  constraintRuleId,
94
98
  contextBudget,
@@ -144,16 +148,20 @@ import {
144
148
  injectionRules,
145
149
  isSmallSuggestion,
146
150
  isUpdateCheckEnabled,
151
+ listActiveSessions,
147
152
  listStreams,
153
+ loadBudgetedLearnings,
148
154
  loadFailures,
149
155
  loadHandoff,
150
156
  loadRelevantLearnings,
157
+ loadSessionSummary,
151
158
  loadState,
152
159
  loadStreamIndex,
153
160
  logAgentAction,
154
161
  migrateToStreams,
155
162
  networkRules,
156
163
  nodeRules,
164
+ parseDateFromEntry,
157
165
  parseDiff,
158
166
  parseManifest,
159
167
  parseRoadmap,
@@ -161,6 +169,7 @@ import {
161
169
  parseSize,
162
170
  pathTraversalRules,
163
171
  previewFix,
172
+ pruneLearnings,
164
173
  reactRules,
165
174
  readCheckState,
166
175
  readLockfile,
@@ -172,6 +181,7 @@ import {
172
181
  resolveFileToLayer,
173
182
  resolveModelTier,
174
183
  resolveRuleSeverity,
184
+ resolveSessionDir,
175
185
  resolveStreamPath,
176
186
  resolveThresholds,
177
187
  runAll,
@@ -198,6 +208,7 @@ import {
198
208
  syncRoadmap,
199
209
  touchStream,
200
210
  trackAction,
211
+ updateSessionIndex,
201
212
  validateAgentsMap,
202
213
  validateBoundaries,
203
214
  validateCommitMessage,
@@ -210,8 +221,9 @@ import {
210
221
  violationId,
211
222
  writeConfig,
212
223
  writeLockfile,
224
+ writeSessionSummary,
213
225
  xssRules
214
- } from "./chunk-AE2OWWDH.js";
226
+ } from "./chunk-KELT6K6M.js";
215
227
  import {
216
228
  Err,
217
229
  Ok,
@@ -298,6 +310,7 @@ export {
298
310
  ViolationSchema,
299
311
  addProvenance,
300
312
  analyzeDiff,
313
+ analyzeLearningPatterns,
301
314
  appendFailure,
302
315
  appendLearning,
303
316
  applyFixes,
@@ -306,6 +319,7 @@ export {
306
319
  archModule,
307
320
  architecture,
308
321
  archiveFailures,
322
+ archiveLearnings,
309
323
  archiveStream,
310
324
  buildDependencyGraph,
311
325
  buildExclusionSet,
@@ -313,6 +327,8 @@ export {
313
327
  checkDocCoverage,
314
328
  checkEligibility,
315
329
  classifyFinding,
330
+ clearFailuresCache,
331
+ clearLearningsCache,
316
332
  configureFeedback,
317
333
  constraintRuleId,
318
334
  contextBudget,
@@ -370,16 +386,20 @@ export {
370
386
  isOk,
371
387
  isSmallSuggestion,
372
388
  isUpdateCheckEnabled,
389
+ listActiveSessions,
373
390
  listStreams,
391
+ loadBudgetedLearnings,
374
392
  loadFailures,
375
393
  loadHandoff,
376
394
  loadRelevantLearnings,
395
+ loadSessionSummary,
377
396
  loadState,
378
397
  loadStreamIndex,
379
398
  logAgentAction,
380
399
  migrateToStreams,
381
400
  networkRules,
382
401
  nodeRules,
402
+ parseDateFromEntry,
383
403
  parseDiff,
384
404
  parseManifest,
385
405
  parseRoadmap,
@@ -387,6 +407,7 @@ export {
387
407
  parseSize,
388
408
  pathTraversalRules,
389
409
  previewFix,
410
+ pruneLearnings,
390
411
  reactRules,
391
412
  readCheckState,
392
413
  readLockfile,
@@ -398,6 +419,7 @@ export {
398
419
  resolveFileToLayer,
399
420
  resolveModelTier,
400
421
  resolveRuleSeverity,
422
+ resolveSessionDir,
401
423
  resolveStreamPath,
402
424
  resolveThresholds,
403
425
  runAll,
@@ -424,6 +446,7 @@ export {
424
446
  syncRoadmap,
425
447
  touchStream,
426
448
  trackAction,
449
+ updateSessionIndex,
427
450
  validateAgentsMap,
428
451
  validateBoundaries,
429
452
  validateCommitMessage,
@@ -436,5 +459,6 @@ export {
436
459
  violationId,
437
460
  writeConfig,
438
461
  writeLockfile,
462
+ writeSessionSummary,
439
463
  xssRules
440
464
  };
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  checkDocsDefinition,
3
3
  handleCheckDocs
4
- } from "./chunk-CTTFXXKJ.js";
4
+ } from "./chunk-MI5XJQDY.js";
5
5
  import "./chunk-IDZNPTYD.js";
6
6
  import "./chunk-W6Y7ZW3Y.js";
7
- import "./chunk-AE2OWWDH.js";
7
+ import "./chunk-KELT6K6M.js";
8
8
  import "./chunk-MHBMTPW7.js";
9
9
  export {
10
10
  checkDocsDefinition,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  TemplateEngine
3
3
  } from "./chunk-C2ERUR3L.js";
4
- import "./chunk-AE2OWWDH.js";
4
+ import "./chunk-KELT6K6M.js";
5
5
  import "./chunk-MHBMTPW7.js";
6
6
  export {
7
7
  TemplateEngine
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  detectEntropyDefinition,
3
3
  handleDetectEntropy
4
- } from "./chunk-JLXOEO5C.js";
4
+ } from "./chunk-MACVXDZK.js";
5
5
  import "./chunk-IDZNPTYD.js";
6
6
  import "./chunk-W6Y7ZW3Y.js";
7
- import "./chunk-AE2OWWDH.js";
7
+ import "./chunk-KELT6K6M.js";
8
8
  import "./chunk-MHBMTPW7.js";
9
9
  export {
10
10
  detectEntropyDefinition,
@@ -5,7 +5,7 @@ import {
5
5
  handleCreateSelfReview,
6
6
  handleRequestPeerReview,
7
7
  requestPeerReviewDefinition
8
- } from "./chunk-FLOEMHDF.js";
8
+ } from "./chunk-7PZWR4LI.js";
9
9
  import "./chunk-IDZNPTYD.js";
10
10
  import "./chunk-W6Y7ZW3Y.js";
11
11
  export {
@@ -7,7 +7,7 @@ import "./chunk-KET4QQZB.js";
7
7
  import "./chunk-ZOAWBDWU.js";
8
8
  import "./chunk-HD4IBGLA.js";
9
9
  import "./chunk-3WGJMBKH.js";
10
- import "./chunk-AE2OWWDH.js";
10
+ import "./chunk-KELT6K6M.js";
11
11
  import "./chunk-MHBMTPW7.js";
12
12
  export {
13
13
  createGenerateAgentDefinitionsCommand,
package/dist/index.d.ts CHANGED
@@ -164,6 +164,39 @@ interface SkillSource {
164
164
  source: 'project' | 'community' | 'global';
165
165
  }
166
166
 
167
+ interface ImpactPreviewOptions {
168
+ detailed?: boolean;
169
+ perFile?: boolean;
170
+ path?: string;
171
+ }
172
+ declare function runImpactPreview(options: ImpactPreviewOptions): Promise<string>;
173
+
174
+ interface CheckArchOptions {
175
+ cwd?: string;
176
+ configPath?: string;
177
+ updateBaseline?: boolean;
178
+ json?: boolean;
179
+ module?: string;
180
+ }
181
+ interface CheckArchResult {
182
+ passed: boolean;
183
+ mode: 'baseline' | 'threshold-only';
184
+ totalViolations: number;
185
+ newViolations: Violation[];
186
+ resolvedViolations: string[];
187
+ preExisting: string[];
188
+ regressions: Array<{
189
+ category: string;
190
+ baselineValue: number;
191
+ currentValue: number;
192
+ delta: number;
193
+ }>;
194
+ thresholdViolations: Violation[];
195
+ baselineUpdated?: boolean;
196
+ warning?: string;
197
+ }
198
+ declare function runCheckArch(options: CheckArchOptions): Promise<Result<CheckArchResult, CLIError>>;
199
+
167
200
  /**
168
201
  * Supported output modes for the CLI.
169
202
  */
@@ -627,15 +660,15 @@ declare const HarnessConfigSchema: z.ZodObject<{
627
660
  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
661
  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
662
  }, "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
663
  enabled: boolean;
633
664
  baselinePath: string;
665
+ thresholds: Partial<Record<"circular-deps" | "layer-violations" | "complexity" | "coupling" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>;
666
+ modules: Record<string, Partial<Record<"circular-deps" | "layer-violations" | "complexity" | "coupling" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>>;
634
667
  }, {
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
668
  enabled?: boolean | undefined;
638
669
  baselinePath?: string | undefined;
670
+ thresholds?: Partial<Record<"circular-deps" | "layer-violations" | "complexity" | "coupling" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>> | undefined;
671
+ modules?: Record<string, Partial<Record<"circular-deps" | "layer-violations" | "complexity" | "coupling" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>> | undefined;
639
672
  }>>;
640
673
  /** How often (in ms) to check for CLI updates */
641
674
  updateCheckInterval: z.ZodOptional<z.ZodNumber>;
@@ -735,10 +768,10 @@ declare const HarnessConfigSchema: z.ZodObject<{
735
768
  } | undefined;
736
769
  } | undefined;
737
770
  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
771
  enabled: boolean;
741
772
  baselinePath: string;
773
+ thresholds: Partial<Record<"circular-deps" | "layer-violations" | "complexity" | "coupling" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>;
774
+ modules: Record<string, Partial<Record<"circular-deps" | "layer-violations" | "complexity" | "coupling" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>>;
742
775
  } | undefined;
743
776
  updateCheckInterval?: number | undefined;
744
777
  }, {
@@ -837,10 +870,10 @@ declare const HarnessConfigSchema: z.ZodObject<{
837
870
  } | undefined;
838
871
  } | undefined;
839
872
  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
873
  enabled?: boolean | undefined;
843
874
  baselinePath?: string | undefined;
875
+ thresholds?: Partial<Record<"circular-deps" | "layer-violations" | "complexity" | "coupling" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>> | undefined;
876
+ modules?: Record<string, Partial<Record<"circular-deps" | "layer-violations" | "complexity" | "coupling" | "forbidden-imports" | "module-size" | "dependency-depth", number | Record<string, number>>>> | undefined;
844
877
  } | undefined;
845
878
  updateCheckInterval?: number | undefined;
846
879
  }>;
@@ -1221,39 +1254,6 @@ declare function renderClaudeCodeAgent(def: AgentDefinition): string;
1221
1254
 
1222
1255
  declare function renderGeminiAgent(def: AgentDefinition): string;
1223
1256
 
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
-
1257
1257
  type ToolDefinition = {
1258
1258
  name: string;
1259
1259
  description: string;
package/dist/index.js CHANGED
@@ -12,7 +12,7 @@ import {
12
12
  runScan,
13
13
  runUninstall,
14
14
  runUninstallConstraints
15
- } from "./chunk-B5SBNH4S.js";
15
+ } from "./chunk-RZSUJBZZ.js";
16
16
  import {
17
17
  generateCIWorkflow
18
18
  } from "./chunk-VUCPTQ6G.js";
@@ -23,7 +23,7 @@ import {
23
23
  loadConfig,
24
24
  resolveConfig,
25
25
  runCheckPhaseGate
26
- } from "./chunk-ZU2UBYBY.js";
26
+ } from "./chunk-3KOLLWWE.js";
27
27
  import {
28
28
  AGENT_DESCRIPTIONS,
29
29
  DEFAULT_TOOLS,
@@ -66,18 +66,18 @@ import {
66
66
  generateSlashCommands,
67
67
  getToolDefinitions,
68
68
  startServer
69
- } from "./chunk-747VBPA4.js";
70
- import "./chunk-JLXOEO5C.js";
71
- import "./chunk-2SWJ4VO7.js";
72
- import "./chunk-FLOEMHDF.js";
73
- import "./chunk-EAURF4LH.js";
74
- import "./chunk-TJVVU3HB.js";
69
+ } from "./chunk-7KQSUZVG.js";
70
+ import "./chunk-MACVXDZK.js";
71
+ import "./chunk-2VU4MFM3.js";
72
+ import "./chunk-7PZWR4LI.js";
73
+ import "./chunk-5VY23YK3.js";
74
+ import "./chunk-LD3DKUK5.js";
75
75
  import "./chunk-ZOAWBDWU.js";
76
- import "./chunk-YXOG2277.js";
76
+ import "./chunk-PSNN4LWX.js";
77
77
  import "./chunk-2YPZKGAG.js";
78
- import "./chunk-OIGVQF5V.js";
78
+ import "./chunk-WPPDRIJL.js";
79
79
  import "./chunk-K6XAPGML.js";
80
- import "./chunk-CTTFXXKJ.js";
80
+ import "./chunk-MI5XJQDY.js";
81
81
  import "./chunk-IDZNPTYD.js";
82
82
  import "./chunk-W6Y7ZW3Y.js";
83
83
  import "./chunk-HD4IBGLA.js";
@@ -94,7 +94,7 @@ import {
94
94
  import {
95
95
  TemplateEngine
96
96
  } from "./chunk-C2ERUR3L.js";
97
- import "./chunk-AE2OWWDH.js";
97
+ import "./chunk-KELT6K6M.js";
98
98
  import "./chunk-MHBMTPW7.js";
99
99
  export {
100
100
  AGENT_DESCRIPTIONS,