@xopcai/xopc 0.0.92 → 0.0.94

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.
Files changed (194) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/agents-OqhbJkMf.js +222 -0
  4. package/dist/gateway/static/root/assets/apps-page-OHXW9XP8.js +1 -0
  5. package/dist/gateway/static/root/assets/channels-settings-4N2R-jof.js +1 -0
  6. package/dist/gateway/static/root/assets/{channels-status-swr-XzddfJW2.js → channels-status-swr-Bv6f9kDq.js} +1 -1
  7. package/dist/gateway/static/root/assets/{cron-api--I8LJ44S.js → cron-api-BtaQaHJq.js} +1 -1
  8. package/dist/gateway/static/root/assets/cron-page-Dah32HJK.js +1 -0
  9. package/dist/gateway/static/root/assets/{dist-CYgHMQO0.js → dist-BJfD9Qvs.js} +1 -1
  10. package/dist/gateway/static/root/assets/{extension-debug-page-6cRP0nA9.js → extension-debug-page-DnYuMzmH.js} +1 -1
  11. package/dist/gateway/static/root/assets/{extension-page-DpwIkspI.js → extension-page-CJfc-6XV.js} +1 -1
  12. package/dist/gateway/static/root/assets/{extension-settings-page-DYbnQUxH.js → extension-settings-page-BxdfYQMG.js} +1 -1
  13. package/dist/gateway/static/root/assets/{fetch-DTN0w7rV.js → fetch-B0aeeY0q.js} +1 -1
  14. package/dist/gateway/static/root/assets/{field-primitives-CslW6HwD.js → field-primitives-DOLHwowi.js} +1 -1
  15. package/dist/gateway/static/root/assets/{heartbeat-config-api-2UiKevxG.js → heartbeat-config-api-Bj2INAf5.js} +1 -1
  16. package/dist/gateway/static/root/assets/index-Bj_l8QDp.css +1 -0
  17. package/dist/gateway/static/root/assets/{index-DnevRVa6.js → index-DuQ1XPoA.js} +99 -98
  18. package/dist/gateway/static/root/assets/logs-page-AsOgLNJE.js +2 -0
  19. package/dist/gateway/static/root/assets/{note-detail-page-DvW2qg4i.js → note-detail-page-24J4mVP-.js} +53 -53
  20. package/dist/gateway/static/root/assets/{note-time-BEiibLJv.js → note-time-JBszYV3s.js} +1 -1
  21. package/dist/gateway/static/root/assets/notes-page-BApAirFB.js +1 -0
  22. package/dist/gateway/static/root/assets/sessions-page-DX9huWsA.js +1 -0
  23. package/dist/gateway/static/root/assets/{settings-advanced-gate-BctKqHcf.js → settings-advanced-gate-DWvhsTuz.js} +1 -1
  24. package/dist/gateway/static/root/assets/{settings-form-section-QJh5ruel.js → settings-form-section-CxMjaMiy.js} +1 -1
  25. package/dist/gateway/static/root/assets/settings-page-4VmUTzQs.js +3 -0
  26. package/dist/gateway/static/root/assets/{share-preview-page-DBsvvbmD.js → share-preview-page-IX0TJvRd.js} +1 -1
  27. package/dist/gateway/static/root/assets/skills-page-CGKGKfwe.js +2 -0
  28. package/dist/gateway/static/root/assets/{theme-store-ht5iswWS.js → theme-store-Cg_SuBw0.js} +1 -1
  29. package/dist/gateway/static/root/assets/url-BHHmdJYc.js +3 -0
  30. package/dist/gateway/static/root/assets/{utils-DhPv9xoB.js → utils-BmlcxR2j.js} +1 -1
  31. package/dist/gateway/static/root/assets/voice-api-key-field-DaGm2N4J.js +1 -0
  32. package/dist/gateway/static/root/assets/{workflow-page.utils-CJqnPWkW.js → workflow-page.utils-D0vsIGHD.js} +1 -1
  33. package/dist/gateway/static/root/assets/workflows-page-BFCrD3nw.js +27 -0
  34. package/dist/gateway/static/root/index.html +5 -5
  35. package/dist/package.js +1 -1
  36. package/dist/src/agent/inbound/turn-dispatcher.d.ts +1 -0
  37. package/dist/src/agent/inbound/turn-dispatcher.js +3 -0
  38. package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
  39. package/dist/src/agent/lifecycle/handlers/compaction.js +1 -1
  40. package/dist/src/agent/lifecycle/handlers/compaction.js.map +1 -1
  41. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  42. package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +1 -1
  43. package/dist/src/agent/mcp/bundle-mcp-runtime.js +17 -4
  44. package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
  45. package/dist/src/agent/mcp/mcp-transport-config.js +10 -3
  46. package/dist/src/agent/mcp/mcp-transport-config.js.map +1 -1
  47. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  48. package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
  49. package/dist/src/agent/service/process-direct-streaming.d.ts +1 -0
  50. package/dist/src/agent/service/process-direct-streaming.js +15 -12
  51. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  52. package/dist/src/agent/service.d.ts +4 -2
  53. package/dist/src/agent/service.js +20 -4
  54. package/dist/src/agent/service.js.map +1 -1
  55. package/dist/src/agent/service.types.d.ts +3 -1
  56. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
  57. package/dist/src/agent/tools/browser/tool/browser-use-tool.js.map +1 -1
  58. package/dist/src/agent/tools/search/registry.js +1 -1
  59. package/dist/src/agent/tools/search/registry.js.map +1 -1
  60. package/dist/src/agent/tools/session-search-tool.js +1 -1
  61. package/dist/src/agent/tools/session-search-tool.js.map +1 -1
  62. package/dist/src/agent/tools/workflow-tool.js +1 -1
  63. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  64. package/dist/src/agent/workflow/progress-broker.js +1 -1
  65. package/dist/src/agent/workflow/progress-broker.js.map +1 -1
  66. package/dist/src/agent/workflow/subagent-runner.js +1 -1
  67. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  68. package/dist/src/channels/pipeline.js +3 -2
  69. package/dist/src/channels/pipeline.js.map +1 -1
  70. package/dist/src/cli/cli-log-level-preset.d.ts +1 -1
  71. package/dist/src/cli/cli-log-level-preset.js +2 -2
  72. package/dist/src/cli/cli-log-level-preset.js.map +1 -1
  73. package/dist/src/cli/commands/logs.js +3 -3
  74. package/dist/src/cli/commands/logs.js.map +1 -1
  75. package/dist/src/cron/executor.js +7 -4
  76. package/dist/src/cron/executor.js.map +1 -1
  77. package/dist/src/gateway/hono/app.js +4 -1
  78. package/dist/src/gateway/hono/app.js.map +1 -1
  79. package/dist/src/gateway/hono/lib/route-logger.d.ts +6 -0
  80. package/dist/src/gateway/hono/lib/route-logger.js +31 -0
  81. package/dist/src/gateway/hono/lib/route-logger.js.map +1 -0
  82. package/dist/src/gateway/hono/middleware/auth.js +16 -3
  83. package/dist/src/gateway/hono/middleware/auth.js.map +1 -1
  84. package/dist/src/gateway/hono/middleware/logger.js +1 -1
  85. package/dist/src/gateway/hono/middleware/logger.js.map +1 -1
  86. package/dist/src/gateway/hono/middleware/route-errors.d.ts +5 -0
  87. package/dist/src/gateway/hono/middleware/route-errors.js +27 -0
  88. package/dist/src/gateway/hono/middleware/route-errors.js.map +1 -0
  89. package/dist/src/gateway/hono/routes/agent-stream.js +6 -0
  90. package/dist/src/gateway/hono/routes/agent-stream.js.map +1 -1
  91. package/dist/src/gateway/hono/routes/browser-install.js +2 -4
  92. package/dist/src/gateway/hono/routes/browser-install.js.map +1 -1
  93. package/dist/src/gateway/hono/routes/config.js +25 -11
  94. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  95. package/dist/src/gateway/hono/routes/cron.js +5 -0
  96. package/dist/src/gateway/hono/routes/cron.js.map +1 -1
  97. package/dist/src/gateway/hono/routes/host-fs.js +2 -4
  98. package/dist/src/gateway/hono/routes/host-fs.js.map +1 -1
  99. package/dist/src/gateway/hono/routes/lazy-bundles.js +14 -1
  100. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  101. package/dist/src/gateway/hono/routes/lazy-fallback.js +3 -0
  102. package/dist/src/gateway/hono/routes/lazy-fallback.js.map +1 -1
  103. package/dist/src/gateway/hono/routes/logs.js +39 -7
  104. package/dist/src/gateway/hono/routes/logs.js.map +1 -1
  105. package/dist/src/gateway/hono/routes/mcp.d.ts +3 -0
  106. package/dist/src/gateway/hono/routes/mcp.js +107 -0
  107. package/dist/src/gateway/hono/routes/mcp.js.map +1 -0
  108. package/dist/src/gateway/hono/routes/notes.js +105 -1
  109. package/dist/src/gateway/hono/routes/notes.js.map +1 -1
  110. package/dist/src/gateway/hono/routes/sessions.js +6 -0
  111. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  112. package/dist/src/gateway/hono/routes/update.js +2 -4
  113. package/dist/src/gateway/hono/routes/update.js.map +1 -1
  114. package/dist/src/gateway/hono/routes/voice.js +2 -4
  115. package/dist/src/gateway/hono/routes/voice.js.map +1 -1
  116. package/dist/src/gateway/hono/routes/workspace.js +2 -4
  117. package/dist/src/gateway/hono/routes/workspace.js.map +1 -1
  118. package/dist/src/gateway/hono/sse.js +9 -2
  119. package/dist/src/gateway/hono/sse.js.map +1 -1
  120. package/dist/src/gateway/host.d.ts +2 -0
  121. package/dist/src/gateway/host.js +6 -3
  122. package/dist/src/gateway/host.js.map +1 -1
  123. package/dist/src/gateway/service/agent-runner.js +1 -1
  124. package/dist/src/gateway/service/agent-runner.js.map +1 -1
  125. package/dist/src/gateway/service/config-coordinator.js +14 -6
  126. package/dist/src/gateway/service/config-coordinator.js.map +1 -1
  127. package/dist/src/gateway/service/marketplace-service.js +1 -1
  128. package/dist/src/gateway/service/marketplace-service.js.map +1 -1
  129. package/dist/src/gateway/service/run-gateway-agent.js +22 -5
  130. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  131. package/dist/src/gateway/service/sse-hub.js +1 -1
  132. package/dist/src/gateway/service/sse-hub.js.map +1 -1
  133. package/dist/src/gateway/service.js +12 -5
  134. package/dist/src/gateway/service.js.map +1 -1
  135. package/dist/src/mcp/channel-bridge.js +26 -2
  136. package/dist/src/mcp/channel-bridge.js.map +1 -1
  137. package/dist/src/mcp/gateway-http-client.js +24 -2
  138. package/dist/src/mcp/gateway-http-client.js.map +1 -1
  139. package/dist/src/notes/service.d.ts +13 -1
  140. package/dist/src/notes/service.js +237 -0
  141. package/dist/src/notes/service.js.map +1 -1
  142. package/dist/src/notes/store.d.ts +3 -0
  143. package/dist/src/notes/store.js +6 -2
  144. package/dist/src/notes/store.js.map +1 -1
  145. package/dist/src/notes/types.d.ts +31 -0
  146. package/dist/src/session/config-store.js +10 -4
  147. package/dist/src/session/config-store.js.map +1 -1
  148. package/dist/src/session/index.d.ts +1 -1
  149. package/dist/src/session/index.js +2 -2
  150. package/dist/src/session/manager.js +8 -1
  151. package/dist/src/session/manager.js.map +1 -1
  152. package/dist/src/session/session-title.d.ts +19 -3
  153. package/dist/src/session/session-title.js +82 -7
  154. package/dist/src/session/session-title.js.map +1 -1
  155. package/dist/src/utils/index.js +4 -4
  156. package/dist/src/utils/logger/config.js +2 -6
  157. package/dist/src/utils/logger/config.js.map +1 -1
  158. package/dist/src/utils/logger/context.d.ts +3 -22
  159. package/dist/src/utils/logger/context.js +4 -32
  160. package/dist/src/utils/logger/context.js.map +1 -1
  161. package/dist/src/utils/logger/index.d.ts +4 -7
  162. package/dist/src/utils/logger/index.js +9 -28
  163. package/dist/src/utils/logger/index.js.map +1 -1
  164. package/dist/src/utils/logger/log-store.d.ts +14 -32
  165. package/dist/src/utils/logger/log-store.js +67 -118
  166. package/dist/src/utils/logger/log-store.js.map +1 -1
  167. package/dist/src/utils/logger/log-stream.d.ts +5 -70
  168. package/dist/src/utils/logger/log-stream.js +67 -178
  169. package/dist/src/utils/logger/log-stream.js.map +1 -1
  170. package/dist/src/utils/logger/pino-record.d.ts +8 -0
  171. package/dist/src/utils/logger/pino-record.js +83 -0
  172. package/dist/src/utils/logger/pino-record.js.map +1 -0
  173. package/dist/src/utils/logger/stats.d.ts +1 -1
  174. package/dist/src/utils/logger/stats.js +2 -2
  175. package/dist/src/utils/logger/stats.js.map +1 -1
  176. package/dist/src/utils/logger/streams.js +18 -0
  177. package/dist/src/utils/logger/streams.js.map +1 -1
  178. package/dist/src/utils/logger/types.d.ts +0 -9
  179. package/dist/src/utils/logger/types.js.map +1 -1
  180. package/dist/src/utils/logger.js +4 -4
  181. package/package.json +6 -1
  182. package/dist/gateway/static/root/assets/agents-uwPn7ZW9.js +0 -222
  183. package/dist/gateway/static/root/assets/apps-page-CWKdhSPU.js +0 -1
  184. package/dist/gateway/static/root/assets/channels-settings-hEhW7Mbk.js +0 -1
  185. package/dist/gateway/static/root/assets/cron-page-B0kvgZGR.js +0 -1
  186. package/dist/gateway/static/root/assets/index-BUKUv7QW.css +0 -1
  187. package/dist/gateway/static/root/assets/logs-page-sOP4TXJ4.js +0 -1
  188. package/dist/gateway/static/root/assets/notes-page-BFQaquHU.js +0 -1
  189. package/dist/gateway/static/root/assets/sessions-page-CptjDKAX.js +0 -1
  190. package/dist/gateway/static/root/assets/settings-page-V3p-hISB.js +0 -2
  191. package/dist/gateway/static/root/assets/skills-page-q2zPUJAR.js +0 -2
  192. package/dist/gateway/static/root/assets/url-CWWpfkq1.js +0 -3
  193. package/dist/gateway/static/root/assets/voice-api-key-field-DLSKUipa.js +0 -1
  194. package/dist/gateway/static/root/assets/workflows-page-DRRQ1A0l.js +0 -27
@@ -1,17 +1,17 @@
1
1
  import { getLogDir, getLoggerConfig } from "./logger/config.js";
2
- import { getLogStats } from "./logger/stats.js";
2
+ import { getRuntimeLogStats } from "./logger/stats.js";
3
3
  import { flushAndClose, isLoggerShuttingDown, setShuttingDown } from "./logger/shutdown.js";
4
4
  import { cleanOldLogs, rotateLogs } from "./logger/rotation.js";
5
- import { clearRequestContext, getAsyncLogContext, inboundCorrelationMetadataFromAsyncLogContext, runWithLogContext, setRequestContext, updateAsyncLogContext } from "./logger/context.js";
5
+ import { getAsyncLogContext, inboundCorrelationMetadataFromAsyncLogContext, runWithLogContext, updateAsyncLogContext } from "./logger/context.js";
6
6
  import { isLogRedactionEnabled, redactObject, redactPemBlock, redactSecret, redactSensitiveInfo } from "./logger/redact.js";
7
7
  import { exportLog, flushExporters, getExporters, initializeExporters } from "./logger/exporters.js";
8
8
  import { configureAuditLog, getAuditConfig, logAuditEvent, logAuthEvent, logConfigChange, logDataAccess, logPermissionChange } from "./logger/audit.js";
9
- import { Pino as pino, baseLogger as logger, createExtensionLogger, createLogger, createModuleLogger, createRequestLogger, createServiceLogger, getLogLevel, isLevelEnabled, registerShutdownHandler, setLogLevel, withLogLevel } from "./logger/index.js";
9
+ import { Pino as pino, baseLogger as logger, createExtensionLogger, createLogger, createModuleLogger, createServiceLogger, getLogLevel, isLevelEnabled, setLogLevel, withLogLevel } from "./logger/index.js";
10
10
  import { init_logger } from "./logger.js";
11
11
  import { createPathResolver, getWorkspacePath, resolveToCwd } from "./helpers.js";
12
12
  //#region src/utils/index.ts
13
13
  init_logger();
14
14
  //#endregion
15
- export { pino as Pino, logger as baseLogger, logger, cleanOldLogs, clearRequestContext as clearRequestLogger, configureAuditLog, createExtensionLogger, createLogger, createModuleLogger, createPathResolver, createRequestLogger, createServiceLogger, exportLog, flushAndClose, flushExporters, getAsyncLogContext, getAuditConfig, getExporters, getLogDir, getLogLevel, getLogStats, getLoggerConfig, getWorkspacePath, inboundCorrelationMetadataFromAsyncLogContext, initializeExporters, isLevelEnabled, isLogRedactionEnabled, isLoggerShuttingDown, logAuditEvent, logAuthEvent, logConfigChange, logDataAccess, logPermissionChange, redactObject, redactPemBlock, redactSecret, redactSensitiveInfo, registerShutdownHandler, resolveToCwd, rotateLogs, runWithLogContext, setLogLevel, setRequestContext as setRequestLogger, setShuttingDown, updateAsyncLogContext, withLogLevel };
15
+ export { pino as Pino, logger as baseLogger, logger, cleanOldLogs, configureAuditLog, createExtensionLogger, createLogger, createModuleLogger, createPathResolver, createServiceLogger, exportLog, flushAndClose, flushExporters, getAsyncLogContext, getAuditConfig, getExporters, getLogDir, getLogLevel, getLoggerConfig, getRuntimeLogStats, getWorkspacePath, inboundCorrelationMetadataFromAsyncLogContext, initializeExporters, isLevelEnabled, isLogRedactionEnabled, isLoggerShuttingDown, logAuditEvent, logAuthEvent, logConfigChange, logDataAccess, logPermissionChange, redactObject, redactPemBlock, redactSecret, redactSensitiveInfo, resolveToCwd, rotateLogs, runWithLogContext, setLogLevel, setShuttingDown, updateAsyncLogContext, withLogLevel };
16
16
 
17
17
  //# sourceMappingURL=index.js.map
@@ -10,9 +10,7 @@ import path from "path";
10
10
  */
11
11
  function loadConfig() {
12
12
  const config = { ...DEFAULT_CONFIG };
13
- const logLevel = process.env.XOPC_LOG_LEVEL || process.env.LOG_LEVEL;
14
- if (logLevel) config.level = logLevel.toLowerCase();
15
- else if (process.env.DEBUG) config.level = "debug";
13
+ if (process.env.XOPC_LOG_LEVEL) config.level = process.env.XOPC_LOG_LEVEL.toLowerCase();
16
14
  if (process.env.XOPC_LOG_DIR) config.logDir = process.env.XOPC_LOG_DIR;
17
15
  if (process.env.XOPC_LOG_CONSOLE === "false") config.consoleOutput = false;
18
16
  if (process.env.XOPC_LOG_FILE === "false") config.fileOutput = false;
@@ -42,9 +40,7 @@ var init_config = __esmMin((() => {
42
40
  errorFileOutput: true,
43
41
  retentionDays: 7,
44
42
  maxFileSizeMB: 100,
45
- prettyPrint: false,
46
- async: true,
47
- debugSampleRate: 1
43
+ prettyPrint: false
48
44
  };
49
45
  config = loadConfig();
50
46
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","names":[],"sources":["../../../../src/utils/logger/config.ts"],"sourcesContent":["/**\n * Logger Configuration\n * Centralized configuration loading from environment variables\n */\n\nimport path from 'path';\nimport type { LoggerConfig, LogLevel } from './types.js';\n\nconst DEFAULT_CONFIG: LoggerConfig = {\n level: 'info',\n logDir: path.join(process.env.HOME || '.', '.xopc', 'logs'),\n consoleOutput: true,\n fileOutput: true,\n errorFileOutput: true,\n retentionDays: 7,\n maxFileSizeMB: 100,\n prettyPrint: false,\n async: true,\n debugSampleRate: 1.0,\n};\n\n/**\n * Load configuration from environment variables\n */\nexport function loadConfig(): LoggerConfig {\n const config: LoggerConfig = { ...DEFAULT_CONFIG };\n\n // Log level - unified environment variable\n const logLevel = process.env.XOPC_LOG_LEVEL || process.env.LOG_LEVEL;\n if (logLevel) {\n config.level = logLevel.toLowerCase() as LogLevel;\n } else if (process.env.DEBUG) {\n config.level = 'debug';\n }\n\n // Log directory\n if (process.env.XOPC_LOG_DIR) {\n config.logDir = process.env.XOPC_LOG_DIR;\n }\n\n // Output options\n if (process.env.XOPC_LOG_CONSOLE === 'false') {\n config.consoleOutput = false;\n }\n if (process.env.XOPC_LOG_FILE === 'false') {\n config.fileOutput = false;\n }\n\n // Retention\n if (process.env.XOPC_LOG_RETENTION_DAYS) {\n config.retentionDays = parseInt(process.env.XOPC_LOG_RETENTION_DAYS, 10);\n }\n\n // Pretty print for development\n if (process.env.NODE_ENV === 'development' || process.env.XOPC_PRETTY_LOGS === 'true') {\n config.prettyPrint = true;\n }\n\n return config;\n}\n\n// Singleton config instance\nexport const config = loadConfig();\n\n/**\n * Get current log directory\n */\nexport function getLogDir(): string {\n return config.logDir;\n}\n\n/**\n * Get logger configuration\n */\nexport function getLoggerConfig(): Readonly<LoggerConfig> {\n return { ...config };\n}\n"],"mappings":";;;;;;;;;;AAwBA,SAAgB,aAA2B;CACzC,MAAM,SAAuB,EAAE,GAAG,gBAAgB;CAGlD,MAAM,WAAW,QAAQ,IAAI,kBAAkB,QAAQ,IAAI;AAC3D,KAAI,SACF,QAAO,QAAQ,SAAS,aAAa;UAC5B,QAAQ,IAAI,MACrB,QAAO,QAAQ;AAIjB,KAAI,QAAQ,IAAI,aACd,QAAO,SAAS,QAAQ,IAAI;AAI9B,KAAI,QAAQ,IAAI,qBAAqB,QACnC,QAAO,gBAAgB;AAEzB,KAAI,QAAQ,IAAI,kBAAkB,QAChC,QAAO,aAAa;AAItB,KAAI,QAAQ,IAAI,wBACd,QAAO,gBAAgB,SAAS,QAAQ,IAAI,yBAAyB,GAAG;AAI1E,KAA8C,QAAQ,IAAI,qBAAqB,OAC7E,QAAO,cAAc;AAGvB,QAAO;;;;;AAST,SAAgB,YAAoB;AAClC,QAAO,OAAO;;;;;AAMhB,SAAgB,kBAA0C;AACxD,QAAO,EAAE,GAAG,QAAQ;;;;AAnEhB,kBAA+B;EACnC,OAAO;EACP,QAAQ,KAAK,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS,OAAO;EAC3D,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,eAAe;EACf,eAAe;EACf,aAAa;EACb,OAAO;EACP,iBAAiB;EAClB;AA2CY,UAAS,YAAY"}
1
+ {"version":3,"file":"config.js","names":[],"sources":["../../../../src/utils/logger/config.ts"],"sourcesContent":["/**\n * Logger Configuration\n * Centralized configuration loading from environment variables\n */\n\nimport path from 'path';\nimport type { LoggerConfig, LogLevel } from './types.js';\n\nconst DEFAULT_CONFIG: LoggerConfig = {\n level: 'info',\n logDir: path.join(process.env.HOME || '.', '.xopc', 'logs'),\n consoleOutput: true,\n fileOutput: true,\n errorFileOutput: true,\n retentionDays: 7,\n maxFileSizeMB: 100,\n prettyPrint: false,\n};\n\n/**\n * Load configuration from environment variables\n */\nexport function loadConfig(): LoggerConfig {\n const config: LoggerConfig = { ...DEFAULT_CONFIG };\n\n // Log level\n if (process.env.XOPC_LOG_LEVEL) {\n config.level = process.env.XOPC_LOG_LEVEL.toLowerCase() as LogLevel;\n }\n\n // Log directory\n if (process.env.XOPC_LOG_DIR) {\n config.logDir = process.env.XOPC_LOG_DIR;\n }\n\n // Output options\n if (process.env.XOPC_LOG_CONSOLE === 'false') {\n config.consoleOutput = false;\n }\n if (process.env.XOPC_LOG_FILE === 'false') {\n config.fileOutput = false;\n }\n\n // Retention\n if (process.env.XOPC_LOG_RETENTION_DAYS) {\n config.retentionDays = parseInt(process.env.XOPC_LOG_RETENTION_DAYS, 10);\n }\n\n // Pretty print for development\n if (process.env.NODE_ENV === 'development' || process.env.XOPC_PRETTY_LOGS === 'true') {\n config.prettyPrint = true;\n }\n\n return config;\n}\n\n// Singleton config instance\nexport const config = loadConfig();\n\n/**\n * Get current log directory\n */\nexport function getLogDir(): string {\n return config.logDir;\n}\n\n/**\n * Get logger configuration\n */\nexport function getLoggerConfig(): Readonly<LoggerConfig> {\n return { ...config };\n}\n"],"mappings":";;;;;;;;;;AAsBA,SAAgB,aAA2B;CACzC,MAAM,SAAuB,EAAE,GAAG,gBAAgB;AAGlD,KAAI,QAAQ,IAAI,eACd,QAAO,QAAQ,QAAQ,IAAI,eAAe,aAAa;AAIzD,KAAI,QAAQ,IAAI,aACd,QAAO,SAAS,QAAQ,IAAI;AAI9B,KAAI,QAAQ,IAAI,qBAAqB,QACnC,QAAO,gBAAgB;AAEzB,KAAI,QAAQ,IAAI,kBAAkB,QAChC,QAAO,aAAa;AAItB,KAAI,QAAQ,IAAI,wBACd,QAAO,gBAAgB,SAAS,QAAQ,IAAI,yBAAyB,GAAG;AAI1E,KAA8C,QAAQ,IAAI,qBAAqB,OAC7E,QAAO,cAAc;AAGvB,QAAO;;;;;AAST,SAAgB,YAAoB;AAClC,QAAO,OAAO;;;;;AAMhB,SAAgB,kBAA0C;AACxD,QAAO,EAAE,GAAG,QAAQ;;;;AA9DhB,kBAA+B;EACnC,OAAO;EACP,QAAQ,KAAK,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS,OAAO;EAC3D,eAAe;EACf,YAAY;EACZ,iBAAiB;EACjB,eAAe;EACf,eAAe;EACf,aAAa;EACd;AAwCY,UAAS,YAAY"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Logger Context
3
- * Context tracking and propagation for structured logging
3
+ * AsyncLocalStorage correlation for structured logging
4
4
  */
5
- import type { LogContext, ContextualLogger } from './types.js';
5
+ import type { LogContext } from './types.js';
6
6
  /** Correlation fields merged into every log line while the store is active (via pino mixin). */
7
7
  declare const ASYNC_LOG_CORRELATION_KEYS: readonly ["requestId", "sessionId", "userId", "correlationId"];
8
8
  type AsyncLogCorrelationKey = (typeof ASYNC_LOG_CORRELATION_KEYS)[number];
@@ -21,25 +21,6 @@ export declare function updateAsyncLogContext(partial: LogContext): void;
21
21
  /** Keys injected from async context into log records (used by logger mixin). */
22
22
  export declare function getAsyncLogCorrelationKeys(): readonly AsyncLogCorrelationKey[];
23
23
  export declare function inboundCorrelationMetadataFromAsyncLogContext(): Record<string, unknown> | undefined;
24
- /**
25
- * Merge two contexts
26
- */
24
+ /** Shallow-merge two log context objects. */
27
25
  export declare function mergeContext(base: LogContext, additional: LogContext): LogContext;
28
- /**
29
- * Store context for a request ID
30
- */
31
- export declare function setRequestContext(requestId: string, context: LogContext): void;
32
- /**
33
- * Get context for a request ID
34
- */
35
- export declare function getRequestContext(requestId: string): LogContext | undefined;
36
- /**
37
- * Clear context for a request ID
38
- */
39
- export declare function clearRequestContext(requestId: string): void;
40
- /**
41
- * Create a child logger with additional context
42
- * This is a placeholder for the actual implementation
43
- */
44
- export declare function withContext(logger: ContextualLogger, context: LogContext): ContextualLogger;
45
26
  export {};
@@ -3,7 +3,7 @@ import { AsyncLocalStorage } from "node:async_hooks";
3
3
  //#region src/utils/logger/context.ts
4
4
  /**
5
5
  * Logger Context
6
- * Context tracking and propagation for structured logging
6
+ * AsyncLocalStorage correlation for structured logging
7
7
  */
8
8
  /**
9
9
  * Run *fn* with merged async log context. Propagates through async/await (Node AsyncLocalStorage).
@@ -40,43 +40,15 @@ function inboundCorrelationMetadataFromAsyncLogContext() {
40
40
  }
41
41
  return Object.keys(meta).length > 0 ? meta : void 0;
42
42
  }
43
- /**
44
- * Merge two contexts
45
- */
43
+ /** Shallow-merge two log context objects. */
46
44
  function mergeContext(base, additional) {
47
45
  return {
48
46
  ...base,
49
47
  ...additional
50
48
  };
51
49
  }
52
- /**
53
- * Store context for a request ID
54
- */
55
- function setRequestContext(requestId, context) {
56
- contextStore.set(requestId, context);
57
- }
58
- /**
59
- * Get context for a request ID
60
- */
61
- function getRequestContext(requestId) {
62
- return contextStore.get(requestId);
63
- }
64
- /**
65
- * Clear context for a request ID
66
- */
67
- function clearRequestContext(requestId) {
68
- contextStore.delete(requestId);
69
- }
70
- /**
71
- * Create a child logger with additional context
72
- * This is a placeholder for the actual implementation
73
- */
74
- function withContext(logger, context) {
75
- return logger.withContext(context);
76
- }
77
- var contextStore, ASYNC_LOG_CORRELATION_KEYS, logContextStorage, INBOUND_METADATA_FROM_ASYNC;
50
+ var ASYNC_LOG_CORRELATION_KEYS, logContextStorage, INBOUND_METADATA_FROM_ASYNC;
78
51
  var init_context = __esmMin((() => {
79
- contextStore = /* @__PURE__ */ new Map();
80
52
  ASYNC_LOG_CORRELATION_KEYS = [
81
53
  "requestId",
82
54
  "sessionId",
@@ -92,6 +64,6 @@ var init_context = __esmMin((() => {
92
64
  }));
93
65
  //#endregion
94
66
  init_context();
95
- export { clearRequestContext, getAsyncLogContext, getAsyncLogCorrelationKeys, getRequestContext, inboundCorrelationMetadataFromAsyncLogContext, init_context, mergeContext, runWithLogContext, setRequestContext, updateAsyncLogContext, withContext };
67
+ export { getAsyncLogContext, getAsyncLogCorrelationKeys, inboundCorrelationMetadataFromAsyncLogContext, init_context, mergeContext, runWithLogContext, updateAsyncLogContext };
96
68
 
97
69
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../../src/utils/logger/context.ts"],"sourcesContent":["/**\n * Logger Context\n * Context tracking and propagation for structured logging\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nimport type { LogContext, ContextualLogger } from './types.js';\n\nconst contextStore = new Map<string, LogContext>();\n\n/** Correlation fields merged into every log line while the store is active (via pino mixin). */\nconst ASYNC_LOG_CORRELATION_KEYS = ['requestId', 'sessionId', 'userId', 'correlationId'] as const;\n\ntype AsyncLogCorrelationKey = (typeof ASYNC_LOG_CORRELATION_KEYS)[number];\n\nconst logContextStorage = new AsyncLocalStorage<{ ctx: LogContext }>();\n\n/**\n * Run *fn* with merged async log context. Propagates through async/await (Node AsyncLocalStorage).\n * Nested calls merge over the parent context (shallow per key).\n */\nexport function runWithLogContext<T>(context: LogContext, fn: () => T): T {\n const parent = logContextStorage.getStore();\n const merged = parent ? mergeContext(parent.ctx, context) : { ...context };\n return logContextStorage.run({ ctx: { ...merged } }, fn);\n}\n\n/** Current async log context, if any. */\nexport function getAsyncLogContext(): LogContext | undefined {\n return logContextStorage.getStore()?.ctx;\n}\n\n/**\n * Shallow-merge fields into the current async log context (e.g. set sessionId after parsing a body).\n * No-op when not inside {@link runWithLogContext}.\n */\nexport function updateAsyncLogContext(partial: LogContext): void {\n const ref = logContextStorage.getStore();\n if (ref) {\n ref.ctx = mergeContext(ref.ctx, partial);\n }\n}\n\n/** Keys injected from async context into log records (used by logger mixin). */\nexport function getAsyncLogCorrelationKeys(): readonly AsyncLogCorrelationKey[] {\n return ASYNC_LOG_CORRELATION_KEYS;\n}\n\n/**\n * Fields to copy from ALS onto {@link InboundMessage.metadata} when the gateway enqueues\n * a message for the agent bus. Omits `sessionId` so channel routing / sessionKey stays\n * authoritative; the agent sets log sessionId after `routeMessage`.\n */\nconst INBOUND_METADATA_FROM_ASYNC: readonly (keyof LogContext)[] = [\n 'requestId',\n 'correlationId',\n 'userId',\n];\n\nexport function inboundCorrelationMetadataFromAsyncLogContext(): Record<string, unknown> | undefined {\n const ctx = getAsyncLogContext();\n if (!ctx) return undefined;\n const meta: Record<string, unknown> = {};\n for (const key of INBOUND_METADATA_FROM_ASYNC) {\n const v = ctx[key];\n if (v !== undefined && v !== '') {\n meta[key] = v;\n }\n }\n return Object.keys(meta).length > 0 ? meta : undefined;\n}\n\n/**\n * Merge two contexts\n */\nexport function mergeContext(base: LogContext, additional: LogContext): LogContext {\n return { ...base, ...additional };\n}\n\n/**\n * Store context for a request ID\n */\nexport function setRequestContext(requestId: string, context: LogContext): void {\n contextStore.set(requestId, context);\n}\n\n/**\n * Get context for a request ID\n */\nexport function getRequestContext(requestId: string): LogContext | undefined {\n return contextStore.get(requestId);\n}\n\n/**\n * Clear context for a request ID\n */\nexport function clearRequestContext(requestId: string): void {\n contextStore.delete(requestId);\n}\n\n/**\n * Create a child logger with additional context\n * This is a placeholder for the actual implementation\n */\nexport function withContext(logger: ContextualLogger, context: LogContext): ContextualLogger {\n return logger.withContext(context);\n}\n"],"mappings":";;;;;;;;;;;AAsBA,SAAgB,kBAAqB,SAAqB,IAAgB;CACxE,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,SAAS,SAAS,aAAa,OAAO,KAAK,QAAQ,GAAG,EAAE,GAAG,SAAS;AAC1E,QAAO,kBAAkB,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,EAAE,GAAG;;;AAI1D,SAAgB,qBAA6C;AAC3D,QAAO,kBAAkB,UAAU,EAAE;;;;;;AAOvC,SAAgB,sBAAsB,SAA2B;CAC/D,MAAM,MAAM,kBAAkB,UAAU;AACxC,KAAI,IACF,KAAI,MAAM,aAAa,IAAI,KAAK,QAAQ;;;AAK5C,SAAgB,6BAAgE;AAC9E,QAAO;;AAcT,SAAgB,gDAAqF;CACnG,MAAM,MAAM,oBAAoB;AAChC,KAAI,CAAC,IAAK,QAAO,KAAA;CACjB,MAAM,OAAgC,EAAE;AACxC,MAAK,MAAM,OAAO,6BAA6B;EAC7C,MAAM,IAAI,IAAI;AACd,MAAI,MAAM,KAAA,KAAa,MAAM,GAC3B,MAAK,OAAO;;AAGhB,QAAO,OAAO,KAAK,KAAK,CAAC,SAAS,IAAI,OAAO,KAAA;;;;;AAM/C,SAAgB,aAAa,MAAkB,YAAoC;AACjF,QAAO;EAAE,GAAG;EAAM,GAAG;EAAY;;;;;AAMnC,SAAgB,kBAAkB,WAAmB,SAA2B;AAC9E,cAAa,IAAI,WAAW,QAAQ;;;;;AAMtC,SAAgB,kBAAkB,WAA2C;AAC3E,QAAO,aAAa,IAAI,UAAU;;;;;AAMpC,SAAgB,oBAAoB,WAAyB;AAC3D,cAAa,OAAO,UAAU;;;;;;AAOhC,SAAgB,YAAY,QAA0B,SAAuC;AAC3F,QAAO,OAAO,YAAY,QAAQ;;;;AAjG9B,gCAAe,IAAI,KAAyB;AAG5C,8BAA6B;EAAC;EAAa;EAAa;EAAU;EAAgB;AAIlF,qBAAoB,IAAI,mBAAwC;AAsChE,+BAA6D;EACjE;EACA;EACA;EACD"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../../src/utils/logger/context.ts"],"sourcesContent":["/**\n * Logger Context\n * AsyncLocalStorage correlation for structured logging\n */\n\nimport { AsyncLocalStorage } from 'node:async_hooks';\n\nimport type { LogContext } from './types.js';\n\n/** Correlation fields merged into every log line while the store is active (via pino mixin). */\nconst ASYNC_LOG_CORRELATION_KEYS = ['requestId', 'sessionId', 'userId', 'correlationId'] as const;\n\ntype AsyncLogCorrelationKey = (typeof ASYNC_LOG_CORRELATION_KEYS)[number];\n\nconst logContextStorage = new AsyncLocalStorage<{ ctx: LogContext }>();\n\n/**\n * Run *fn* with merged async log context. Propagates through async/await (Node AsyncLocalStorage).\n * Nested calls merge over the parent context (shallow per key).\n */\nexport function runWithLogContext<T>(context: LogContext, fn: () => T): T {\n const parent = logContextStorage.getStore();\n const merged = parent ? mergeContext(parent.ctx, context) : { ...context };\n return logContextStorage.run({ ctx: { ...merged } }, fn);\n}\n\n/** Current async log context, if any. */\nexport function getAsyncLogContext(): LogContext | undefined {\n return logContextStorage.getStore()?.ctx;\n}\n\n/**\n * Shallow-merge fields into the current async log context (e.g. set sessionId after parsing a body).\n * No-op when not inside {@link runWithLogContext}.\n */\nexport function updateAsyncLogContext(partial: LogContext): void {\n const ref = logContextStorage.getStore();\n if (ref) {\n ref.ctx = mergeContext(ref.ctx, partial);\n }\n}\n\n/** Keys injected from async context into log records (used by logger mixin). */\nexport function getAsyncLogCorrelationKeys(): readonly AsyncLogCorrelationKey[] {\n return ASYNC_LOG_CORRELATION_KEYS;\n}\n\n/**\n * Fields to copy from ALS onto {@link InboundMessage.metadata} when the gateway enqueues\n * a message for the agent bus. Omits `sessionId` so channel routing / sessionKey stays\n * authoritative; the agent sets log sessionId after `routeMessage`.\n */\nconst INBOUND_METADATA_FROM_ASYNC: readonly (keyof LogContext)[] = [\n 'requestId',\n 'correlationId',\n 'userId',\n];\n\nexport function inboundCorrelationMetadataFromAsyncLogContext(): Record<string, unknown> | undefined {\n const ctx = getAsyncLogContext();\n if (!ctx) return undefined;\n const meta: Record<string, unknown> = {};\n for (const key of INBOUND_METADATA_FROM_ASYNC) {\n const v = ctx[key];\n if (v !== undefined && v !== '') {\n meta[key] = v;\n }\n }\n return Object.keys(meta).length > 0 ? meta : undefined;\n}\n\n/** Shallow-merge two log context objects. */\nexport function mergeContext(base: LogContext, additional: LogContext): LogContext {\n return { ...base, ...additional };\n}\n"],"mappings":";;;;;;;;;;;AAoBA,SAAgB,kBAAqB,SAAqB,IAAgB;CACxE,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,SAAS,SAAS,aAAa,OAAO,KAAK,QAAQ,GAAG,EAAE,GAAG,SAAS;AAC1E,QAAO,kBAAkB,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,EAAE,GAAG;;;AAI1D,SAAgB,qBAA6C;AAC3D,QAAO,kBAAkB,UAAU,EAAE;;;;;;AAOvC,SAAgB,sBAAsB,SAA2B;CAC/D,MAAM,MAAM,kBAAkB,UAAU;AACxC,KAAI,IACF,KAAI,MAAM,aAAa,IAAI,KAAK,QAAQ;;;AAK5C,SAAgB,6BAAgE;AAC9E,QAAO;;AAcT,SAAgB,gDAAqF;CACnG,MAAM,MAAM,oBAAoB;AAChC,KAAI,CAAC,IAAK,QAAO,KAAA;CACjB,MAAM,OAAgC,EAAE;AACxC,MAAK,MAAM,OAAO,6BAA6B;EAC7C,MAAM,IAAI,IAAI;AACd,MAAI,MAAM,KAAA,KAAa,MAAM,GAC3B,MAAK,OAAO;;AAGhB,QAAO,OAAO,KAAK,KAAK,CAAC,SAAS,IAAI,OAAO,KAAA;;;AAI/C,SAAgB,aAAa,MAAkB,YAAoC;AACjF,QAAO;EAAE,GAAG;EAAM,GAAG;EAAY;;;;AA/D7B,8BAA6B;EAAC;EAAa;EAAa;EAAU;EAAgB;AAIlF,qBAAoB,IAAI,mBAAwC;AAsChE,+BAA6D;EACjE;EACA;EACA;EACD"}
@@ -10,26 +10,23 @@
10
10
  import pino from 'pino';
11
11
  import type { LogLevel, LogContext, ContextualLogger } from './types.js';
12
12
  import { getLogDir, getLoggerConfig } from './config.js';
13
- import { getLogStats } from './stats.js';
13
+ import { getRuntimeLogStats } from './stats.js';
14
14
  import { isLoggerShuttingDown, flushAndClose, setShuttingDown } from './shutdown.js';
15
15
  import { rotateLogs, cleanOldLogs } from './rotation.js';
16
16
  export declare const logger: ContextualLogger;
17
- export declare function createLogger(prefix: string, context?: LogContext): ContextualLogger;
17
+ export declare function createLogger(module: string, context?: LogContext): ContextualLogger;
18
18
  export declare function createModuleLogger(moduleName: string, _modulePath?: string): ContextualLogger;
19
19
  export declare function createExtensionLogger(extensionName: string): ContextualLogger;
20
20
  export declare function createServiceLogger(serviceId: string): ContextualLogger;
21
- export declare function createRequestLogger(requestId: string, initialContext?: LogContext): ContextualLogger;
22
21
  export declare function setLogLevel(level: LogLevel): void;
23
22
  export declare function getLogLevel(): LogLevel;
24
23
  export declare function withLogLevel<T>(level: LogLevel, fn: () => T): T;
25
24
  export declare function isLevelEnabled(level: LogLevel): boolean;
26
25
  export type { LogLevel, LogContext, LogEntry, LoggerConfig, LogFileMeta, LogQuery, LogStats, RotationResult, ContextualLogger, } from './types.js';
27
- export { getLogDir, getLoggerConfig, getLogStats, isLoggerShuttingDown, flushAndClose, setShuttingDown, rotateLogs, cleanOldLogs, };
26
+ export { getLogDir, getLoggerConfig, getRuntimeLogStats, isLoggerShuttingDown, flushAndClose, setShuttingDown, rotateLogs, cleanOldLogs, };
28
27
  export { type LogExporter, type ExporterConfig, type LokiConfig, type ElkConfig, type DatadogConfig, type WebhookConfig, initializeExporters, exportLog, flushExporters, getExporters, } from './exporters.js';
29
28
  export { redactSensitiveInfo, redactObject, redactPemBlock, redactSecret, isLogRedactionEnabled, } from './redact.js';
30
29
  export { type AuditEvent, type AuditEventType, type AuditLogConfig, logAuditEvent, logAuthEvent, logConfigChange, logPermissionChange, logDataAccess, configureAuditLog, getAuditConfig, } from './audit.js';
31
- export { logger as default };
32
30
  export { logger as baseLogger };
33
31
  export { pino as Pino };
34
- export declare function registerShutdownHandler(): void;
35
- export { runWithLogContext, getAsyncLogContext, updateAsyncLogContext, inboundCorrelationMetadataFromAsyncLogContext, setRequestContext as setRequestLogger, clearRequestContext as clearRequestLogger, } from './context.js';
32
+ export { runWithLogContext, getAsyncLogContext, updateAsyncLogContext, inboundCorrelationMetadataFromAsyncLogContext, } from './context.js';
@@ -2,10 +2,10 @@ import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
2
  import { PACKAGE_VERSION, init_package_version } from "../../package-version.js";
3
3
  import { config, getLogDir, getLoggerConfig, init_config } from "./config.js";
4
4
  import { init_streams, initializeStreams } from "./streams.js";
5
- import { getLogStats, incrementStats, init_stats } from "./stats.js";
5
+ import { getRuntimeLogStats, incrementStats, init_stats } from "./stats.js";
6
6
  import { flushAndClose, init_shutdown, isLoggerShuttingDown, setShuttingDown } from "./shutdown.js";
7
7
  import { cleanOldLogs, init_rotation, rotateLogs } from "./rotation.js";
8
- import { clearRequestContext, getAsyncLogContext, getAsyncLogCorrelationKeys, inboundCorrelationMetadataFromAsyncLogContext, init_context, mergeContext, runWithLogContext, setRequestContext, updateAsyncLogContext } from "./context.js";
8
+ import { getAsyncLogContext, getAsyncLogCorrelationKeys, inboundCorrelationMetadataFromAsyncLogContext, init_context, mergeContext, runWithLogContext, updateAsyncLogContext } from "./context.js";
9
9
  import { init_redact, isLogRedactionEnabled, redactLogRecord, redactObject, redactPemBlock, redactSecret, redactSensitiveInfo } from "./redact.js";
10
10
  import { exportLog, flushExporters, getExporters, init_exporters, initializeExporters } from "./exporters.js";
11
11
  import { configureAuditLog, getAuditConfig, init_audit, logAuditEvent, logAuthEvent, logConfigChange, logDataAccess, logPermissionChange } from "./audit.js";
@@ -25,7 +25,8 @@ function wrapLogMethod(method, defaultContext, level) {
25
25
  if (isLoggerShuttingDown()) {
26
26
  if (level !== "error" && level !== "fatal") return;
27
27
  }
28
- incrementStats(level, defaultContext.module || defaultContext.prefix);
28
+ const module = defaultContext.module;
29
+ incrementStats(level, module);
29
30
  return msg !== void 0 ? method.call(this, data, msg) : method.call(this, data);
30
31
  };
31
32
  }
@@ -35,9 +36,6 @@ function createProxyLogger(logger, defaultContext = {}) {
35
36
  if (prop === "withContext") return (context) => {
36
37
  return createProxyLogger(target.child({ ...context }), mergeContext(defaultContext, context));
37
38
  };
38
- if (prop === "childContext") return (context) => {
39
- return createProxyLogger(target.child({ ...context }), mergeContext(defaultContext, context));
40
- };
41
39
  const value = target[propKey];
42
40
  if (typeof value === "function") {
43
41
  if ([
@@ -52,9 +50,9 @@ function createProxyLogger(logger, defaultContext = {}) {
52
50
  return value;
53
51
  } });
54
52
  }
55
- function createLogger(prefix, context) {
56
- return createProxyLogger(baseLogger.child({ prefix }), {
57
- module: prefix,
53
+ function createLogger(module, context) {
54
+ return createProxyLogger(baseLogger.child({ module }), {
55
+ module,
58
56
  ...context
59
57
  });
60
58
  }
@@ -73,13 +71,6 @@ function createServiceLogger(serviceId) {
73
71
  scope: serviceId
74
72
  });
75
73
  }
76
- function createRequestLogger(requestId, initialContext) {
77
- const context = {
78
- requestId,
79
- ...initialContext
80
- };
81
- return createProxyLogger(baseLogger.child({ requestId }), context);
82
- }
83
74
  function setLogLevel(level) {
84
75
  baseLogger.level = level;
85
76
  }
@@ -105,18 +96,8 @@ function isLevelEnabled(level) {
105
96
  fatal: 60,
106
97
  silent: Number.MAX_VALUE
107
98
  };
108
- const currentLevelValues = {
109
- trace: 10,
110
- debug: 20,
111
- info: 30,
112
- warn: 40,
113
- error: 50,
114
- fatal: 60,
115
- silent: Number.MAX_VALUE
116
- };
117
- return levelValues[level] >= currentLevelValues[getLogLevel()];
99
+ return levelValues[level] >= levelValues[getLogLevel()];
118
100
  }
119
- function registerShutdownHandler() {}
120
101
  var pinoOptions, streams, baseLogger, logger;
121
102
  var init_logger = __esmMin((() => {
122
103
  init_config();
@@ -199,6 +180,6 @@ var init_logger = __esmMin((() => {
199
180
  }));
200
181
  //#endregion
201
182
  init_logger();
202
- export { pino as Pino, logger as baseLogger, logger as default, logger, cleanOldLogs, clearRequestContext as clearRequestLogger, configureAuditLog, createExtensionLogger, createLogger, createModuleLogger, createRequestLogger, createServiceLogger, exportLog, flushAndClose, flushExporters, getAsyncLogContext, getAuditConfig, getExporters, getLogDir, getLogLevel, getLogStats, getLoggerConfig, inboundCorrelationMetadataFromAsyncLogContext, init_logger, initializeExporters, isLevelEnabled, isLogRedactionEnabled, isLoggerShuttingDown, logAuditEvent, logAuthEvent, logConfigChange, logDataAccess, logPermissionChange, redactObject, redactPemBlock, redactSecret, redactSensitiveInfo, registerShutdownHandler, rotateLogs, runWithLogContext, setLogLevel, setRequestContext as setRequestLogger, setShuttingDown, updateAsyncLogContext, withLogLevel };
183
+ export { pino as Pino, logger as baseLogger, logger, cleanOldLogs, configureAuditLog, createExtensionLogger, createLogger, createModuleLogger, createServiceLogger, exportLog, flushAndClose, flushExporters, getAsyncLogContext, getAuditConfig, getExporters, getLogDir, getLogLevel, getLoggerConfig, getRuntimeLogStats, inboundCorrelationMetadataFromAsyncLogContext, init_logger, initializeExporters, isLevelEnabled, isLogRedactionEnabled, isLoggerShuttingDown, logAuditEvent, logAuthEvent, logConfigChange, logDataAccess, logPermissionChange, redactObject, redactPemBlock, redactSecret, redactSensitiveInfo, rotateLogs, runWithLogContext, setLogLevel, setShuttingDown, updateAsyncLogContext, withLogLevel };
203
184
 
204
185
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/utils/logger/index.ts"],"sourcesContent":["/**\n * Modular Logger System\n * \n * Production-grade logging with:\n * - Modular architecture\n * - Context tracking\n * - Statistics\n * - Graceful shutdown\n */\n\nimport pino from 'pino';\nimport type { Logger as PinoLogger } from 'pino';\nimport type { LogLevel, LogContext, ContextualLogger } from './types.js';\n\n// Internal modules\nimport { config, getLogDir, getLoggerConfig } from './config.js';\nimport { initializeStreams } from './streams.js';\nimport { incrementStats, getLogStats } from './stats.js';\nimport { isLoggerShuttingDown, flushAndClose, setShuttingDown } from './shutdown.js';\nimport { rotateLogs, cleanOldLogs } from './rotation.js';\nimport { getAsyncLogContext, getAsyncLogCorrelationKeys, mergeContext } from './context.js';\nimport { redactLogRecord } from './redact.js';\nimport { PACKAGE_VERSION } from '../../package-version.js';\n\n// ============================================\n// Base Logger Creation\n// ============================================\n\nconst customLevels = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60,\n};\n\nconst pinoOptions: pino.LoggerOptions = {\n level: config.level,\n base: {\n service: 'xopc',\n version: process.env.npm_package_version || PACKAGE_VERSION,\n },\n timestamp: pino.stdTimeFunctions.isoTime,\n mixin(mergeObject, _level, logger) {\n const ctx = getAsyncLogContext();\n if (!ctx) return {};\n const bindings =\n logger && typeof logger.bindings === 'function'\n ? (logger.bindings() as Record<string, unknown>)\n : {};\n const mo = mergeObject as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of getAsyncLogCorrelationKeys()) {\n const v = ctx[key];\n if (v === undefined || v === '') continue;\n if (mo[key] !== undefined) continue;\n if (bindings[key] !== undefined) continue;\n out[key] = v;\n }\n return out;\n },\n formatters: {\n level: (label) => ({ level: label }),\n bindings: (bindings) => ({\n pid: bindings.pid,\n host: bindings.host,\n }),\n log: (object) => {\n // Serialize errors with full stack trace\n if (object.err && object.err instanceof Error) {\n object.err = {\n name: object.err.name,\n message: object.err.message,\n stack: object.err.stack,\n cause: object.err.cause instanceof Error \n ? { name: object.err.cause.name, message: object.err.cause.message, stack: object.err.cause.stack }\n : object.err.cause,\n };\n }\n for (const key of Object.keys(object)) {\n if (object[key] instanceof Error) {\n object[key] = {\n name: object[key].name,\n message: object[key].message,\n stack: object[key].stack,\n };\n }\n }\n return redactLogRecord(object as Record<string, unknown>);\n },\n },\n customLevels,\n};\n\n// Add pretty print for development\nif (config.prettyPrint) {\n pinoOptions.transport = {\n target: 'pino-pretty',\n options: {\n colorize: true,\n translateTime: 'SYS:standard',\n ignore: 'pid,host',\n },\n };\n}\n\nconst streams = initializeStreams();\nconst baseLogger = pino(pinoOptions, pino.multistream(streams));\n\n// ============================================\n// Contextual Logger\n// ============================================\n\nfunction wrapLogMethod(method: Function, defaultContext: LogContext, level: LogLevel) {\n return function (data: unknown, msg?: string) {\n // During shutdown, only allow error and fatal logs\n if (isLoggerShuttingDown()) {\n if (level !== 'error' && level !== 'fatal') {\n return;\n }\n }\n \n const module = (defaultContext.module || defaultContext.prefix) as string | undefined;\n incrementStats(level, module);\n \n return msg !== undefined ? method.call(this, data, msg) : method.call(this, data);\n };\n}\n\nfunction createProxyLogger(logger: PinoLogger, defaultContext: LogContext = {}): ContextualLogger {\n const proxy = new Proxy(logger, {\n get(target, prop) {\n const propKey = prop as string;\n \n if (prop === 'withContext') {\n return (context: LogContext) => {\n return createProxyLogger(target.child({ ...context }), mergeContext(defaultContext, context));\n };\n }\n if (prop === 'childContext') {\n return (context: LogContext) => {\n return createProxyLogger(target.child({ ...context }), mergeContext(defaultContext, context));\n };\n }\n \n const value = (target as unknown as Record<string, unknown>)[propKey];\n if (typeof value === 'function') {\n if (['trace', 'debug', 'info', 'warn', 'error', 'fatal'].includes(propKey)) {\n return wrapLogMethod(value, defaultContext, propKey as LogLevel);\n }\n }\n \n return value;\n },\n });\n\n return proxy as ContextualLogger;\n}\n\n// ============================================\n// Public API\n// ============================================\n\nexport const logger = createProxyLogger(baseLogger);\n\nexport function createLogger(prefix: string, context?: LogContext): ContextualLogger {\n const child = baseLogger.child({ prefix });\n return createProxyLogger(child, { module: prefix, ...context });\n}\n\nexport function createModuleLogger(moduleName: string, _modulePath?: string): ContextualLogger {\n const child = baseLogger.child({ module: moduleName });\n return createProxyLogger(child, { module: moduleName });\n}\n\nexport function createExtensionLogger(extensionName: string): ContextualLogger {\n const child = baseLogger.child({ extension: extensionName });\n return createProxyLogger(child, { extension: extensionName });\n}\n\nexport function createServiceLogger(serviceId: string): ContextualLogger {\n const child = baseLogger.child({ service: 'cron', scope: serviceId });\n return createProxyLogger(child, { service: 'cron', scope: serviceId });\n}\n\nexport function createRequestLogger(requestId: string, initialContext?: LogContext): ContextualLogger {\n const context: LogContext = { requestId, ...initialContext };\n const child = baseLogger.child({ requestId });\n return createProxyLogger(child, context);\n}\n\n// ============================================\n// Log Level Management\n// ============================================\n\nexport function setLogLevel(level: LogLevel): void {\n baseLogger.level = level;\n}\n\nexport function getLogLevel(): LogLevel {\n return baseLogger.level as LogLevel;\n}\n\nexport function withLogLevel<T>(level: LogLevel, fn: () => T): T {\n const previous = baseLogger.level;\n baseLogger.level = level;\n try {\n return fn();\n } finally {\n baseLogger.level = previous;\n }\n}\n\nexport function isLevelEnabled(level: LogLevel): boolean {\n const levelValues: Record<LogLevel, number> = {\n trace: 10, debug: 20, info: 30, warn: 40, error: 50, fatal: 60, silent: Number.MAX_VALUE,\n };\n const currentLevelValues: Record<LogLevel, number> = {\n trace: 10, debug: 20, info: 30, warn: 40, error: 50, fatal: 60, silent: Number.MAX_VALUE,\n };\n return levelValues[level] >= currentLevelValues[getLogLevel()];\n}\n\n// ============================================\n// Re-exports\n// ============================================\n\nexport type {\n LogLevel,\n LogContext,\n LogEntry,\n LoggerConfig,\n LogFileMeta,\n LogQuery,\n LogStats,\n RotationResult,\n ContextualLogger,\n} from './types.js';\n\nexport {\n // Config\n getLogDir,\n getLoggerConfig,\n \n // Stats\n getLogStats,\n \n // Shutdown\n isLoggerShuttingDown,\n flushAndClose,\n setShuttingDown,\n \n // Rotation\n rotateLogs,\n cleanOldLogs,\n};\n\n// Exporters\nexport {\n type LogExporter,\n type ExporterConfig,\n type LokiConfig,\n type ElkConfig,\n type DatadogConfig,\n type WebhookConfig,\n initializeExporters,\n exportLog,\n flushExporters,\n getExporters,\n} from './exporters.js';\n\nexport {\n redactSensitiveInfo,\n redactObject,\n redactPemBlock,\n redactSecret,\n isLogRedactionEnabled,\n} from './redact.js';\n\n// Audit Log\nexport {\n type AuditEvent,\n type AuditEventType,\n type AuditLogConfig,\n logAuditEvent,\n logAuthEvent,\n logConfigChange,\n logPermissionChange,\n logDataAccess,\n configureAuditLog,\n getAuditConfig,\n} from './audit.js';\n\nexport { logger as default };\nexport { logger as baseLogger };\nexport { pino as Pino };\n\nexport function registerShutdownHandler(): void {}\n\nexport {\n runWithLogContext,\n getAsyncLogContext,\n updateAsyncLogContext,\n inboundCorrelationMetadataFromAsyncLogContext,\n setRequestContext as setRequestLogger,\n clearRequestContext as clearRequestLogger,\n} from './context.js';\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/utils/logger/index.ts"],"sourcesContent":["/**\n * Modular Logger System\n * \n * Production-grade logging with:\n * - Modular architecture\n * - Context tracking\n * - Statistics\n * - Graceful shutdown\n */\n\nimport pino from 'pino';\nimport type { Logger as PinoLogger } from 'pino';\nimport type { LogLevel, LogContext, ContextualLogger } from './types.js';\n\n// Internal modules\nimport { config, getLogDir, getLoggerConfig } from './config.js';\nimport { initializeStreams } from './streams.js';\nimport { incrementStats, getRuntimeLogStats } from './stats.js';\nimport { isLoggerShuttingDown, flushAndClose, setShuttingDown } from './shutdown.js';\nimport { rotateLogs, cleanOldLogs } from './rotation.js';\nimport { getAsyncLogContext, getAsyncLogCorrelationKeys, mergeContext } from './context.js';\nimport { redactLogRecord } from './redact.js';\nimport { PACKAGE_VERSION } from '../../package-version.js';\n\n// ============================================\n// Base Logger Creation\n// ============================================\n\nconst customLevels = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60,\n};\n\nconst pinoOptions: pino.LoggerOptions = {\n level: config.level,\n base: {\n service: 'xopc',\n version: process.env.npm_package_version || PACKAGE_VERSION,\n },\n timestamp: pino.stdTimeFunctions.isoTime,\n mixin(mergeObject, _level, logger) {\n const ctx = getAsyncLogContext();\n if (!ctx) return {};\n const bindings =\n logger && typeof logger.bindings === 'function'\n ? (logger.bindings() as Record<string, unknown>)\n : {};\n const mo = mergeObject as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const key of getAsyncLogCorrelationKeys()) {\n const v = ctx[key];\n if (v === undefined || v === '') continue;\n if (mo[key] !== undefined) continue;\n if (bindings[key] !== undefined) continue;\n out[key] = v;\n }\n return out;\n },\n formatters: {\n level: (label) => ({ level: label }),\n bindings: (bindings) => ({\n pid: bindings.pid,\n host: bindings.host,\n }),\n log: (object) => {\n // Serialize errors with full stack trace\n if (object.err && object.err instanceof Error) {\n object.err = {\n name: object.err.name,\n message: object.err.message,\n stack: object.err.stack,\n cause: object.err.cause instanceof Error \n ? { name: object.err.cause.name, message: object.err.cause.message, stack: object.err.cause.stack }\n : object.err.cause,\n };\n }\n for (const key of Object.keys(object)) {\n if (object[key] instanceof Error) {\n object[key] = {\n name: object[key].name,\n message: object[key].message,\n stack: object[key].stack,\n };\n }\n }\n return redactLogRecord(object as Record<string, unknown>);\n },\n },\n customLevels,\n};\n\n// Add pretty print for development\nif (config.prettyPrint) {\n pinoOptions.transport = {\n target: 'pino-pretty',\n options: {\n colorize: true,\n translateTime: 'SYS:standard',\n ignore: 'pid,host',\n },\n };\n}\n\nconst streams = initializeStreams();\nconst baseLogger = pino(pinoOptions, pino.multistream(streams));\n\n// ============================================\n// Contextual Logger\n// ============================================\n\nfunction wrapLogMethod(method: Function, defaultContext: LogContext, level: LogLevel) {\n return function (data: unknown, msg?: string) {\n // During shutdown, only allow error and fatal logs\n if (isLoggerShuttingDown()) {\n if (level !== 'error' && level !== 'fatal') {\n return;\n }\n }\n \n const module = defaultContext.module as string | undefined;\n incrementStats(level, module);\n \n return msg !== undefined ? method.call(this, data, msg) : method.call(this, data);\n };\n}\n\nfunction createProxyLogger(logger: PinoLogger, defaultContext: LogContext = {}): ContextualLogger {\n const proxy = new Proxy(logger, {\n get(target, prop) {\n const propKey = prop as string;\n \n if (prop === 'withContext') {\n return (context: LogContext) => {\n return createProxyLogger(target.child({ ...context }), mergeContext(defaultContext, context));\n };\n }\n \n const value = (target as unknown as Record<string, unknown>)[propKey];\n if (typeof value === 'function') {\n if (['trace', 'debug', 'info', 'warn', 'error', 'fatal'].includes(propKey)) {\n return wrapLogMethod(value, defaultContext, propKey as LogLevel);\n }\n }\n \n return value;\n },\n });\n\n return proxy as ContextualLogger;\n}\n\n// ============================================\n// Public API\n// ============================================\n\nexport const logger = createProxyLogger(baseLogger);\n\nexport function createLogger(module: string, context?: LogContext): ContextualLogger {\n const child = baseLogger.child({ module });\n return createProxyLogger(child, { module, ...context });\n}\n\nexport function createModuleLogger(moduleName: string, _modulePath?: string): ContextualLogger {\n const child = baseLogger.child({ module: moduleName });\n return createProxyLogger(child, { module: moduleName });\n}\n\nexport function createExtensionLogger(extensionName: string): ContextualLogger {\n const child = baseLogger.child({ extension: extensionName });\n return createProxyLogger(child, { extension: extensionName });\n}\n\nexport function createServiceLogger(serviceId: string): ContextualLogger {\n const child = baseLogger.child({ service: 'cron', scope: serviceId });\n return createProxyLogger(child, { service: 'cron', scope: serviceId });\n}\n\n// ============================================\n// Log Level Management\n// ============================================\n\nexport function setLogLevel(level: LogLevel): void {\n baseLogger.level = level;\n}\n\nexport function getLogLevel(): LogLevel {\n return baseLogger.level as LogLevel;\n}\n\nexport function withLogLevel<T>(level: LogLevel, fn: () => T): T {\n const previous = baseLogger.level;\n baseLogger.level = level;\n try {\n return fn();\n } finally {\n baseLogger.level = previous;\n }\n}\n\nexport function isLevelEnabled(level: LogLevel): boolean {\n const levelValues: Record<LogLevel, number> = {\n trace: 10, debug: 20, info: 30, warn: 40, error: 50, fatal: 60, silent: Number.MAX_VALUE,\n };\n return levelValues[level] >= levelValues[getLogLevel()];\n}\n\n// ============================================\n// Re-exports\n// ============================================\n\nexport type {\n LogLevel,\n LogContext,\n LogEntry,\n LoggerConfig,\n LogFileMeta,\n LogQuery,\n LogStats,\n RotationResult,\n ContextualLogger,\n} from './types.js';\n\nexport {\n // Config\n getLogDir,\n getLoggerConfig,\n \n // Stats\n getRuntimeLogStats,\n \n // Shutdown\n isLoggerShuttingDown,\n flushAndClose,\n setShuttingDown,\n \n // Rotation\n rotateLogs,\n cleanOldLogs,\n};\n\n// Exporters\nexport {\n type LogExporter,\n type ExporterConfig,\n type LokiConfig,\n type ElkConfig,\n type DatadogConfig,\n type WebhookConfig,\n initializeExporters,\n exportLog,\n flushExporters,\n getExporters,\n} from './exporters.js';\n\nexport {\n redactSensitiveInfo,\n redactObject,\n redactPemBlock,\n redactSecret,\n isLogRedactionEnabled,\n} from './redact.js';\n\n// Audit Log\nexport {\n type AuditEvent,\n type AuditEventType,\n type AuditLogConfig,\n logAuditEvent,\n logAuthEvent,\n logConfigChange,\n logPermissionChange,\n logDataAccess,\n configureAuditLog,\n getAuditConfig,\n} from './audit.js';\n\nexport { logger as baseLogger };\nexport { pino as Pino };\n\nexport {\n runWithLogContext,\n getAsyncLogContext,\n updateAsyncLogContext,\n inboundCorrelationMetadataFromAsyncLogContext,\n} from './context.js';\n"],"mappings":"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"}
@@ -22,46 +22,28 @@ export declare function getLogPath(date?: Date, type?: 'app' | 'error' | 'audit'
22
22
  * Query logs across multiple files
23
23
  */
24
24
  export declare function queryLogs(query?: LogQuery): Promise<LogEntry[]>;
25
+ export declare function getLogModules(): Promise<string[]>;
25
26
  /**
26
- * Get recent logs (convenience method)
27
+ * Get log statistics by level (sampled from recent files)
27
28
  */
28
- export declare function getRecentLogs(options?: {
29
- level?: LogLevel;
30
- limit?: number;
29
+ export declare function getFileLogStats(): Promise<LogStats>;
30
+ export interface LogErrorSummaryItem {
31
+ key: string;
32
+ errName: string;
33
+ phase?: string;
31
34
  module?: string;
32
- }): Promise<LogEntry[]>;
35
+ count: number;
36
+ lastSeen: string;
37
+ sampleMessage: string;
38
+ }
33
39
  /**
34
- * Search logs by keyword
40
+ * Aggregate recent error/fatal logs by err name + phase + module.
35
41
  */
36
- export declare function searchLogs(keyword: string, options?: {
42
+ export declare function getLogErrorSummary(options?: {
37
43
  from?: string;
38
44
  to?: string;
39
45
  limit?: number;
40
- }): Promise<LogEntry[]>;
41
- /**
42
- * Get logs for a specific request/session
43
- */
44
- export declare function getLogsByContext(contextType: 'requestId' | 'sessionId', contextValue: string, limit?: number): Promise<LogEntry[]>;
45
- /**
46
- * Get available log levels from actual log data
47
- */
48
- export declare function getLogLevelsFromData(): Promise<LogLevel[]>;
49
- /**
50
- * Get available modules from log data
51
- */
52
- export declare function getLogModules(): Promise<string[]>;
53
- /**
54
- * Get log statistics by level (sampled from recent files)
55
- */
56
- export declare function getLogStats(): Promise<LogStats>;
57
- /**
58
- * Clean old logs (actually deletes files)
59
- */
60
- export declare function cleanOldLogs(keepDays?: number): {
61
- deleted: number;
62
- freedBytes: number;
63
- errors: string[];
64
- };
46
+ }): Promise<LogErrorSummaryItem[]>;
65
47
  /**
66
48
  * Get available log levels
67
49
  */