@riotprompt/riotprompt 0.0.21 → 1.0.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/CHANGELOG.md +74 -0
- package/MIGRATION.md +235 -0
- package/README.md +2 -0
- package/SECURITY.md +132 -0
- package/dist/builder.js +6 -0
- package/dist/builder.js.map +1 -1
- package/dist/cli.js +481 -22
- package/dist/context-manager.js +1 -1
- package/dist/conversation-logger.d.ts +17 -1
- package/dist/conversation-logger.js +21 -17
- package/dist/conversation-logger.js.map +1 -1
- package/dist/conversation.js +1 -1
- package/dist/error-handling.d.ts +52 -0
- package/dist/error-handling.js +132 -0
- package/dist/error-handling.js.map +1 -0
- package/dist/formatter.js +1 -1
- package/dist/iteration-strategy.js +1 -1
- package/dist/loader.js +60 -12
- package/dist/loader.js.map +1 -1
- package/dist/logger.d.ts +52 -0
- package/dist/logger.js +114 -14
- package/dist/logger.js.map +1 -1
- package/dist/logging-config.d.ts +84 -0
- package/dist/logging-config.js +116 -0
- package/dist/logging-config.js.map +1 -0
- package/dist/message-builder.js +1 -1
- package/dist/model-config.js +1 -1
- package/dist/override.js +10 -4
- package/dist/override.js.map +1 -1
- package/dist/recipes.js +6 -0
- package/dist/recipes.js.map +1 -1
- package/dist/reflection.js +1 -1
- package/dist/riotprompt.d.ts +9 -0
- package/dist/riotprompt.js +8 -0
- package/dist/riotprompt.js.map +1 -1
- package/dist/security/audit-logger.d.ts +61 -0
- package/dist/security/audit-logger.js +281 -0
- package/dist/security/audit-logger.js.map +1 -0
- package/dist/security/cli-security.d.ts +143 -0
- package/dist/security/cli-security.js +302 -0
- package/dist/security/cli-security.js.map +1 -0
- package/dist/security/defaults.d.ts +31 -0
- package/dist/security/defaults.js +72 -0
- package/dist/security/defaults.js.map +1 -0
- package/dist/security/events.d.ts +8 -0
- package/dist/security/index.d.ts +27 -0
- package/dist/security/index.js +22 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/path-guard.d.ts +161 -0
- package/dist/security/path-guard.js +327 -0
- package/dist/security/path-guard.js.map +1 -0
- package/dist/security/rate-limiter.d.ts +117 -0
- package/dist/security/rate-limiter.js +165 -0
- package/dist/security/rate-limiter.js.map +1 -0
- package/dist/security/serialization-schemas.d.ts +183 -0
- package/dist/security/serialization-schemas.js +174 -0
- package/dist/security/serialization-schemas.js.map +1 -0
- package/dist/security/timeout-guard.d.ts +123 -0
- package/dist/security/timeout-guard.js +223 -0
- package/dist/security/timeout-guard.js.map +1 -0
- package/dist/security/types.d.ts +86 -0
- package/dist/security/types.js +80 -0
- package/dist/security/types.js.map +1 -0
- package/dist/token-budget.js +1 -1
- package/dist/tools.js +1 -1
- package/guide/index.md +2 -0
- package/guide/integration.md +1109 -0
- package/guide/security.md +237 -0
- package/package.json +17 -11
package/dist/logger.d.ts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RiotPrompt - Logger
|
|
3
|
+
*
|
|
4
|
+
* Provides logging infrastructure backed by @fjell/logging for
|
|
5
|
+
* comprehensive sensitive data masking and structured logging.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Logger interface compatible with @fjell/logging
|
|
9
|
+
*/
|
|
1
10
|
export interface Logger {
|
|
2
11
|
name: string;
|
|
3
12
|
debug: (message: string, ...args: any[]) => void;
|
|
@@ -6,6 +15,49 @@ export interface Logger {
|
|
|
6
15
|
error: (message: string, ...args: any[]) => void;
|
|
7
16
|
verbose: (message: string, ...args: any[]) => void;
|
|
8
17
|
silly: (message: string, ...args: any[]) => void;
|
|
18
|
+
/** Get a child logger for a component */
|
|
19
|
+
get?: (...components: string[]) => Logger;
|
|
9
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Silent logger that discards all output
|
|
23
|
+
* Use this as default to prevent accidental information disclosure
|
|
24
|
+
*/
|
|
25
|
+
export declare const SILENT_LOGGER: Logger;
|
|
26
|
+
/**
|
|
27
|
+
* Default logger - silent by default to prevent information disclosure
|
|
28
|
+
*
|
|
29
|
+
* Enable logging by setting one of:
|
|
30
|
+
* - RIOTPROMPT_LOGGING=true
|
|
31
|
+
* - DEBUG=*riotprompt*
|
|
32
|
+
* - NODE_ENV=development
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* import { DEFAULT_LOGGER } from '@theunwalked/riotprompt';
|
|
37
|
+
*
|
|
38
|
+
* const logger = DEFAULT_LOGGER.get?.('MyComponent') ?? DEFAULT_LOGGER;
|
|
39
|
+
* logger.info('Processing request', { userId: 123 });
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
10
42
|
export declare const DEFAULT_LOGGER: Logger;
|
|
43
|
+
/**
|
|
44
|
+
* Wrap an existing logger with library prefix
|
|
45
|
+
*
|
|
46
|
+
* @param toWrap - Logger to wrap
|
|
47
|
+
* @param name - Optional component name
|
|
48
|
+
* @returns Wrapped logger with library prefix
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const myLogger = wrapLogger(customLogger, 'MyComponent');
|
|
53
|
+
* myLogger.info('Hello'); // [riotprompt] [MyComponent]: Hello
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
11
56
|
export declare const wrapLogger: (toWrap: Logger, name?: string) => Logger;
|
|
57
|
+
/**
|
|
58
|
+
* Create a console-based fallback logger (for environments without Fjell config)
|
|
59
|
+
*
|
|
60
|
+
* @param name - Logger name
|
|
61
|
+
* @returns Console-based logger
|
|
62
|
+
*/
|
|
63
|
+
export declare function createConsoleLogger(name?: string): Logger;
|
package/dist/logger.js
CHANGED
|
@@ -1,17 +1,99 @@
|
|
|
1
|
+
import Logging from '@fjell/logging';
|
|
1
2
|
import { LIBRARY_NAME } from './constants.js';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
// Get the library-level logger from Fjell
|
|
5
|
+
const LibLogger = Logging.getLogger('@theunwalked/riotprompt');
|
|
6
|
+
/**
|
|
7
|
+
* Create a silent logger with the given name
|
|
8
|
+
*/ function createSilentLogger(name) {
|
|
9
|
+
return {
|
|
10
|
+
name,
|
|
11
|
+
debug: ()=>{},
|
|
12
|
+
info: ()=>{},
|
|
13
|
+
warn: ()=>{},
|
|
14
|
+
error: ()=>{},
|
|
15
|
+
verbose: ()=>{},
|
|
16
|
+
silly: ()=>{},
|
|
17
|
+
get: (...components)=>createSilentLogger(`${name}:${components.join(':')}`)
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Silent logger that discards all output
|
|
22
|
+
* Use this as default to prevent accidental information disclosure
|
|
23
|
+
*/ const SILENT_LOGGER = createSilentLogger('silent');
|
|
24
|
+
/**
|
|
25
|
+
* Check if logging is explicitly enabled via environment variable
|
|
26
|
+
*/ const isLoggingEnabled = ()=>{
|
|
27
|
+
var _process_env_DEBUG;
|
|
28
|
+
return process.env.RIOTPROMPT_LOGGING === 'true' || ((_process_env_DEBUG = process.env.DEBUG) === null || _process_env_DEBUG === void 0 ? void 0 : _process_env_DEBUG.includes('riotprompt')) || process.env.NODE_ENV === 'development';
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Create a Logger from a Fjell logger instance
|
|
32
|
+
*/ function createLoggerFromFjell(fjellLogger, name) {
|
|
33
|
+
return {
|
|
34
|
+
name,
|
|
35
|
+
debug: (message, ...args)=>fjellLogger.debug(message, ...args),
|
|
36
|
+
info: (message, ...args)=>fjellLogger.info(message, ...args),
|
|
37
|
+
warn: (message, ...args)=>fjellLogger.warning(message, ...args),
|
|
38
|
+
error: (message, ...args)=>fjellLogger.error(message, ...args),
|
|
39
|
+
verbose: (message, ...args)=>fjellLogger.debug(message, ...args),
|
|
40
|
+
silly: (message, ...args)=>fjellLogger.debug(message, ...args),
|
|
41
|
+
get: (...components)=>{
|
|
42
|
+
const childLogger = fjellLogger.get(...components);
|
|
43
|
+
return createLoggerFromFjell(childLogger, `${name}:${components.join(':')}`);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Fjell-backed logger with sensitive data masking
|
|
49
|
+
*
|
|
50
|
+
* Features:
|
|
51
|
+
* - Automatic sensitive data masking (API keys, passwords, etc.)
|
|
52
|
+
* - Circular reference protection
|
|
53
|
+
* - Hierarchical component logging
|
|
54
|
+
* - Correlation ID support
|
|
55
|
+
*/ const FJELL_LOGGER = {
|
|
56
|
+
name: 'fjell',
|
|
57
|
+
debug: (message, ...args)=>LibLogger.debug(message, ...args),
|
|
58
|
+
info: (message, ...args)=>LibLogger.info(message, ...args),
|
|
59
|
+
warn: (message, ...args)=>LibLogger.warning(message, ...args),
|
|
60
|
+
error: (message, ...args)=>LibLogger.error(message, ...args),
|
|
61
|
+
verbose: (message, ...args)=>LibLogger.debug(message, ...args),
|
|
62
|
+
silly: (message, ...args)=>LibLogger.debug(message, ...args),
|
|
63
|
+
get: (...components)=>{
|
|
64
|
+
const childLogger = LibLogger.get(...components);
|
|
65
|
+
return createLoggerFromFjell(childLogger, components.join(':'));
|
|
66
|
+
}
|
|
13
67
|
};
|
|
14
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Default logger - silent by default to prevent information disclosure
|
|
70
|
+
*
|
|
71
|
+
* Enable logging by setting one of:
|
|
72
|
+
* - RIOTPROMPT_LOGGING=true
|
|
73
|
+
* - DEBUG=*riotprompt*
|
|
74
|
+
* - NODE_ENV=development
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* import { DEFAULT_LOGGER } from '@theunwalked/riotprompt';
|
|
79
|
+
*
|
|
80
|
+
* const logger = DEFAULT_LOGGER.get?.('MyComponent') ?? DEFAULT_LOGGER;
|
|
81
|
+
* logger.info('Processing request', { userId: 123 });
|
|
82
|
+
* ```
|
|
83
|
+
*/ const DEFAULT_LOGGER = isLoggingEnabled() ? FJELL_LOGGER : SILENT_LOGGER;
|
|
84
|
+
/**
|
|
85
|
+
* Wrap an existing logger with library prefix
|
|
86
|
+
*
|
|
87
|
+
* @param toWrap - Logger to wrap
|
|
88
|
+
* @param name - Optional component name
|
|
89
|
+
* @returns Wrapped logger with library prefix
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* const myLogger = wrapLogger(customLogger, 'MyComponent');
|
|
94
|
+
* myLogger.info('Hello'); // [riotprompt] [MyComponent]: Hello
|
|
95
|
+
* ```
|
|
96
|
+
*/ const wrapLogger = (toWrap, name)=>{
|
|
15
97
|
const requiredMethods = [
|
|
16
98
|
'debug',
|
|
17
99
|
'info',
|
|
@@ -34,15 +116,33 @@ const wrapLogger = (toWrap, name)=>{
|
|
|
34
116
|
else if (level === 'silly') toWrap.silly(message, ...args);
|
|
35
117
|
};
|
|
36
118
|
return {
|
|
37
|
-
name: 'wrapped',
|
|
119
|
+
name: name || 'wrapped',
|
|
38
120
|
debug: (message, ...args)=>log('debug', message, ...args),
|
|
39
121
|
info: (message, ...args)=>log('info', message, ...args),
|
|
40
122
|
warn: (message, ...args)=>log('warn', message, ...args),
|
|
41
123
|
error: (message, ...args)=>log('error', message, ...args),
|
|
42
124
|
verbose: (message, ...args)=>log('verbose', message, ...args),
|
|
43
|
-
silly: (message, ...args)=>log('silly', message, ...args)
|
|
125
|
+
silly: (message, ...args)=>log('silly', message, ...args),
|
|
126
|
+
get: (...components)=>wrapLogger(toWrap, name ? `${name}:${components.join(':')}` : components.join(':'))
|
|
44
127
|
};
|
|
45
128
|
};
|
|
129
|
+
/**
|
|
130
|
+
* Create a console-based fallback logger (for environments without Fjell config)
|
|
131
|
+
*
|
|
132
|
+
* @param name - Logger name
|
|
133
|
+
* @returns Console-based logger
|
|
134
|
+
*/ function createConsoleLogger(name = 'console') {
|
|
135
|
+
return {
|
|
136
|
+
name,
|
|
137
|
+
debug: (message, ...args)=>console.debug(`[DEBUG] [${name}]`, message, ...args),
|
|
138
|
+
info: (message, ...args)=>console.info(`[INFO] [${name}]`, message, ...args),
|
|
139
|
+
warn: (message, ...args)=>console.warn(`[WARN] [${name}]`, message, ...args),
|
|
140
|
+
error: (message, ...args)=>console.error(`[ERROR] [${name}]`, message, ...args),
|
|
141
|
+
verbose: ()=>{},
|
|
142
|
+
silly: ()=>{},
|
|
143
|
+
get: (...components)=>createConsoleLogger(`${name}:${components.join(':')}`)
|
|
144
|
+
};
|
|
145
|
+
}
|
|
46
146
|
|
|
47
|
-
export { DEFAULT_LOGGER, wrapLogger };
|
|
147
|
+
export { DEFAULT_LOGGER, SILENT_LOGGER, createConsoleLogger, wrapLogger };
|
|
48
148
|
//# sourceMappingURL=logger.js.map
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sources":["../src/logger.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { LIBRARY_NAME } from \"./constants\";\n\nexport interface Logger {\n name: string;\n debug: (message: string, ...args: any[]) => void;\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n verbose: (message: string, ...args: any[]) => void;\n silly: (message: string, ...args: any[]) => void;\n}\n\nexport const DEFAULT_LOGGER: Logger = {\n name: 'default',\n debug: (message: string, ...args: any[]) => console.debug(message, ...args),\n info: (message: string, ...args: any[]) => console.info(message, ...args),\n warn: (message: string, ...args: any[]) => console.warn(message, ...args),\n error: (message: string, ...args: any[]) => console.error(message, ...args),\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n verbose: (message: string, ...args: any[]) => { },\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n silly: (message: string, ...args: any[]) => { },\n}\n\nexport const wrapLogger = (toWrap: Logger, name?: string): Logger => {\n\n const requiredMethods: (keyof Logger)[] = ['debug', 'info', 'warn', 'error', 'verbose', 'silly'];\n const missingMethods = requiredMethods.filter(method => typeof toWrap[method] !== 'function');\n\n if (missingMethods.length > 0) {\n throw new Error(`Logger is missing required methods: ${missingMethods.join(', ')}`);\n }\n\n const log = (level: keyof Logger, message: string, ...args: any[]) => {\n message = `[${LIBRARY_NAME}] ${name ? `[${name}]` : ''}: ${message}`;\n\n if (level === 'debug') toWrap.debug(message, ...args);\n else if (level === 'info') toWrap.info(message, ...args);\n else if (level === 'warn') toWrap.warn(message, ...args);\n else if (level === 'error') toWrap.error(message, ...args);\n else if (level === 'verbose') toWrap.verbose(message, ...args);\n else if (level === 'silly') toWrap.silly(message, ...args);\n }\n\n return {\n name: 'wrapped',\n debug: (message: string, ...args: any[]) => log('debug', message, ...args),\n info: (message: string, ...args: any[]) => log('info', message, ...args),\n warn: (message: string, ...args: any[]) => log('warn', message, ...args),\n error: (message: string, ...args: any[]) => log('error', message, ...args),\n verbose: (message: string, ...args: any[]) => log('verbose', message, ...args),\n silly: (message: string, ...args: any[]) => log('silly', message, ...args),\n }\n}"],"names":["DEFAULT_LOGGER","name","debug","message","args","console","info","warn","error","verbose","silly","wrapLogger","toWrap","requiredMethods","missingMethods","filter","method","length","Error","join","log","level","LIBRARY_NAME"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logger.js","sources":["../src/logger.ts"],"sourcesContent":["/* eslint-disable no-console */\n/**\n * RiotPrompt - Logger\n * \n * Provides logging infrastructure backed by @fjell/logging for\n * comprehensive sensitive data masking and structured logging.\n */\n\nimport Logging from '@fjell/logging';\nimport { LIBRARY_NAME } from \"./constants\";\n\n/**\n * Logger interface compatible with @fjell/logging\n */\nexport interface Logger {\n name: string;\n debug: (message: string, ...args: any[]) => void;\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n verbose: (message: string, ...args: any[]) => void;\n silly: (message: string, ...args: any[]) => void;\n /** Get a child logger for a component */\n get?: (...components: string[]) => Logger;\n}\n\n// Get the library-level logger from Fjell\nconst LibLogger = Logging.getLogger('@theunwalked/riotprompt');\n\n/**\n * Create a silent logger with the given name\n */\nfunction createSilentLogger(name: string): Logger {\n return {\n name,\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n verbose: () => {},\n silly: () => {},\n get: (...components: string[]) => createSilentLogger(`${name}:${components.join(':')}`),\n };\n}\n\n/**\n * Silent logger that discards all output\n * Use this as default to prevent accidental information disclosure\n */\nexport const SILENT_LOGGER: Logger = createSilentLogger('silent');\n\n/**\n * Check if logging is explicitly enabled via environment variable\n */\nconst isLoggingEnabled = (): boolean => {\n return process.env.RIOTPROMPT_LOGGING === 'true' ||\n process.env.DEBUG?.includes('riotprompt') ||\n process.env.NODE_ENV === 'development';\n};\n\n/**\n * Create a Logger from a Fjell logger instance\n */\nfunction createLoggerFromFjell(fjellLogger: ReturnType<typeof LibLogger.get>, name: string): Logger {\n return {\n name,\n debug: (message: string, ...args: any[]) => fjellLogger.debug(message, ...args),\n info: (message: string, ...args: any[]) => fjellLogger.info(message, ...args),\n warn: (message: string, ...args: any[]) => fjellLogger.warning(message, ...args),\n error: (message: string, ...args: any[]) => fjellLogger.error(message, ...args),\n verbose: (message: string, ...args: any[]) => fjellLogger.debug(message, ...args), // Map to debug\n silly: (message: string, ...args: any[]) => fjellLogger.debug(message, ...args), // Map to debug\n get: (...components: string[]) => {\n const childLogger = fjellLogger.get(...components);\n return createLoggerFromFjell(childLogger, `${name}:${components.join(':')}`);\n },\n };\n}\n\n/**\n * Fjell-backed logger with sensitive data masking\n * \n * Features:\n * - Automatic sensitive data masking (API keys, passwords, etc.)\n * - Circular reference protection\n * - Hierarchical component logging\n * - Correlation ID support\n */\nconst FJELL_LOGGER: Logger = {\n name: 'fjell',\n debug: (message: string, ...args: any[]) => LibLogger.debug(message, ...args),\n info: (message: string, ...args: any[]) => LibLogger.info(message, ...args),\n warn: (message: string, ...args: any[]) => LibLogger.warning(message, ...args),\n error: (message: string, ...args: any[]) => LibLogger.error(message, ...args),\n verbose: (message: string, ...args: any[]) => LibLogger.debug(message, ...args),\n silly: (message: string, ...args: any[]) => LibLogger.debug(message, ...args),\n get: (...components: string[]) => {\n const childLogger = LibLogger.get(...components);\n return createLoggerFromFjell(childLogger, components.join(':'));\n },\n};\n\n/**\n * Default logger - silent by default to prevent information disclosure\n * \n * Enable logging by setting one of:\n * - RIOTPROMPT_LOGGING=true\n * - DEBUG=*riotprompt*\n * - NODE_ENV=development\n * \n * @example\n * ```typescript\n * import { DEFAULT_LOGGER } from '@theunwalked/riotprompt';\n * \n * const logger = DEFAULT_LOGGER.get?.('MyComponent') ?? DEFAULT_LOGGER;\n * logger.info('Processing request', { userId: 123 });\n * ```\n */\nexport const DEFAULT_LOGGER: Logger = isLoggingEnabled() ? FJELL_LOGGER : SILENT_LOGGER;\n\n/**\n * Wrap an existing logger with library prefix\n * \n * @param toWrap - Logger to wrap\n * @param name - Optional component name\n * @returns Wrapped logger with library prefix\n * \n * @example\n * ```typescript\n * const myLogger = wrapLogger(customLogger, 'MyComponent');\n * myLogger.info('Hello'); // [riotprompt] [MyComponent]: Hello\n * ```\n */\nexport const wrapLogger = (toWrap: Logger, name?: string): Logger => {\n const requiredMethods: (keyof Logger)[] = ['debug', 'info', 'warn', 'error', 'verbose', 'silly'];\n const missingMethods = requiredMethods.filter(method => typeof toWrap[method] !== 'function');\n\n if (missingMethods.length > 0) {\n throw new Error(`Logger is missing required methods: ${missingMethods.join(', ')}`);\n }\n\n const log = (level: keyof Logger, message: string, ...args: any[]) => {\n message = `[${LIBRARY_NAME}] ${name ? `[${name}]` : ''}: ${message}`;\n\n if (level === 'debug') toWrap.debug(message, ...args);\n else if (level === 'info') toWrap.info(message, ...args);\n else if (level === 'warn') toWrap.warn(message, ...args);\n else if (level === 'error') toWrap.error(message, ...args);\n else if (level === 'verbose') toWrap.verbose(message, ...args);\n else if (level === 'silly') toWrap.silly(message, ...args);\n };\n\n return {\n name: name || 'wrapped',\n debug: (message: string, ...args: any[]) => log('debug', message, ...args),\n info: (message: string, ...args: any[]) => log('info', message, ...args),\n warn: (message: string, ...args: any[]) => log('warn', message, ...args),\n error: (message: string, ...args: any[]) => log('error', message, ...args),\n verbose: (message: string, ...args: any[]) => log('verbose', message, ...args),\n silly: (message: string, ...args: any[]) => log('silly', message, ...args),\n get: (...components: string[]) => wrapLogger(toWrap, name ? `${name}:${components.join(':')}` : components.join(':')),\n };\n};\n\n/**\n * Create a console-based fallback logger (for environments without Fjell config)\n * \n * @param name - Logger name\n * @returns Console-based logger\n */\nexport function createConsoleLogger(name: string = 'console'): Logger {\n return {\n name,\n debug: (message: string, ...args: any[]) => console.debug(`[DEBUG] [${name}]`, message, ...args),\n info: (message: string, ...args: any[]) => console.info(`[INFO] [${name}]`, message, ...args),\n warn: (message: string, ...args: any[]) => console.warn(`[WARN] [${name}]`, message, ...args),\n error: (message: string, ...args: any[]) => console.error(`[ERROR] [${name}]`, message, ...args),\n verbose: () => {},\n silly: () => {},\n get: (...components: string[]) => createConsoleLogger(`${name}:${components.join(':')}`),\n };\n}\n"],"names":["LibLogger","Logging","getLogger","createSilentLogger","name","debug","info","warn","error","verbose","silly","get","components","join","SILENT_LOGGER","isLoggingEnabled","process","env","RIOTPROMPT_LOGGING","DEBUG","includes","NODE_ENV","createLoggerFromFjell","fjellLogger","message","args","warning","childLogger","FJELL_LOGGER","DEFAULT_LOGGER","wrapLogger","toWrap","requiredMethods","missingMethods","filter","method","length","Error","log","level","LIBRARY_NAME","createConsoleLogger","console"],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { MaskingConfig } from '@fjell/logging';
|
|
2
|
+
import { Logger } from './logger';
|
|
3
|
+
export declare const RiotPromptLogger: import('@fjell/logging').Logger;
|
|
4
|
+
/**
|
|
5
|
+
* Secure logging configuration options
|
|
6
|
+
*/
|
|
7
|
+
export interface SecureLoggingOptions {
|
|
8
|
+
/** Enable masking (defaults to true in production) */
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
/** Mask API keys (OpenAI, Anthropic, AWS, etc.) */
|
|
11
|
+
maskApiKeys?: boolean;
|
|
12
|
+
/** Mask passwords and secrets */
|
|
13
|
+
maskPasswords?: boolean;
|
|
14
|
+
/** Mask email addresses */
|
|
15
|
+
maskEmails?: boolean;
|
|
16
|
+
/** Mask Social Security Numbers */
|
|
17
|
+
maskSSNs?: boolean;
|
|
18
|
+
/** Mask private keys */
|
|
19
|
+
maskPrivateKeys?: boolean;
|
|
20
|
+
/** Mask JWT tokens */
|
|
21
|
+
maskJWTs?: boolean;
|
|
22
|
+
/** Mask large base64 blobs */
|
|
23
|
+
maskBase64Blobs?: boolean;
|
|
24
|
+
/** Maximum object depth for masking */
|
|
25
|
+
maxDepth?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Configure secure logging defaults for RiotPrompt
|
|
29
|
+
*
|
|
30
|
+
* @param options - Configuration options
|
|
31
|
+
* @returns MaskingConfig for use with maskWithConfig
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const config = configureSecureLogging({ maskEmails: false });
|
|
36
|
+
* const masked = maskWithConfig(content, config);
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function configureSecureLogging(options?: SecureLoggingOptions): MaskingConfig;
|
|
40
|
+
/**
|
|
41
|
+
* Default masking configuration with all protections enabled
|
|
42
|
+
*/
|
|
43
|
+
export declare const DEFAULT_MASKING_CONFIG: MaskingConfig;
|
|
44
|
+
/**
|
|
45
|
+
* Permissive masking configuration for development/debugging
|
|
46
|
+
*/
|
|
47
|
+
export declare const DEVELOPMENT_MASKING_CONFIG: MaskingConfig;
|
|
48
|
+
/**
|
|
49
|
+
* Mask a string with default secure settings
|
|
50
|
+
*
|
|
51
|
+
* @param content - Content to mask
|
|
52
|
+
* @param config - Optional custom masking config
|
|
53
|
+
* @returns Masked content
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const masked = maskSensitive('API key: sk-abc123xyz');
|
|
58
|
+
* // Output: "API key: ****"
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function maskSensitive(content: string, config?: MaskingConfig): string;
|
|
62
|
+
/**
|
|
63
|
+
* Execute a function with a correlated logger for request tracking
|
|
64
|
+
*
|
|
65
|
+
* @param fn - Function to execute with correlated logger
|
|
66
|
+
* @param baseLogger - Base logger to correlate
|
|
67
|
+
* @returns Promise with result and correlation ID
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const { result, correlationId } = await executeWithCorrelation(
|
|
72
|
+
* async (logger) => {
|
|
73
|
+
* logger.info('Processing request');
|
|
74
|
+
* return processData();
|
|
75
|
+
* },
|
|
76
|
+
* myLogger
|
|
77
|
+
* );
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export declare function executeWithCorrelation<T>(fn: (logger: Logger, correlationId: string) => Promise<T>, baseLogger: Logger): Promise<{
|
|
81
|
+
result: T;
|
|
82
|
+
correlationId: string;
|
|
83
|
+
}>;
|
|
84
|
+
export { maskWithConfig, createCorrelatedLogger, generateCorrelationId, type MaskingConfig } from '@fjell/logging';
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import Logging, { generateCorrelationId, maskWithConfig } from '@fjell/logging';
|
|
2
|
+
export { createCorrelatedLogger, generateCorrelationId, maskWithConfig } from '@fjell/logging';
|
|
3
|
+
|
|
4
|
+
// Get library logger
|
|
5
|
+
const RiotPromptLogger = Logging.getLogger('@theunwalked/riotprompt');
|
|
6
|
+
/**
|
|
7
|
+
* Configure secure logging defaults for RiotPrompt
|
|
8
|
+
*
|
|
9
|
+
* @param options - Configuration options
|
|
10
|
+
* @returns MaskingConfig for use with maskWithConfig
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const config = configureSecureLogging({ maskEmails: false });
|
|
15
|
+
* const masked = maskWithConfig(content, config);
|
|
16
|
+
* ```
|
|
17
|
+
*/ function configureSecureLogging(options = {}) {
|
|
18
|
+
var _options_enabled, _options_maskApiKeys, _options_maskPasswords, _options_maskEmails, _options_maskSSNs, _options_maskPrivateKeys, _options_maskJWTs, _options_maskBase64Blobs, _options_maxDepth;
|
|
19
|
+
const isProduction = process.env.NODE_ENV === 'production';
|
|
20
|
+
return {
|
|
21
|
+
enabled: (_options_enabled = options.enabled) !== null && _options_enabled !== void 0 ? _options_enabled : isProduction,
|
|
22
|
+
maskApiKeys: (_options_maskApiKeys = options.maskApiKeys) !== null && _options_maskApiKeys !== void 0 ? _options_maskApiKeys : true,
|
|
23
|
+
maskPasswords: (_options_maskPasswords = options.maskPasswords) !== null && _options_maskPasswords !== void 0 ? _options_maskPasswords : true,
|
|
24
|
+
maskEmails: (_options_maskEmails = options.maskEmails) !== null && _options_maskEmails !== void 0 ? _options_maskEmails : true,
|
|
25
|
+
maskSSNs: (_options_maskSSNs = options.maskSSNs) !== null && _options_maskSSNs !== void 0 ? _options_maskSSNs : true,
|
|
26
|
+
maskPrivateKeys: (_options_maskPrivateKeys = options.maskPrivateKeys) !== null && _options_maskPrivateKeys !== void 0 ? _options_maskPrivateKeys : true,
|
|
27
|
+
maskJWTs: (_options_maskJWTs = options.maskJWTs) !== null && _options_maskJWTs !== void 0 ? _options_maskJWTs : true,
|
|
28
|
+
maskBase64Blobs: (_options_maskBase64Blobs = options.maskBase64Blobs) !== null && _options_maskBase64Blobs !== void 0 ? _options_maskBase64Blobs : true,
|
|
29
|
+
maskBearerTokens: true,
|
|
30
|
+
maskGenericSecrets: true,
|
|
31
|
+
maxDepth: (_options_maxDepth = options.maxDepth) !== null && _options_maxDepth !== void 0 ? _options_maxDepth : 8
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Default masking configuration with all protections enabled
|
|
36
|
+
*/ const DEFAULT_MASKING_CONFIG = {
|
|
37
|
+
enabled: true,
|
|
38
|
+
maskApiKeys: true,
|
|
39
|
+
maskPasswords: true,
|
|
40
|
+
maskEmails: true,
|
|
41
|
+
maskSSNs: true,
|
|
42
|
+
maskPrivateKeys: true,
|
|
43
|
+
maskJWTs: true,
|
|
44
|
+
maskBase64Blobs: true,
|
|
45
|
+
maskBearerTokens: true,
|
|
46
|
+
maskGenericSecrets: true,
|
|
47
|
+
maxDepth: 8
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Permissive masking configuration for development/debugging
|
|
51
|
+
*/ const DEVELOPMENT_MASKING_CONFIG = {
|
|
52
|
+
enabled: false,
|
|
53
|
+
maskApiKeys: false,
|
|
54
|
+
maskPasswords: false,
|
|
55
|
+
maskEmails: false,
|
|
56
|
+
maskSSNs: false,
|
|
57
|
+
maskPrivateKeys: false,
|
|
58
|
+
maskJWTs: false,
|
|
59
|
+
maskBase64Blobs: false,
|
|
60
|
+
maskBearerTokens: false,
|
|
61
|
+
maskGenericSecrets: false,
|
|
62
|
+
maxDepth: 8
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Mask a string with default secure settings
|
|
66
|
+
*
|
|
67
|
+
* @param content - Content to mask
|
|
68
|
+
* @param config - Optional custom masking config
|
|
69
|
+
* @returns Masked content
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const masked = maskSensitive('API key: sk-abc123xyz');
|
|
74
|
+
* // Output: "API key: ****"
|
|
75
|
+
* ```
|
|
76
|
+
*/ function maskSensitive(content, config) {
|
|
77
|
+
return maskWithConfig(content, config !== null && config !== void 0 ? config : DEFAULT_MASKING_CONFIG);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Execute a function with a correlated logger for request tracking
|
|
81
|
+
*
|
|
82
|
+
* @param fn - Function to execute with correlated logger
|
|
83
|
+
* @param baseLogger - Base logger to correlate
|
|
84
|
+
* @returns Promise with result and correlation ID
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const { result, correlationId } = await executeWithCorrelation(
|
|
89
|
+
* async (logger) => {
|
|
90
|
+
* logger.info('Processing request');
|
|
91
|
+
* return processData();
|
|
92
|
+
* },
|
|
93
|
+
* myLogger
|
|
94
|
+
* );
|
|
95
|
+
* ```
|
|
96
|
+
*/ async function executeWithCorrelation(fn, baseLogger) {
|
|
97
|
+
const correlationId = generateCorrelationId();
|
|
98
|
+
// Create a correlated wrapper that matches our Logger interface
|
|
99
|
+
const correlatedLogger = {
|
|
100
|
+
name: `${baseLogger.name}:${correlationId}`,
|
|
101
|
+
debug: (msg, ...args)=>baseLogger.debug(`[${correlationId}] ${msg}`, ...args),
|
|
102
|
+
info: (msg, ...args)=>baseLogger.info(`[${correlationId}] ${msg}`, ...args),
|
|
103
|
+
warn: (msg, ...args)=>baseLogger.warn(`[${correlationId}] ${msg}`, ...args),
|
|
104
|
+
error: (msg, ...args)=>baseLogger.error(`[${correlationId}] ${msg}`, ...args),
|
|
105
|
+
verbose: (msg, ...args)=>baseLogger.verbose(`[${correlationId}] ${msg}`, ...args),
|
|
106
|
+
silly: (msg, ...args)=>baseLogger.silly(`[${correlationId}] ${msg}`, ...args)
|
|
107
|
+
};
|
|
108
|
+
const result = await fn(correlatedLogger, correlationId);
|
|
109
|
+
return {
|
|
110
|
+
result,
|
|
111
|
+
correlationId
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export { DEFAULT_MASKING_CONFIG, DEVELOPMENT_MASKING_CONFIG, RiotPromptLogger, configureSecureLogging, executeWithCorrelation, maskSensitive };
|
|
116
|
+
//# sourceMappingURL=logging-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging-config.js","sources":["../src/logging-config.ts"],"sourcesContent":["/**\n * RiotPrompt - Secure Logging Configuration\n * \n * Integrates @fjell/logging for comprehensive sensitive data masking\n * and structured logging across the library.\n */\n\nimport Logging, { \n maskWithConfig, \n type MaskingConfig,\n generateCorrelationId \n} from '@fjell/logging';\nimport type { Logger } from './logger';\n\n// Get library logger\nexport const RiotPromptLogger = Logging.getLogger('@theunwalked/riotprompt');\n\n/**\n * Secure logging configuration options\n */\nexport interface SecureLoggingOptions {\n /** Enable masking (defaults to true in production) */\n enabled?: boolean;\n /** Mask API keys (OpenAI, Anthropic, AWS, etc.) */\n maskApiKeys?: boolean;\n /** Mask passwords and secrets */\n maskPasswords?: boolean;\n /** Mask email addresses */\n maskEmails?: boolean;\n /** Mask Social Security Numbers */\n maskSSNs?: boolean;\n /** Mask private keys */\n maskPrivateKeys?: boolean;\n /** Mask JWT tokens */\n maskJWTs?: boolean;\n /** Mask large base64 blobs */\n maskBase64Blobs?: boolean;\n /** Maximum object depth for masking */\n maxDepth?: number;\n}\n\n/**\n * Configure secure logging defaults for RiotPrompt\n * \n * @param options - Configuration options\n * @returns MaskingConfig for use with maskWithConfig\n * \n * @example\n * ```typescript\n * const config = configureSecureLogging({ maskEmails: false });\n * const masked = maskWithConfig(content, config);\n * ```\n */\nexport function configureSecureLogging(options: SecureLoggingOptions = {}): MaskingConfig {\n const isProduction = process.env.NODE_ENV === 'production';\n\n return {\n enabled: options.enabled ?? isProduction,\n maskApiKeys: options.maskApiKeys ?? true,\n maskPasswords: options.maskPasswords ?? true,\n maskEmails: options.maskEmails ?? true,\n maskSSNs: options.maskSSNs ?? true,\n maskPrivateKeys: options.maskPrivateKeys ?? true,\n maskJWTs: options.maskJWTs ?? true,\n maskBase64Blobs: options.maskBase64Blobs ?? true,\n maskBearerTokens: true,\n maskGenericSecrets: true,\n maxDepth: options.maxDepth ?? 8,\n };\n}\n\n/**\n * Default masking configuration with all protections enabled\n */\nexport const DEFAULT_MASKING_CONFIG: MaskingConfig = {\n enabled: true,\n maskApiKeys: true,\n maskPasswords: true,\n maskEmails: true,\n maskSSNs: true,\n maskPrivateKeys: true,\n maskJWTs: true,\n maskBase64Blobs: true,\n maskBearerTokens: true,\n maskGenericSecrets: true,\n maxDepth: 8,\n};\n\n/**\n * Permissive masking configuration for development/debugging\n */\nexport const DEVELOPMENT_MASKING_CONFIG: MaskingConfig = {\n enabled: false,\n maskApiKeys: false,\n maskPasswords: false,\n maskEmails: false,\n maskSSNs: false,\n maskPrivateKeys: false,\n maskJWTs: false,\n maskBase64Blobs: false,\n maskBearerTokens: false,\n maskGenericSecrets: false,\n maxDepth: 8,\n};\n\n/**\n * Mask a string with default secure settings\n * \n * @param content - Content to mask\n * @param config - Optional custom masking config\n * @returns Masked content\n * \n * @example\n * ```typescript\n * const masked = maskSensitive('API key: sk-abc123xyz');\n * // Output: \"API key: ****\"\n * ```\n */\nexport function maskSensitive(content: string, config?: MaskingConfig): string {\n return maskWithConfig(content, config ?? DEFAULT_MASKING_CONFIG);\n}\n\n/**\n * Execute a function with a correlated logger for request tracking\n * \n * @param fn - Function to execute with correlated logger\n * @param baseLogger - Base logger to correlate\n * @returns Promise with result and correlation ID\n * \n * @example\n * ```typescript\n * const { result, correlationId } = await executeWithCorrelation(\n * async (logger) => {\n * logger.info('Processing request');\n * return processData();\n * },\n * myLogger\n * );\n * ```\n */\nexport async function executeWithCorrelation<T>(\n fn: (logger: Logger, correlationId: string) => Promise<T>,\n baseLogger: Logger,\n): Promise<{ result: T; correlationId: string }> {\n const correlationId = generateCorrelationId();\n \n // Create a correlated wrapper that matches our Logger interface\n const correlatedLogger: Logger = {\n name: `${baseLogger.name}:${correlationId}`,\n debug: (msg, ...args) => baseLogger.debug(`[${correlationId}] ${msg}`, ...args),\n info: (msg, ...args) => baseLogger.info(`[${correlationId}] ${msg}`, ...args),\n warn: (msg, ...args) => baseLogger.warn(`[${correlationId}] ${msg}`, ...args),\n error: (msg, ...args) => baseLogger.error(`[${correlationId}] ${msg}`, ...args),\n verbose: (msg, ...args) => baseLogger.verbose(`[${correlationId}] ${msg}`, ...args),\n silly: (msg, ...args) => baseLogger.silly(`[${correlationId}] ${msg}`, ...args),\n };\n\n const result = await fn(correlatedLogger, correlationId);\n return { result, correlationId };\n}\n\n// Re-export useful Fjell utilities\nexport { \n maskWithConfig, \n createCorrelatedLogger, \n generateCorrelationId,\n type MaskingConfig \n} from '@fjell/logging';\n\n"],"names":["RiotPromptLogger","Logging","getLogger","configureSecureLogging","options","isProduction","process","env","NODE_ENV","enabled","maskApiKeys","maskPasswords","maskEmails","maskSSNs","maskPrivateKeys","maskJWTs","maskBase64Blobs","maskBearerTokens","maskGenericSecrets","maxDepth","DEFAULT_MASKING_CONFIG","DEVELOPMENT_MASKING_CONFIG","maskSensitive","content","config","maskWithConfig","executeWithCorrelation","fn","baseLogger","correlationId","generateCorrelationId","correlatedLogger","name","debug","msg","args","info","warn","error","verbose","silly","result"],"mappings":";;;AAcA;AACO,MAAMA,gBAAAA,GAAmBC,OAAAA,CAAQC,SAAS,CAAC,yBAAA;AA0BlD;;;;;;;;;;;AAWC,IACM,SAASC,sBAAAA,CAAuBC,OAAAA,GAAgC,EAAE,EAAA;AAIxDA,IAAAA,IAAAA,gBAAAA,EACIA,sBACEA,sBAAAA,EACHA,mBAAAA,EACFA,iBAAAA,EACOA,wBAAAA,EACPA,mBACOA,wBAAAA,EAGPA,iBAAAA;AAbd,IAAA,MAAMC,YAAAA,GAAeC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;IAE9C,OAAO;AACHC,QAAAA,OAAO,GAAEL,gBAAAA,GAAAA,OAAAA,CAAQK,OAAO,MAAA,IAAA,IAAfL,8BAAAA,gBAAAA,GAAmBC,YAAAA;AAC5BK,QAAAA,WAAW,GAAEN,oBAAAA,GAAAA,OAAAA,CAAQM,WAAW,MAAA,IAAA,IAAnBN,kCAAAA,oBAAAA,GAAuB,IAAA;AACpCO,QAAAA,aAAa,GAAEP,sBAAAA,GAAAA,OAAAA,CAAQO,aAAa,MAAA,IAAA,IAArBP,oCAAAA,sBAAAA,GAAyB,IAAA;AACxCQ,QAAAA,UAAU,GAAER,mBAAAA,GAAAA,OAAAA,CAAQQ,UAAU,MAAA,IAAA,IAAlBR,iCAAAA,mBAAAA,GAAsB,IAAA;AAClCS,QAAAA,QAAQ,GAAET,iBAAAA,GAAAA,OAAAA,CAAQS,QAAQ,MAAA,IAAA,IAAhBT,+BAAAA,iBAAAA,GAAoB,IAAA;AAC9BU,QAAAA,eAAe,GAAEV,wBAAAA,GAAAA,OAAAA,CAAQU,eAAe,MAAA,IAAA,IAAvBV,sCAAAA,wBAAAA,GAA2B,IAAA;AAC5CW,QAAAA,QAAQ,GAAEX,iBAAAA,GAAAA,OAAAA,CAAQW,QAAQ,MAAA,IAAA,IAAhBX,+BAAAA,iBAAAA,GAAoB,IAAA;AAC9BY,QAAAA,eAAe,GAAEZ,wBAAAA,GAAAA,OAAAA,CAAQY,eAAe,MAAA,IAAA,IAAvBZ,sCAAAA,wBAAAA,GAA2B,IAAA;QAC5Ca,gBAAAA,EAAkB,IAAA;QAClBC,kBAAAA,EAAoB,IAAA;AACpBC,QAAAA,QAAQ,GAAEf,iBAAAA,GAAAA,OAAAA,CAAQe,QAAQ,MAAA,IAAA,IAAhBf,+BAAAA,iBAAAA,GAAoB;AAClC,KAAA;AACJ;AAEA;;UAGagB,sBAAAA,GAAwC;IACjDX,OAAAA,EAAS,IAAA;IACTC,WAAAA,EAAa,IAAA;IACbC,aAAAA,EAAe,IAAA;IACfC,UAAAA,EAAY,IAAA;IACZC,QAAAA,EAAU,IAAA;IACVC,eAAAA,EAAiB,IAAA;IACjBC,QAAAA,EAAU,IAAA;IACVC,eAAAA,EAAiB,IAAA;IACjBC,gBAAAA,EAAkB,IAAA;IAClBC,kBAAAA,EAAoB,IAAA;IACpBC,QAAAA,EAAU;AACd;AAEA;;UAGaE,0BAAAA,GAA4C;IACrDZ,OAAAA,EAAS,KAAA;IACTC,WAAAA,EAAa,KAAA;IACbC,aAAAA,EAAe,KAAA;IACfC,UAAAA,EAAY,KAAA;IACZC,QAAAA,EAAU,KAAA;IACVC,eAAAA,EAAiB,KAAA;IACjBC,QAAAA,EAAU,KAAA;IACVC,eAAAA,EAAiB,KAAA;IACjBC,gBAAAA,EAAkB,KAAA;IAClBC,kBAAAA,EAAoB,KAAA;IACpBC,QAAAA,EAAU;AACd;AAEA;;;;;;;;;;;;AAYC,IACM,SAASG,aAAAA,CAAcC,OAAe,EAAEC,MAAsB,EAAA;AACjE,IAAA,OAAOC,cAAAA,CAAeF,OAAAA,EAASC,MAAAA,KAAAA,IAAAA,IAAAA,MAAAA,KAAAA,MAAAA,GAAAA,MAAAA,GAAUJ,sBAAAA,CAAAA;AAC7C;AAEA;;;;;;;;;;;;;;;;;AAiBC,IACM,eAAeM,sBAAAA,CAClBC,EAAyD,EACzDC,UAAkB,EAAA;AAElB,IAAA,MAAMC,aAAAA,GAAgBC,qBAAAA,EAAAA;;AAGtB,IAAA,MAAMC,gBAAAA,GAA2B;AAC7BC,QAAAA,IAAAA,EAAM,GAAGJ,UAAAA,CAAWI,IAAI,CAAC,CAAC,EAAEH,aAAAA,CAAAA,CAAe;AAC3CI,QAAAA,KAAAA,EAAO,CAACC,GAAAA,EAAK,GAAGC,IAAAA,GAASP,WAAWK,KAAK,CAAC,CAAC,CAAC,EAAEJ,aAAAA,CAAc,EAAE,EAAEK,KAAK,EAAA,GAAKC,IAAAA,CAAAA;AAC1EC,QAAAA,IAAAA,EAAM,CAACF,GAAAA,EAAK,GAAGC,IAAAA,GAASP,WAAWQ,IAAI,CAAC,CAAC,CAAC,EAAEP,aAAAA,CAAc,EAAE,EAAEK,KAAK,EAAA,GAAKC,IAAAA,CAAAA;AACxEE,QAAAA,IAAAA,EAAM,CAACH,GAAAA,EAAK,GAAGC,IAAAA,GAASP,WAAWS,IAAI,CAAC,CAAC,CAAC,EAAER,aAAAA,CAAc,EAAE,EAAEK,KAAK,EAAA,GAAKC,IAAAA,CAAAA;AACxEG,QAAAA,KAAAA,EAAO,CAACJ,GAAAA,EAAK,GAAGC,IAAAA,GAASP,WAAWU,KAAK,CAAC,CAAC,CAAC,EAAET,aAAAA,CAAc,EAAE,EAAEK,KAAK,EAAA,GAAKC,IAAAA,CAAAA;AAC1EI,QAAAA,OAAAA,EAAS,CAACL,GAAAA,EAAK,GAAGC,IAAAA,GAASP,WAAWW,OAAO,CAAC,CAAC,CAAC,EAAEV,aAAAA,CAAc,EAAE,EAAEK,KAAK,EAAA,GAAKC,IAAAA,CAAAA;AAC9EK,QAAAA,KAAAA,EAAO,CAACN,GAAAA,EAAK,GAAGC,IAAAA,GAASP,WAAWY,KAAK,CAAC,CAAC,CAAC,EAAEX,aAAAA,CAAc,EAAE,EAAEK,KAAK,EAAA,GAAKC,IAAAA;AAC9E,KAAA;IAEA,MAAMM,MAAAA,GAAS,MAAMd,EAAAA,CAAGI,gBAAAA,EAAkBF,aAAAA,CAAAA;IAC1C,OAAO;AAAEY,QAAAA,MAAAA;AAAQZ,QAAAA;AAAc,KAAA;AACnC;;;;"}
|
package/dist/message-builder.js
CHANGED
package/dist/model-config.js
CHANGED
|
@@ -202,5 +202,5 @@ function getModelFamily(model) {
|
|
|
202
202
|
getModelRegistry().register(config);
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
export { ModelRegistry, configureModel,
|
|
205
|
+
export { ModelRegistry, configureModel, getEncoding, getModelFamily, getModelRegistry, getPersonaRole, resetModelRegistry, supportsToolCalls };
|
|
206
206
|
//# sourceMappingURL=model-config.js.map
|
package/dist/override.js
CHANGED
|
@@ -4,18 +4,24 @@ import { ParametersSchema } from './items/parameters.js';
|
|
|
4
4
|
import { SectionOptionsSchema } from './items/section.js';
|
|
5
5
|
import { DEFAULT_LOGGER, wrapLogger } from './logger.js';
|
|
6
6
|
import './items/weighted.js';
|
|
7
|
-
import { create as create$
|
|
7
|
+
import { create as create$2 } from './formatter.js';
|
|
8
8
|
import { create as create$3 } from './parser.js';
|
|
9
9
|
import './loader.js';
|
|
10
10
|
import './builder.js';
|
|
11
11
|
import './recipes.js';
|
|
12
12
|
import './conversation.js';
|
|
13
13
|
import 'tiktoken';
|
|
14
|
+
import './logging-config.js';
|
|
14
15
|
import './tools.js';
|
|
15
16
|
import 'openai';
|
|
16
17
|
import '@anthropic-ai/sdk';
|
|
17
18
|
import '@google/generative-ai';
|
|
18
|
-
import
|
|
19
|
+
import './security/types.js';
|
|
20
|
+
import './security/defaults.js';
|
|
21
|
+
import './security/serialization-schemas.js';
|
|
22
|
+
import '@theunwalked/pressurelid';
|
|
23
|
+
import '@theunwalked/spotclean';
|
|
24
|
+
import { create as create$1 } from './util/storage.js';
|
|
19
25
|
|
|
20
26
|
const OptionsSchema = z.object({
|
|
21
27
|
logger: z.any().optional().default(DEFAULT_LOGGER),
|
|
@@ -29,7 +35,7 @@ const create = (overrideOptions = {})=>{
|
|
|
29
35
|
const options = OptionsSchema.parse(overrideOptions);
|
|
30
36
|
const parameters = options.parameters;
|
|
31
37
|
const logger = wrapLogger(options === null || options === void 0 ? void 0 : options.logger, 'Override');
|
|
32
|
-
const storage = create$
|
|
38
|
+
const storage = create$1({
|
|
33
39
|
log: logger.debug
|
|
34
40
|
});
|
|
35
41
|
const loadOptions = (sectionOptions = {})=>{
|
|
@@ -116,7 +122,7 @@ const create = (overrideOptions = {})=>{
|
|
|
116
122
|
logger.silly('Append found, adding to content from file %s', append);
|
|
117
123
|
finalSection = finalSection.append(append);
|
|
118
124
|
}
|
|
119
|
-
const formatter$1 = create$
|
|
125
|
+
const formatter$1 = create$2({
|
|
120
126
|
logger
|
|
121
127
|
});
|
|
122
128
|
logger.silly('Final section %s:\n\n%s\n\n', logger.name, formatter$1.format(finalSection));
|
package/dist/override.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"override.js","sources":["../src/override.ts"],"sourcesContent":["import path from 'path';\nimport { z } from 'zod';\nimport { ParametersSchema } from './items/parameters';\nimport { SectionOptions, SectionOptionsSchema } from './items/section';\nimport { DEFAULT_LOGGER, wrapLogger } from './logger';\nimport { Formatter, Parser, Section, Weighted } from './riotprompt';\nimport * as Storage from './util/storage';\n\nconst OptionsSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n configDirs: z.array(z.string()).default(['./overrides']),\n overrides: z.boolean().default(false),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionsSchema>;\n\nexport type OptionsParam = Partial<Options>;\n\nexport interface Instance {\n customize: <T extends Weighted>(overrideFile: string, section: Section<T>, sectionOptions?: SectionOptions) => Promise<Section<T>>;\n override: <T extends Weighted>(overrideFile: string, section: Section<T>, sectionOptions?: SectionOptions) =>\n Promise<{ override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] }>;\n}\n\nexport const create = (overrideOptions: OptionsParam = {}): Instance => {\n const options: Required<Options> = OptionsSchema.parse(overrideOptions) as Required<Options>;\n\n const parameters = options.parameters;\n\n const logger = wrapLogger(options?.logger, 'Override');\n const storage = Storage.create({ log: logger.debug });\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n const override = async <T extends Weighted>(\n overrideFile: string,\n section: Section<T>,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<{ override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] }> => {\n const currentSectionOptions = loadOptions(sectionOptions);\n\n const response: { override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] } = {\n prepends: [],\n appends: []\n };\n\n // Process directories in order (closest to furthest)\n for (let i = 0; i < options.configDirs.length; i++) {\n const configDir = options.configDirs[i];\n const baseFile = path.join(configDir, overrideFile);\n const preFile = baseFile.replace('.md', '-pre.md');\n const postFile = baseFile.replace('.md', '-post.md');\n\n // Check for prepend files (-pre.md)\n if (await storage.exists(preFile)) {\n logger.silly('Found pre file %s (layer %d)', preFile, i + 1);\n const parser = Parser.create({ logger });\n const prependSection = await parser.parseFile<T>(preFile, currentSectionOptions);\n response.prepends.push(prependSection);\n }\n\n // Check for append files (-post.md)\n if (await storage.exists(postFile)) {\n logger.silly('Found post file %s (layer %d)', postFile, i + 1);\n const parser = Parser.create({ logger });\n const appendSection = await parser.parseFile<T>(postFile, currentSectionOptions);\n response.appends.push(appendSection);\n }\n\n // Check for complete override files - use the first (closest) one found\n if (!response.override && await storage.exists(baseFile)) {\n logger.silly('Found base file %s (layer %d)', baseFile, i + 1);\n if (options.overrides) {\n logger.warn('WARNING: Core directives are being overwritten by custom configuration at layer %d', i + 1);\n const parser = Parser.create({ logger });\n response.override = await parser.parseFile<T>(baseFile, currentSectionOptions);\n } else {\n logger.error('ERROR: Core directives are being overwritten by custom configuration');\n throw new Error('Core directives are being overwritten by custom configuration, but overrides are not enabled. Please enable --overrides to use this feature.');\n }\n }\n }\n\n return response;\n }\n\n const customize = async <T extends Weighted>(\n overrideFile: string,\n section: Section<T>,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentSectionOptions = loadOptions(sectionOptions);\n\n const { override: overrideContent, prepends, appends }: { override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] } = await override(overrideFile, section, currentSectionOptions);\n let finalSection: Section<T> = section;\n\n if (overrideContent) {\n if (options.overrides) {\n logger.warn('Override found, replacing content from file %s', overrideContent);\n finalSection = overrideContent;\n } else {\n logger.error('ERROR: Core directives are being overwritten by custom configuration');\n throw new Error('Core directives are being overwritten by custom configuration, but overrides are not enabled. Please enable --overrides to use this feature.');\n }\n }\n\n // Apply prepends in order (closest layer first)\n for (const prepend of prepends) {\n logger.silly('Prepend found, adding to content from file %s', prepend);\n finalSection = finalSection.prepend(prepend);\n }\n\n // Apply appends in reverse order (furthest layers first, then closest)\n // Create a copy to avoid mutating the original array\n const reversedAppends = [...appends].reverse();\n for (const append of reversedAppends) {\n logger.silly('Append found, adding to content from file %s', append);\n finalSection = finalSection.append(append);\n }\n\n const formatter = Formatter.create({ logger });\n logger.silly('Final section %s:\\n\\n%s\\n\\n', logger.name, formatter.format(finalSection));\n\n return finalSection;\n }\n\n return {\n override,\n customize,\n }\n}\n"],"names":["OptionsSchema","z","object","logger","any","optional","default","DEFAULT_LOGGER","configDirs","array","string","overrides","boolean","parameters","ParametersSchema","create","overrideOptions","options","parse","wrapLogger","storage","Storage","log","debug","loadOptions","sectionOptions","currentOptions","SectionOptionsSchema","override","overrideFile","section","currentSectionOptions","response","prepends","appends","i","length","configDir","baseFile","path","join","preFile","replace","postFile","exists","silly","parser","Parser","prependSection","parseFile","push","appendSection","warn","error","Error","customize","overrideContent","finalSection","prepend","reversedAppends","reverse","append","formatter","Formatter","name","format"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"override.js","sources":["../src/override.ts"],"sourcesContent":["import path from 'path';\nimport { z } from 'zod';\nimport { ParametersSchema } from './items/parameters';\nimport { SectionOptions, SectionOptionsSchema } from './items/section';\nimport { DEFAULT_LOGGER, wrapLogger } from './logger';\nimport { Formatter, Parser, Section, Weighted } from './riotprompt';\nimport * as Storage from './util/storage';\n\nconst OptionsSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n configDirs: z.array(z.string()).default(['./overrides']),\n overrides: z.boolean().default(false),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionsSchema>;\n\nexport type OptionsParam = Partial<Options>;\n\nexport interface Instance {\n customize: <T extends Weighted>(overrideFile: string, section: Section<T>, sectionOptions?: SectionOptions) => Promise<Section<T>>;\n override: <T extends Weighted>(overrideFile: string, section: Section<T>, sectionOptions?: SectionOptions) =>\n Promise<{ override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] }>;\n}\n\nexport const create = (overrideOptions: OptionsParam = {}): Instance => {\n const options: Required<Options> = OptionsSchema.parse(overrideOptions) as Required<Options>;\n\n const parameters = options.parameters;\n\n const logger = wrapLogger(options?.logger, 'Override');\n const storage = Storage.create({ log: logger.debug });\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n const override = async <T extends Weighted>(\n overrideFile: string,\n section: Section<T>,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<{ override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] }> => {\n const currentSectionOptions = loadOptions(sectionOptions);\n\n const response: { override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] } = {\n prepends: [],\n appends: []\n };\n\n // Process directories in order (closest to furthest)\n for (let i = 0; i < options.configDirs.length; i++) {\n const configDir = options.configDirs[i];\n const baseFile = path.join(configDir, overrideFile);\n const preFile = baseFile.replace('.md', '-pre.md');\n const postFile = baseFile.replace('.md', '-post.md');\n\n // Check for prepend files (-pre.md)\n if (await storage.exists(preFile)) {\n logger.silly('Found pre file %s (layer %d)', preFile, i + 1);\n const parser = Parser.create({ logger });\n const prependSection = await parser.parseFile<T>(preFile, currentSectionOptions);\n response.prepends.push(prependSection);\n }\n\n // Check for append files (-post.md)\n if (await storage.exists(postFile)) {\n logger.silly('Found post file %s (layer %d)', postFile, i + 1);\n const parser = Parser.create({ logger });\n const appendSection = await parser.parseFile<T>(postFile, currentSectionOptions);\n response.appends.push(appendSection);\n }\n\n // Check for complete override files - use the first (closest) one found\n if (!response.override && await storage.exists(baseFile)) {\n logger.silly('Found base file %s (layer %d)', baseFile, i + 1);\n if (options.overrides) {\n logger.warn('WARNING: Core directives are being overwritten by custom configuration at layer %d', i + 1);\n const parser = Parser.create({ logger });\n response.override = await parser.parseFile<T>(baseFile, currentSectionOptions);\n } else {\n logger.error('ERROR: Core directives are being overwritten by custom configuration');\n throw new Error('Core directives are being overwritten by custom configuration, but overrides are not enabled. Please enable --overrides to use this feature.');\n }\n }\n }\n\n return response;\n }\n\n const customize = async <T extends Weighted>(\n overrideFile: string,\n section: Section<T>,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentSectionOptions = loadOptions(sectionOptions);\n\n const { override: overrideContent, prepends, appends }: { override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] } = await override(overrideFile, section, currentSectionOptions);\n let finalSection: Section<T> = section;\n\n if (overrideContent) {\n if (options.overrides) {\n logger.warn('Override found, replacing content from file %s', overrideContent);\n finalSection = overrideContent;\n } else {\n logger.error('ERROR: Core directives are being overwritten by custom configuration');\n throw new Error('Core directives are being overwritten by custom configuration, but overrides are not enabled. Please enable --overrides to use this feature.');\n }\n }\n\n // Apply prepends in order (closest layer first)\n for (const prepend of prepends) {\n logger.silly('Prepend found, adding to content from file %s', prepend);\n finalSection = finalSection.prepend(prepend);\n }\n\n // Apply appends in reverse order (furthest layers first, then closest)\n // Create a copy to avoid mutating the original array\n const reversedAppends = [...appends].reverse();\n for (const append of reversedAppends) {\n logger.silly('Append found, adding to content from file %s', append);\n finalSection = finalSection.append(append);\n }\n\n const formatter = Formatter.create({ logger });\n logger.silly('Final section %s:\\n\\n%s\\n\\n', logger.name, formatter.format(finalSection));\n\n return finalSection;\n }\n\n return {\n override,\n customize,\n }\n}\n"],"names":["OptionsSchema","z","object","logger","any","optional","default","DEFAULT_LOGGER","configDirs","array","string","overrides","boolean","parameters","ParametersSchema","create","overrideOptions","options","parse","wrapLogger","storage","Storage","log","debug","loadOptions","sectionOptions","currentOptions","SectionOptionsSchema","override","overrideFile","section","currentSectionOptions","response","prepends","appends","i","length","configDir","baseFile","path","join","preFile","replace","postFile","exists","silly","parser","Parser","prependSection","parseFile","push","appendSection","warn","error","Error","customize","overrideContent","finalSection","prepend","reversedAppends","reverse","append","formatter","Formatter","name","format"],"mappings":"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"}
|
package/dist/recipes.js
CHANGED
|
@@ -14,11 +14,17 @@ import { create as create$2 } from './loader.js';
|
|
|
14
14
|
import { create as create$1 } from './override.js';
|
|
15
15
|
import './builder.js';
|
|
16
16
|
import 'tiktoken';
|
|
17
|
+
import './logging-config.js';
|
|
17
18
|
import { ToolRegistry } from './tools.js';
|
|
18
19
|
import { StrategyExecutor } from './iteration-strategy.js';
|
|
19
20
|
import 'openai';
|
|
20
21
|
import '@anthropic-ai/sdk';
|
|
21
22
|
import '@google/generative-ai';
|
|
23
|
+
import './security/types.js';
|
|
24
|
+
import './security/defaults.js';
|
|
25
|
+
import './security/serialization-schemas.js';
|
|
26
|
+
import '@theunwalked/pressurelid';
|
|
27
|
+
import '@theunwalked/spotclean';
|
|
22
28
|
|
|
23
29
|
// ===== CONFIGURATION SCHEMAS =====
|
|
24
30
|
const ContentItemSchema = z.union([
|