@vibesdotdev/logging 0.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.
Files changed (393) hide show
  1. package/README.md +80 -0
  2. package/SPEC.md +65 -0
  3. package/dist/audit/audit.descriptor.d.ts +11 -0
  4. package/dist/audit/audit.descriptor.d.ts.map +1 -0
  5. package/dist/audit/audit.descriptor.js +40 -0
  6. package/dist/audit/audit.descriptor.js.map +1 -0
  7. package/dist/audit/audit.storage.schema.d.ts +79 -0
  8. package/dist/audit/audit.storage.schema.d.ts.map +1 -0
  9. package/dist/audit/audit.storage.schema.js +33 -0
  10. package/dist/audit/audit.storage.schema.js.map +1 -0
  11. package/dist/audit/index.d.ts +2 -0
  12. package/dist/audit/index.d.ts.map +1 -0
  13. package/dist/audit/index.js +2 -0
  14. package/dist/audit/index.js.map +1 -0
  15. package/dist/cli/logs.descriptor.d.ts +9 -0
  16. package/dist/cli/logs.descriptor.d.ts.map +1 -0
  17. package/dist/cli/logs.descriptor.js +16 -0
  18. package/dist/cli/logs.descriptor.js.map +1 -0
  19. package/dist/cli/logs.list.descriptor.d.ts +9 -0
  20. package/dist/cli/logs.list.descriptor.d.ts.map +1 -0
  21. package/dist/cli/logs.list.descriptor.js +23 -0
  22. package/dist/cli/logs.list.descriptor.js.map +1 -0
  23. package/dist/cli/logs.list.impl.d.ts +13 -0
  24. package/dist/cli/logs.list.impl.d.ts.map +1 -0
  25. package/dist/cli/logs.list.impl.js +81 -0
  26. package/dist/cli/logs.list.impl.js.map +1 -0
  27. package/dist/cli/logs.rotate.descriptor.d.ts +9 -0
  28. package/dist/cli/logs.rotate.descriptor.d.ts.map +1 -0
  29. package/dist/cli/logs.rotate.descriptor.js +34 -0
  30. package/dist/cli/logs.rotate.descriptor.js.map +1 -0
  31. package/dist/cli/logs.rotate.impl.d.ts +17 -0
  32. package/dist/cli/logs.rotate.impl.d.ts.map +1 -0
  33. package/dist/cli/logs.rotate.impl.js +48 -0
  34. package/dist/cli/logs.rotate.impl.js.map +1 -0
  35. package/dist/cli/logs.search.descriptor.d.ts +9 -0
  36. package/dist/cli/logs.search.descriptor.d.ts.map +1 -0
  37. package/dist/cli/logs.search.descriptor.js +55 -0
  38. package/dist/cli/logs.search.descriptor.js.map +1 -0
  39. package/dist/cli/logs.search.impl.d.ts +22 -0
  40. package/dist/cli/logs.search.impl.d.ts.map +1 -0
  41. package/dist/cli/logs.search.impl.js +145 -0
  42. package/dist/cli/logs.search.impl.js.map +1 -0
  43. package/dist/cli/logs.tail.descriptor.d.ts +9 -0
  44. package/dist/cli/logs.tail.descriptor.d.ts.map +1 -0
  45. package/dist/cli/logs.tail.descriptor.js +43 -0
  46. package/dist/cli/logs.tail.descriptor.js.map +1 -0
  47. package/dist/cli/logs.tail.impl.d.ts +19 -0
  48. package/dist/cli/logs.tail.impl.d.ts.map +1 -0
  49. package/dist/cli/logs.tail.impl.js +78 -0
  50. package/dist/cli/logs.tail.impl.js.map +1 -0
  51. package/dist/cli/logs.view.descriptor.d.ts +9 -0
  52. package/dist/cli/logs.view.descriptor.d.ts.map +1 -0
  53. package/dist/cli/logs.view.descriptor.js +51 -0
  54. package/dist/cli/logs.view.descriptor.js.map +1 -0
  55. package/dist/cli/logs.view.impl.d.ts +21 -0
  56. package/dist/cli/logs.view.impl.d.ts.map +1 -0
  57. package/dist/cli/logs.view.impl.js +85 -0
  58. package/dist/cli/logs.view.impl.js.map +1 -0
  59. package/dist/cli/types.d.ts +57 -0
  60. package/dist/cli/types.d.ts.map +1 -0
  61. package/dist/cli/types.js +9 -0
  62. package/dist/cli/types.js.map +1 -0
  63. package/dist/contexts/audit.d.ts +34 -0
  64. package/dist/contexts/audit.d.ts.map +1 -0
  65. package/dist/contexts/audit.js +13 -0
  66. package/dist/contexts/audit.js.map +1 -0
  67. package/dist/contexts/fallback-logger.d.ts +3 -0
  68. package/dist/contexts/fallback-logger.d.ts.map +1 -0
  69. package/dist/contexts/fallback-logger.js +67 -0
  70. package/dist/contexts/fallback-logger.js.map +1 -0
  71. package/dist/contexts/index.d.ts +8 -0
  72. package/dist/contexts/index.d.ts.map +1 -0
  73. package/dist/contexts/index.js +9 -0
  74. package/dist/contexts/index.js.map +1 -0
  75. package/dist/contexts/logger.d.ts +26 -0
  76. package/dist/contexts/logger.d.ts.map +1 -0
  77. package/dist/contexts/logger.js +88 -0
  78. package/dist/contexts/logger.js.map +1 -0
  79. package/dist/core/index.d.ts +9 -0
  80. package/dist/core/index.d.ts.map +1 -0
  81. package/dist/core/index.js +10 -0
  82. package/dist/core/index.js.map +1 -0
  83. package/dist/core/logger.d.ts +3 -0
  84. package/dist/core/logger.d.ts.map +1 -0
  85. package/dist/core/logger.js +118 -0
  86. package/dist/core/logger.js.map +1 -0
  87. package/dist/core/namespace.d.ts +69 -0
  88. package/dist/core/namespace.d.ts.map +1 -0
  89. package/dist/core/namespace.js +136 -0
  90. package/dist/core/namespace.js.map +1 -0
  91. package/dist/core/parsing.d.ts +3 -0
  92. package/dist/core/parsing.d.ts.map +1 -0
  93. package/dist/core/parsing.js +25 -0
  94. package/dist/core/parsing.js.map +1 -0
  95. package/dist/core/types.d.ts +69 -0
  96. package/dist/core/types.d.ts.map +1 -0
  97. package/dist/core/types.js +7 -0
  98. package/dist/core/types.js.map +1 -0
  99. package/dist/docs/levels.docs.descriptor.d.ts +4 -0
  100. package/dist/docs/levels.docs.descriptor.d.ts.map +1 -0
  101. package/dist/docs/levels.docs.descriptor.js +342 -0
  102. package/dist/docs/levels.docs.descriptor.js.map +1 -0
  103. package/dist/docs/structured.docs.descriptor.d.ts +4 -0
  104. package/dist/docs/structured.docs.descriptor.d.ts.map +1 -0
  105. package/dist/docs/structured.docs.descriptor.js +442 -0
  106. package/dist/docs/structured.docs.descriptor.js.map +1 -0
  107. package/dist/docs/transports.docs.descriptor.d.ts +4 -0
  108. package/dist/docs/transports.docs.descriptor.d.ts.map +1 -0
  109. package/dist/docs/transports.docs.descriptor.js +426 -0
  110. package/dist/docs/transports.docs.descriptor.js.map +1 -0
  111. package/dist/formatters/index.d.ts +7 -0
  112. package/dist/formatters/index.d.ts.map +1 -0
  113. package/dist/formatters/index.js +8 -0
  114. package/dist/formatters/index.js.map +1 -0
  115. package/dist/formatters/json/json.formatters.descriptor.d.ts +9 -0
  116. package/dist/formatters/json/json.formatters.descriptor.d.ts.map +1 -0
  117. package/dist/formatters/json/json.formatters.descriptor.js +22 -0
  118. package/dist/formatters/json/json.formatters.descriptor.js.map +1 -0
  119. package/dist/formatters/json/json.impl.d.ts +22 -0
  120. package/dist/formatters/json/json.impl.d.ts.map +1 -0
  121. package/dist/formatters/json/json.impl.js +32 -0
  122. package/dist/formatters/json/json.impl.js.map +1 -0
  123. package/dist/formatters/json5/json5.descriptor.d.ts +9 -0
  124. package/dist/formatters/json5/json5.descriptor.d.ts.map +1 -0
  125. package/dist/formatters/json5/json5.descriptor.js +22 -0
  126. package/dist/formatters/json5/json5.descriptor.js.map +1 -0
  127. package/dist/formatters/json5/json5.impl.d.ts +23 -0
  128. package/dist/formatters/json5/json5.impl.d.ts.map +1 -0
  129. package/dist/formatters/json5/json5.impl.js +34 -0
  130. package/dist/formatters/json5/json5.impl.js.map +1 -0
  131. package/dist/formatters/jsonl/jsonl.descriptor.d.ts +10 -0
  132. package/dist/formatters/jsonl/jsonl.descriptor.d.ts.map +1 -0
  133. package/dist/formatters/jsonl/jsonl.descriptor.js +23 -0
  134. package/dist/formatters/jsonl/jsonl.descriptor.js.map +1 -0
  135. package/dist/formatters/jsonl/jsonl.impl.d.ts +21 -0
  136. package/dist/formatters/jsonl/jsonl.impl.d.ts.map +1 -0
  137. package/dist/formatters/jsonl/jsonl.impl.js +30 -0
  138. package/dist/formatters/jsonl/jsonl.impl.js.map +1 -0
  139. package/dist/formatters/pretty/pretty.descriptor.d.ts +9 -0
  140. package/dist/formatters/pretty/pretty.descriptor.d.ts.map +1 -0
  141. package/dist/formatters/pretty/pretty.descriptor.js +23 -0
  142. package/dist/formatters/pretty/pretty.descriptor.js.map +1 -0
  143. package/dist/formatters/pretty/pretty.impl.cli.d.ts +23 -0
  144. package/dist/formatters/pretty/pretty.impl.cli.d.ts.map +1 -0
  145. package/dist/formatters/pretty/pretty.impl.cli.js +81 -0
  146. package/dist/formatters/pretty/pretty.impl.cli.js.map +1 -0
  147. package/dist/index.d.ts +67 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +97 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/kinds/audit.d.ts +85 -0
  152. package/dist/kinds/audit.d.ts.map +1 -0
  153. package/dist/kinds/audit.js +71 -0
  154. package/dist/kinds/audit.js.map +1 -0
  155. package/dist/kinds/contexts.d.ts +21 -0
  156. package/dist/kinds/contexts.d.ts.map +1 -0
  157. package/dist/kinds/contexts.js +8 -0
  158. package/dist/kinds/contexts.js.map +1 -0
  159. package/dist/kinds/formatter.d.ts +42 -0
  160. package/dist/kinds/formatter.d.ts.map +1 -0
  161. package/dist/kinds/formatter.js +69 -0
  162. package/dist/kinds/formatter.js.map +1 -0
  163. package/dist/kinds/index.d.ts +13 -0
  164. package/dist/kinds/index.d.ts.map +1 -0
  165. package/dist/kinds/index.js +13 -0
  166. package/dist/kinds/index.js.map +1 -0
  167. package/dist/kinds/logger.contracts.d.ts +16 -0
  168. package/dist/kinds/logger.contracts.d.ts.map +1 -0
  169. package/dist/kinds/logger.contracts.js +9 -0
  170. package/dist/kinds/logger.contracts.js.map +1 -0
  171. package/dist/kinds/logger.d.ts +15 -0
  172. package/dist/kinds/logger.d.ts.map +1 -0
  173. package/dist/kinds/logger.impl.d.ts +40 -0
  174. package/dist/kinds/logger.impl.d.ts.map +1 -0
  175. package/dist/kinds/logger.impl.js +139 -0
  176. package/dist/kinds/logger.impl.js.map +1 -0
  177. package/dist/kinds/logger.js +28 -0
  178. package/dist/kinds/logger.js.map +1 -0
  179. package/dist/kinds/logger.utils.d.ts +15 -0
  180. package/dist/kinds/logger.utils.d.ts.map +1 -0
  181. package/dist/kinds/logger.utils.js +55 -0
  182. package/dist/kinds/logger.utils.js.map +1 -0
  183. package/dist/kinds/output.contracts.d.ts +50 -0
  184. package/dist/kinds/output.contracts.d.ts.map +1 -0
  185. package/dist/kinds/output.contracts.js +10 -0
  186. package/dist/kinds/output.contracts.js.map +1 -0
  187. package/dist/kinds/output.d.ts +20 -0
  188. package/dist/kinds/output.d.ts.map +1 -0
  189. package/dist/kinds/output.impl.d.ts +22 -0
  190. package/dist/kinds/output.impl.d.ts.map +1 -0
  191. package/dist/kinds/output.impl.js +84 -0
  192. package/dist/kinds/output.impl.js.map +1 -0
  193. package/dist/kinds/output.js +29 -0
  194. package/dist/kinds/output.js.map +1 -0
  195. package/dist/kinds/output.types.d.ts +92 -0
  196. package/dist/kinds/output.types.d.ts.map +1 -0
  197. package/dist/kinds/output.types.js +7 -0
  198. package/dist/kinds/output.types.js.map +1 -0
  199. package/dist/kinds/sink.d.ts +40 -0
  200. package/dist/kinds/sink.d.ts.map +1 -0
  201. package/dist/kinds/sink.js +61 -0
  202. package/dist/kinds/sink.js.map +1 -0
  203. package/dist/logger.context.descriptor.d.ts +21 -0
  204. package/dist/logger.context.descriptor.d.ts.map +1 -0
  205. package/dist/logger.context.descriptor.js +12 -0
  206. package/dist/logger.context.descriptor.js.map +1 -0
  207. package/dist/logging.cli.plugin.d.ts +20 -0
  208. package/dist/logging.cli.plugin.d.ts.map +1 -0
  209. package/dist/logging.cli.plugin.js +39 -0
  210. package/dist/logging.cli.plugin.js.map +1 -0
  211. package/dist/logging.plugin.d.ts +16 -0
  212. package/dist/logging.plugin.d.ts.map +1 -0
  213. package/dist/logging.plugin.js +83 -0
  214. package/dist/logging.plugin.js.map +1 -0
  215. package/dist/outputs/index.d.ts +7 -0
  216. package/dist/outputs/index.d.ts.map +1 -0
  217. package/dist/outputs/index.js +8 -0
  218. package/dist/outputs/index.js.map +1 -0
  219. package/dist/outputs/remote/remote.descriptor.d.ts +10 -0
  220. package/dist/outputs/remote/remote.descriptor.d.ts.map +1 -0
  221. package/dist/outputs/remote/remote.descriptor.js +24 -0
  222. package/dist/outputs/remote/remote.descriptor.js.map +1 -0
  223. package/dist/outputs/remote/remote.impl.d.ts +50 -0
  224. package/dist/outputs/remote/remote.impl.d.ts.map +1 -0
  225. package/dist/outputs/remote/remote.impl.js +178 -0
  226. package/dist/outputs/remote/remote.impl.js.map +1 -0
  227. package/dist/outputs.context.descriptor.d.ts +19 -0
  228. package/dist/outputs.context.descriptor.d.ts.map +1 -0
  229. package/dist/outputs.context.descriptor.js +9 -0
  230. package/dist/outputs.context.descriptor.js.map +1 -0
  231. package/dist/outputs.context.impl.d.ts +9 -0
  232. package/dist/outputs.context.impl.d.ts.map +1 -0
  233. package/dist/outputs.context.impl.js +18 -0
  234. package/dist/outputs.context.impl.js.map +1 -0
  235. package/dist/paths.d.ts +8 -0
  236. package/dist/paths.d.ts.map +1 -0
  237. package/dist/paths.js +10 -0
  238. package/dist/paths.js.map +1 -0
  239. package/dist/schemas/audit.d.ts +133 -0
  240. package/dist/schemas/audit.d.ts.map +1 -0
  241. package/dist/schemas/audit.js +80 -0
  242. package/dist/schemas/audit.js.map +1 -0
  243. package/dist/schemas/entry.d.ts +74 -0
  244. package/dist/schemas/entry.d.ts.map +1 -0
  245. package/dist/schemas/entry.js +62 -0
  246. package/dist/schemas/entry.js.map +1 -0
  247. package/dist/schemas/formatter.d.ts +46 -0
  248. package/dist/schemas/formatter.d.ts.map +1 -0
  249. package/dist/schemas/formatter.js +31 -0
  250. package/dist/schemas/formatter.js.map +1 -0
  251. package/dist/schemas/index.d.ts +12 -0
  252. package/dist/schemas/index.d.ts.map +1 -0
  253. package/dist/schemas/index.js +18 -0
  254. package/dist/schemas/index.js.map +1 -0
  255. package/dist/schemas/logger.d.ts +48 -0
  256. package/dist/schemas/logger.d.ts.map +1 -0
  257. package/dist/schemas/logger.js +27 -0
  258. package/dist/schemas/logger.js.map +1 -0
  259. package/dist/schemas/output.d.ts +68 -0
  260. package/dist/schemas/output.d.ts.map +1 -0
  261. package/dist/schemas/output.js +48 -0
  262. package/dist/schemas/output.js.map +1 -0
  263. package/dist/schemas/sink.d.ts +52 -0
  264. package/dist/schemas/sink.d.ts.map +1 -0
  265. package/dist/schemas/sink.js +30 -0
  266. package/dist/schemas/sink.js.map +1 -0
  267. package/dist/sinks/buffer/buffer.descriptor.d.ts +4 -0
  268. package/dist/sinks/buffer/buffer.descriptor.d.ts.map +1 -0
  269. package/dist/sinks/buffer/buffer.descriptor.js +11 -0
  270. package/dist/sinks/buffer/buffer.descriptor.js.map +1 -0
  271. package/dist/sinks/buffer/buffer.impl.cli.d.ts +21 -0
  272. package/dist/sinks/buffer/buffer.impl.cli.d.ts.map +1 -0
  273. package/dist/sinks/buffer/buffer.impl.cli.js +34 -0
  274. package/dist/sinks/buffer/buffer.impl.cli.js.map +1 -0
  275. package/dist/sinks/console/console.descriptor.d.ts +10 -0
  276. package/dist/sinks/console/console.descriptor.d.ts.map +1 -0
  277. package/dist/sinks/console/console.descriptor.js +17 -0
  278. package/dist/sinks/console/console.descriptor.js.map +1 -0
  279. package/dist/sinks/console/console.impl.browser.d.ts +21 -0
  280. package/dist/sinks/console/console.impl.browser.d.ts.map +1 -0
  281. package/dist/sinks/console/console.impl.browser.js +57 -0
  282. package/dist/sinks/console/console.impl.browser.js.map +1 -0
  283. package/dist/sinks/console/console.impl.cli.d.ts +21 -0
  284. package/dist/sinks/console/console.impl.cli.d.ts.map +1 -0
  285. package/dist/sinks/console/console.impl.cli.js +57 -0
  286. package/dist/sinks/console/console.impl.cli.js.map +1 -0
  287. package/dist/sinks/index.d.ts +8 -0
  288. package/dist/sinks/index.d.ts.map +1 -0
  289. package/dist/sinks/index.js +8 -0
  290. package/dist/sinks/index.js.map +1 -0
  291. package/dist/sinks/memory/memory.descriptor.d.ts +10 -0
  292. package/dist/sinks/memory/memory.descriptor.d.ts.map +1 -0
  293. package/dist/sinks/memory/memory.descriptor.js +17 -0
  294. package/dist/sinks/memory/memory.descriptor.js.map +1 -0
  295. package/dist/sinks/memory/memory.impl.d.ts +50 -0
  296. package/dist/sinks/memory/memory.impl.d.ts.map +1 -0
  297. package/dist/sinks/memory/memory.impl.js +88 -0
  298. package/dist/sinks/memory/memory.impl.js.map +1 -0
  299. package/dist/sinks/stdout/stdout.descriptor.d.ts +4 -0
  300. package/dist/sinks/stdout/stdout.descriptor.d.ts.map +1 -0
  301. package/dist/sinks/stdout/stdout.descriptor.js +11 -0
  302. package/dist/sinks/stdout/stdout.descriptor.js.map +1 -0
  303. package/dist/sinks/stdout/stdout.impl.cli.d.ts +10 -0
  304. package/dist/sinks/stdout/stdout.impl.cli.d.ts.map +1 -0
  305. package/dist/sinks/stdout/stdout.impl.cli.js +21 -0
  306. package/dist/sinks/stdout/stdout.impl.cli.js.map +1 -0
  307. package/dist/sinks.context.descriptor.d.ts +19 -0
  308. package/dist/sinks.context.descriptor.d.ts.map +1 -0
  309. package/dist/sinks.context.descriptor.js +9 -0
  310. package/dist/sinks.context.descriptor.js.map +1 -0
  311. package/dist/sinks.context.impl.d.ts +9 -0
  312. package/dist/sinks.context.impl.d.ts.map +1 -0
  313. package/dist/sinks.context.impl.js +18 -0
  314. package/dist/sinks.context.impl.js.map +1 -0
  315. package/package.json +331 -0
  316. package/src/audit/audit.descriptor.ts +45 -0
  317. package/src/audit/audit.storage.schema.ts +57 -0
  318. package/src/audit/index.ts +8 -0
  319. package/src/cli/logs.descriptor.ts +19 -0
  320. package/src/cli/logs.list.descriptor.ts +28 -0
  321. package/src/cli/logs.list.impl.ts +93 -0
  322. package/src/cli/logs.rotate.descriptor.ts +40 -0
  323. package/src/cli/logs.rotate.impl.ts +61 -0
  324. package/src/cli/logs.search.descriptor.ts +61 -0
  325. package/src/cli/logs.search.impl.ts +173 -0
  326. package/src/cli/logs.tail.descriptor.ts +49 -0
  327. package/src/cli/logs.tail.impl.ts +105 -0
  328. package/src/cli/logs.view.descriptor.ts +57 -0
  329. package/src/cli/logs.view.impl.ts +108 -0
  330. package/src/cli/types.ts +59 -0
  331. package/src/contexts/audit.ts +36 -0
  332. package/src/contexts/fallback-logger.ts +80 -0
  333. package/src/contexts/index.ts +23 -0
  334. package/src/contexts/logger.ts +119 -0
  335. package/src/core/index.ts +32 -0
  336. package/src/core/logger.ts +150 -0
  337. package/src/core/namespace.ts +195 -0
  338. package/src/core/parsing.ts +21 -0
  339. package/src/core/types.ts +82 -0
  340. package/src/docs/levels.docs.descriptor.ts +344 -0
  341. package/src/docs/structured.docs.descriptor.ts +444 -0
  342. package/src/docs/transports.docs.descriptor.ts +428 -0
  343. package/src/formatters/index.ts +6 -0
  344. package/src/formatters/json/json.formatters.descriptor.ts +25 -0
  345. package/src/formatters/json/json.impl.ts +41 -0
  346. package/src/formatters/json5/json5.descriptor.ts +25 -0
  347. package/src/formatters/json5/json5.impl.ts +43 -0
  348. package/src/formatters/jsonl/jsonl.descriptor.ts +26 -0
  349. package/src/formatters/jsonl/jsonl.impl.ts +39 -0
  350. package/src/formatters/pretty/pretty.descriptor.ts +26 -0
  351. package/src/formatters/pretty/pretty.impl.cli.ts +101 -0
  352. package/src/index.ts +190 -0
  353. package/src/kinds/audit.ts +169 -0
  354. package/src/kinds/contexts.ts +22 -0
  355. package/src/kinds/formatter.ts +117 -0
  356. package/src/kinds/index.ts +25 -0
  357. package/src/kinds/logger.contracts.ts +17 -0
  358. package/src/kinds/logger.impl.ts +206 -0
  359. package/src/kinds/logger.ts +46 -0
  360. package/src/kinds/logger.utils.ts +91 -0
  361. package/src/kinds/output.contracts.ts +54 -0
  362. package/src/kinds/output.impl.ts +118 -0
  363. package/src/kinds/output.ts +59 -0
  364. package/src/kinds/output.types.ts +105 -0
  365. package/src/kinds/sink.ts +100 -0
  366. package/src/logger.context.descriptor.ts +13 -0
  367. package/src/logging.cli.plugin.ts +43 -0
  368. package/src/logging.plugin.ts +93 -0
  369. package/src/outputs/index.ts +6 -0
  370. package/src/outputs/remote/remote.descriptor.ts +27 -0
  371. package/src/outputs/remote/remote.impl.ts +218 -0
  372. package/src/outputs.context.descriptor.ts +10 -0
  373. package/src/outputs.context.impl.ts +30 -0
  374. package/src/paths.ts +10 -0
  375. package/src/schemas/audit.ts +98 -0
  376. package/src/schemas/entry.ts +88 -0
  377. package/src/schemas/formatter.ts +37 -0
  378. package/src/schemas/index.ts +80 -0
  379. package/src/schemas/logger.ts +38 -0
  380. package/src/schemas/output.ts +62 -0
  381. package/src/schemas/sink.ts +39 -0
  382. package/src/sinks/buffer/buffer.descriptor.ts +13 -0
  383. package/src/sinks/buffer/buffer.impl.cli.ts +49 -0
  384. package/src/sinks/console/console.descriptor.ts +20 -0
  385. package/src/sinks/console/console.impl.browser.ts +69 -0
  386. package/src/sinks/console/console.impl.cli.ts +71 -0
  387. package/src/sinks/index.ts +8 -0
  388. package/src/sinks/memory/memory.descriptor.ts +20 -0
  389. package/src/sinks/memory/memory.impl.ts +119 -0
  390. package/src/sinks/stdout/stdout.descriptor.ts +13 -0
  391. package/src/sinks/stdout/stdout.impl.cli.ts +27 -0
  392. package/src/sinks.context.descriptor.ts +10 -0
  393. package/src/sinks.context.impl.ts +30 -0
@@ -0,0 +1,80 @@
1
+ import type { LoggerImplementation } from '../kinds/logger.impl';
2
+ import type { LogLevel, LogContext, LoggerChildOptions, PerformanceTrackerParams } from '../schemas/entry.ts';
3
+ import type { PerformanceTracker } from '../schemas/entry.ts';
4
+
5
+ function createFallbackLoggerInternal(
6
+ namespace: string,
7
+ baseContext: LogContext
8
+ ): LoggerImplementation {
9
+ const normalizeLogContext = (context: unknown): LogContext => {
10
+ if (context === undefined || context === null) {
11
+ return {};
12
+ }
13
+ if (context instanceof Error) {
14
+ return {
15
+ errorName: context.name,
16
+ errorMessage: context.message,
17
+ stack: context.stack
18
+ };
19
+ }
20
+ if (typeof context === 'object' && !Array.isArray(context)) {
21
+ return context as LogContext;
22
+ }
23
+ return { value: context };
24
+ };
25
+
26
+ const emit = (level: LogLevel, message: string, context?: unknown) => {
27
+ if (level === 'debug') return;
28
+ const prefix = `[${namespace}]`;
29
+ const merged = { ...baseContext, ...normalizeLogContext(context) };
30
+ const payloadStr =
31
+ Object.keys(merged).length > 0 ? ` ${JSON.stringify(merged)}` : '';
32
+ const line = `${prefix} ${message}${payloadStr}`;
33
+ console.error(line);
34
+ };
35
+
36
+ return {
37
+ namespace,
38
+ fullNamespace: namespace,
39
+ debug: (msg, ctx) => emit('debug', msg, ctx),
40
+ info: (msg, ctx) => emit('info', msg, ctx),
41
+ warn: (msg, ctx) => emit('warn', msg, ctx),
42
+ error: (msg, ctx) => emit('error', msg, ctx),
43
+ child: (options: LoggerChildOptions) => {
44
+ const childNs =
45
+ typeof options === 'string'
46
+ ? `${namespace}:${options}`
47
+ : `${namespace}:${options.namespace ?? options.context ?? ''}`;
48
+ return createFallbackLoggerInternal(childNs, baseContext);
49
+ },
50
+ withContext: (ctx: LogContext) =>
51
+ createFallbackLoggerInternal(namespace, { ...baseContext, ...ctx }),
52
+ withRequestContext: (ctx) =>
53
+ createFallbackLoggerInternal(namespace, { ...baseContext, ...ctx }),
54
+ withJobContext: (ctx) =>
55
+ createFallbackLoggerInternal(namespace, { ...baseContext, ...ctx }),
56
+ performanceTracker: (params: PerformanceTrackerParams): PerformanceTracker => {
57
+ let startTime = 0;
58
+ const tracker = createFallbackLoggerInternal(namespace, {
59
+ ...baseContext,
60
+ operation: params.operation,
61
+ ...params.metadata
62
+ });
63
+ return {
64
+ start() { startTime = Date.now(); tracker.debug(`operation.${params.operation}.start`); },
65
+ end(successContext?: LogContext) {
66
+ const duration = Date.now() - startTime;
67
+ tracker.info(`operation.${params.operation}.success`, { duration, ...successContext });
68
+ },
69
+ fail(error: unknown, errorContext?: LogContext) {
70
+ const duration = Date.now() - startTime;
71
+ tracker.error(`operation.${params.operation}.failure`, { duration, error, ...errorContext });
72
+ }
73
+ };
74
+ }
75
+ };
76
+ }
77
+
78
+ export function createFallbackLogger(namespace: string): LoggerImplementation {
79
+ return createFallbackLoggerInternal(namespace, {});
80
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Logging Contexts
3
+ *
4
+ * Context providers for dependency injection.
5
+ */
6
+
7
+ export {
8
+ configureLoggerContext,
9
+ getLoggerContextConfig,
10
+ createLoggerContextProvider,
11
+ getLoggerContext,
12
+ setLoggerContext,
13
+ getLogger,
14
+ getDefaultLogger,
15
+ registerLogger,
16
+ initializeLoggers,
17
+ type LoggerContextConfig,
18
+ type LoggerContextProvider,
19
+ type RuntimeLogger
20
+ } from './logger.ts';
21
+
22
+ // Audit context types only — use runtime to resolve audit implementations
23
+ export { type AuditContextConfig, type AuditContextProvider } from './audit.ts';
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Logger Context Provider
3
+ *
4
+ * Provides logger instances to runtime assets via context injection.
5
+ * Loggers are resolved from the runtime and cached for sync access.
6
+ */
7
+
8
+ import type { LoggerImplementation } from '../kinds/logger.impl';
9
+ import { createFallbackLogger } from './fallback-logger.ts';
10
+
11
+ export type RuntimeLogger = LoggerImplementation;
12
+
13
+ export interface LoggerContextConfig {
14
+ defaultNamespace: string;
15
+ defaultRuntime: 'server' | 'cli' | 'worker' | 'browser' | 'mcp';
16
+ }
17
+
18
+ const defaultConfig: LoggerContextConfig = {
19
+ defaultNamespace: 'vibes',
20
+ defaultRuntime: 'server'
21
+ };
22
+
23
+ let activeConfig = { ...defaultConfig };
24
+
25
+ export function configureLoggerContext(config: Partial<LoggerContextConfig>): void {
26
+ activeConfig = { ...activeConfig, ...config };
27
+ }
28
+
29
+ export function getLoggerContextConfig(): LoggerContextConfig {
30
+ return { ...activeConfig };
31
+ }
32
+
33
+ const loggerCache = new Map<string, LoggerImplementation>();
34
+
35
+ export function registerLogger(id: string, logger: LoggerImplementation): void {
36
+ loggerCache.set(id, logger);
37
+ }
38
+
39
+ export async function initializeLoggers(): Promise<void> {
40
+ try {
41
+ const { getVibesRuntime } = await import('@vibesdotdev/runtime');
42
+ const runtime = getVibesRuntime();
43
+ const loggerIds = runtime.query('logging/logger').ids();
44
+ const errors: Array<{ id: string; error: unknown }> = [];
45
+
46
+ for (const id of loggerIds) {
47
+ try {
48
+ const logger = (await runtime.query('logging/logger').withId(id).resolve()) as LoggerImplementation;
49
+ loggerCache.set(id, logger);
50
+ } catch (error) {
51
+ // Collect errors for reporting but continue initializing other loggers
52
+ errors.push({ id, error });
53
+ }
54
+ }
55
+
56
+ // Log summary of initialization results
57
+ if (errors.length > 0) {
58
+ const fallbackLogger = createFallbackLogger('logging');
59
+ fallbackLogger.warn(`Failed to initialize ${errors.length} logger(s):`, {
60
+ loggerIds: errors.map((e) => e.id),
61
+ errors: errors.map((e) =>
62
+ e.error instanceof Error ? e.error.message : String(e.error)
63
+ )
64
+ });
65
+ }
66
+ } catch (error) {
67
+ // Runtime not available - this is expected in some contexts, use fallback
68
+ const fallbackLogger = createFallbackLogger('logging');
69
+ fallbackLogger.debug('Runtime not available for logger initialization, using fallback loggers', {
70
+ error: error instanceof Error ? error.message : String(error)
71
+ });
72
+ }
73
+ }
74
+
75
+ export interface LoggerContextProvider {
76
+ getLogger(id: string): LoggerImplementation;
77
+ getDefaultLogger(): LoggerImplementation;
78
+ }
79
+
80
+ export function createLoggerContextProvider(
81
+ config?: Partial<LoggerContextConfig>
82
+ ): LoggerContextProvider {
83
+ const mergedConfig = { ...activeConfig, ...config };
84
+
85
+ return {
86
+ getLogger(id: string): LoggerImplementation {
87
+ let logger = loggerCache.get(id);
88
+ if (logger) return logger;
89
+ logger = createFallbackLogger(id);
90
+ loggerCache.set(id, logger);
91
+ return logger;
92
+ },
93
+
94
+ getDefaultLogger(): LoggerImplementation {
95
+ return this.getLogger(mergedConfig.defaultNamespace);
96
+ }
97
+ };
98
+ }
99
+
100
+ let globalLoggerContext: LoggerContextProvider | null = null;
101
+
102
+ export function getLoggerContext(): LoggerContextProvider {
103
+ if (!globalLoggerContext) {
104
+ globalLoggerContext = createLoggerContextProvider();
105
+ }
106
+ return globalLoggerContext;
107
+ }
108
+
109
+ export function setLoggerContext(provider: LoggerContextProvider): void {
110
+ globalLoggerContext = provider;
111
+ }
112
+
113
+ export function getLogger(id: string): LoggerImplementation {
114
+ return getLoggerContext().getLogger(id);
115
+ }
116
+
117
+ export function getDefaultLogger(): LoggerImplementation {
118
+ return getLoggerContext().getDefaultLogger();
119
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Core Logging
3
+ *
4
+ * Exports logger factory and types.
5
+ */
6
+
7
+ // Logger factory
8
+ export { createRuntimeLogger } from './logger.ts';
9
+
10
+ // Types
11
+ export type {
12
+ Logger,
13
+ RuntimeLogger,
14
+ Runtime,
15
+ RuntimeLoggerOptions,
16
+ RuntimeLoggerConfig
17
+ } from './types.ts';
18
+
19
+ // Namespace utilities
20
+ export {
21
+ parseNamespaceSettings,
22
+ parseNamespaceSettingsFromEnv,
23
+ matchesSelector,
24
+ isNamespaceIncluded,
25
+ shouldLog,
26
+ updateNamespaceSettings,
27
+ getNamespaceSettings,
28
+ defaultNamespaceSettings,
29
+ type NamespaceSelector,
30
+ type NamespaceSelectors,
31
+ type NamespaceSettings
32
+ } from './namespace.ts';
@@ -0,0 +1,150 @@
1
+ import type { SinkImplementation } from '../kinds/sink.ts';
2
+ import type { RuntimeLogger, RuntimeLoggerOptions, RuntimeLoggerConfig } from './types.ts';
3
+ import type {
4
+ LogLevel,
5
+ LogContext,
6
+ RuntimeLogEntry,
7
+ LoggerChildOptions,
8
+ RequestLogContext,
9
+ JobLogContext,
10
+ PerformanceTracker,
11
+ PerformanceTrackerParams
12
+ } from '../schemas/entry.ts';
13
+ import { shouldLog, getNamespaceSettings, type NamespaceSettings } from './namespace.ts';
14
+ import {
15
+ createDefaultConsoleSink,
16
+ deriveChildConfig
17
+ } from '../kinds/logger.utils';
18
+
19
+ const defaultSink = createDefaultConsoleSink();
20
+
21
+ function normalizeLogContext(context: unknown): LogContext {
22
+ if (context === undefined || context === null) {
23
+ return {};
24
+ }
25
+ if (context instanceof Error) {
26
+ return {
27
+ errorName: context.name,
28
+ errorMessage: context.message,
29
+ stack: context.stack
30
+ };
31
+ }
32
+ if (typeof context === 'object' && !Array.isArray(context)) {
33
+ return context as LogContext;
34
+ }
35
+ return { value: context };
36
+ }
37
+
38
+ export function createRuntimeLogger(options: RuntimeLoggerOptions): RuntimeLogger {
39
+ const sinks: SinkImplementation[] = options.sinkImpls ?? [defaultSink];
40
+
41
+ const config: RuntimeLoggerConfig = {
42
+ namespace: options.namespace,
43
+ fullNamespace: options.namespace,
44
+ runtime: options.runtime ?? 'server',
45
+ staticMetadata: { runtime: options.runtime ?? 'server', ...options.staticMetadata },
46
+ sinkIds: options.sinks ?? ['console']
47
+ };
48
+
49
+ const getLevelSettings = (): NamespaceSettings => {
50
+ const base = getNamespaceSettings();
51
+ if (options.level && base.defaultLevel !== options.level) {
52
+ return { ...base, defaultLevel: options.level };
53
+ }
54
+ return base;
55
+ };
56
+
57
+ const emitEntry = (level: LogLevel, message: string, ctx?: unknown, fullNs?: string): void => {
58
+ const ns = fullNs ?? config.namespace;
59
+ if (!shouldLog({ namespace: ns, level, settings: getLevelSettings() })) return;
60
+ const entry: RuntimeLogEntry = {
61
+ timestamp: new Date().toISOString(),
62
+ level,
63
+ namespace: ns,
64
+ message,
65
+ context: { ...config.staticMetadata, ...normalizeLogContext(ctx) }
66
+ };
67
+ for (const sink of sinks) {
68
+ try { sink.emit(entry); } catch { defaultSink.emit(entry); }
69
+ }
70
+ };
71
+
72
+ const buildLogger = (metadata: LogContext, fullNamespace: string): RuntimeLogger => {
73
+ const log = (level: LogLevel, message: string, ctx?: unknown) =>
74
+ emitEntry(
75
+ level,
76
+ message,
77
+ { ...metadata, ...normalizeLogContext(ctx) },
78
+ fullNamespace
79
+ );
80
+
81
+ return {
82
+ namespace: config.namespace,
83
+ fullNamespace,
84
+
85
+ debug(message, ctx) { log('debug', message, ctx); },
86
+ info(message, ctx) { log('info', message, ctx); },
87
+ warn(message, ctx) { log('warn', message, ctx); },
88
+ error(message, ctx) { log('error', message, ctx); },
89
+
90
+ child(childOptions: LoggerChildOptions): RuntimeLogger {
91
+ const { nextNamespace, childMetadata } = deriveChildConfig(fullNamespace, childOptions);
92
+ return buildLogger({ ...metadata, ...childMetadata }, nextNamespace);
93
+ },
94
+
95
+ withContext(context: LogContext): RuntimeLogger {
96
+ return buildLogger({ ...metadata, ...context }, fullNamespace);
97
+ },
98
+
99
+ withRequestContext(context: RequestLogContext): RuntimeLogger {
100
+ const m = metadata;
101
+ return buildLogger({
102
+ ...m,
103
+ requestId: context.requestId ?? m.requestId,
104
+ correlationId: context.correlationId ?? m.correlationId,
105
+ sessionId: context.sessionId ?? m.sessionId,
106
+ userId: context.userId ?? m.userId,
107
+ userAgent: context.userAgent ?? m.userAgent,
108
+ ip: context.ip ?? m.ip,
109
+ route: context.route ?? m.route,
110
+ method: context.method ?? m.method
111
+ }, fullNamespace);
112
+ },
113
+
114
+ withJobContext(context: JobLogContext): RuntimeLogger {
115
+ const m = metadata;
116
+ return buildLogger({
117
+ ...m,
118
+ jobId: context.jobId ?? m.jobId,
119
+ queueId: context.queueId ?? m.queueId,
120
+ queueName: context.queueName ?? m.queueName,
121
+ toolId: context.toolId ?? m.toolId,
122
+ parentJobId: context.parentJobId ?? m.parentJobId,
123
+ attempt: context.attempt ?? m.attempt,
124
+ maxAttempts: context.maxAttempts ?? m.maxAttempts
125
+ }, fullNamespace);
126
+ },
127
+
128
+ performanceTracker(params: PerformanceTrackerParams): PerformanceTracker {
129
+ let startTime = 0;
130
+ const tracker = buildLogger(
131
+ { ...metadata, operation: params.operation, ...params.metadata },
132
+ fullNamespace
133
+ );
134
+ return {
135
+ start() { startTime = Date.now(); tracker.debug(`operation.${params.operation}.start`); },
136
+ end(successContext?: LogContext) {
137
+ const duration = Date.now() - startTime;
138
+ tracker.info(`operation.${params.operation}.success`, { duration, ...successContext });
139
+ },
140
+ fail(error: unknown, errorContext?: LogContext) {
141
+ const duration = Date.now() - startTime;
142
+ tracker.error(`operation.${params.operation}.failure`, { duration, error, ...errorContext });
143
+ }
144
+ };
145
+ }
146
+ };
147
+ };
148
+
149
+ return buildLogger(options.staticMetadata ?? {}, config.namespace);
150
+ }
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Namespace Filtering
3
+ *
4
+ * Controls which log entries are emitted based on namespace patterns.
5
+ */
6
+
7
+ import { type LogLevel, LOG_LEVEL_ORDER } from '../schemas/entry.ts';
8
+
9
+ const DEFAULT_LEVEL: LogLevel = 'info';
10
+ const REGEX_SPECIAL_CHARS = /[\\^$+?.()|[\]{}]/g;
11
+
12
+ /**
13
+ * A compiled namespace selector.
14
+ */
15
+ export interface NamespaceSelector {
16
+ raw: string;
17
+ regex: RegExp;
18
+ isExclusion: boolean;
19
+ }
20
+
21
+ /**
22
+ * Namespace selectors (includes and excludes).
23
+ */
24
+ export interface NamespaceSelectors {
25
+ includes: NamespaceSelector[];
26
+ excludes: NamespaceSelector[];
27
+ }
28
+
29
+ /**
30
+ * Full namespace settings with level.
31
+ */
32
+ export interface NamespaceSettings extends NamespaceSelectors {
33
+ defaultLevel: LogLevel;
34
+ }
35
+
36
+ type EnvRecord = Record<string, string | undefined>;
37
+
38
+ /**
39
+ * Compile a glob pattern to regex.
40
+ */
41
+ function compilePattern(pattern: string): RegExp {
42
+ const escaped = pattern.replace(REGEX_SPECIAL_CHARS, '\\$&').replace(/\*/g, '.*');
43
+ return new RegExp(`^${escaped}$`);
44
+ }
45
+
46
+ /**
47
+ * Parse a selector string into includes/excludes.
48
+ * Format: "namespace1,namespace2,-excluded1,-excluded2"
49
+ */
50
+ function parseSelectors(raw: string): NamespaceSelectors {
51
+ const selectors: NamespaceSelectors = { includes: [], excludes: [] };
52
+
53
+ for (const token of raw.split(',').map((value) => value.trim())) {
54
+ if (!token) continue;
55
+
56
+ const isExclusion = token.startsWith('-');
57
+ const normalized = isExclusion ? token.slice(1) : token;
58
+ if (!normalized) continue;
59
+
60
+ const selector: NamespaceSelector = {
61
+ raw: normalized,
62
+ regex: compilePattern(normalized),
63
+ isExclusion
64
+ };
65
+
66
+ if (isExclusion) {
67
+ selectors.excludes.push(selector);
68
+ } else {
69
+ selectors.includes.push(selector);
70
+ }
71
+ }
72
+
73
+ return selectors;
74
+ }
75
+
76
+ /**
77
+ * Normalize a level string to LogLevel.
78
+ */
79
+ function normalizeLevel(level?: string | null): LogLevel {
80
+ switch ((level || '').toLowerCase()) {
81
+ case 'debug':
82
+ return 'debug';
83
+ case 'warn':
84
+ return 'warn';
85
+ case 'error':
86
+ return 'error';
87
+ default:
88
+ return 'info';
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Parse namespace settings from input string.
94
+ */
95
+ export function parseNamespaceSettings({
96
+ input,
97
+ defaultLevel
98
+ }: {
99
+ input?: string | null;
100
+ defaultLevel?: string | null;
101
+ }): NamespaceSettings {
102
+ const selectors = input ? parseSelectors(input) : { includes: [], excludes: [] };
103
+ return {
104
+ ...selectors,
105
+ defaultLevel: normalizeLevel(defaultLevel)
106
+ };
107
+ }
108
+
109
+ /**
110
+ * Parse namespace settings from environment variables.
111
+ */
112
+ export function parseNamespaceSettingsFromEnv(env: EnvRecord): NamespaceSettings {
113
+ const logSelectors = env.VIBES_LOG ?? env.vibes_log ?? undefined;
114
+ const level =
115
+ env.VIBES_LOG_LEVEL ?? env.vibes_log_level ?? env.LOG_LEVEL ?? env.log_level ?? undefined;
116
+
117
+ return parseNamespaceSettings({
118
+ input: logSelectors,
119
+ defaultLevel: level
120
+ });
121
+ }
122
+
123
+ /**
124
+ * Check if a namespace matches a selector.
125
+ */
126
+ export function matchesSelector(namespace: string, selector: NamespaceSelector): boolean {
127
+ return selector.regex.test(namespace);
128
+ }
129
+
130
+ /**
131
+ * Check if a namespace is included by settings.
132
+ */
133
+ export function isNamespaceIncluded(namespace: string, settings: NamespaceSelectors): boolean {
134
+ const included =
135
+ settings.includes.length === 0 ||
136
+ settings.includes.some((selector) => matchesSelector(namespace, selector));
137
+ if (!included) return false;
138
+ return !settings.excludes.some((selector) => matchesSelector(namespace, selector));
139
+ }
140
+
141
+ /**
142
+ * Determine if a log entry should be emitted.
143
+ */
144
+ export function shouldLog({
145
+ namespace,
146
+ level,
147
+ settings
148
+ }: {
149
+ namespace: string;
150
+ level: LogLevel;
151
+ settings: NamespaceSettings;
152
+ }): boolean {
153
+ const defaultLevel = settings.defaultLevel ?? DEFAULT_LEVEL;
154
+ const levelIndex = LOG_LEVEL_ORDER[level];
155
+ const baselineIndex = LOG_LEVEL_ORDER[defaultLevel] ?? LOG_LEVEL_ORDER[DEFAULT_LEVEL];
156
+
157
+ if (levelIndex >= baselineIndex) {
158
+ return !settings.excludes.some((selector) => matchesSelector(namespace, selector));
159
+ }
160
+
161
+ return settings.includes.some((selector) => matchesSelector(namespace, selector));
162
+ }
163
+
164
+ /**
165
+ * Default namespace settings.
166
+ */
167
+ export const defaultNamespaceSettings: NamespaceSettings = {
168
+ includes: [],
169
+ excludes: [],
170
+ defaultLevel: DEFAULT_LEVEL
171
+ };
172
+
173
+ /**
174
+ * Global active namespace settings.
175
+ * Updated from environment or explicit configuration.
176
+ *
177
+ * Initialization is lazy: defaults are used until explicitly configured
178
+ * via updateNamespaceSettings(). The logging-fs plugin initializes
179
+ * settings from the host environment at startup automatically.
180
+ */
181
+ let activeNamespaceSettings: NamespaceSettings = defaultNamespaceSettings;
182
+
183
+ /**
184
+ * Update the active namespace settings.
185
+ */
186
+ export function updateNamespaceSettings(settings: NamespaceSettings): void {
187
+ activeNamespaceSettings = settings;
188
+ }
189
+
190
+ /**
191
+ * Get the current active namespace settings.
192
+ */
193
+ export function getNamespaceSettings(): NamespaceSettings {
194
+ return activeNamespaceSettings;
195
+ }
@@ -0,0 +1,21 @@
1
+ export function parseSize(size: string | undefined): number {
2
+ if (!size) return 10 * 1024 * 1024;
3
+ const units: Record<string, number> = { B: 1, KB: 1024, MB: 1024 ** 2, GB: 1024 ** 3 };
4
+ const match = size.match(/^(\d+(?:\.\d+)?)\s*(B|KB|MB|GB)$/i);
5
+ if (!match) return 10 * 1024 * 1024;
6
+ return Math.floor(parseFloat(match[1]) * (units[match[2].toUpperCase()] ?? 1));
7
+ }
8
+
9
+ export function parseDuration(duration: string | undefined): number {
10
+ if (!duration) return 7 * 24 * 60 * 60 * 1000;
11
+ const units: Record<string, number> = {
12
+ s: 1000,
13
+ m: 60 * 1000,
14
+ h: 60 * 60 * 1000,
15
+ d: 24 * 60 * 60 * 1000,
16
+ w: 7 * 24 * 60 * 60 * 1000
17
+ };
18
+ const match = duration.match(/^(\d+)\s*(s|m|h|d|w)$/i);
19
+ if (!match) return 7 * 24 * 60 * 60 * 1000;
20
+ return parseInt(match[1], 10) * (units[match[2].toLowerCase()] ?? 1);
21
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Core Logger Types
3
+ *
4
+ * Interfaces for logger instances and factories.
5
+ */
6
+
7
+ import type {
8
+ LogLevel,
9
+ LogContext,
10
+ LoggerChildOptions,
11
+ RequestLogContext,
12
+ JobLogContext,
13
+ PerformanceTracker,
14
+ PerformanceTrackerParams
15
+ } from '../schemas/entry.ts';
16
+ import type { SinkImplementation } from '../kinds/sink.ts';
17
+
18
+ /**
19
+ * Base logger interface.
20
+ */
21
+ export interface Logger {
22
+ debug(message: string, context?: unknown): void;
23
+ info(message: string, context?: unknown): void;
24
+ warn(message: string, context?: unknown): void;
25
+ error(message: string, context?: unknown): void;
26
+ child?(options: LoggerChildOptions): Logger;
27
+ namespace?: string;
28
+ }
29
+
30
+ /**
31
+ * Extended runtime logger with context helpers.
32
+ */
33
+ export interface RuntimeLogger extends Logger {
34
+ /** Create a child logger with additional context */
35
+ child(options: LoggerChildOptions): RuntimeLogger;
36
+ /** Add arbitrary context to this logger */
37
+ withContext(context: LogContext): RuntimeLogger;
38
+ /** Add request-specific context */
39
+ withRequestContext(context: RequestLogContext): RuntimeLogger;
40
+ /** Add job-specific context */
41
+ withJobContext(context: JobLogContext): RuntimeLogger;
42
+ /** Create a performance tracker for timing operations */
43
+ performanceTracker(params: PerformanceTrackerParams): PerformanceTracker;
44
+ /** Logger namespace */
45
+ namespace: string;
46
+ /** Full namespace path (including parent namespaces) */
47
+ fullNamespace: string;
48
+ }
49
+
50
+ /**
51
+ * Runtime type identifier.
52
+ */
53
+ export type Runtime = 'server' | 'cli' | 'worker' | 'browser' | 'mcp';
54
+
55
+ /**
56
+ * Options for creating a runtime logger.
57
+ */
58
+ export interface RuntimeLoggerOptions {
59
+ /** Base namespace (e.g., 'vibes', 'pm') */
60
+ namespace: string;
61
+ /** Runtime environment */
62
+ runtime?: Runtime;
63
+ /** Override default log level */
64
+ level?: LogLevel;
65
+ /** Static metadata added to all entries */
66
+ staticMetadata?: LogContext;
67
+ /** Custom sink IDs for runtime resolution */
68
+ sinks?: string[];
69
+ /** Direct sink implementations (bypasses runtime resolution) */
70
+ sinkImpls?: SinkImplementation[];
71
+ }
72
+
73
+ /**
74
+ * Internal logger configuration.
75
+ */
76
+ export interface RuntimeLoggerConfig {
77
+ namespace: string;
78
+ fullNamespace: string;
79
+ runtime: Runtime;
80
+ staticMetadata: LogContext;
81
+ sinkIds: string[];
82
+ }