@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.
- package/README.md +422 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/ack.d.ts +11 -0
- package/dist/commands/ack.d.ts.map +1 -0
- package/dist/commands/ack.js +123 -0
- package/dist/commands/ack.js.map +1 -0
- package/dist/commands/config.d.ts +5 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +248 -14
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/jobs.d.ts.map +1 -1
- package/dist/commands/jobs.js +3 -4
- package/dist/commands/jobs.js.map +1 -1
- package/dist/commands/reconcile.d.ts.map +1 -1
- package/dist/commands/reconcile.js +12 -5
- package/dist/commands/reconcile.js.map +1 -1
- package/dist/commands/results.d.ts.map +1 -1
- package/dist/commands/results.js +13 -5
- package/dist/commands/results.js.map +1 -1
- package/dist/commands/review.d.ts +25 -0
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +457 -44
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/sessions.d.ts +58 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +266 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/config/defaults.d.ts +2 -2
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +66 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/loader.d.ts +22 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +279 -36
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +869 -53
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +151 -4
- package/dist/config/schema.js.map +1 -1
- package/dist/core/ack-store.d.ts +109 -0
- package/dist/core/ack-store.d.ts.map +1 -0
- package/dist/core/ack-store.js +363 -0
- package/dist/core/ack-store.js.map +1 -0
- package/dist/core/auth.d.ts +10 -1
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +65 -2
- package/dist/core/auth.js.map +1 -1
- package/dist/core/compensator.d.ts +32 -4
- package/dist/core/compensator.d.ts.map +1 -1
- package/dist/core/compensator.js +118 -15
- package/dist/core/compensator.js.map +1 -1
- package/dist/core/diff-introspect.d.ts +21 -0
- package/dist/core/diff-introspect.d.ts.map +1 -0
- package/dist/core/diff-introspect.js +42 -0
- package/dist/core/diff-introspect.js.map +1 -0
- package/dist/core/dispatcher.d.ts +7 -0
- package/dist/core/dispatcher.d.ts.map +1 -1
- package/dist/core/dispatcher.js +21 -3
- package/dist/core/dispatcher.js.map +1 -1
- package/dist/core/git-show.d.ts +31 -0
- package/dist/core/git-show.d.ts.map +1 -0
- package/dist/core/git-show.js +72 -0
- package/dist/core/git-show.js.map +1 -0
- package/dist/core/http-dispatcher.d.ts +20 -0
- package/dist/core/http-dispatcher.d.ts.map +1 -0
- package/dist/core/http-dispatcher.js +125 -0
- package/dist/core/http-dispatcher.js.map +1 -0
- package/dist/core/job-store.d.ts +7 -1
- package/dist/core/job-store.d.ts.map +1 -1
- package/dist/core/job-store.js +21 -1
- package/dist/core/job-store.js.map +1 -1
- package/dist/core/jsonpath.d.ts +15 -0
- package/dist/core/jsonpath.d.ts.map +1 -0
- package/dist/core/jsonpath.js +63 -0
- package/dist/core/jsonpath.js.map +1 -0
- package/dist/core/oss-examples.d.ts +18 -0
- package/dist/core/oss-examples.d.ts.map +1 -0
- package/dist/core/oss-examples.js +66 -0
- package/dist/core/oss-examples.js.map +1 -0
- package/dist/core/parser.d.ts +8 -3
- package/dist/core/parser.d.ts.map +1 -1
- package/dist/core/parser.js +157 -6
- package/dist/core/parser.js.map +1 -1
- package/dist/core/project-root.d.ts +10 -0
- package/dist/core/project-root.d.ts.map +1 -0
- package/dist/core/project-root.js +23 -0
- package/dist/core/project-root.js.map +1 -0
- package/dist/core/reconciler.d.ts +1 -1
- package/dist/core/reconciler.d.ts.map +1 -1
- package/dist/core/reconciler.js +100 -18
- package/dist/core/reconciler.js.map +1 -1
- package/dist/core/redact.d.ts +17 -0
- package/dist/core/redact.d.ts.map +1 -0
- package/dist/core/redact.js +140 -0
- package/dist/core/redact.js.map +1 -0
- package/dist/core/results-pipeline.d.ts +8 -2
- package/dist/core/results-pipeline.d.ts.map +1 -1
- package/dist/core/results-pipeline.js +50 -3
- package/dist/core/results-pipeline.js.map +1 -1
- package/dist/core/runtime-probe.d.ts +14 -0
- package/dist/core/runtime-probe.d.ts.map +1 -0
- package/dist/core/runtime-probe.js +57 -0
- package/dist/core/runtime-probe.js.map +1 -0
- package/dist/core/stable-id.d.ts +19 -0
- package/dist/core/stable-id.d.ts.map +1 -0
- package/dist/core/stable-id.js +148 -0
- package/dist/core/stable-id.js.map +1 -0
- package/dist/core/trust-mode.d.ts +29 -0
- package/dist/core/trust-mode.d.ts.map +1 -0
- package/dist/core/trust-mode.js +103 -0
- package/dist/core/trust-mode.js.map +1 -0
- package/dist/formatters/markdown.d.ts.map +1 -1
- package/dist/formatters/markdown.js +9 -0
- package/dist/formatters/markdown.js.map +1 -1
- package/dist/formatters/text.d.ts.map +1 -1
- package/dist/formatters/text.js +9 -0
- package/dist/formatters/text.js.map +1 -1
- package/dist/types.d.ts +44 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,QAAQ,qCAAmC,CAAA;AAExD,eAAO,MAAM,YAAY,yCAAuC,CAAA;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/config/schema.js
CHANGED
|
@@ -7,26 +7,172 @@ const AuthConfigSchema = z.object({
|
|
|
7
7
|
failure_exit_codes: z.array(z.number()),
|
|
8
8
|
recovery: z.string(),
|
|
9
9
|
});
|
|
10
|
-
|
|
10
|
+
// Auth-probe config for HTTP channels (T1-C). Distinct from the subprocess
|
|
11
|
+
// AuthConfigSchema: an HTTP probe is an HTTP request (method + accepted status
|
|
12
|
+
// codes), not a spawned command. `check_endpoint` is optional — when absent,
|
|
13
|
+
// the probe URL is derived from `endpoint` via `deriveProbeUrl` (a trailing
|
|
14
|
+
// `/chat/completions` → `/models`); the schema rejects http channels where
|
|
15
|
+
// neither is available.
|
|
16
|
+
const HttpAuthConfigSchema = z.object({
|
|
17
|
+
check_endpoint: z.string().optional(),
|
|
18
|
+
check_method: z.string().default('GET'),
|
|
19
|
+
check_status_ok: z.array(z.number()).default([200]),
|
|
20
|
+
// Positive: a 0/negative timeout would abort the probe immediately.
|
|
21
|
+
timeout: z.number().positive().default(5),
|
|
22
|
+
recovery: z.string().optional(),
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Derive the auth-probe URL from an openai-chat endpoint by replacing a
|
|
26
|
+
* trailing `/chat/completions` with `/models` (handles both `.../v1/chat/...`
|
|
27
|
+
* and bare `.../chat/...` shapes). Returns undefined when there is no trailing
|
|
28
|
+
* `/chat/completions` — callers then require an explicit `auth.check_endpoint`.
|
|
29
|
+
*/
|
|
30
|
+
export function deriveProbeUrl(endpoint) {
|
|
31
|
+
// Tolerate trailing slashes (e.g. `.../chat/completions/`).
|
|
32
|
+
const trimmed = endpoint.replace(/\/+$/, '');
|
|
33
|
+
const suffix = '/chat/completions';
|
|
34
|
+
if (trimmed.endsWith(suffix)) {
|
|
35
|
+
return trimmed.slice(0, -suffix.length) + '/models';
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
const RegexFindingsFieldsSchema = z.object({
|
|
40
|
+
id: z.number().int().positive().optional(),
|
|
41
|
+
category: z.number().int().positive().optional(),
|
|
42
|
+
severity: z.number().int().positive().optional(),
|
|
43
|
+
location: z.number().int().positive(),
|
|
44
|
+
description: z.number().int().positive(),
|
|
45
|
+
suggestion: z.number().int().positive().optional(),
|
|
46
|
+
});
|
|
47
|
+
export const RegexFindingsParserSchema = z.object({
|
|
48
|
+
kind: z.literal('regex-findings'),
|
|
49
|
+
pattern: z.string(),
|
|
50
|
+
flags: z.string().regex(/^[dgimsuvy]*$/).default('gm'),
|
|
51
|
+
default_severity: Severity.default('P2'),
|
|
52
|
+
fields: RegexFindingsFieldsSchema,
|
|
53
|
+
});
|
|
54
|
+
export const UnwrapJsonpathParserSchema = z.object({
|
|
55
|
+
kind: z.literal('unwrap-jsonpath'),
|
|
56
|
+
wrap: z.string(),
|
|
57
|
+
then: z.lazy(() => OutputParserSchema).default('default'),
|
|
58
|
+
});
|
|
59
|
+
export const OutputParserSchema = z.lazy(() => z.union([
|
|
60
|
+
z.string(),
|
|
61
|
+
z.discriminatedUnion('kind', [
|
|
62
|
+
UnwrapJsonpathParserSchema,
|
|
63
|
+
RegexFindingsParserSchema,
|
|
64
|
+
]),
|
|
65
|
+
]));
|
|
66
|
+
// Fields common to every channel kind. Shared across both discriminated-union
|
|
67
|
+
// arms so existing consumers can keep reading ch.command/ch.auth/etc. off the
|
|
68
|
+
// union without narrowing (they're subprocess-relevant but harmless on http).
|
|
69
|
+
const CommonChannelFields = {
|
|
11
70
|
enabled: z.boolean().default(true),
|
|
12
|
-
command: z.string(),
|
|
71
|
+
command: z.string().optional(),
|
|
13
72
|
flags: z.array(z.string()).default([]),
|
|
14
73
|
env: z.record(z.string()).default({}),
|
|
15
|
-
|
|
74
|
+
headers: z.record(z.string()).optional(),
|
|
16
75
|
prompt_wrapper: z.string().default('{{prompt}}'),
|
|
17
|
-
|
|
76
|
+
// How the dispatcher hands the prompt to the channel process:
|
|
77
|
+
// 'stdin' — pipe the prompt to stdin (default; claude/gemini/codex)
|
|
78
|
+
// 'prompt-file' — write the prompt to a temp file and pass its path via a
|
|
79
|
+
// {{prompt_file}} placeholder in flags (or appended), for
|
|
80
|
+
// CLIs like grok whose prompt flag requires an arg value
|
|
81
|
+
// and ignore stdin. Omitted ⇒ stdin.
|
|
82
|
+
prompt_delivery: z.enum(['stdin', 'prompt-file']).optional(),
|
|
83
|
+
output_parser: OutputParserSchema.default('default'),
|
|
18
84
|
stderr: z.enum(['suppress', 'capture', 'passthrough']).default('capture'),
|
|
19
85
|
timeout: z.number().optional(),
|
|
86
|
+
// Channel inheritance (v3.28). command/auth stay optional so abstract bases
|
|
87
|
+
// and `extends` children (resolved before parse) validate.
|
|
88
|
+
extends: z.string().optional(),
|
|
89
|
+
abstract: z.boolean().default(false),
|
|
90
|
+
};
|
|
91
|
+
const SubprocessChannelSchema = z.object({
|
|
92
|
+
kind: z.literal('subprocess'),
|
|
93
|
+
// Subprocess auth is a spawned command (check + failure_exit_codes).
|
|
94
|
+
auth: AuthConfigSchema.optional(),
|
|
95
|
+
...CommonChannelFields,
|
|
96
|
+
});
|
|
97
|
+
// NOTE: endpoint/model/endpoint_convention are required unconditionally, so an
|
|
98
|
+
// abstract http *template* (providing only shared headers for children to
|
|
99
|
+
// extend) is not supported — http channels must be concrete. Subprocess
|
|
100
|
+
// abstract templates remain supported (command is optional).
|
|
101
|
+
const HttpChannelSchema = z.object({
|
|
102
|
+
kind: z.literal('http'),
|
|
103
|
+
endpoint: z.string(),
|
|
104
|
+
model: z.string(),
|
|
105
|
+
// Only the openai-chat convention ships in v3.30b (§5 decision 8).
|
|
106
|
+
endpoint_convention: z.literal('openai-chat'),
|
|
107
|
+
api_key_env: z.string().optional(),
|
|
108
|
+
api_key_header: z.string().default('Authorization'),
|
|
109
|
+
api_key_prefix: z.string().default('Bearer '),
|
|
110
|
+
// HTTP auth is an HTTP probe (GET <endpoint→/models>), always defaulted so
|
|
111
|
+
// the dispatcher/auth-probe can read auth.check_method/check_status_ok.
|
|
112
|
+
auth: HttpAuthConfigSchema.default({}),
|
|
113
|
+
...CommonChannelFields,
|
|
114
|
+
});
|
|
115
|
+
/**
|
|
116
|
+
* Injects `kind: 'subprocess'` into any channel object missing it BEFORE the
|
|
117
|
+
* discriminatedUnion runs. Zod picks the union arm from the RAW discriminator
|
|
118
|
+
* value before defaults apply, so without this a legacy config (no `kind`)
|
|
119
|
+
* would fail to parse entirely.
|
|
120
|
+
*/
|
|
121
|
+
function injectSubprocessDefault(raw) {
|
|
122
|
+
if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
|
|
123
|
+
return raw;
|
|
124
|
+
const obj = raw;
|
|
125
|
+
if (obj.kind === undefined)
|
|
126
|
+
return { ...obj, kind: 'subprocess' };
|
|
127
|
+
return obj;
|
|
128
|
+
}
|
|
129
|
+
const ChannelConfigSchema = z.preprocess(injectSubprocessDefault, z.discriminatedUnion('kind', [SubprocessChannelSchema, HttpChannelSchema])).superRefine((ch, ctx) => {
|
|
130
|
+
// An http channel must have a probeable auth endpoint: either an explicit
|
|
131
|
+
// auth.check_endpoint, or a derivable one (endpoint ends in /chat/completions).
|
|
132
|
+
if (ch.kind === 'http' && !ch.auth.check_endpoint && !deriveProbeUrl(ch.endpoint)) {
|
|
133
|
+
ctx.addIssue({
|
|
134
|
+
code: z.ZodIssueCode.custom,
|
|
135
|
+
path: ['auth', 'check_endpoint'],
|
|
136
|
+
message: `endpoint "${ch.endpoint}" does not end in /chat/completions; auth.check_endpoint is required.`,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
20
139
|
});
|
|
21
140
|
const TemplateSchema = z.object({
|
|
22
141
|
criteria: z.array(z.string()).optional(),
|
|
23
142
|
});
|
|
143
|
+
export const CompensatorConfigSchema = z.object({
|
|
144
|
+
channel: z.string().optional(),
|
|
145
|
+
channel_focus_map: z.record(z.string()).optional(),
|
|
146
|
+
}).strict().refine((cfg) => cfg.channel !== undefined || cfg.channel_focus_map !== undefined, { message: 'defaults.compensator must define channel or channel_focus_map' });
|
|
147
|
+
const LoopControlSchema = z.object({
|
|
148
|
+
max_rounds_default: z.number().int().positive().default(5),
|
|
149
|
+
repeat_suppression_enabled: z.boolean().default(false),
|
|
150
|
+
repeat_downgrade_after: z.number().int().positive().optional(),
|
|
151
|
+
repeat_suppress_after: z.number().int().positive().optional(),
|
|
152
|
+
})
|
|
153
|
+
.refine((lc) => {
|
|
154
|
+
if (!lc.repeat_suppression_enabled)
|
|
155
|
+
return true;
|
|
156
|
+
return lc.repeat_downgrade_after !== undefined && lc.repeat_suppress_after !== undefined;
|
|
157
|
+
}, {
|
|
158
|
+
message: 'loop_control.repeat_suppression_enabled requires both repeat_downgrade_after and repeat_suppress_after',
|
|
159
|
+
})
|
|
160
|
+
.refine((lc) => {
|
|
161
|
+
if (lc.repeat_downgrade_after === undefined || lc.repeat_suppress_after === undefined) {
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
return lc.repeat_suppress_after >= lc.repeat_downgrade_after;
|
|
165
|
+
}, {
|
|
166
|
+
message: 'loop_control.repeat_suppress_after must be greater than or equal to repeat_downgrade_after',
|
|
167
|
+
});
|
|
24
168
|
const DefaultsSchema = z.object({
|
|
25
169
|
fix_threshold: Severity.default('P2'),
|
|
26
170
|
timeout: z.number().default(300),
|
|
27
171
|
format: OutputFormat.default('json'),
|
|
28
172
|
parallel: z.boolean().default(true),
|
|
29
173
|
job_retention_days: z.number().default(7),
|
|
174
|
+
loop_control: LoopControlSchema.default({}),
|
|
175
|
+
compensator: CompensatorConfigSchema.optional(),
|
|
30
176
|
});
|
|
31
177
|
export const MmrConfigSchema = z.object({
|
|
32
178
|
version: z.number(),
|
|
@@ -34,5 +180,6 @@ export const MmrConfigSchema = z.object({
|
|
|
34
180
|
review_criteria: z.array(z.string()).optional(),
|
|
35
181
|
templates: z.record(TemplateSchema).optional(),
|
|
36
182
|
channels: z.record(ChannelConfigSchema).default({}),
|
|
183
|
+
channels_disabled: z.array(z.string()).optional(),
|
|
37
184
|
});
|
|
38
185
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAExD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;AAEhE,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9B,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAA;AAEF,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/** Canonical finding_key format: sha1 hex. Exported so the CLI can validate
|
|
2
|
+
* the same way before any path construction. */
|
|
3
|
+
export declare const FINDING_KEY_RE: RegExp;
|
|
4
|
+
export interface AckRecord {
|
|
5
|
+
finding_key: string;
|
|
6
|
+
normalized_location: string;
|
|
7
|
+
description_shingle: string[];
|
|
8
|
+
reason?: string;
|
|
9
|
+
created_at: string;
|
|
10
|
+
}
|
|
11
|
+
export type AckScope = 'project' | 'user';
|
|
12
|
+
export interface AckMatch {
|
|
13
|
+
record: AckRecord;
|
|
14
|
+
match: 'exact' | 'fuzzy';
|
|
15
|
+
scope: AckScope;
|
|
16
|
+
}
|
|
17
|
+
export interface AckStoreOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Project root whose ./.mmr/acks holds project-scoped (repo-committed) acks.
|
|
20
|
+
* Optional: when omitted, project-scope acks are disabled entirely
|
|
21
|
+
* (lookup/listAll ignore them and add(..,'project') throws). Callers
|
|
22
|
+
* reviewing an untrusted working tree should omit it unless the project acks
|
|
23
|
+
* are explicitly trusted.
|
|
24
|
+
*/
|
|
25
|
+
projectRoot?: string;
|
|
26
|
+
/**
|
|
27
|
+
* The MMR state root that holds user-scoped acks at `<userRoot>/acks`. This
|
|
28
|
+
* is the same root as jobs/sessions (resolveSessionRoot(), i.e. MMR_HOME ??
|
|
29
|
+
* ~/.mmr), so user acks live beside jobs/ and sessions/ and honor MMR_HOME.
|
|
30
|
+
*/
|
|
31
|
+
userRoot: string;
|
|
32
|
+
/**
|
|
33
|
+
* When set, project-scope ack reads come from this Git ref via `git show`
|
|
34
|
+
* (committed blobs) instead of the working tree — the §5-decision-1 trust
|
|
35
|
+
* boundary, so an untrusted PR can't self-suppress by adding working-tree
|
|
36
|
+
* acks. User-scope reads and all writes are unaffected.
|
|
37
|
+
*/
|
|
38
|
+
configBaseRef?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Build an AckStore for a review run. User-scope acks (`<userRoot>/acks`,
|
|
42
|
+
* userRoot = resolveSessionRoot(), MMR_HOME-aware) are always loaded — they
|
|
43
|
+
* live on the operator's own machine. Project-scope acks live in the reviewed
|
|
44
|
+
* tree, which may be untrusted (a PR checkout in CI), so they are loaded only
|
|
45
|
+
* when explicitly trusted — otherwise an attacker could commit
|
|
46
|
+
* `.mmr/acks/<sha>.json` to self-suppress their own findings. The full trusted
|
|
47
|
+
* path (loading project acks from a git base ref) is added by the trust-mode
|
|
48
|
+
* thread; until then this gates project acks behind trust_project_acks.
|
|
49
|
+
*
|
|
50
|
+
* The project root is discovered by walking up from `cwd` (default
|
|
51
|
+
* process.cwd()) to the repository root, so acks resolve correctly even when
|
|
52
|
+
* the command runs from a subdirectory. userRoot is supplied by the caller
|
|
53
|
+
* (resolveSessionRoot()); cwd is injectable for tests.
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildReviewAckStore(opts: {
|
|
56
|
+
trustProjectAcks: boolean;
|
|
57
|
+
userRoot: string;
|
|
58
|
+
cwd?: string;
|
|
59
|
+
configBaseRef?: string;
|
|
60
|
+
}): AckStore;
|
|
61
|
+
export declare class AckStore {
|
|
62
|
+
private readonly projectDir;
|
|
63
|
+
private readonly userDir;
|
|
64
|
+
private readonly projectRootResolved;
|
|
65
|
+
private readonly userRootResolved;
|
|
66
|
+
private readonly configBaseRef;
|
|
67
|
+
private readonly loaded;
|
|
68
|
+
constructor(opts: AckStoreOptions);
|
|
69
|
+
private validateKey;
|
|
70
|
+
/**
|
|
71
|
+
* Returns the acks dir for a scope after verifying it does not escape its
|
|
72
|
+
* root via a symlinked ancestor. A leaf-only symlink check is not enough:
|
|
73
|
+
* project acks live in the untrusted reviewed tree, where `.mmr` or
|
|
74
|
+
* `.mmr/acks` could itself be a symlink redirecting every mkdir/read/write/
|
|
75
|
+
* unlink out of the sandbox. We realpath the deepest existing ancestor of
|
|
76
|
+
* the acks dir and require it to stay within the (realpath'd) root.
|
|
77
|
+
*/
|
|
78
|
+
private dirForScope;
|
|
79
|
+
/** realpath of the deepest existing ancestor of `p` (p itself if it exists). */
|
|
80
|
+
private realDeepestAncestor;
|
|
81
|
+
private filePath;
|
|
82
|
+
add(record: AckRecord, scope: AckScope): void;
|
|
83
|
+
remove(key: string, scope: AckScope): void;
|
|
84
|
+
private readDir;
|
|
85
|
+
/**
|
|
86
|
+
* Read project-scope ack records from the configured base ref (committed
|
|
87
|
+
* blobs via git), not the working tree. Each file's embedded key must match
|
|
88
|
+
* its filename and the record must be shape-valid (isValidAckRecord), same as
|
|
89
|
+
* the working-tree path. git show returns blob content, so the FS symlink/
|
|
90
|
+
* traversal guards are unnecessary here; readFileAtRef caps the read size.
|
|
91
|
+
*/
|
|
92
|
+
private readProjectRecordsFromRef;
|
|
93
|
+
private records;
|
|
94
|
+
/** Merge project and user acks; project shadows user on finding_key conflict. */
|
|
95
|
+
listAll(): AckRecord[];
|
|
96
|
+
/**
|
|
97
|
+
* Lookup an ack matching the given finding identity, applying the two-step
|
|
98
|
+
* rule from T2-D: (1) exact `finding_key` match (O(1) via the per-scope
|
|
99
|
+
* index); (2) fuzzy fallback only when normalized_location matches AND
|
|
100
|
+
* shingle Jaccard ≥ 0.7. Project scope shadows user scope.
|
|
101
|
+
*/
|
|
102
|
+
lookup(finding: {
|
|
103
|
+
finding_key: string;
|
|
104
|
+
normalized_location: string;
|
|
105
|
+
shingle: string[];
|
|
106
|
+
}): AckMatch | undefined;
|
|
107
|
+
private fuzzyScan;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=ack-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ack-store.d.ts","sourceRoot":"","sources":["../../src/core/ack-store.ts"],"names":[],"mappings":"AAQA;iDACiD;AACjD,eAAO,MAAM,cAAc,QAAmB,CAAA;AAQ9C,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAA;AAEzC,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,SAAS,CAAA;IACjB,KAAK,EAAE,OAAO,GAAG,OAAO,CAAA;IACxB,KAAK,EAAE,QAAQ,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,gBAAgB,EAAE,OAAO,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,GAAG,QAAQ,CAWX;AA4BD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAoB;IACxD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAGlD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAExD,IAAI,EAAE,eAAe;IAajC,OAAO,CAAC,WAAW;IAMnB;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;IAqBnB,gFAAgF;IAChF,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,QAAQ;IAYhB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI;IA0C7C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI;IAa1C,OAAO,CAAC,OAAO;IAuCf;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IA6BjC,OAAO,CAAC,OAAO;IA0Bf,iFAAiF;IACjF,OAAO,IAAI,SAAS,EAAE;IAOtB;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,QAAQ,GAAG,SAAS;IAmB9G,OAAO,CAAC,SAAS;CAWlB"}
|