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.
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE;QACT,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC,CAAC;IACH,YAAY,CAAC,EAAE;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;QAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,GAAG,CAAC,EAAE;YACJ,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,eAAe,CAAC,EAAE;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,aAAa,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChD,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,cAAc,CAAC,EAAE;QACf,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;QAChD,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;QAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxC,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;QACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;QACtC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,qBAAqB,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,cAAc,CAAC;QACxE,4BAA4B,CAAC,EAAE,OAAO,CAAC;QACvC,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;KACxC,CAAC;CACH;AA4GD,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,YAAY,CA0Bf"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,YAAY,GAAG,KAAK,CAAC;AAEzF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CA6D7D,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE;QACT,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC,CAAC;IACH,YAAY,CAAC,EAAE;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,KAAK,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;QAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,GAAG,CAAC,EAAE;YACJ,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,eAAe,CAAC,EAAE;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,uBAAuB,CAAC,EAAE,OAAO,CAAC;QAClC,yBAAyB,CAAC,EAAE,OAAO,CAAC;QACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,aAAa,CAAC,EAAE;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;QAC1B,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChD,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,cAAc,CAAC,EAAE;QACf,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;QAChD,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;QAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxC,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;QACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;QACtC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,qBAAqB,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,cAAc,CAAC;QACxE,4BAA4B,CAAC,EAAE,OAAO,CAAC;QACvC,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;KACxC,CAAC;CACH;AA6GD,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,YAAY,CA0Bf;AA+RD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,EAAE,CAsCnF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAOzE;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,YAAY,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,qBAA0B,GAAG,YAAY,CA6CxF"}
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"}