@zigrivers/mmr 1.3.0 → 1.4.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 (126) hide show
  1. package/README.md +422 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +4 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/ack.d.ts +11 -0
  6. package/dist/commands/ack.d.ts.map +1 -0
  7. package/dist/commands/ack.js +123 -0
  8. package/dist/commands/ack.js.map +1 -0
  9. package/dist/commands/config.d.ts +5 -0
  10. package/dist/commands/config.d.ts.map +1 -1
  11. package/dist/commands/config.js +248 -14
  12. package/dist/commands/config.js.map +1 -1
  13. package/dist/commands/jobs.d.ts.map +1 -1
  14. package/dist/commands/jobs.js +3 -4
  15. package/dist/commands/jobs.js.map +1 -1
  16. package/dist/commands/reconcile.d.ts.map +1 -1
  17. package/dist/commands/reconcile.js +12 -5
  18. package/dist/commands/reconcile.js.map +1 -1
  19. package/dist/commands/results.d.ts.map +1 -1
  20. package/dist/commands/results.js +13 -5
  21. package/dist/commands/results.js.map +1 -1
  22. package/dist/commands/review.d.ts +25 -0
  23. package/dist/commands/review.d.ts.map +1 -1
  24. package/dist/commands/review.js +457 -44
  25. package/dist/commands/review.js.map +1 -1
  26. package/dist/commands/sessions.d.ts +58 -0
  27. package/dist/commands/sessions.d.ts.map +1 -0
  28. package/dist/commands/sessions.js +266 -0
  29. package/dist/commands/sessions.js.map +1 -0
  30. package/dist/commands/status.d.ts.map +1 -1
  31. package/dist/commands/status.js +2 -3
  32. package/dist/commands/status.js.map +1 -1
  33. package/dist/config/defaults.d.ts +2 -2
  34. package/dist/config/defaults.d.ts.map +1 -1
  35. package/dist/config/defaults.js +66 -0
  36. package/dist/config/defaults.js.map +1 -1
  37. package/dist/config/loader.d.ts +22 -0
  38. package/dist/config/loader.d.ts.map +1 -1
  39. package/dist/config/loader.js +279 -36
  40. package/dist/config/loader.js.map +1 -1
  41. package/dist/config/schema.d.ts +869 -53
  42. package/dist/config/schema.d.ts.map +1 -1
  43. package/dist/config/schema.js +151 -4
  44. package/dist/config/schema.js.map +1 -1
  45. package/dist/core/ack-store.d.ts +109 -0
  46. package/dist/core/ack-store.d.ts.map +1 -0
  47. package/dist/core/ack-store.js +363 -0
  48. package/dist/core/ack-store.js.map +1 -0
  49. package/dist/core/auth.d.ts +10 -1
  50. package/dist/core/auth.d.ts.map +1 -1
  51. package/dist/core/auth.js +65 -2
  52. package/dist/core/auth.js.map +1 -1
  53. package/dist/core/compensator.d.ts +32 -4
  54. package/dist/core/compensator.d.ts.map +1 -1
  55. package/dist/core/compensator.js +118 -15
  56. package/dist/core/compensator.js.map +1 -1
  57. package/dist/core/diff-introspect.d.ts +21 -0
  58. package/dist/core/diff-introspect.d.ts.map +1 -0
  59. package/dist/core/diff-introspect.js +42 -0
  60. package/dist/core/diff-introspect.js.map +1 -0
  61. package/dist/core/dispatcher.d.ts +7 -0
  62. package/dist/core/dispatcher.d.ts.map +1 -1
  63. package/dist/core/dispatcher.js +21 -3
  64. package/dist/core/dispatcher.js.map +1 -1
  65. package/dist/core/git-show.d.ts +31 -0
  66. package/dist/core/git-show.d.ts.map +1 -0
  67. package/dist/core/git-show.js +72 -0
  68. package/dist/core/git-show.js.map +1 -0
  69. package/dist/core/http-dispatcher.d.ts +20 -0
  70. package/dist/core/http-dispatcher.d.ts.map +1 -0
  71. package/dist/core/http-dispatcher.js +125 -0
  72. package/dist/core/http-dispatcher.js.map +1 -0
  73. package/dist/core/job-store.d.ts +7 -1
  74. package/dist/core/job-store.d.ts.map +1 -1
  75. package/dist/core/job-store.js +21 -1
  76. package/dist/core/job-store.js.map +1 -1
  77. package/dist/core/jsonpath.d.ts +15 -0
  78. package/dist/core/jsonpath.d.ts.map +1 -0
  79. package/dist/core/jsonpath.js +63 -0
  80. package/dist/core/jsonpath.js.map +1 -0
  81. package/dist/core/oss-examples.d.ts +18 -0
  82. package/dist/core/oss-examples.d.ts.map +1 -0
  83. package/dist/core/oss-examples.js +66 -0
  84. package/dist/core/oss-examples.js.map +1 -0
  85. package/dist/core/parser.d.ts +8 -3
  86. package/dist/core/parser.d.ts.map +1 -1
  87. package/dist/core/parser.js +157 -6
  88. package/dist/core/parser.js.map +1 -1
  89. package/dist/core/project-root.d.ts +10 -0
  90. package/dist/core/project-root.d.ts.map +1 -0
  91. package/dist/core/project-root.js +23 -0
  92. package/dist/core/project-root.js.map +1 -0
  93. package/dist/core/reconciler.d.ts +1 -1
  94. package/dist/core/reconciler.d.ts.map +1 -1
  95. package/dist/core/reconciler.js +100 -18
  96. package/dist/core/reconciler.js.map +1 -1
  97. package/dist/core/redact.d.ts +17 -0
  98. package/dist/core/redact.d.ts.map +1 -0
  99. package/dist/core/redact.js +140 -0
  100. package/dist/core/redact.js.map +1 -0
  101. package/dist/core/results-pipeline.d.ts +8 -2
  102. package/dist/core/results-pipeline.d.ts.map +1 -1
  103. package/dist/core/results-pipeline.js +50 -3
  104. package/dist/core/results-pipeline.js.map +1 -1
  105. package/dist/core/runtime-probe.d.ts +14 -0
  106. package/dist/core/runtime-probe.d.ts.map +1 -0
  107. package/dist/core/runtime-probe.js +57 -0
  108. package/dist/core/runtime-probe.js.map +1 -0
  109. package/dist/core/stable-id.d.ts +19 -0
  110. package/dist/core/stable-id.d.ts.map +1 -0
  111. package/dist/core/stable-id.js +148 -0
  112. package/dist/core/stable-id.js.map +1 -0
  113. package/dist/core/trust-mode.d.ts +29 -0
  114. package/dist/core/trust-mode.d.ts.map +1 -0
  115. package/dist/core/trust-mode.js +103 -0
  116. package/dist/core/trust-mode.js.map +1 -0
  117. package/dist/formatters/markdown.d.ts.map +1 -1
  118. package/dist/formatters/markdown.js +9 -0
  119. package/dist/formatters/markdown.js.map +1 -1
  120. package/dist/formatters/text.d.ts.map +1 -1
  121. package/dist/formatters/text.js +9 -0
  122. package/dist/formatters/text.js.map +1 -1
  123. package/dist/types.d.ts +44 -1
  124. package/dist/types.d.ts.map +1 -1
  125. package/dist/types.js.map +1 -1
  126. package/package.json +2 -2
@@ -0,0 +1,148 @@
1
+ import { createHash } from 'node:crypto';
2
+ /**
3
+ * Strip end-of-string line/column spans from a location string.
4
+ * Patterns matched (all anchored to end-of-string):
5
+ * - `:N` - trailing single line number
6
+ * - `:N-M` - trailing line range
7
+ * - `:N:M` - trailing line:column
8
+ * - `(line N)` (with optional leading whitespace) - prose-style line ref
9
+ */
10
+ const LOCATION_SPAN_RE = /(?::\d+(?::\d+)?(?:-\d+)?|\s*\(line \d+\))$/;
11
+ export function normalizeLocationForKey(location) {
12
+ return location.toLowerCase().trim().replace(LOCATION_SPAN_RE, '');
13
+ }
14
+ const LINE_MENTION_RE = /\b(?:at\s+)?line \d+\b/gi;
15
+ const VALUE_AFTER_AT_UNITS = [
16
+ 'seconds?',
17
+ 'minutes?',
18
+ 'hours?',
19
+ 'items?',
20
+ 'bytes?',
21
+ 'kb',
22
+ 'mb',
23
+ 'gb',
24
+ 'pixels?',
25
+ 'elements?',
26
+ 'chars?',
27
+ 'characters?',
28
+ 'ms',
29
+ 's',
30
+ ].join('|');
31
+ const AT_INTEGER_MENTION_RE = /\bat \d+(?!\.\d)(?!\d)\b\.?/gi;
32
+ const AT_INTEGER_VALUE_AFTER_RE = new RegExp(String.raw `^\s*(?:%|\b(?:${VALUE_AFTER_AT_UNITS})\b)`, 'i');
33
+ const AT_LOCATION_CONTEXT_BEFORE_RE = /\b(?:found|reported|detected|raised|located|declared|defined)\s+$/;
34
+ const SEVERITY_PREFIX_RE = /^\s*(?:p[0-3]|critical|high|medium|low|info)\s*:\s*/i;
35
+ const CODE_SPAN_RE = /`([^`]*)`/g;
36
+ function normalizeNonCodeSegment(s) {
37
+ return s
38
+ .toLowerCase()
39
+ .replace(LINE_MENTION_RE, '')
40
+ .replace(AT_INTEGER_MENTION_RE, (match, offset, full) => {
41
+ const after = full.slice(offset + match.length);
42
+ if (AT_INTEGER_VALUE_AFTER_RE.test(after))
43
+ return match;
44
+ const before = full.slice(0, offset);
45
+ return AT_LOCATION_CONTEXT_BEFORE_RE.test(before) ? '' : match;
46
+ })
47
+ .replace(SEVERITY_PREFIX_RE, '')
48
+ .replace(/\s+/g, ' ')
49
+ .trim();
50
+ }
51
+ export function normalizeDescriptionForKey(description) {
52
+ return normalizeWithCodeSpans(description, normalizeNonCodeSegment);
53
+ }
54
+ function appendNormalizedPart(out, part, spaceBefore) {
55
+ if (part === '')
56
+ return;
57
+ if (out.length > 0 && spaceBefore)
58
+ out.push(' ');
59
+ out.push(part);
60
+ }
61
+ export function normalizeSuggestionForKey(suggestion) {
62
+ // Suggestions are intentionally distinguished by their full short text.
63
+ // Do not apply description noise stripping here.
64
+ return normalizeWithCodeSpans(suggestion, normalizeSuggestionSegment);
65
+ }
66
+ function normalizeWithCodeSpans(input, normalizeProse) {
67
+ if (input === '')
68
+ return '';
69
+ const out = [];
70
+ let cursor = 0;
71
+ for (const match of input.matchAll(CODE_SPAN_RE)) {
72
+ const index = match.index ?? 0;
73
+ const before = input.slice(cursor, index);
74
+ appendNormalizedPart(out, normalizeProse(before), /^\s/.test(before));
75
+ appendNormalizedPart(out, '`' + match[1] + '`', /\s$/.test(before));
76
+ cursor = index + match[0].length;
77
+ }
78
+ const tail = input.slice(cursor);
79
+ appendNormalizedPart(out, normalizeProse(tail), /^\s/.test(tail));
80
+ return out.join('').trim();
81
+ }
82
+ function normalizeSuggestionSegment(s) {
83
+ return s
84
+ .replace(/[A-Za-z][A-Za-z0-9_]*/g, (token) => (isMixedCaseIdentifier(token) ? token : token.toLowerCase()))
85
+ .replace(/\s+/g, ' ')
86
+ .trim();
87
+ }
88
+ function isMixedCaseIdentifier(token) {
89
+ return /[a-z][A-Z]|[A-Z][a-z]+[A-Z]|[A-Z]{2,}[a-z]|^[A-Z0-9_]{3,}$/.test(token);
90
+ }
91
+ function sha1(input) {
92
+ return createHash('sha1').update(input).digest('hex');
93
+ }
94
+ /**
95
+ * Compute the stable identity key per §5 decision 2:
96
+ * finding_key = sha1(
97
+ * normalized_location + "|" + (category ?? "") + "|" +
98
+ * sha1(description_normalized) + "|" + sha1(suggestion_normalized)
99
+ * )
100
+ *
101
+ * Severity is intentionally excluded — the same underlying issue surfacing at
102
+ * P1 vs P2 across channels should still reconcile to one key.
103
+ */
104
+ export function computeFindingKey(finding) {
105
+ const loc = normalizeLocationForKey(finding.location);
106
+ const cat = (finding.category ?? '').toLowerCase();
107
+ const descHash = sha1(normalizeDescriptionForKey(finding.description));
108
+ const sugHash = sha1(normalizeSuggestionForKey(finding.suggestion));
109
+ return sha1(`${escapeKeyPart(loc)}|${escapeKeyPart(cat)}|${descHash}|${sugHash}`);
110
+ }
111
+ function escapeKeyPart(part) {
112
+ return part.replace(/\\/g, '\\\\').replace(/\|/g, '\\|');
113
+ }
114
+ export function descriptionShingle(description) {
115
+ const normalized = normalizeDescriptionForKey(description);
116
+ if (normalized.length < 5)
117
+ return [];
118
+ const shingleText = normalizeModalVerbsInProse(normalized);
119
+ const grams = new Set();
120
+ for (let i = 0; i <= shingleText.length - 5; i += 1) {
121
+ grams.add(shingleText.slice(i, i + 5));
122
+ }
123
+ return [...grams];
124
+ }
125
+ export function jaccardSimilarity(a, b) {
126
+ const left = isShingleSet(a) ? a : new Set(a);
127
+ const right = isShingleSet(b) ? b : new Set(b);
128
+ let intersection = 0;
129
+ for (const item of left) {
130
+ if (right.has(item))
131
+ intersection += 1;
132
+ }
133
+ const unionSize = left.size + right.size - intersection;
134
+ return unionSize === 0 ? 1 : intersection / unionSize;
135
+ }
136
+ export function shingleSize(shingle) {
137
+ return isShingleSet(shingle) ? shingle.size : shingle.length;
138
+ }
139
+ function normalizeModalVerbsInProse(description) {
140
+ return normalizeWithCodeSpans(description, normalizeModalVerbs);
141
+ }
142
+ function normalizeModalVerbs(description) {
143
+ return description.replace(/\b(?:must|should)\b/g, 'should');
144
+ }
145
+ function isShingleSet(value) {
146
+ return 'size' in value && 'has' in value;
147
+ }
148
+ //# sourceMappingURL=stable-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stable-id.js","sourceRoot":"","sources":["../../src/core/stable-id.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export type TrustMode = 'base-ref' | 'untrusted-head' | 'non-git';
2
+ export interface TrustModeArgs {
3
+ diff?: string;
4
+ pr?: number;
5
+ staged?: boolean;
6
+ base?: string;
7
+ 'config-base-ref'?: string;
8
+ }
9
+ export interface ClassifyOptions {
10
+ cwd: string;
11
+ args: TrustModeArgs;
12
+ /** Hook for tests to stub gh; defaults to live gh CLI. */
13
+ resolvePrBase?: (pr: number, cwd: string) => string | undefined;
14
+ /** Whether we're in CI; defaults to env detection. Injectable for tests. */
15
+ isCI?: boolean;
16
+ }
17
+ /**
18
+ * Discriminated so a `base-ref` result always carries a `base_ref` and the
19
+ * other modes never do — consumers get this for free from the union.
20
+ */
21
+ export type ClassifyResult = {
22
+ trust_mode: 'base-ref';
23
+ base_ref: string;
24
+ } | {
25
+ trust_mode: 'untrusted-head' | 'non-git';
26
+ base_ref?: undefined;
27
+ };
28
+ export declare function classifyTrustMode(opts: ClassifyOptions): ClassifyResult;
29
+ //# sourceMappingURL=trust-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-mode.d.ts","sourceRoot":"","sources":["../../src/core/trust-mode.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,gBAAgB,GAAG,SAAS,CAAA;AAEjE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,aAAa,CAAA;IACnB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IAC/D,4EAA4E;IAC5E,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,UAAU,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,CAAA;AAiEtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CAmCvE"}
@@ -0,0 +1,103 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { execFileSync } from 'node:child_process';
4
+ import { findProjectRoot } from './project-root.js';
5
+ import { isSafeRef } from './git-show.js';
6
+ // Ref-name validation is shared with the git-show helper (the trust boundary):
7
+ // an unsafe ref fails closed to untrusted-head here, and readFileAtRef refuses
8
+ // to read it there.
9
+ function asBaseRef(ref) {
10
+ return isSafeRef(ref) ? { trust_mode: 'base-ref', base_ref: ref } : { trust_mode: 'untrusted-head' };
11
+ }
12
+ /**
13
+ * Broad CI detection — must err toward "yes" because misdetecting CI as local
14
+ * re-opens the self-trust hole. Almost every CI sets CI to a truthy value
15
+ * (GitHub/GitLab/CircleCI/Travis/Buildkite/Vercel/Netlify set CI=true; some use
16
+ * CI=1); a few that don't are covered by their own markers.
17
+ */
18
+ function detectCI() {
19
+ const ci = process.env.CI;
20
+ if (ci !== undefined && ci !== '' && ci.toLowerCase() !== 'false' && ci !== '0')
21
+ return true;
22
+ return Boolean(process.env.GITHUB_ACTIONS ||
23
+ process.env.GITLAB_CI ||
24
+ process.env.BUILDKITE ||
25
+ process.env.TF_BUILD || // Azure Pipelines
26
+ process.env.JENKINS_URL ||
27
+ process.env.TEAMCITY_VERSION);
28
+ }
29
+ function isGitRepo(cwd) {
30
+ // Authoritative check first: handles worktrees, submodules, monorepo
31
+ // subdirs, and bare-repo edge cases correctly.
32
+ try {
33
+ const out = execFileSync('git', ['rev-parse', '--is-inside-work-tree'], {
34
+ cwd,
35
+ encoding: 'utf-8',
36
+ stdio: ['ignore', 'pipe', 'ignore'],
37
+ timeout: 5000,
38
+ });
39
+ if (out.trim() === 'true')
40
+ return true;
41
+ }
42
+ catch {
43
+ // git missing or not a work tree → fall through to the advisory FS check.
44
+ }
45
+ // Advisory fallback (also what the .git-fixture tests exercise). NOT the
46
+ // security boundary: a git repo with no explicit trusted ref classifies as
47
+ // 'untrusted-head', and base-ref modes resolve through real git/gh which fail
48
+ // on a planted/fake .git — so a forged .git only ever yields untrusted-head.
49
+ return fs.existsSync(path.join(findProjectRoot(cwd), '.git'));
50
+ }
51
+ function defaultResolvePrBase(pr, cwd) {
52
+ try {
53
+ const raw = execFileSync('gh', ['pr', 'view', String(pr), '--json', 'baseRefName'], {
54
+ cwd,
55
+ encoding: 'utf-8',
56
+ stdio: ['ignore', 'pipe', 'ignore'],
57
+ timeout: 10000,
58
+ });
59
+ const parsed = JSON.parse(raw);
60
+ if (parsed.baseRefName && parsed.baseRefName.length > 0)
61
+ return parsed.baseRefName;
62
+ }
63
+ catch {
64
+ return undefined;
65
+ }
66
+ return undefined;
67
+ }
68
+ export function classifyTrustMode(opts) {
69
+ const { cwd, args } = opts;
70
+ const resolvePrBase = opts.resolvePrBase ?? defaultResolvePrBase;
71
+ const isCI = opts.isCI ?? detectCI();
72
+ // Explicit operator override always wins.
73
+ if (args['config-base-ref'])
74
+ return asBaseRef(args['config-base-ref']);
75
+ if (!isGitRepo(cwd))
76
+ return { trust_mode: 'non-git' };
77
+ // --pr resolves the PR's UPSTREAM base branch via gh, so it determines trust
78
+ // even when a (possibly malicious) --base is also present — matching
79
+ // resolveDiff, which reviews the PR diff. Resolution failure fails closed.
80
+ if (args.pr !== undefined) {
81
+ const resolved = resolvePrBase(args.pr, cwd);
82
+ return resolved ? asBaseRef(resolved) : { trust_mode: 'untrusted-head' };
83
+ }
84
+ if (args.base)
85
+ return asBaseRef(args.base);
86
+ // --staged reviews the index against HEAD. HEAD is a trusted base locally,
87
+ // but in CI it may be an attacker's PR checkout, so fail closed there too —
88
+ // consistent with the no-flag default below.
89
+ if (args.staged)
90
+ return isCI ? { trust_mode: 'untrusted-head' } : asBaseRef('HEAD');
91
+ // Default (plain `mmr review` working tree, or `--diff`): trusting HEAD is
92
+ // safe locally (HEAD is your committed history) but NOT in CI, where the
93
+ // working tree may be an attacker's PR checkout. So `--diff` is always
94
+ // untrusted, and the no-flags default trusts HEAD only outside CI; in CI it
95
+ // fails closed and requires an explicit trusted ref (--pr/--base/
96
+ // --config-base-ref). NOTE: this is stricter than the original plan, which
97
+ // returned base-ref:HEAD unconditionally — changed to close a CI
98
+ // self-trust hole (see Group H note).
99
+ if (args.diff !== undefined || isCI)
100
+ return { trust_mode: 'untrusted-head' };
101
+ return asBaseRef('HEAD');
102
+ }
103
+ //# sourceMappingURL=trust-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-mode.js","sourceRoot":"","sources":["../../src/core/trust-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AA6BzC,+EAA+E;AAC/E,+EAA+E;AAC/E,oBAAoB;AACpB,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA;AACtG,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ;IACf,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;IACzB,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IAC5F,OAAO,OAAO,CACZ,OAAO,CAAC,GAAG,CAAC,cAAc;QACxB,OAAO,CAAC,GAAG,CAAC,SAAS;QACrB,OAAO,CAAC,GAAG,CAAC,SAAS;QACrB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,kBAAkB;QAC1C,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAC/B,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,qEAAqE;IACrE,+CAA+C;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE;YACtE,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QACF,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;IAC5E,CAAC;IACD,yEAAyE;IACzE,2EAA2E;IAC3E,8EAA8E;IAC9E,6EAA6E;IAC7E,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;AAC/D,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAU,EAAE,GAAW;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,EAAE;YAClF,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,KAAK;SACf,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAA;QAC1D,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,WAAW,CAAA;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAqB;IACrD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;IAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,oBAAoB,CAAA;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAA;IAEpC,0CAA0C;IAC1C,IAAI,IAAI,CAAC,iBAAiB,CAAC;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAEtE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAA;IAErD,6EAA6E;IAC7E,qEAAqE;IACrE,2EAA2E;IAC3E,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAC5C,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA;IAC1E,CAAC;IAED,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE1C,2EAA2E;IAC3E,4EAA4E;IAC5E,6CAA6C;IAC7C,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAEnF,2EAA2E;IAC3E,yEAAyE;IACzE,uEAAuE;IACvE,4EAA4E;IAC5E,kEAAkE;IAClE,2EAA2E;IAC3E,iEAAiE;IACjE,sCAAsC;IACtC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI;QAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAA;IAC5E,OAAO,SAAS,CAAC,MAAM,CAAC,CAAA;AAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAYpD,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CA4CjE"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAYpD,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAoDjE"}
@@ -21,6 +21,15 @@ export function formatMarkdown(results) {
21
21
  }
22
22
  segments.push(`**Elapsed:** ${results.metadata.total_elapsed}`);
23
23
  lines.push(segments.join(' | '));
24
+ if (results.trust_mode !== undefined) {
25
+ const trust = [`**Trust:** ${results.trust_mode}`];
26
+ if (results.proposed_config_change)
27
+ trust.push('proposed `.mmr.yaml` change');
28
+ if (results.proposed_acks && results.proposed_acks.length > 0) {
29
+ trust.push(`proposed acks: ${results.proposed_acks.length}`);
30
+ }
31
+ lines.push(trust.join(' | '));
32
+ }
24
33
  lines.push('');
25
34
  if (results.reconciled_findings.length > 0) {
26
35
  lines.push('### Findings');
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAEA,SAAS,YAAY,CAAC,OAAqC;IACzD,QAAQ,OAAO,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAA;QAC5B,KAAK,eAAe,CAAC,CAAC,OAAO,QAAQ,CAAA;QACrC,KAAK,SAAS,CAAC,CAAC,OAAO,SAAS,CAAA;QAChC,KAAK,qBAAqB,CAAC,CAAC,OAAO,gBAAgB,CAAA;QACnD,OAAO,CAAC,CAAC,OAAO,SAAS,CAAA;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAA0B;IACvD,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAE1C,KAAK,CAAC,IAAI,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAA;IAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,MAAM,QAAQ,GAAG;QACf,YAAY,OAAO,CAAC,MAAM,EAAE;QAC5B,kBAAkB,OAAO,CAAC,aAAa,EAAE;KAC1C,CAAA;IACD,IAAI,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IAC1D,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAA;IAC/D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,IAAI,OAAO,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAA;QACtF,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAA;QACtF,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;YAC5E,MAAM,GAAG,GAAG;gBACV,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC;gBAC1C,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS;aACpC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAChC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAA;QACxB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,GAAG,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/formatters/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAYpD,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAyC7D"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/formatters/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAYpD,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAiD7D"}
@@ -20,6 +20,15 @@ export function formatText(results) {
20
20
  }
21
21
  segments.push(`Channels: ${chCount}`, `Elapsed: ${results.metadata.total_elapsed}`);
22
22
  lines.push(segments.join(' | '));
23
+ if (results.trust_mode !== undefined) {
24
+ const trust = [`Trust: ${results.trust_mode}`];
25
+ if (results.proposed_config_change)
26
+ trust.push('proposed .mmr.yaml change');
27
+ if (results.proposed_acks && results.proposed_acks.length > 0) {
28
+ trust.push(`proposed acks: ${results.proposed_acks.length}`);
29
+ }
30
+ lines.push(trust.join(' | '));
31
+ }
23
32
  lines.push('');
24
33
  if (results.reconciled_findings.length > 0) {
25
34
  lines.push(`Findings (${results.reconciled_findings.length}):`);
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/formatters/text.ts"],"names":[],"mappings":"AAEA,SAAS,YAAY,CAAC,OAAqC;IACzD,QAAQ,OAAO,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAA;QAC5B,KAAK,eAAe,CAAC,CAAC,OAAO,QAAQ,CAAA;QACrC,KAAK,SAAS,CAAC,CAAC,OAAO,SAAS,CAAA;QAChC,KAAK,qBAAqB,CAAC,CAAC,OAAO,gBAAgB,CAAA;QACnD,OAAO,CAAC,CAAC,OAAO,SAAS,CAAA;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAA0B;IACnD,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAE1C,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAA;IAChG,MAAM,QAAQ,GAAG;QACf,cAAc,OAAO,CAAC,aAAa,EAAE;KACtC,CAAA;IACD,IAAI,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IACtD,CAAC;IACD,QAAQ,CAAC,IAAI,CACX,aAAa,OAAO,EAAE,EACtB,YAAY,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,CAC7C,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,IAAI,OAAO,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,CAAA;QAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;YAClC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAA;YAC/C,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAA;YACnE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACvB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,OAAO,GAAG,CAAC,CAAA;IACvD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/formatters/text.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { OutputParserConfig } from './config/schema.js';
1
2
  export type Severity = 'P0' | 'P1' | 'P2' | 'P3';
2
3
  export declare const SEVERITY_ORDER: Record<Severity, number>;
3
4
  export type ChannelStatus = 'dispatched' | 'running' | 'completed' | 'timeout' | 'failed' | 'auth_failed' | 'not_installed' | 'skipped';
@@ -7,6 +8,13 @@ export type Verdict = 'pass' | 'degraded-pass' | 'blocked' | 'needs-user-decisio
7
8
  export type Agreement = 'consensus' | 'majority' | 'unique';
8
9
  export type Confidence = 'high' | 'medium' | 'low';
9
10
  export type OutputFormat = 'json' | 'text' | 'markdown';
11
+ export interface ReviewControls {
12
+ max_rounds?: number;
13
+ accept_new_acks: boolean;
14
+ trust_project_acks: boolean;
15
+ trust_project_config: boolean;
16
+ config_base_ref?: string;
17
+ }
10
18
  export declare const TERMINAL_STATUSES: ReadonlySet<ChannelStatus>;
11
19
  export interface Finding {
12
20
  id?: string;
@@ -20,6 +28,21 @@ export interface ReconciledFinding extends Finding {
20
28
  confidence: Confidence;
21
29
  sources: string[];
22
30
  agreement: Agreement;
31
+ /** Stable content-hashed identity (T2-A, §5 decision 2). */
32
+ finding_key?: string;
33
+ /** Char-5-gram set of normalized description for cross-round fuzzy match. */
34
+ description_shingle?: string[];
35
+ /** True when this finding has been silenced via `mmr ack` (T2-D). */
36
+ acknowledged?: boolean;
37
+ ack_reason?: string;
38
+ /** How the ack was resolved: exact key match or location-anchored Jaccard fallback. */
39
+ ack_match?: 'exact' | 'fuzzy';
40
+ /** Reserved for T2-C (v3.31): finding was auto-downgraded after repeat threshold. */
41
+ auto_downgraded?: boolean;
42
+ /** Reserved for T2-C (v3.31): finding was auto-suppressed after repeat threshold. */
43
+ auto_suppressed?: boolean;
44
+ /** Reserved for T2-C: how the cross-round repeat was matched. */
45
+ repeat_match?: 'exact' | 'fuzzy';
23
46
  }
24
47
  export interface ChannelResult {
25
48
  status: ChannelStatus;
@@ -35,6 +58,20 @@ export interface JobMetadata {
35
58
  format: OutputFormat;
36
59
  created_at: string;
37
60
  channels: Record<string, ChannelJobEntry>;
61
+ /** Session linkage (T2-B). Optional; absent in legacy jobs. */
62
+ session_id?: string;
63
+ /** One-based round counter within a session (T2-B). */
64
+ round?: number;
65
+ /** Parsed review loop/security controls used for this invocation. */
66
+ review_controls?: ReviewControls;
67
+ /**
68
+ * Trust context captured at review time (§5 decision 1), persisted so the
69
+ * results pipeline re-surfaces it on every run (review --sync, results,
70
+ * reconcile) rather than only the original stdout.
71
+ */
72
+ trust_mode?: 'base-ref' | 'untrusted-head' | 'non-git';
73
+ proposed_acks?: string[];
74
+ proposed_config_change?: boolean;
38
75
  }
39
76
  export interface ChannelJobEntry {
40
77
  status: ChannelStatus;
@@ -45,7 +82,7 @@ export interface ChannelJobEntry {
45
82
  completed_at?: string;
46
83
  elapsed?: string;
47
84
  findings_count?: number;
48
- output_parser?: string;
85
+ output_parser?: string | OutputParserConfig;
49
86
  }
50
87
  export interface ReconciledResults {
51
88
  job_id: string;
@@ -62,6 +99,12 @@ export interface ReconciledResults {
62
99
  channels_partial: number;
63
100
  total_elapsed: string;
64
101
  };
102
+ /** Trust mode under which this review ran (§5 decision 1). */
103
+ trust_mode?: 'base-ref' | 'untrusted-head' | 'non-git';
104
+ /** Ack-file paths added/modified by the diff under review. */
105
+ proposed_acks?: string[];
106
+ /** True when `.mmr.yaml` was added/modified by the diff under review. */
107
+ proposed_config_change?: boolean;
65
108
  }
66
109
  export type { MmrConfigParsed as MmrConfig, ChannelConfigParsed as ChannelConfig } from './config/schema.js';
67
110
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;CACN,CAAA;AAuBD,MAAM,CAAC,MAAM,iBAAiB,GAA+B,IAAI,GAAG,CAAC;IACnE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS;CAC5E,CAAC,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,cAAc,GAA6B;IACtD,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;CACN,CAAA;AA+BD,MAAM,CAAC,MAAM,iBAAiB,GAA+B,IAAI,GAAG,CAAC;IACnE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS;CAC5E,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zigrivers/mmr",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Multi-model code review CLI — async dispatch, reconciliation, and severity gating",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -32,7 +32,7 @@
32
32
  "test": "vitest run",
33
33
  "test:coverage": "vitest run --coverage",
34
34
  "lint": "eslint src/",
35
- "type-check": "tsc --noEmit",
35
+ "type-check": "tsc -p tsconfig.check.json",
36
36
  "check": "npm run lint && npm run type-check && npm test"
37
37
  },
38
38
  "dependencies": {