@grunnverk/kodrdriv 1.5.4 → 1.5.6
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/constants.js +1 -1
- package/dist/logging.js +16 -1
- package/dist/logging.js.map +1 -1
- package/dist/main.js +6 -3
- package/dist/main.js.map +1 -1
- package/dist/mcp-server.js +1 -1
- package/dist/mcp-server.js.map +1 -1
- package/package.json +8 -8
package/dist/constants.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os from 'os';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
|
|
4
|
-
/** Version string populated at build time with git and system information */ const VERSION = '1.5.
|
|
4
|
+
/** Version string populated at build time with git and system information */ const VERSION = '1.5.6 (HEAD/9d2cc4b T:v1.5.6 2026-01-28 22:36:49 -0800) linux x64 v24.13.0';
|
|
5
5
|
/** The program name used in CLI help and error messages */ const PROGRAM_NAME = 'kodrdriv';
|
|
6
6
|
const DEFAULT_OVERRIDES = false;
|
|
7
7
|
const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = 'YYYY-MM-DD-HHmmss.SSS';
|
package/dist/logging.js
CHANGED
|
@@ -171,6 +171,21 @@ const setLogLevel = (level)=>{
|
|
|
171
171
|
});
|
|
172
172
|
};
|
|
173
173
|
const getLogger = ()=>logger;
|
|
174
|
+
/**
|
|
175
|
+
* Close all logger transports and wait for them to finish writing.
|
|
176
|
+
* This should be called before process exit to ensure all logs are flushed
|
|
177
|
+
* and file handles are properly closed.
|
|
178
|
+
*/ const closeLogger = async ()=>{
|
|
179
|
+
return new Promise((resolve)=>{
|
|
180
|
+
// Close all transports
|
|
181
|
+
logger.close();
|
|
182
|
+
// Give transports a moment to finish closing
|
|
183
|
+
// Winston's close() is synchronous but file handles may need a tick to release
|
|
184
|
+
setImmediate(()=>{
|
|
185
|
+
resolve();
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
};
|
|
174
189
|
|
|
175
|
-
export { getLogger, setLogLevel };
|
|
190
|
+
export { closeLogger, getLogger, setLogLevel };
|
|
176
191
|
//# sourceMappingURL=logging.js.map
|
package/dist/logging.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sources":["../src/logging.ts"],"sourcesContent":["import winston from 'winston';\n// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\nimport path from 'path';\nimport { DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS, PROGRAM_NAME, DEFAULT_OUTPUT_DIRECTORY } from './constants';\n\nexport interface LogContext {\n [key: string]: any;\n}\n\n// Track if debug directory has been ensured for this session\nlet debugDirectoryEnsured = false;\n\nconst ensureDebugDirectory = () => {\n if (debugDirectoryEnsured) return;\n\n const debugDir = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug');\n\n try {\n fs.mkdirSync(debugDir, { recursive: true });\n debugDirectoryEnsured = true;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Failed to create debug directory ${debugDir}:`, error);\n }\n};\n\nconst generateDebugLogFilename = () => {\n const now = new Date();\n const timestamp = now.toISOString()\n .replace(/[-:]/g, '')\n .replace(/\\./g, '')\n .replace('T', '-')\n .replace('Z', '');\n\n return `${timestamp}-debug.log`;\n};\n\nconst createTransports = (level: string) => {\n const transports: winston.transport[] = [];\n\n // When running as MCP server, NEVER add console transports as they interfere with the protocol\n // All output must go through log capture mechanism instead\n const isMcpServer = process.env.KODRDRIV_MCP_SERVER === 'true';\n\n if (!isMcpServer) {\n // Always add console transport for info level and above (only when NOT in MCP mode)\n if (level === 'info') {\n transports.push(\n new winston.transports.Console({\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ level, message, dryRun }): string => {\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n // For info level messages, don't show the level prefix\n if (level.includes('info')) {\n return `${dryRunPrefix}${String(message)}`;\n }\n // For warn, error, etc., show the level prefix\n return `${level}: ${dryRunPrefix}${String(message)}`;\n })\n )\n })\n );\n } else {\n // For debug/verbose levels, add console transport that shows info and above\n transports.push(\n new winston.transports.Console({\n level: 'info', // Show info, warn, and error on console\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n // For info level messages, use simpler format without timestamp\n if (level.includes('info')) {\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${dryRunPrefix}${String(message)}`;\n }\n\n // Filter out winston internal metadata\n const filteredMeta = Object.keys(meta).reduce((acc, key) => {\n if (!['level', 'message', 'timestamp', 'dryRun', 'service', 'splat', 'Symbol(level)', 'Symbol(message)'].includes(key)) {\n acc[key] = meta[key];\n }\n return acc;\n }, {} as Record<string, any>);\n\n const metaStr = Object.keys(filteredMeta).length ? ` ${JSON.stringify(filteredMeta, null, 2)}` : '';\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n )\n })\n );\n }\n }\n\n // Add file transport for debug levels (debug and silly)\n if (level === 'debug' || level === 'silly') {\n ensureDebugDirectory();\n\n const debugLogPath = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug', generateDebugLogFilename());\n\n transports.push(\n new winston.transports.File({\n filename: debugLogPath,\n level: 'debug', // Capture debug and above in the file\n format: winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.printf(({ timestamp, level, message, service, ...meta }) => {\n // Filter out winston internal metadata and properly format remaining meta\n const filteredMeta = Object.keys(meta).reduce((acc, key) => {\n // Skip internal winston fields\n if (!['level', 'message', 'timestamp', 'splat', 'Symbol(level)', 'Symbol(message)'].includes(key)) {\n acc[key] = meta[key];\n }\n return acc;\n }, {} as Record<string, any>);\n\n const metaStr = Object.keys(filteredMeta).length\n ? ` ${JSON.stringify(filteredMeta, null, 2)}`\n : '';\n const serviceStr = service ? ` [${service}]` : '';\n return `${timestamp}${serviceStr} ${level}: ${message}${metaStr}`;\n })\n )\n })\n );\n }\n\n return transports;\n};\n\nconst createFormat = (level: string) => {\n const baseFormats = [\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n ];\n\n if (level === 'info') {\n return winston.format.combine(\n ...baseFormats,\n winston.format.printf(({ message, dryRun, ..._meta }): string => {\n // Auto-format dry-run messages\n if (dryRun) {\n return `🔍 DRY RUN: ${message}`;\n }\n return String(message);\n })\n );\n }\n\n return winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n ...baseFormats,\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n // Filter out winston internal metadata\n const filteredMeta = Object.keys(meta).reduce((acc, key) => {\n if (!['level', 'message', 'timestamp', 'dryRun', 'service', 'splat', 'Symbol(level)', 'Symbol(message)'].includes(key)) {\n acc[key] = meta[key];\n }\n return acc;\n }, {} as Record<string, any>);\n\n const metaStr = Object.keys(filteredMeta).length ? ` ${JSON.stringify(filteredMeta, null, 2)}` : '';\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n );\n};\n\n// Create the logger instance once\nconst logger = winston.createLogger({\n level: 'info',\n format: createFormat('info'),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports('info'),\n});\n\nexport const setLogLevel = (level: string) => {\n // Reconfigure the existing logger instead of creating a new one\n logger.configure({\n level,\n format: createFormat(level),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports(level),\n });\n};\n\nexport const getLogger = () => logger;\n\n/**\n * Get a logger that automatically formats messages for dry-run mode\n */\nexport const getDryRunLogger = (isDryRun: boolean) => {\n if (!isDryRun) {\n return logger;\n }\n\n // Return a wrapper that adds dry-run context to all log calls\n return {\n info: (message: string, ...args: any[]) => logger.info(message, { dryRun: true }, ...args),\n warn: (message: string, ...args: any[]) => logger.warn(message, { dryRun: true }, ...args),\n error: (message: string, ...args: any[]) => logger.error(message, { dryRun: true }, ...args),\n debug: (message: string, ...args: any[]) => logger.debug(message, { dryRun: true }, ...args),\n verbose: (message: string, ...args: any[]) => logger.verbose(message, { dryRun: true }, ...args),\n silly: (message: string, ...args: any[]) => logger.silly(message, { dryRun: true }, ...args),\n };\n};\n"],"names":["debugDirectoryEnsured","ensureDebugDirectory","debugDir","path","join","DEFAULT_OUTPUT_DIRECTORY","fs","mkdirSync","recursive","error","console","generateDebugLogFilename","now","Date","timestamp","toISOString","replace","createTransports","level","transports","isMcpServer","process","env","KODRDRIV_MCP_SERVER","push","winston","Console","format","combine","colorize","printf","message","dryRun","dryRunPrefix","includes","String","meta","filteredMeta","Object","keys","reduce","acc","key","metaStr","length","JSON","stringify","debugLogPath","File","filename","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","errors","stack","splat","service","serviceStr","createFormat","baseFormats","_meta","logger","createLogger","defaultMeta","PROGRAM_NAME","setLogLevel","configure","getLogger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logging.js","sources":["../src/logging.ts"],"sourcesContent":["import winston from 'winston';\n// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\nimport path from 'path';\nimport { DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS, PROGRAM_NAME, DEFAULT_OUTPUT_DIRECTORY } from './constants';\n\nexport interface LogContext {\n [key: string]: any;\n}\n\n// Track if debug directory has been ensured for this session\nlet debugDirectoryEnsured = false;\n\nconst ensureDebugDirectory = () => {\n if (debugDirectoryEnsured) return;\n\n const debugDir = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug');\n\n try {\n fs.mkdirSync(debugDir, { recursive: true });\n debugDirectoryEnsured = true;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`Failed to create debug directory ${debugDir}:`, error);\n }\n};\n\nconst generateDebugLogFilename = () => {\n const now = new Date();\n const timestamp = now.toISOString()\n .replace(/[-:]/g, '')\n .replace(/\\./g, '')\n .replace('T', '-')\n .replace('Z', '');\n\n return `${timestamp}-debug.log`;\n};\n\nconst createTransports = (level: string) => {\n const transports: winston.transport[] = [];\n\n // When running as MCP server, NEVER add console transports as they interfere with the protocol\n // All output must go through log capture mechanism instead\n const isMcpServer = process.env.KODRDRIV_MCP_SERVER === 'true';\n\n if (!isMcpServer) {\n // Always add console transport for info level and above (only when NOT in MCP mode)\n if (level === 'info') {\n transports.push(\n new winston.transports.Console({\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ level, message, dryRun }): string => {\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n // For info level messages, don't show the level prefix\n if (level.includes('info')) {\n return `${dryRunPrefix}${String(message)}`;\n }\n // For warn, error, etc., show the level prefix\n return `${level}: ${dryRunPrefix}${String(message)}`;\n })\n )\n })\n );\n } else {\n // For debug/verbose levels, add console transport that shows info and above\n transports.push(\n new winston.transports.Console({\n level: 'info', // Show info, warn, and error on console\n format: winston.format.combine(\n winston.format.colorize(),\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n // For info level messages, use simpler format without timestamp\n if (level.includes('info')) {\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${dryRunPrefix}${String(message)}`;\n }\n\n // Filter out winston internal metadata\n const filteredMeta = Object.keys(meta).reduce((acc, key) => {\n if (!['level', 'message', 'timestamp', 'dryRun', 'service', 'splat', 'Symbol(level)', 'Symbol(message)'].includes(key)) {\n acc[key] = meta[key];\n }\n return acc;\n }, {} as Record<string, any>);\n\n const metaStr = Object.keys(filteredMeta).length ? ` ${JSON.stringify(filteredMeta, null, 2)}` : '';\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n )\n })\n );\n }\n }\n\n // Add file transport for debug levels (debug and silly)\n if (level === 'debug' || level === 'silly') {\n ensureDebugDirectory();\n\n const debugLogPath = path.join(DEFAULT_OUTPUT_DIRECTORY, 'debug', generateDebugLogFilename());\n\n transports.push(\n new winston.transports.File({\n filename: debugLogPath,\n level: 'debug', // Capture debug and above in the file\n format: winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.printf(({ timestamp, level, message, service, ...meta }) => {\n // Filter out winston internal metadata and properly format remaining meta\n const filteredMeta = Object.keys(meta).reduce((acc, key) => {\n // Skip internal winston fields\n if (!['level', 'message', 'timestamp', 'splat', 'Symbol(level)', 'Symbol(message)'].includes(key)) {\n acc[key] = meta[key];\n }\n return acc;\n }, {} as Record<string, any>);\n\n const metaStr = Object.keys(filteredMeta).length\n ? ` ${JSON.stringify(filteredMeta, null, 2)}`\n : '';\n const serviceStr = service ? ` [${service}]` : '';\n return `${timestamp}${serviceStr} ${level}: ${message}${metaStr}`;\n })\n )\n })\n );\n }\n\n return transports;\n};\n\nconst createFormat = (level: string) => {\n const baseFormats = [\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n ];\n\n if (level === 'info') {\n return winston.format.combine(\n ...baseFormats,\n winston.format.printf(({ message, dryRun, ..._meta }): string => {\n // Auto-format dry-run messages\n if (dryRun) {\n return `🔍 DRY RUN: ${message}`;\n }\n return String(message);\n })\n );\n }\n\n return winston.format.combine(\n winston.format.timestamp({ format: DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS }),\n ...baseFormats,\n winston.format.printf(({ timestamp, level, message, dryRun, ...meta }): string => {\n // Filter out winston internal metadata\n const filteredMeta = Object.keys(meta).reduce((acc, key) => {\n if (!['level', 'message', 'timestamp', 'dryRun', 'service', 'splat', 'Symbol(level)', 'Symbol(message)'].includes(key)) {\n acc[key] = meta[key];\n }\n return acc;\n }, {} as Record<string, any>);\n\n const metaStr = Object.keys(filteredMeta).length ? ` ${JSON.stringify(filteredMeta, null, 2)}` : '';\n const dryRunPrefix = dryRun ? '🔍 DRY RUN: ' : '';\n return `${timestamp} ${level}: ${dryRunPrefix}${String(message)}${metaStr}`;\n })\n );\n};\n\n// Create the logger instance once\nconst logger = winston.createLogger({\n level: 'info',\n format: createFormat('info'),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports('info'),\n});\n\nexport const setLogLevel = (level: string) => {\n // Reconfigure the existing logger instead of creating a new one\n logger.configure({\n level,\n format: createFormat(level),\n defaultMeta: { service: PROGRAM_NAME },\n transports: createTransports(level),\n });\n};\n\nexport const getLogger = () => logger;\n\n/**\n * Get a logger that automatically formats messages for dry-run mode\n */\nexport const getDryRunLogger = (isDryRun: boolean) => {\n if (!isDryRun) {\n return logger;\n }\n\n // Return a wrapper that adds dry-run context to all log calls\n return {\n info: (message: string, ...args: any[]) => logger.info(message, { dryRun: true }, ...args),\n warn: (message: string, ...args: any[]) => logger.warn(message, { dryRun: true }, ...args),\n error: (message: string, ...args: any[]) => logger.error(message, { dryRun: true }, ...args),\n debug: (message: string, ...args: any[]) => logger.debug(message, { dryRun: true }, ...args),\n verbose: (message: string, ...args: any[]) => logger.verbose(message, { dryRun: true }, ...args),\n silly: (message: string, ...args: any[]) => logger.silly(message, { dryRun: true }, ...args),\n };\n};\n\n/**\n * Close all logger transports and wait for them to finish writing.\n * This should be called before process exit to ensure all logs are flushed\n * and file handles are properly closed.\n */\nexport const closeLogger = async (): Promise<void> => {\n return new Promise((resolve) => {\n // Close all transports\n logger.close();\n\n // Give transports a moment to finish closing\n // Winston's close() is synchronous but file handles may need a tick to release\n setImmediate(() => {\n resolve();\n });\n });\n};\n"],"names":["debugDirectoryEnsured","ensureDebugDirectory","debugDir","path","join","DEFAULT_OUTPUT_DIRECTORY","fs","mkdirSync","recursive","error","console","generateDebugLogFilename","now","Date","timestamp","toISOString","replace","createTransports","level","transports","isMcpServer","process","env","KODRDRIV_MCP_SERVER","push","winston","Console","format","combine","colorize","printf","message","dryRun","dryRunPrefix","includes","String","meta","filteredMeta","Object","keys","reduce","acc","key","metaStr","length","JSON","stringify","debugLogPath","File","filename","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","errors","stack","splat","service","serviceStr","createFormat","baseFormats","_meta","logger","createLogger","defaultMeta","PROGRAM_NAME","setLogLevel","configure","getLogger","closeLogger","Promise","resolve","close","setImmediate"],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { runApplication } from './application.js';
|
|
3
|
-
import { getLogger } from './logging.js';
|
|
3
|
+
import { closeLogger, getLogger } from './logging.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Main entry point - minimal wrapper around the application logic
|
|
@@ -10,15 +10,18 @@ import { getLogger } from './logging.js';
|
|
|
10
10
|
} catch (error) {
|
|
11
11
|
const logger = getLogger();
|
|
12
12
|
logger.error('MAIN_ERROR_EXIT: Exiting due to error | Error: %s | Stack: %s | Status: terminating', error.message, error.stack);
|
|
13
|
+
await closeLogger();
|
|
13
14
|
process.exit(1);
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
// Properly handle the main function with error handling and explicit process exit
|
|
17
|
-
main().then(()=>{
|
|
18
|
+
main().then(async ()=>{
|
|
19
|
+
await closeLogger();
|
|
18
20
|
process.exit(0);
|
|
19
|
-
}).catch((error)=>{
|
|
21
|
+
}).catch(async (error)=>{
|
|
20
22
|
const logger = getLogger();
|
|
21
23
|
logger.error('MAIN_UNHANDLED_ERROR: Unhandled error in main process | Error: %s | Type: unhandled', error.message || error);
|
|
24
|
+
await closeLogger();
|
|
22
25
|
process.exit(1);
|
|
23
26
|
});
|
|
24
27
|
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../src/main.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { runApplication } from './application';\nimport { getLogger } from './logging';\n\n/**\n * Main entry point - minimal wrapper around the application logic\n */\nasync function main(): Promise<void> {\n try {\n await runApplication();\n } catch (error: any) {\n const logger = getLogger();\n logger.error('MAIN_ERROR_EXIT: Exiting due to error | Error: %s | Stack: %s | Status: terminating', error.message, error.stack);\n process.exit(1);\n }\n}\n\n// Properly handle the main function with error handling and explicit process exit\nmain().then(() => {\n process.exit(0);\n}).catch((error) => {\n const logger = getLogger();\n logger.error('MAIN_UNHANDLED_ERROR: Unhandled error in main process | Error: %s | Type: unhandled', error.message || error);\n process.exit(1);\n});\n"],"names":["main","runApplication","error","logger","getLogger","message","stack","process","exit","then","catch"],"mappings":";;;;AAIA,CAAA,CAAA,CAAA;;AAEC,CAAA,CAAA,CAAA,CACD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAeA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA;IACX,CAAA,CAAA,CAAA,CAAI,CAAA;QACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,cAAAA,CAAAA,CAAAA,CAAAA;AACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAY,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAASC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACfD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOD,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuFA,CAAAA,CAAAA,CAAAA,CAAAA,EAAMG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,CAAA,CAAEH,CAAAA,CAAAA,CAAAA,CAAAA,EAAMI,KAAK,CAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../src/main.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { runApplication } from './application';\nimport { getLogger, closeLogger } from './logging';\n\n/**\n * Main entry point - minimal wrapper around the application logic\n */\nasync function main(): Promise<void> {\n try {\n await runApplication();\n } catch (error: any) {\n const logger = getLogger();\n logger.error('MAIN_ERROR_EXIT: Exiting due to error | Error: %s | Stack: %s | Status: terminating', error.message, error.stack);\n await closeLogger();\n process.exit(1);\n }\n}\n\n// Properly handle the main function with error handling and explicit process exit\nmain().then(async () => {\n await closeLogger();\n process.exit(0);\n}).catch(async (error) => {\n const logger = getLogger();\n logger.error('MAIN_UNHANDLED_ERROR: Unhandled error in main process | Error: %s | Type: unhandled', error.message || error);\n await closeLogger();\n process.exit(1);\n});\n"],"names":["main","runApplication","error","logger","getLogger","message","stack","closeLogger","process","exit","then","catch"],"mappings":"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"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -13915,7 +13915,7 @@ import path2 from "path";
|
|
|
13915
13915
|
// src/constants.ts
|
|
13916
13916
|
import os from "os";
|
|
13917
13917
|
import path from "path";
|
|
13918
|
-
var VERSION = "1.5.
|
|
13918
|
+
var VERSION = "1.5.6 (HEAD/9d2cc4b T:v1.5.6 2026-01-28 22:36:49 -0800) linux x64 v24.13.0";
|
|
13919
13919
|
var PROGRAM_NAME = "kodrdriv";
|
|
13920
13920
|
var DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = "YYYY-MM-DD-HHmmss.SSS";
|
|
13921
13921
|
var DEFAULT_OUTPUT_DIRECTORY = "output/kodrdriv";
|