@codeledger/engine 0.7.1 → 0.7.3
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/dist/claims/claims.d.ts +14 -0
- package/dist/claims/claims.d.ts.map +1 -0
- package/dist/claims/claims.js +125 -0
- package/dist/claims/claims.js.map +1 -0
- package/dist/claims/index.d.ts +2 -0
- package/dist/claims/index.d.ts.map +1 -0
- package/dist/claims/index.js +2 -0
- package/dist/claims/index.js.map +1 -0
- package/dist/dashboard/index.d.ts +3 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +3 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/metrics.d.ts +24 -0
- package/dist/dashboard/metrics.d.ts.map +1 -0
- package/dist/dashboard/metrics.js +358 -0
- package/dist/dashboard/metrics.js.map +1 -0
- package/dist/dashboard/store.d.ts +26 -0
- package/dist/dashboard/store.d.ts.map +1 -0
- package/dist/dashboard/store.js +97 -0
- package/dist/dashboard/store.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/integration/ambient-coordinator.d.ts +75 -0
- package/dist/integration/ambient-coordinator.d.ts.map +1 -0
- package/dist/integration/ambient-coordinator.js +183 -0
- package/dist/integration/ambient-coordinator.js.map +1 -0
- package/dist/integration/index.d.ts +4 -0
- package/dist/integration/index.d.ts.map +1 -0
- package/dist/integration/index.js +3 -0
- package/dist/integration/index.js.map +1 -0
- package/dist/integration/warning-throttle.d.ts +63 -0
- package/dist/integration/warning-throttle.d.ts.map +1 -0
- package/dist/integration/warning-throttle.js +347 -0
- package/dist/integration/warning-throttle.js.map +1 -0
- package/dist/intervention/escalation.d.ts +23 -0
- package/dist/intervention/escalation.d.ts.map +1 -0
- package/dist/intervention/escalation.js +149 -0
- package/dist/intervention/escalation.js.map +1 -0
- package/dist/intervention/generator.d.ts +12 -0
- package/dist/intervention/generator.d.ts.map +1 -0
- package/dist/intervention/generator.js +191 -0
- package/dist/intervention/generator.js.map +1 -0
- package/dist/intervention/index.d.ts +4 -0
- package/dist/intervention/index.d.ts.map +1 -0
- package/dist/intervention/index.js +4 -0
- package/dist/intervention/index.js.map +1 -0
- package/dist/intervention/signal-aggregator.d.ts +26 -0
- package/dist/intervention/signal-aggregator.d.ts.map +1 -0
- package/dist/intervention/signal-aggregator.js +274 -0
- package/dist/intervention/signal-aggregator.js.map +1 -0
- package/dist/layer-d/conflict-detector.d.ts +12 -0
- package/dist/layer-d/conflict-detector.d.ts.map +1 -0
- package/dist/layer-d/conflict-detector.js +150 -0
- package/dist/layer-d/conflict-detector.js.map +1 -0
- package/dist/layer-d/index.d.ts +3 -0
- package/dist/layer-d/index.d.ts.map +1 -0
- package/dist/layer-d/index.js +3 -0
- package/dist/layer-d/index.js.map +1 -0
- package/dist/layer-d/surface-extractor.d.ts +10 -0
- package/dist/layer-d/surface-extractor.d.ts.map +1 -0
- package/dist/layer-d/surface-extractor.js +96 -0
- package/dist/layer-d/surface-extractor.js.map +1 -0
- package/dist/policy-domains/domains.d.ts +31 -0
- package/dist/policy-domains/domains.d.ts.map +1 -0
- package/dist/policy-domains/domains.js +445 -0
- package/dist/policy-domains/domains.js.map +1 -0
- package/dist/policy-domains/index.d.ts +8 -0
- package/dist/policy-domains/index.d.ts.map +1 -0
- package/dist/policy-domains/index.js +8 -0
- package/dist/policy-domains/index.js.map +1 -0
- package/dist/pulse/index.d.ts +2 -0
- package/dist/pulse/index.d.ts.map +1 -0
- package/dist/pulse/index.js +2 -0
- package/dist/pulse/index.js.map +1 -0
- package/dist/pulse/pulse.d.ts +20 -0
- package/dist/pulse/pulse.d.ts.map +1 -0
- package/dist/pulse/pulse.js +253 -0
- package/dist/pulse/pulse.js.map +1 -0
- package/dist/severity/index.d.ts +2 -0
- package/dist/severity/index.d.ts.map +1 -0
- package/dist/severity/index.js +2 -0
- package/dist/severity/index.js.map +1 -0
- package/dist/severity/severity.d.ts +48 -0
- package/dist/severity/severity.d.ts.map +1 -0
- package/dist/severity/severity.js +134 -0
- package/dist/severity/severity.js.map +1 -0
- package/dist/staleness/index.d.ts +2 -0
- package/dist/staleness/index.d.ts.map +1 -0
- package/dist/staleness/index.js +2 -0
- package/dist/staleness/index.js.map +1 -0
- package/dist/staleness/jit-staleness.d.ts +29 -0
- package/dist/staleness/jit-staleness.d.ts.map +1 -0
- package/dist/staleness/jit-staleness.js +240 -0
- package/dist/staleness/jit-staleness.js.map +1 -0
- package/dist/team-policy/index.d.ts +1 -1
- package/dist/team-policy/index.d.ts.map +1 -1
- package/dist/team-policy/index.js +1 -1
- package/dist/team-policy/index.js.map +1 -1
- package/dist/team-policy/policy.d.ts +7 -0
- package/dist/team-policy/policy.d.ts.map +1 -1
- package/dist/team-policy/policy.js +38 -0
- package/dist/team-policy/policy.js.map +1 -1
- package/dist/trust/approval.d.ts +16 -0
- package/dist/trust/approval.d.ts.map +1 -0
- package/dist/trust/approval.js +183 -0
- package/dist/trust/approval.js.map +1 -0
- package/dist/trust/capsule.d.ts +36 -0
- package/dist/trust/capsule.d.ts.map +1 -0
- package/dist/trust/capsule.js +206 -0
- package/dist/trust/capsule.js.map +1 -0
- package/dist/trust/index.d.ts +6 -0
- package/dist/trust/index.d.ts.map +1 -0
- package/dist/trust/index.js +6 -0
- package/dist/trust/index.js.map +1 -0
- package/dist/trust/learning-feedback.d.ts +18 -0
- package/dist/trust/learning-feedback.d.ts.map +1 -0
- package/dist/trust/learning-feedback.js +146 -0
- package/dist/trust/learning-feedback.js.map +1 -0
- package/dist/trust/risk-scoring.d.ts +16 -0
- package/dist/trust/risk-scoring.d.ts.map +1 -0
- package/dist/trust/risk-scoring.js +142 -0
- package/dist/trust/risk-scoring.js.map +1 -0
- package/dist/trust/timeline.d.ts +42 -0
- package/dist/trust/timeline.d.ts.map +1 -0
- package/dist/trust/timeline.js +154 -0
- package/dist/trust/timeline.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/** Detect signature changes between two surfaces of the same file */
|
|
2
|
+
export function detectSignatureChanges(previous, current) {
|
|
3
|
+
const changes = [];
|
|
4
|
+
const prevMap = new Map();
|
|
5
|
+
for (const entry of previous) {
|
|
6
|
+
prevMap.set(`${entry.file}::${entry.symbol}`, entry);
|
|
7
|
+
}
|
|
8
|
+
const currMap = new Map();
|
|
9
|
+
for (const entry of current) {
|
|
10
|
+
currMap.set(`${entry.file}::${entry.symbol}`, entry);
|
|
11
|
+
}
|
|
12
|
+
// Check for removals and changes
|
|
13
|
+
for (const [key, prev] of prevMap) {
|
|
14
|
+
const curr = currMap.get(key);
|
|
15
|
+
if (!curr) {
|
|
16
|
+
// Symbol removed
|
|
17
|
+
changes.push({
|
|
18
|
+
symbol: prev.symbol,
|
|
19
|
+
file: prev.file,
|
|
20
|
+
kind: prev.kind,
|
|
21
|
+
previousSignature: prev.signature,
|
|
22
|
+
newSignature: '<removed>',
|
|
23
|
+
changeType: 'removal',
|
|
24
|
+
breaking: true,
|
|
25
|
+
});
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (prev.signature !== curr.signature) {
|
|
29
|
+
const changeType = classifyChange(prev, curr);
|
|
30
|
+
changes.push({
|
|
31
|
+
symbol: prev.symbol,
|
|
32
|
+
file: prev.file,
|
|
33
|
+
kind: prev.kind,
|
|
34
|
+
previousSignature: prev.signature,
|
|
35
|
+
newSignature: curr.signature,
|
|
36
|
+
changeType,
|
|
37
|
+
breaking: changeType !== 'type_change', // type changes may be non-breaking
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return changes;
|
|
42
|
+
}
|
|
43
|
+
/** Classify the nature of a signature change */
|
|
44
|
+
function classifyChange(prev, curr) {
|
|
45
|
+
if (prev.kind === 'function' && curr.kind === 'function') {
|
|
46
|
+
// Compare parameter counts
|
|
47
|
+
const prevArity = countParams(prev.signature);
|
|
48
|
+
const currArity = countParams(curr.signature);
|
|
49
|
+
if (prevArity !== currArity)
|
|
50
|
+
return 'arity_change';
|
|
51
|
+
return 'parameter_change';
|
|
52
|
+
}
|
|
53
|
+
if (prev.symbol !== curr.symbol)
|
|
54
|
+
return 'rename';
|
|
55
|
+
return 'type_change';
|
|
56
|
+
}
|
|
57
|
+
/** Count parameters in a function signature */
|
|
58
|
+
function countParams(sig) {
|
|
59
|
+
const match = sig.match(/^\(([^)]*)\)/);
|
|
60
|
+
const params = match?.[1];
|
|
61
|
+
if (!params || !params.trim())
|
|
62
|
+
return 0;
|
|
63
|
+
return params.split(',').length;
|
|
64
|
+
}
|
|
65
|
+
/** Detect Layer D conflicts across multiple sessions */
|
|
66
|
+
export function detectLayerDConflicts(sessions, dependencySurfaces) {
|
|
67
|
+
const conflicts = [];
|
|
68
|
+
// For each pair of sessions, check if one's changes affect the other's dependencies
|
|
69
|
+
for (let i = 0; i < sessions.length; i++) {
|
|
70
|
+
for (let j = 0; j < sessions.length; j++) {
|
|
71
|
+
if (i === j)
|
|
72
|
+
continue;
|
|
73
|
+
const producer = sessions[i];
|
|
74
|
+
const consumer = sessions[j];
|
|
75
|
+
if (!producer || !consumer)
|
|
76
|
+
continue;
|
|
77
|
+
const consumerDeps = dependencySurfaces.get(consumer.sessionId) ?? [];
|
|
78
|
+
// Check if producer's files overlap with consumer's dependency surface
|
|
79
|
+
const producerFiles = new Set(producer.entries.map((e) => e.file));
|
|
80
|
+
const overlappingFiles = consumerDeps.filter((dep) => producerFiles.has(dep));
|
|
81
|
+
if (overlappingFiles.length === 0)
|
|
82
|
+
continue;
|
|
83
|
+
// For overlapping files, check for signature changes
|
|
84
|
+
for (const file of overlappingFiles) {
|
|
85
|
+
const producerEntries = producer.entries.filter((e) => e.file === file);
|
|
86
|
+
const consumerEntries = consumer.entries.filter((e) => e.file === file);
|
|
87
|
+
// Detect actual changes between the two surfaces
|
|
88
|
+
const changes = detectSignatureChanges(consumerEntries, producerEntries);
|
|
89
|
+
for (const change of changes) {
|
|
90
|
+
conflicts.push({
|
|
91
|
+
affectedSymbol: change.symbol,
|
|
92
|
+
file: change.file,
|
|
93
|
+
producerSession: producer.sessionId,
|
|
94
|
+
consumerSessions: [consumer.sessionId],
|
|
95
|
+
change,
|
|
96
|
+
severity: change.breaking ? 0.9 : 0.5,
|
|
97
|
+
description: formatConflictDescription(change, producer.sessionId, consumer.sessionId),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Deduplicate: merge conflicts on same symbol
|
|
104
|
+
const merged = deduplicateConflicts(conflicts);
|
|
105
|
+
return {
|
|
106
|
+
conflicts: merged,
|
|
107
|
+
surfacesAnalyzed: sessions.length,
|
|
108
|
+
timestamp: new Date().toISOString(),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/** Format a human-readable conflict description */
|
|
112
|
+
function formatConflictDescription(change, producer, consumer) {
|
|
113
|
+
switch (change.changeType) {
|
|
114
|
+
case 'removal':
|
|
115
|
+
return `Session ${producer} removed exported ${change.kind} '${change.symbol}' from ${change.file}, which session ${consumer} depends on`;
|
|
116
|
+
case 'arity_change':
|
|
117
|
+
return `Session ${producer} changed arity of '${change.symbol}' in ${change.file}: ${change.previousSignature} → ${change.newSignature}`;
|
|
118
|
+
case 'parameter_change':
|
|
119
|
+
return `Session ${producer} changed parameters of '${change.symbol}' in ${change.file}`;
|
|
120
|
+
case 'rename':
|
|
121
|
+
return `Session ${producer} renamed '${change.symbol}' in ${change.file}`;
|
|
122
|
+
case 'type_change':
|
|
123
|
+
return `Session ${producer} changed type of '${change.symbol}' in ${change.file}`;
|
|
124
|
+
default:
|
|
125
|
+
return `Session ${producer} modified '${change.symbol}' in ${change.file}`;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** Merge conflicts on the same symbol to avoid duplicates */
|
|
129
|
+
function deduplicateConflicts(conflicts) {
|
|
130
|
+
const map = new Map();
|
|
131
|
+
for (const c of conflicts) {
|
|
132
|
+
const key = `${c.affectedSymbol}::${c.file}::${c.producerSession}`;
|
|
133
|
+
const existing = map.get(key);
|
|
134
|
+
if (existing) {
|
|
135
|
+
// Merge consumer sessions
|
|
136
|
+
for (const s of c.consumerSessions) {
|
|
137
|
+
if (!existing.consumerSessions.includes(s)) {
|
|
138
|
+
existing.consumerSessions.push(s);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Keep highest severity
|
|
142
|
+
existing.severity = Math.max(existing.severity, c.severity);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
map.set(key, { ...c });
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return [...map.values()];
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=conflict-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflict-detector.js","sourceRoot":"","sources":["../../src/layer-d/conflict-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layer-d/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layer-d/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PublicSurfaceEntry } from '@codeledger/types';
|
|
2
|
+
/** Extract the public surface from a single file */
|
|
3
|
+
export declare function extractPublicSurface(filePath: string, content?: string): PublicSurfaceEntry[];
|
|
4
|
+
/** Extract public surface for multiple files */
|
|
5
|
+
export declare function extractSessionSurface(sessionId: string, files: string[]): {
|
|
6
|
+
sessionId: string;
|
|
7
|
+
entries: PublicSurfaceEntry[];
|
|
8
|
+
extractedAt: string;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=surface-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-extractor.d.ts","sourceRoot":"","sources":["../../src/layer-d/surface-extractor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA8B5D,oDAAoD;AACpD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAwC7F;AAED,gDAAgD;AAChD,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EAAE,GACd;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAkB3E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layer D — Public Surface Extractor
|
|
3
|
+
*
|
|
4
|
+
* Extracts exported functions, types, interfaces, classes, consts, and enums
|
|
5
|
+
* from TypeScript/JavaScript files using pragmatic regex-based parsing.
|
|
6
|
+
*
|
|
7
|
+
* NOT a full type-checker — focuses on high-signal contract detection.
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync } from 'fs';
|
|
10
|
+
/** Regex patterns for exported symbols */
|
|
11
|
+
const PATTERNS = [
|
|
12
|
+
{
|
|
13
|
+
kind: 'function',
|
|
14
|
+
regex: /^export\s+(?:async\s+)?function\s+(\w+)\s*(?:<[^>]*>)?\s*\(([^)]*)\)(?:\s*:\s*([^\n{]+))?/gm,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
kind: 'interface',
|
|
18
|
+
regex: /^export\s+interface\s+(\w+)(?:\s*<[^>]*>)?(?:\s+extends\s+[^\n{]+)?/gm,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
kind: 'type',
|
|
22
|
+
regex: /^export\s+type\s+(\w+)(?:\s*<[^>]*>)?\s*=/gm,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
kind: 'class',
|
|
26
|
+
regex: /^export\s+(?:abstract\s+)?class\s+(\w+)(?:\s*<[^>]*>)?(?:\s+(?:extends|implements)\s+[^\n{]+)?/gm,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
kind: 'const',
|
|
30
|
+
regex: /^export\s+const\s+(\w+)(?:\s*:\s*([^\n=]+))?\s*=/gm,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
kind: 'enum',
|
|
34
|
+
regex: /^export\s+(?:const\s+)?enum\s+(\w+)/gm,
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
/** Extract the public surface from a single file */
|
|
38
|
+
export function extractPublicSurface(filePath, content) {
|
|
39
|
+
const source = content ?? readFileSync(filePath, 'utf-8');
|
|
40
|
+
const entries = [];
|
|
41
|
+
for (const { kind, regex } of PATTERNS) {
|
|
42
|
+
// Reset regex state
|
|
43
|
+
regex.lastIndex = 0;
|
|
44
|
+
let match;
|
|
45
|
+
while ((match = regex.exec(source)) !== null) {
|
|
46
|
+
const symbol = match[1];
|
|
47
|
+
if (!symbol)
|
|
48
|
+
continue;
|
|
49
|
+
const offset = match.index;
|
|
50
|
+
const lineNumber = source.slice(0, offset).split('\n').length;
|
|
51
|
+
// Build signature string
|
|
52
|
+
let signature;
|
|
53
|
+
if (kind === 'function') {
|
|
54
|
+
const params = match[2] || '';
|
|
55
|
+
const returnType = match[3]?.trim() || 'unknown';
|
|
56
|
+
signature = `(${params.trim()}) => ${returnType}`;
|
|
57
|
+
}
|
|
58
|
+
else if (kind === 'const') {
|
|
59
|
+
signature = match[2]?.trim() || 'unknown';
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// For types, interfaces, classes, enums — use the full match line
|
|
63
|
+
signature = match[0].replace(/^export\s+/, '').trim();
|
|
64
|
+
}
|
|
65
|
+
entries.push({
|
|
66
|
+
file: filePath,
|
|
67
|
+
symbol,
|
|
68
|
+
kind,
|
|
69
|
+
signature,
|
|
70
|
+
lineNumber,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return entries;
|
|
75
|
+
}
|
|
76
|
+
/** Extract public surface for multiple files */
|
|
77
|
+
export function extractSessionSurface(sessionId, files) {
|
|
78
|
+
const entries = [];
|
|
79
|
+
for (const file of files) {
|
|
80
|
+
// Only process TS/JS files
|
|
81
|
+
if (!/\.[jt]sx?$/.test(file))
|
|
82
|
+
continue;
|
|
83
|
+
try {
|
|
84
|
+
entries.push(...extractPublicSurface(file));
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Skip unreadable files
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
sessionId,
|
|
92
|
+
entries,
|
|
93
|
+
extractedAt: new Date().toISOString(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=surface-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-extractor.js","sourceRoot":"","sources":["../../src/layer-d/surface-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy Domain Framework (System 6: Governance-as-Code)
|
|
3
|
+
*
|
|
4
|
+
* Formal domain registry covering 6 governance domains.
|
|
5
|
+
* Each domain has schema definition, defaults, validation, and resolution.
|
|
6
|
+
*
|
|
7
|
+
* Resolution rule: strictest-wins
|
|
8
|
+
* - Booleans: true (enabled/required) wins
|
|
9
|
+
* - Numbers (thresholds): lower value wins (tighter constraint)
|
|
10
|
+
* - Numbers (limits): lower value wins (tighter constraint)
|
|
11
|
+
* - Strings (severity): stricter severity wins (critical > high > medium > low)
|
|
12
|
+
* - String arrays (deny_paths): union of all entries
|
|
13
|
+
*/
|
|
14
|
+
import type { PolicyDomain, PolicyDomainDefinition, PolicyValidationError } from '@codeledger/types';
|
|
15
|
+
/** All 6 policy domain definitions. */
|
|
16
|
+
export declare const POLICY_DOMAINS: ReadonlyMap<PolicyDomain, PolicyDomainDefinition>;
|
|
17
|
+
/**
|
|
18
|
+
* Validate a config object against a specific domain's schema.
|
|
19
|
+
* Returns an array of validation errors (empty if valid).
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateDomain(domain: string, config: unknown): PolicyValidationError[];
|
|
22
|
+
/**
|
|
23
|
+
* Resolve multiple configs for a domain using strictest-wins logic.
|
|
24
|
+
* Returns the merged config with the strictest value for each field.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveDomain(domain: string, configs: unknown[]): unknown;
|
|
27
|
+
/**
|
|
28
|
+
* Get the default config for a domain.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getDefaultDomain(domain: string): unknown;
|
|
31
|
+
//# sourceMappingURL=domains.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../src/policy-domains/domains.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EAEtB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAqO3B,uCAAuC;AACvC,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,YAAY,EAAE,sBAAsB,CAO3E,CAAC;AAIH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,qBAAqB,EAAE,CAiDvF;AA0FD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAqBzE;AAkDD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAIxD"}
|