configproof 0.3.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 (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +217 -0
  3. package/dist/adapters/dotenv.d.ts +3 -0
  4. package/dist/adapters/dotenv.js +277 -0
  5. package/dist/adapters/dotenv.js.map +1 -0
  6. package/dist/adapters/native-env.d.ts +7 -0
  7. package/dist/adapters/native-env.js +196 -0
  8. package/dist/adapters/native-env.js.map +1 -0
  9. package/dist/adapters/registry.d.ts +7 -0
  10. package/dist/adapters/registry.js +30 -0
  11. package/dist/adapters/registry.js.map +1 -0
  12. package/dist/agent/server.d.ts +15 -0
  13. package/dist/agent/server.js +254 -0
  14. package/dist/agent/server.js.map +1 -0
  15. package/dist/analysis/diagnose.d.ts +64 -0
  16. package/dist/analysis/diagnose.js +142 -0
  17. package/dist/analysis/diagnose.js.map +1 -0
  18. package/dist/analysis/history.d.ts +52 -0
  19. package/dist/analysis/history.js +119 -0
  20. package/dist/analysis/history.js.map +1 -0
  21. package/dist/analysis/policy.d.ts +161 -0
  22. package/dist/analysis/policy.js +192 -0
  23. package/dist/analysis/policy.js.map +1 -0
  24. package/dist/analysis/provenance.d.ts +45 -0
  25. package/dist/analysis/provenance.js +144 -0
  26. package/dist/analysis/provenance.js.map +1 -0
  27. package/dist/cli.d.ts +2 -0
  28. package/dist/cli.js +286 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/core/analyze.d.ts +46 -0
  31. package/dist/core/analyze.js +168 -0
  32. package/dist/core/analyze.js.map +1 -0
  33. package/dist/core/collect.d.ts +5 -0
  34. package/dist/core/collect.js +147 -0
  35. package/dist/core/collect.js.map +1 -0
  36. package/dist/core/export.d.ts +53 -0
  37. package/dist/core/export.js +155 -0
  38. package/dist/core/export.js.map +1 -0
  39. package/dist/core/io.d.ts +13 -0
  40. package/dist/core/io.js +100 -0
  41. package/dist/core/io.js.map +1 -0
  42. package/dist/core/privacy.d.ts +25 -0
  43. package/dist/core/privacy.js +113 -0
  44. package/dist/core/privacy.js.map +1 -0
  45. package/dist/core/schema.d.ts +2149 -0
  46. package/dist/core/schema.js +181 -0
  47. package/dist/core/schema.js.map +1 -0
  48. package/dist/demo.d.ts +1 -0
  49. package/dist/demo.js +45 -0
  50. package/dist/demo.js.map +1 -0
  51. package/dist/index.d.ts +23 -0
  52. package/dist/index.js +63 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/launcher.d.ts +27 -0
  55. package/dist/launcher.js +122 -0
  56. package/dist/launcher.js.map +1 -0
  57. package/dist/report/html.d.ts +5 -0
  58. package/dist/report/html.js +109 -0
  59. package/dist/report/html.js.map +1 -0
  60. package/dist/runtime/api.d.ts +44 -0
  61. package/dist/runtime/api.js +29 -0
  62. package/dist/runtime/api.js.map +1 -0
  63. package/dist/runtime/callsite.d.ts +3 -0
  64. package/dist/runtime/callsite.js +61 -0
  65. package/dist/runtime/callsite.js.map +1 -0
  66. package/dist/runtime/children.d.ts +8 -0
  67. package/dist/runtime/children.js +69 -0
  68. package/dist/runtime/children.js.map +1 -0
  69. package/dist/runtime/environment.d.ts +3 -0
  70. package/dist/runtime/environment.js +53 -0
  71. package/dist/runtime/environment.js.map +1 -0
  72. package/dist/runtime/preload.d.ts +1 -0
  73. package/dist/runtime/preload.js +117 -0
  74. package/dist/runtime/preload.js.map +1 -0
  75. package/dist/runtime/recorder.d.ts +59 -0
  76. package/dist/runtime/recorder.js +254 -0
  77. package/dist/runtime/recorder.js.map +1 -0
  78. package/dist/runtime/workers.d.ts +12 -0
  79. package/dist/runtime/workers.js +127 -0
  80. package/dist/runtime/workers.js.map +1 -0
  81. package/docs/ARCHITECTURE.md +54 -0
  82. package/docs/COMPATIBILITY.md +24 -0
  83. package/docs/PRIVACY.md +17 -0
  84. package/docs/VALIDATION.md +42 -0
  85. package/fixtures/bypass/app.cjs +6 -0
  86. package/fixtures/bypass/early.cjs +2 -0
  87. package/fixtures/child-process/child.cjs +2 -0
  88. package/fixtures/child-process/parent.cjs +5 -0
  89. package/fixtures/custom-target/app.cjs +4 -0
  90. package/fixtures/custom-target/sample.env +1 -0
  91. package/fixtures/esm/app.mjs +5 -0
  92. package/fixtures/exit-code/app.cjs +4 -0
  93. package/fixtures/failure-boundary/app.cjs +7 -0
  94. package/fixtures/load-order/app.cjs +9 -0
  95. package/fixtures/load-order/first.env +1 -0
  96. package/fixtures/load-order/second.env +1 -0
  97. package/fixtures/manifest.json +16 -0
  98. package/fixtures/native-env/app.cjs +6 -0
  99. package/fixtures/native-env/failure.cjs +4 -0
  100. package/fixtures/native-env/sample.env +1 -0
  101. package/fixtures/native-env/startup.cjs +2 -0
  102. package/fixtures/runtime-mutation/app.cjs +12 -0
  103. package/fixtures/source-map/input.ts +5 -0
  104. package/fixtures/source-map/tsconfig.json +7 -0
  105. package/fixtures/stale-inheritance/app.cjs +4 -0
  106. package/fixtures/stale-inheritance/sample.env +1 -0
  107. package/fixtures/v03-manifest.json +32 -0
  108. package/fixtures/worker/parent.cjs +3 -0
  109. package/fixtures/worker/worker.cjs +2 -0
  110. package/fixtures/worker-modes/parent.cjs +17 -0
  111. package/fixtures/worker-modes/worker.cjs +4 -0
  112. package/package.json +64 -0
  113. package/policies/configtrace-policy.yaml +23 -0
  114. package/policies/issue-share.yaml +12 -0
  115. package/policies/minimal.yaml +8 -0
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VerificationPolicySchema = void 0;
4
+ exports.readVerificationPolicy = readVerificationPolicy;
5
+ exports.verifyTrace = verifyTrace;
6
+ exports.verificationText = verificationText;
7
+ const zod_1 = require("zod");
8
+ const yaml_1 = require("yaml");
9
+ const schema_1 = require("../core/schema");
10
+ const analyze_1 = require("../core/analyze");
11
+ const privacy_1 = require("../core/privacy");
12
+ const io_1 = require("../core/io");
13
+ const feature = zod_1.z.enum(['environment', 'startup', 'dotenv', 'source-maps', 'children', 'native', 'native-env', 'workers', 'adapters']);
14
+ const RuleSchema = zod_1.z.object({
15
+ required: zod_1.z.boolean().optional(), missing: zod_1.z.boolean().optional(),
16
+ read: zod_1.z.enum(['required', 'forbidden', 'any']).optional(),
17
+ immutableAfterFirstRead: zod_1.z.boolean().optional(),
18
+ allowedOrigins: zod_1.z.array(zod_1.z.string().min(1).max(512)).min(1).max(32).optional(),
19
+ forbiddenOrigins: zod_1.z.array(zod_1.z.string().min(1).max(512)).min(1).max(32).optional(),
20
+ consistentProvenance: zod_1.z.boolean().optional(), noLoaderSkip: zod_1.z.boolean().optional(),
21
+ minimumConfidence: zod_1.z.enum(['observed', 'derived', 'inferred']).default('inferred'),
22
+ }).strict().superRefine((rule, ctx) => {
23
+ if (rule.required && rule.missing)
24
+ ctx.addIssue({ code: zod_1.z.ZodIssueCode.custom, message: 'A key cannot be required and required missing.' });
25
+ });
26
+ exports.VerificationPolicySchema = zod_1.z.object({
27
+ version: zod_1.z.literal(1).default(1),
28
+ rules: zod_1.z.record(zod_1.z.string().regex(/^[A-Za-z_*?][A-Za-z0-9_.*?-]{0,127}$/), RuleSchema)
29
+ .refine(rules => Object.keys(rules).length <= 64, 'At most 64 rules are allowed.').default({}),
30
+ coverage: zod_1.z.object({
31
+ requireComplete: zod_1.z.boolean().default(true), maxDroppedEvents: zod_1.z.number().int().nonnegative().max(100000).default(0),
32
+ requireFeatures: zod_1.z.array(feature).max(16).default(['environment']),
33
+ forbidNotices: zod_1.z.array(schema_1.NoticeSchema).max(64).default([]),
34
+ }).strict().default({}),
35
+ }).strict();
36
+ function readVerificationPolicy(file) {
37
+ try {
38
+ const doc = (0, yaml_1.parseDocument)((0, io_1.readBounded)(file, 65536), { uniqueKeys: true, schema: 'core', strict: true });
39
+ if (doc.errors.length)
40
+ throw new Error('Invalid document');
41
+ return exports.VerificationPolicySchema.parse(doc.toJS({ maxAliasCount: 0 }));
42
+ }
43
+ catch (error) {
44
+ if (error instanceof io_1.UserError)
45
+ throw error;
46
+ throw new io_1.UserError('Invalid configuration contract. Unknown fields, duplicate keys, and YAML aliases are rejected.', 65);
47
+ }
48
+ }
49
+ const level = { unknown: 0, inferred: 1, derived: 2, observed: 3 };
50
+ function originIdentity(e) {
51
+ const o = e.origin;
52
+ if (!o || o.kind === 'unknown' || o.confidence === 'unknown')
53
+ return undefined;
54
+ if (['dotenv', 'native-env'].includes(o.kind) && !o.file)
55
+ return undefined;
56
+ return `${o.kind}${o.kind === 'adapter' && o.adapterId ? ':' + o.adapterId : o.file ? ':' + o.file : ''}`;
57
+ }
58
+ /** Policies are evaluated over captured evidence. Absence under inadequate coverage is not a pass. */
59
+ function verifyTrace(trace, supplied, options = {}) {
60
+ let policy;
61
+ try {
62
+ policy = exports.VerificationPolicySchema.parse(supplied);
63
+ }
64
+ catch {
65
+ throw new io_1.UserError('Invalid configuration verification policy.', 65);
66
+ }
67
+ const processId = (0, analyze_1.processFor)(trace, options.processId);
68
+ const info = trace.processes.find(p => p.id === processId);
69
+ const complete = trace.capture.status === 'complete' && !!info?.ended;
70
+ const insensitive = (info?.caseMode || trace.capture.caseMode) === 'insensitive';
71
+ const events = trace.events.filter(e => e.processId === processId);
72
+ const keys = [...new Set([...events.flatMap(e => e.key ? [e.key] : []), ...trace.capture.watch.filter(k => !/[*?]/.test(k)).map(k => insensitive ? k.toUpperCase() : k)])].sort();
73
+ const checks = [];
74
+ const evidenceCache = new Map();
75
+ const referenceCache = new Map();
76
+ const add = (rule, status, reason, key, evidence = []) => checks.push({ key, rule, status, reason, evidenceIds: evidence.slice(0, 12).map(e => e.id) });
77
+ if (!processId || !info)
78
+ add('process', 'inconclusive', 'No selected execution context was captured.');
79
+ if (policy.coverage.requireComplete)
80
+ add('coverage.complete', complete ? 'pass' : 'inconclusive', complete ? 'The selected stream and artifact are complete within their declarations.' : 'The artifact or selected stream is incomplete.');
81
+ const dropped = trace.processes.reduce((n, p) => n + p.eventsDropped, 0);
82
+ add('coverage.maxDroppedEvents', dropped <= policy.coverage.maxDroppedEvents ? 'pass' : 'inconclusive', `${dropped} recorded dropped events; evidence cannot prove omitted operations.`);
83
+ for (const expected of policy.coverage.requireFeatures) {
84
+ const declaration = trace.coverage.find(c => c.feature === expected);
85
+ const present = declaration && ['active', 'limited'].includes(declaration.status);
86
+ add(`coverage.${expected}`, present ? 'pass' : 'inconclusive', present ? 'Requested feature has an active/limited coverage declaration; its listed bypasses still apply.' : 'Requested feature has no usable coverage declaration.');
87
+ }
88
+ for (const notice of policy.coverage.forbidNotices)
89
+ add('coverage.forbidNotices', trace.capture.notices.includes(notice) ? 'violation' : complete ? 'pass' : 'inconclusive', trace.capture.notices.includes(notice) ? `Forbidden capture notice: ${notice}.` : `Notice ${notice} was not captured.`);
90
+ const loadersRemoved = trace.capture.notices.includes('loader_details_removed');
91
+ for (const [pattern, rule] of Object.entries(policy.rules)) {
92
+ const matching = keys.filter(key => (0, privacy_1.globToRegex)(pattern, insensitive).test(key));
93
+ if (!matching.length) {
94
+ add('selector', 'inconclusive', 'Rule matched no captured key. Add a literal --watch selector before asserting absence.', pattern);
95
+ continue;
96
+ }
97
+ for (const key of matching) {
98
+ let evidence = evidenceCache.get(key);
99
+ if (!evidence) {
100
+ evidence = (0, analyze_1.evidenceFor)(trace, key, processId);
101
+ evidenceCache.set(key, evidence);
102
+ }
103
+ const actual = evidence.events.filter(e => ['baseline', 'read', 'write', 'delete'].includes(e.operation));
104
+ const consumed = evidence.reads.length ? evidence.reads : actual.length ? [actual.at(-1)] : [];
105
+ const usable = complete && actual.length > 0;
106
+ if (rule.required || rule.missing) {
107
+ const expected = rule.missing ? 'missing' : 'present';
108
+ const violating = consumed.filter(e => e.value?.state !== 'omitted' && e.value?.state !== expected);
109
+ const unknown = !consumed.length || consumed.some(e => !e.value || e.value.state === 'omitted');
110
+ add(rule.missing ? 'missing' : 'required', violating.length ? 'violation' : unknown || !usable ? 'inconclusive' : 'pass', violating.length ? `Captured consumption/final state contradicts required state ${expected}.` : unknown ? 'No comparable consumption/final state was observed.' : `Captured application reads (or final captured state when unread) satisfy ${expected}.`, key, violating.length ? violating : consumed);
111
+ }
112
+ if (rule.read && rule.read !== 'any') {
113
+ const exists = evidence.reads.length > 0;
114
+ const passes = rule.read === 'required' ? exists : !exists;
115
+ add('read', exists ? passes ? 'pass' : 'violation' : usable ? passes ? 'pass' : 'violation' : 'inconclusive', exists ? `${evidence.reads.length} application reads were captured.` : 'No application read was captured in the selected context.', key, evidence.reads);
116
+ }
117
+ if (rule.immutableAfterFirstRead) {
118
+ const first = evidence.reads[0];
119
+ let prior = first?.value;
120
+ const changes = [];
121
+ let unknown = !first || prior?.state === 'omitted';
122
+ for (const e of actual.filter(e => first && e.seq > first.seq)) {
123
+ if (e.operation === 'baseline')
124
+ continue;
125
+ const equality = (0, analyze_1.compareValue)(prior, e.value, trace.comparison.mode !== 'none');
126
+ if (equality === 'different')
127
+ changes.push(e);
128
+ if (equality === 'incomparable' || equality === 'not-observed')
129
+ unknown = true;
130
+ prior = e.value;
131
+ }
132
+ add('immutableAfterFirstRead', changes.length ? 'violation' : unknown || !usable ? 'inconclusive' : 'pass', changes.length ? 'A value/state transition was captured after the first application read.' : unknown ? 'No comparable first-read sequence is available.' : 'No value/state transition was captured after the first application read.', key, first ? [first, ...changes] : []);
133
+ }
134
+ for (const kind of ['allowedOrigins', 'forbiddenOrigins']) {
135
+ const patterns = rule[kind];
136
+ if (!patterns)
137
+ continue;
138
+ let unknown = !consumed.length || loadersRemoved || trace.exported;
139
+ const violating = [];
140
+ for (const e of consumed) {
141
+ const origin = originIdentity(e);
142
+ if (!origin || level[e.origin?.confidence || 'unknown'] < level[rule.minimumConfidence] || e.value?.state !== 'present') {
143
+ unknown = true;
144
+ continue;
145
+ }
146
+ const matches = patterns.some(p => (0, privacy_1.globToRegex)(p).test(origin));
147
+ if (kind === 'allowedOrigins' ? !matches : matches)
148
+ violating.push(e);
149
+ }
150
+ add(kind, trace.exported ? 'inconclusive' : violating.length ? 'violation' : unknown || !usable ? 'inconclusive' : 'pass', trace.exported ? 'Export can alter source identities; source contracts require original local evidence.' : violating.length ? 'Captured origin contradicts the configured source rule.' : unknown ? 'Origin identity/confidence is insufficient for this rule.' : 'Captured origins satisfy this source rule at the requested confidence threshold.', key, violating.length ? violating : consumed);
151
+ }
152
+ const loaderCoverage = trace.coverage.some(c => ['dotenv', 'native-env'].includes(c.feature) && ['active', 'limited'].includes(c.status));
153
+ if (rule.noLoaderSkip)
154
+ add('noLoaderSkip', evidence.skips.length ? 'violation' : !usable || loadersRemoved || !loaderCoverage ? 'inconclusive' : 'pass', evidence.skips.length ? 'A loader candidate skip was captured.' : 'No loader skip was captured for this key.', key, evidence.skips);
155
+ if (rule.consistentProvenance) {
156
+ if (!options.reference) {
157
+ add('consistentProvenance', 'inconclusive', 'A reference trace is required for paired provenance verification.', key);
158
+ continue;
159
+ }
160
+ let other = referenceCache.get(key);
161
+ if (!other) {
162
+ other = (0, analyze_1.evidenceFor)(options.reference, key, options.referenceProcess);
163
+ referenceCache.set(key, other);
164
+ }
165
+ const a = evidence.reads.map(originIdentity), b = other.reads.map(originIdentity);
166
+ const unknown = !a.length || !b.length || a.some(x => !x) || b.some(x => !x)
167
+ || [...evidence.reads, ...other.reads].some(e => level[e.origin?.confidence || 'unknown'] < level[rule.minimumConfidence])
168
+ || !options.reference.processes.find(p => p.id === other.processId)?.ended
169
+ || !complete || options.reference.capture.status !== 'complete' || trace.exported || options.reference.exported;
170
+ const same = JSON.stringify(a) === JSON.stringify(b);
171
+ add('consistentProvenance', unknown ? 'inconclusive' : same ? 'pass' : 'violation', unknown ? 'Paired source evidence is absent, incomplete, or transformed.' : same ? 'Ordered captured read-origin identities match.' : 'Ordered captured read-origin identities differ.', key, evidence.reads);
172
+ }
173
+ }
174
+ }
175
+ const counts = { pass: checks.filter(c => c.status === 'pass').length, violation: checks.filter(c => c.status === 'violation').length,
176
+ inconclusive: checks.filter(c => c.status === 'inconclusive').length };
177
+ const status = counts.violation ? 'violation' : counts.inconclusive ? 'inconclusive' : 'pass';
178
+ return { schemaVersion: 'configtrace-verification/1', traceId: trace.id, processId, status, exitCode: status === 'pass' ? 0 : status === 'violation' ? 2 : 3,
179
+ counts, checks, rawValuesAvailable: false, caveats: [
180
+ 'A pass applies only to the watched keys, selected context, captured operations, and declared coverage. It is not universal program verification.',
181
+ 'Source rules accept inferred origins by default. Raise minimumConfidence when an inferred match is insufficient.',
182
+ 'An observed violation takes precedence over unrelated incomplete evidence; both remain in the check results.',
183
+ 'Presence allows an empty string. Contracts do not read or compare raw configuration values.',
184
+ ] };
185
+ }
186
+ function verificationText(result) {
187
+ return (0, io_1.terminalSafe)([`CONFIGTRACE / VERIFY — ${result.status.toUpperCase()}`,
188
+ `${result.counts.pass} pass · ${result.counts.violation} violation · ${result.counts.inconclusive} inconclusive`,
189
+ ...result.checks.map(c => `[${c.status}] ${c.key ? c.key + ' / ' : ''}${c.rule}: ${c.reason}`),
190
+ ...result.caveats.map(c => `Note: ${c}`)].join('\n'), true) + '\n';
191
+ }
192
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/analysis/policy.ts"],"names":[],"mappings":";;;AAwCA,wDASC;AASD,kCAuGC;AACD,4CAKC;AAvKD,6BAAwB;AACxB,+BAAqC;AAErC,2CAA8C;AAC9C,6CAAwE;AACxE,6CAA8C;AAC9C,mCAAkE;AAElE,MAAM,OAAO,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AACvI,MAAM,UAAU,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1B,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjE,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzD,uBAAuB,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/C,cAAc,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7E,gBAAgB,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC/E,oBAAoB,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClF,iBAAiB,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;CACnF,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACpC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;QAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAC,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC,CAAC;AAC9I,CAAC,CAAC,CAAC;AACU,QAAA,wBAAwB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/C,OAAO,EAAE,OAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAChC,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sCAAsC,CAAC,EAAE,UAAU,CAAC;SAClF,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,+BAA+B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAChG,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC;QACjB,eAAe,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACnH,eAAe,EAAE,OAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC;QAClE,aAAa,EAAE,OAAC,CAAC,KAAK,CAAC,qBAAY,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KACzD,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACxB,CAAC,CAAC,MAAM,EAAE,CAAC;AAWZ,SAAgB,sBAAsB,CAAC,IAAY;IACjD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,oBAAa,EAAC,IAAA,gBAAW,EAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACxG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC3D,OAAO,gCAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,cAAS;YAAE,MAAM,KAAK,CAAC;QAC5C,MAAM,IAAI,cAAS,CAAC,gGAAgG,EAAE,EAAE,CAAC,CAAC;IAC5H,CAAC;AACH,CAAC;AACD,MAAM,KAAK,GAAyC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AACzG,SAAS,cAAc,CAAC,CAAc;IACpC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC/E,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC3E,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC5G,CAAC;AACD,sGAAsG;AACtG,SAAgB,WAAW,CAAC,KAAY,EAAE,QAAiB,EAAE,UAAgF,EAAE;IAC7I,IAAI,MAA0B,CAAC;IAC/B,IAAI,CAAC;QAAC,MAAM,GAAG,gCAAwB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAAC,CAAC;IAC1D,MAAM,CAAC;QAAC,MAAM,IAAI,cAAS,CAAC,4CAA4C,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IAChF,MAAM,SAAS,GAAG,IAAA,oBAAU,EAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;IACtE,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC;IACjF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClL,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0C,CAAC;IACxE,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0C,CAAC;IACzE,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,MAAmC,EAAE,MAAc,EAAE,GAAY,EAAE,WAA0B,EAAE,EAAE,EAAE,CAC5H,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChG,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI;QAAE,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,6CAA6C,CAAC,CAAC;IACvG,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe;QAAE,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,0EAA0E,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC;IAC5O,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,2BAA2B,EAAE,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,OAAO,qEAAqE,CAAC,CAAC;IACzL,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QACvD,MAAM,WAAW,GAAyB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAG,WAAW,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClF,GAAG,CAAC,YAAY,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,gGAAgG,CAAC,CAAC,CAAC,uDAAuD,CAAC,CAAC;IACvO,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa;QAAE,GAAG,CAAC,wBAAwB,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,6BAA6B,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,MAAM,oBAAoB,CAAC,CAAC;IACrS,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAChF,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAA,qBAAW,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAAC,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,wFAAwF,EAAE,OAAO,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACvK,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,QAAQ,GAAG,IAAA,qBAAW,EAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gBAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAAC,CAAC;YACnG,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1G,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChG,MAAM,MAAM,GAAG,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC;gBACpG,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;gBAChG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EACtH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,+DAA+D,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC,CAAC,4EAA4E,QAAQ,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC7S,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC3D,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,EAC1G,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,mCAAmC,CAAC,CAAC,CAAC,2DAA2D,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7J,CAAC;YACD,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,CAAC;gBACzB,MAAM,OAAO,GAAkB,EAAE,CAAC;gBAClC,IAAI,OAAO,GAAG,CAAC,KAAK,IAAI,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC;gBACnD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/D,IAAI,CAAC,CAAC,SAAS,KAAK,UAAU;wBAAE,SAAS;oBACzC,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;oBAChF,IAAI,QAAQ,KAAK,WAAW;wBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,QAAQ,KAAK,cAAc,IAAI,QAAQ,KAAK,cAAc;wBAAE,OAAO,GAAG,IAAI,CAAC;oBAC/E,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBAClB,CAAC;gBACD,GAAG,CAAC,yBAAyB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EACxG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,yEAAyE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,0EAA0E,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClR,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAU,EAAE,CAAC;gBACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAC,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBACrD,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,cAAc,IAAI,KAAK,CAAC,QAAQ,CAAC;gBACnE,MAAM,SAAS,GAAkB,EAAE,CAAC;gBACpC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,IAAI,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;wBAAC,OAAO,GAAG,IAAI,CAAC;wBAAC,SAAS;oBAAC,CAAC;oBACtJ,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,qBAAW,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;oBAChE,IAAI,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;wBAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxE,CAAC;gBACD,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EACvH,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,uFAAuF,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,yDAAyD,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC,kFAAkF,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACxY,CAAC;YACD,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1I,IAAI,IAAI,CAAC,YAAY;gBAAE,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EACrJ,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,2CAA2C,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtI,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;oBAAC,GAAG,CAAC,sBAAsB,EAAE,cAAc,EAAE,mEAAmE,EAAE,GAAG,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAC5J,IAAI,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAAC,KAAK,GAAG,IAAA,qBAAW,EAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;oBAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAAC,CAAC;gBACtH,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAClF,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;uBACvE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,IAAI,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;uBACvH,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK;uBACvE,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAClH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACrD,GAAG,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,+DAA+D,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,iDAAiD,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpS,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM;QACnI,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC;IACzE,MAAM,MAAM,GAAiC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5H,OAAO,EAAE,aAAa,EAAE,4BAA4B,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1J,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE;YAClD,kJAAkJ;YAClJ,kHAAkH;YAClH,8GAA8G;YAC9G,6FAA6F;SAC9F,EAAE,CAAC;AACR,CAAC;AACD,SAAgB,gBAAgB,CAAC,MAA0B;IACzD,OAAO,IAAA,iBAAY,EAAC,CAAC,0BAA0B,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;QAC1E,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,WAAW,MAAM,CAAC,MAAM,CAAC,SAAS,gBAAgB,MAAM,CAAC,MAAM,CAAC,YAAY,eAAe;QAChH,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9F,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;AACvE,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { Trace, Origin } from '../core/schema';
2
+ export type EvidenceConfidence = Origin['confidence'];
3
+ export type ProvenanceNodeKind = 'process' | 'worker' | 'key' | 'startup' | 'candidate' | 'application' | 'mutation' | 'read' | 'loader' | 'source' | 'read-site' | 'adapter' | 'boundary' | 'unknown';
4
+ export type ProvenanceRelation = 'contains' | 'proposed' | 'applied' | 'skipped' | 'overwrote' | 'inherited' | 'read-by' | 'spawned-with' | 'copied-to' | 'shared-with' | 'evidence-linked-to' | 'declared-source';
5
+ export interface ProvenanceNode {
6
+ id: string;
7
+ kind: ProvenanceNodeKind;
8
+ label: string;
9
+ processId?: string;
10
+ key?: string;
11
+ eventId?: string;
12
+ seq?: number;
13
+ at?: number;
14
+ confidence: EvidenceConfidence;
15
+ state?: 'present' | 'missing' | 'omitted';
16
+ empty?: boolean;
17
+ }
18
+ export interface ProvenanceEdge {
19
+ id: string;
20
+ from: string;
21
+ to: string;
22
+ relation: ProvenanceRelation;
23
+ confidence: EvidenceConfidence;
24
+ evidenceIds: string[];
25
+ }
26
+ export interface ProvenanceGraph {
27
+ schemaVersion: 'configtrace-provenance/1';
28
+ traceId: string;
29
+ rawValuesAvailable: false;
30
+ nodes: ProvenanceNode[];
31
+ edges: ProvenanceEdge[];
32
+ truncated: boolean;
33
+ coverage: Trace['coverage'];
34
+ captureStatus: Trace['capture']['status'];
35
+ caveats: string[];
36
+ }
37
+ export interface ProvenanceOptions {
38
+ key?: string;
39
+ processId?: string;
40
+ allProcesses?: boolean;
41
+ maxNodes?: number;
42
+ maxEdges?: number;
43
+ }
44
+ /** A directed acyclic evidence graph, not a claim of full causal reconstruction. */
45
+ export declare function buildProvenance(trace: Trace, options?: ProvenanceOptions): ProvenanceGraph;
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildProvenance = buildProvenance;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const privacy_1 = require("../core/privacy");
6
+ const analyze_1 = require("../core/analyze");
7
+ const io_1 = require("../core/io");
8
+ const identity = (...parts) => (0, node_crypto_1.createHash)('sha256').update(JSON.stringify(parts)).digest('hex').slice(0, 24);
9
+ const eventKind = (e) => e.operation === 'baseline' ? 'startup'
10
+ : e.operation === 'candidate' ? 'candidate' : e.operation === 'read' ? 'read'
11
+ : e.operation === 'write' && ['dotenv', 'native-env'].includes(e.origin?.kind || '') ? 'application'
12
+ : ['write', 'delete'].includes(e.operation) ? 'mutation' : e.operation === 'boundary' ? 'boundary' : 'loader';
13
+ /** A directed acyclic evidence graph, not a claim of full causal reconstruction. */
14
+ function buildProvenance(trace, options = {}) {
15
+ const maxNodes = options.maxNodes ?? 20000, maxEdges = options.maxEdges ?? 60000;
16
+ if (!Number.isInteger(maxNodes) || maxNodes < 10 || maxNodes > 250000 || !Number.isInteger(maxEdges) || maxEdges < 10 || maxEdges > 1000000)
17
+ throw new io_1.UserError('Invalid provenance display limits.');
18
+ const chosen = options.allProcesses ? undefined : (0, analyze_1.processFor)(trace, options.processId);
19
+ const contexts = new Map(trace.processes.map(p => [p.id, p]));
20
+ const caseFor = (pid) => contexts.get(pid)?.caseMode || trace.capture.caseMode;
21
+ const keyMatches = (e) => !options.key || e.key === (caseFor(e.processId) === 'insensitive' ? options.key.toUpperCase() : options.key);
22
+ const selected = trace.events.filter(e => (!chosen || e.processId === chosen) && (keyMatches(e) || !e.key && ['child-spawn', 'worker-spawn', 'boundary'].includes(e.operation)));
23
+ const nodes = new Map();
24
+ const edges = [];
25
+ const edgeIds = new Set();
26
+ let truncated = false;
27
+ const add = (node) => {
28
+ if (nodes.has(node.id))
29
+ return true;
30
+ if (nodes.size >= maxNodes) {
31
+ truncated = true;
32
+ return false;
33
+ }
34
+ nodes.set(node.id, node);
35
+ return true;
36
+ };
37
+ const link = (from, to, relation, confidence, evidenceIds = []) => {
38
+ if (!nodes.has(from) || !nodes.has(to) || from === to)
39
+ return;
40
+ const id = identity(from, to, relation);
41
+ if (edgeIds.has(id))
42
+ return;
43
+ if (edges.length >= maxEdges) {
44
+ truncated = true;
45
+ return;
46
+ }
47
+ edgeIds.add(id);
48
+ edges.push({ id, from, to, relation, confidence, evidenceIds });
49
+ };
50
+ for (const p of trace.processes)
51
+ add({ id: `process:${p.id}`, kind: p.role === 'worker' ? 'worker' : 'process', label: `${p.role} ${p.id}`, processId: p.id, confidence: 'observed' });
52
+ const state = new Map();
53
+ const candidate = new Map();
54
+ const fileLoads = new Map();
55
+ for (const e of selected) {
56
+ const eid = `event:${e.id}`, pid = `process:${e.processId}`;
57
+ const slot = JSON.stringify([e.processId, e.key]);
58
+ const confidence = e.origin?.confidence || 'observed';
59
+ if (!add({ id: eid, kind: eventKind(e), label: `${e.operation}${e.key ? ' ' + e.key : e.loaderMethod ? ' ' + e.loaderMethod : ''}`,
60
+ processId: e.processId, key: e.key, eventId: e.id, seq: e.seq, at: e.at, confidence,
61
+ state: e.value?.state, empty: e.value?.state === 'present' ? e.value.empty : undefined }))
62
+ break;
63
+ link(pid, eid, 'contains', 'observed', [e.id]);
64
+ if (e.key) {
65
+ const kid = `key:${identity(e.processId, e.key)}`;
66
+ add({ id: kid, kind: 'key', label: e.key, processId: e.processId, key: e.key, confidence: 'derived' });
67
+ link(pid, kid, 'contains', 'derived');
68
+ link(kid, eid, 'contains', 'derived', [e.id]);
69
+ }
70
+ if (e.origin?.file) {
71
+ const sid = `source:${identity(e.processId, e.origin.kind, e.origin.file)}`;
72
+ add({ id: sid, kind: 'source', label: e.origin.file, processId: e.processId, confidence });
73
+ // Read-origin files are annotations, not direct proof of a new file load at read time.
74
+ if (e.operation !== 'read')
75
+ link(sid, eid, e.outcome === 'declared' ? 'declared-source' : 'evidence-linked-to', confidence, [e.id]);
76
+ const loaderSlot = JSON.stringify([e.processId, e.origin.kind, e.origin.file]);
77
+ if (e.operation === 'load')
78
+ fileLoads.set(loaderSlot, e);
79
+ else if (e.operation === 'candidate') {
80
+ const load = fileLoads.get(loaderSlot);
81
+ if (load && load.seq < e.seq)
82
+ link(`event:${load.id}`, eid, 'proposed', 'inferred', [load.id, e.id]);
83
+ }
84
+ }
85
+ if (e.origin?.adapterId) {
86
+ const aid = `adapter:${identity(e.processId, e.origin.adapterId)}`;
87
+ add({ id: aid, kind: 'adapter', label: e.origin.adapterId, processId: e.processId, confidence });
88
+ link(aid, eid, 'evidence-linked-to', confidence, [e.id]);
89
+ }
90
+ if (e.operation === 'baseline') {
91
+ const unknown = `unknown-before:${e.id}`;
92
+ add({ id: unknown, kind: 'unknown', label: 'Before preload: provenance unavailable', processId: e.processId, key: e.key, confidence: 'unknown' });
93
+ link(unknown, eid, 'inherited', 'unknown', [e.id]);
94
+ }
95
+ if (e.operation === 'candidate')
96
+ candidate.set(slot, e);
97
+ if (e.operation === 'skip' || e.operation === 'write') {
98
+ const prior = candidate.get(slot);
99
+ const compared = e.operation === 'skip' ? e.candidate : e.value;
100
+ if (prior && (0, privacy_1.sameValue)(prior.value, compared) && prior.origin?.kind === e.origin?.kind && prior.origin?.file === e.origin?.file) {
101
+ link(`event:${prior.id}`, eid, e.operation === 'skip' ? 'skipped' : 'applied', 'inferred', [prior.id, e.id]);
102
+ }
103
+ }
104
+ if (['write', 'delete'].includes(e.operation)) {
105
+ const prior = state.get(slot);
106
+ if (prior && prior.value?.state === 'present' && !(0, privacy_1.sameValue)(prior.value, e.value))
107
+ link(`event:${prior.id}`, eid, 'overwrote', 'derived', [prior.id, e.id]);
108
+ }
109
+ if (e.causedBy)
110
+ link(`event:${e.causedBy}`, eid, 'evidence-linked-to', 'inferred', [e.causedBy, e.id]);
111
+ if (e.operation === 'read') {
112
+ if (!e.causedBy || e.origin?.kind === 'unknown') {
113
+ const uid = `unknown:${e.id}`;
114
+ add({ id: uid, kind: 'unknown', label: 'Prior origin unavailable', processId: e.processId, key: e.key, confidence: 'unknown' });
115
+ link(uid, eid, 'evidence-linked-to', 'unknown', [e.id]);
116
+ }
117
+ if (e.site) {
118
+ // Read sites are sinks distinct from source-file nodes: no synthetic file cycles.
119
+ const sid = `read-site:${identity(e.processId, (0, analyze_1.siteLabel)(e))}`;
120
+ add({ id: sid, kind: 'read-site', label: (0, analyze_1.siteLabel)(e), processId: e.processId, confidence: 'observed' });
121
+ link(eid, sid, 'read-by', 'observed', [e.id]);
122
+ }
123
+ }
124
+ if (['baseline', 'write', 'delete'].includes(e.operation))
125
+ state.set(slot, e);
126
+ if (['child-spawn', 'worker-spawn'].includes(e.operation) && e.childId && e.outcome === 'spawned') {
127
+ const relation = e.environmentMode === 'shared' ? 'shared-with' : e.environmentMode === 'copied' ? 'copied-to' : 'spawned-with';
128
+ const child = contexts.get(e.childId);
129
+ // Only a confirmed child of this context can receive a creation edge.
130
+ if (child?.parentId === e.processId && child.role === (e.operation === 'worker-spawn' ? 'worker' : 'child'))
131
+ link(eid, `process:${e.childId}`, relation, 'observed', [e.id]);
132
+ }
133
+ }
134
+ return { schemaVersion: 'configtrace-provenance/1', traceId: trace.id, rawValuesAvailable: false,
135
+ nodes: [...nodes.values()], edges, truncated, coverage: trace.coverage, captureStatus: trace.capture.status,
136
+ caveats: [
137
+ 'Observed nodes and inferred causal links are different claims. Matching fingerprints do not rule out unobserved mutations.',
138
+ 'The graph is ordered per execution context. Timestamps from different processes or Workers are not a shared causal clock.',
139
+ 'Startup presence does not identify a shell or an early env file. A declared startup flag is only a source hint.',
140
+ 'A SHARE_ENV relationship does not identify which concurrent write supplied another thread\'s read.',
141
+ ...(truncated ? ['Graph limits were reached. Some nodes or links are omitted; use a key/process filter.'] : []),
142
+ ] };
143
+ }
144
+ //# sourceMappingURL=provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/analysis/provenance.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};