monora-ai 1.3.0 → 1.5.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/dist/autodetect.d.ts +24 -0
- package/dist/autodetect.d.ts.map +1 -0
- package/dist/autodetect.js +207 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +163 -0
- package/dist/executiveSummary.d.ts +33 -0
- package/dist/executiveSummary.d.ts.map +1 -0
- package/dist/executiveSummary.js +364 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -2
- package/dist/integrations/anthropic.d.ts +41 -0
- package/dist/integrations/anthropic.d.ts.map +1 -0
- package/dist/integrations/anthropic.js +306 -0
- package/dist/integrations/index.d.ts +12 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +17 -0
- package/dist/integrations/langchain.d.ts +76 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/langchain.js +306 -0
- package/dist/integrations/openai.d.ts +44 -0
- package/dist/integrations/openai.d.ts.map +1 -0
- package/dist/integrations/openai.js +278 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +12 -6
- package/dist/runtime.d.ts +42 -3
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +56 -2
- package/dist/streaming.d.ts +108 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +222 -0
- package/package.json +1 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-detection utilities for zero-config initialization.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Detect which LLM SDKs are installed.
|
|
6
|
+
*/
|
|
7
|
+
export declare function detectInstalledSdks(): string[];
|
|
8
|
+
/**
|
|
9
|
+
* Detect the current environment (dev, staging, production).
|
|
10
|
+
*/
|
|
11
|
+
export declare function detectEnvironment(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Detect the service name from project files.
|
|
14
|
+
*/
|
|
15
|
+
export declare function detectServiceName(): string | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Auto-detect configuration based on environment.
|
|
18
|
+
*/
|
|
19
|
+
export declare function autoDetectConfig(): Record<string, any>;
|
|
20
|
+
/**
|
|
21
|
+
* Select the appropriate preset based on environment.
|
|
22
|
+
*/
|
|
23
|
+
export declare function selectPresetForEnvironment(env: string): string;
|
|
24
|
+
//# sourceMappingURL=autodetect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autodetect.d.ts","sourceRoot":"","sources":["../src/autodetect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAmB9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA0D1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CA2CtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAwBtD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAa9D"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-detection utilities for zero-config initialization.
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.detectInstalledSdks = detectInstalledSdks;
|
|
40
|
+
exports.detectEnvironment = detectEnvironment;
|
|
41
|
+
exports.detectServiceName = detectServiceName;
|
|
42
|
+
exports.autoDetectConfig = autoDetectConfig;
|
|
43
|
+
exports.selectPresetForEnvironment = selectPresetForEnvironment;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
/**
|
|
47
|
+
* Detect which LLM SDKs are installed.
|
|
48
|
+
*/
|
|
49
|
+
function detectInstalledSdks() {
|
|
50
|
+
const sdks = [];
|
|
51
|
+
const sdkModules = {
|
|
52
|
+
openai: 'openai',
|
|
53
|
+
anthropic: '@anthropic-ai/sdk',
|
|
54
|
+
langchain: 'langchain',
|
|
55
|
+
};
|
|
56
|
+
for (const [sdkName, moduleName] of Object.entries(sdkModules)) {
|
|
57
|
+
try {
|
|
58
|
+
require.resolve(moduleName);
|
|
59
|
+
sdks.push(sdkName);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Module not installed
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return sdks;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Detect the current environment (dev, staging, production).
|
|
69
|
+
*/
|
|
70
|
+
function detectEnvironment() {
|
|
71
|
+
// Check explicit environment variables
|
|
72
|
+
const envVars = [
|
|
73
|
+
'MONORA_ENV',
|
|
74
|
+
'ENVIRONMENT',
|
|
75
|
+
'ENV',
|
|
76
|
+
'NODE_ENV',
|
|
77
|
+
'PYTHON_ENV',
|
|
78
|
+
'FLASK_ENV',
|
|
79
|
+
'DJANGO_ENV',
|
|
80
|
+
'RAILS_ENV',
|
|
81
|
+
];
|
|
82
|
+
for (const varName of envVars) {
|
|
83
|
+
const value = (process.env[varName] || '').toLowerCase();
|
|
84
|
+
if (['production', 'prod'].includes(value)) {
|
|
85
|
+
return 'production';
|
|
86
|
+
}
|
|
87
|
+
if (['staging', 'stage', 'stg'].includes(value)) {
|
|
88
|
+
return 'staging';
|
|
89
|
+
}
|
|
90
|
+
if (['development', 'dev', 'local'].includes(value)) {
|
|
91
|
+
return 'dev';
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Check CI/CD indicators
|
|
95
|
+
const ciIndicators = [
|
|
96
|
+
'CI',
|
|
97
|
+
'CONTINUOUS_INTEGRATION',
|
|
98
|
+
'GITHUB_ACTIONS',
|
|
99
|
+
'GITLAB_CI',
|
|
100
|
+
'CIRCLECI',
|
|
101
|
+
'JENKINS_URL',
|
|
102
|
+
'TRAVIS',
|
|
103
|
+
'BUILDKITE',
|
|
104
|
+
];
|
|
105
|
+
for (const indicator of ciIndicators) {
|
|
106
|
+
if (process.env[indicator]) {
|
|
107
|
+
return 'staging';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Check for production indicators
|
|
111
|
+
const productionIndicators = [
|
|
112
|
+
'KUBERNETES_SERVICE_HOST',
|
|
113
|
+
'ECS_CONTAINER_METADATA_URI',
|
|
114
|
+
'DYNO',
|
|
115
|
+
];
|
|
116
|
+
for (const indicator of productionIndicators) {
|
|
117
|
+
if (process.env[indicator]) {
|
|
118
|
+
return 'production';
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return 'dev';
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Detect the service name from project files.
|
|
125
|
+
*/
|
|
126
|
+
function detectServiceName() {
|
|
127
|
+
const cwd = process.cwd();
|
|
128
|
+
// Try package.json
|
|
129
|
+
const packageJsonPath = path.join(cwd, 'package.json');
|
|
130
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
131
|
+
try {
|
|
132
|
+
const content = fs.readFileSync(packageJsonPath, 'utf-8');
|
|
133
|
+
const data = JSON.parse(content);
|
|
134
|
+
if (data.name && typeof data.name === 'string') {
|
|
135
|
+
let name = data.name;
|
|
136
|
+
// Strip scope from scoped packages
|
|
137
|
+
if (name.startsWith('@') && name.includes('/')) {
|
|
138
|
+
name = name.split('/')[1];
|
|
139
|
+
}
|
|
140
|
+
return name;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Parse error, continue
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Try pyproject.toml (for monorepos with Python)
|
|
148
|
+
const pyprojectPath = path.join(cwd, 'pyproject.toml');
|
|
149
|
+
if (fs.existsSync(pyprojectPath)) {
|
|
150
|
+
try {
|
|
151
|
+
const content = fs.readFileSync(pyprojectPath, 'utf-8');
|
|
152
|
+
const match = content.match(/^name\s*=\s*["']([^"']+)["']/m);
|
|
153
|
+
if (match) {
|
|
154
|
+
return match[1];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// Parse error, continue
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// Fall back to directory name
|
|
162
|
+
const dirName = path.basename(cwd);
|
|
163
|
+
if (dirName && dirName !== '.' && dirName !== '..') {
|
|
164
|
+
return dirName;
|
|
165
|
+
}
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Auto-detect configuration based on environment.
|
|
170
|
+
*/
|
|
171
|
+
function autoDetectConfig() {
|
|
172
|
+
const env = detectEnvironment();
|
|
173
|
+
const serviceName = detectServiceName();
|
|
174
|
+
const installedSdks = detectInstalledSdks();
|
|
175
|
+
const config = {
|
|
176
|
+
defaults: {
|
|
177
|
+
environment: env,
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
if (serviceName) {
|
|
181
|
+
config.defaults.service_name = serviceName;
|
|
182
|
+
}
|
|
183
|
+
// Enable auto-instrumentation if SDKs are detected
|
|
184
|
+
if (installedSdks.length > 0) {
|
|
185
|
+
config.instrumentation = {
|
|
186
|
+
enabled: true,
|
|
187
|
+
targets: installedSdks,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return config;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Select the appropriate preset based on environment.
|
|
194
|
+
*/
|
|
195
|
+
function selectPresetForEnvironment(env) {
|
|
196
|
+
const presetMap = {
|
|
197
|
+
dev: 'development',
|
|
198
|
+
development: 'development',
|
|
199
|
+
local: 'development',
|
|
200
|
+
staging: 'production',
|
|
201
|
+
stage: 'production',
|
|
202
|
+
stg: 'production',
|
|
203
|
+
production: 'production',
|
|
204
|
+
prod: 'production',
|
|
205
|
+
};
|
|
206
|
+
return presetMap[env.toLowerCase()] || 'development';
|
|
207
|
+
}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Configuration loading and normalization.
|
|
3
3
|
*/
|
|
4
|
+
export type PresetName = 'minimal' | 'development' | 'production' | 'compliance' | 'poc';
|
|
5
|
+
export interface SinkConfig {
|
|
6
|
+
type: string;
|
|
7
|
+
format?: string;
|
|
8
|
+
path?: string;
|
|
9
|
+
endpoint?: string;
|
|
10
|
+
headers?: Record<string, string>;
|
|
11
|
+
api_key?: string;
|
|
12
|
+
batch_size?: number;
|
|
13
|
+
timeout_sec?: number;
|
|
14
|
+
retry_attempts?: number;
|
|
15
|
+
rotation?: string;
|
|
16
|
+
max_size_mb?: number;
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Preset configurations for quick setup.
|
|
21
|
+
*/
|
|
22
|
+
export declare const PRESETS: Record<PresetName, Partial<MonoraConfig>>;
|
|
4
23
|
export interface MonoraConfig {
|
|
5
24
|
defaults?: {
|
|
6
25
|
data_classification?: string;
|
|
@@ -32,6 +51,7 @@ export interface MonoraConfig {
|
|
|
32
51
|
registry?: any;
|
|
33
52
|
instrumentation?: {
|
|
34
53
|
enabled?: boolean;
|
|
54
|
+
auto_patch?: boolean;
|
|
35
55
|
targets?: string[];
|
|
36
56
|
default_purpose?: string;
|
|
37
57
|
data_classification?: string;
|
|
@@ -45,6 +65,7 @@ export interface MonoraConfig {
|
|
|
45
65
|
output_dir?: string;
|
|
46
66
|
formats?: string[];
|
|
47
67
|
include_security_report?: boolean;
|
|
68
|
+
include_executive_summary?: boolean;
|
|
48
69
|
max_events_per_trace?: number;
|
|
49
70
|
redact_host?: boolean;
|
|
50
71
|
};
|
|
@@ -109,4 +130,34 @@ export declare function loadConfig(options?: {
|
|
|
109
130
|
configDict?: MonoraConfig;
|
|
110
131
|
envPrefix?: string;
|
|
111
132
|
}): MonoraConfig;
|
|
133
|
+
/**
|
|
134
|
+
* Parse simplified sink configuration into full sink config.
|
|
135
|
+
*
|
|
136
|
+
* Supports:
|
|
137
|
+
* - "stdout" -> stdout sink
|
|
138
|
+
* - "./path/to/file.jsonl" -> file sink
|
|
139
|
+
* - "https://endpoint.com" -> https sink
|
|
140
|
+
* - { type: "...", ... } -> full sink config (passthrough)
|
|
141
|
+
* - undefined -> default stdout sink
|
|
142
|
+
*/
|
|
143
|
+
export declare function parseSinkConfig(sink: string | SinkConfig | undefined): SinkConfig[];
|
|
144
|
+
/**
|
|
145
|
+
* Get configuration for a named preset.
|
|
146
|
+
*/
|
|
147
|
+
export declare function getPresetConfig(preset: PresetName): Partial<MonoraConfig>;
|
|
148
|
+
/**
|
|
149
|
+
* Options for simplified init() configuration.
|
|
150
|
+
*/
|
|
151
|
+
export interface SimplifiedInitOptions {
|
|
152
|
+
preset?: 'auto' | PresetName;
|
|
153
|
+
serviceName?: string;
|
|
154
|
+
sink?: string | SinkConfig;
|
|
155
|
+
policies?: string[];
|
|
156
|
+
configPath?: string;
|
|
157
|
+
configDict?: MonoraConfig;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Build configuration from simplified options.
|
|
161
|
+
*/
|
|
162
|
+
export declare function buildConfigFromOptions(options?: SimplifiedInitOptions): MonoraConfig;
|
|
112
163
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -36,9 +36,78 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
};
|
|
37
37
|
})();
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.PRESETS = void 0;
|
|
39
40
|
exports.loadConfig = loadConfig;
|
|
41
|
+
exports.parseSinkConfig = parseSinkConfig;
|
|
42
|
+
exports.getPresetConfig = getPresetConfig;
|
|
43
|
+
exports.buildConfigFromOptions = buildConfigFromOptions;
|
|
40
44
|
const fs = __importStar(require("fs"));
|
|
41
45
|
const yaml = __importStar(require("js-yaml"));
|
|
46
|
+
/**
|
|
47
|
+
* Preset configurations for quick setup.
|
|
48
|
+
*/
|
|
49
|
+
exports.PRESETS = {
|
|
50
|
+
minimal: {
|
|
51
|
+
sinks: [{ type: 'stdout', format: 'json' }],
|
|
52
|
+
immutability: { enabled: false },
|
|
53
|
+
reporting: { enabled: false },
|
|
54
|
+
instrumentation: { enabled: false },
|
|
55
|
+
},
|
|
56
|
+
development: {
|
|
57
|
+
defaults: { environment: 'dev' },
|
|
58
|
+
sinks: [
|
|
59
|
+
{ type: 'stdout', format: 'json' },
|
|
60
|
+
{ type: 'file', path: './monora_events.jsonl' },
|
|
61
|
+
],
|
|
62
|
+
immutability: { enabled: true, verify_on_emit: false },
|
|
63
|
+
reporting: { enabled: true, output_dir: './monora_reports' },
|
|
64
|
+
instrumentation: { enabled: true, auto_patch: true },
|
|
65
|
+
},
|
|
66
|
+
production: {
|
|
67
|
+
defaults: { environment: 'production' },
|
|
68
|
+
sinks: [{ type: 'file', path: './logs/monora_events.jsonl' }],
|
|
69
|
+
immutability: { enabled: true, verify_on_shutdown: true },
|
|
70
|
+
reporting: { enabled: true, output_dir: './monora_reports' },
|
|
71
|
+
wal: { enabled: true, path: './monora_wal' },
|
|
72
|
+
instrumentation: { enabled: true, auto_patch: true },
|
|
73
|
+
error_handling: { sink_failure_mode: 'warn' },
|
|
74
|
+
},
|
|
75
|
+
compliance: {
|
|
76
|
+
defaults: { environment: 'production' },
|
|
77
|
+
sinks: [{ type: 'file', path: './logs/monora_events.jsonl' }],
|
|
78
|
+
immutability: { enabled: true, verify_on_emit: true, verify_on_shutdown: true },
|
|
79
|
+
reporting: {
|
|
80
|
+
enabled: true,
|
|
81
|
+
output_dir: './monora_reports',
|
|
82
|
+
include_security_report: true,
|
|
83
|
+
include_executive_summary: true,
|
|
84
|
+
},
|
|
85
|
+
wal: { enabled: true, path: './monora_wal', sync_mode: 'fsync' },
|
|
86
|
+
signing: { enabled: true, algorithm: 'ed25519' },
|
|
87
|
+
attestation: { enabled: true },
|
|
88
|
+
ai_act: { enabled: true, generate_transparency_report: true },
|
|
89
|
+
instrumentation: { enabled: true, auto_patch: true },
|
|
90
|
+
},
|
|
91
|
+
poc: {
|
|
92
|
+
defaults: { environment: 'production' },
|
|
93
|
+
sinks: [
|
|
94
|
+
{ type: 'stdout', format: 'json' },
|
|
95
|
+
{ type: 'file', path: './monora_poc_events.jsonl' },
|
|
96
|
+
],
|
|
97
|
+
immutability: { enabled: true, verify_on_shutdown: true },
|
|
98
|
+
reporting: {
|
|
99
|
+
enabled: true,
|
|
100
|
+
output_dir: './monora_poc_reports',
|
|
101
|
+
formats: ['json', 'markdown'],
|
|
102
|
+
include_security_report: true,
|
|
103
|
+
include_executive_summary: true,
|
|
104
|
+
},
|
|
105
|
+
wal: { enabled: true, path: './monora_wal' },
|
|
106
|
+
signing: { enabled: true, algorithm: 'ed25519' },
|
|
107
|
+
ai_act: { enabled: true, generate_transparency_report: true },
|
|
108
|
+
instrumentation: { enabled: true, auto_patch: true },
|
|
109
|
+
},
|
|
110
|
+
};
|
|
42
111
|
const DEFAULT_CONFIG = {
|
|
43
112
|
defaults: {
|
|
44
113
|
data_classification: 'internal',
|
|
@@ -65,6 +134,7 @@ const DEFAULT_CONFIG = {
|
|
|
65
134
|
},
|
|
66
135
|
instrumentation: {
|
|
67
136
|
enabled: false,
|
|
137
|
+
auto_patch: false,
|
|
68
138
|
targets: ['openai', 'anthropic'],
|
|
69
139
|
default_purpose: undefined,
|
|
70
140
|
data_classification: undefined,
|
|
@@ -411,3 +481,96 @@ function expandEnvString(value) {
|
|
|
411
481
|
});
|
|
412
482
|
return result;
|
|
413
483
|
}
|
|
484
|
+
/**
|
|
485
|
+
* Parse simplified sink configuration into full sink config.
|
|
486
|
+
*
|
|
487
|
+
* Supports:
|
|
488
|
+
* - "stdout" -> stdout sink
|
|
489
|
+
* - "./path/to/file.jsonl" -> file sink
|
|
490
|
+
* - "https://endpoint.com" -> https sink
|
|
491
|
+
* - { type: "...", ... } -> full sink config (passthrough)
|
|
492
|
+
* - undefined -> default stdout sink
|
|
493
|
+
*/
|
|
494
|
+
function parseSinkConfig(sink) {
|
|
495
|
+
if (sink === undefined) {
|
|
496
|
+
return [{ type: 'stdout', format: 'json' }];
|
|
497
|
+
}
|
|
498
|
+
if (typeof sink === 'object') {
|
|
499
|
+
return [sink];
|
|
500
|
+
}
|
|
501
|
+
if (typeof sink !== 'string') {
|
|
502
|
+
return [{ type: 'stdout', format: 'json' }];
|
|
503
|
+
}
|
|
504
|
+
const sinkStr = sink.trim();
|
|
505
|
+
// stdout sink
|
|
506
|
+
if (sinkStr.toLowerCase() === 'stdout') {
|
|
507
|
+
return [{ type: 'stdout', format: 'json' }];
|
|
508
|
+
}
|
|
509
|
+
// HTTPS sink
|
|
510
|
+
if (sinkStr.startsWith('https://') || sinkStr.startsWith('http://')) {
|
|
511
|
+
return [{
|
|
512
|
+
type: 'https',
|
|
513
|
+
endpoint: sinkStr,
|
|
514
|
+
batch_size: 50,
|
|
515
|
+
timeout_sec: 10,
|
|
516
|
+
retry_attempts: 3,
|
|
517
|
+
}];
|
|
518
|
+
}
|
|
519
|
+
// File sink (anything else is treated as a file path)
|
|
520
|
+
return [{
|
|
521
|
+
type: 'file',
|
|
522
|
+
path: sinkStr,
|
|
523
|
+
rotation: 'daily',
|
|
524
|
+
max_size_mb: 100,
|
|
525
|
+
}];
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Get configuration for a named preset.
|
|
529
|
+
*/
|
|
530
|
+
function getPresetConfig(preset) {
|
|
531
|
+
if (!(preset in exports.PRESETS)) {
|
|
532
|
+
const valid = Object.keys(exports.PRESETS).join(', ');
|
|
533
|
+
throw new Error(`Unknown preset '${preset}'. Valid presets: ${valid}`);
|
|
534
|
+
}
|
|
535
|
+
return deepCopy(exports.PRESETS[preset]);
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
538
|
+
* Build configuration from simplified options.
|
|
539
|
+
*/
|
|
540
|
+
function buildConfigFromOptions(options = {}) {
|
|
541
|
+
const { preset, serviceName, sink, policies, configPath, configDict } = options;
|
|
542
|
+
// Start with defaults
|
|
543
|
+
let config = deepCopy(DEFAULT_CONFIG);
|
|
544
|
+
// Apply preset if specified
|
|
545
|
+
if (preset && preset !== 'auto') {
|
|
546
|
+
const presetConfig = getPresetConfig(preset);
|
|
547
|
+
mergeDicts(config, presetConfig);
|
|
548
|
+
}
|
|
549
|
+
// Load from file if specified
|
|
550
|
+
if (configPath) {
|
|
551
|
+
const fileConfig = loadConfigFile(configPath);
|
|
552
|
+
mergeDicts(config, fileConfig);
|
|
553
|
+
}
|
|
554
|
+
// Merge explicit config dict
|
|
555
|
+
if (configDict) {
|
|
556
|
+
mergeDicts(config, configDict);
|
|
557
|
+
}
|
|
558
|
+
// Apply service name
|
|
559
|
+
if (serviceName) {
|
|
560
|
+
config.defaults = config.defaults || {};
|
|
561
|
+
config.defaults.service_name = serviceName;
|
|
562
|
+
}
|
|
563
|
+
// Apply sink configuration
|
|
564
|
+
if (sink !== undefined) {
|
|
565
|
+
config.sinks = parseSinkConfig(sink);
|
|
566
|
+
}
|
|
567
|
+
// Apply policies
|
|
568
|
+
if (policies && policies.length > 0) {
|
|
569
|
+
config.policies = config.policies || {};
|
|
570
|
+
config.policies.model_allowlist = policies;
|
|
571
|
+
config.policies.enforce = true;
|
|
572
|
+
}
|
|
573
|
+
// Expand environment variables
|
|
574
|
+
expandEnvVars(config);
|
|
575
|
+
return config;
|
|
576
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Executive summary generator for compliance reports.
|
|
3
|
+
*
|
|
4
|
+
* Generates a one-page Markdown summary for sales and executive review.
|
|
5
|
+
*/
|
|
6
|
+
import { MonoraConfig } from './config';
|
|
7
|
+
export interface ComplianceScoreResult {
|
|
8
|
+
score: number;
|
|
9
|
+
grade: string;
|
|
10
|
+
breakdown: Record<string, number>;
|
|
11
|
+
max_score: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Calculate compliance score (0-100) based on governance controls.
|
|
15
|
+
*
|
|
16
|
+
* Scoring breakdown:
|
|
17
|
+
* - Base score: 100
|
|
18
|
+
* - Policy violations: -10 per violation (max -50)
|
|
19
|
+
* - Chain integrity: -30 if failed, -10 if disabled
|
|
20
|
+
* - Signing enabled: +10 bonus (if disabled: -5)
|
|
21
|
+
* - WAL enabled: +5 bonus (if disabled: -5)
|
|
22
|
+
* - Unknown models used: -5 per model (max -15)
|
|
23
|
+
*/
|
|
24
|
+
export declare function calculateComplianceScore(report: Record<string, any>, chainStatus: string, config: MonoraConfig): ComplianceScoreResult;
|
|
25
|
+
/**
|
|
26
|
+
* Generate a one-page Markdown executive summary.
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateExecutiveSummary(report: Record<string, any>, events: Array<Record<string, any>>, chainStatus: string, config: MonoraConfig, traceId?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Write executive summary to a file.
|
|
31
|
+
*/
|
|
32
|
+
export declare function writeExecutiveSummary(report: Record<string, any>, events: Array<Record<string, any>>, chainStatus: string, config: MonoraConfig, outputPath: string, traceId?: string): string | null;
|
|
33
|
+
//# sourceMappingURL=executiveSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executiveSummary.d.ts","sourceRoot":"","sources":["../src/executiveSummary.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,qBAAqB,CA4EvB;AA4CD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CA2LR;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAcf"}
|