@vreko/cli 3.0.1
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/LICENSE +201 -0
- package/README.md +45 -0
- package/dist/CeremonyView-LQS7FTMK.js +134 -0
- package/dist/CeremonyView-LQS7FTMK.js.map +1 -0
- package/dist/InitApp-7K5DTYSW.js +1479 -0
- package/dist/InitApp-7K5DTYSW.js.map +1 -0
- package/dist/SkippedTestDetector-PJSKSOZR.js +7 -0
- package/dist/SkippedTestDetector-PJSKSOZR.js.map +1 -0
- package/dist/TuiApp-FX23XQBK.js +8 -0
- package/dist/TuiApp-FX23XQBK.js.map +1 -0
- package/dist/analysis-ABEO6RTN.js +8 -0
- package/dist/analysis-ABEO6RTN.js.map +1 -0
- package/dist/auth-XNBEBNPY.js +7669 -0
- package/dist/auth-XNBEBNPY.js.map +1 -0
- package/dist/ceremony-M7CXVBVA.js +45 -0
- package/dist/ceremony-M7CXVBVA.js.map +1 -0
- package/dist/chunk-A3QSZJPD.js +3147 -0
- package/dist/chunk-A3QSZJPD.js.map +1 -0
- package/dist/chunk-ASGZ5B6C.js +3969 -0
- package/dist/chunk-ASGZ5B6C.js.map +1 -0
- package/dist/chunk-DMXC2JTC.js +58 -0
- package/dist/chunk-DMXC2JTC.js.map +1 -0
- package/dist/chunk-EEBSK2IH.js +161 -0
- package/dist/chunk-EEBSK2IH.js.map +1 -0
- package/dist/chunk-EWOJGXRX.js +22 -0
- package/dist/chunk-EWOJGXRX.js.map +1 -0
- package/dist/chunk-F7GEJLP7.js +2389 -0
- package/dist/chunk-F7GEJLP7.js.map +1 -0
- package/dist/chunk-GOYL3F4T.js +605 -0
- package/dist/chunk-GOYL3F4T.js.map +1 -0
- package/dist/chunk-GRMRYWYS.js +17 -0
- package/dist/chunk-GRMRYWYS.js.map +1 -0
- package/dist/chunk-GSUGROXB.js +1951 -0
- package/dist/chunk-GSUGROXB.js.map +1 -0
- package/dist/chunk-H7773ONB.js +50 -0
- package/dist/chunk-H7773ONB.js.map +1 -0
- package/dist/chunk-HFQHU5LC.js +445 -0
- package/dist/chunk-HFQHU5LC.js.map +1 -0
- package/dist/chunk-IVHUBLJD.js +318 -0
- package/dist/chunk-IVHUBLJD.js.map +1 -0
- package/dist/chunk-KJWKY4L4.js +14 -0
- package/dist/chunk-KJWKY4L4.js.map +1 -0
- package/dist/chunk-MJVY2XUN.js +1793 -0
- package/dist/chunk-MJVY2XUN.js.map +1 -0
- package/dist/chunk-QWZVCJII.js +1797 -0
- package/dist/chunk-QWZVCJII.js.map +1 -0
- package/dist/chunk-VTSNRV3V.js +3237 -0
- package/dist/chunk-VTSNRV3V.js.map +1 -0
- package/dist/chunk-W5B4GTXR.js +1466 -0
- package/dist/chunk-W5B4GTXR.js.map +1 -0
- package/dist/chunk-WZEZLVOW.js +4995 -0
- package/dist/chunk-WZEZLVOW.js.map +1 -0
- package/dist/chunk-YPTTIXKC.js +199 -0
- package/dist/chunk-YPTTIXKC.js.map +1 -0
- package/dist/chunk-Z55UGM6X.js +6360 -0
- package/dist/chunk-Z55UGM6X.js.map +1 -0
- package/dist/chunk-ZIIRQODJ.js +110 -0
- package/dist/chunk-ZIIRQODJ.js.map +1 -0
- package/dist/chunk-ZSUQ4FMB.js +77 -0
- package/dist/chunk-ZSUQ4FMB.js.map +1 -0
- package/dist/client-JMTSZS3V.js +10 -0
- package/dist/client-JMTSZS3V.js.map +1 -0
- package/dist/deprecated-snap.js +19 -0
- package/dist/deprecated-snap.js.map +1 -0
- package/dist/dist-2KWBZFLA.js +14 -0
- package/dist/dist-2KWBZFLA.js.map +1 -0
- package/dist/dist-5ZYKNNU3.js +7 -0
- package/dist/dist-5ZYKNNU3.js.map +1 -0
- package/dist/dist-CP3RFHPI.js +11 -0
- package/dist/dist-CP3RFHPI.js.map +1 -0
- package/dist/gecko-53ITAGG6.js +56 -0
- package/dist/gecko-53ITAGG6.js.map +1 -0
- package/dist/guards-QAFC64NO.js +7 -0
- package/dist/guards-QAFC64NO.js.map +1 -0
- package/dist/index.js +57785 -0
- package/dist/index.js.map +1 -0
- package/dist/init-command-246JIVXM.js +7 -0
- package/dist/init-command-246JIVXM.js.map +1 -0
- package/dist/init-core-KAI7LCXZ.js +12 -0
- package/dist/init-core-KAI7LCXZ.js.map +1 -0
- package/dist/init-scan-RZNYDTUV.js +1919 -0
- package/dist/init-scan-RZNYDTUV.js.map +1 -0
- package/dist/local-service-adapter-6KNN6WQL.js +8 -0
- package/dist/local-service-adapter-6KNN6WQL.js.map +1 -0
- package/dist/secure-credentials-JXWAQLS2.js +306 -0
- package/dist/secure-credentials-JXWAQLS2.js.map +1 -0
- package/dist/tui-TPJPUS2R.js +111 -0
- package/dist/tui-TPJPUS2R.js.map +1 -0
- package/dist/vreko-dir-O3RLG7PI.js +8 -0
- package/dist/vreko-dir-O3RLG7PI.js.map +1 -0
- package/package.json +132 -0
- package/scripts/check-banned-words.ts +152 -0
- package/scripts/hooks/posttooluse-file-notify.sh +108 -0
- package/scripts/hooks/pretooluse-fragile-guard.sh +82 -0
- package/scripts/post-install-notice.js +24 -0
- package/scripts/postinstall.mjs +84 -0
- package/scripts/preuninstall.mjs +34 -0
- package/scripts/verify-jsx-transform.mjs +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../packages/infrastructure/src/logging/logger.ts","../../../packages/infrastructure/src/cache/index.ts","../../../packages/infrastructure/src/files/watcher.ts","../../../packages/infrastructure/src/resiliency/index.ts","../../../packages/infrastructure/src/resiliency/circuit-breaker.ts","../../../packages/infrastructure/src/resiliency/retry.ts","../../../packages/infrastructure/src/resiliency/concurrency.ts"],"names":["br","queue"],"mappings":"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","file":"chunk-GOYL3F4T.js","sourcesContent":["import pino from \"pino\";\n\n/**\n * Check if running in MCP quiet mode (suppress all non-error output for MCP stdio)\n * When MCP_QUIET=1, only fatal errors are logged to avoid corrupting MCP protocol\n */\nconst MCP_QUIET = process.env.MCP_QUIET === \"1\" || process.env.MCP_QUIET === \"true\";\n\n// Copying logic from core logger\nconst isProduction = process.env.NODE_ENV === \"production\";\nconst isTest = process.env.NODE_ENV === \"test\" || process.env.VITEST === \"true\";\nconst isVSCodeExtension = process.env.VSCODE_EXTENSION === \"true\";\n// Next.js detection - pino-pretty worker threads don't work with Next.js bundling\nconst isNextJS =\n\ttypeof process.env.NEXT_RUNTIME !== \"undefined\" || typeof process.env.__NEXT_PRIVATE_ORIGIN !== \"undefined\";\n// Bundled mode detection - pino-pretty worker threads don't work in bundled code\n// This happens when running as MCPB, VSCode extension, or other bundled contexts\nconst isBundled =\n\ttypeof process.env.VREKO_BUNDLED !== \"undefined\" ||\n\t// Check if we're running from a bundled location (dist/server with no source)\n\t(typeof __dirname === \"string\" && !__dirname.includes(\"node_modules\") && !__dirname.includes(\"packages/\"));\n\n// Service name for log prefix (helps with terminal multiplexer clarity)\nconst serviceName = process.env.SERVICE_NAME || process.env.npm_package_name || \"app\";\n\n// Define redaction paths for sensitive data\nconst redactPaths = [\n\t\"user.email\",\n\t\"user.password\",\n\t\"apiKey\",\n\t\"session.token\",\n\t\"req.headers.authorization\",\n\t\"auth.*.password\",\n\t\"config.*.secret\",\n\t\"env.*\",\n\t\"password\",\n\t\"token\",\n\t\"secret\",\n\t\"authorization\",\n\t\"cookie\",\n\t\"*.password\",\n\t\"*.token\",\n\t\"*.apiKey\",\n\t\"*.secret\",\n\t\"*.authorization\",\n\t\"*.cookie\",\n\t\"*.path\",\n\t\"*.file\",\n\t\"*.filePath\",\n];\n\n/**\n * Mixin function to inject OTel trace context into every log line\n * This is a fallback/supplement to PinoInstrumentation\n * Works even if OTel isn't initialized (returns empty strings)\n */\nfunction traceContextMixin(): Record<string, string> {\n\t// Try to get active span from OTel context\n\t// This is safe - if OTel isn't loaded, we just return empty strings\n\ttry {\n\t\t// Dynamic import to avoid hard dependency on OTel\n\t\t// eslint-disable-next-line @typescript-eslint/no-var-requires\n\t\tconst api = require(\"@opentelemetry/api\");\n\t\tconst span = api.trace.getSpan(api.context.active());\n\t\tif (span) {\n\t\t\tconst ctx = span.spanContext();\n\t\t\treturn {\n\t\t\t\ttrace_id: ctx.traceId,\n\t\t\t\tspan_id: ctx.spanId,\n\t\t\t};\n\t\t}\n\t} catch {\n\t\t// OTel not available, skip trace context\n\t}\n\treturn {};\n}\n\n// Use stderr instead of stdout to avoid polluting stdout (critical for MCP)\n// VSCode extensions also typically log to output channels or stderr\nconst pinoLogger = pino(\n\t{\n\t\t// When MCP_QUIET=1, set level to 'silent' to suppress all output\n\t\tlevel: MCP_QUIET ? \"silent\" : process.env.LOG_LEVEL || \"info\",\n\t\tredact: {\n\t\t\tpaths: redactPaths,\n\t\t\tcensor: \"[REDACTED]\",\n\t\t},\n\t\t// Add service name as base context for terminal multiplexer clarity\n\t\tbase: { service: serviceName },\n\t\t// Inject trace context into every log line\n\t\tmixin: traceContextMixin,\n\t\t// Only use transport in non-production AND non-VSCode AND non-Next.js AND non-test environments\n\t\t// pino-pretty uses worker threads which fail in Next.js bundled contexts and vitest\n\t\t// Also disable in bundled mode (MCPB) where worker threads don't work\n\t\t...(isProduction || isTest || isVSCodeExtension || MCP_QUIET || isNextJS || isBundled\n\t\t\t? {}\n\t\t\t: {\n\t\t\t\t\ttransport: {\n\t\t\t\t\t\ttarget: \"pino-pretty\",\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tcolorize: true,\n\t\t\t\t\t\t\ttranslateTime: \"SYS:HH:MM:ss.l\",\n\t\t\t\t\t\t\tignore: \"pid,hostname,service\",\n\t\t\t\t\t\t\t// Show service name in message prefix for terminal clarity\n\t\t\t\t\t\t\tmessageFormat: \"[{service}] {msg}\",\n\t\t\t\t\t\t\t// Include trace context in output - this is your \"local Grafana\"\n\t\t\t\t\t\t\t// trace_id will appear inline when OTel is active\n\t\t\t\t\t\t\tinclude: \"level,time,trace_id,span_id\",\n\t\t\t\t\t\t\t// Single line for better terminal readability\n\t\t\t\t\t\t\tsingleLine: true,\n\t\t\t\t\t\t\t// Custom colors for level differentiation\n\t\t\t\t\t\t\tlevelColors: {\n\t\t\t\t\t\t\t\ttrace: \"gray\",\n\t\t\t\t\t\t\t\tdebug: \"cyan\",\n\t\t\t\t\t\t\t\tinfo: \"green\",\n\t\t\t\t\t\t\t\twarn: \"yellow\",\n\t\t\t\t\t\t\t\terror: \"red\",\n\t\t\t\t\t\t\t\tfatal: \"bgRed\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t},\n\tpino.destination({ fd: 2 }), // fd 2 = stderr\n);\n\n// Export strict interface to enforce consistent usage\n// Supports both patterns: (\"message\", { meta }) and ({ meta }, \"message\")\nexport const logger = {\n\tdebug: (messageOrObj: string | Record<string, unknown>, metaOrMsg?: Record<string, unknown> | string): void => {\n\t\tif (typeof messageOrObj === \"string\" && (!metaOrMsg || typeof metaOrMsg === \"object\")) {\n\t\t\t// Pattern: (\"message\") or (\"message\", { meta })\n\t\t\tif (metaOrMsg) {\n\t\t\t\tpinoLogger.debug(metaOrMsg, messageOrObj);\n\t\t\t} else {\n\t\t\t\tpinoLogger.debug(messageOrObj);\n\t\t\t}\n\t\t} else if (typeof messageOrObj === \"object\" && typeof metaOrMsg === \"string\") {\n\t\t\t// Pattern: ({ meta }, \"message\") - Pino native\n\t\t\tpinoLogger.debug(messageOrObj, metaOrMsg);\n\t\t}\n\t},\n\tinfo: (messageOrObj: string | Record<string, unknown>, metaOrMsg?: Record<string, unknown> | string): void => {\n\t\tif (typeof messageOrObj === \"string\" && (!metaOrMsg || typeof metaOrMsg === \"object\")) {\n\t\t\t// Pattern: (\"message\") or (\"message\", { meta })\n\t\t\tif (metaOrMsg) {\n\t\t\t\tpinoLogger.info(metaOrMsg, messageOrObj);\n\t\t\t} else {\n\t\t\t\tpinoLogger.info(messageOrObj);\n\t\t\t}\n\t\t} else if (typeof messageOrObj === \"object\" && typeof metaOrMsg === \"string\") {\n\t\t\t// Pattern: ({ meta }, \"message\") - Pino native\n\t\t\tpinoLogger.info(messageOrObj, metaOrMsg);\n\t\t}\n\t},\n\twarn: (messageOrObj: string | Record<string, unknown>, metaOrMsg?: Record<string, unknown> | string): void => {\n\t\tif (typeof messageOrObj === \"string\" && (!metaOrMsg || typeof metaOrMsg === \"object\")) {\n\t\t\t// Pattern: (\"message\") or (\"message\", { meta })\n\t\t\tif (metaOrMsg) {\n\t\t\t\tpinoLogger.warn(metaOrMsg, messageOrObj);\n\t\t\t} else {\n\t\t\t\tpinoLogger.warn(messageOrObj);\n\t\t\t}\n\t\t} else if (typeof messageOrObj === \"object\" && typeof metaOrMsg === \"string\") {\n\t\t\t// Pattern: ({ meta }, \"message\") - Pino native\n\t\t\tpinoLogger.warn(messageOrObj, metaOrMsg);\n\t\t}\n\t},\n\terror: (\n\t\tmessageOrObj: string | Record<string, unknown> | Error,\n\t\tmetaOrMsg?: Record<string, unknown> | Error | string,\n\t): void => {\n\t\tif (typeof messageOrObj === \"string\" && (!metaOrMsg || typeof metaOrMsg !== \"string\")) {\n\t\t\t// Pattern: (\"message\") or (\"message\", { meta }) or (\"message\", error)\n\t\t\tif (metaOrMsg) {\n\t\t\t\tpinoLogger.error(metaOrMsg, messageOrObj);\n\t\t\t} else {\n\t\t\t\tpinoLogger.error(messageOrObj);\n\t\t\t}\n\t\t} else if (typeof messageOrObj === \"object\" && typeof metaOrMsg === \"string\") {\n\t\t\t// Pattern: ({ meta }, \"message\") or (error, \"message\") - Pino native\n\t\t\tpinoLogger.error(messageOrObj, metaOrMsg);\n\t\t}\n\t},\n\t// Child method for creating scoped loggers\n\tchild: (bindings: Record<string, unknown>) => {\n\t\tconst childLogger = pinoLogger.child(bindings);\n\t\treturn {\n\t\t\tdebug: (\n\t\t\t\tmessageOrObj: string | Record<string, unknown>,\n\t\t\t\tmetaOrMsg?: Record<string, unknown> | string,\n\t\t\t): void => {\n\t\t\t\tif (typeof messageOrObj === \"string\" && (!metaOrMsg || typeof metaOrMsg === \"object\")) {\n\t\t\t\t\tif (metaOrMsg) {\n\t\t\t\t\t\tchildLogger.debug(metaOrMsg, messageOrObj);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchildLogger.debug(messageOrObj);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof messageOrObj === \"object\" && typeof metaOrMsg === \"string\") {\n\t\t\t\t\tchildLogger.debug(messageOrObj, metaOrMsg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tinfo: (\n\t\t\t\tmessageOrObj: string | Record<string, unknown>,\n\t\t\t\tmetaOrMsg?: Record<string, unknown> | string,\n\t\t\t): void => {\n\t\t\t\tif (typeof messageOrObj === \"string\" && (!metaOrMsg || typeof metaOrMsg === \"object\")) {\n\t\t\t\t\tif (metaOrMsg) {\n\t\t\t\t\t\tchildLogger.info(metaOrMsg, messageOrObj);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchildLogger.info(messageOrObj);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof messageOrObj === \"object\" && typeof metaOrMsg === \"string\") {\n\t\t\t\t\tchildLogger.info(messageOrObj, metaOrMsg);\n\t\t\t\t}\n\t\t\t},\n\t\t\twarn: (\n\t\t\t\tmessageOrObj: string | Record<string, unknown>,\n\t\t\t\tmetaOrMsg?: Record<string, unknown> | string,\n\t\t\t): void => {\n\t\t\t\tif (typeof messageOrObj === \"string\" && (!metaOrMsg || typeof metaOrMsg === \"object\")) {\n\t\t\t\t\tif (metaOrMsg) {\n\t\t\t\t\t\tchildLogger.warn(metaOrMsg, messageOrObj);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchildLogger.warn(messageOrObj);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof messageOrObj === \"object\" && typeof metaOrMsg === \"string\") {\n\t\t\t\t\tchildLogger.warn(messageOrObj, metaOrMsg);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror: (\n\t\t\t\tmessageOrObj: string | Record<string, unknown> | Error,\n\t\t\t\tmetaOrMsg?: Record<string, unknown> | Error | string,\n\t\t\t): void => {\n\t\t\t\tif (typeof messageOrObj === \"string\" && (!metaOrMsg || typeof metaOrMsg !== \"string\")) {\n\t\t\t\t\tif (metaOrMsg) {\n\t\t\t\t\t\tchildLogger.error(metaOrMsg, messageOrObj);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchildLogger.error(messageOrObj);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof messageOrObj === \"object\" && typeof metaOrMsg === \"string\") {\n\t\t\t\t\tchildLogger.error(messageOrObj, metaOrMsg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tlevel: childLogger.level,\n\t\t\tchild: (nestedBindings: Record<string, unknown>) => logger.child({ ...bindings, ...nestedBindings }),\n\t\t};\n\t},\n};\n\n// Re-export the logger interface and types from contracts\nexport type { Logger } from \"@vreko/contracts\";\nexport { LogLevel } from \"@vreko/contracts\";\n","import { LRUCache } from \"lru-cache\";\nimport { logger } from \"../logging/logger\";\n\ntype CacheValue = string | number | boolean | symbol | bigint | object;\n\n// Configuration with safe defaults\nexport const cacheDefaults = {\n\tmcp: {\n\t\tcache: {\n\t\t\tmaxEntries: 500,\n\t\t\tttlMs: 60 * 60 * 1000, // 1 hour default\n\t\t},\n\t},\n\tdashboard: {\n\t\tcache: {\n\t\t\tmaxEntries: 1000,\n\t\t\tdefaultTtlMs: 5 * 60 * 1000, // 5 minutes default for dashboard data\n\t\t},\n\t},\n} as const;\n\nexport const docCache = new LRUCache<string, CacheValue>({\n\tmax: cacheDefaults.mcp.cache.maxEntries,\n\tttl: cacheDefaults.mcp.cache.ttlMs,\n\tallowStale: true,\n\tupdateAgeOnGet: true,\n});\n\n/**\n * Clear all doc cache entries.\n * Use in test teardown to prevent state leakage across tests.\n */\nexport function clearDocCache(): void {\n\tdocCache.clear();\n}\n\nexport const dashboardCache = new LRUCache<string, CacheValue>({\n\tmax: cacheDefaults.dashboard.cache.maxEntries,\n\tttl: cacheDefaults.dashboard.cache.defaultTtlMs,\n\tallowStale: true,\n\tupdateAgeOnGet: true,\n});\n\n/**\n * Enhanced cache function with configurable TTL\n * @param key - Cache key\n * @param fetcher - Function to fetch data if not in cache\n * @param ttlMs - Optional TTL in milliseconds (overrides default)\n */\nexport async function getLibraryDocsCached<T extends CacheValue>(\n\tkey: string,\n\tfetcher: () => Promise<T>,\n\tttlMs?: number,\n): Promise<T> {\n\t// Check cache first\n\tconst hit = docCache.get(key);\n\tif (hit) {\n\t\tlogger.debug(`Cache hit for key: ${key}`);\n\t\treturn hit as T;\n\t}\n\n\t// Fetch and cache result\n\ttry {\n\t\tlogger.debug(`Cache miss for key: ${key}, fetching data`);\n\t\tconst value = await fetcher();\n\n\t\t// Set with custom TTL if provided\n\t\tif (ttlMs) {\n\t\t\tdocCache.set(key, value, { ttl: ttlMs });\n\t\t} else {\n\t\t\tdocCache.set(key, value);\n\t\t}\n\n\t\treturn value;\n\t} catch (error: unknown) {\n\t\tlogger.error({ error }, `Failed to fetch data for cache key: ${key}`);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Cache with hinting support for tools that accept cache parameters\n */\nexport async function getLibraryDocsCachedWithHint<T extends CacheValue>(\n\tcacheKey: string | undefined,\n\tttlMs: number | undefined,\n\tfetcher: () => Promise<T>,\n): Promise<T> {\n\t// If cache key is provided, use caching\n\tif (cacheKey) {\n\t\treturn await getLibraryDocsCached<T>(cacheKey, fetcher, ttlMs);\n\t}\n\n\t// Otherwise, fetch directly\n\treturn await fetcher();\n}\n\n/**\n * Dashboard cache function with configurable TTL\n * @param key - Cache key (should include userId for isolation)\n * @param fetcher - Function to fetch data if not in cache\n * @param ttlMs - Optional TTL in milliseconds (default: 5 minutes)\n */\nexport async function getDashboardCached<T extends CacheValue>(\n\tkey: string,\n\tfetcher: () => Promise<T>,\n\tttlMs?: number,\n): Promise<T> {\n\t// Check cache first\n\tconst hit = dashboardCache.get(key);\n\tif (hit) {\n\t\tlogger.debug(`Dashboard cache hit for key: ${key}`);\n\t\treturn hit as T;\n\t}\n\n\t// Fetch and cache result\n\ttry {\n\t\tlogger.debug(`Dashboard cache miss for key: ${key}, fetching data`);\n\t\tconst value = await fetcher();\n\n\t\t// Set with custom TTL if provided, otherwise use default\n\t\tdashboardCache.set(key, value, { ttl: ttlMs ?? cacheDefaults.dashboard.cache.defaultTtlMs });\n\n\t\treturn value;\n\t} catch (error: unknown) {\n\t\tlogger.error({ error }, `Failed to fetch dashboard data for cache key: ${key}`);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Invalidate dashboard cache entries by pattern\n * Useful when data changes and cache needs refreshing\n * @param pattern - String pattern to match keys (simple includes check)\n */\nexport function invalidateDashboardCache(pattern: string): void {\n\tconst keysToDelete: string[] = [];\n\n\tfor (const key of dashboardCache.keys()) {\n\t\tif (key.includes(pattern)) {\n\t\t\tkeysToDelete.push(key);\n\t\t}\n\t}\n\n\tfor (const key of keysToDelete) {\n\t\tdashboardCache.delete(key);\n\t}\n\n\tlogger.info(`Invalidated ${keysToDelete.length} dashboard cache entries matching pattern: ${pattern}`);\n}\n","import os from \"node:os\";\nimport chokidar from \"chokidar\";\n\n// Using hardcoded values for now to avoid import issues\nconst watcherDefaults = {\n\twatcher: {\n\t\tdebounceMs: 120,\n\t\tawaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },\n\t\tignored: [\"**/{node_modules,.git,.vscode,dist,.next,.nuxt,coverage}/**\"],\n\t},\n} as const;\n\nexport function makeWatcher(root: string) {\n\tconst _isMac = os.platform() === \"darwin\";\n\n\treturn chokidar.watch(root, {\n\t\tignoreInitial: true,\n\t\tignored: [...watcherDefaults.watcher.ignored],\n\t\tawaitWriteFinish: watcherDefaults.watcher.awaitWriteFinish,\n\t\tignorePermissionErrors: true,\n\t\tdepth: 10,\n\t});\n}\n","export * from \"./circuit-breaker\";\nexport * from \"./concurrency\";\nexport * from \"./retry\";\n","import CircuitBreaker from \"opossum\";\nimport { logger } from \"../logging/logger\";\n\n/**\n * Sanitize error messages to remove sensitive data before logging\n *\n * Redacts common patterns that may contain credentials or sensitive info:\n * - API keys, tokens, passwords\n * - Bearer tokens in headers\n * - Connection strings\n */\nfunction sanitizeError(error: unknown): string {\n\tconst message = error instanceof Error ? error.message : String(error);\n\treturn message\n\t\t.replace(/api[_-]?key[=:]\\s*[\"']?\\S+[\"']?/gi, \"api_key=[REDACTED]\")\n\t\t.replace(/token[=:]\\s*[\"']?\\S+[\"']?/gi, \"token=[REDACTED]\")\n\t\t.replace(/password[=:]\\s*[\"']?\\S+[\"']?/gi, \"password=[REDACTED]\")\n\t\t.replace(/bearer\\s+\\S+/gi, \"Bearer [REDACTED]\")\n\t\t.replace(/authorization[=:]\\s*[\"']?\\S+[\"']?/gi, \"authorization=[REDACTED]\")\n\t\t.replace(/secret[=:]\\s*[\"']?\\S+[\"']?/gi, \"secret=[REDACTED]\")\n\t\t.replace(/credential[s]?[=:]\\s*[\"']?\\S+[\"']?/gi, \"credentials=[REDACTED]\");\n}\n\n// Default configuration for resilience patterns\nexport const resilienceDefaults = {\n\tmcp: {\n\t\ttimeoutMs: 5000,\n\t\tmaxConcurrent: 4,\n\t\tretry: { maxAttempts: 2, baseDelayMs: 250, maxDelayMs: 1500, jitter: true },\n\t\tcircuit: {\n\t\t\tenabled: true,\n\t\t\terrorThresholdPercentage: 50,\n\t\t\tvolumeThreshold: 10,\n\t\t\ttimeoutMs: 5000,\n\t\t\tresetMs: 30000,\n\t\t\trollingCountMs: 60000,\n\t\t\trollingCountBuckets: 6,\n\t\t},\n\t\tbatch: {\n\t\t\tsize: 5,\n\t\t\tmaxWaitMs: 150,\n\t\t},\n\t},\n} as const;\n\ntype ToolFn<I, O> = (input: I) => Promise<O>;\n\ninterface BreakerConfig {\n\tenabled?: boolean;\n\terrorThresholdPercentage: number;\n\tvolumeThreshold: number;\n\ttimeoutMs: number;\n\tresetMs: number;\n\trollingCountMs: number;\n\trollingCountBuckets: number;\n}\n\n// Store circuit breakers by tool name - use any[] to avoid covariant cast on retrieval\n// biome-ignore lint/suspicious/noExplicitAny: heterogeneous cache keyed by tool name; cast at retrieval site\nconst circuitBreakers = new Map<string, CircuitBreaker<any[], any>>();\n\nexport function withBreaker<I, O>(\n\ttoolName: string,\n\tfn: ToolFn<I, O>,\n\tcfg: BreakerConfig = resilienceDefaults.mcp.circuit,\n) {\n\t// Get or create circuit breaker for this tool\n\tif (!circuitBreakers.has(toolName)) {\n\t\tconst br = new CircuitBreaker<[I], O>(async (input: I) => fn(input), {\n\t\t\ttimeout: cfg.timeoutMs,\n\t\t\terrorThresholdPercentage: cfg.errorThresholdPercentage,\n\t\t\tresetTimeout: cfg.resetMs,\n\t\t\trollingCountTimeout: cfg.rollingCountMs,\n\t\t\trollingCountBuckets: cfg.rollingCountBuckets,\n\t\t\tvolumeThreshold: cfg.volumeThreshold,\n\t\t});\n\n\t\t// Circuit state change events with stats\n\t\tbr.on(\"open\", () => {\n\t\t\tlogger.warn(`Circuit breaker opened for tool: ${toolName}`, {\n\t\t\t\ttool: toolName,\n\t\t\t\tstate: \"open\",\n\t\t\t\tstats: br.stats,\n\t\t\t});\n\t\t});\n\n\t\tbr.on(\"halfOpen\", () => {\n\t\t\tlogger.warn(`Circuit breaker half-open for tool: ${toolName}`, {\n\t\t\t\ttool: toolName,\n\t\t\t\tstate: \"half-open\",\n\t\t\t\tstats: br.stats,\n\t\t\t});\n\t\t});\n\n\t\tbr.on(\"close\", () => {\n\t\t\tlogger.info(`Circuit breaker closed for tool: ${toolName}`, {\n\t\t\t\ttool: toolName,\n\t\t\t\tstate: \"closed\",\n\t\t\t\tstats: br.stats,\n\t\t\t});\n\t\t});\n\n\t\t// Success/failure telemetry events\n\t\tbr.on(\"success\", () => {\n\t\t\tlogger.debug(`Circuit breaker success for tool: ${toolName}`, {\n\t\t\t\ttool: toolName,\n\t\t\t\tevent: \"success\",\n\t\t\t\tsuccesses: br.stats.successes,\n\t\t\t\tfailures: br.stats.failures,\n\t\t\t});\n\t\t});\n\n\t\tbr.on(\"failure\", (error) => {\n\t\t\tlogger.warn(`Circuit breaker failure for tool: ${toolName}`, {\n\t\t\t\ttool: toolName,\n\t\t\t\tevent: \"failure\",\n\t\t\t\terror: sanitizeError(error),\n\t\t\t\tsuccesses: br.stats.successes,\n\t\t\t\tfailures: br.stats.failures,\n\t\t\t});\n\t\t});\n\n\t\t// Additional monitoring events\n\t\tbr.on(\"timeout\", () => {\n\t\t\tlogger.warn(`Circuit breaker timeout for tool: ${toolName}`, {\n\t\t\t\ttool: toolName,\n\t\t\t\tevent: \"timeout\",\n\t\t\t\ttimeoutMs: cfg.timeoutMs,\n\t\t\t});\n\t\t});\n\n\t\tbr.on(\"reject\", () => {\n\t\t\tlogger.warn(`Circuit breaker rejected call for tool: ${toolName}`, {\n\t\t\t\ttool: toolName,\n\t\t\t\tevent: \"reject\",\n\t\t\t\tstate: br.opened ? \"open\" : br.halfOpen ? \"half-open\" : \"closed\",\n\t\t\t});\n\t\t});\n\n\t\tcircuitBreakers.set(toolName, br);\n\t}\n\n\tconst br = circuitBreakers.get(toolName) as CircuitBreaker<[I], O> | undefined;\n\tif (!br) {\n\t\tthrow new Error(`Circuit breaker not found for tool: ${toolName}`);\n\t}\n\treturn (input: I) => br.fire(input) as Promise<O>;\n}\n\nexport function getCircuitBreakerState(toolName: string) {\n\tconst br = circuitBreakers.get(toolName);\n\tif (!br) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tisOpen: br.opened,\n\t\tisHalfOpen: br.halfOpen,\n\t\tisClosed: br.closed,\n\t};\n}\n\n/**\n * Clear all circuit breakers.\n * Use in test teardown to prevent state leakage across tests.\n */\nexport function clearCircuitBreakers(): void {\n\tcircuitBreakers.clear();\n}\n","/**\n * Retry utility with exponential backoff\n *\n * Wraps p-retry for consistent retry behavior across the codebase.\n * Provides a stable interface for concurrency.ts and other consumers.\n *\n * @module resiliency/retry\n */\n\nimport pRetry, { AbortError } from \"p-retry\";\n\nexport { AbortError };\n\nexport interface RetryOptions {\n\t/** Maximum number of retry attempts (not including initial attempt) */\n\tmaxAttempts: number;\n\t/** Base delay in milliseconds between retries */\n\tbaseDelayMs: number;\n\t/** Maximum delay cap in milliseconds (default: 30000) */\n\tmaxDelayMs?: number;\n\t/** Add random jitter to prevent thundering herd (default: false) */\n\tjitter?: boolean;\n\t/** Callback invoked before each retry attempt */\n\tonRetry?: (error: Error, attempt: number) => void;\n\t/** Predicate to determine if an error should trigger a retry */\n\tshouldRetry?: (error: Error) => boolean;\n}\n\n/**\n * Preset retry configurations for common scenarios\n */\nexport const RetryPresets = {\n\t/** Fast retries for network requests (max 5s delay) */\n\tnetwork: {\n\t\tmaxAttempts: 3,\n\t\tbaseDelayMs: 1000,\n\t\tmaxDelayMs: 5000,\n\t\tjitter: true,\n\t} as RetryOptions,\n\n\t/** Medium retries for API calls (max 30s delay) */\n\tapi: {\n\t\tmaxAttempts: 5,\n\t\tbaseDelayMs: 2000,\n\t\tmaxDelayMs: 30000,\n\t\tjitter: true,\n\t} as RetryOptions,\n\n\t/** Aggressive retries for critical operations (max 1min delay) */\n\tcritical: {\n\t\tmaxAttempts: 10,\n\t\tbaseDelayMs: 1000,\n\t\tmaxDelayMs: 60000,\n\t\tjitter: true,\n\t} as RetryOptions,\n\n\t/** Quick retries for fast operations (max 2s delay) */\n\tfast: {\n\t\tmaxAttempts: 3,\n\t\tbaseDelayMs: 100,\n\t\tmaxDelayMs: 2000,\n\t\tjitter: false,\n\t} as RetryOptions,\n} as const;\n\n/**\n * Execute an async operation with retry logic and exponential backoff\n *\n * Uses p-retry under the hood for battle-tested retry behavior.\n *\n * @param operation - Async function to execute\n * @param options - Retry configuration options\n * @returns Result of the operation\n * @throws Last error if all retry attempts fail\n *\n * @example\n * ```typescript\n * // Basic usage with preset\n * const result = await withRetry(\n * async () => fetch('https://api.example.com/data'),\n * RetryPresets.network\n * );\n *\n * // With custom options and retry callback\n * const result = await withRetry(\n * async () => processData(),\n * {\n * maxAttempts: 5,\n * baseDelayMs: 100,\n * jitter: true,\n * onRetry: (error, attempt) => {\n * logger.warn(`Retry attempt ${attempt}`, { error });\n * }\n * }\n * );\n * ```\n */\nexport async function withRetry<T>(operation: () => Promise<T>, options: RetryOptions): Promise<T> {\n\tconst { maxAttempts, baseDelayMs, maxDelayMs = 30000, jitter = false, onRetry, shouldRetry } = options;\n\n\treturn pRetry(operation, {\n\t\tretries: maxAttempts,\n\t\tminTimeout: baseDelayMs,\n\t\tmaxTimeout: maxDelayMs,\n\t\trandomize: jitter,\n\t\tonFailedAttempt: (error) => {\n\t\t\t// Check if we should retry this error\n\t\t\tif (shouldRetry && !shouldRetry(error)) {\n\t\t\t\tthrow error; // Don't retry, rethrow immediately\n\t\t\t}\n\n\t\t\tif (onRetry) {\n\t\t\t\tonRetry(error, error.attemptNumber);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Calculate exponential backoff delay with optional jitter\n *\n * Formula: min(baseMs * 2^(attempt - 1), maxMs) [+ jitter]\n *\n * @param attempt - Current attempt number (1-based)\n * @param baseMs - Base delay in milliseconds\n * @param maxMs - Maximum delay cap\n * @param jitter - Whether to add random jitter (0-100% of calculated delay)\n * @returns Delay in milliseconds\n */\nexport function calculateBackoff(attempt: number, baseMs: number, maxMs: number, jitter: boolean): number {\n\t// Exponential backoff: baseMs * 2^(attempt - 1)\n\tconst exponential = baseMs * 2 ** (attempt - 1);\n\n\t// Cap at maximum delay\n\tconst capped = Math.min(exponential, maxMs);\n\n\t// Add jitter if enabled (random 0-100% of delay)\n\tif (jitter) {\n\t\tconst jitterAmount = Math.random() * capped;\n\t\treturn capped + jitterAmount;\n\t}\n\n\treturn capped;\n}\n","import PQueue from \"p-queue\";\nimport { logger } from \"../logging/logger\";\nimport { resilienceDefaults, withBreaker } from \"./circuit-breaker\";\nimport { withRetry } from \"./retry\";\n\nconst queue = new PQueue({ concurrency: resilienceDefaults.mcp.maxConcurrent });\n\n// Batch queue for homogeneous requests\ntype BatchItem<I, O> = {\n\tinput: I;\n\tresolve: (value: O) => void;\n\treject: (reason: unknown) => void;\n};\n\nconst batchQueues = new Map<string, BatchItem<unknown, unknown>[]>();\n\nexport const callTool = <I, O>(name: string, raw: (i: I) => Promise<O>) => {\n\tconst wrapped = withBreaker(name, raw);\n\treturn (input: I) =>\n\t\tqueue.add(() =>\n\t\t\twithRetry(() => wrapped(input), {\n\t\t\t\tmaxAttempts: resilienceDefaults.mcp.retry.maxAttempts,\n\t\t\t\tbaseDelayMs: resilienceDefaults.mcp.retry.baseDelayMs,\n\t\t\t\tmaxDelayMs: resilienceDefaults.mcp.retry.maxDelayMs,\n\t\t\t\tjitter: resilienceDefaults.mcp.retry.jitter,\n\t\t\t\tonRetry: (e: Error, n: number) =>\n\t\t\t\t\tlogger.warn({ error: e }, `Retrying tool ${name} attempt ${n}: ${e.message}`),\n\t\t\t}),\n\t\t) as Promise<O>;\n};\n\n/**\n * Batch homogeneous requests\n * @param batchKey - Key to identify the batch type\n * @param input - Input for this request\n * @param processor - Function to process the batch\n */\nexport async function batchCall<I, O>(\n\tbatchKey: string,\n\tinput: I,\n\tprocessor: (inputs: I[]) => Promise<O[]>,\n): Promise<O> {\n\t// Get or create batch queue\n\tif (!batchQueues.has(batchKey)) {\n\t\tbatchQueues.set(batchKey, []);\n\t}\n\n\tconst queue = batchQueues.get(batchKey);\n\tif (!queue) {\n\t\tthrow new Error(`Batch queue not found for key: ${batchKey}`);\n\t}\n\n\t// Create promise for this request\n\treturn new Promise<O>((resolve, reject) => {\n\t\t// Add this request to the queue\n\t\tqueue.push({ input, resolve, reject } as BatchItem<unknown, unknown>);\n\n\t\t// If we've reached batch size, process immediately\n\t\tif (queue.length >= resilienceDefaults.mcp.batch.size) {\n\t\t\tprocessBatch(batchKey, processor);\n\t\t\treturn;\n\t\t}\n\n\t\t// Otherwise, set a timer to process the batch\n\t\tsetTimeout(() => {\n\t\t\tconst queue = batchQueues.get(batchKey);\n\t\t\tif (queue && queue.length > 0) {\n\t\t\t\tprocessBatch(batchKey, processor);\n\t\t\t}\n\t\t}, resilienceDefaults.mcp.batch.maxWaitMs);\n\t});\n}\n\n/**\n * Process a batch of requests\n */\nasync function processBatch<I, O>(batchKey: string, processor: (inputs: I[]) => Promise<O[]>): Promise<void> {\n\tconst queue = batchQueues.get(batchKey);\n\tif (!queue || queue.length === 0) {\n\t\treturn;\n\t}\n\t// Clear the queue and process\n\tconst batch = queue.splice(0, resilienceDefaults.mcp.batch.size) as BatchItem<I, O>[];\n\tconst inputs = batch.map((item) => item.input);\n\n\ttry {\n\t\tlogger.debug(`Processing batch of ${inputs.length} requests for ${batchKey}`);\n\t\tconst results = await processor(inputs);\n\n\t\t// Resolve each promise with its corresponding result\n\t\tbatch.forEach((item, index) => {\n\t\t\tif (index < results.length) {\n\t\t\t\titem.resolve(results[index]);\n\t\t\t} else {\n\t\t\t\titem.reject(new Error(`No result for batch item ${index}`));\n\t\t\t}\n\t\t});\n\t} catch (error: unknown) {\n\t\t// Reject all promises in the batch\n\t\tfor (const item of batch) {\n\t\t\titem.reject(error);\n\t\t}\n\t\tlogger.error({ error }, `Batch processing failed for ${batchKey}: ${(error as Error).message}`);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
process.env.VREKO_CLI='true';process.env.NODE_NO_WARNINGS='1';
|
|
3
|
+
|
|
4
|
+
// src/cli-state.ts
|
|
5
|
+
var cliState = {
|
|
6
|
+
verbose: false,
|
|
7
|
+
quiet: false,
|
|
8
|
+
debug: false,
|
|
9
|
+
noColor: false,
|
|
10
|
+
json: false,
|
|
11
|
+
yes: false,
|
|
12
|
+
renderMode: "plain"
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { cliState };
|
|
16
|
+
//# sourceMappingURL=chunk-GRMRYWYS.js.map
|
|
17
|
+
//# sourceMappingURL=chunk-GRMRYWYS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli-state.ts"],"names":["cliState","verbose","quiet","debug","noColor","json","yes","renderMode"],"mappings":";;;;AAOO,IAAMA,QAAAA,GAAW;EACvBC,OAAAA,EAAS,KAAA;EACTC,KAAAA,EAAO,KAAA;EACPC,KAAAA,EAAO,KAAA;EACPC,OAAAA,EAAS,KAAA;EACTC,IAAAA,EAAM,KAAA;EACNC,GAAAA,EAAK,KAAA;EACLC,UAAAA,EAAY;AACb","file":"chunk-GRMRYWYS.js","sourcesContent":["/**\n * Global CLI state - mutable flags populated by the Commander preAction hook.\n * Extracted into its own module so ui/errors.ts can read cliState.json\n * without creating a circular dependency with index.ts.\n */\nimport type { RenderMode } from \"./ui/guards.js\";\n\nexport const cliState = {\n\tverbose: false,\n\tquiet: false,\n\tdebug: false,\n\tnoColor: false,\n\tjson: false, // LLM-ready structured output\n\tyes: false, // skip confirmation prompts (CI/automation)\n\trenderMode: \"plain\" as RenderMode, // set in Commander preAction hook; safe default before hook fires\n};\n"]}
|