@harness-engineering/cli 1.25.4 → 1.25.6

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 (123) hide show
  1. package/dist/agents/skills/claude-code/enforce-architecture/SKILL.md +12 -0
  2. package/dist/agents/skills/claude-code/harness-api-design/SKILL.md +12 -0
  3. package/dist/agents/skills/claude-code/harness-architecture-advisor/SKILL.md +12 -0
  4. package/dist/agents/skills/claude-code/harness-auth/SKILL.md +12 -0
  5. package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +30 -6
  6. package/dist/agents/skills/claude-code/harness-database/SKILL.md +12 -0
  7. package/dist/agents/skills/claude-code/harness-debugging/SKILL.md +38 -6
  8. package/dist/agents/skills/claude-code/harness-deployment/SKILL.md +12 -0
  9. package/dist/agents/skills/claude-code/harness-execution/SKILL.md +30 -6
  10. package/dist/agents/skills/claude-code/harness-planning/SKILL.md +20 -9
  11. package/dist/agents/skills/claude-code/harness-pre-commit-review/SKILL.md +59 -6
  12. package/dist/agents/skills/claude-code/harness-refactoring/SKILL.md +28 -7
  13. package/dist/agents/skills/claude-code/harness-security-scan/SKILL.md +12 -0
  14. package/dist/agents/skills/claude-code/harness-skill-authoring/SKILL.md +43 -8
  15. package/dist/agents/skills/claude-code/harness-soundness-review/SKILL.md +59 -7
  16. package/dist/agents/skills/claude-code/harness-tdd/SKILL.md +21 -0
  17. package/dist/agents/skills/claude-code/harness-verification/SKILL.md +31 -6
  18. package/dist/agents/skills/codex/enforce-architecture/SKILL.md +12 -0
  19. package/dist/agents/skills/codex/harness-api-design/SKILL.md +12 -0
  20. package/dist/agents/skills/codex/harness-architecture-advisor/SKILL.md +12 -0
  21. package/dist/agents/skills/codex/harness-auth/SKILL.md +12 -0
  22. package/dist/agents/skills/codex/harness-code-review/SKILL.md +30 -6
  23. package/dist/agents/skills/codex/harness-database/SKILL.md +12 -0
  24. package/dist/agents/skills/codex/harness-debugging/SKILL.md +38 -6
  25. package/dist/agents/skills/codex/harness-deployment/SKILL.md +12 -0
  26. package/dist/agents/skills/codex/harness-execution/SKILL.md +30 -6
  27. package/dist/agents/skills/codex/harness-planning/SKILL.md +20 -9
  28. package/dist/agents/skills/codex/harness-pre-commit-review/SKILL.md +59 -6
  29. package/dist/agents/skills/codex/harness-refactoring/SKILL.md +28 -7
  30. package/dist/agents/skills/codex/harness-security-scan/SKILL.md +12 -0
  31. package/dist/agents/skills/codex/harness-skill-authoring/SKILL.md +43 -8
  32. package/dist/agents/skills/codex/harness-soundness-review/SKILL.md +59 -7
  33. package/dist/agents/skills/codex/harness-tdd/SKILL.md +21 -0
  34. package/dist/agents/skills/codex/harness-verification/SKILL.md +31 -6
  35. package/dist/agents/skills/cursor/enforce-architecture/SKILL.md +12 -0
  36. package/dist/agents/skills/cursor/harness-api-design/SKILL.md +12 -0
  37. package/dist/agents/skills/cursor/harness-architecture-advisor/SKILL.md +12 -0
  38. package/dist/agents/skills/cursor/harness-auth/SKILL.md +12 -0
  39. package/dist/agents/skills/cursor/harness-code-review/SKILL.md +30 -6
  40. package/dist/agents/skills/cursor/harness-database/SKILL.md +12 -0
  41. package/dist/agents/skills/cursor/harness-debugging/SKILL.md +38 -6
  42. package/dist/agents/skills/cursor/harness-deployment/SKILL.md +12 -0
  43. package/dist/agents/skills/cursor/harness-execution/SKILL.md +30 -6
  44. package/dist/agents/skills/cursor/harness-planning/SKILL.md +20 -9
  45. package/dist/agents/skills/cursor/harness-pre-commit-review/SKILL.md +59 -6
  46. package/dist/agents/skills/cursor/harness-refactoring/SKILL.md +28 -7
  47. package/dist/agents/skills/cursor/harness-security-scan/SKILL.md +12 -0
  48. package/dist/agents/skills/cursor/harness-skill-authoring/SKILL.md +43 -8
  49. package/dist/agents/skills/cursor/harness-soundness-review/SKILL.md +59 -7
  50. package/dist/agents/skills/cursor/harness-tdd/SKILL.md +21 -0
  51. package/dist/agents/skills/cursor/harness-verification/SKILL.md +31 -6
  52. package/dist/agents/skills/gemini-cli/enforce-architecture/SKILL.md +12 -0
  53. package/dist/agents/skills/gemini-cli/harness-api-design/SKILL.md +12 -0
  54. package/dist/agents/skills/gemini-cli/harness-architecture-advisor/SKILL.md +12 -0
  55. package/dist/agents/skills/gemini-cli/harness-auth/SKILL.md +12 -0
  56. package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +30 -6
  57. package/dist/agents/skills/gemini-cli/harness-database/SKILL.md +12 -0
  58. package/dist/agents/skills/gemini-cli/harness-debugging/SKILL.md +38 -6
  59. package/dist/agents/skills/gemini-cli/harness-deployment/SKILL.md +12 -0
  60. package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +30 -6
  61. package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +20 -9
  62. package/dist/agents/skills/gemini-cli/harness-pre-commit-review/SKILL.md +59 -6
  63. package/dist/agents/skills/gemini-cli/harness-refactoring/SKILL.md +28 -7
  64. package/dist/agents/skills/gemini-cli/harness-security-scan/SKILL.md +12 -0
  65. package/dist/agents/skills/gemini-cli/harness-skill-authoring/SKILL.md +43 -8
  66. package/dist/agents/skills/gemini-cli/harness-soundness-review/SKILL.md +59 -7
  67. package/dist/agents/skills/gemini-cli/harness-tdd/SKILL.md +21 -0
  68. package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +31 -6
  69. package/dist/{agents-md-MCUM4SIZ.js → agents-md-2PYJM2MK.js} +3 -3
  70. package/dist/{architecture-HNIO6AUX.js → architecture-VCLB7A23.js} +4 -4
  71. package/dist/{assess-project-6MV5TNY3.js → assess-project-64C6LIKN.js} +1 -1
  72. package/dist/bin/harness-mcp.js +16 -15
  73. package/dist/bin/harness.js +27 -115
  74. package/dist/business-knowledge-6RHYJOB3.js +7 -0
  75. package/dist/{check-phase-gate-VCBQHQAC.js → check-phase-gate-RT6PGEHY.js} +4 -4
  76. package/dist/{chunk-MI6MA6OP.js → chunk-42ZZLMYD.js} +169 -118
  77. package/dist/{chunk-BUYW3SA2.js → chunk-43VBX44J.js} +219 -107
  78. package/dist/{chunk-UV3BZMGT.js → chunk-4YEBV2FT.js} +2 -2
  79. package/dist/{chunk-5BQ5BOJL.js → chunk-7BAGSY5Q.js} +1 -1
  80. package/dist/{chunk-FSNPBT74.js → chunk-BUJOMC3O.js} +1 -1
  81. package/dist/{chunk-M55DGGF3.js → chunk-CBZECDCW.js} +5 -5
  82. package/dist/{chunk-XTITAVUR.js → chunk-EY6F2QXW.js} +1 -1
  83. package/dist/{chunk-6VZQJ5CX.js → chunk-FL6A72LV.js} +1 -1
  84. package/dist/{chunk-CXJTVICF.js → chunk-JQCS75DY.js} +4 -4
  85. package/dist/{chunk-WIQA4BSH.js → chunk-JUXFYB2K.js} +1 -1
  86. package/dist/{chunk-FES2YEQU.js → chunk-KJC4SE7C.js} +9 -9
  87. package/dist/{chunk-4NK7Z3BP.js → chunk-R2BI5UPK.js} +1 -1
  88. package/dist/{chunk-2KZAXESR.js → chunk-R7P2FMJT.js} +360 -183
  89. package/dist/chunk-RC5ZY3EV.js +82 -0
  90. package/dist/{chunk-K2SON7TI.js → chunk-RDQGCHKD.js} +252 -57
  91. package/dist/{chunk-EHRZMOQ2.js → chunk-RKZW3FDF.js} +1 -1
  92. package/dist/{chunk-BOQRTARD.js → chunk-SMY35HJM.js} +1 -1
  93. package/dist/{chunk-UQZBZINS.js → chunk-SZZ5UQL7.js} +6 -6
  94. package/dist/{chunk-AT74HEQM.js → chunk-U2OMWI7Z.js} +1 -1
  95. package/dist/{chunk-P7PANON5.js → chunk-VELT5VAG.js} +1 -1
  96. package/dist/{chunk-YTP2UDPV.js → chunk-WEOGCL7B.js} +3 -3
  97. package/dist/{chunk-TYV4EUAD.js → chunk-X2JJ3CPG.js} +8 -8
  98. package/dist/{chunk-GEEYCQDS.js → chunk-XLO4AXXM.js} +9 -9
  99. package/dist/{chunk-47N6R2F4.js → chunk-XMEEYMGE.js} +1 -1
  100. package/dist/{chunk-FIQL2HND.js → chunk-Y5JA4J2M.js} +2 -2
  101. package/dist/{chunk-F23H3U5U.js → chunk-ZAKUCM7O.js} +2 -2
  102. package/dist/{ci-workflow-RTM7VVTD.js → ci-workflow-SZL3KVUK.js} +3 -3
  103. package/dist/{dist-RADHOOXG.js → dist-GRW3X2ZQ.js} +3 -1
  104. package/dist/{dist-WCSJHQPK.js → dist-T3DGV5UN.js} +16 -2
  105. package/dist/{docs-UBOGGHTY.js → docs-WDLJORLK.js} +4 -4
  106. package/dist/{engine-MJJAP5CH.js → engine-2YWYRCKK.js} +3 -3
  107. package/dist/{entropy-EMSXF2PX.js → entropy-PJGTOORX.js} +3 -3
  108. package/dist/{feedback-ZLUX72HD.js → feedback-M5KCJKL2.js} +1 -1
  109. package/dist/{generate-agent-definitions-AWLPJ27C.js → generate-agent-definitions-MFDW6LZT.js} +4 -4
  110. package/dist/{graph-loader-JHQVQRUS.js → graph-loader-QMKXT454.js} +1 -1
  111. package/dist/hooks/telemetry-reporter.js +22 -1
  112. package/dist/index.d.ts +5 -5
  113. package/dist/index.js +26 -25
  114. package/dist/{loader-JVSJZSWZ.js → loader-6O52FYHE.js} +3 -3
  115. package/dist/{mcp-JZ7YB7TD.js → mcp-GGNFWKVC.js} +16 -15
  116. package/dist/{performance-7AGWJUY4.js → performance-337U5URQ.js} +4 -4
  117. package/dist/{review-pipeline-ZWVQJTJX.js → review-pipeline-DB5RD4SN.js} +3 -3
  118. package/dist/{runtime-D6YUQPP2.js → runtime-B74EN2WD.js} +3 -3
  119. package/dist/{scan-MPJ6JHUY.js → scan-DXQUHGTT.js} +1 -1
  120. package/dist/{security-JLZUAQYT.js → security-3AYN6FVU.js} +1 -1
  121. package/dist/{validate-TIIHRPMA.js → validate-35CD7VWN.js} +4 -4
  122. package/dist/{validate-cross-check-ZOWFA3DB.js → validate-cross-check-LJKXBQYH.js} +3 -3
  123. package/package.json +5 -5
@@ -13,13 +13,13 @@ import {
13
13
  NODE_STABILITY,
14
14
  init_dist as init_dist2,
15
15
  queryTraceability
16
- } from "./chunk-K2SON7TI.js";
16
+ } from "./chunk-RDQGCHKD.js";
17
17
  import {
18
18
  __esm,
19
19
  __export
20
20
  } from "./chunk-KFQGP6VL.js";
21
21
 
22
- // ../core/dist/chunk-QLTIBLN5.mjs
22
+ // ../core/dist/chunk-UWAI34RR.mjs
23
23
  import { z } from "zod";
24
24
  import { createHash } from "crypto";
25
25
  import { minimatch } from "minimatch";
@@ -1734,8 +1734,8 @@ async function toHaveMaxDepDepth(received, maxDepth) {
1734
1734
  };
1735
1735
  }
1736
1736
  var ArchMetricCategorySchema, ViolationSchema, MetricResultSchema, CategoryBaselineSchema, ArchBaselineSchema, CategoryRegressionSchema, ArchDiffResultSchema, ThresholdConfigSchema, ArchConfigSchema, ConstraintRuleSchema, ViolationSnapshotSchema, ViolationHistorySchema, EmergenceConfidenceSchema, EmergentConstraintSuggestionSchema, EmergenceResultSchema, accessAsync, readFileAsync, EXTENSION_BY_LANG, CircularDepsCollector, TypeScriptParser, EXTENSION_MAP, parserCache, initialized, GRAMMAR_MAP, TOP_LEVEL_TYPES, METHOD_TYPES, IDENTIFIER_TYPES, NAME_EXTRACTORS, pythonStrategy, goStrategy, RUST_USE_ARG_TYPES, RUST_PUB_ITEM_TYPES, rustStrategy, JAVA_IMPORT_TYPES, JAVA_EXPORT_TYPES, javaStrategy, STRATEGIES, TreeSitterParser, ParserRegistry, defaultRegistry, LayerViolationCollector, ArchBaselineManager, DEFAULT_THRESHOLDS, FUNCTION_PATTERNS, DECISION_PATTERNS, ComplexityCollector, DEFAULT_THRESHOLDS2, CouplingCollector, ForbiddenImportCollector, ModuleSizeCollector, DepDepthCollector, defaultCollectors, archMatchers;
1737
- var init_chunk_QLTIBLN5 = __esm({
1738
- "../core/dist/chunk-QLTIBLN5.mjs"() {
1737
+ var init_chunk_UWAI34RR = __esm({
1738
+ "../core/dist/chunk-UWAI34RR.mjs"() {
1739
1739
  "use strict";
1740
1740
  init_dist();
1741
1741
  ArchMetricCategorySchema = z.enum([
@@ -2780,6 +2780,7 @@ var init_chunk_QLTIBLN5 = __esm({
2780
2780
  var dist_exports = {};
2781
2781
  __export(dist_exports, {
2782
2782
  AGENT_DESCRIPTORS: () => AGENT_DESCRIPTORS,
2783
+ AGREEMENT_LINE_GAP: () => AGREEMENT_LINE_GAP,
2783
2784
  ARCHITECTURE_DESCRIPTOR: () => ARCHITECTURE_DESCRIPTOR,
2784
2785
  AdjustedForecastSchema: () => AdjustedForecastSchema,
2785
2786
  AgentActionEmitter: () => AgentActionEmitter,
@@ -2798,6 +2799,7 @@ __export(dist_exports, {
2798
2799
  CACHE_TTL_MS: () => CACHE_TTL_MS,
2799
2800
  CINotifier: () => CINotifier,
2800
2801
  COMPLIANCE_DESCRIPTOR: () => COMPLIANCE_DESCRIPTOR,
2802
+ CORROBORATED_AGREEMENT: () => CORROBORATED_AGREEMENT,
2801
2803
  CategoryBaselineSchema: () => CategoryBaselineSchema,
2802
2804
  CategoryForecastSchema: () => CategoryForecastSchema,
2803
2805
  CategoryRegressionSchema: () => CategoryRegressionSchema,
@@ -2823,9 +2825,11 @@ __export(dist_exports, {
2823
2825
  DEFAULT_STREAM_INDEX: () => DEFAULT_STREAM_INDEX,
2824
2826
  DEFAULT_TOKEN_BUDGET: () => DEFAULT_TOKEN_BUDGET,
2825
2827
  DESTRUCTIVE_BASH: () => DESTRUCTIVE_BASH,
2828
+ DOMAIN_BASELINES: () => DOMAIN_BASELINES,
2826
2829
  DepDepthCollector: () => DepDepthCollector,
2827
2830
  DirectionSchema: () => DirectionSchema,
2828
2831
  EMPTY_SUPPLY_CHAIN: () => EMPTY_SUPPLY_CHAIN,
2832
+ EVIDENCE_SATURATION: () => EVIDENCE_SATURATION,
2829
2833
  EXTENSION_MAP: () => EXTENSION_MAP,
2830
2834
  EmergenceConfidenceSchema: () => EmergenceConfidenceSchema,
2831
2835
  EmergenceResultSchema: () => EmergenceResultSchema,
@@ -2835,6 +2839,7 @@ __export(dist_exports, {
2835
2839
  EntropyConfigSchema: () => EntropyConfigSchema,
2836
2840
  Err: () => Err,
2837
2841
  ExclusionSet: () => ExclusionSet,
2842
+ FACTOR_WEIGHTS: () => FACTOR_WEIGHTS,
2838
2843
  FailureEntrySchema: () => FailureEntrySchema,
2839
2844
  FileSink: () => FileSink,
2840
2845
  FindingLifecycleSchema: () => FindingLifecycleSchema,
@@ -2872,6 +2877,7 @@ __export(dist_exports, {
2872
2877
  SECURITY_DESCRIPTOR: () => SECURITY_DESCRIPTOR,
2873
2878
  SESSION_SECTION_NAMES: () => SESSION_SECTION_NAMES,
2874
2879
  STALENESS_WARNING_DAYS: () => STALENESS_WARNING_DAYS,
2880
+ STANDALONE_AGREEMENT: () => STANDALONE_AGREEMENT,
2875
2881
  STANDARD_COGNITIVE_MODES: () => STANDARD_COGNITIVE_MODES,
2876
2882
  STATUS_RANK: () => STATUS_RANK,
2877
2883
  SecurityCategorySnapshotSchema: () => SecurityCategorySnapshotSchema,
@@ -2908,6 +2914,7 @@ __export(dist_exports, {
2908
2914
  TrendResultSchema: () => TrendResultSchema,
2909
2915
  TruncationStrategy: () => TruncationStrategy,
2910
2916
  TypeScriptParser: () => TypeScriptParser,
2917
+ VALIDATION_SCORES: () => VALIDATION_SCORES,
2911
2918
  VALID_SCOPES: () => VALID_SCOPES,
2912
2919
  VERSION: () => VERSION,
2913
2920
  ViolationHistoryManager: () => ViolationHistoryManager,
@@ -3320,6 +3327,7 @@ import * as fs35 from "fs";
3320
3327
  import * as path34 from "path";
3321
3328
  import * as fs37 from "fs";
3322
3329
  import * as path36 from "path";
3330
+ import { execFileSync as execFileSync2 } from "child_process";
3323
3331
  import * as fs36 from "fs";
3324
3332
  import * as path35 from "path";
3325
3333
  import * as crypto4 from "crypto";
@@ -8812,6 +8820,27 @@ async function loadBudgetedLearnings(projectPath, options) {
8812
8820
  }
8813
8821
  return Ok(budgeted);
8814
8822
  }
8823
+ function buildEntryFromFrontmatter(line, fm) {
8824
+ const rootCauseMatch = line.match(/\[root_cause:([^\]]+)\]/);
8825
+ const triedMatch = line.match(/\[tried:([^\]]+)\]/);
8826
+ return {
8827
+ hash: fm.hash,
8828
+ tags: fm.tags,
8829
+ summary: line,
8830
+ fullText: "",
8831
+ ...rootCauseMatch?.[1] ? { rootCause: rootCauseMatch[1] } : {},
8832
+ ...triedMatch?.[1] ? { triedAndFailed: triedMatch[1].split(",").map((s) => s.trim()) } : {}
8833
+ };
8834
+ }
8835
+ function buildEntryFromLine(line) {
8836
+ const idx = extractIndexEntry(line);
8837
+ return {
8838
+ hash: idx.hash,
8839
+ tags: idx.tags,
8840
+ summary: line,
8841
+ fullText: ""
8842
+ };
8843
+ }
8815
8844
  async function loadIndexEntries(projectPath, skillName, stream, session) {
8816
8845
  try {
8817
8846
  const dirResult = await getStateDir(projectPath, stream, session);
@@ -8833,31 +8862,11 @@ async function loadIndexEntries(projectPath, skillName, stream, session) {
8833
8862
  pendingFrontmatter = fm;
8834
8863
  continue;
8835
8864
  }
8836
- const isDatedBullet = /^- \*\*\d{4}-\d{2}-\d{2}/.test(line);
8837
- const isHeading = /^## \d{4}-\d{2}-\d{2}/.test(line);
8838
- if (isDatedBullet || isHeading) {
8839
- if (pendingFrontmatter) {
8840
- const rootCauseMatch = line.match(/\[root_cause:([^\]]+)\]/);
8841
- const triedMatch = line.match(/\[tried:([^\]]+)\]/);
8842
- indexEntries.push({
8843
- hash: pendingFrontmatter.hash,
8844
- tags: pendingFrontmatter.tags,
8845
- summary: line,
8846
- fullText: "",
8847
- // Placeholder — full text not loaded in index mode
8848
- ...rootCauseMatch?.[1] ? { rootCause: rootCauseMatch[1] } : {},
8849
- ...triedMatch?.[1] ? { triedAndFailed: triedMatch[1].split(",").map((s) => s.trim()) } : {}
8850
- });
8851
- pendingFrontmatter = null;
8852
- } else {
8853
- const idx = extractIndexEntry(line);
8854
- indexEntries.push({
8855
- hash: idx.hash,
8856
- tags: idx.tags,
8857
- summary: line,
8858
- fullText: ""
8859
- });
8860
- }
8865
+ const isEntryStart = /^- \*\*\d{4}-\d{2}-\d{2}/.test(line) || /^## \d{4}-\d{2}-\d{2}/.test(line);
8866
+ if (isEntryStart) {
8867
+ const entry = pendingFrontmatter ? buildEntryFromFrontmatter(line, pendingFrontmatter) : buildEntryFromLine(line);
8868
+ indexEntries.push(entry);
8869
+ pendingFrontmatter = null;
8861
8870
  currentBlock = [line];
8862
8871
  } else if (line.trim() !== "" && currentBlock.length > 0) {
8863
8872
  currentBlock.push(line);
@@ -11614,50 +11623,48 @@ function buildMergedTitle(a, b, domains) {
11614
11623
  const cleanTitle = primaryFinding.title.replace(/^\[.*?\]\s*/, "");
11615
11624
  return { title: `[${domainList}] ${cleanTitle}`, primaryFinding };
11616
11625
  }
11626
+ function setIfDefined(target, key, value) {
11627
+ if (value !== void 0) target[key] = value;
11628
+ }
11617
11629
  function mergeSecurityFields(merged, primary, a, b) {
11618
- const cweId = primary.cweId ?? a.cweId ?? b.cweId;
11619
- const owaspCategory = primary.owaspCategory ?? a.owaspCategory ?? b.owaspCategory;
11620
- const confidence = primary.confidence ?? a.confidence ?? b.confidence;
11621
- const remediation = pickLongest(a.remediation, b.remediation);
11630
+ setIfDefined(merged, "cweId", primary.cweId ?? a.cweId ?? b.cweId);
11631
+ setIfDefined(
11632
+ merged,
11633
+ "owaspCategory",
11634
+ primary.owaspCategory ?? a.owaspCategory ?? b.owaspCategory
11635
+ );
11636
+ setIfDefined(merged, "confidence", primary.confidence ?? a.confidence ?? b.confidence);
11637
+ setIfDefined(merged, "remediation", pickLongest(a.remediation, b.remediation));
11622
11638
  const mergedRefs = [.../* @__PURE__ */ new Set([...a.references ?? [], ...b.references ?? []])];
11623
- if (cweId !== void 0) merged.cweId = cweId;
11624
- if (owaspCategory !== void 0) merged.owaspCategory = owaspCategory;
11625
- if (confidence !== void 0) merged.confidence = confidence;
11626
- if (remediation !== void 0) merged.remediation = remediation;
11627
11639
  if (mergedRefs.length > 0) merged.references = mergedRefs;
11628
11640
  }
11641
+ function pickHigherRank(aVal, bVal, rankMap) {
11642
+ return (rankMap[aVal] ?? 0) >= (rankMap[bVal] ?? 0) ? aVal : bVal;
11643
+ }
11644
+ function mergedLineRange(a, b) {
11645
+ return [Math.min(a[0], b[0]), Math.max(a[1], b[1])];
11646
+ }
11647
+ function mergeTrustScore(a, b) {
11648
+ const max = Math.max(a.trustScore ?? 0, b.trustScore ?? 0);
11649
+ return max > 0 ? max : void 0;
11650
+ }
11629
11651
  function mergeFindings(a, b) {
11630
- const highestSeverity = SEVERITY_RANK[a.severity] >= SEVERITY_RANK[b.severity] ? a.severity : b.severity;
11631
- const highestValidatedBy = (VALIDATED_BY_RANK[a.validatedBy] ?? 0) >= (VALIDATED_BY_RANK[b.validatedBy] ?? 0) ? a.validatedBy : b.validatedBy;
11632
- const longestRationale = a.rationale.length >= b.rationale.length ? a.rationale : b.rationale;
11633
- const evidenceSet = /* @__PURE__ */ new Set([...a.evidence, ...b.evidence]);
11634
- const lineRange = [
11635
- Math.min(a.lineRange[0], b.lineRange[0]),
11636
- Math.max(a.lineRange[1], b.lineRange[1])
11637
- ];
11638
11652
  const domains = /* @__PURE__ */ new Set([a.domain, b.domain]);
11639
- const suggestion = pickLongest(a.suggestion, b.suggestion);
11640
11653
  const { title, primaryFinding } = buildMergedTitle(a, b, domains);
11641
11654
  const merged = {
11642
11655
  id: primaryFinding.id,
11643
11656
  file: a.file,
11644
- lineRange,
11657
+ lineRange: mergedLineRange(a.lineRange, b.lineRange),
11645
11658
  domain: primaryFinding.domain,
11646
- severity: highestSeverity,
11659
+ severity: pickHigherRank(a.severity, b.severity, SEVERITY_RANK),
11647
11660
  title,
11648
- rationale: longestRationale,
11649
- evidence: [...evidenceSet],
11650
- validatedBy: highestValidatedBy
11661
+ rationale: a.rationale.length >= b.rationale.length ? a.rationale : b.rationale,
11662
+ evidence: [.../* @__PURE__ */ new Set([...a.evidence, ...b.evidence])],
11663
+ validatedBy: pickHigherRank(a.validatedBy, b.validatedBy, VALIDATED_BY_RANK)
11651
11664
  };
11652
- if (suggestion !== void 0) {
11653
- merged.suggestion = suggestion;
11654
- }
11665
+ setIfDefined(merged, "suggestion", pickLongest(a.suggestion, b.suggestion));
11666
+ setIfDefined(merged, "trustScore", mergeTrustScore(a, b));
11655
11667
  mergeSecurityFields(merged, primaryFinding, a, b);
11656
- const trustA = a.trustScore ?? 0;
11657
- const trustB = b.trustScore ?? 0;
11658
- if (trustA > 0 || trustB > 0) {
11659
- merged.trustScore = Math.max(trustA, trustB);
11660
- }
11661
11668
  return merged;
11662
11669
  }
11663
11670
  function deduplicateFindings(options) {
@@ -12004,14 +12011,15 @@ function findCorroboratedIds(findings) {
12004
12011
  }
12005
12012
  return corroborated;
12006
12013
  }
12007
- function computeTrustScores(findings) {
12014
+ function computeTrustScores(findings, options) {
12008
12015
  if (findings.length === 0) return [];
12009
12016
  const corroboratedIds = findCorroboratedIds(findings);
12017
+ const domainAccuracy = options?.domainAccuracy;
12010
12018
  return findings.map((finding) => {
12011
12019
  const validationFactor = VALIDATION_SCORES[finding.validatedBy];
12012
12020
  const evidenceFactor = Math.min(1, finding.evidence.length / EVIDENCE_SATURATION);
12013
12021
  const agreementFactor = corroboratedIds.has(finding.id) ? CORROBORATED_AGREEMENT : STANDALONE_AGREEMENT;
12014
- const historicalFactor = DOMAIN_BASELINES[finding.domain];
12022
+ const historicalFactor = domainAccuracy?.[finding.domain] ?? DOMAIN_BASELINES[finding.domain];
12015
12023
  const raw = FACTOR_WEIGHTS.validation * validationFactor + FACTOR_WEIGHTS.evidence * evidenceFactor + FACTOR_WEIGHTS.agreement * agreementFactor + FACTOR_WEIGHTS.historical * historicalFactor;
12016
12024
  const trustScore = Math.round(raw * 100);
12017
12025
  return { ...finding, trustScore };
@@ -12255,7 +12263,8 @@ async function runReviewPipeline(options) {
12255
12263
  checkDepsOutput,
12256
12264
  config = {},
12257
12265
  commitHistory,
12258
- sessionSlug
12266
+ sessionSlug,
12267
+ domainAccuracy
12259
12268
  } = options;
12260
12269
  if (flags.ci && prMetadata) {
12261
12270
  const eligibility = checkEligibility(prMetadata, true);
@@ -12375,7 +12384,10 @@ async function runReviewPipeline(options) {
12375
12384
  projectRoot,
12376
12385
  fileContents
12377
12386
  });
12378
- const scoredFindings = computeTrustScores(validatedFindings);
12387
+ const scoredFindings = computeTrustScores(
12388
+ validatedFindings,
12389
+ domainAccuracy ? { domainAccuracy } : void 0
12390
+ );
12379
12391
  let evidenceCoverage;
12380
12392
  if (sessionSlug) {
12381
12393
  try {
@@ -13849,23 +13861,54 @@ function getOrCreateInstallId(projectRoot) {
13849
13861
  fs36.writeFileSync(installIdFile, id, { encoding: "utf-8", mode: 384 });
13850
13862
  return id;
13851
13863
  }
13852
- function readIdentity(projectRoot) {
13853
- const filePath = path36.join(projectRoot, ".harness", "telemetry.json");
13864
+ function parseIdentityFromTelemetryFile(filePath) {
13865
+ const identity = {};
13854
13866
  try {
13855
13867
  const raw = fs37.readFileSync(filePath, "utf-8");
13856
13868
  const parsed = JSON.parse(raw);
13857
- if (parsed && typeof parsed === "object" && parsed.identity) {
13858
- const { project, team, alias } = parsed.identity;
13859
- const identity = {};
13860
- if (typeof project === "string") identity.project = project;
13861
- if (typeof team === "string") identity.team = team;
13862
- if (typeof alias === "string") identity.alias = alias;
13863
- return identity;
13864
- }
13865
- return {};
13869
+ const src = parsed?.identity;
13870
+ if (!src || typeof src !== "object") return identity;
13871
+ if (typeof src.project === "string") identity.project = src.project;
13872
+ if (typeof src.team === "string") identity.team = src.team;
13873
+ if (typeof src.alias === "string") identity.alias = src.alias;
13866
13874
  } catch {
13867
- return {};
13868
13875
  }
13876
+ return identity;
13877
+ }
13878
+ function readProjectNameFallback(configPath) {
13879
+ try {
13880
+ const raw = fs37.readFileSync(configPath, "utf-8");
13881
+ const config = JSON.parse(raw);
13882
+ return typeof config?.name === "string" ? config.name : void 0;
13883
+ } catch {
13884
+ return void 0;
13885
+ }
13886
+ }
13887
+ function readGitAliasFallback(cwd) {
13888
+ try {
13889
+ const gitName = execFileSync2("git", ["config", "user.name"], {
13890
+ cwd,
13891
+ encoding: "utf-8",
13892
+ timeout: 2e3,
13893
+ stdio: ["pipe", "pipe", "pipe"]
13894
+ }).trim();
13895
+ return gitName || void 0;
13896
+ } catch {
13897
+ return void 0;
13898
+ }
13899
+ }
13900
+ function readIdentity(projectRoot) {
13901
+ const filePath = path36.join(projectRoot, ".harness", "telemetry.json");
13902
+ const identity = parseIdentityFromTelemetryFile(filePath);
13903
+ if (!identity.project) {
13904
+ const fallbackProject = readProjectNameFallback(path36.join(projectRoot, "harness.config.json"));
13905
+ if (fallbackProject) identity.project = fallbackProject;
13906
+ }
13907
+ if (!identity.alias) {
13908
+ const fallbackAlias = readGitAliasFallback(projectRoot);
13909
+ if (fallbackAlias) identity.alias = fallbackAlias;
13910
+ }
13911
+ return identity;
13869
13912
  }
13870
13913
  function resolveConsent(projectRoot, config) {
13871
13914
  if (process.env.DO_NOT_TRACK === "1") return { allowed: false };
@@ -13887,7 +13930,7 @@ function collectEvents(projectRoot, consent) {
13887
13930
  return records.map(
13888
13931
  (record) => ({
13889
13932
  event: "skill_invocation",
13890
- distinctId,
13933
+ distinct_id: distinctId,
13891
13934
  timestamp: record.startedAt,
13892
13935
  properties: {
13893
13936
  installId,
@@ -13928,10 +13971,10 @@ async function send(events, apiKey) {
13928
13971
  }
13929
13972
  }
13930
13973
  }
13931
- var VALID_TYPES, CONVENTIONAL_PATTERN, DEFAULT_AGNIX_TIMEOUT_MS, HARNESS_AGNIX_DISABLE, HARNESS_AGNIX_BIN, CLAUDE_MD_WARN_BYTES, CLAUDE_MD_ERROR_BYTES, CONTEXT_FILES, MIN_DESCRIPTION_LENGTH, SETTINGS_PATHS, KNOWN_HOOK_EVENTS, MCP_SETTINGS_FILES, REQUIRED_SECTIONS, SETTINGS_FILES, KNOWN_AGNIX_TOOLS, DEFAULT_SECTIONS, DEFAULT_RATIOS, NODE_TYPE_TO_CATEGORY, SECTION_LEVEL_MAP, DEFAULT_LEVEL, DEFAULT_BUDGET, DEFAULT_LOADER_CONFIG, LEVEL_FRACTIONS, PHASE_PRIORITIES, ManifestSchema, BundleConstraintsSchema, BundleSchema, ContributionsSchema, LockfilePackageSchema, LockfileSchema, SharableLayerSchema, SharableForbiddenImportSchema, SharableBoundaryConfigSchema, SharableSecurityRulesSchema, VALID_SCOPES, LINE_PATTERN, START_PATTERN, END_PATTERN, CODE_BLOCK_LANGUAGES, DEFAULT_DRIFT_CONFIG, FILE_TYPES, EXPORT_TYPES, CONVENTION_DESCRIPTIONS, RULE_CHECKERS, EntropyAnalyzer, readFile42, writeFile32, unlink22, mkdir22, copyFile2, DEFAULT_FIX_CONFIG, EXPORT_TYPE_KEYWORD, ALWAYS_UNSAFE_TYPES, idCounter, DEAD_CODE_FIX_ACTIONS, MustExportRuleSchema, MustExportDefaultRuleSchema, NoExportRuleSchema, MustImportRuleSchema, NoImportRuleSchema, NamingRuleSchema, MaxExportsRuleSchema, MaxLinesRuleSchema, RequireJSDocRuleSchema, RuleSchema, ConfigPatternSchema, PatternConfigSchema, DriftConfigSchema, DeadCodeConfigSchema, EntropyConfigSchema, BaselineManager, BenchmarkRunner, RegressionDetector, SKIP_DIRS, SOURCE_EXTENSIONS, FUNCTION_DECL_RE, CONST_DECL_RE, CriticalPathResolver, NoOpTelemetryAdapter, NoOpExecutor, ConsoleSink, feedbackConfig, ChecklistBuilder, AgentActionEmitter, globalEmitter, FileSink, NoOpSink, CategorySnapshotSchema, TimelineSnapshotSchema, TimelineFileSchema, TrendLineSchema, TrendResultSchema, DEFAULT_STABILITY_THRESHOLDS, ALL_CATEGORIES, TimelineManager, ConfidenceTierSchema, RegressionResultSchema, DirectionSchema, CategoryForecastSchema, SpecImpactSignalsSchema, SpecImpactEstimateSchema, ContributingFeatureSchema, AdjustedForecastSchema, PredictionWarningSchema, StabilityForecastSchema, PredictionResultSchema, PredictionOptionsSchema, VALID_STATUSES, EM_DASH, VALID_PRIORITIES, ALL_CATEGORIES2, DIRECTION_THRESHOLD, PredictionEngine, DEFAULT_COEFFICIENTS, SpecImpactEstimator, EMPTY_HISTORY, ViolationHistoryManager, NORMALIZERS, MAX_SAMPLES, DEFAULT_WINDOW_WEEKS, DEFAULT_MIN_OCCURRENCES, FailureEntrySchema, HandoffSchema, GateCheckSchema, GateResultSchema, GateConfigSchema, HarnessStateSchema, DEFAULT_STATE, StreamInfoSchema, StreamIndexSchema, DEFAULT_STREAM_INDEX, HARNESS_DIR, STATE_FILE, LEARNINGS_FILE, FAILURES_FILE, HANDOFF_FILE, GATE_CONFIG_FILE, INDEX_FILE, SESSIONS_DIR, SESSION_INDEX_FILE, SUMMARY_FILE, SESSION_STATE_FILE, ARCHIVE_DIR, CONTENT_HASHES_FILE, EVENTS_FILE, STREAMS_DIR, STREAM_NAME_REGEX, branchCache, BRANCH_CACHE_TTL_MS, STATE_FILES, MAX_CACHE_ENTRIES, learningsCacheMap, WEIGHTS, PROMOTABLE_OUTCOMES, failuresCacheMap, FAILURE_LINE_REGEX, SAFE_GATE_COMMAND, SkillEventSchema, knownHashesCache, EVENT_FORMATTERS, RuleRegistry, DEFAULT_SECURITY_CONFIG, RuleOverrideSchema, SecurityConfigSchema, secretRules, injectionRules, xssRules, cryptoRules, pathTraversalRules, networkRules, deserializationRules, agentConfigRules, mcpRules, insecureDefaultsRules, sharpEdgesRules, nodeRules, expressRules, reactRules, goRules, SecurityScanner, hiddenUnicodePatterns, reRolingPatterns, permissionEscalationPatterns, encodedPayloadPatterns, indirectInjectionPatterns, contextManipulationPatterns, socialEngineeringPatterns, suspiciousPatterns, ALL_PATTERNS, DESTRUCTIVE_BASH, TAINT_DURATION_MS, DEFAULT_SESSION_ID, SecurityCategorySnapshotSchema, SupplyChainSnapshotSchema, SecurityTimelineSnapshotSchema, FindingLifecycleSchema, SecurityTimelineFileSchema, DirectionSchema2, SecurityTrendLineSchema, TrendAttributionSchema, SecurityTrendResultSchema, TimeToFixStatsSchema, TimeToFixResultSchema, EMPTY_SUPPLY_CHAIN, SecurityTimelineManager, ALL_CHECKS, STATUS_ICONS, CINotifier, ExclusionSet, PREFIX_PATTERNS, TEST_FILE_PATTERN, MD_FILE_PATTERN, ALL_DOMAINS, SECURITY_PATTERNS, SEVERITY_RANK, SEVERITY_ORDER, SEVERITY_LABELS, VALIDATED_BY_RANK, COMPLIANCE_DESCRIPTOR, EXPORT_RE, BUG_DETECTION_DESCRIPTOR, SECURITY_DESCRIPTOR, EVAL_PATTERN, SECRET_PATTERNS, SQL_CONCAT_PATTERN, SHELL_EXEC_PATTERN, ARCHITECTURE_DESCRIPTOR, LARGE_FILE_THRESHOLD, VIOLATION_FILE_RE, LEARNINGS_DESCRIPTOR, RELEVANCE_THRESHOLD, AGENT_DESCRIPTORS, AGENT_RUNNERS, DOWNGRADE_MAP, DEFAULT_PROVIDER_TIERS, SMALL_SUGGESTION_LINE_LIMIT, FILE_LINE_RANGE_PATTERN, FILE_LINE_PATTERN, FILE_ONLY_PATTERN, VALIDATION_SCORES, DOMAIN_BASELINES, FACTOR_WEIGHTS, EVIDENCE_SATURATION, CORROBORATED_AGREEMENT, STANDALONE_AGREEMENT, AGREEMENT_LINE_GAP, SECURITY_SENSITIVE_PATH, MIGRATION_PATH, TEST_PATH, CONFIG_PATH, STAGE_DOMAINS, EM_DASH2, STATUS_RANK, RETRY_DEFAULTS, GitHubIssuesSyncAdapter, syncMutex, PRIORITY_RANK, POSITION_WEIGHT, DEPENDENTS_WEIGHT, AFFINITY_WEIGHT, InteractionTypeSchema, QuestionSchema, ConfirmationSchema, TransitionSchema, EmitInteractionInputSchema, ProjectScanner, SHELL_TEMPLATE, STYLES, SCRIPTS, MockLLMService, llmService, ContentPipeline, BlueprintGenerator, TOKENS_PER_MILLION, fallback_default, LITELLM_PRICING_URL, CACHE_TTL_MS, STALENESS_WARNING_DAYS, MICRODOLLARS_PER_DOLLAR, TOKENS_PER_MILLION2, StructuralStrategy, DEFAULT_TOKEN_BUDGET, CHARS_PER_TOKEN, TRUNCATION_MARKER, TruncationStrategy, CompactionPipeline, STABILITY_LOOKUP, TIER_ORDER, AnthropicCacheAdapter, TIER_ORDER2, OpenAICacheAdapter, TIER_ORDER3, CACHED_CONTENT_MARKER, GeminiCacheAdapter, VERSION, POSTHOG_BATCH_URL, MAX_ATTEMPTS, TIMEOUT_MS;
13974
+ var VALID_TYPES, CONVENTIONAL_PATTERN, DEFAULT_AGNIX_TIMEOUT_MS, HARNESS_AGNIX_DISABLE, HARNESS_AGNIX_BIN, CLAUDE_MD_WARN_BYTES, CLAUDE_MD_ERROR_BYTES, CONTEXT_FILES, MIN_DESCRIPTION_LENGTH, SETTINGS_PATHS, KNOWN_HOOK_EVENTS, MCP_SETTINGS_FILES, REQUIRED_SECTIONS, SETTINGS_FILES, KNOWN_AGNIX_TOOLS, DEFAULT_SECTIONS, DEFAULT_RATIOS, NODE_TYPE_TO_CATEGORY, SECTION_LEVEL_MAP, DEFAULT_LEVEL, DEFAULT_BUDGET, DEFAULT_LOADER_CONFIG, LEVEL_FRACTIONS, PHASE_PRIORITIES, ManifestSchema, BundleConstraintsSchema, BundleSchema, ContributionsSchema, LockfilePackageSchema, LockfileSchema, SharableLayerSchema, SharableForbiddenImportSchema, SharableBoundaryConfigSchema, SharableSecurityRulesSchema, VALID_SCOPES, LINE_PATTERN, START_PATTERN, END_PATTERN, CODE_BLOCK_LANGUAGES, DEFAULT_DRIFT_CONFIG, FILE_TYPES, EXPORT_TYPES, CONVENTION_DESCRIPTIONS, RULE_CHECKERS, EntropyAnalyzer, readFile42, writeFile32, unlink22, mkdir22, copyFile2, DEFAULT_FIX_CONFIG, EXPORT_TYPE_KEYWORD, ALWAYS_UNSAFE_TYPES, idCounter, DEAD_CODE_FIX_ACTIONS, MustExportRuleSchema, MustExportDefaultRuleSchema, NoExportRuleSchema, MustImportRuleSchema, NoImportRuleSchema, NamingRuleSchema, MaxExportsRuleSchema, MaxLinesRuleSchema, RequireJSDocRuleSchema, RuleSchema, ConfigPatternSchema, PatternConfigSchema, DriftConfigSchema, DeadCodeConfigSchema, EntropyConfigSchema, BaselineManager, BenchmarkRunner, RegressionDetector, SKIP_DIRS, SOURCE_EXTENSIONS, FUNCTION_DECL_RE, CONST_DECL_RE, CriticalPathResolver, NoOpTelemetryAdapter, NoOpExecutor, ConsoleSink, feedbackConfig, ChecklistBuilder, AgentActionEmitter, globalEmitter, FileSink, NoOpSink, CategorySnapshotSchema, TimelineSnapshotSchema, TimelineFileSchema, TrendLineSchema, TrendResultSchema, DEFAULT_STABILITY_THRESHOLDS, ALL_CATEGORIES, TimelineManager, ConfidenceTierSchema, RegressionResultSchema, DirectionSchema, CategoryForecastSchema, SpecImpactSignalsSchema, SpecImpactEstimateSchema, ContributingFeatureSchema, AdjustedForecastSchema, PredictionWarningSchema, StabilityForecastSchema, PredictionResultSchema, PredictionOptionsSchema, VALID_STATUSES, EM_DASH, VALID_PRIORITIES, ALL_CATEGORIES2, DIRECTION_THRESHOLD, PredictionEngine, DEFAULT_COEFFICIENTS, SpecImpactEstimator, EMPTY_HISTORY, ViolationHistoryManager, NORMALIZERS, MAX_SAMPLES, DEFAULT_WINDOW_WEEKS, DEFAULT_MIN_OCCURRENCES, FailureEntrySchema, HandoffSchema, GateCheckSchema, GateResultSchema, GateConfigSchema, HarnessStateSchema, DEFAULT_STATE, StreamInfoSchema, StreamIndexSchema, DEFAULT_STREAM_INDEX, HARNESS_DIR, STATE_FILE, LEARNINGS_FILE, FAILURES_FILE, HANDOFF_FILE, GATE_CONFIG_FILE, INDEX_FILE, SESSIONS_DIR, SESSION_INDEX_FILE, SUMMARY_FILE, SESSION_STATE_FILE, ARCHIVE_DIR, CONTENT_HASHES_FILE, EVENTS_FILE, STREAMS_DIR, STREAM_NAME_REGEX, branchCache, BRANCH_CACHE_TTL_MS, STATE_FILES, MAX_CACHE_ENTRIES, learningsCacheMap, WEIGHTS, PROMOTABLE_OUTCOMES, failuresCacheMap, FAILURE_LINE_REGEX, SAFE_GATE_COMMAND, SkillEventSchema, knownHashesCache, EVENT_FORMATTERS, RuleRegistry, DEFAULT_SECURITY_CONFIG, RuleOverrideSchema, SecurityConfigSchema, secretRules, injectionRules, xssRules, cryptoRules, pathTraversalRules, networkRules, deserializationRules, agentConfigRules, mcpRules, insecureDefaultsRules, sharpEdgesRules, nodeRules, expressRules, reactRules, goRules, SecurityScanner, hiddenUnicodePatterns, reRolingPatterns, permissionEscalationPatterns, encodedPayloadPatterns, indirectInjectionPatterns, contextManipulationPatterns, socialEngineeringPatterns, suspiciousPatterns, ALL_PATTERNS, DESTRUCTIVE_BASH, TAINT_DURATION_MS, DEFAULT_SESSION_ID, SecurityCategorySnapshotSchema, SupplyChainSnapshotSchema, SecurityTimelineSnapshotSchema, FindingLifecycleSchema, SecurityTimelineFileSchema, DirectionSchema2, SecurityTrendLineSchema, TrendAttributionSchema, SecurityTrendResultSchema, TimeToFixStatsSchema, TimeToFixResultSchema, EMPTY_SUPPLY_CHAIN, SecurityTimelineManager, ALL_CHECKS, STATUS_ICONS, CINotifier, ExclusionSet, PREFIX_PATTERNS, TEST_FILE_PATTERN, MD_FILE_PATTERN, ALL_DOMAINS, SECURITY_PATTERNS, SEVERITY_RANK, SEVERITY_ORDER, SEVERITY_LABELS, VALIDATED_BY_RANK, VALIDATION_SCORES, DOMAIN_BASELINES, FACTOR_WEIGHTS, EVIDENCE_SATURATION, CORROBORATED_AGREEMENT, STANDALONE_AGREEMENT, AGREEMENT_LINE_GAP, COMPLIANCE_DESCRIPTOR, EXPORT_RE, BUG_DETECTION_DESCRIPTOR, SECURITY_DESCRIPTOR, EVAL_PATTERN, SECRET_PATTERNS, SQL_CONCAT_PATTERN, SHELL_EXEC_PATTERN, ARCHITECTURE_DESCRIPTOR, LARGE_FILE_THRESHOLD, VIOLATION_FILE_RE, LEARNINGS_DESCRIPTOR, RELEVANCE_THRESHOLD, AGENT_DESCRIPTORS, AGENT_RUNNERS, DOWNGRADE_MAP, DEFAULT_PROVIDER_TIERS, SMALL_SUGGESTION_LINE_LIMIT, FILE_LINE_RANGE_PATTERN, FILE_LINE_PATTERN, FILE_ONLY_PATTERN, SECURITY_SENSITIVE_PATH, MIGRATION_PATH, TEST_PATH, CONFIG_PATH, STAGE_DOMAINS, EM_DASH2, STATUS_RANK, RETRY_DEFAULTS, GitHubIssuesSyncAdapter, syncMutex, PRIORITY_RANK, POSITION_WEIGHT, DEPENDENTS_WEIGHT, AFFINITY_WEIGHT, InteractionTypeSchema, QuestionSchema, ConfirmationSchema, TransitionSchema, EmitInteractionInputSchema, ProjectScanner, SHELL_TEMPLATE, STYLES, SCRIPTS, MockLLMService, llmService, ContentPipeline, BlueprintGenerator, TOKENS_PER_MILLION, fallback_default, LITELLM_PRICING_URL, CACHE_TTL_MS, STALENESS_WARNING_DAYS, MICRODOLLARS_PER_DOLLAR, TOKENS_PER_MILLION2, StructuralStrategy, DEFAULT_TOKEN_BUDGET, CHARS_PER_TOKEN, TRUNCATION_MARKER, TruncationStrategy, CompactionPipeline, STABILITY_LOOKUP, TIER_ORDER, AnthropicCacheAdapter, TIER_ORDER2, OpenAICacheAdapter, TIER_ORDER3, CACHED_CONTENT_MARKER, GeminiCacheAdapter, VERSION, POSTHOG_BATCH_URL, MAX_ATTEMPTS, TIMEOUT_MS;
13932
13975
  var init_dist3 = __esm({
13933
13976
  "../core/dist/index.mjs"() {
13934
- init_chunk_QLTIBLN5();
13977
+ init_chunk_UWAI34RR();
13935
13978
  init_dist();
13936
13979
  init_dist();
13937
13980
  init_dist();
@@ -17527,7 +17570,7 @@ var init_dist3 = __esm({
17527
17570
  info: 0,
17528
17571
  total: 0
17529
17572
  };
17530
- SecurityTimelineManager = class {
17573
+ SecurityTimelineManager = class _SecurityTimelineManager {
17531
17574
  rootDir;
17532
17575
  timelinePath;
17533
17576
  constructor(rootDir) {
@@ -17799,6 +17842,11 @@ var init_dist3 = __esm({
17799
17842
  }
17800
17843
  }
17801
17844
  }
17845
+ static SEVERITY_COUNT_KEY = {
17846
+ error: "errorCount",
17847
+ warning: "warningCount",
17848
+ info: "infoCount"
17849
+ };
17802
17850
  aggregateByCategory(findings) {
17803
17851
  const result = {};
17804
17852
  for (const finding of findings) {
@@ -17812,9 +17860,8 @@ var init_dist3 = __esm({
17812
17860
  }
17813
17861
  const cat = result[finding.category];
17814
17862
  cat.findingCount++;
17815
- if (finding.severity === "error") cat.errorCount++;
17816
- else if (finding.severity === "warning") cat.warningCount++;
17817
- else cat.infoCount++;
17863
+ const key = _SecurityTimelineManager.SEVERITY_COUNT_KEY[finding.severity] ?? "infoCount";
17864
+ cat[key]++;
17818
17865
  }
17819
17866
  return result;
17820
17867
  }
@@ -17842,26 +17889,23 @@ var init_dist3 = __esm({
17842
17889
  return { current, previous, delta, direction };
17843
17890
  }
17844
17891
  computeAttribution(first, last) {
17845
- const attribution = [];
17846
17892
  const allCategories = /* @__PURE__ */ new Set([
17847
17893
  ...Object.keys(first.byCategory),
17848
17894
  ...Object.keys(last.byCategory)
17849
17895
  ]);
17896
+ const results = [];
17850
17897
  for (const category of allCategories) {
17851
- const prevCount = first.byCategory[category]?.findingCount ?? 0;
17852
- const currCount = last.byCategory[category]?.findingCount ?? 0;
17853
- const delta = currCount - prevCount;
17854
- if (delta === 0) continue;
17855
- const direction = delta < 0 ? "improving" : "declining";
17856
- const sign = delta > 0 ? "+" : "";
17857
- attribution.push({
17858
- category,
17859
- delta,
17860
- direction,
17861
- description: `${sign}${delta} ${category} findings`
17862
- });
17898
+ const attr = this.categoryAttribution(category, first.byCategory, last.byCategory);
17899
+ if (attr) results.push(attr);
17863
17900
  }
17864
- return attribution;
17901
+ return results;
17902
+ }
17903
+ categoryAttribution(category, prev, curr) {
17904
+ const delta = (curr[category]?.findingCount ?? 0) - (prev[category]?.findingCount ?? 0);
17905
+ if (delta === 0) return null;
17906
+ const direction = delta < 0 ? "improving" : "declining";
17907
+ const sign = delta > 0 ? "+" : "";
17908
+ return { category, delta, direction, description: `${sign}${delta} ${category} findings` };
17865
17909
  }
17866
17910
  computeStats(values) {
17867
17911
  if (values.length === 0) {
@@ -18020,6 +18064,28 @@ var init_dist3 = __esm({
18020
18064
  heuristic: 1,
18021
18065
  graph: 2
18022
18066
  };
18067
+ VALIDATION_SCORES = {
18068
+ mechanical: 1,
18069
+ graph: 0.8,
18070
+ heuristic: 0.5
18071
+ };
18072
+ DOMAIN_BASELINES = {
18073
+ security: 0.7,
18074
+ bug: 0.6,
18075
+ architecture: 0.65,
18076
+ compliance: 0.75,
18077
+ learnings: 0.5
18078
+ };
18079
+ FACTOR_WEIGHTS = {
18080
+ validation: 0.35,
18081
+ evidence: 0.3,
18082
+ agreement: 0.15,
18083
+ historical: 0.2
18084
+ };
18085
+ EVIDENCE_SATURATION = 3;
18086
+ CORROBORATED_AGREEMENT = 1;
18087
+ STANDALONE_AGREEMENT = 0.5;
18088
+ AGREEMENT_LINE_GAP = 3;
18023
18089
  COMPLIANCE_DESCRIPTOR = {
18024
18090
  domain: "compliance",
18025
18091
  tier: "standard",
@@ -18133,28 +18199,6 @@ var init_dist3 = __esm({
18133
18199
  FILE_LINE_RANGE_PATTERN = /^([\w./@-]+\.\w+):(\d+)-(\d+)/;
18134
18200
  FILE_LINE_PATTERN = /^([\w./@-]+\.\w+):(\d+)/;
18135
18201
  FILE_ONLY_PATTERN = /^([\w./@-]+\.\w+)\s/;
18136
- VALIDATION_SCORES = {
18137
- mechanical: 1,
18138
- graph: 0.8,
18139
- heuristic: 0.5
18140
- };
18141
- DOMAIN_BASELINES = {
18142
- security: 0.7,
18143
- bug: 0.6,
18144
- architecture: 0.65,
18145
- compliance: 0.75,
18146
- learnings: 0.5
18147
- };
18148
- FACTOR_WEIGHTS = {
18149
- validation: 0.35,
18150
- evidence: 0.3,
18151
- agreement: 0.15,
18152
- historical: 0.2
18153
- };
18154
- EVIDENCE_SATURATION = 3;
18155
- CORROBORATED_AGREEMENT = 1;
18156
- STANDALONE_AGREEMENT = 0.5;
18157
- AGREEMENT_LINE_GAP = 3;
18158
18202
  SECURITY_SENSITIVE_PATH = /(auth|crypto|secret|token|password|session|permission)/i;
18159
18203
  MIGRATION_PATH = /(migration|schema|db\/|database\/)/i;
18160
18204
  TEST_PATH = /\.(test|spec)\.(ts|tsx|js|jsx|mts|cts)$/;
@@ -19235,6 +19279,13 @@ export {
19235
19279
  buildExclusionSet,
19236
19280
  detectChangeType,
19237
19281
  scopeContext,
19282
+ VALIDATION_SCORES,
19283
+ DOMAIN_BASELINES,
19284
+ FACTOR_WEIGHTS,
19285
+ EVIDENCE_SATURATION,
19286
+ CORROBORATED_AGREEMENT,
19287
+ STANDALONE_AGREEMENT,
19288
+ AGREEMENT_LINE_GAP,
19238
19289
  COMPLIANCE_DESCRIPTOR,
19239
19290
  runComplianceAgent,
19240
19291
  BUG_DETECTION_DESCRIPTOR,