@harness-engineering/cli 4.0.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/agents/skills/claude-code/product-advisor/SKILL.md +202 -0
  2. package/dist/agents/skills/claude-code/product-advisor/skill.yaml +74 -0
  3. package/dist/agents/skills/codex/product-advisor/SKILL.md +202 -0
  4. package/dist/agents/skills/codex/product-advisor/skill.yaml +74 -0
  5. package/dist/agents/skills/cursor/product-advisor/SKILL.md +202 -0
  6. package/dist/agents/skills/cursor/product-advisor/skill.yaml +74 -0
  7. package/dist/agents/skills/gemini-cli/product-advisor/SKILL.md +202 -0
  8. package/dist/agents/skills/gemini-cli/product-advisor/skill.yaml +74 -0
  9. package/dist/{agents-md-7OSNWU52.js → agents-md-VJLYEH2S.js} +4 -4
  10. package/dist/{analyzer-V633GUHY-MBCQWKDU.js → analyzer-V633GUHY-OV335HGM.js} +2 -2
  11. package/dist/{architecture-2XYGJGT3.js → architecture-YQH2NYXY.js} +5 -5
  12. package/dist/{assess-project-3KPP2D6M.js → assess-project-KOTAPAHD.js} +1 -1
  13. package/dist/bin/harness-mcp.js +16 -16
  14. package/dist/bin/harness.js +27 -27
  15. package/dist/{check-phase-gate-46U5AAXE.js → check-phase-gate-CHU2E3OU.js} +5 -5
  16. package/dist/{chunk-AK67S3O4.js → chunk-36GQREOE.js} +3 -3
  17. package/dist/{chunk-CLI4K2CH.js → chunk-4U5LDFCY.js} +1 -1
  18. package/dist/{chunk-VTUINXWR.js → chunk-4VXFZSYF.js} +1 -1
  19. package/dist/{chunk-HXMAIVV2.js → chunk-5RSXUAMN.js} +1 -1
  20. package/dist/{chunk-TTWNGOBT.js → chunk-6SCYTIF4.js} +6 -6
  21. package/dist/{chunk-N55WOGN3.js → chunk-6YFHUIGT.js} +1 -1
  22. package/dist/{chunk-WL3O2PKJ.js → chunk-7PJCK7UE.js} +8 -8
  23. package/dist/{chunk-PHX45JYN.js → chunk-7TIJXWG3.js} +2 -2
  24. package/dist/{chunk-SPE7P4GL.js → chunk-AAUY53CC.js} +1 -1
  25. package/dist/{chunk-VTU3QOJT.js → chunk-AX5KGRM6.js} +1 -1
  26. package/dist/{chunk-MYVTYFQD.js → chunk-E5EW5HVJ.js} +1 -1
  27. package/dist/{chunk-HMW3C5DP.js → chunk-EYMOPFSD.js} +2 -2
  28. package/dist/{chunk-6YXCZV33.js → chunk-GHBFNLV2.js} +278 -211
  29. package/dist/{chunk-363V6GPR.js → chunk-I3CGCZJF.js} +9 -9
  30. package/dist/{chunk-MSBJ445U.js → chunk-JPVOI7GP.js} +5 -5
  31. package/dist/{chunk-6NCREWWM.js → chunk-M7F2PPN3.js} +3 -3
  32. package/dist/{chunk-KLPX55TI.js → chunk-MMLQPHZ5.js} +210 -135
  33. package/dist/{chunk-BV45354Q.js → chunk-OQ6KOQEV.js} +9 -9
  34. package/dist/{chunk-ERILXQBP.js → chunk-RG3TNIUB.js} +610 -428
  35. package/dist/{chunk-GXCPDAS5.js → chunk-SDMV4QHM.js} +5 -5
  36. package/dist/{chunk-ZEYAOYJL.js → chunk-SEA2PFVI.js} +1 -1
  37. package/dist/{chunk-IYWT3JJW.js → chunk-T746REAE.js} +1 -1
  38. package/dist/{chunk-FZ4Q73HA.js → chunk-UWVMJEUJ.js} +1 -1
  39. package/dist/{chunk-PP6ZRL5T.js → chunk-WZJR6SOI.js} +536 -422
  40. package/dist/{chunk-XFHZ7GCI.js → chunk-XAVMTAUT.js} +2 -2
  41. package/dist/{chunk-S2RQPPL6.js → chunk-YANR2RL7.js} +1 -1
  42. package/dist/{chunk-2N4OENGE.js → chunk-YYFSFSB3.js} +1 -1
  43. package/dist/{ci-workflow-XJN4UO3Q.js → ci-workflow-HO4WKGNG.js} +4 -4
  44. package/dist/{dist-IPVFYGY2.js → dist-6D2F2J57.js} +3 -3
  45. package/dist/{dist-OWHMNL4W.js → dist-DWBTZXR5.js} +1 -1
  46. package/dist/{docs-RSFZTNPG.js → docs-FP47JONV.js} +5 -5
  47. package/dist/{engine-DJIHY4JT.js → engine-YUA6IYOG.js} +4 -4
  48. package/dist/{entropy-EAEKJKRM.js → entropy-DBW2INZU.js} +4 -4
  49. package/dist/{feedback-JT5X3DBC.js → feedback-BPHADTRQ.js} +1 -1
  50. package/dist/{generate-agent-definitions-CC6KED3E.js → generate-agent-definitions-KPVGBGDY.js} +5 -5
  51. package/dist/{glob-helper-GLZAURJC.js → glob-helper-VR6UCZZB.js} +1 -1
  52. package/dist/{graph-loader-HHXN5FLP.js → graph-loader-STFGYKZH.js} +1 -1
  53. package/dist/index.js +27 -27
  54. package/dist/{loader-UWNVTYBY.js → loader-QOJQ6NZM.js} +4 -4
  55. package/dist/{mcp-TCLNK7HG.js → mcp-ZPX6O767.js} +16 -16
  56. package/dist/{performance-R6O3N3UB.js → performance-FXYTGJGQ.js} +5 -5
  57. package/dist/{review-pipeline-MOOWXWSQ.js → review-pipeline-2TFQ5OAE.js} +4 -4
  58. package/dist/{runtime-RIWQUKBQ.js → runtime-XK6ZCHKE.js} +4 -4
  59. package/dist/{scan-P7YFKB77.js → scan-IYSVRPD2.js} +1 -1
  60. package/dist/{security-U76C54W6.js → security-4W2P5ZGI.js} +1 -1
  61. package/dist/{state-events-F44CUUZG.js → state-events-ECQAIZLU.js} +4 -4
  62. package/dist/{validate-IUAV7MOU.js → validate-64KTEGIE.js} +5 -5
  63. package/dist/{validate-cross-check-M2ZM6RFY.js → validate-cross-check-J5PVGICB.js} +4 -4
  64. package/package.json +1 -1
@@ -1,32 +1,32 @@
1
1
  import {
2
2
  generateRuntime
3
- } from "./chunk-S2RQPPL6.js";
3
+ } from "./chunk-YANR2RL7.js";
4
4
  import {
5
5
  generateAgentsMd
6
- } from "./chunk-IYWT3JJW.js";
6
+ } from "./chunk-T746REAE.js";
7
7
  import {
8
8
  generateCIWorkflow
9
- } from "./chunk-VTU3QOJT.js";
9
+ } from "./chunk-AX5KGRM6.js";
10
10
  import {
11
11
  readHarnessState
12
- } from "./chunk-SPE7P4GL.js";
12
+ } from "./chunk-AAUY53CC.js";
13
13
  import {
14
14
  runCrossCheck
15
- } from "./chunk-VTUINXWR.js";
15
+ } from "./chunk-4VXFZSYF.js";
16
16
  import {
17
17
  createGenerateAgentDefinitionsCommand,
18
18
  generateAgentDefinitions
19
- } from "./chunk-MYVTYFQD.js";
19
+ } from "./chunk-E5EW5HVJ.js";
20
20
  import {
21
21
  toKebabCase
22
22
  } from "./chunk-KET4QQZB.js";
23
23
  import {
24
24
  createScanCommand,
25
25
  loadIngestOptions
26
- } from "./chunk-2N4OENGE.js";
26
+ } from "./chunk-YYFSFSB3.js";
27
27
  import {
28
28
  TemplateEngine
29
- } from "./chunk-FZ4Q73HA.js";
29
+ } from "./chunk-UWVMJEUJ.js";
30
30
  import {
31
31
  generate,
32
32
  validate
@@ -37,7 +37,7 @@ import {
37
37
  import {
38
38
  listPersonas,
39
39
  loadPersona
40
- } from "./chunk-HXMAIVV2.js";
40
+ } from "./chunk-5RSXUAMN.js";
41
41
  import {
42
42
  runPersona
43
43
  } from "./chunk-GISMXMVL.js";
@@ -51,7 +51,7 @@ import {
51
51
  OutputFormatter,
52
52
  OutputMode,
53
53
  createCheckPhaseGateCommand
54
- } from "./chunk-PHX45JYN.js";
54
+ } from "./chunk-7TIJXWG3.js";
55
55
  import {
56
56
  appendFrameworkAgents,
57
57
  captureHealthSnapshot,
@@ -79,13 +79,13 @@ import {
79
79
  runSecurityCraft,
80
80
  runSpecCraft,
81
81
  runTestCraft
82
- } from "./chunk-ERILXQBP.js";
82
+ } from "./chunk-RG3TNIUB.js";
83
83
  import {
84
84
  VALID_PLATFORMS
85
85
  } from "./chunk-3ISINLYT.js";
86
86
  import {
87
87
  loadGraphStore
88
- } from "./chunk-CLI4K2CH.js";
88
+ } from "./chunk-4U5LDFCY.js";
89
89
  import {
90
90
  loadOrRebuildIndex
91
91
  } from "./chunk-WBVCN35T.js";
@@ -108,7 +108,7 @@ import {
108
108
  BranchingConfigSchema,
109
109
  findConfigFile,
110
110
  resolveConfig
111
- } from "./chunk-XFHZ7GCI.js";
111
+ } from "./chunk-XAVMTAUT.js";
112
112
  import {
113
113
  logger
114
114
  } from "./chunk-EBJQ6N4M.js";
@@ -224,7 +224,7 @@ import {
224
224
  writeConfig,
225
225
  writeLockfile,
226
226
  writeRegeneratedRoadmap
227
- } from "./chunk-KLPX55TI.js";
227
+ } from "./chunk-MMLQPHZ5.js";
228
228
  import {
229
229
  CLI_VERSION
230
230
  } from "./chunk-BM3PWGXQ.js";
@@ -237,7 +237,7 @@ import {
237
237
  detectDocDrift,
238
238
  generateSuggestions,
239
239
  validateDependencies
240
- } from "./chunk-N55WOGN3.js";
240
+ } from "./chunk-6YFHUIGT.js";
241
241
  import {
242
242
  Err,
243
243
  INDEXED_FILE_KINDS,
@@ -250,7 +250,7 @@ import {
250
250
  DesignConstraintAdapter,
251
251
  GraphStore,
252
252
  init_dist as init_dist2
253
- } from "./chunk-PP6ZRL5T.js";
253
+ } from "./chunk-WZJR6SOI.js";
254
254
  import {
255
255
  ArchConfigSchema,
256
256
  TimelineManager
@@ -450,7 +450,7 @@ function registerSkillsCommand(adoption) {
450
450
  const globalOpts = cmd.optsWithGlobals();
451
451
  const limit = Math.max(parseInt(opts.limit, 10) || 20, 1);
452
452
  const cwd = process.cwd();
453
- const { readAdoptionRecords, aggregateBySkill } = await import("./dist-IPVFYGY2.js");
453
+ const { readAdoptionRecords, aggregateBySkill } = await import("./dist-6D2F2J57.js");
454
454
  const records = readAdoptionRecords(cwd);
455
455
  if (records.length === 0) {
456
456
  if (globalOpts.json) {
@@ -486,7 +486,7 @@ function registerRecentCommand(adoption) {
486
486
  const globalOpts = cmd.optsWithGlobals();
487
487
  const limit = Math.max(parseInt(opts.limit, 10) || 20, 1);
488
488
  const cwd = process.cwd();
489
- const { readAdoptionRecords } = await import("./dist-IPVFYGY2.js");
489
+ const { readAdoptionRecords } = await import("./dist-6D2F2J57.js");
490
490
  const records = readAdoptionRecords(cwd);
491
491
  if (records.length === 0) {
492
492
  if (globalOpts.json) {
@@ -564,7 +564,7 @@ function registerSkillCommand(adoption) {
564
564
  adoption.command("skill <name>").description("Show detail for a specific skill").action(async (name, _opts, cmd) => {
565
565
  const globalOpts = cmd.optsWithGlobals();
566
566
  const cwd = process.cwd();
567
- const { readAdoptionRecords, aggregateBySkill } = await import("./dist-IPVFYGY2.js");
567
+ const { readAdoptionRecords, aggregateBySkill } = await import("./dist-6D2F2J57.js");
568
568
  const records = readAdoptionRecords(cwd);
569
569
  const skillRecords = records.filter((r) => r.skill === name);
570
570
  if (skillRecords.length === 0) {
@@ -1995,10 +1995,24 @@ function createCheckHarnessStrengthCommand() {
1995
1995
  init_dist3();
1996
1996
  import { Command as Command15 } from "commander";
1997
1997
  import * as path9 from "path";
1998
+ function resolveConfiguredEntryPoints(configPath) {
1999
+ const configResult = resolveConfig(configPath);
2000
+ if (!configResult.ok) return void 0;
2001
+ const config = configResult.value;
2002
+ const fromPerformance = config.performance?.entryPoints;
2003
+ if (Array.isArray(fromPerformance) && fromPerformance.length > 0) {
2004
+ return fromPerformance.filter((e) => typeof e === "string");
2005
+ }
2006
+ const fromEntropy = config.entropy?.entryPoints;
2007
+ if (Array.isArray(fromEntropy) && fromEntropy.length > 0) return fromEntropy;
2008
+ return void 0;
2009
+ }
1998
2010
  async function runCheckPerf(cwd, options) {
1999
2011
  const runAll2 = !options.structural && !options.size && !options.coupling;
2012
+ const entryPoints = resolveConfiguredEntryPoints(options.configPath);
2000
2013
  const analyzer = new EntropyAnalyzer({
2001
2014
  rootDir: path9.resolve(cwd),
2015
+ ...entryPoints && { entryPoints },
2002
2016
  analyze: {
2003
2017
  complexity: runAll2 || !!options.structural,
2004
2018
  coupling: runAll2 || !!options.coupling,
@@ -4331,8 +4345,7 @@ function promptYesNo(message) {
4331
4345
  });
4332
4346
  });
4333
4347
  }
4334
- function createDeliveriesCommand() {
4335
- const cmd = new Command32("deliveries").description("Inspect and manage webhook delivery queue");
4348
+ function registerListCommand(cmd) {
4336
4349
  cmd.command("list").description("List delivery queue entries (newest first; capped at 200 rows)").option("--status <status>", "Filter by status: pending|failed|delivered|dead").option("--subscription <id>", "Filter by subscription ID").action((opts) => {
4337
4350
  const queue = getQueue();
4338
4351
  try {
@@ -4345,6 +4358,8 @@ function createDeliveriesCommand() {
4345
4358
  queue.close();
4346
4359
  }
4347
4360
  });
4361
+ }
4362
+ function registerRetryCommand(cmd) {
4348
4363
  cmd.command("retry <id>").description("Re-enqueue a dead-lettered delivery by ID").action((id) => {
4349
4364
  const queue = getQueue();
4350
4365
  try {
@@ -4359,23 +4374,30 @@ function createDeliveriesCommand() {
4359
4374
  queue.close();
4360
4375
  }
4361
4376
  });
4377
+ }
4378
+ function buildPurgeOptions(opts) {
4379
+ const purgeOpts = {};
4380
+ if (opts.deadOnly) purgeOpts.deadOnly = true;
4381
+ if (opts.olderThan !== void 0) purgeOpts.olderThanMs = Number(opts.olderThan);
4382
+ if (opts.all) purgeOpts.all = true;
4383
+ return purgeOpts;
4384
+ }
4385
+ function ttyPurgeConfirm(count) {
4386
+ if (count === 0) {
4387
+ console.log("No matching rows to delete.");
4388
+ return false;
4389
+ }
4390
+ return promptYesNo(`Delete ${count} row(s)? [y/N] `);
4391
+ }
4392
+ function registerPurgeCommand(cmd) {
4362
4393
  cmd.command("purge").description("Delete delivery rows from the queue (requires at least one filter)").option("--dead-only", "Delete only dead-lettered rows").option("--older-than <ms>", "Delete delivered rows older than N milliseconds").option("--all", "Delete every row in the queue (use with caution)").action(async (opts) => {
4363
4394
  const queue = getQueue();
4364
4395
  try {
4365
- const purgeOpts = {};
4366
- if (opts.deadOnly) purgeOpts.deadOnly = true;
4367
- if (opts.olderThan !== void 0) purgeOpts.olderThanMs = Number(opts.olderThan);
4368
- if (opts.all) purgeOpts.all = true;
4396
+ const purgeOpts = buildPurgeOptions(opts);
4369
4397
  const isTty = Boolean(process.stdout.isTTY);
4370
4398
  const runOpts = {};
4371
4399
  if (isTty) {
4372
- runOpts.confirm = (count) => {
4373
- if (count === 0) {
4374
- console.log("No matching rows to delete.");
4375
- return false;
4376
- }
4377
- return promptYesNo(`Delete ${count} row(s)? [y/N] `);
4378
- };
4400
+ runOpts.confirm = ttyPurgeConfirm;
4379
4401
  }
4380
4402
  const result = await runDeliveriesPurge(queue, purgeOpts, runOpts);
4381
4403
  if (result === -1) {
@@ -4387,6 +4409,12 @@ function createDeliveriesCommand() {
4387
4409
  queue.close();
4388
4410
  }
4389
4411
  });
4412
+ }
4413
+ function createDeliveriesCommand() {
4414
+ const cmd = new Command32("deliveries").description("Inspect and manage webhook delivery queue");
4415
+ registerListCommand(cmd);
4416
+ registerRetryCommand(cmd);
4417
+ registerPurgeCommand(cmd);
4390
4418
  return cmd;
4391
4419
  }
4392
4420
 
@@ -4483,7 +4511,7 @@ async function readConnectorSyncStatus(graphDir) {
4483
4511
  return result;
4484
4512
  }
4485
4513
  async function runGraphStatus(projectPath) {
4486
- const { GraphStore: GraphStore2, loadGraphMetadata } = await import("./dist-OWHMNL4W.js");
4514
+ const { GraphStore: GraphStore2, loadGraphMetadata } = await import("./dist-DWBTZXR5.js");
4487
4515
  const graphDir = path18.join(projectPath, ".harness", "graph");
4488
4516
  const metaResult = await loadGraphMetadata(graphDir);
4489
4517
  if (metaResult.status === "not_found") {
@@ -4535,7 +4563,7 @@ async function runGraphStatus(projectPath) {
4535
4563
  // src/commands/graph/export.ts
4536
4564
  import * as path19 from "path";
4537
4565
  async function runGraphExport(projectPath, format) {
4538
- const { GraphStore: GraphStore2 } = await import("./dist-OWHMNL4W.js");
4566
+ const { GraphStore: GraphStore2 } = await import("./dist-DWBTZXR5.js");
4539
4567
  const graphDir = path19.join(projectPath, ".harness", "graph");
4540
4568
  const store = new GraphStore2();
4541
4569
  const loaded = await store.load(graphDir);
@@ -4568,7 +4596,7 @@ async function runGraphExport(projectPath, format) {
4568
4596
  import { Command as Command35 } from "commander";
4569
4597
  import * as path20 from "path";
4570
4598
  async function runQuery(projectPath, rootNodeId, opts) {
4571
- const { GraphStore: GraphStore2, ContextQL } = await import("./dist-OWHMNL4W.js");
4599
+ const { GraphStore: GraphStore2, ContextQL } = await import("./dist-DWBTZXR5.js");
4572
4600
  const store = new GraphStore2();
4573
4601
  const graphDir = path20.join(projectPath, ".harness", "graph");
4574
4602
  const loaded = await store.load(graphDir);
@@ -4673,7 +4701,7 @@ async function runIngest(projectPath, source, opts) {
4673
4701
  ConfluenceConnector,
4674
4702
  FigmaConnector,
4675
4703
  MiroConnector
4676
- } = await import("./dist-OWHMNL4W.js");
4704
+ } = await import("./dist-DWBTZXR5.js");
4677
4705
  const graphDir = path21.join(projectPath, ".harness", "graph");
4678
4706
  const store = new GraphStore2();
4679
4707
  await store.load(graphDir);
@@ -4689,7 +4717,7 @@ async function runIngest(projectPath, source, opts) {
4689
4717
  path21.join(projectPath, "docs", "changes")
4690
4718
  );
4691
4719
  const gitResult = await new GitIngestor(store).ingest(projectPath);
4692
- const { createExtractionRunner } = await import("./dist-OWHMNL4W.js");
4720
+ const { createExtractionRunner } = await import("./dist-DWBTZXR5.js");
4693
4721
  const extractedDir = path21.join(projectPath, ".harness", "knowledge", "extracted");
4694
4722
  const signalsResult = await createExtractionRunner().run(projectPath, store, extractedDir);
4695
4723
  const syncManager = new SyncManager(store, graphDir);
@@ -4739,7 +4767,7 @@ async function runIngest(projectPath, source, opts) {
4739
4767
  );
4740
4768
  break;
4741
4769
  case "business-signals": {
4742
- const { createExtractionRunner } = await import("./dist-OWHMNL4W.js");
4770
+ const { createExtractionRunner } = await import("./dist-DWBTZXR5.js");
4743
4771
  const extractedDir = path21.join(projectPath, ".harness", "knowledge", "extracted");
4744
4772
  result = await createExtractionRunner().run(projectPath, store, extractedDir);
4745
4773
  break;
@@ -6131,7 +6159,7 @@ function createInsightsCommand() {
6131
6159
  return new Command46("insights").description("Composite project report \u2014 health, entropy, decay, attention, impact.").option("--json", "Emit JSON to stdout instead of pretty text").option("--skip <list>", `Comma-separated keys to skip (${INSIGHTS_KEYS.join(",")})`).action(async (opts) => {
6132
6160
  const cwd = process.cwd();
6133
6161
  const skip = parseSkip2(opts.skip);
6134
- const { composeInsights } = await import("./dist-IPVFYGY2.js");
6162
+ const { composeInsights } = await import("./dist-6D2F2J57.js");
6135
6163
  const report = await composeInsights(cwd, { skip });
6136
6164
  if (opts.json) {
6137
6165
  console.log(JSON.stringify(report, null, 2));
@@ -7323,6 +7351,166 @@ ${file}`);
7323
7351
  import { Command as Command55 } from "commander";
7324
7352
  import * as path41 from "path";
7325
7353
  import chalk7 from "chalk";
7354
+ function resolveInferenceOptions(cfgKnowledge) {
7355
+ const patterns = cfgKnowledge?.domainPatterns;
7356
+ const blocklist = cfgKnowledge?.domainBlocklist;
7357
+ const hasPatterns = (patterns?.length ?? 0) > 0;
7358
+ const hasBlocklist = (blocklist?.length ?? 0) > 0;
7359
+ if (!hasPatterns && !hasBlocklist) {
7360
+ return void 0;
7361
+ }
7362
+ return {
7363
+ ...hasPatterns ? { extraPatterns: patterns } : {},
7364
+ ...hasBlocklist ? { extraBlocklist: blocklist } : {}
7365
+ };
7366
+ }
7367
+ function buildPipelineOptions(opts, projectDir, graphDir, inferenceOptions) {
7368
+ const pipelineOpts = {
7369
+ projectDir,
7370
+ fix: Boolean(opts.fix),
7371
+ ci: Boolean(opts.ci),
7372
+ ...opts.domain ? { domain: opts.domain } : {},
7373
+ graphDir,
7374
+ analyzeImages: Boolean(opts.analyzeImages),
7375
+ ...inferenceOptions ? { inferenceOptions } : {}
7376
+ };
7377
+ if (opts.imagePaths) {
7378
+ pipelineOpts.imagePaths = opts.imagePaths.split(",").map((p) => p.trim());
7379
+ }
7380
+ return pipelineOpts;
7381
+ }
7382
+ async function createAnalysisProvider() {
7383
+ try {
7384
+ const intelligence = await import("@harness-engineering/intelligence");
7385
+ const Provider = intelligence.AnthropicAnalysisProvider;
7386
+ const apiKey = process.env.ANTHROPIC_API_KEY;
7387
+ if (!apiKey) {
7388
+ logger.error("ANTHROPIC_API_KEY environment variable is required for --analyze-images");
7389
+ process.exit(1);
7390
+ }
7391
+ return new Provider({ apiKey });
7392
+ } catch {
7393
+ logger.error(
7394
+ "Image analysis requires @harness-engineering/intelligence with ANTHROPIC_API_KEY set."
7395
+ );
7396
+ process.exit(1);
7397
+ }
7398
+ }
7399
+ function printJsonResult(result) {
7400
+ console.log(
7401
+ JSON.stringify(
7402
+ {
7403
+ verdict: result.verdict,
7404
+ driftScore: result.driftScore,
7405
+ iterations: result.iterations,
7406
+ findings: result.findings,
7407
+ extraction: result.extraction,
7408
+ errors: result.errors,
7409
+ gaps: {
7410
+ domains: result.gaps.domains.length,
7411
+ totalEntries: result.gaps.totalEntries,
7412
+ totalExtracted: result.gaps.totalExtracted,
7413
+ totalGaps: result.gaps.totalGaps
7414
+ },
7415
+ remediations: result.remediations,
7416
+ contradictions: {
7417
+ count: result.contradictions.contradictions.length,
7418
+ sourcePairCounts: result.contradictions.sourcePairCounts
7419
+ },
7420
+ coverage: {
7421
+ overallScore: result.coverage.overallScore,
7422
+ overallGrade: result.coverage.overallGrade,
7423
+ domains: result.coverage.domains.length
7424
+ },
7425
+ ...result.materialization ? {
7426
+ materialization: {
7427
+ created: result.materialization.created.length,
7428
+ skipped: result.materialization.skipped.length,
7429
+ files: result.materialization.created.map((d) => d.filePath)
7430
+ }
7431
+ } : {}
7432
+ },
7433
+ null,
7434
+ 2
7435
+ )
7436
+ );
7437
+ }
7438
+ function printSummary(result) {
7439
+ const verdictColor = result.verdict === "pass" ? chalk7.green("PASS") : result.verdict === "warn" ? chalk7.yellow("WARN") : chalk7.red("FAIL");
7440
+ console.log("");
7441
+ console.log(`KNOWLEDGE PIPELINE -- Verdict: ${verdictColor}`);
7442
+ console.log("");
7443
+ console.log(` Drift Score: ${result.driftScore.toFixed(2)}`);
7444
+ console.log(
7445
+ ` Findings: ${result.findings.new} new, ${result.findings.stale} stale, ${result.findings.drifted} drifted, ${result.findings.contradicting} contradicting`
7446
+ );
7447
+ console.log(
7448
+ ` Extraction: ${result.extraction.codeSignals} code signals, ${result.extraction.diagrams} diagrams, ${result.extraction.linkerFacts} linker facts, ${result.extraction.businessKnowledge} business knowledge, ${result.extraction.decisions} decisions, ${result.extraction.images} images`
7449
+ );
7450
+ console.log(
7451
+ ` Gaps: ${result.gaps.domains.length} domains \u2014 ${result.gaps.totalEntries} documented / ${result.gaps.totalExtracted} extracted / ${result.gaps.totalGaps} undocumented`
7452
+ );
7453
+ if (result.iterations > 1) {
7454
+ console.log(` Convergence: ${result.iterations} iterations`);
7455
+ }
7456
+ if (result.remediations.length > 0) {
7457
+ console.log(` Remediations: ${result.remediations.length} applied`);
7458
+ }
7459
+ }
7460
+ function printIngestionErrors(result) {
7461
+ if (result.errors.length === 0) {
7462
+ return;
7463
+ }
7464
+ console.warn("");
7465
+ console.warn(` ${result.errors.length} ingestion warning(s):`);
7466
+ for (const err of result.errors) {
7467
+ console.warn(` - ${err}`);
7468
+ }
7469
+ }
7470
+ function printMaterialization(result) {
7471
+ if (!result.materialization) {
7472
+ return;
7473
+ }
7474
+ const mat = result.materialization;
7475
+ console.log(
7476
+ ` Materialization: ${mat.created.length} docs created, ${mat.skipped.length} skipped`
7477
+ );
7478
+ for (const doc of mat.created) {
7479
+ console.log(` ${chalk7.green("+")} ${doc.filePath}`);
7480
+ }
7481
+ }
7482
+ function printContradictions(result, opts) {
7483
+ if (!opts.checkContradictions && result.contradictions.contradictions.length === 0) {
7484
+ return;
7485
+ }
7486
+ console.log("");
7487
+ console.log(
7488
+ ` Contradictions: ${result.contradictions.contradictions.length} detected across ${result.contradictions.totalChecked} knowledge nodes`
7489
+ );
7490
+ for (const c of result.contradictions.contradictions) {
7491
+ console.log(` ${chalk7.red("!")} ${c.description} [${c.conflictType}] (${c.severity})`);
7492
+ }
7493
+ }
7494
+ function printCoverage(result, opts) {
7495
+ if (!opts.coverage && result.coverage.domains.length === 0) {
7496
+ return;
7497
+ }
7498
+ console.log("");
7499
+ console.log(` Coverage: ${result.coverage.overallGrade} (${result.coverage.overallScore}/100)`);
7500
+ for (const d of result.coverage.domains) {
7501
+ console.log(
7502
+ ` ${d.domain}: ${d.grade} (${d.score}/100) \u2014 ${d.knowledgeEntries} knowledge, ${d.linkedEntities}/${d.codeEntities} code linked`
7503
+ );
7504
+ }
7505
+ }
7506
+ function printHumanResult(result, opts) {
7507
+ printSummary(result);
7508
+ printIngestionErrors(result);
7509
+ printMaterialization(result);
7510
+ printContradictions(result, opts);
7511
+ printCoverage(result, opts);
7512
+ console.log("");
7513
+ }
7326
7514
  function createKnowledgePipelineCommand() {
7327
7515
  return new Command55("knowledge-pipeline").description("Run knowledge extraction, drift detection, and gap analysis").option("--fix", "Enable convergence-based auto-remediation (default: detect-only)").option("--ci", "Non-interactive mode \u2014 apply safe fixes only, report everything else").option("--domain <name>", "Limit pipeline to a specific knowledge domain").option("--drift-check", "Exit 1 if unresolved drift exists (CI gate mode)").option("--analyze-images", "Enable vision model analysis of image files").option("--image-paths <paths>", "Comma-separated image file paths for analysis").option("--coverage", "Display per-domain coverage report").option("--check-contradictions", "Display cross-source contradiction report").action(async (opts, cmd) => {
7328
7516
  const globalOpts = cmd.optsWithGlobals();
@@ -7331,7 +7519,7 @@ function createKnowledgePipelineCommand() {
7331
7519
  const graphDir = path41.join(projectDir, ".harness", "graph");
7332
7520
  const fs50 = await import("fs/promises");
7333
7521
  await fs50.mkdir(graphDir, { recursive: true });
7334
- const { GraphStore: GraphStore2, KnowledgePipelineRunner } = await import("./dist-OWHMNL4W.js");
7522
+ const { GraphStore: GraphStore2, KnowledgePipelineRunner } = await import("./dist-DWBTZXR5.js");
7335
7523
  const store = new GraphStore2();
7336
7524
  try {
7337
7525
  await store.load(graphDir);
@@ -7339,145 +7527,19 @@ function createKnowledgePipelineCommand() {
7339
7527
  }
7340
7528
  const cfgResult = resolveConfig();
7341
7529
  const cfgKnowledge = cfgResult.ok ? cfgResult.value.knowledge : void 0;
7342
- const inferenceOptions = cfgKnowledge && ((cfgKnowledge.domainPatterns?.length ?? 0) > 0 || (cfgKnowledge.domainBlocklist?.length ?? 0) > 0) ? {
7343
- ...(cfgKnowledge.domainPatterns?.length ?? 0) > 0 ? { extraPatterns: cfgKnowledge.domainPatterns } : {},
7344
- ...(cfgKnowledge.domainBlocklist?.length ?? 0) > 0 ? { extraBlocklist: cfgKnowledge.domainBlocklist } : {}
7345
- } : void 0;
7346
- const pipelineOpts = {
7347
- projectDir,
7348
- fix: Boolean(opts.fix),
7349
- ci: Boolean(opts.ci),
7350
- ...opts.domain ? { domain: opts.domain } : {},
7351
- graphDir,
7352
- analyzeImages: Boolean(opts.analyzeImages),
7353
- ...inferenceOptions ? { inferenceOptions } : {}
7354
- };
7355
- if (opts.imagePaths) {
7356
- pipelineOpts.imagePaths = opts.imagePaths.split(",").map((p) => p.trim());
7357
- }
7530
+ const inferenceOptions = resolveInferenceOptions(cfgKnowledge);
7531
+ const pipelineOpts = buildPipelineOptions(opts, projectDir, graphDir, inferenceOptions);
7358
7532
  if (opts.analyzeImages) {
7359
- try {
7360
- const intelligence = await import("@harness-engineering/intelligence");
7361
- const Provider = intelligence.AnthropicAnalysisProvider;
7362
- const apiKey = process.env.ANTHROPIC_API_KEY;
7363
- if (!apiKey) {
7364
- logger.error(
7365
- "ANTHROPIC_API_KEY environment variable is required for --analyze-images"
7366
- );
7367
- process.exit(1);
7368
- }
7369
- pipelineOpts.analysisProvider = new Provider({ apiKey });
7370
- } catch {
7371
- logger.error(
7372
- "Image analysis requires @harness-engineering/intelligence with ANTHROPIC_API_KEY set."
7373
- );
7374
- process.exit(1);
7375
- }
7533
+ pipelineOpts.analysisProvider = await createAnalysisProvider();
7376
7534
  }
7377
7535
  const runner = new KnowledgePipelineRunner(store);
7378
7536
  const result = await runner.run(
7379
7537
  pipelineOpts
7380
7538
  );
7381
7539
  if (globalOpts.json) {
7382
- console.log(
7383
- JSON.stringify(
7384
- {
7385
- verdict: result.verdict,
7386
- driftScore: result.driftScore,
7387
- iterations: result.iterations,
7388
- findings: result.findings,
7389
- extraction: result.extraction,
7390
- errors: result.errors,
7391
- gaps: {
7392
- domains: result.gaps.domains.length,
7393
- totalEntries: result.gaps.totalEntries,
7394
- totalExtracted: result.gaps.totalExtracted,
7395
- totalGaps: result.gaps.totalGaps
7396
- },
7397
- remediations: result.remediations,
7398
- contradictions: {
7399
- count: result.contradictions.contradictions.length,
7400
- sourcePairCounts: result.contradictions.sourcePairCounts
7401
- },
7402
- coverage: {
7403
- overallScore: result.coverage.overallScore,
7404
- overallGrade: result.coverage.overallGrade,
7405
- domains: result.coverage.domains.length
7406
- },
7407
- ...result.materialization ? {
7408
- materialization: {
7409
- created: result.materialization.created.length,
7410
- skipped: result.materialization.skipped.length,
7411
- files: result.materialization.created.map(
7412
- (d) => d.filePath
7413
- )
7414
- }
7415
- } : {}
7416
- },
7417
- null,
7418
- 2
7419
- )
7420
- );
7540
+ printJsonResult(result);
7421
7541
  } else {
7422
- const verdictColor = result.verdict === "pass" ? chalk7.green("PASS") : result.verdict === "warn" ? chalk7.yellow("WARN") : chalk7.red("FAIL");
7423
- console.log("");
7424
- console.log(`KNOWLEDGE PIPELINE -- Verdict: ${verdictColor}`);
7425
- console.log("");
7426
- console.log(` Drift Score: ${result.driftScore.toFixed(2)}`);
7427
- console.log(
7428
- ` Findings: ${result.findings.new} new, ${result.findings.stale} stale, ${result.findings.drifted} drifted, ${result.findings.contradicting} contradicting`
7429
- );
7430
- console.log(
7431
- ` Extraction: ${result.extraction.codeSignals} code signals, ${result.extraction.diagrams} diagrams, ${result.extraction.linkerFacts} linker facts, ${result.extraction.businessKnowledge} business knowledge, ${result.extraction.decisions} decisions, ${result.extraction.images} images`
7432
- );
7433
- console.log(
7434
- ` Gaps: ${result.gaps.domains.length} domains \u2014 ${result.gaps.totalEntries} documented / ${result.gaps.totalExtracted} extracted / ${result.gaps.totalGaps} undocumented`
7435
- );
7436
- if (result.iterations > 1) {
7437
- console.log(` Convergence: ${result.iterations} iterations`);
7438
- }
7439
- if (result.remediations.length > 0) {
7440
- console.log(` Remediations: ${result.remediations.length} applied`);
7441
- }
7442
- if (result.errors.length > 0) {
7443
- console.warn("");
7444
- console.warn(` ${result.errors.length} ingestion warning(s):`);
7445
- for (const err of result.errors) {
7446
- console.warn(` - ${err}`);
7447
- }
7448
- }
7449
- if (result.materialization) {
7450
- const mat = result.materialization;
7451
- console.log(
7452
- ` Materialization: ${mat.created.length} docs created, ${mat.skipped.length} skipped`
7453
- );
7454
- for (const doc of mat.created) {
7455
- console.log(` ${chalk7.green("+")} ${doc.filePath}`);
7456
- }
7457
- }
7458
- if (opts.checkContradictions || result.contradictions.contradictions.length > 0) {
7459
- console.log("");
7460
- console.log(
7461
- ` Contradictions: ${result.contradictions.contradictions.length} detected across ${result.contradictions.totalChecked} knowledge nodes`
7462
- );
7463
- for (const c of result.contradictions.contradictions) {
7464
- console.log(
7465
- ` ${chalk7.red("!")} ${c.description} [${c.conflictType}] (${c.severity})`
7466
- );
7467
- }
7468
- }
7469
- if (opts.coverage || result.coverage.domains.length > 0) {
7470
- console.log("");
7471
- console.log(
7472
- ` Coverage: ${result.coverage.overallGrade} (${result.coverage.overallScore}/100)`
7473
- );
7474
- for (const d of result.coverage.domains) {
7475
- console.log(
7476
- ` ${d.domain}: ${d.grade} (${d.score}/100) \u2014 ${d.knowledgeEntries} knowledge, ${d.linkedEntities}/${d.codeEntities} code linked`
7477
- );
7478
- }
7479
- }
7480
- console.log("");
7542
+ printHumanResult(result, opts);
7481
7543
  }
7482
7544
  const unresolvedDrift = result.findings.drifted + result.findings.stale + result.findings.contradicting;
7483
7545
  if (opts.driftCheck && unresolvedDrift > 0) {
@@ -8208,7 +8270,7 @@ function createMcpCommand() {
8208
8270
  parseBudget
8209
8271
  ).action(async (opts) => {
8210
8272
  const [{ startServer: startServer2, getToolDefinitions: getToolDefinitions2 }, { selectTier }] = await Promise.all([
8211
- import("./mcp-TCLNK7HG.js"),
8273
+ import("./mcp-ZPX6O767.js"),
8212
8274
  import("./tool-tiers-OKK5FE57.js")
8213
8275
  ]);
8214
8276
  if (opts.tools && opts.tools.length > 0) {
@@ -9283,7 +9345,7 @@ function registerBenchCommand(perf) {
9283
9345
  perf.command("bench [glob]").description("Run benchmarks via vitest bench").action(async (glob2, _opts, cmd) => {
9284
9346
  const globalOpts = cmd.optsWithGlobals();
9285
9347
  const cwd = process.cwd();
9286
- const { BenchmarkRunner } = await import("./dist-IPVFYGY2.js");
9348
+ const { BenchmarkRunner } = await import("./dist-6D2F2J57.js");
9287
9349
  const runner = new BenchmarkRunner();
9288
9350
  const benchFiles = runner.discover(cwd, glob2);
9289
9351
  if (benchFiles.length === 0) {
@@ -9347,7 +9409,7 @@ async function runBaselinesShow(globalOpts) {
9347
9409
  }
9348
9410
  async function runBaselinesUpdate(globalOpts) {
9349
9411
  const cwd = process.cwd();
9350
- const { BenchmarkRunner } = await import("./dist-IPVFYGY2.js");
9412
+ const { BenchmarkRunner } = await import("./dist-6D2F2J57.js");
9351
9413
  const runner = new BenchmarkRunner();
9352
9414
  const manager = new BaselineManager(cwd);
9353
9415
  logger.info("Running benchmarks to update baselines...");
@@ -9388,7 +9450,7 @@ function registerReportCommand(perf) {
9388
9450
  perf.command("report").description("Full performance report with metrics, trends, and hotspots").action(async (_opts, cmd) => {
9389
9451
  const globalOpts = cmd.optsWithGlobals();
9390
9452
  const cwd = process.cwd();
9391
- const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-IPVFYGY2.js");
9453
+ const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-6D2F2J57.js");
9392
9454
  const analyzer = new EntropyAnalyzer2({
9393
9455
  rootDir: path50.resolve(cwd),
9394
9456
  analyze: { complexity: true, coupling: true }
@@ -9917,7 +9979,7 @@ async function runPublishAnalyses(opts) {
9917
9979
  const nameToExternalId = await buildNameToExternalIdMap(projectPath);
9918
9980
  if (!nameToExternalId) return process.exit(1);
9919
9981
  const { AnalysisArchive } = await import("@harness-engineering/orchestrator");
9920
- const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-IPVFYGY2.js");
9982
+ const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-6D2F2J57.js");
9921
9983
  const archive = new AnalysisArchive(path52.join(projectPath, ".harness", "analyses"));
9922
9984
  const analyses = await archive.list();
9923
9985
  if (analyses.length === 0) {
@@ -11163,6 +11225,33 @@ function logSummary(result) {
11163
11225
  `Reconciled ${markedDone.length} row(s) to done: ${markedDone.join(", ")} (already-done: ${alreadyDone.length}, unmatched: ${unmatched.length}).`
11164
11226
  );
11165
11227
  }
11228
+ function parseFromRefsFlag(raw) {
11229
+ const refs = raw.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
11230
+ if (refs.length === 0) {
11231
+ logger.error(
11232
+ `--from-refs was provided ("${raw}") but contained no valid references; expected a comma-separated list of owner/repo#number`
11233
+ );
11234
+ process.exit(ExitCode.ERROR);
11235
+ }
11236
+ return refs;
11237
+ }
11238
+ function parseFromIssuesFlag(raw) {
11239
+ const parsed = raw.split(",").map((s) => Number.parseInt(s.trim(), 10)).filter((n) => Number.isInteger(n));
11240
+ if (parsed.length === 0) {
11241
+ logger.error(
11242
+ `--from-issues was provided ("${raw}") but contained no valid issue numbers; expected a comma-separated list of integers`
11243
+ );
11244
+ process.exit(ExitCode.ERROR);
11245
+ }
11246
+ return parsed;
11247
+ }
11248
+ function buildReconcileOptions(options) {
11249
+ const opts = {};
11250
+ if (options.cwd) opts.cwd = options.cwd;
11251
+ if (options.fromRefs !== void 0) opts.fromRefs = parseFromRefsFlag(options.fromRefs);
11252
+ if (options.fromIssues !== void 0) opts.fromIssues = parseFromIssuesFlag(options.fromIssues);
11253
+ return opts;
11254
+ }
11166
11255
  function createRoadmapReconcileCommand() {
11167
11256
  return new Command86("reconcile").description(
11168
11257
  "Flip roadmap rows whose linked GitHub issue is closed to done. Offline mode flips only issues closed as 'completed' (a 'not planned'/'wontfix' close is left untouched); the PR-merge auto-done workflow remains authoritative for cross-repo correctness."
@@ -11173,29 +11262,7 @@ function createRoadmapReconcileCommand() {
11173
11262
  "--from-refs <refs>",
11174
11263
  "comma-separated owner/repo#number closing-issue references (preferred; cross-repo safe; skips the network fetch)"
11175
11264
  ).action(async (options) => {
11176
- const opts = {};
11177
- if (options.cwd) opts.cwd = options.cwd;
11178
- if (options.fromRefs !== void 0) {
11179
- const refs = options.fromRefs.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
11180
- if (refs.length === 0) {
11181
- logger.error(
11182
- `--from-refs was provided ("${options.fromRefs}") but contained no valid references; expected a comma-separated list of owner/repo#number`
11183
- );
11184
- process.exit(ExitCode.ERROR);
11185
- }
11186
- opts.fromRefs = refs;
11187
- }
11188
- if (options.fromIssues !== void 0) {
11189
- const parsed = options.fromIssues.split(",").map((s) => Number.parseInt(s.trim(), 10)).filter((n) => Number.isInteger(n));
11190
- if (parsed.length === 0) {
11191
- logger.error(
11192
- `--from-issues was provided ("${options.fromIssues}") but contained no valid issue numbers; expected a comma-separated list of integers`
11193
- );
11194
- process.exit(ExitCode.ERROR);
11195
- }
11196
- opts.fromIssues = parsed;
11197
- }
11198
- const result = await runRoadmapReconcile(opts);
11265
+ const result = await runRoadmapReconcile(buildReconcileOptions(options));
11199
11266
  if (!result.ok) {
11200
11267
  logger.error(result.error.message);
11201
11268
  process.exit(result.error.exitCode);
@@ -12013,7 +12080,7 @@ async function detectLegacyLayout(cwd) {
12013
12080
  }
12014
12081
  async function runInitialGraphScan(cwd) {
12015
12082
  try {
12016
- const { runScan: runScan2 } = await import("./scan-P7YFKB77.js");
12083
+ const { runScan: runScan2 } = await import("./scan-IYSVRPD2.js");
12017
12084
  const result = await runScan2(cwd);
12018
12085
  return {
12019
12086
  status: "pass",
@@ -12409,7 +12476,7 @@ function resolvePhaseState(metadata, projectPath, phase) {
12409
12476
  }
12410
12477
  async function appendProjectState(content, metadata, projectPath, hasPathOpt) {
12411
12478
  if (!metadata?.state.persistent || !hasPathOpt) return content;
12412
- const { readHarnessState: readHarnessState2, isEmptyHarnessState } = await import("./state-events-F44CUUZG.js");
12479
+ const { readHarnessState: readHarnessState2, isEmptyHarnessState } = await import("./state-events-ECQAIZLU.js");
12413
12480
  const stateResult = await readHarnessState2(projectPath);
12414
12481
  if (!stateResult.ok || isEmptyHarnessState(stateResult.value)) return content;
12415
12482
  const stateContent = JSON.stringify(stateResult.value, null, 2);
@@ -13208,7 +13275,7 @@ function registerTrendsCommand(parent) {
13208
13275
  }
13209
13276
  });
13210
13277
  }
13211
- function registerListCommand(parent) {
13278
+ function registerListCommand2(parent) {
13212
13279
  parent.command("list").description("List all captured architecture snapshots").action(async (_opts, cmd) => {
13213
13280
  const globalOpts = cmd.optsWithGlobals();
13214
13281
  const mode = globalOpts.json ? OutputMode.JSON : OutputMode.TEXT;
@@ -13224,7 +13291,7 @@ function createSnapshotCommand() {
13224
13291
  const command = new Command105("snapshot").description("Architecture timeline snapshot commands");
13225
13292
  registerCaptureCommand(command);
13226
13293
  registerTrendsCommand(command);
13227
- registerListCommand(command);
13294
+ registerListCommand2(command);
13228
13295
  return command;
13229
13296
  }
13230
13297
 
@@ -13696,7 +13763,7 @@ async function runSyncAnalyses(opts) {
13696
13763
  return;
13697
13764
  }
13698
13765
  const { AnalysisArchive, loadPublishedIndex: loadPublishedIndex2, savePublishedIndex: savePublishedIndex2 } = await import("@harness-engineering/orchestrator");
13699
- const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-IPVFYGY2.js");
13766
+ const { GitHubIssuesSyncAdapter: GitHubIssuesSyncAdapter2 } = await import("./dist-6D2F2J57.js");
13700
13767
  const adapter = new GitHubIssuesSyncAdapter2({ token, config: trackerConfig });
13701
13768
  const archive = new AnalysisArchive(path74.join(projectPath, ".harness", "analyses"));
13702
13769
  const publishedIndex = loadPublishedIndex2(projectPath);
@@ -14339,7 +14406,7 @@ async function runTraceability(options) {
14339
14406
  const projectPath = process.cwd();
14340
14407
  const store = await loadGraphStore(projectPath);
14341
14408
  if (!store) handleNoStore2(mode);
14342
- const graphModule = await import("./dist-OWHMNL4W.js");
14409
+ const graphModule = await import("./dist-DWBTZXR5.js");
14343
14410
  const filterOptions = buildFilterOptions(options);
14344
14411
  const results = graphModule.queryTraceability(store, filterOptions);
14345
14412
  if (results.length === 0) handleEmptyResults(mode);
@@ -14904,7 +14971,7 @@ function createUpdateCommand() {
14904
14971
  // src/commands/usage.ts
14905
14972
  import { Command as Command125 } from "commander";
14906
14973
  async function loadAndPriceRecords(cwd, includeClaudeSessions = false) {
14907
- const { readCostRecords, loadPricingData, calculateCost, parseCCRecords } = await import("./dist-IPVFYGY2.js");
14974
+ const { readCostRecords, loadPricingData, calculateCost, parseCCRecords } = await import("./dist-6D2F2J57.js");
14908
14975
  const records = readCostRecords(cwd);
14909
14976
  if (includeClaudeSessions) {
14910
14977
  const ccRecords = parseCCRecords();
@@ -14997,7 +15064,7 @@ function registerDailyCommand(usage) {
14997
15064
  else logger.info("No usage data found. Run some harness sessions first.");
14998
15065
  return;
14999
15066
  }
15000
- const { aggregateByDay } = await import("./dist-IPVFYGY2.js");
15067
+ const { aggregateByDay } = await import("./dist-6D2F2J57.js");
15001
15068
  const limited = aggregateByDay(records).slice(0, days);
15002
15069
  if (globalOpts.json) {
15003
15070
  console.log(
@@ -15026,7 +15093,7 @@ function registerSessionsCommand(usage) {
15026
15093
  }
15027
15094
  return;
15028
15095
  }
15029
- const { aggregateBySession } = await import("./dist-IPVFYGY2.js");
15096
+ const { aggregateBySession } = await import("./dist-6D2F2J57.js");
15030
15097
  const sessionData = aggregateBySession(records);
15031
15098
  const limited = sessionData.slice(0, limit);
15032
15099
  if (globalOpts.json) {
@@ -15106,7 +15173,7 @@ function registerSessionCommand(usage) {
15106
15173
  cwd,
15107
15174
  globalOpts.includeClaudeSessions
15108
15175
  );
15109
- const { aggregateBySession } = await import("./dist-IPVFYGY2.js");
15176
+ const { aggregateBySession } = await import("./dist-6D2F2J57.js");
15110
15177
  const sessionData = aggregateBySession(records);
15111
15178
  const match = sessionData.find((s) => s.sessionId === id);
15112
15179
  if (!match) {
@@ -15141,7 +15208,7 @@ function registerLatestCommand(usage) {
15141
15208
  }
15142
15209
  return;
15143
15210
  }
15144
- const { aggregateBySession } = await import("./dist-IPVFYGY2.js");
15211
+ const { aggregateBySession } = await import("./dist-6D2F2J57.js");
15145
15212
  const sessionData = aggregateBySession(records);
15146
15213
  const latest = sessionData[0];
15147
15214
  if (!latest) {
@@ -15490,7 +15557,7 @@ function resolveValidateMode(globalOpts) {
15490
15557
  return OutputMode.TEXT;
15491
15558
  }
15492
15559
  async function printCrossCheckWarnings(mode) {
15493
- const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-M2ZM6RFY.js");
15560
+ const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-J5PVGICB.js");
15494
15561
  const cwd = process.cwd();
15495
15562
  const crossResult = await runCrossCheck2({
15496
15563
  specsDir: path79.join(cwd, "docs", "specs"),