@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.
Files changed (129) hide show
  1. package/dist/claims/claims.d.ts +14 -0
  2. package/dist/claims/claims.d.ts.map +1 -0
  3. package/dist/claims/claims.js +125 -0
  4. package/dist/claims/claims.js.map +1 -0
  5. package/dist/claims/index.d.ts +2 -0
  6. package/dist/claims/index.d.ts.map +1 -0
  7. package/dist/claims/index.js +2 -0
  8. package/dist/claims/index.js.map +1 -0
  9. package/dist/dashboard/index.d.ts +3 -0
  10. package/dist/dashboard/index.d.ts.map +1 -0
  11. package/dist/dashboard/index.js +3 -0
  12. package/dist/dashboard/index.js.map +1 -0
  13. package/dist/dashboard/metrics.d.ts +24 -0
  14. package/dist/dashboard/metrics.d.ts.map +1 -0
  15. package/dist/dashboard/metrics.js +358 -0
  16. package/dist/dashboard/metrics.js.map +1 -0
  17. package/dist/dashboard/store.d.ts +26 -0
  18. package/dist/dashboard/store.d.ts.map +1 -0
  19. package/dist/dashboard/store.js +97 -0
  20. package/dist/dashboard/store.js.map +1 -0
  21. package/dist/index.d.ts +10 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +19 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/integration/ambient-coordinator.d.ts +75 -0
  26. package/dist/integration/ambient-coordinator.d.ts.map +1 -0
  27. package/dist/integration/ambient-coordinator.js +183 -0
  28. package/dist/integration/ambient-coordinator.js.map +1 -0
  29. package/dist/integration/index.d.ts +4 -0
  30. package/dist/integration/index.d.ts.map +1 -0
  31. package/dist/integration/index.js +3 -0
  32. package/dist/integration/index.js.map +1 -0
  33. package/dist/integration/warning-throttle.d.ts +63 -0
  34. package/dist/integration/warning-throttle.d.ts.map +1 -0
  35. package/dist/integration/warning-throttle.js +347 -0
  36. package/dist/integration/warning-throttle.js.map +1 -0
  37. package/dist/intervention/escalation.d.ts +23 -0
  38. package/dist/intervention/escalation.d.ts.map +1 -0
  39. package/dist/intervention/escalation.js +149 -0
  40. package/dist/intervention/escalation.js.map +1 -0
  41. package/dist/intervention/generator.d.ts +12 -0
  42. package/dist/intervention/generator.d.ts.map +1 -0
  43. package/dist/intervention/generator.js +191 -0
  44. package/dist/intervention/generator.js.map +1 -0
  45. package/dist/intervention/index.d.ts +4 -0
  46. package/dist/intervention/index.d.ts.map +1 -0
  47. package/dist/intervention/index.js +4 -0
  48. package/dist/intervention/index.js.map +1 -0
  49. package/dist/intervention/signal-aggregator.d.ts +26 -0
  50. package/dist/intervention/signal-aggregator.d.ts.map +1 -0
  51. package/dist/intervention/signal-aggregator.js +274 -0
  52. package/dist/intervention/signal-aggregator.js.map +1 -0
  53. package/dist/layer-d/conflict-detector.d.ts +12 -0
  54. package/dist/layer-d/conflict-detector.d.ts.map +1 -0
  55. package/dist/layer-d/conflict-detector.js +150 -0
  56. package/dist/layer-d/conflict-detector.js.map +1 -0
  57. package/dist/layer-d/index.d.ts +3 -0
  58. package/dist/layer-d/index.d.ts.map +1 -0
  59. package/dist/layer-d/index.js +3 -0
  60. package/dist/layer-d/index.js.map +1 -0
  61. package/dist/layer-d/surface-extractor.d.ts +10 -0
  62. package/dist/layer-d/surface-extractor.d.ts.map +1 -0
  63. package/dist/layer-d/surface-extractor.js +96 -0
  64. package/dist/layer-d/surface-extractor.js.map +1 -0
  65. package/dist/policy-domains/domains.d.ts +31 -0
  66. package/dist/policy-domains/domains.d.ts.map +1 -0
  67. package/dist/policy-domains/domains.js +445 -0
  68. package/dist/policy-domains/domains.js.map +1 -0
  69. package/dist/policy-domains/index.d.ts +8 -0
  70. package/dist/policy-domains/index.d.ts.map +1 -0
  71. package/dist/policy-domains/index.js +8 -0
  72. package/dist/policy-domains/index.js.map +1 -0
  73. package/dist/pulse/index.d.ts +2 -0
  74. package/dist/pulse/index.d.ts.map +1 -0
  75. package/dist/pulse/index.js +2 -0
  76. package/dist/pulse/index.js.map +1 -0
  77. package/dist/pulse/pulse.d.ts +20 -0
  78. package/dist/pulse/pulse.d.ts.map +1 -0
  79. package/dist/pulse/pulse.js +253 -0
  80. package/dist/pulse/pulse.js.map +1 -0
  81. package/dist/severity/index.d.ts +2 -0
  82. package/dist/severity/index.d.ts.map +1 -0
  83. package/dist/severity/index.js +2 -0
  84. package/dist/severity/index.js.map +1 -0
  85. package/dist/severity/severity.d.ts +48 -0
  86. package/dist/severity/severity.d.ts.map +1 -0
  87. package/dist/severity/severity.js +134 -0
  88. package/dist/severity/severity.js.map +1 -0
  89. package/dist/staleness/index.d.ts +2 -0
  90. package/dist/staleness/index.d.ts.map +1 -0
  91. package/dist/staleness/index.js +2 -0
  92. package/dist/staleness/index.js.map +1 -0
  93. package/dist/staleness/jit-staleness.d.ts +29 -0
  94. package/dist/staleness/jit-staleness.d.ts.map +1 -0
  95. package/dist/staleness/jit-staleness.js +240 -0
  96. package/dist/staleness/jit-staleness.js.map +1 -0
  97. package/dist/team-policy/index.d.ts +1 -1
  98. package/dist/team-policy/index.d.ts.map +1 -1
  99. package/dist/team-policy/index.js +1 -1
  100. package/dist/team-policy/index.js.map +1 -1
  101. package/dist/team-policy/policy.d.ts +7 -0
  102. package/dist/team-policy/policy.d.ts.map +1 -1
  103. package/dist/team-policy/policy.js +38 -0
  104. package/dist/team-policy/policy.js.map +1 -1
  105. package/dist/trust/approval.d.ts +16 -0
  106. package/dist/trust/approval.d.ts.map +1 -0
  107. package/dist/trust/approval.js +183 -0
  108. package/dist/trust/approval.js.map +1 -0
  109. package/dist/trust/capsule.d.ts +36 -0
  110. package/dist/trust/capsule.d.ts.map +1 -0
  111. package/dist/trust/capsule.js +206 -0
  112. package/dist/trust/capsule.js.map +1 -0
  113. package/dist/trust/index.d.ts +6 -0
  114. package/dist/trust/index.d.ts.map +1 -0
  115. package/dist/trust/index.js +6 -0
  116. package/dist/trust/index.js.map +1 -0
  117. package/dist/trust/learning-feedback.d.ts +18 -0
  118. package/dist/trust/learning-feedback.d.ts.map +1 -0
  119. package/dist/trust/learning-feedback.js +146 -0
  120. package/dist/trust/learning-feedback.js.map +1 -0
  121. package/dist/trust/risk-scoring.d.ts +16 -0
  122. package/dist/trust/risk-scoring.d.ts.map +1 -0
  123. package/dist/trust/risk-scoring.js +142 -0
  124. package/dist/trust/risk-scoring.js.map +1 -0
  125. package/dist/trust/timeline.d.ts +42 -0
  126. package/dist/trust/timeline.d.ts.map +1 -0
  127. package/dist/trust/timeline.js +154 -0
  128. package/dist/trust/timeline.js.map +1 -0
  129. 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,3 @@
1
+ export { extractPublicSurface, extractSessionSurface } from './surface-extractor.js';
2
+ export { detectSignatureChanges, detectLayerDConflicts, } from './conflict-detector.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export { extractPublicSurface, extractSessionSurface } from './surface-extractor.js';
2
+ export { detectSignatureChanges, detectLayerDConflicts, } from './conflict-detector.js';
3
+ //# sourceMappingURL=index.js.map
@@ -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"}