@vibesdotdev/logging 0.0.2 → 1.0.0-rc.4

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 (699) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +101 -8
  3. package/dist/audit/audit-retention.job.descriptor.d.ts +60 -0
  4. package/dist/audit/audit-retention.job.descriptor.d.ts.map +1 -0
  5. package/dist/audit/audit-retention.job.descriptor.js +42 -0
  6. package/dist/audit/audit-retention.job.descriptor.js.map +1 -0
  7. package/dist/audit/audit-retention.job.impl.d.ts +23 -0
  8. package/dist/audit/audit-retention.job.impl.d.ts.map +1 -0
  9. package/dist/audit/audit-retention.job.impl.js +24 -0
  10. package/dist/audit/audit-retention.job.impl.js.map +1 -0
  11. package/dist/audit/audit.descriptor.d.ts +6 -0
  12. package/dist/audit/audit.descriptor.d.ts.map +1 -1
  13. package/dist/audit/audit.descriptor.js +72 -5
  14. package/dist/audit/audit.descriptor.js.map +1 -1
  15. package/dist/audit/audit.storage.schema.d.ts +3 -3
  16. package/dist/audit/index.d.ts +3 -1
  17. package/dist/audit/index.d.ts.map +1 -1
  18. package/dist/audit/index.js +4 -1
  19. package/dist/audit/index.js.map +1 -1
  20. package/dist/audit/scheduled-audit-retention.d.ts +39 -0
  21. package/dist/audit/scheduled-audit-retention.d.ts.map +1 -0
  22. package/dist/audit/scheduled-audit-retention.js +38 -0
  23. package/dist/audit/scheduled-audit-retention.js.map +1 -0
  24. package/dist/browser/capture-error.d.ts +66 -0
  25. package/dist/browser/capture-error.d.ts.map +1 -0
  26. package/dist/browser/capture-error.js +82 -0
  27. package/dist/browser/capture-error.js.map +1 -0
  28. package/dist/browser/index.d.ts +11 -0
  29. package/dist/browser/index.d.ts.map +1 -0
  30. package/dist/browser/index.js +16 -0
  31. package/dist/browser/index.js.map +1 -0
  32. package/dist/browser/logging-browser.plugin.d.ts +9 -0
  33. package/dist/browser/logging-browser.plugin.d.ts.map +1 -0
  34. package/dist/browser/logging-browser.plugin.js +26 -0
  35. package/dist/browser/logging-browser.plugin.js.map +1 -0
  36. package/dist/browser/plugin.d.ts +2 -0
  37. package/dist/browser/plugin.d.ts.map +1 -0
  38. package/dist/browser/plugin.js +2 -0
  39. package/dist/browser/plugin.js.map +1 -0
  40. package/dist/browser/read-errors.d.ts +26 -0
  41. package/dist/browser/read-errors.d.ts.map +1 -0
  42. package/dist/browser/read-errors.js +38 -0
  43. package/dist/browser/read-errors.js.map +1 -0
  44. package/dist/browser/sinks/browser/browser.browser.descriptor.d.ts +10 -0
  45. package/dist/browser/sinks/browser/browser.browser.descriptor.d.ts.map +1 -0
  46. package/dist/browser/sinks/browser/browser.browser.descriptor.js +23 -0
  47. package/dist/browser/sinks/browser/browser.browser.descriptor.js.map +1 -0
  48. package/dist/browser/sinks/browser/browser.impl.browser.d.ts +83 -0
  49. package/dist/browser/sinks/browser/browser.impl.browser.d.ts.map +1 -0
  50. package/dist/browser/sinks/browser/browser.impl.browser.js +247 -0
  51. package/dist/browser/sinks/browser/browser.impl.browser.js.map +1 -0
  52. package/dist/cli/failures.d.ts +29 -0
  53. package/dist/cli/failures.d.ts.map +1 -0
  54. package/dist/cli/failures.js +44 -0
  55. package/dist/cli/failures.js.map +1 -0
  56. package/dist/cli/flags.d.ts +24 -0
  57. package/dist/cli/flags.d.ts.map +1 -0
  58. package/dist/cli/flags.js +56 -0
  59. package/dist/cli/flags.js.map +1 -0
  60. package/dist/cli/log-line.d.ts +23 -0
  61. package/dist/cli/log-line.d.ts.map +1 -0
  62. package/dist/cli/log-line.js +39 -0
  63. package/dist/cli/log-line.js.map +1 -0
  64. package/dist/cli/logging.logs.descriptor.d.ts +9 -0
  65. package/dist/cli/logging.logs.descriptor.d.ts.map +1 -0
  66. package/dist/cli/logging.logs.descriptor.js +16 -0
  67. package/dist/cli/logging.logs.descriptor.js.map +1 -0
  68. package/dist/cli/logs.audit.cleanup.descriptor.d.ts +7 -0
  69. package/dist/cli/logs.audit.cleanup.descriptor.d.ts.map +1 -0
  70. package/dist/cli/logs.audit.cleanup.descriptor.js +21 -0
  71. package/dist/cli/logs.audit.cleanup.descriptor.js.map +1 -0
  72. package/dist/cli/logs.audit.cleanup.impl.d.ts +14 -0
  73. package/dist/cli/logs.audit.cleanup.impl.d.ts.map +1 -0
  74. package/dist/cli/logs.audit.cleanup.impl.js +60 -0
  75. package/dist/cli/logs.audit.cleanup.impl.js.map +1 -0
  76. package/dist/cli/logs.audit.descriptor.d.ts +9 -0
  77. package/dist/cli/logs.audit.descriptor.d.ts.map +1 -0
  78. package/dist/cli/logs.audit.descriptor.js +41 -0
  79. package/dist/cli/logs.audit.descriptor.js.map +1 -0
  80. package/dist/cli/logs.audit.group.descriptor.d.ts +7 -0
  81. package/dist/cli/logs.audit.group.descriptor.d.ts.map +1 -0
  82. package/dist/cli/logs.audit.group.descriptor.js +15 -0
  83. package/dist/cli/logs.audit.group.descriptor.js.map +1 -0
  84. package/dist/cli/logs.audit.impl.d.ts +19 -0
  85. package/dist/cli/logs.audit.impl.d.ts.map +1 -0
  86. package/dist/cli/logs.audit.impl.js +83 -0
  87. package/dist/cli/logs.audit.impl.js.map +1 -0
  88. package/dist/cli/logs.descriptor.d.ts +1 -8
  89. package/dist/cli/logs.descriptor.d.ts.map +1 -1
  90. package/dist/cli/logs.descriptor.js +1 -15
  91. package/dist/cli/logs.descriptor.js.map +1 -1
  92. package/dist/cli/logs.list.impl.d.ts +4 -1
  93. package/dist/cli/logs.list.impl.d.ts.map +1 -1
  94. package/dist/cli/logs.list.impl.js +60 -63
  95. package/dist/cli/logs.list.impl.js.map +1 -1
  96. package/dist/cli/logs.rotate.descriptor.d.ts.map +1 -1
  97. package/dist/cli/logs.rotate.descriptor.js +7 -3
  98. package/dist/cli/logs.rotate.descriptor.js.map +1 -1
  99. package/dist/cli/logs.rotate.impl.d.ts +3 -1
  100. package/dist/cli/logs.rotate.impl.d.ts.map +1 -1
  101. package/dist/cli/logs.rotate.impl.js +72 -33
  102. package/dist/cli/logs.rotate.impl.js.map +1 -1
  103. package/dist/cli/logs.search.descriptor.d.ts.map +1 -1
  104. package/dist/cli/logs.search.descriptor.js +4 -0
  105. package/dist/cli/logs.search.descriptor.js.map +1 -1
  106. package/dist/cli/logs.search.impl.d.ts +3 -1
  107. package/dist/cli/logs.search.impl.d.ts.map +1 -1
  108. package/dist/cli/logs.search.impl.js +114 -108
  109. package/dist/cli/logs.search.impl.js.map +1 -1
  110. package/dist/cli/logs.tail.descriptor.d.ts.map +1 -1
  111. package/dist/cli/logs.tail.descriptor.js +2 -1
  112. package/dist/cli/logs.tail.descriptor.js.map +1 -1
  113. package/dist/cli/logs.tail.impl.d.ts +4 -2
  114. package/dist/cli/logs.tail.impl.d.ts.map +1 -1
  115. package/dist/cli/logs.tail.impl.js +84 -57
  116. package/dist/cli/logs.tail.impl.js.map +1 -1
  117. package/dist/cli/logs.view.impl.d.ts +2 -6
  118. package/dist/cli/logs.view.impl.d.ts.map +1 -1
  119. package/dist/cli/logs.view.impl.js +32 -50
  120. package/dist/cli/logs.view.impl.js.map +1 -1
  121. package/dist/cli/output.d.ts +29 -0
  122. package/dist/cli/output.d.ts.map +1 -0
  123. package/dist/cli/output.js +29 -0
  124. package/dist/cli/output.js.map +1 -0
  125. package/dist/{logging.cli.plugin.d.ts → cli/plugin.d.ts} +3 -3
  126. package/dist/cli/plugin.d.ts.map +1 -0
  127. package/dist/cli/plugin.js +45 -0
  128. package/dist/cli/plugin.js.map +1 -0
  129. package/dist/cli/resolve-output.d.ts +25 -0
  130. package/dist/cli/resolve-output.d.ts.map +1 -0
  131. package/dist/cli/resolve-output.js +75 -0
  132. package/dist/cli/resolve-output.js.map +1 -0
  133. package/dist/cli/types.d.ts +13 -5
  134. package/dist/cli/types.d.ts.map +1 -1
  135. package/dist/cli/types.js +3 -3
  136. package/dist/client/logging-client.d.ts +31 -0
  137. package/dist/client/logging-client.d.ts.map +1 -0
  138. package/dist/client/logging-client.js +44 -0
  139. package/dist/client/logging-client.js.map +1 -0
  140. package/dist/config/file-rotation.d.ts +11 -0
  141. package/dist/config/file-rotation.d.ts.map +1 -0
  142. package/dist/config/file-rotation.js +18 -0
  143. package/dist/config/file-rotation.js.map +1 -0
  144. package/dist/config/load-config.d.ts +7 -0
  145. package/dist/config/load-config.d.ts.map +1 -0
  146. package/dist/config/load-config.js +68 -0
  147. package/dist/config/load-config.js.map +1 -0
  148. package/dist/config/logging.config.descriptor.d.ts +350 -0
  149. package/dist/config/logging.config.descriptor.d.ts.map +1 -0
  150. package/dist/config/logging.config.descriptor.js +208 -0
  151. package/dist/config/logging.config.descriptor.js.map +1 -0
  152. package/dist/config/otel-service.d.ts +9 -0
  153. package/dist/config/otel-service.d.ts.map +1 -0
  154. package/dist/config/otel-service.js +18 -0
  155. package/dist/config/otel-service.js.map +1 -0
  156. package/dist/contexts/bootstrap.plugin.d.ts +3 -0
  157. package/dist/contexts/bootstrap.plugin.d.ts.map +1 -0
  158. package/dist/contexts/bootstrap.plugin.js +13 -0
  159. package/dist/contexts/bootstrap.plugin.js.map +1 -0
  160. package/dist/contexts/fallback-logger.d.ts +7 -2
  161. package/dist/contexts/fallback-logger.d.ts.map +1 -1
  162. package/dist/contexts/fallback-logger.js +73 -46
  163. package/dist/contexts/fallback-logger.js.map +1 -1
  164. package/dist/contexts/index.d.ts +2 -2
  165. package/dist/contexts/index.d.ts.map +1 -1
  166. package/dist/contexts/index.js +2 -3
  167. package/dist/contexts/index.js.map +1 -1
  168. package/dist/contexts/logger.d.ts +38 -14
  169. package/dist/contexts/logger.d.ts.map +1 -1
  170. package/dist/contexts/logger.js +241 -62
  171. package/dist/contexts/logger.js.map +1 -1
  172. package/dist/core/attempt.d.ts +30 -0
  173. package/dist/core/attempt.d.ts.map +1 -0
  174. package/dist/core/attempt.js +44 -0
  175. package/dist/core/attempt.js.map +1 -0
  176. package/dist/core/emission-window.d.ts +34 -0
  177. package/dist/core/emission-window.d.ts.map +1 -0
  178. package/dist/core/emission-window.js +25 -0
  179. package/dist/core/emission-window.js.map +1 -0
  180. package/dist/core/endpoint.d.ts +54 -0
  181. package/dist/core/endpoint.d.ts.map +1 -0
  182. package/dist/core/endpoint.js +256 -0
  183. package/dist/core/endpoint.js.map +1 -0
  184. package/dist/core/entry-context.d.ts +106 -0
  185. package/dist/core/entry-context.d.ts.map +1 -0
  186. package/dist/core/entry-context.js +150 -0
  187. package/dist/core/entry-context.js.map +1 -0
  188. package/dist/core/index.d.ts +4 -0
  189. package/dist/core/index.d.ts.map +1 -1
  190. package/dist/core/index.js +5 -0
  191. package/dist/core/index.js.map +1 -1
  192. package/dist/core/logger.d.ts +6 -1
  193. package/dist/core/logger.d.ts.map +1 -1
  194. package/dist/core/logger.js +133 -67
  195. package/dist/core/logger.js.map +1 -1
  196. package/dist/core/namespace.d.ts +5 -2
  197. package/dist/core/namespace.d.ts.map +1 -1
  198. package/dist/core/namespace.js +15 -7
  199. package/dist/core/namespace.js.map +1 -1
  200. package/dist/core/normalize.d.ts +31 -0
  201. package/dist/core/normalize.d.ts.map +1 -0
  202. package/dist/core/normalize.js +67 -0
  203. package/dist/core/normalize.js.map +1 -0
  204. package/dist/core/otlp-headers.d.ts +53 -0
  205. package/dist/core/otlp-headers.d.ts.map +1 -0
  206. package/dist/core/otlp-headers.js +64 -0
  207. package/dist/core/otlp-headers.js.map +1 -0
  208. package/dist/core/otlp-partial-success.d.ts +48 -0
  209. package/dist/core/otlp-partial-success.d.ts.map +1 -0
  210. package/dist/core/otlp-partial-success.js +55 -0
  211. package/dist/core/otlp-partial-success.js.map +1 -0
  212. package/dist/core/outcome.d.ts +21 -0
  213. package/dist/core/outcome.d.ts.map +1 -0
  214. package/dist/core/outcome.js +24 -0
  215. package/dist/core/outcome.js.map +1 -0
  216. package/dist/core/output-resources.d.ts +15 -0
  217. package/dist/core/output-resources.d.ts.map +1 -0
  218. package/dist/core/output-resources.js +51 -0
  219. package/dist/core/output-resources.js.map +1 -0
  220. package/dist/core/parsing.d.ts.map +1 -1
  221. package/dist/core/parsing.js +13 -10
  222. package/dist/core/parsing.js.map +1 -1
  223. package/dist/core/redact.d.ts +161 -0
  224. package/dist/core/redact.d.ts.map +1 -0
  225. package/dist/core/redact.js +581 -0
  226. package/dist/core/redact.js.map +1 -0
  227. package/dist/core/root-identity.d.ts +13 -0
  228. package/dist/core/root-identity.d.ts.map +1 -0
  229. package/dist/core/root-identity.js +23 -0
  230. package/dist/core/root-identity.js.map +1 -0
  231. package/dist/core/types.d.ts +5 -4
  232. package/dist/core/types.d.ts.map +1 -1
  233. package/dist/docs/cli.docs.descriptor.d.ts +4 -0
  234. package/dist/docs/cli.docs.descriptor.d.ts.map +1 -0
  235. package/dist/docs/cli.docs.descriptor.js +97 -0
  236. package/dist/docs/cli.docs.descriptor.js.map +1 -0
  237. package/dist/docs/index.d.ts +7 -0
  238. package/dist/docs/index.d.ts.map +1 -0
  239. package/dist/docs/index.js +7 -0
  240. package/dist/docs/index.js.map +1 -0
  241. package/dist/docs/levels.docs.descriptor.d.ts +1 -1
  242. package/dist/docs/levels.docs.descriptor.d.ts.map +1 -1
  243. package/dist/docs/levels.docs.descriptor.js +112 -246
  244. package/dist/docs/levels.docs.descriptor.js.map +1 -1
  245. package/dist/docs/logging.docs.descriptor.d.ts +4 -0
  246. package/dist/docs/logging.docs.descriptor.d.ts.map +1 -0
  247. package/dist/docs/logging.docs.descriptor.js +105 -0
  248. package/dist/docs/logging.docs.descriptor.js.map +1 -0
  249. package/dist/docs/observability.docs.descriptor.d.ts +4 -0
  250. package/dist/docs/observability.docs.descriptor.d.ts.map +1 -0
  251. package/dist/docs/observability.docs.descriptor.js +152 -0
  252. package/dist/docs/observability.docs.descriptor.js.map +1 -0
  253. package/dist/docs/structured.docs.descriptor.d.ts +1 -1
  254. package/dist/docs/structured.docs.descriptor.d.ts.map +1 -1
  255. package/dist/docs/structured.docs.descriptor.js +111 -267
  256. package/dist/docs/structured.docs.descriptor.js.map +1 -1
  257. package/dist/docs/transports.docs.descriptor.d.ts +1 -1
  258. package/dist/docs/transports.docs.descriptor.d.ts.map +1 -1
  259. package/dist/docs/transports.docs.descriptor.js +129 -344
  260. package/dist/docs/transports.docs.descriptor.js.map +1 -1
  261. package/dist/formatters/json/json.impl.d.ts +1 -1
  262. package/dist/formatters/json/json.impl.d.ts.map +1 -1
  263. package/dist/formatters/json/json.impl.js +3 -2
  264. package/dist/formatters/json/json.impl.js.map +1 -1
  265. package/dist/formatters/json5/json5.impl.d.ts +1 -1
  266. package/dist/formatters/json5/json5.impl.d.ts.map +1 -1
  267. package/dist/formatters/json5/json5.impl.js +3 -2
  268. package/dist/formatters/json5/json5.impl.js.map +1 -1
  269. package/dist/formatters/jsonl/jsonl.impl.d.ts +1 -1
  270. package/dist/formatters/jsonl/jsonl.impl.d.ts.map +1 -1
  271. package/dist/formatters/jsonl/jsonl.impl.js +3 -2
  272. package/dist/formatters/jsonl/jsonl.impl.js.map +1 -1
  273. package/dist/formatters/pretty/{pretty.impl.cli.d.ts → pretty.impl.consumer.d.ts} +1 -1
  274. package/dist/formatters/pretty/pretty.impl.consumer.d.ts.map +1 -0
  275. package/dist/formatters/pretty/{pretty.impl.cli.js → pretty.impl.consumer.js} +1 -1
  276. package/dist/formatters/pretty/pretty.impl.consumer.js.map +1 -0
  277. package/dist/host-files/file-audit.base.d.ts +39 -0
  278. package/dist/host-files/file-audit.base.d.ts.map +1 -0
  279. package/dist/host-files/file-audit.base.js +255 -0
  280. package/dist/host-files/file-audit.base.js.map +1 -0
  281. package/dist/host-files/file-output.base.d.ts +84 -0
  282. package/dist/host-files/file-output.base.d.ts.map +1 -0
  283. package/dist/host-files/file-output.base.js +401 -0
  284. package/dist/host-files/file-output.base.js.map +1 -0
  285. package/dist/host-files/file-output.factory.base.d.ts +31 -0
  286. package/dist/host-files/file-output.factory.base.d.ts.map +1 -0
  287. package/dist/host-files/file-output.factory.base.js +82 -0
  288. package/dist/host-files/file-output.factory.base.js.map +1 -0
  289. package/dist/host-files/file-output.read.base.d.ts +7 -0
  290. package/dist/host-files/file-output.read.base.d.ts.map +1 -0
  291. package/dist/host-files/file-output.read.base.js +229 -0
  292. package/dist/host-files/file-output.read.base.js.map +1 -0
  293. package/dist/host-files/file-sink.base.d.ts +22 -0
  294. package/dist/host-files/file-sink.base.d.ts.map +1 -0
  295. package/dist/host-files/file-sink.base.js +56 -0
  296. package/dist/host-files/file-sink.base.js.map +1 -0
  297. package/dist/host-files/host-file-logging.plugin.d.ts +11 -0
  298. package/dist/host-files/host-file-logging.plugin.d.ts.map +1 -0
  299. package/dist/host-files/host-file-logging.plugin.js +63 -0
  300. package/dist/host-files/host-file-logging.plugin.js.map +1 -0
  301. package/dist/host-files/index.d.ts +19 -0
  302. package/dist/host-files/index.d.ts.map +1 -0
  303. package/dist/host-files/index.js +18 -0
  304. package/dist/host-files/index.js.map +1 -0
  305. package/dist/host-files/rotate-appended-file.base.d.ts +35 -0
  306. package/dist/host-files/rotate-appended-file.base.d.ts.map +1 -0
  307. package/dist/host-files/rotate-appended-file.base.js +104 -0
  308. package/dist/host-files/rotate-appended-file.base.js.map +1 -0
  309. package/dist/host.d.ts +38 -0
  310. package/dist/host.d.ts.map +1 -0
  311. package/dist/host.js +39 -0
  312. package/dist/host.js.map +1 -0
  313. package/dist/index.d.ts +24 -13
  314. package/dist/index.d.ts.map +1 -1
  315. package/dist/index.js +27 -23
  316. package/dist/index.js.map +1 -1
  317. package/dist/kinds/audit.d.ts +40 -8
  318. package/dist/kinds/audit.d.ts.map +1 -1
  319. package/dist/kinds/audit.js +82 -20
  320. package/dist/kinds/audit.js.map +1 -1
  321. package/dist/kinds/contexts.d.ts +4 -3
  322. package/dist/kinds/contexts.d.ts.map +1 -1
  323. package/dist/kinds/file-output.d.ts +56 -0
  324. package/dist/kinds/file-output.d.ts.map +1 -0
  325. package/dist/kinds/file-output.js +11 -0
  326. package/dist/kinds/file-output.js.map +1 -0
  327. package/dist/kinds/formatter.d.ts +4 -6
  328. package/dist/kinds/formatter.d.ts.map +1 -1
  329. package/dist/kinds/formatter.js +4 -3
  330. package/dist/kinds/formatter.js.map +1 -1
  331. package/dist/kinds/index.d.ts +3 -3
  332. package/dist/kinds/index.d.ts.map +1 -1
  333. package/dist/kinds/index.js +3 -3
  334. package/dist/kinds/index.js.map +1 -1
  335. package/dist/kinds/logger.d.ts +4 -4
  336. package/dist/kinds/logger.d.ts.map +1 -1
  337. package/dist/kinds/logger.impl.d.ts +40 -13
  338. package/dist/kinds/logger.impl.d.ts.map +1 -1
  339. package/dist/kinds/logger.impl.js +179 -87
  340. package/dist/kinds/logger.impl.js.map +1 -1
  341. package/dist/kinds/logger.js +21 -11
  342. package/dist/kinds/logger.js.map +1 -1
  343. package/dist/kinds/logger.utils.d.ts +31 -4
  344. package/dist/kinds/logger.utils.d.ts.map +1 -1
  345. package/dist/kinds/logger.utils.js +58 -18
  346. package/dist/kinds/logger.utils.js.map +1 -1
  347. package/dist/kinds/output.d.ts +5 -11
  348. package/dist/kinds/output.d.ts.map +1 -1
  349. package/dist/kinds/output.impl.d.ts +9 -7
  350. package/dist/kinds/output.impl.d.ts.map +1 -1
  351. package/dist/kinds/output.impl.js +51 -29
  352. package/dist/kinds/output.impl.js.map +1 -1
  353. package/dist/kinds/output.js +10 -5
  354. package/dist/kinds/output.js.map +1 -1
  355. package/dist/kinds/output.types.d.ts +26 -7
  356. package/dist/kinds/output.types.d.ts.map +1 -1
  357. package/dist/kinds/sink.d.ts +6 -5
  358. package/dist/kinds/sink.d.ts.map +1 -1
  359. package/dist/kinds/sink.js +14 -7
  360. package/dist/kinds/sink.js.map +1 -1
  361. package/dist/logger.context.descriptor.d.ts +15 -1
  362. package/dist/logger.context.descriptor.d.ts.map +1 -1
  363. package/dist/logger.context.descriptor.js +1 -1
  364. package/dist/logger.context.descriptor.js.map +1 -1
  365. package/dist/logging.consumer.plugin.d.ts +4 -0
  366. package/dist/logging.consumer.plugin.d.ts.map +1 -0
  367. package/dist/logging.consumer.plugin.js +17 -0
  368. package/dist/logging.consumer.plugin.js.map +1 -0
  369. package/dist/logging.plugin.d.ts +3 -3
  370. package/dist/logging.plugin.d.ts.map +1 -1
  371. package/dist/logging.plugin.js +81 -42
  372. package/dist/logging.plugin.js.map +1 -1
  373. package/dist/observability/building-host.d.ts +11 -0
  374. package/dist/observability/building-host.d.ts.map +1 -0
  375. package/dist/observability/building-host.js +11 -0
  376. package/dist/observability/building-host.js.map +1 -0
  377. package/dist/observability/config.d.ts +36 -0
  378. package/dist/observability/config.d.ts.map +1 -0
  379. package/dist/observability/config.js +46 -0
  380. package/dist/observability/config.js.map +1 -0
  381. package/dist/observability/http/instrumented-fetch.d.ts +19 -0
  382. package/dist/observability/http/instrumented-fetch.d.ts.map +1 -0
  383. package/dist/observability/http/instrumented-fetch.js +175 -0
  384. package/dist/observability/http/instrumented-fetch.js.map +1 -0
  385. package/dist/observability/index.d.ts +8 -0
  386. package/dist/observability/index.d.ts.map +1 -0
  387. package/dist/observability/index.js +10 -0
  388. package/dist/observability/index.js.map +1 -0
  389. package/dist/observability/lifecycle.d.ts +18 -0
  390. package/dist/observability/lifecycle.d.ts.map +1 -0
  391. package/dist/observability/lifecycle.js +44 -0
  392. package/dist/observability/lifecycle.js.map +1 -0
  393. package/dist/observability/observability/error-tracker.d.ts +43 -0
  394. package/dist/observability/observability/error-tracker.d.ts.map +1 -0
  395. package/dist/observability/observability/error-tracker.js +130 -0
  396. package/dist/observability/observability/error-tracker.js.map +1 -0
  397. package/dist/observability/should-keep-log.d.ts +8 -0
  398. package/dist/observability/should-keep-log.d.ts.map +1 -0
  399. package/dist/observability/should-keep-log.js +10 -0
  400. package/dist/observability/should-keep-log.js.map +1 -0
  401. package/dist/observability/telemetry/otel.d.ts +47 -0
  402. package/dist/observability/telemetry/otel.d.ts.map +1 -0
  403. package/dist/observability/telemetry/otel.js +542 -0
  404. package/dist/observability/telemetry/otel.js.map +1 -0
  405. package/dist/observability/telemetry/partial-success.d.ts +35 -0
  406. package/dist/observability/telemetry/partial-success.d.ts.map +1 -0
  407. package/dist/observability/telemetry/partial-success.js +94 -0
  408. package/dist/observability/telemetry/partial-success.js.map +1 -0
  409. package/dist/observability/telemetry/sdk-lifecycle.d.ts +37 -0
  410. package/dist/observability/telemetry/sdk-lifecycle.d.ts.map +1 -0
  411. package/dist/observability/telemetry/sdk-lifecycle.js +132 -0
  412. package/dist/observability/telemetry/sdk-lifecycle.js.map +1 -0
  413. package/dist/observability/telemetry/telemetry-root.d.ts +78 -0
  414. package/dist/observability/telemetry/telemetry-root.d.ts.map +1 -0
  415. package/dist/observability/telemetry/telemetry-root.js +79 -0
  416. package/dist/observability/telemetry/telemetry-root.js.map +1 -0
  417. package/dist/observability/telemetry-instrumentation.d.ts +76 -0
  418. package/dist/observability/telemetry-instrumentation.d.ts.map +1 -0
  419. package/dist/observability/telemetry-instrumentation.js +69 -0
  420. package/dist/observability/telemetry-instrumentation.js.map +1 -0
  421. package/dist/otel/index.d.ts +9 -0
  422. package/dist/otel/index.d.ts.map +1 -0
  423. package/dist/otel/index.js +12 -0
  424. package/dist/otel/index.js.map +1 -0
  425. package/dist/otel/logging-otel.plugin.d.ts +11 -0
  426. package/dist/otel/logging-otel.plugin.d.ts.map +1 -0
  427. package/dist/otel/logging-otel.plugin.js +27 -0
  428. package/dist/otel/logging-otel.plugin.js.map +1 -0
  429. package/dist/otel/sinks/otel/otel.descriptor.d.ts +10 -0
  430. package/dist/otel/sinks/otel/otel.descriptor.d.ts.map +1 -0
  431. package/dist/otel/sinks/otel/otel.descriptor.js +23 -0
  432. package/dist/otel/sinks/otel/otel.descriptor.js.map +1 -0
  433. package/dist/otel/sinks/otel/otel.impl.d.ts +47 -0
  434. package/dist/otel/sinks/otel/otel.impl.d.ts.map +1 -0
  435. package/dist/otel/sinks/otel/otel.impl.js +202 -0
  436. package/dist/otel/sinks/otel/otel.impl.js.map +1 -0
  437. package/dist/otel/sinks/otel/otlp-log-exporter.d.ts +76 -0
  438. package/dist/otel/sinks/otel/otlp-log-exporter.d.ts.map +1 -0
  439. package/dist/otel/sinks/otel/otlp-log-exporter.js +178 -0
  440. package/dist/otel/sinks/otel/otlp-log-exporter.js.map +1 -0
  441. package/dist/outputs/file/file.outputs.descriptor.d.ts +10 -0
  442. package/dist/outputs/file/file.outputs.descriptor.d.ts.map +1 -0
  443. package/dist/outputs/file/file.outputs.descriptor.js +32 -0
  444. package/dist/outputs/file/file.outputs.descriptor.js.map +1 -0
  445. package/dist/outputs/remote/remote.descriptor.d.ts +1 -1
  446. package/dist/outputs/remote/remote.descriptor.d.ts.map +1 -1
  447. package/dist/outputs/remote/remote.descriptor.js +1 -2
  448. package/dist/outputs/remote/remote.descriptor.js.map +1 -1
  449. package/dist/outputs/remote/remote.factory.d.ts +9 -0
  450. package/dist/outputs/remote/remote.factory.d.ts.map +1 -0
  451. package/dist/outputs/remote/remote.factory.js +16 -0
  452. package/dist/outputs/remote/remote.factory.js.map +1 -0
  453. package/dist/outputs/remote/remote.impl.d.ts +40 -4
  454. package/dist/outputs/remote/remote.impl.d.ts.map +1 -1
  455. package/dist/outputs/remote/remote.impl.js +224 -99
  456. package/dist/outputs/remote/remote.impl.js.map +1 -1
  457. package/dist/outputs.context.descriptor.d.ts +15 -1
  458. package/dist/outputs.context.descriptor.d.ts.map +1 -1
  459. package/dist/outputs.context.descriptor.js +1 -1
  460. package/dist/outputs.context.descriptor.js.map +1 -1
  461. package/dist/outputs.context.impl.d.ts +2 -1
  462. package/dist/outputs.context.impl.d.ts.map +1 -1
  463. package/dist/outputs.context.impl.js +17 -9
  464. package/dist/outputs.context.impl.js.map +1 -1
  465. package/dist/paths.d.ts +24 -3
  466. package/dist/paths.d.ts.map +1 -1
  467. package/dist/paths.js +63 -3
  468. package/dist/paths.js.map +1 -1
  469. package/dist/rotation/rotate-appended-file.d.ts +15 -0
  470. package/dist/rotation/rotate-appended-file.d.ts.map +1 -0
  471. package/dist/rotation/rotate-appended-file.js +20 -0
  472. package/dist/rotation/rotate-appended-file.js.map +1 -0
  473. package/dist/rotation/rotation-policy.d.ts +19 -0
  474. package/dist/rotation/rotation-policy.d.ts.map +1 -0
  475. package/dist/rotation/rotation-policy.js +37 -0
  476. package/dist/rotation/rotation-policy.js.map +1 -0
  477. package/dist/schemas/audit.d.ts +25 -7
  478. package/dist/schemas/audit.d.ts.map +1 -1
  479. package/dist/schemas/audit.js +10 -4
  480. package/dist/schemas/audit.js.map +1 -1
  481. package/dist/schemas/entry.d.ts +11 -5
  482. package/dist/schemas/entry.d.ts.map +1 -1
  483. package/dist/schemas/entry.js +3 -2
  484. package/dist/schemas/entry.js.map +1 -1
  485. package/dist/schemas/file-host.d.ts +86 -0
  486. package/dist/schemas/file-host.d.ts.map +1 -0
  487. package/dist/schemas/file-host.js +10 -0
  488. package/dist/schemas/file-host.js.map +1 -0
  489. package/dist/schemas/formatter.d.ts +11 -1
  490. package/dist/schemas/formatter.d.ts.map +1 -1
  491. package/dist/schemas/formatter.js +1 -1
  492. package/dist/schemas/formatter.js.map +1 -1
  493. package/dist/schemas/index.d.ts +3 -2
  494. package/dist/schemas/index.d.ts.map +1 -1
  495. package/dist/schemas/index.js +3 -2
  496. package/dist/schemas/index.js.map +1 -1
  497. package/dist/schemas/logger.d.ts +16 -1
  498. package/dist/schemas/logger.d.ts.map +1 -1
  499. package/dist/schemas/logger.js +6 -1
  500. package/dist/schemas/logger.js.map +1 -1
  501. package/dist/schemas/output-defaults.d.ts +44 -0
  502. package/dist/schemas/output-defaults.d.ts.map +1 -0
  503. package/dist/schemas/output-defaults.js +53 -0
  504. package/dist/schemas/output-defaults.js.map +1 -0
  505. package/dist/schemas/output.d.ts +25 -1
  506. package/dist/schemas/output.d.ts.map +1 -1
  507. package/dist/schemas/output.js +29 -2
  508. package/dist/schemas/output.js.map +1 -1
  509. package/dist/schemas/sink.d.ts +32 -1
  510. package/dist/schemas/sink.d.ts.map +1 -1
  511. package/dist/schemas/sink.js +17 -1
  512. package/dist/schemas/sink.js.map +1 -1
  513. package/dist/sinks/buffer/buffer.descriptor.js +1 -1
  514. package/dist/sinks/buffer/buffer.descriptor.js.map +1 -1
  515. package/dist/sinks/buffer/{buffer.impl.cli.d.ts → buffer.impl.d.ts} +3 -3
  516. package/dist/sinks/buffer/buffer.impl.d.ts.map +1 -0
  517. package/dist/sinks/buffer/buffer.impl.js +42 -0
  518. package/dist/sinks/buffer/buffer.impl.js.map +1 -0
  519. package/dist/sinks/console/console.descriptor.js +1 -1
  520. package/dist/sinks/console/console.descriptor.js.map +1 -1
  521. package/dist/sinks/console/console.impl.browser.d.ts +4 -3
  522. package/dist/sinks/console/console.impl.browser.d.ts.map +1 -1
  523. package/dist/sinks/console/console.impl.browser.js +11 -14
  524. package/dist/sinks/console/console.impl.browser.js.map +1 -1
  525. package/dist/sinks/console/{console.impl.cli.d.ts → console.impl.consumer.d.ts} +5 -4
  526. package/dist/sinks/console/console.impl.consumer.d.ts.map +1 -0
  527. package/dist/sinks/console/{console.impl.cli.js → console.impl.consumer.js} +16 -8
  528. package/dist/sinks/console/console.impl.consumer.js.map +1 -0
  529. package/dist/sinks/file/file.sinks.descriptor.d.ts +10 -0
  530. package/dist/sinks/file/file.sinks.descriptor.d.ts.map +1 -0
  531. package/dist/sinks/file/file.sinks.descriptor.js +23 -0
  532. package/dist/sinks/file/file.sinks.descriptor.js.map +1 -0
  533. package/dist/sinks/index.d.ts +1 -1
  534. package/dist/sinks/index.d.ts.map +1 -1
  535. package/dist/sinks/memory/memory.descriptor.d.ts +1 -1
  536. package/dist/sinks/memory/memory.descriptor.js +2 -2
  537. package/dist/sinks/memory/memory.descriptor.js.map +1 -1
  538. package/dist/sinks/memory/memory.impl.d.ts +5 -11
  539. package/dist/sinks/memory/memory.impl.d.ts.map +1 -1
  540. package/dist/sinks/memory/memory.impl.js +46 -21
  541. package/dist/sinks/memory/memory.impl.js.map +1 -1
  542. package/dist/sinks/stdout/stdout.descriptor.js +1 -1
  543. package/dist/sinks/stdout/stdout.descriptor.js.map +1 -1
  544. package/dist/sinks/stdout/{stdout.impl.cli.d.ts → stdout.impl.d.ts} +5 -4
  545. package/dist/sinks/stdout/stdout.impl.d.ts.map +1 -0
  546. package/dist/sinks/stdout/stdout.impl.js +29 -0
  547. package/dist/sinks/stdout/stdout.impl.js.map +1 -0
  548. package/dist/sinks.context.descriptor.d.ts +15 -1
  549. package/dist/sinks.context.descriptor.d.ts.map +1 -1
  550. package/dist/sinks.context.descriptor.js +1 -1
  551. package/dist/sinks.context.descriptor.js.map +1 -1
  552. package/dist/sinks.context.impl.d.ts +2 -1
  553. package/dist/sinks.context.impl.d.ts.map +1 -1
  554. package/dist/sinks.context.impl.js +17 -9
  555. package/dist/sinks.context.impl.js.map +1 -1
  556. package/dist/stdout-capture/mcp-frame.d.ts +23 -0
  557. package/dist/stdout-capture/mcp-frame.d.ts.map +1 -0
  558. package/dist/stdout-capture/mcp-frame.js +80 -0
  559. package/dist/stdout-capture/mcp-frame.js.map +1 -0
  560. package/dist/stdout-capture/stdout-capture.descriptor.d.ts +10 -0
  561. package/dist/stdout-capture/stdout-capture.descriptor.d.ts.map +1 -0
  562. package/dist/stdout-capture/stdout-capture.descriptor.js +17 -0
  563. package/dist/stdout-capture/stdout-capture.descriptor.js.map +1 -0
  564. package/dist/stdout-capture/stdout-capture.impl.d.ts +19 -0
  565. package/dist/stdout-capture/stdout-capture.impl.d.ts.map +1 -0
  566. package/dist/stdout-capture/stdout-capture.impl.js +49 -0
  567. package/dist/stdout-capture/stdout-capture.impl.js.map +1 -0
  568. package/dist/stdout-capture/stdout-capture.lease.d.ts +45 -0
  569. package/dist/stdout-capture/stdout-capture.lease.d.ts.map +1 -0
  570. package/dist/stdout-capture/stdout-capture.lease.js +338 -0
  571. package/dist/stdout-capture/stdout-capture.lease.js.map +1 -0
  572. package/dist/stdout-capture/stdout-capture.output.descriptor.d.ts +4 -0
  573. package/dist/stdout-capture/stdout-capture.output.descriptor.d.ts.map +1 -0
  574. package/dist/stdout-capture/stdout-capture.output.descriptor.js +18 -0
  575. package/dist/stdout-capture/stdout-capture.output.descriptor.js.map +1 -0
  576. package/dist/stdout-capture/stdout-capture.state.d.ts +29 -0
  577. package/dist/stdout-capture/stdout-capture.state.d.ts.map +1 -0
  578. package/dist/stdout-capture/stdout-capture.state.js +80 -0
  579. package/dist/stdout-capture/stdout-capture.state.js.map +1 -0
  580. package/dist/stdout-capture.d.ts +24 -0
  581. package/dist/stdout-capture.d.ts.map +1 -0
  582. package/dist/stdout-capture.js +28 -0
  583. package/dist/stdout-capture.js.map +1 -0
  584. package/dist/stdout-capture.plugin.d.ts +7 -0
  585. package/dist/stdout-capture.plugin.d.ts.map +1 -0
  586. package/dist/stdout-capture.plugin.js +28 -0
  587. package/dist/stdout-capture.plugin.js.map +1 -0
  588. package/package.json +308 -224
  589. package/dist/contexts/audit.d.ts +0 -34
  590. package/dist/contexts/audit.d.ts.map +0 -1
  591. package/dist/contexts/audit.js +0 -13
  592. package/dist/contexts/audit.js.map +0 -1
  593. package/dist/formatters/index.d.ts +0 -7
  594. package/dist/formatters/index.d.ts.map +0 -1
  595. package/dist/formatters/index.js +0 -8
  596. package/dist/formatters/index.js.map +0 -1
  597. package/dist/formatters/pretty/pretty.impl.cli.d.ts.map +0 -1
  598. package/dist/formatters/pretty/pretty.impl.cli.js.map +0 -1
  599. package/dist/kinds/logger.contracts.d.ts +0 -16
  600. package/dist/kinds/logger.contracts.d.ts.map +0 -1
  601. package/dist/kinds/logger.contracts.js +0 -9
  602. package/dist/kinds/logger.contracts.js.map +0 -1
  603. package/dist/kinds/output.contracts.d.ts +0 -50
  604. package/dist/kinds/output.contracts.d.ts.map +0 -1
  605. package/dist/kinds/output.contracts.js +0 -10
  606. package/dist/kinds/output.contracts.js.map +0 -1
  607. package/dist/logging.cli.plugin.d.ts.map +0 -1
  608. package/dist/logging.cli.plugin.js +0 -39
  609. package/dist/logging.cli.plugin.js.map +0 -1
  610. package/dist/outputs/index.d.ts +0 -7
  611. package/dist/outputs/index.d.ts.map +0 -1
  612. package/dist/outputs/index.js +0 -8
  613. package/dist/outputs/index.js.map +0 -1
  614. package/dist/sinks/buffer/buffer.impl.cli.d.ts.map +0 -1
  615. package/dist/sinks/buffer/buffer.impl.cli.js +0 -34
  616. package/dist/sinks/buffer/buffer.impl.cli.js.map +0 -1
  617. package/dist/sinks/console/console.impl.cli.d.ts.map +0 -1
  618. package/dist/sinks/console/console.impl.cli.js.map +0 -1
  619. package/dist/sinks/stdout/stdout.impl.cli.d.ts.map +0 -1
  620. package/dist/sinks/stdout/stdout.impl.cli.js +0 -21
  621. package/dist/sinks/stdout/stdout.impl.cli.js.map +0 -1
  622. package/src/audit/audit.descriptor.ts +0 -45
  623. package/src/audit/audit.storage.schema.ts +0 -57
  624. package/src/audit/index.ts +0 -8
  625. package/src/cli/logs.descriptor.ts +0 -19
  626. package/src/cli/logs.list.descriptor.ts +0 -28
  627. package/src/cli/logs.list.impl.ts +0 -93
  628. package/src/cli/logs.rotate.descriptor.ts +0 -40
  629. package/src/cli/logs.rotate.impl.ts +0 -61
  630. package/src/cli/logs.search.descriptor.ts +0 -61
  631. package/src/cli/logs.search.impl.ts +0 -173
  632. package/src/cli/logs.tail.descriptor.ts +0 -49
  633. package/src/cli/logs.tail.impl.ts +0 -105
  634. package/src/cli/logs.view.descriptor.ts +0 -57
  635. package/src/cli/logs.view.impl.ts +0 -108
  636. package/src/cli/types.ts +0 -59
  637. package/src/contexts/audit.ts +0 -36
  638. package/src/contexts/fallback-logger.ts +0 -80
  639. package/src/contexts/index.ts +0 -23
  640. package/src/contexts/logger.ts +0 -119
  641. package/src/core/index.ts +0 -32
  642. package/src/core/logger.ts +0 -150
  643. package/src/core/namespace.ts +0 -195
  644. package/src/core/parsing.ts +0 -21
  645. package/src/core/types.ts +0 -82
  646. package/src/docs/levels.docs.descriptor.ts +0 -344
  647. package/src/docs/structured.docs.descriptor.ts +0 -444
  648. package/src/docs/transports.docs.descriptor.ts +0 -428
  649. package/src/formatters/index.ts +0 -6
  650. package/src/formatters/json/json.formatters.descriptor.ts +0 -25
  651. package/src/formatters/json/json.impl.ts +0 -41
  652. package/src/formatters/json5/json5.descriptor.ts +0 -25
  653. package/src/formatters/json5/json5.impl.ts +0 -43
  654. package/src/formatters/jsonl/jsonl.descriptor.ts +0 -26
  655. package/src/formatters/jsonl/jsonl.impl.ts +0 -39
  656. package/src/formatters/pretty/pretty.descriptor.ts +0 -26
  657. package/src/formatters/pretty/pretty.impl.cli.ts +0 -101
  658. package/src/index.ts +0 -190
  659. package/src/kinds/audit.ts +0 -169
  660. package/src/kinds/contexts.ts +0 -22
  661. package/src/kinds/formatter.ts +0 -117
  662. package/src/kinds/index.ts +0 -25
  663. package/src/kinds/logger.contracts.ts +0 -17
  664. package/src/kinds/logger.impl.ts +0 -206
  665. package/src/kinds/logger.ts +0 -46
  666. package/src/kinds/logger.utils.ts +0 -91
  667. package/src/kinds/output.contracts.ts +0 -54
  668. package/src/kinds/output.impl.ts +0 -118
  669. package/src/kinds/output.ts +0 -59
  670. package/src/kinds/output.types.ts +0 -105
  671. package/src/kinds/sink.ts +0 -100
  672. package/src/logger.context.descriptor.ts +0 -13
  673. package/src/logging.cli.plugin.ts +0 -43
  674. package/src/logging.plugin.ts +0 -93
  675. package/src/outputs/index.ts +0 -6
  676. package/src/outputs/remote/remote.descriptor.ts +0 -27
  677. package/src/outputs/remote/remote.impl.ts +0 -218
  678. package/src/outputs.context.descriptor.ts +0 -10
  679. package/src/outputs.context.impl.ts +0 -30
  680. package/src/paths.ts +0 -10
  681. package/src/schemas/audit.ts +0 -98
  682. package/src/schemas/entry.ts +0 -88
  683. package/src/schemas/formatter.ts +0 -37
  684. package/src/schemas/index.ts +0 -80
  685. package/src/schemas/logger.ts +0 -38
  686. package/src/schemas/output.ts +0 -62
  687. package/src/schemas/sink.ts +0 -39
  688. package/src/sinks/buffer/buffer.descriptor.ts +0 -13
  689. package/src/sinks/buffer/buffer.impl.cli.ts +0 -49
  690. package/src/sinks/console/console.descriptor.ts +0 -20
  691. package/src/sinks/console/console.impl.browser.ts +0 -69
  692. package/src/sinks/console/console.impl.cli.ts +0 -71
  693. package/src/sinks/index.ts +0 -8
  694. package/src/sinks/memory/memory.descriptor.ts +0 -20
  695. package/src/sinks/memory/memory.impl.ts +0 -119
  696. package/src/sinks/stdout/stdout.descriptor.ts +0 -13
  697. package/src/sinks/stdout/stdout.impl.cli.ts +0 -27
  698. package/src/sinks.context.descriptor.ts +0 -10
  699. package/src/sinks.context.impl.ts +0 -30
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Reading and tailing a file output's active file over the host's file
3
+ * primitives (`LoggingFileHost`): bounded filtered reads, and a tail that
4
+ * follows appends and replacement of the active file through directory events.
5
+ */
6
+ import { CapabilityError } from '@vibesdotdev/kernel';
7
+ import * as z from 'zod/v4';
8
+ import { LoggedErrorSchema } from "../core/redact.js";
9
+ import { attempt, attemptSync, isMissingPath } from "../core/attempt.js";
10
+ const ReadOptionsSchema = z.object({
11
+ lines: z.number().int().nonnegative().default(50),
12
+ offset: z.number().int().nonnegative().default(0),
13
+ filter: z.union([z.string(), z.instanceof(RegExp)]).optional(),
14
+ ignoreCase: z.boolean().default(false)
15
+ });
16
+ function parseFilter(filter, ignoreCase) {
17
+ if (filter === undefined || filter === '')
18
+ return undefined;
19
+ try {
20
+ return filter instanceof RegExp
21
+ ? new RegExp(filter.source, filter.flags)
22
+ : new RegExp(filter, ignoreCase ? 'i' : undefined);
23
+ }
24
+ catch (error) {
25
+ throw new CapabilityError('The output filter is not a valid regular expression.', 'INVALID_INPUT', {
26
+ reason: 'output-read-filter-invalid', cause: error
27
+ });
28
+ }
29
+ }
30
+ function matchesFilter(filter, line) {
31
+ if (!filter)
32
+ return true;
33
+ filter.lastIndex = 0;
34
+ return filter.test(line);
35
+ }
36
+ export async function readLines(host, filePath, options) {
37
+ const parsed = ReadOptionsSchema.safeParse(options ?? {});
38
+ if (!parsed.success) {
39
+ throw new CapabilityError('The output read options are invalid.', 'INVALID_INPUT', {
40
+ reason: 'output-read-options-invalid', cause: parsed.error
41
+ });
42
+ }
43
+ const { lines: lineCount, offset, filter, ignoreCase } = parsed.data;
44
+ const regex = parseFilter(filter, ignoreCase);
45
+ const read = await attempt(() => host.readText(filePath));
46
+ if ('failure' in read) {
47
+ if (isMissingPath(read.failure))
48
+ return [];
49
+ throw new CapabilityError('Could not read the file output.', 'INTERNAL', {
50
+ reason: 'output-read-failed', details: { path: filePath }, cause: read.failure.cause
51
+ });
52
+ }
53
+ const lines = read.value.split('\n').filter(line => line.trim() && matchesFilter(regex, line));
54
+ const end = Math.max(0, lines.length - offset);
55
+ return lines.slice(Math.max(0, end - lineCount), end);
56
+ }
57
+ const TailOptionsSchema = ReadOptionsSchema.omit({ offset: true }).extend({
58
+ lines: z.number().int().nonnegative().default(10)
59
+ });
60
+ /** Native directory events follow both appends and replacement of the active file. */
61
+ export function tailFile(host, filePath, callback, options, reportError) {
62
+ const parsed = TailOptionsSchema.safeParse(options ?? {});
63
+ if (!parsed.success) {
64
+ throw new CapabilityError('The output tail options are invalid.', 'INVALID_INPUT', {
65
+ reason: 'output-tail-options-invalid', cause: parsed.error
66
+ });
67
+ }
68
+ const { lines: initialLines, filter, ignoreCase } = parsed.data;
69
+ const regex = parseFilter(filter, ignoreCase);
70
+ const directory = host.dirname(filePath);
71
+ const name = host.basename(filePath);
72
+ let file = null;
73
+ let identity = null;
74
+ let position = 0;
75
+ let decoder = new TextDecoder();
76
+ let partial = '';
77
+ let initial = true;
78
+ let closed = false;
79
+ let dirty = false;
80
+ let reading = null;
81
+ let closing = null;
82
+ const pendingDiagnostics = new Set();
83
+ const diagnosticFailures = [];
84
+ function report(error) {
85
+ // A diagnostic that cannot be delivered is kept and raised by `close`.
86
+ const completed = attempt(() => reportError(error)).then(reported => {
87
+ if ('failure' in reported)
88
+ diagnosticFailures.push(LoggedErrorSchema.parse(reported.failure.cause));
89
+ });
90
+ pendingDiagnostics.add(completed);
91
+ void completed.then(() => pendingDiagnostics.delete(completed));
92
+ }
93
+ function deliver(line) {
94
+ if (closed || !line.trim() || !matchesFilter(regex, line))
95
+ return;
96
+ const delivered = attemptSync(() => callback(line));
97
+ if ('failure' in delivered)
98
+ report(LoggedErrorSchema.parse(delivered.failure.cause));
99
+ }
100
+ function reset() {
101
+ position = 0;
102
+ decoder = new TextDecoder();
103
+ partial = '';
104
+ }
105
+ async function drain() {
106
+ if (!file || closed)
107
+ return;
108
+ const current = await file.stat();
109
+ if (current.size < position)
110
+ reset();
111
+ const latest = [];
112
+ const bytes = new Uint8Array(65536);
113
+ while (!closed && position < current.size) {
114
+ const read = await file.read(bytes, 0, Math.min(bytes.byteLength, current.size - position), position);
115
+ if (read.bytesRead === 0)
116
+ break;
117
+ position += read.bytesRead;
118
+ const lines = (partial + decoder.decode(bytes.subarray(0, read.bytesRead), { stream: true })).split('\n');
119
+ partial = lines.pop() ?? '';
120
+ for (const line of lines) {
121
+ if (initial) {
122
+ if (initialLines > 0 && line.trim() && matchesFilter(regex, line)) {
123
+ latest.push(line);
124
+ if (latest.length > initialLines)
125
+ latest.shift();
126
+ }
127
+ }
128
+ else
129
+ deliver(line);
130
+ }
131
+ }
132
+ if (initial) {
133
+ initial = false;
134
+ for (const line of latest)
135
+ deliver(line);
136
+ }
137
+ }
138
+ async function refresh() {
139
+ // Drain the previous inode before switching, including an append that
140
+ // arrived immediately before its rename.
141
+ await drain();
142
+ if (closed)
143
+ return;
144
+ const statted = await attempt(() => host.stat(filePath));
145
+ if ('failure' in statted) {
146
+ if (isMissingPath(statted.failure))
147
+ return;
148
+ throw statted.failure.cause;
149
+ }
150
+ const selected = statted.value;
151
+ if (identity && identity.dev === selected.dev && identity.ino === selected.ino)
152
+ return;
153
+ if (file)
154
+ await file.close();
155
+ file = null;
156
+ identity = null;
157
+ reset();
158
+ const reopened = await attempt(() => host.open(filePath, 'r'));
159
+ if ('failure' in reopened) {
160
+ if (isMissingPath(reopened.failure))
161
+ return;
162
+ throw reopened.failure.cause;
163
+ }
164
+ file = reopened.value;
165
+ const opened = await file.stat();
166
+ identity = { dev: opened.dev, ino: opened.ino };
167
+ await drain();
168
+ }
169
+ function requestRead() {
170
+ if (closed)
171
+ return;
172
+ dirty = true;
173
+ if (reading)
174
+ return;
175
+ reading = attempt(async () => {
176
+ while (dirty && !closed) {
177
+ dirty = false;
178
+ await refresh();
179
+ }
180
+ }).then(refreshed => {
181
+ if ('failure' in refreshed)
182
+ report(LoggedErrorSchema.parse(refreshed.failure.cause));
183
+ }).finally(() => { reading = null; });
184
+ }
185
+ let watcher;
186
+ try {
187
+ host.mkdirRecursiveSync(directory);
188
+ watcher = host.watchDirectory(directory, (changed) => {
189
+ if (changed === null || changed === name)
190
+ requestRead();
191
+ });
192
+ }
193
+ catch (error) {
194
+ throw new CapabilityError('Could not watch the file output.', 'INTERNAL', {
195
+ reason: 'output-tail-watch-failed', details: { path: filePath }, cause: error
196
+ });
197
+ }
198
+ // The watcher's failure ends its native events: report it, then release it.
199
+ const watchFailed = new Promise((_resolve, reject) => { watcher.onError(reject); });
200
+ void attempt(() => watchFailed).then(watched => {
201
+ if (!('failure' in watched))
202
+ return;
203
+ report(LoggedErrorSchema.parse(watched.failure.cause));
204
+ watcher.close();
205
+ });
206
+ requestRead();
207
+ return {
208
+ close() {
209
+ if (closing)
210
+ return closing;
211
+ closed = true;
212
+ dirty = false;
213
+ watcher.close();
214
+ closing = (async () => {
215
+ if (reading)
216
+ await reading;
217
+ const opened = file;
218
+ file = null;
219
+ if (opened)
220
+ await opened.close();
221
+ await Promise.all(pendingDiagnostics);
222
+ if (diagnosticFailures.length)
223
+ throw new AggregateError(diagnosticFailures, 'File tail diagnostics failed.');
224
+ })();
225
+ return closing;
226
+ }
227
+ };
228
+ }
229
+ //# sourceMappingURL=file-output.read.base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-output.read.base.js","sourceRoot":"","sources":["../../src/host-files/file-output.read.base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The `file` sink over the host's file primitives: a host file stream
3
+ * (`fileOutputFor(host)`) at the global log directory, batched by entries and
4
+ * elapsed time. `fileSinkFor(host)` is the class a host registers.
5
+ */
6
+ import { type SinkImplementation, type SinkContext, type SinkDescriptor, type RuntimeLogEntry } from '../host.ts';
7
+ import type { LoggingFileHost } from '../schemas/file-host.ts';
8
+ /** File sinks and file outputs share the owner's ordered append and cleanup. */
9
+ export declare class FileSinkBase implements SinkImplementation {
10
+ readonly id: string;
11
+ readonly descriptor: SinkDescriptor;
12
+ private readonly output;
13
+ constructor(host: LoggingFileHost, descriptor: SinkDescriptor, context: SinkContext);
14
+ emit(entry: RuntimeLogEntry): Promise<void>;
15
+ flush(): Promise<void>;
16
+ close(): Promise<void>;
17
+ }
18
+ type FileSinkClass = new (descriptor: SinkDescriptor, context: SinkContext) => FileSinkBase;
19
+ /** The `file` sink class over `host`, one per host. */
20
+ export declare function fileSinkFor(host: LoggingFileHost): FileSinkClass;
21
+ export {};
22
+ //# sourceMappingURL=file-sink.base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-sink.base.d.ts","sourceRoot":"","sources":["../../src/host-files/file-sink.base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,KAAK,eAAe,EAGpB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/D,gFAAgF;AAChF,qBAAa,YAAa,YAAW,kBAAkB;IACtD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE5B,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW;IAmBnF,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGtB;AAED,KAAK,aAAa,GAAG,KAAK,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,KAAK,YAAY,CAAC;AAI5F,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,aAAa,CAWhE"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * The `file` sink over the host's file primitives: a host file stream
3
+ * (`fileOutputFor(host)`) at the global log directory, batched by entries and
4
+ * elapsed time. `fileSinkFor(host)` is the class a host registers.
5
+ */
6
+ import { SinkDescriptorSchema, OutputDescriptorSchema, getCapturedLoggingConfig } from "../host.js";
7
+ import { getVibesGlobalLogDir } from "../paths.js";
8
+ import { fileOutputFor } from "./file-output.base.js";
9
+ /** File sinks and file outputs share the owner's ordered append and cleanup. */
10
+ export class FileSinkBase {
11
+ id;
12
+ descriptor;
13
+ output;
14
+ constructor(host, descriptor, context) {
15
+ this.descriptor = SinkDescriptorSchema.parse(descriptor);
16
+ this.id = this.descriptor.id;
17
+ const runtime = context.runtime;
18
+ const logsDir = getVibesGlobalLogDir(runtime);
19
+ const path = host.join(logsDir, getCapturedLoggingConfig(runtime).fileName);
20
+ this.output = new (fileOutputFor(host))(OutputDescriptorSchema.parse({
21
+ kind: 'logging/output', id: this.id, storage: 'file', path, format: 'jsonl',
22
+ rotation: { maxSize: '10MB', maxAge: '7d', maxFiles: 5 },
23
+ buffering: {
24
+ enabled: this.descriptor.batching?.enabled ?? true,
25
+ // Sink batches are bounded by entries and elapsed time.
26
+ size: Number.MAX_SAFE_INTEGER,
27
+ maxBufferEntries: this.descriptor.batching?.maxSize ?? 50,
28
+ flushInterval: this.descriptor.batching?.maxWait ?? 2000
29
+ }
30
+ }), { runtime });
31
+ }
32
+ emit(entry) {
33
+ return this.output.write(entry);
34
+ }
35
+ flush() {
36
+ return this.output.flush();
37
+ }
38
+ close() {
39
+ return this.output.close();
40
+ }
41
+ }
42
+ const sinkClasses = new WeakMap();
43
+ /** The `file` sink class over `host`, one per host. */
44
+ export function fileSinkFor(host) {
45
+ let bound = sinkClasses.get(host);
46
+ if (!bound) {
47
+ bound = class FileSink extends FileSinkBase {
48
+ constructor(descriptor, context) {
49
+ super(host, descriptor, context);
50
+ }
51
+ };
52
+ sinkClasses.set(host, bound);
53
+ }
54
+ return bound;
55
+ }
56
+ //# sourceMappingURL=file-sink.base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-sink.base.js","sourceRoot":"","sources":["../../src/host-files/file-sink.base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAGN,oBAAoB,EAGpB,sBAAsB,EACtB,wBAAwB,EACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAuB,MAAM,uBAAuB,CAAC;AAE3E,gFAAgF;AAChF,MAAM,OAAO,YAAY;IACf,EAAE,CAAS;IACX,UAAU,CAAiB;IACnB,MAAM,CAAiB;IAExC,YAAY,IAAqB,EAAE,UAA0B,EAAE,OAAoB;QAClF,IAAI,CAAC,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC;YACpE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO;YAC3E,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE;YACxD,SAAS,EAAE;gBACV,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI;gBAClD,wDAAwD;gBACxD,IAAI,EAAE,MAAM,CAAC,gBAAgB;gBAC7B,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE;gBACzD,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI;aACxD;SACD,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,KAAsB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACD;AAID,MAAM,WAAW,GAAG,IAAI,OAAO,EAAkC,CAAC;AAElE,uDAAuD;AACvD,MAAM,UAAU,WAAW,CAAC,IAAqB;IAChD,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,KAAK,GAAG,MAAM,QAAS,SAAQ,YAAY;YAC1C,YAAY,UAA0B,EAAE,OAAoB;gBAC3D,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAClC,CAAC;SACD,CAAC;QACF,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * A host's file logging plugin (C092): the `file` sink, the `file` output (and
3
+ * the `mcp-stdout-capture` storage it backs), the file-backed audit logger and
4
+ * the scheduled audit retention job, each over the host's own file primitives.
5
+ * Each runtime-environment host registers it under its own plugin identity;
6
+ * consumer hardware only. `{ files: false }` registers none of them.
7
+ */
8
+ import type { HostFileLoggingDefinition, HostFileLoggingOptions } from '../schemas/file-host.ts';
9
+ /** The host's file logging plugin, registered under `definition`'s identity over `definition.host`. */
10
+ export declare function createHostFileLoggingPlugin(definition: HostFileLoggingDefinition, options?: HostFileLoggingOptions): import("@vibesdotdev/kernel").RuntimePlugin;
11
+ //# sourceMappingURL=host-file-logging.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-file-logging.plugin.d.ts","sourceRoot":"","sources":["../../src/host-files/host-file-logging.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjG,uGAAuG;AACvG,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,yBAAyB,EAAE,OAAO,GAAE,sBAA2B,+CAoDtH"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * A host's file logging plugin (C092): the `file` sink, the `file` output (and
3
+ * the `mcp-stdout-capture` storage it backs), the file-backed audit logger and
4
+ * the scheduled audit retention job, each over the host's own file primitives.
5
+ * Each runtime-environment host registers it under its own plugin identity;
6
+ * consumer hardware only. `{ files: false }` registers none of them.
7
+ */
8
+ import { CapabilityError, createRuntimePlugin, getRuntimeStdioCapture } from '@vibesdotdev/kernel';
9
+ import { fileOutputDescriptor } from "../outputs/file/file.outputs.descriptor.js";
10
+ import { fileSinkDescriptor } from "../sinks/file/file.sinks.descriptor.js";
11
+ import stdoutCaptureOutputDescriptor from "../stdout-capture/stdout-capture.output.descriptor.js";
12
+ import { ALL_AUDIT_DESCRIPTORS } from "../audit/audit.descriptor.js";
13
+ import { auditRetentionJobDescriptor } from "../audit/audit-retention.job.descriptor.js";
14
+ import { captureLoggingConfig } from "../config/load-config.js";
15
+ /** The host's file logging plugin, registered under `definition`'s identity over `definition.host`. */
16
+ export function createHostFileLoggingPlugin(definition, options = {}) {
17
+ const files = options.files ?? true;
18
+ const { host } = definition;
19
+ return createRuntimePlugin({
20
+ id: definition.id,
21
+ name: definition.name,
22
+ description: definition.description,
23
+ // No declared dependency on the portable `logging` plugin: a host registers this from its
24
+ // environment onRegister, before the composition registers `logging`. Descriptors and
25
+ // loaders for logging kinds that do not exist yet are queued by the kernel and install
26
+ // when `logging` registers its kinds; a composition without logging leaves them inert.
27
+ descriptors: files ? [fileSinkDescriptor, fileOutputDescriptor, auditRetentionJobDescriptor] : [],
28
+ onRegister: async (runtime) => {
29
+ if (!files)
30
+ return;
31
+ // Audit descriptors declare `optionalContext: ['runtime/workspace-path']`
32
+ // (Logging owns them): the file audit selects on an unbound host and
33
+ // its writes refuse `workspace-unbound`, typed.
34
+ runtime.registerLoader('logging/sink', fileSinkDescriptor.id, async () => {
35
+ await captureLoggingConfig(runtime);
36
+ return { impl: (await import("./file-sink.base.js")).fileSinkFor(host) };
37
+ }, { constraint: { hardware: ['consumer'] } });
38
+ runtime.registerLoader('logging/output', fileOutputDescriptor.id, async () => {
39
+ return { impl: (await import("./file-output.factory.base.js")).fileOutputFactoryFor(host) };
40
+ }, { constraint: { hardware: ['consumer'] } });
41
+ // Capture storage stays selected by the handed host's stdio capability.
42
+ runtime.registerLoader('logging/output', stdoutCaptureOutputDescriptor.id, async (handedRuntime) => {
43
+ if (!handedRuntime)
44
+ throw new CapabilityError('Capture storage selection requires its resolving Runtime.', 'INVALID_INPUT', {
45
+ reason: 'stdout-capture-runtime-missing', retryable: false
46
+ });
47
+ await getRuntimeStdioCapture(handedRuntime);
48
+ return { impl: (await import("./file-output.factory.base.js")).fileOutputFactoryFor(host) };
49
+ });
50
+ for (const descriptor of ALL_AUDIT_DESCRIPTORS) {
51
+ runtime.registerLoader('logging/audit', descriptor.id, async () => {
52
+ return { impl: (await import("./file-audit.base.js")).fileAuditFor(host) };
53
+ }, { constraint: { hardware: ['consumer'] } });
54
+ }
55
+ // The audit retention schedule is a Workers job (RC11, D19): no timer here.
56
+ runtime.registerLoader('workers/job', auditRetentionJobDescriptor.id, async () => {
57
+ const { AuditRetentionJob } = await import("../audit/audit-retention.job.impl.js");
58
+ return { impl: AuditRetentionJob };
59
+ }, { constraint: { hardware: ['consumer'] } });
60
+ }
61
+ });
62
+ }
63
+ //# sourceMappingURL=host-file-logging.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-file-logging.plugin.js","sourceRoot":"","sources":["../../src/host-files/host-file-logging.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,6BAA6B,MAAM,uDAAuD,CAAC;AAClG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,uGAAuG;AACvG,MAAM,UAAU,2BAA2B,CAAC,UAAqC,EAAE,UAAkC,EAAE;IACtH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;IAC5B,OAAO,mBAAmB,CAAC;QAC1B,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,0FAA0F;QAC1F,sFAAsF;QACtF,uFAAuF;QACvF,uFAAuF;QAEvF,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,oBAAoB,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC,EAAE;QAEjG,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,KAAK;gBAAE,OAAO;YAEnB,0EAA0E;YAC1E,qEAAqE;YACrE,gDAAgD;YAEhD,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,kBAAkB,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;gBACxE,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBACpC,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1E,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YAE/C,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;gBAC5E,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7F,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YAE/C,wEAAwE;YACxE,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;gBAClG,IAAI,CAAC,aAAa;oBAAE,MAAM,IAAI,eAAe,CAAC,2DAA2D,EAAE,eAAe,EAAE;wBAC3H,MAAM,EAAE,gCAAgC,EAAE,SAAS,EAAE,KAAK;qBAC1D,CAAC,CAAC;gBACH,MAAM,sBAAsB,CAAC,aAAa,CAAC,CAAC;gBAC5C,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7F,CAAC,CAAC,CAAC;YAEH,KAAK,MAAM,UAAU,IAAI,qBAAqB,EAAE,CAAC;gBAChD,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;oBACjE,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5E,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,CAAC;YAED,4EAA4E;YAC5E,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,2BAA2B,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;gBAChF,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,sCAAsC,CAAC,CAAC;gBACnF,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;YACpC,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @vibesdotdev/logging/host-files
3
+ *
4
+ * The base implementation of the file contract in `@vibesdotdev/logging/host`
5
+ * (C092): the `file` sink, the `file` output and its streams, copy-truncate
6
+ * rotation, the file audit and the host plugin that registers them, all over
7
+ * a host's file primitives (`LoggingFileHost`). It reads no host API; each
8
+ * runtime-environment host supplies the primitives and registers
9
+ * `createHostFileLoggingPlugin` under its own identity.
10
+ */
11
+ export { createHostFileLoggingPlugin } from './host-file-logging.plugin.ts';
12
+ export { FileOutputBase, fileOutputFor } from './file-output.base.ts';
13
+ export { FileOutputFactoryBase, fileOutputFactoryFor } from './file-output.factory.base.ts';
14
+ export { FileSinkBase, fileSinkFor } from './file-sink.base.ts';
15
+ export { FileAuditBase, fileAuditFor } from './file-audit.base.ts';
16
+ export { rotateAppendedFileOn } from './rotate-appended-file.base.ts';
17
+ export { readLines, tailFile } from './file-output.read.base.ts';
18
+ export type { FileTailHandle, HostFileLoggingDefinition, HostFileLoggingOptions, LoggingDirectoryWatch, LoggingFileHandle, LoggingFileHost, LoggingFileStats } from '../schemas/file-host.ts';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host-files/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EACX,cAAc,EACd,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @vibesdotdev/logging/host-files
3
+ *
4
+ * The base implementation of the file contract in `@vibesdotdev/logging/host`
5
+ * (C092): the `file` sink, the `file` output and its streams, copy-truncate
6
+ * rotation, the file audit and the host plugin that registers them, all over
7
+ * a host's file primitives (`LoggingFileHost`). It reads no host API; each
8
+ * runtime-environment host supplies the primitives and registers
9
+ * `createHostFileLoggingPlugin` under its own identity.
10
+ */
11
+ export { createHostFileLoggingPlugin } from "./host-file-logging.plugin.js";
12
+ export { FileOutputBase, fileOutputFor } from "./file-output.base.js";
13
+ export { FileOutputFactoryBase, fileOutputFactoryFor } from "./file-output.factory.base.js";
14
+ export { FileSinkBase, fileSinkFor } from "./file-sink.base.js";
15
+ export { FileAuditBase, fileAuditFor } from "./file-audit.base.js";
16
+ export { rotateAppendedFileOn } from "./rotate-appended-file.base.js";
17
+ export { readLines, tailFile } from "./file-output.read.base.js";
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host-files/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copy-truncate rotation for a file another process appends to (L1), over
3
+ * the host's file primitives (`LoggingFileHost`).
4
+ *
5
+ * PM children and the PM daemon write their stdout/stderr through inherited
6
+ * `O_APPEND` descriptors so the files outlive — and are adopted across —
7
+ * daemon restarts. Rename-based rotation would leave those writers appending
8
+ * to the archive, so this rotation copies the active file to `.1` and
9
+ * truncates it in place; an `O_APPEND` writer then continues at the new end.
10
+ *
11
+ * Semantics match the file output (`schemas/output-defaults.ts`): a file at or
12
+ * over `maxSizeBytes` rotates, and at most `maxFiles` archives are kept
13
+ * (`<path>.1` newest … `<path>.<maxFiles>` oldest).
14
+ *
15
+ * KNOWN LIMIT — bytes can be lost. Bytes a writer appends after the copy
16
+ * reads them and before the truncate lands are in neither file. The window
17
+ * is kept to the copy itself (a copy-on-write clone where the filesystem
18
+ * supports it) plus one truncate issued immediately after, with nothing else
19
+ * awaited between them. Full capture is the policy, so this limit is stated,
20
+ * not hidden: a writer that must lose nothing needs a log owner that holds
21
+ * the write side, not an inherited descriptor.
22
+ *
23
+ * A writer WITHOUT `O_APPEND` keeps its old offset after the truncate and
24
+ * produces a sparse file; only `O_APPEND` writers may be rotated this way.
25
+ */
26
+ import type { AppendedFileRotation, AppendedFileRotationPolicy } from '../kinds/file-output.ts';
27
+ import type { LoggingFileHost } from '../schemas/file-host.ts';
28
+ /**
29
+ * Rotate `path` when it has reached `policy.maxSizeBytes`: shift
30
+ * `.1 … .maxFiles-1` up one, drop `.maxFiles`, copy the active file to `.1`,
31
+ * then truncate it in place. A missing active file is nothing to rotate; every
32
+ * other failure propagates. The file operations are `host`'s.
33
+ */
34
+ export declare function rotateAppendedFileOn(host: LoggingFileHost, path: string, policy: AppendedFileRotationPolicy): Promise<AppendedFileRotation>;
35
+ //# sourceMappingURL=rotate-appended-file.base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate-appended-file.base.d.ts","sourceRoot":"","sources":["../../src/host-files/rotate-appended-file.base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAqD/D;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,0BAA0B,GAChC,OAAO,CAAC,oBAAoB,CAAC,CAwB/B"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Copy-truncate rotation for a file another process appends to (L1), over
3
+ * the host's file primitives (`LoggingFileHost`).
4
+ *
5
+ * PM children and the PM daemon write their stdout/stderr through inherited
6
+ * `O_APPEND` descriptors so the files outlive — and are adopted across —
7
+ * daemon restarts. Rename-based rotation would leave those writers appending
8
+ * to the archive, so this rotation copies the active file to `.1` and
9
+ * truncates it in place; an `O_APPEND` writer then continues at the new end.
10
+ *
11
+ * Semantics match the file output (`schemas/output-defaults.ts`): a file at or
12
+ * over `maxSizeBytes` rotates, and at most `maxFiles` archives are kept
13
+ * (`<path>.1` newest … `<path>.<maxFiles>` oldest).
14
+ *
15
+ * KNOWN LIMIT — bytes can be lost. Bytes a writer appends after the copy
16
+ * reads them and before the truncate lands are in neither file. The window
17
+ * is kept to the copy itself (a copy-on-write clone where the filesystem
18
+ * supports it) plus one truncate issued immediately after, with nothing else
19
+ * awaited between them. Full capture is the policy, so this limit is stated,
20
+ * not hidden: a writer that must lose nothing needs a log owner that holds
21
+ * the write side, not an inherited descriptor.
22
+ *
23
+ * A writer WITHOUT `O_APPEND` keeps its old offset after the truncate and
24
+ * produces a sparse file; only `O_APPEND` writers may be rotated this way.
25
+ */
26
+ import { CapabilityError, CaughtFailureSchema, valueFreeFailure } from '@vibesdotdev/kernel';
27
+ import * as z from 'zod/v4';
28
+ import { attempt, isMissingPath } from "../core/attempt.js";
29
+ async function removeIfPresent(host, path) {
30
+ const removed = await attempt(() => host.unlink(path));
31
+ if ('failure' in removed && !isMissingPath(removed.failure))
32
+ throw removed.failure.cause;
33
+ }
34
+ async function moveIfPresent(host, from, to) {
35
+ const moved = await attempt(() => host.rename(from, to));
36
+ if ('failure' in moved && !isMissingPath(moved.failure))
37
+ throw moved.failure.cause;
38
+ }
39
+ const RotationInputSchema = z.object({
40
+ path: z.string().min(1).refine((path) => !path.includes('\0')),
41
+ policy: z.object({
42
+ maxSizeBytes: z.number().finite().positive(),
43
+ maxFiles: z.number().int().min(1)
44
+ }).strict()
45
+ }).strict();
46
+ function invalidRotationInput(failure) {
47
+ return new CapabilityError('Rotation requires a path, maxSizeBytes > 0 and an integer maxFiles >= 1.', 'INVALID_INPUT', {
48
+ reason: 'rotation-policy-invalid',
49
+ retryable: false,
50
+ details: failure === undefined ? undefined : {
51
+ failureName: failure.name,
52
+ failureCode: failure.code ?? 'unspecified',
53
+ failureReason: failure.reason ?? 'unspecified'
54
+ }
55
+ });
56
+ }
57
+ function parseRotationInput(path, policy) {
58
+ try {
59
+ return { ok: true, parsed: RotationInputSchema.safeParse({ path, policy }) };
60
+ }
61
+ catch (error) {
62
+ return { ok: false, failure: valueFreeFailure(CaughtFailureSchema.parse(error)) };
63
+ }
64
+ }
65
+ /** Read the public input once and return a detached copy, never caller-owned getters or proxies. */
66
+ function readRotationInput(path, policy) {
67
+ const read = parseRotationInput(path, policy);
68
+ if (!read.ok)
69
+ throw invalidRotationInput(read.failure);
70
+ const parsed = read.parsed;
71
+ if (!parsed.success)
72
+ throw invalidRotationInput();
73
+ return parsed.data;
74
+ }
75
+ /**
76
+ * Rotate `path` when it has reached `policy.maxSizeBytes`: shift
77
+ * `.1 … .maxFiles-1` up one, drop `.maxFiles`, copy the active file to `.1`,
78
+ * then truncate it in place. A missing active file is nothing to rotate; every
79
+ * other failure propagates. The file operations are `host`'s.
80
+ */
81
+ export async function rotateAppendedFileOn(host, path, policy) {
82
+ const input = readRotationInput(path, policy);
83
+ path = input.path;
84
+ policy = input.policy;
85
+ const measured = await attempt(async () => (await host.stat(path)).size);
86
+ if ('failure' in measured) {
87
+ if (isMissingPath(measured.failure))
88
+ return { rotated: false };
89
+ throw measured.failure.cause;
90
+ }
91
+ const size = measured.value;
92
+ if (size < policy.maxSizeBytes)
93
+ return { rotated: false };
94
+ await removeIfPresent(host, `${path}.${policy.maxFiles}`);
95
+ for (let index = policy.maxFiles - 1; index >= 1; index--) {
96
+ await moveIfPresent(host, `${path}.${index}`, `${path}.${index + 1}`);
97
+ }
98
+ // The loss window starts here: keep the copy fast (clone when supported)
99
+ // and truncate the moment it completes.
100
+ await host.copyFileClone(path, `${path}.1`);
101
+ await host.truncate(path, 0);
102
+ return { rotated: true, previousSize: size };
103
+ }
104
+ //# sourceMappingURL=rotate-appended-file.base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate-appended-file.base.js","sourceRoot":"","sources":["../../src/host-files/rotate-appended-file.base.ts"],"names":[],"mappings":"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"}