@withbuddi/buddi 0.1.0-pre.36 → 0.1.0-pre.37

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 (607) hide show
  1. package/examples/agents/concierge/agent.md +5 -0
  2. package/examples/skills/letterhead/SKILL.md +21 -0
  3. package/examples/skills/letterhead/assets/letterhead.md +16 -0
  4. package/examples/skills/letterhead/assets/logo.svg +6 -0
  5. package/extension/manifest.json +2 -2
  6. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  7. package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
  8. package/node_modules/@buddi/cli/dist/doctor-probes.js +38 -3
  9. package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
  10. package/node_modules/@buddi/cli/dist/doctor.d.ts +25 -0
  11. package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
  12. package/node_modules/@buddi/cli/dist/doctor.js +28 -0
  13. package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
  14. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  15. package/node_modules/@buddi/core/dist/actions/approvals.d.ts +7 -0
  16. package/node_modules/@buddi/core/dist/actions/approvals.d.ts.map +1 -1
  17. package/node_modules/@buddi/core/dist/actions/approvals.js +11 -1
  18. package/node_modules/@buddi/core/dist/actions/approvals.js.map +1 -1
  19. package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
  20. package/node_modules/@buddi/core/dist/agents/catalog.js +2 -2
  21. package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
  22. package/node_modules/@buddi/core/dist/agents/skills.d.ts +60 -1
  23. package/node_modules/@buddi/core/dist/agents/skills.d.ts.map +1 -1
  24. package/node_modules/@buddi/core/dist/agents/skills.js +157 -17
  25. package/node_modules/@buddi/core/dist/agents/skills.js.map +1 -1
  26. package/node_modules/@buddi/core/dist/day-month.d.ts +52 -0
  27. package/node_modules/@buddi/core/dist/day-month.d.ts.map +1 -0
  28. package/node_modules/@buddi/core/dist/day-month.js +101 -0
  29. package/node_modules/@buddi/core/dist/day-month.js.map +1 -0
  30. package/node_modules/@buddi/core/dist/host/build.d.ts +11 -2
  31. package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
  32. package/node_modules/@buddi/core/dist/host/build.js +115 -4
  33. package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
  34. package/node_modules/@buddi/core/dist/host/http.d.ts +35 -0
  35. package/node_modules/@buddi/core/dist/host/http.d.ts.map +1 -1
  36. package/node_modules/@buddi/core/dist/host/http.js +133 -29
  37. package/node_modules/@buddi/core/dist/host/http.js.map +1 -1
  38. package/node_modules/@buddi/core/dist/host/types.d.ts +72 -1
  39. package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
  40. package/node_modules/@buddi/core/dist/index.d.ts +2 -0
  41. package/node_modules/@buddi/core/dist/index.d.ts.map +1 -1
  42. package/node_modules/@buddi/core/dist/index.js +2 -0
  43. package/node_modules/@buddi/core/dist/index.js.map +1 -1
  44. package/node_modules/@buddi/core/dist/onboarding/store.d.ts.map +1 -1
  45. package/node_modules/@buddi/core/dist/onboarding/store.js +28 -5
  46. package/node_modules/@buddi/core/dist/onboarding/store.js.map +1 -1
  47. package/node_modules/@buddi/core/dist/onboarding/types.d.ts +10 -0
  48. package/node_modules/@buddi/core/dist/onboarding/types.d.ts.map +1 -1
  49. package/node_modules/@buddi/core/dist/onboarding/types.js.map +1 -1
  50. package/node_modules/@buddi/core/dist/pages.d.ts +145 -11
  51. package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
  52. package/node_modules/@buddi/core/dist/pages.js +113 -5
  53. package/node_modules/@buddi/core/dist/pages.js.map +1 -1
  54. package/node_modules/@buddi/core/dist/plugin/index.d.ts +4 -0
  55. package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
  56. package/node_modules/@buddi/core/dist/plugin/index.js +2 -0
  57. package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
  58. package/node_modules/@buddi/core/dist/plugin/sign-in.d.ts +78 -0
  59. package/node_modules/@buddi/core/dist/plugin/sign-in.d.ts.map +1 -0
  60. package/node_modules/@buddi/core/dist/plugin/sign-in.js +54 -0
  61. package/node_modules/@buddi/core/dist/plugin/sign-in.js.map +1 -0
  62. package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
  63. package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
  64. package/node_modules/@buddi/core/dist/provider-accounts.d.ts +7 -0
  65. package/node_modules/@buddi/core/dist/provider-accounts.d.ts.map +1 -1
  66. package/node_modules/@buddi/core/dist/provider-accounts.js +15 -0
  67. package/node_modules/@buddi/core/dist/provider-accounts.js.map +1 -1
  68. package/node_modules/@buddi/core/dist/questions/types.d.ts +1 -1
  69. package/node_modules/@buddi/core/dist/questions/types.js +1 -1
  70. package/node_modules/@buddi/core/dist/queue/jobs.d.ts +57 -2
  71. package/node_modules/@buddi/core/dist/queue/jobs.d.ts.map +1 -1
  72. package/node_modules/@buddi/core/dist/queue/jobs.js +114 -0
  73. package/node_modules/@buddi/core/dist/queue/jobs.js.map +1 -1
  74. package/node_modules/@buddi/core/dist/queue/worker.d.ts +24 -2
  75. package/node_modules/@buddi/core/dist/queue/worker.d.ts.map +1 -1
  76. package/node_modules/@buddi/core/dist/queue/worker.js +66 -11
  77. package/node_modules/@buddi/core/dist/queue/worker.js.map +1 -1
  78. package/node_modules/@buddi/core/dist/registry.d.ts +8 -0
  79. package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
  80. package/node_modules/@buddi/core/dist/registry.js +15 -2
  81. package/node_modules/@buddi/core/dist/registry.js.map +1 -1
  82. package/node_modules/@buddi/core/dist/secrets/scrub.d.ts.map +1 -1
  83. package/node_modules/@buddi/core/dist/secrets/scrub.js +15 -0
  84. package/node_modules/@buddi/core/dist/secrets/scrub.js.map +1 -1
  85. package/node_modules/@buddi/core/dist/tools.d.ts +29 -0
  86. package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
  87. package/node_modules/@buddi/core/dist/tools.js.map +1 -1
  88. package/node_modules/@buddi/core/dist/views.d.ts +12 -12
  89. package/node_modules/@buddi/core/dist/widgets.d.ts +14 -1
  90. package/node_modules/@buddi/core/dist/widgets.d.ts.map +1 -1
  91. package/node_modules/@buddi/core/dist/widgets.js +30 -0
  92. package/node_modules/@buddi/core/dist/widgets.js.map +1 -1
  93. package/node_modules/@buddi/core/migrations/074_owner_identity.sql +14 -0
  94. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  95. package/node_modules/@buddi/gateway/dist/agents/catalog.d.ts.map +1 -1
  96. package/node_modules/@buddi/gateway/dist/agents/catalog.js +3 -3
  97. package/node_modules/@buddi/gateway/dist/agents/catalog.js.map +1 -1
  98. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts +8 -0
  99. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
  100. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js +11 -4
  101. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js.map +1 -1
  102. package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  103. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js +36 -2
  104. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js.map +1 -1
  105. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts +19 -0
  106. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
  107. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js +108 -0
  108. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js.map +1 -1
  109. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts +4 -4
  110. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
  111. package/node_modules/@buddi/gateway/dist/agents/platform.js +11 -0
  112. package/node_modules/@buddi/gateway/dist/agents/platform.js.map +1 -1
  113. package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
  114. package/node_modules/@buddi/gateway/dist/bootstrap.js +4 -1
  115. package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
  116. package/node_modules/@buddi/gateway/dist/evals/golden.d.ts +33 -1
  117. package/node_modules/@buddi/gateway/dist/evals/golden.d.ts.map +1 -1
  118. package/node_modules/@buddi/gateway/dist/evals/golden.js +168 -3
  119. package/node_modules/@buddi/gateway/dist/evals/golden.js.map +1 -1
  120. package/node_modules/@buddi/gateway/dist/index.d.ts +1 -0
  121. package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
  122. package/node_modules/@buddi/gateway/dist/index.js +1 -0
  123. package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
  124. package/node_modules/@buddi/gateway/dist/missions/dates.d.ts +98 -0
  125. package/node_modules/@buddi/gateway/dist/missions/dates.d.ts.map +1 -0
  126. package/node_modules/@buddi/gateway/dist/missions/dates.js +252 -0
  127. package/node_modules/@buddi/gateway/dist/missions/dates.js.map +1 -0
  128. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts +8 -0
  129. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
  130. package/node_modules/@buddi/gateway/dist/missions/execute.js +16 -1
  131. package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
  132. package/node_modules/@buddi/gateway/dist/missions/report.d.ts.map +1 -1
  133. package/node_modules/@buddi/gateway/dist/missions/report.js +1 -0
  134. package/node_modules/@buddi/gateway/dist/missions/report.js.map +1 -1
  135. package/node_modules/@buddi/gateway/dist/ollama-local.d.ts +90 -0
  136. package/node_modules/@buddi/gateway/dist/ollama-local.d.ts.map +1 -0
  137. package/node_modules/@buddi/gateway/dist/ollama-local.js +201 -0
  138. package/node_modules/@buddi/gateway/dist/ollama-local.js.map +1 -0
  139. package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts +8 -0
  140. package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts.map +1 -1
  141. package/node_modules/@buddi/gateway/dist/plugins-cli.js +22 -1
  142. package/node_modules/@buddi/gateway/dist/plugins-cli.js.map +1 -1
  143. package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
  144. package/node_modules/@buddi/gateway/dist/serve.js +50 -5
  145. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  146. package/node_modules/@buddi/gateway/dist/surfaces/pending-question.js +2 -2
  147. package/node_modules/@buddi/gateway/dist/system-context.d.ts +21 -1
  148. package/node_modules/@buddi/gateway/dist/system-context.d.ts.map +1 -1
  149. package/node_modules/@buddi/gateway/dist/system-context.js +76 -2
  150. package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
  151. package/node_modules/@buddi/gateway/dist/telegram/approvals.d.ts.map +1 -1
  152. package/node_modules/@buddi/gateway/dist/telegram/approvals.js +4 -2
  153. package/node_modules/@buddi/gateway/dist/telegram/approvals.js.map +1 -1
  154. package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts.map +1 -1
  155. package/node_modules/@buddi/gateway/dist/telegram/channel.js +6 -1
  156. package/node_modules/@buddi/gateway/dist/telegram/channel.js.map +1 -1
  157. package/node_modules/@buddi/gateway/dist/telegram/html.d.ts +34 -0
  158. package/node_modules/@buddi/gateway/dist/telegram/html.d.ts.map +1 -0
  159. package/node_modules/@buddi/gateway/dist/telegram/html.js +263 -0
  160. package/node_modules/@buddi/gateway/dist/telegram/html.js.map +1 -0
  161. package/node_modules/@buddi/gateway/dist/telegram/notify.d.ts +6 -0
  162. package/node_modules/@buddi/gateway/dist/telegram/notify.d.ts.map +1 -1
  163. package/node_modules/@buddi/gateway/dist/telegram/notify.js +25 -3
  164. package/node_modules/@buddi/gateway/dist/telegram/notify.js.map +1 -1
  165. package/node_modules/@buddi/gateway/dist/tips/facts.d.ts +2 -0
  166. package/node_modules/@buddi/gateway/dist/tips/facts.d.ts.map +1 -1
  167. package/node_modules/@buddi/gateway/dist/tips/facts.js +4 -1
  168. package/node_modules/@buddi/gateway/dist/tips/facts.js.map +1 -1
  169. package/node_modules/@buddi/gateway/dist/tips/rules.d.ts.map +1 -1
  170. package/node_modules/@buddi/gateway/dist/tips/rules.js +10 -0
  171. package/node_modules/@buddi/gateway/dist/tips/rules.js.map +1 -1
  172. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  173. package/node_modules/@buddi/gateway/dist/web/api-routes.js +72 -9
  174. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  175. package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts +1 -1
  176. package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts.map +1 -1
  177. package/node_modules/@buddi/gateway/dist/web/api-scan.js +1 -0
  178. package/node_modules/@buddi/gateway/dist/web/api-scan.js.map +1 -1
  179. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  180. package/node_modules/@buddi/gateway/dist/web/chat.js +9 -0
  181. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  182. package/node_modules/@buddi/gateway/dist/web/composer.d.ts +45 -0
  183. package/node_modules/@buddi/gateway/dist/web/composer.d.ts.map +1 -0
  184. package/node_modules/@buddi/gateway/dist/web/composer.js +85 -0
  185. package/node_modules/@buddi/gateway/dist/web/composer.js.map +1 -0
  186. package/node_modules/@buddi/gateway/dist/web/market.d.ts +20 -1
  187. package/node_modules/@buddi/gateway/dist/web/market.d.ts.map +1 -1
  188. package/node_modules/@buddi/gateway/dist/web/market.js +41 -1
  189. package/node_modules/@buddi/gateway/dist/web/market.js.map +1 -1
  190. package/node_modules/@buddi/gateway/dist/web/people.d.ts +44 -0
  191. package/node_modules/@buddi/gateway/dist/web/people.d.ts.map +1 -0
  192. package/node_modules/@buddi/gateway/dist/web/people.js +114 -0
  193. package/node_modules/@buddi/gateway/dist/web/people.js.map +1 -0
  194. package/node_modules/@buddi/gateway/dist/web/server.d.ts +4 -0
  195. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  196. package/node_modules/@buddi/gateway/dist/web/server.js +137 -11
  197. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  198. package/node_modules/@buddi/gateway/dist/web/skill-bundles.d.ts +101 -0
  199. package/node_modules/@buddi/gateway/dist/web/skill-bundles.d.ts.map +1 -0
  200. package/node_modules/@buddi/gateway/dist/web/skill-bundles.js +439 -0
  201. package/node_modules/@buddi/gateway/dist/web/skill-bundles.js.map +1 -0
  202. package/node_modules/@buddi/gateway/dist/web/skills.d.ts +57 -1
  203. package/node_modules/@buddi/gateway/dist/web/skills.d.ts.map +1 -1
  204. package/node_modules/@buddi/gateway/dist/web/skills.js +171 -9
  205. package/node_modules/@buddi/gateway/dist/web/skills.js.map +1 -1
  206. package/node_modules/@buddi/gateway/dist/web/zip-read.d.ts +31 -0
  207. package/node_modules/@buddi/gateway/dist/web/zip-read.d.ts.map +1 -0
  208. package/node_modules/@buddi/gateway/dist/web/zip-read.js +125 -0
  209. package/node_modules/@buddi/gateway/dist/web/zip-read.js.map +1 -0
  210. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  211. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  212. package/node_modules/@buddi/runtime/dist/index.d.ts +1 -0
  213. package/node_modules/@buddi/runtime/dist/index.d.ts.map +1 -1
  214. package/node_modules/@buddi/runtime/dist/index.js +1 -0
  215. package/node_modules/@buddi/runtime/dist/index.js.map +1 -1
  216. package/node_modules/@buddi/runtime/dist/loop.js +11 -1
  217. package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
  218. package/node_modules/@buddi/runtime/dist/plugin-sign-in.d.ts +12 -0
  219. package/node_modules/@buddi/runtime/dist/plugin-sign-in.d.ts.map +1 -0
  220. package/node_modules/@buddi/runtime/dist/plugin-sign-in.js +397 -0
  221. package/node_modules/@buddi/runtime/dist/plugin-sign-in.js.map +1 -0
  222. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  223. package/node_modules/@buddi/tool-artifacts/dist/tools/write.d.ts.map +1 -1
  224. package/node_modules/@buddi/tool-artifacts/dist/tools/write.js +1 -0
  225. package/node_modules/@buddi/tool-artifacts/dist/tools/write.js.map +1 -1
  226. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  227. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  228. package/node_modules/@buddi/tool-email/dist/widgets.d.ts.map +1 -1
  229. package/node_modules/@buddi/tool-email/dist/widgets.js +2 -1
  230. package/node_modules/@buddi/tool-email/dist/widgets.js.map +1 -1
  231. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  232. package/node_modules/@buddi/tool-host/dist/index.d.ts +2 -1
  233. package/node_modules/@buddi/tool-host/dist/index.d.ts.map +1 -1
  234. package/node_modules/@buddi/tool-host/dist/index.js +3 -2
  235. package/node_modules/@buddi/tool-host/dist/index.js.map +1 -1
  236. package/node_modules/@buddi/tool-host/dist/process.d.ts +4 -0
  237. package/node_modules/@buddi/tool-host/dist/process.d.ts.map +1 -1
  238. package/node_modules/@buddi/tool-host/dist/process.js +4 -2
  239. package/node_modules/@buddi/tool-host/dist/process.js.map +1 -1
  240. package/node_modules/@buddi/tool-host/dist/service.d.ts +66 -17
  241. package/node_modules/@buddi/tool-host/dist/service.d.ts.map +1 -1
  242. package/node_modules/@buddi/tool-host/dist/service.js +172 -9
  243. package/node_modules/@buddi/tool-host/dist/service.js.map +1 -1
  244. package/node_modules/@buddi/tool-host/dist/skill-run.d.ts +55 -0
  245. package/node_modules/@buddi/tool-host/dist/skill-run.d.ts.map +1 -0
  246. package/node_modules/@buddi/tool-host/dist/skill-run.js +132 -0
  247. package/node_modules/@buddi/tool-host/dist/skill-run.js.map +1 -0
  248. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  249. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  250. package/node_modules/@buddi/tool-memory/dist/index.d.ts +1 -0
  251. package/node_modules/@buddi/tool-memory/dist/index.d.ts.map +1 -1
  252. package/node_modules/@buddi/tool-memory/dist/index.js +7 -2
  253. package/node_modules/@buddi/tool-memory/dist/index.js.map +1 -1
  254. package/node_modules/@buddi/tool-memory/dist/people.d.ts +218 -0
  255. package/node_modules/@buddi/tool-memory/dist/people.d.ts.map +1 -0
  256. package/node_modules/@buddi/tool-memory/dist/people.js +582 -0
  257. package/node_modules/@buddi/tool-memory/dist/people.js.map +1 -0
  258. package/node_modules/@buddi/tool-memory/dist/preamble.d.ts +4 -1
  259. package/node_modules/@buddi/tool-memory/dist/preamble.d.ts.map +1 -1
  260. package/node_modules/@buddi/tool-memory/dist/preamble.js +25 -7
  261. package/node_modules/@buddi/tool-memory/dist/preamble.js.map +1 -1
  262. package/node_modules/@buddi/tool-memory/migrations/002_people.sql +40 -0
  263. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  264. package/node_modules/imapflow/CHANGELOG.md +8 -0
  265. package/node_modules/imapflow/dist/cjs/commands/append.js +27 -3
  266. package/node_modules/imapflow/dist/cjs/commands/store.js +31 -6
  267. package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +1 -1
  268. package/node_modules/imapflow/dist/cjs/imap-flow.js +1 -1
  269. package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
  270. package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
  271. package/node_modules/imapflow/dist/esm/commands/append.js +27 -3
  272. package/node_modules/imapflow/dist/esm/commands/store.js +31 -6
  273. package/node_modules/imapflow/dist/esm/imap-flow.d.ts +1 -1
  274. package/node_modules/imapflow/dist/esm/imap-flow.js +1 -1
  275. package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
  276. package/node_modules/imapflow/dist/esm/package-info.js +1 -1
  277. package/node_modules/imapflow/package.json +4 -4
  278. package/node_modules/pino/CONTRIBUTING.md +5 -1
  279. package/node_modules/pino/LICENSE +1 -1
  280. package/node_modules/pino/README.md +1 -1
  281. package/node_modules/pino/SECURITY.md +18 -2
  282. package/node_modules/pino/browser.js +68 -8
  283. package/node_modules/pino/docs/api.md +75 -4
  284. package/node_modules/pino/docs/asynchronous.md +18 -3
  285. package/node_modules/pino/docs/browser.md +63 -0
  286. package/node_modules/pino/docs/child-loggers.md +22 -1
  287. package/node_modules/pino/docs/ecosystem.md +1 -0
  288. package/node_modules/pino/docs/help.md +11 -3
  289. package/node_modules/pino/docs/lts.md +29 -0
  290. package/node_modules/pino/docs/pretty.md +3 -0
  291. package/node_modules/pino/docs/redaction.md +3 -8
  292. package/node_modules/pino/docs/transports.md +71 -0
  293. package/node_modules/pino/docs/web.md +11 -14
  294. package/node_modules/pino/eslint.config.js +15 -7
  295. package/node_modules/pino/lib/caller.js +10 -0
  296. package/node_modules/pino/lib/meta.js +1 -1
  297. package/node_modules/pino/lib/multistream.js +15 -7
  298. package/node_modules/pino/lib/redaction.js +8 -3
  299. package/node_modules/pino/lib/symbols.js +3 -1
  300. package/node_modules/pino/lib/tools.js +2 -2
  301. package/node_modules/pino/lib/transport.js +14 -1
  302. package/node_modules/pino/lib/worker.js +4 -1
  303. package/node_modules/pino/package.json +14 -22
  304. package/node_modules/pino/pino.d.ts +709 -736
  305. package/node_modules/pino/pino.js +27 -2
  306. package/node_modules/pino/test/basic.test.js +66 -0
  307. package/node_modules/pino/test/browser-bindings.test.js +114 -0
  308. package/node_modules/pino/test/browser-redaction.test.js +264 -0
  309. package/node_modules/pino/test/browser-set-bindings.test.js +99 -0
  310. package/node_modules/pino/test/caller.test.js +20 -0
  311. package/node_modules/pino/test/escaping.test.js +17 -0
  312. package/node_modules/pino/test/fixtures/caller-loop.js +6 -0
  313. package/node_modules/pino/test/fixtures/ts/transpile.cjs +3 -3
  314. package/node_modules/pino/test/helper.js +6 -2
  315. package/node_modules/pino/test/multistream.test.js +64 -0
  316. package/node_modules/pino/test/redact.test.js +30 -0
  317. package/node_modules/pino/test/smoke.js +59 -0
  318. package/node_modules/pino/test/transport/core.test.js +85 -0
  319. package/node_modules/pino/test/transport/sync-false.test.js +12 -0
  320. package/node_modules/pino/test/transport/uses-pino-config.test.js +4 -4
  321. package/node_modules/pino/test/types/pino-import.tst.cts +30 -0
  322. package/node_modules/pino/test/types/pino-import.tst.js +73 -0
  323. package/node_modules/pino/test/types/pino-multistream.tst.ts +49 -0
  324. package/node_modules/pino/test/types/pino-top-export.tst.ts +32 -0
  325. package/node_modules/pino/test/types/{pino-transport.test-d.ts → pino-transport.tst.ts} +85 -70
  326. package/node_modules/pino/test/types/pino-type-only.tst.ts +77 -0
  327. package/node_modules/pino/test/types/pino.ts +14 -7
  328. package/node_modules/pino/test/types/{pino.test-d.ts → pino.tst.ts} +135 -137
  329. package/node_modules/pino/test/types/tsconfig.json +10 -0
  330. package/node_modules/pino/tsconfig.json +6 -6
  331. package/node_modules/real-require/README.md +6 -6
  332. package/node_modules/real-require/package.json +10 -21
  333. package/node_modules/real-require/src/index.js +2 -2
  334. package/package.json +2 -2
  335. package/packages/cli/dist/.tsbuildinfo +1 -1
  336. package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
  337. package/packages/cli/dist/doctor-probes.js +38 -3
  338. package/packages/cli/dist/doctor-probes.js.map +1 -1
  339. package/packages/cli/dist/doctor.d.ts +25 -0
  340. package/packages/cli/dist/doctor.d.ts.map +1 -1
  341. package/packages/cli/dist/doctor.js +28 -0
  342. package/packages/cli/dist/doctor.js.map +1 -1
  343. package/packages/core/dist/.tsbuildinfo +1 -1
  344. package/packages/core/dist/actions/approvals.d.ts +7 -0
  345. package/packages/core/dist/actions/approvals.d.ts.map +1 -1
  346. package/packages/core/dist/actions/approvals.js +11 -1
  347. package/packages/core/dist/actions/approvals.js.map +1 -1
  348. package/packages/core/dist/agents/catalog.d.ts.map +1 -1
  349. package/packages/core/dist/agents/catalog.js +2 -2
  350. package/packages/core/dist/agents/catalog.js.map +1 -1
  351. package/packages/core/dist/agents/skills.d.ts +60 -1
  352. package/packages/core/dist/agents/skills.d.ts.map +1 -1
  353. package/packages/core/dist/agents/skills.js +157 -17
  354. package/packages/core/dist/agents/skills.js.map +1 -1
  355. package/packages/core/dist/day-month.d.ts +52 -0
  356. package/packages/core/dist/day-month.d.ts.map +1 -0
  357. package/packages/core/dist/day-month.js +101 -0
  358. package/packages/core/dist/day-month.js.map +1 -0
  359. package/packages/core/dist/host/build.d.ts +11 -2
  360. package/packages/core/dist/host/build.d.ts.map +1 -1
  361. package/packages/core/dist/host/build.js +115 -4
  362. package/packages/core/dist/host/build.js.map +1 -1
  363. package/packages/core/dist/host/http.d.ts +35 -0
  364. package/packages/core/dist/host/http.d.ts.map +1 -1
  365. package/packages/core/dist/host/http.js +133 -29
  366. package/packages/core/dist/host/http.js.map +1 -1
  367. package/packages/core/dist/host/types.d.ts +72 -1
  368. package/packages/core/dist/host/types.d.ts.map +1 -1
  369. package/packages/core/dist/index.d.ts +2 -0
  370. package/packages/core/dist/index.d.ts.map +1 -1
  371. package/packages/core/dist/index.js +2 -0
  372. package/packages/core/dist/index.js.map +1 -1
  373. package/packages/core/dist/onboarding/store.d.ts.map +1 -1
  374. package/packages/core/dist/onboarding/store.js +28 -5
  375. package/packages/core/dist/onboarding/store.js.map +1 -1
  376. package/packages/core/dist/onboarding/types.d.ts +10 -0
  377. package/packages/core/dist/onboarding/types.d.ts.map +1 -1
  378. package/packages/core/dist/onboarding/types.js.map +1 -1
  379. package/packages/core/dist/pages.d.ts +145 -11
  380. package/packages/core/dist/pages.d.ts.map +1 -1
  381. package/packages/core/dist/pages.js +113 -5
  382. package/packages/core/dist/pages.js.map +1 -1
  383. package/packages/core/dist/plugin/index.d.ts +4 -0
  384. package/packages/core/dist/plugin/index.d.ts.map +1 -1
  385. package/packages/core/dist/plugin/index.js +2 -0
  386. package/packages/core/dist/plugin/index.js.map +1 -1
  387. package/packages/core/dist/plugin/sign-in.d.ts +78 -0
  388. package/packages/core/dist/plugin/sign-in.d.ts.map +1 -0
  389. package/packages/core/dist/plugin/sign-in.js +54 -0
  390. package/packages/core/dist/plugin/sign-in.js.map +1 -0
  391. package/packages/core/dist/plugin/version.d.ts +1 -1
  392. package/packages/core/dist/plugin/version.js +1 -1
  393. package/packages/core/dist/provider-accounts.d.ts +7 -0
  394. package/packages/core/dist/provider-accounts.d.ts.map +1 -1
  395. package/packages/core/dist/provider-accounts.js +15 -0
  396. package/packages/core/dist/provider-accounts.js.map +1 -1
  397. package/packages/core/dist/questions/types.d.ts +1 -1
  398. package/packages/core/dist/questions/types.js +1 -1
  399. package/packages/core/dist/queue/jobs.d.ts +57 -2
  400. package/packages/core/dist/queue/jobs.d.ts.map +1 -1
  401. package/packages/core/dist/queue/jobs.js +114 -0
  402. package/packages/core/dist/queue/jobs.js.map +1 -1
  403. package/packages/core/dist/queue/worker.d.ts +24 -2
  404. package/packages/core/dist/queue/worker.d.ts.map +1 -1
  405. package/packages/core/dist/queue/worker.js +66 -11
  406. package/packages/core/dist/queue/worker.js.map +1 -1
  407. package/packages/core/dist/registry.d.ts +8 -0
  408. package/packages/core/dist/registry.d.ts.map +1 -1
  409. package/packages/core/dist/registry.js +15 -2
  410. package/packages/core/dist/registry.js.map +1 -1
  411. package/packages/core/dist/secrets/scrub.d.ts.map +1 -1
  412. package/packages/core/dist/secrets/scrub.js +15 -0
  413. package/packages/core/dist/secrets/scrub.js.map +1 -1
  414. package/packages/core/dist/tools.d.ts +29 -0
  415. package/packages/core/dist/tools.d.ts.map +1 -1
  416. package/packages/core/dist/tools.js.map +1 -1
  417. package/packages/core/dist/views.d.ts +12 -12
  418. package/packages/core/dist/widgets.d.ts +14 -1
  419. package/packages/core/dist/widgets.d.ts.map +1 -1
  420. package/packages/core/dist/widgets.js +30 -0
  421. package/packages/core/dist/widgets.js.map +1 -1
  422. package/packages/core/migrations/074_owner_identity.sql +14 -0
  423. package/packages/gateway/dist/.tsbuildinfo +1 -1
  424. package/packages/gateway/dist/agents/catalog.d.ts.map +1 -1
  425. package/packages/gateway/dist/agents/catalog.js +3 -3
  426. package/packages/gateway/dist/agents/catalog.js.map +1 -1
  427. package/packages/gateway/dist/agents/catalogue-package.d.ts +8 -0
  428. package/packages/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
  429. package/packages/gateway/dist/agents/catalogue-package.js +11 -4
  430. package/packages/gateway/dist/agents/catalogue-package.js.map +1 -1
  431. package/packages/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  432. package/packages/gateway/dist/agents/owner-tools.js +36 -2
  433. package/packages/gateway/dist/agents/owner-tools.js.map +1 -1
  434. package/packages/gateway/dist/agents/platform-catalogue.d.ts +19 -0
  435. package/packages/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
  436. package/packages/gateway/dist/agents/platform-catalogue.js +108 -0
  437. package/packages/gateway/dist/agents/platform-catalogue.js.map +1 -1
  438. package/packages/gateway/dist/agents/platform.d.ts +4 -4
  439. package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
  440. package/packages/gateway/dist/agents/platform.js +11 -0
  441. package/packages/gateway/dist/agents/platform.js.map +1 -1
  442. package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
  443. package/packages/gateway/dist/bootstrap.js +4 -1
  444. package/packages/gateway/dist/bootstrap.js.map +1 -1
  445. package/packages/gateway/dist/evals/golden.d.ts +33 -1
  446. package/packages/gateway/dist/evals/golden.d.ts.map +1 -1
  447. package/packages/gateway/dist/evals/golden.js +168 -3
  448. package/packages/gateway/dist/evals/golden.js.map +1 -1
  449. package/packages/gateway/dist/index.d.ts +1 -0
  450. package/packages/gateway/dist/index.d.ts.map +1 -1
  451. package/packages/gateway/dist/index.js +1 -0
  452. package/packages/gateway/dist/index.js.map +1 -1
  453. package/packages/gateway/dist/missions/dates.d.ts +98 -0
  454. package/packages/gateway/dist/missions/dates.d.ts.map +1 -0
  455. package/packages/gateway/dist/missions/dates.js +252 -0
  456. package/packages/gateway/dist/missions/dates.js.map +1 -0
  457. package/packages/gateway/dist/missions/execute.d.ts +8 -0
  458. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  459. package/packages/gateway/dist/missions/execute.js +16 -1
  460. package/packages/gateway/dist/missions/execute.js.map +1 -1
  461. package/packages/gateway/dist/missions/report.d.ts.map +1 -1
  462. package/packages/gateway/dist/missions/report.js +1 -0
  463. package/packages/gateway/dist/missions/report.js.map +1 -1
  464. package/packages/gateway/dist/ollama-local.d.ts +90 -0
  465. package/packages/gateway/dist/ollama-local.d.ts.map +1 -0
  466. package/packages/gateway/dist/ollama-local.js +201 -0
  467. package/packages/gateway/dist/ollama-local.js.map +1 -0
  468. package/packages/gateway/dist/plugins-cli.d.ts +8 -0
  469. package/packages/gateway/dist/plugins-cli.d.ts.map +1 -1
  470. package/packages/gateway/dist/plugins-cli.js +22 -1
  471. package/packages/gateway/dist/plugins-cli.js.map +1 -1
  472. package/packages/gateway/dist/serve.d.ts.map +1 -1
  473. package/packages/gateway/dist/serve.js +50 -5
  474. package/packages/gateway/dist/serve.js.map +1 -1
  475. package/packages/gateway/dist/surfaces/pending-question.js +2 -2
  476. package/packages/gateway/dist/system-context.d.ts +21 -1
  477. package/packages/gateway/dist/system-context.d.ts.map +1 -1
  478. package/packages/gateway/dist/system-context.js +76 -2
  479. package/packages/gateway/dist/system-context.js.map +1 -1
  480. package/packages/gateway/dist/telegram/approvals.d.ts.map +1 -1
  481. package/packages/gateway/dist/telegram/approvals.js +4 -2
  482. package/packages/gateway/dist/telegram/approvals.js.map +1 -1
  483. package/packages/gateway/dist/telegram/channel.d.ts.map +1 -1
  484. package/packages/gateway/dist/telegram/channel.js +6 -1
  485. package/packages/gateway/dist/telegram/channel.js.map +1 -1
  486. package/packages/gateway/dist/telegram/html.d.ts +34 -0
  487. package/packages/gateway/dist/telegram/html.d.ts.map +1 -0
  488. package/packages/gateway/dist/telegram/html.js +263 -0
  489. package/packages/gateway/dist/telegram/html.js.map +1 -0
  490. package/packages/gateway/dist/telegram/notify.d.ts +6 -0
  491. package/packages/gateway/dist/telegram/notify.d.ts.map +1 -1
  492. package/packages/gateway/dist/telegram/notify.js +25 -3
  493. package/packages/gateway/dist/telegram/notify.js.map +1 -1
  494. package/packages/gateway/dist/tips/facts.d.ts +2 -0
  495. package/packages/gateway/dist/tips/facts.d.ts.map +1 -1
  496. package/packages/gateway/dist/tips/facts.js +4 -1
  497. package/packages/gateway/dist/tips/facts.js.map +1 -1
  498. package/packages/gateway/dist/tips/rules.d.ts.map +1 -1
  499. package/packages/gateway/dist/tips/rules.js +10 -0
  500. package/packages/gateway/dist/tips/rules.js.map +1 -1
  501. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  502. package/packages/gateway/dist/web/api-routes.js +72 -9
  503. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  504. package/packages/gateway/dist/web/api-scan.d.ts +1 -1
  505. package/packages/gateway/dist/web/api-scan.d.ts.map +1 -1
  506. package/packages/gateway/dist/web/api-scan.js +1 -0
  507. package/packages/gateway/dist/web/api-scan.js.map +1 -1
  508. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  509. package/packages/gateway/dist/web/chat.js +9 -0
  510. package/packages/gateway/dist/web/chat.js.map +1 -1
  511. package/packages/gateway/dist/web/composer.d.ts +45 -0
  512. package/packages/gateway/dist/web/composer.d.ts.map +1 -0
  513. package/packages/gateway/dist/web/composer.js +85 -0
  514. package/packages/gateway/dist/web/composer.js.map +1 -0
  515. package/packages/gateway/dist/web/market.d.ts +20 -1
  516. package/packages/gateway/dist/web/market.d.ts.map +1 -1
  517. package/packages/gateway/dist/web/market.js +41 -1
  518. package/packages/gateway/dist/web/market.js.map +1 -1
  519. package/packages/gateway/dist/web/people.d.ts +44 -0
  520. package/packages/gateway/dist/web/people.d.ts.map +1 -0
  521. package/packages/gateway/dist/web/people.js +114 -0
  522. package/packages/gateway/dist/web/people.js.map +1 -0
  523. package/packages/gateway/dist/web/server.d.ts +4 -0
  524. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  525. package/packages/gateway/dist/web/server.js +137 -11
  526. package/packages/gateway/dist/web/server.js.map +1 -1
  527. package/packages/gateway/dist/web/skill-bundles.d.ts +101 -0
  528. package/packages/gateway/dist/web/skill-bundles.d.ts.map +1 -0
  529. package/packages/gateway/dist/web/skill-bundles.js +439 -0
  530. package/packages/gateway/dist/web/skill-bundles.js.map +1 -0
  531. package/packages/gateway/dist/web/skills.d.ts +57 -1
  532. package/packages/gateway/dist/web/skills.d.ts.map +1 -1
  533. package/packages/gateway/dist/web/skills.js +171 -9
  534. package/packages/gateway/dist/web/skills.js.map +1 -1
  535. package/packages/gateway/dist/web/zip-read.d.ts +31 -0
  536. package/packages/gateway/dist/web/zip-read.d.ts.map +1 -0
  537. package/packages/gateway/dist/web/zip-read.js +125 -0
  538. package/packages/gateway/dist/web/zip-read.js.map +1 -0
  539. package/packages/install/dist/.tsbuildinfo +1 -1
  540. package/packages/runtime/dist/.tsbuildinfo +1 -1
  541. package/packages/runtime/dist/index.d.ts +1 -0
  542. package/packages/runtime/dist/index.d.ts.map +1 -1
  543. package/packages/runtime/dist/index.js +1 -0
  544. package/packages/runtime/dist/index.js.map +1 -1
  545. package/packages/runtime/dist/loop.js +11 -1
  546. package/packages/runtime/dist/loop.js.map +1 -1
  547. package/packages/runtime/dist/plugin-sign-in.d.ts +12 -0
  548. package/packages/runtime/dist/plugin-sign-in.d.ts.map +1 -0
  549. package/packages/runtime/dist/plugin-sign-in.js +397 -0
  550. package/packages/runtime/dist/plugin-sign-in.js.map +1 -0
  551. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  552. package/packages/tools/artifacts/dist/tools/write.d.ts.map +1 -1
  553. package/packages/tools/artifacts/dist/tools/write.js +1 -0
  554. package/packages/tools/artifacts/dist/tools/write.js.map +1 -1
  555. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  556. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  557. package/packages/tools/email/dist/widgets.d.ts.map +1 -1
  558. package/packages/tools/email/dist/widgets.js +2 -1
  559. package/packages/tools/email/dist/widgets.js.map +1 -1
  560. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  561. package/packages/tools/host/dist/index.d.ts +2 -1
  562. package/packages/tools/host/dist/index.d.ts.map +1 -1
  563. package/packages/tools/host/dist/index.js +3 -2
  564. package/packages/tools/host/dist/index.js.map +1 -1
  565. package/packages/tools/host/dist/process.d.ts +4 -0
  566. package/packages/tools/host/dist/process.d.ts.map +1 -1
  567. package/packages/tools/host/dist/process.js +4 -2
  568. package/packages/tools/host/dist/process.js.map +1 -1
  569. package/packages/tools/host/dist/service.d.ts +66 -17
  570. package/packages/tools/host/dist/service.d.ts.map +1 -1
  571. package/packages/tools/host/dist/service.js +172 -9
  572. package/packages/tools/host/dist/service.js.map +1 -1
  573. package/packages/tools/host/dist/skill-run.d.ts +55 -0
  574. package/packages/tools/host/dist/skill-run.d.ts.map +1 -0
  575. package/packages/tools/host/dist/skill-run.js +132 -0
  576. package/packages/tools/host/dist/skill-run.js.map +1 -0
  577. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  578. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  579. package/packages/tools/memory/dist/index.d.ts +1 -0
  580. package/packages/tools/memory/dist/index.d.ts.map +1 -1
  581. package/packages/tools/memory/dist/index.js +7 -2
  582. package/packages/tools/memory/dist/index.js.map +1 -1
  583. package/packages/tools/memory/dist/people.d.ts +218 -0
  584. package/packages/tools/memory/dist/people.d.ts.map +1 -0
  585. package/packages/tools/memory/dist/people.js +582 -0
  586. package/packages/tools/memory/dist/people.js.map +1 -0
  587. package/packages/tools/memory/dist/preamble.d.ts +4 -1
  588. package/packages/tools/memory/dist/preamble.d.ts.map +1 -1
  589. package/packages/tools/memory/dist/preamble.js +25 -7
  590. package/packages/tools/memory/dist/preamble.js.map +1 -1
  591. package/packages/tools/memory/migrations/002_people.sql +40 -0
  592. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  593. package/packages/web/dist/assets/{index-B_P_ux2I.css → index-CN1AXMI1.css} +1 -1
  594. package/packages/web/dist/assets/index-CQRE9LJX.js +145 -0
  595. package/packages/web/dist/assets/{lottie_light-Dj5SSwxs.js → lottie_light-CKJ88Yuk.js} +1 -1
  596. package/packages/web/dist/build.json +1 -1
  597. package/packages/web/dist/index.html +2 -2
  598. package/packages/web/dist/precache.json +4 -4
  599. package/node_modules/pino/test/types/pino-import.test-d.cts +0 -30
  600. package/node_modules/pino/test/types/pino-multistream.test-d.ts +0 -28
  601. package/node_modules/pino/test/types/pino-top-export.test-d.ts +0 -34
  602. package/node_modules/pino/test/types/pino-type-only.test-d.ts +0 -75
  603. package/node_modules/thread-stream/node_modules/real-require/LICENSE.md +0 -21
  604. package/node_modules/thread-stream/node_modules/real-require/README.md +0 -51
  605. package/node_modules/thread-stream/node_modules/real-require/package.json +0 -38
  606. package/node_modules/thread-stream/node_modules/real-require/src/index.js +0 -14
  607. package/packages/web/dist/assets/index-CjOzIGL7.js +0 -134
@@ -7,6 +7,69 @@ This can be useful with isomorphic/universal JavaScript code.
7
7
  By default, in the browser,
8
8
  `pino` uses corresponding [Log4j](https://en.wikipedia.org/wiki/Log4j) `console` methods (`console.error`, `console.warn`, `console.info`, `console.debug`, `console.trace`) and uses `console.error` for any `fatal` level logs.
9
9
 
10
+ <a id="nodejs-only-apis"></a>
11
+ ## Node.js-only APIs
12
+
13
+ The browser build (`browser.js`, selected through the `browser` field in
14
+ `package.json`) does not implement the parts of the API that depend on the file
15
+ system or on worker threads. Accessing them in the browser throws a
16
+ `TypeError`, because the export is simply absent:
17
+
18
+ ```js
19
+ const pino = require('pino')
20
+ pino.destination('./my-file') // TypeError: pino.destination is not a function
21
+ ```
22
+
23
+ The following statics are available in Node.js only:
24
+
25
+ | Static | Why it is Node.js only |
26
+ | --- | --- |
27
+ | [`pino.destination()`](/docs/api.md#pino-destination) | Returns a [`SonicBoom`](https://github.com/pinojs/sonic-boom) instance writing to a file descriptor. |
28
+ | [`pino.transport()`](/docs/api.md#pino-transport) | Runs a [transport](/docs/transports.md) on a worker thread. |
29
+ | [`pino.multistream()`](/docs/api.md#pino-multistream) | Fans out to multiple destination streams. |
30
+
31
+ `pino.levels`, `pino.stdSerializers` and `pino.stdTimeFunctions` are available in
32
+ both environments.
33
+
34
+ ### Methods that are no-ops in the browser
35
+
36
+ These exist on a browser logger, so calling them is safe, but they do nothing:
37
+
38
+ * [`logger.flush([cb])`](/docs/api.md#flush) — there is no write buffer
39
+ to flush. Note that a callback passed to it is **not** invoked.
40
+ * Every `EventEmitter` method (`on`, `once`, `emit`, `removeListener`,
41
+ `listeners`, ...). As a consequence the
42
+ [`level-change`](/docs/api.md#level-change) event never fires in the
43
+ browser.
44
+
45
+ ### Writing isomorphic code
46
+
47
+ Code shared between a server and a browser bundle should not call the Node.js
48
+ only statics unconditionally. Guard the call rather than the environment, so the
49
+ same branch works under any bundler:
50
+
51
+ ```js
52
+ const pino = require('pino')
53
+
54
+ const logger = pino.destination
55
+ ? pino(pino.destination('./my-file')) // Node.js
56
+ : pino({ browser: { asObject: true } }) // browser
57
+ ```
58
+
59
+ Note that the browser build's `pino()` accepts the options object only. A second
60
+ `destination` argument is accepted but ignored, so a logger constructed with one
61
+ still writes to the console rather than failing:
62
+
63
+ ```js
64
+ // in the browser the second argument is ignored, not honoured
65
+ const logger = pino({ level: 'info' }, someDestination)
66
+ logger.info('still goes to the console')
67
+ ```
68
+
69
+ Assigning a no-op shim onto the `pino` export (`pino.destination = () => {}`)
70
+ works too, but it mutates a module object shared with every other importer in the
71
+ bundle; guarding the call site keeps the change local.
72
+
10
73
  ## Options
11
74
 
12
75
  Pino can be passed a `browser` object in the options object,
@@ -20,6 +20,26 @@ module.exports = {
20
20
  }
21
21
  ```
22
22
 
23
+ Child logger bindings are top-level fields on every log line emitted by the
24
+ child logger. Do not create child loggers from externally supplied objects or
25
+ user-controlled binding names, because those keys can conflict with Pino fields
26
+ such as `level`, `time`, or `msg`, as well as application or security fields.
27
+ If untrusted data must be associated with logs, place it under an
28
+ application-controlled key:
29
+
30
+ ```js
31
+ // Avoid: user-controlled keys become top-level fields on every child log line
32
+ const child = logger.child(untrustedObject)
33
+
34
+ // Prefer: user-controlled keys are contained under a trusted namespace
35
+ const child = logger.child({ untrusted: untrustedObject })
36
+ ```
37
+
38
+ As a matter of good security hygiene, prefer not to log untrusted data at all
39
+ unless it is necessary. When it is necessary, sanitize and redact it first.
40
+ See also [`logger.child()` in the API documentation](/docs/api.md#child) and
41
+ [`mergingObject`](/docs/api.md#mergingobject).
42
+
23
43
  ## Cost of child logging
24
44
 
25
45
  Child logger creation is fast:
@@ -88,7 +108,8 @@ behavior.
88
108
 
89
109
  There may be cases where this edge case becomes problematic if a JSON parser with alternative behavior
90
110
  is used to process the logs. It's recommended to be conscious of namespace conflicts with child loggers,
91
- in light of an expected log processing approach.
111
+ in light of an expected log processing approach. This is especially important for untrusted data: do not
112
+ allow externally supplied objects or user-controlled key names to become child logger bindings.
92
113
 
93
114
  One of Pino's performance tricks is to avoid building objects and stringifying
94
115
  them, so we're building strings instead. This is why duplicate keys between
@@ -71,6 +71,7 @@ according to a given format string.
71
71
 
72
72
  + [`@google-cloud/pino-logging-gcp-config`](https://www.npmjs.com/package/@google-cloud/pino-logging-gcp-config): Config helper and formatter to output [Google Cloud Platform Structured Logging](https://cloud.google.com/logging/docs/structured-logging)
73
73
  + [`@newrelic/pino-enricher`](https://github.com/newrelic/newrelic-node-log-extensions/blob/main/packages/pino-log-enricher): a log customization to add New Relic context to use [Logs In Context](https://docs.newrelic.com/docs/logs/logs-context/logs-in-context/)
74
+ + [`@sentry/node`](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/pino/): Sentry SDK with native pinoIntegration for direct Pino instrumentation and error tracking.
74
75
  + [`cloud-pine`](https://github.com/metcoder95/cloud-pine): transport that provides abstraction and compatibility with [`@google-cloud/logging`](https://www.npmjs.com/package/@google-cloud/logging).
75
76
  + [`cls-proxify`](https://github.com/keenondrums/cls-proxify): integration of pino and [CLS](https://github.com/jeff-lewis/cls-hooked). Useful for creating dynamically configured child loggers (e.g. with added trace ID) for each request.
76
77
  + [`crawlee-pino`](https://github.com/imyelo/crawlee-pino): use Pino to log within Crawlee
@@ -147,11 +147,19 @@ const logger = pino({
147
147
  <a id="dupe-keys"></a>
148
148
  ## How Pino handles duplicate keys
149
149
 
150
- Duplicate keys are possibly when a child logger logs an object with a key that
151
- collides with a key in the child loggers bindings.
150
+ Duplicate keys are possible when a logged object contains a top-level key that
151
+ collides with a Pino field or a key in the child logger's bindings, or when child
152
+ logger bindings collide with parent bindings.
153
+
154
+ For untrusted data, avoid passing externally supplied objects directly to logging
155
+ methods or child logger bindings. User-controlled top-level keys can conflict
156
+ with Pino fields such as `level`, `time`, or `msg`, as well as application or
157
+ security fields. If untrusted data must be logged, place it under an
158
+ application-controlled key, such as `logger.info({ untrusted })`, and prefer not
159
+ to log untrusted data at all unless necessary.
152
160
 
153
161
  See the [child logger duplicate keys caveat](/docs/child-loggers.md#duplicate-keys-caveat)
154
- for information on this is handled.
162
+ and [`logger.child()` bindings](/docs/api.md#logger-child-bindings) for more information.
155
163
 
156
164
  <a id="level-string"></a>
157
165
  ## Log levels as labels instead of numbers
@@ -37,6 +37,35 @@ A "month" is defined as 30 consecutive days.
37
37
 
38
38
  [semver]: https://semver.org/
39
39
 
40
+ <a name="supported-nodejs"></a>
41
+
42
+ ### Supported Node.js versions
43
+
44
+ Pino follows the [Node.js release schedule][node-release]. A Pino release line
45
+ is tested against, and supports, every Node.js release line that is in its
46
+ _current_, _active LTS_, or _maintenance LTS_ phase when the Pino line is
47
+ released, as described above.
48
+
49
+ Support for a Node.js version is **only dropped in a new Pino major release**. A
50
+ published Pino major will never drop a Node.js release line that it originally
51
+ shipped with, so upgrading within a major line (for example, from `9.1.0` to
52
+ `9.4.0`) will never remove support for a Node.js version you already run on.
53
+
54
+ Once a Node.js release line reaches its end-of-life, Pino supports it on a
55
+ best-effort basis, with the following caveats:
56
+
57
+ - End-of-life Node.js versions are not exercised in continuous integration.
58
+ - Some fixes and features cannot be backported to the Pino lines that still
59
+ support them.
60
+ - Dependencies cannot be kept up to date.
61
+
62
+ To keep running on an end-of-life Node.js version, pin your dependency to the
63
+ last Pino major line that supported it. The [Schedule](#lts-schedule) below maps
64
+ each Pino release line to the Node.js versions it supports; for example, to stay
65
+ on Node.js 14, install the latest `8.x` release with `"pino": "8.x"`.
66
+
67
+ [node-release]: https://github.com/nodejs/release#release-schedule
68
+
40
69
  <a name="lts-schedule"></a>
41
70
 
42
71
  ### Schedule
@@ -32,4 +32,7 @@ module like [`pino-pretty`][pp]:
32
32
  logger.info('hi')
33
33
  ```
34
34
 
35
+ **Note:** `logger.flush()` does not flush the output of `pino-pretty`. See
36
+ [Flush Limitations with `pino-pretty`](/docs/asynchronous.md) for more details.
37
+
35
38
  [pp]: https://github.com/pinojs/pino-pretty
@@ -1,14 +1,11 @@
1
1
  # Redaction
2
2
 
3
- > Redaction is not supported in the browser [#670](https://github.com/pinojs/pino/issues/670)
4
-
5
3
  To redact sensitive information, supply paths to keys that hold sensitive data
6
4
  using the `redact` option. Note that paths that contain hyphens need to use
7
5
  brackets to access the hyphenated property:
8
6
 
9
7
  ```js
10
- const logger = require('.')({
11
- redact: ['key', 'path.to.key', 'stuff.thats[*].secret', 'path["with-hyphen"]']
8
+ const logger = require('.')({\n redact: ['key', 'path.to.key', 'stuff.thats[*].secret', 'path["with-hyphen"]']
12
9
  })
13
10
 
14
11
  logger.info({
@@ -37,8 +34,7 @@ an object. This allows control over *how* information is redacted.
37
34
  For instance, setting the censor:
38
35
 
39
36
  ```js
40
- const logger = require('.')({
41
- redact: {
37
+ const logger = require('.')({\n redact: {
42
38
  paths: ['key', 'path.to.key', 'stuff.thats[*].secret'],
43
39
  censor: '**GDPR COMPLIANT**'
44
40
  }
@@ -67,8 +63,7 @@ This will output:
67
63
  The `redact.remove` option also allows for the key and value to be removed from output:
68
64
 
69
65
  ```js
70
- const logger = require('.')({
71
- redact: {
66
+ const logger = require('.')({\n redact: {
72
67
  paths: ['key', 'path.to.key', 'stuff.thats[*].secret'],
73
68
  remove: true
74
69
  }
@@ -159,6 +159,36 @@ const transport = pino.transport({
159
159
  pino(transport)
160
160
  ```
161
161
 
162
+ #### `formatters.level` with multiple targets
163
+
164
+ When using `targets`, Pino routes records in the worker thread based on the numeric `level` field in each log line. Because of that, a custom `formatters.level` must not remove, rename, or convert `level` to a string when multiple targets are configured.
165
+
166
+ Unsupported example:
167
+
168
+ ```js
169
+ const logger = pino({
170
+ formatters: {
171
+ level (label) {
172
+ return { severity: label }
173
+ }
174
+ },
175
+ transport: {
176
+ targets: [
177
+ { target: 'pino/file', options: { destination: 1 } },
178
+ { target: 'pino/file', options: { destination: 2 } }
179
+ ]
180
+ }
181
+ })
182
+ ```
183
+
184
+ In this case, Pino cannot apply per-target level filtering correctly. Depending on how the transport is constructed, Pino will either throw or emit a warning.
185
+
186
+ Supported alternatives:
187
+
188
+ - Keep the numeric `level` field unchanged when using multiple targets.
189
+ - If you need string labels such as `"info"`, transform the output in a transport pipeline or in a custom transport after routing has already happened.
190
+ - `timestamp` customization still works with multiple targets.
191
+
162
192
  It is also possible to use the `dedupe` option to send logs only to the stream with the higher level.
163
193
  ```js
164
194
  const pino = require('pino')
@@ -554,6 +584,7 @@ PRs to this document are welcome for any new transports!
554
584
  + [pino-roll](#pino-roll)
555
585
  + [pino-seq-transport](#pino-seq-transport)
556
586
  + [pino-sentry-transport](#pino-sentry-transport)
587
+ + [Sentry Native SDK Integration](#sentry-native-integration)
557
588
  + [pino-slack-webhook](#pino-slack-webhook)
558
589
  + [pino-telegram-webhook](#pino-telegram-webhook)
559
590
  + [pino-yc-transport](#pino-yc-transport)
@@ -1168,6 +1199,46 @@ pino(transport)
1168
1199
  [pino-sentry-transport]: https://github.com/tomer-yechiel/pino-sentry-transport
1169
1200
  [Sentry]: https://sentry.io/
1170
1201
 
1202
+ <a id="sentry-native-integration"></a>
1203
+ ### Sentry Native SDK Integration
1204
+
1205
+ As an alternative to using a Pino transport, Sentry's Node.js SDK (v10.18.0+) provides a native `pinoIntegration` that instruments Pino directly. This approach captures logs within the Sentry SDK rather than forwarding them through a separate worker process.
1206
+
1207
+ ```js
1208
+ const Sentry = require('@sentry/node')
1209
+ const pino = require('pino')
1210
+
1211
+ Sentry.init({
1212
+ dsn: 'https://******@sentry.io/12345',
1213
+ enableLogs: true,
1214
+ integrations: [Sentry.pinoIntegration()],
1215
+ })
1216
+
1217
+ const logger = pino()
1218
+ logger.info('This log will be captured by Sentry')
1219
+ ```
1220
+
1221
+ The integration supports configuring which log levels are captured as Sentry logs or errors:
1222
+
1223
+ ```js
1224
+ Sentry.init({
1225
+ dsn: 'https://******@sentry.io/12345',
1226
+ enableLogs: true,
1227
+ integrations: [
1228
+ Sentry.pinoIntegration({
1229
+ // Capture these levels as Sentry logs
1230
+ log: { levels: ['info', 'warn', 'error'] },
1231
+ // Capture these levels as Sentry errors
1232
+ error: { levels: ['error', 'fatal'], handled: true }
1233
+ })
1234
+ ],
1235
+ })
1236
+ ```
1237
+
1238
+ **Note:** This integration only works in the Node.js runtime. Requires Sentry SDK version 10.18.0 or higher and pino version 8.0.0 or higher. For full documentation, see the [Sentry Pino integration docs][sentry-pino-docs].
1239
+
1240
+ [sentry-pino-docs]: https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/pino/
1241
+
1171
1242
  <a id="pino-seq"></a>
1172
1243
  ### pino-seq
1173
1244
 
@@ -274,28 +274,25 @@ See the [pino-http README](https://npm.im/pino-http) for more info.
274
274
  ## Pino with Hono
275
275
 
276
276
  ```sh
277
- npm install pino pino-http hono
277
+ npm install pino @hono/structured-logger hono
278
278
  ```
279
279
 
280
280
  ```js
281
281
  import { serve } from '@hono/node-server';
282
282
  import { Hono } from 'hono';
283
283
  import { requestId } from 'hono/request-id';
284
- import { pinoHttp } from 'pino-http';
284
+ import { structuredLogger } from '@hono/structured-logger';
285
+ import pino from 'pino';
286
+
287
+ const rootLogger = pino();
285
288
 
286
289
  const app = new Hono();
287
290
  app.use(requestId());
288
- app.use(async (c, next) => {
289
- // pass hono's request-id to pino-http
290
- c.env.incoming.id = c.var.requestId;
291
-
292
- // map express style middleware to hono
293
- await new Promise((resolve) => pinoHttp()(c.env.incoming, c.env.outgoing, () => resolve()));
294
-
295
- c.set('logger', c.env.incoming.log);
296
-
297
- await next();
298
- });
291
+ app.use(
292
+ structuredLogger({
293
+ createLogger: (c) => rootLogger.child({ requestId: c.var.requestId }),
294
+ })
295
+ );
299
296
 
300
297
  app.get('/', (c) => {
301
298
  c.var.logger.info('something');
@@ -306,4 +303,4 @@ app.get('/', (c) => {
306
303
  serve(app);
307
304
  ```
308
305
 
309
- See the [pino-http README](https://npm.im/pino-http) for more info.
306
+ See the [@hono/structured-logger README](https://github.com/honojs/middleware/blob/main/packages/structured-logger/README.md) for more info.
@@ -8,21 +8,29 @@ module.exports = defineConfig([
8
8
  ts: true
9
9
  }),
10
10
  globalIgnores([
11
- 'pino.d.ts',
12
11
  'test/fixtures/syntax-error-esm.mjs',
13
- 'test/fixtures/ts/*cjs',
12
+ 'test/fixtures/ts/*cjs'
14
13
  ]),
15
14
  {
16
15
  rules: {
17
- 'no-var': 'off',
18
- },
16
+ 'comma-dangle': ['error', 'never'],
17
+ 'no-var': 'off'
18
+ }
19
+ },
20
+ {
21
+ files: ['pino.d.ts'],
22
+ rules: {
23
+ '@typescript-eslint/no-use-before-define': 'off',
24
+ '@typescript-eslint/no-unused-vars': 'off'
25
+ }
19
26
  },
20
27
  {
21
28
  files: ['test/types/**/*'],
22
29
  rules: {
30
+ 'no-unused-expressions': 'off',
23
31
  '@typescript-eslint/no-unused-expressions': 'off',
24
32
  '@typescript-eslint/no-unused-vars': 'off',
25
- 'n/handle-callback-err': 'off',
26
- },
27
- },
33
+ 'n/handle-callback-err': 'off'
34
+ }
35
+ }
28
36
  ])
@@ -1,10 +1,20 @@
1
1
  'use strict'
2
2
 
3
+ const util = require('node:util')
4
+
5
+ // getCallSite requires Node >=22.9.0
6
+ // getCallSite was renamed in Node 23.3.0 / 22.12.0
7
+ const getCallSites = util.getCallSites ?? util.getCallSite
8
+
3
9
  function noOpPrepareStackTrace (_, stack) {
4
10
  return stack
5
11
  }
6
12
 
7
13
  module.exports = function getCallers () {
14
+ if (getCallSites) {
15
+ return getCallSites().slice(2).map(callSite => callSite.scriptName)
16
+ }
17
+
8
18
  const originalPrepare = Error.prepareStackTrace
9
19
  Error.prepareStackTrace = noOpPrepareStackTrace
10
20
  const stack = new Error().stack
@@ -1,3 +1,3 @@
1
1
  'use strict'
2
2
 
3
- module.exports = { version: '10.3.1' }
3
+ module.exports = { version: '10.4.0' }
@@ -48,7 +48,13 @@ function multistream (streamsArray, opts) {
48
48
  // we can exit early because the streams are ordered by level
49
49
  function write (data) {
50
50
  let dest
51
- const level = this.lastLevel
51
+ // `lastLevel` is normally the numeric level, but a source may relay a
52
+ // level label string (e.g. pino-abstract-transport forwarding lines
53
+ // produced with a `formatters.level` option). Resolve it to a number so
54
+ // the level comparisons below don't silently drop the record.
55
+ const level = typeof this.lastLevel === 'string'
56
+ ? (this.streamLevels || streamLevels)[this.lastLevel]
57
+ : this.lastLevel
52
58
  const { streams } = this
53
59
  // for handling situation when several streams has the same level
54
60
  let recordedLevel = 0
@@ -99,7 +105,7 @@ function multistream (streamsArray, opts) {
99
105
 
100
106
  function add (dest) {
101
107
  if (!dest) {
102
- return res
108
+ return this
103
109
  }
104
110
 
105
111
  // Check that dest implements either StreamEntry or DestinationStream
@@ -135,7 +141,7 @@ function multistream (streamsArray, opts) {
135
141
 
136
142
  this.minLevel = streams[0].level
137
143
 
138
- return res
144
+ return this
139
145
  }
140
146
 
141
147
  function remove (id) {
@@ -148,7 +154,7 @@ function multistream (streamsArray, opts) {
148
154
  this.minLevel = streams.length > 0 ? streams[0].level : -1
149
155
  }
150
156
 
151
- return res
157
+ return this
152
158
  }
153
159
 
154
160
  function end () {
@@ -174,12 +180,14 @@ function multistream (streamsArray, opts) {
174
180
  write,
175
181
  add,
176
182
  remove,
183
+ emit,
184
+ flushSync,
185
+ end,
177
186
  minLevel: level,
178
187
  streams,
179
188
  clone,
180
- emit,
181
- flushSync,
182
- [metadata]: true
189
+ [metadata]: true,
190
+ streamLevels
183
191
  }
184
192
  }
185
193
  }
@@ -64,14 +64,19 @@ function redaction (opts, serialize) {
64
64
 
65
65
  o[ns].push(nextPath)
66
66
  return o
67
- }, {})
67
+ // The keys here are the first segment of each redact path, so they are the
68
+ // user's strings. On a plain object a path like 'constructor.secret' reads
69
+ // the inherited function, and `o[ns] = o[ns] || []` keeps it.
70
+ }, Object.create(null))
68
71
 
69
72
  // the redactor assigned to the format symbol key
70
73
  // provides top level redaction for instances where
71
74
  // an object is interpolated into the msg string
72
- const result = {
75
+ // Same reason as the shape above: the keys come from the redact paths, and
76
+ // this object is later indexed with them by `asJson`.
77
+ const result = Object.assign(Object.create(null), {
73
78
  [redactFmtSym]: Redact({ paths, censor, serialize, strict, remove })
74
- }
79
+ })
75
80
 
76
81
  const topCensor = (...args) => {
77
82
  return typeof censor === 'function' ? serialize(censor(...args)) : serialize(censor)
@@ -38,6 +38,7 @@ const serializersSym = Symbol.for('pino.serializers')
38
38
  const formattersSym = Symbol.for('pino.formatters')
39
39
  const hooksSym = Symbol.for('pino.hooks')
40
40
  const needsMetadataGsym = Symbol.for('pino.metadata')
41
+ const transportUsesMultistreamSym = Symbol.for('pino.transport.usesMultistream')
41
42
 
42
43
  module.exports = {
43
44
  setLevelSym,
@@ -70,5 +71,6 @@ module.exports = {
70
71
  hooksSym,
71
72
  nestedKeyStrSym,
72
73
  mixinMergeStrategySym,
73
- msgPrefixSym
74
+ msgPrefixSym,
75
+ transportUsesMultistreamSym
74
76
  }
@@ -258,7 +258,7 @@ function asChindings (instance, bindings) {
258
258
  value = serializers[key] ? serializers[key](value) : value
259
259
  value = (stringifiers[key] || wildcardStringifier || stringify)(value, stringifySafe)
260
260
  if (value === undefined) continue
261
- data += ',"' + key + '":' + value
261
+ data += ',' + asString(key) + ':' + value
262
262
  }
263
263
  }
264
264
  return data
@@ -349,7 +349,7 @@ function createArgsNormalizer (defaultOptions) {
349
349
  stream = transport({ caller, ...opts.transport, levels: customLevels })
350
350
  }
351
351
  opts = Object.assign({}, defaultOptions, opts)
352
- opts.serializers = Object.assign({}, defaultOptions.serializers, opts.serializers)
352
+ opts.serializers = Object.assign(Object.create(null), defaultOptions.serializers, opts.serializers)
353
353
  opts.formatters = Object.assign({}, defaultOptions.formatters, opts.formatters)
354
354
 
355
355
  if (opts.prettyPrint) {
@@ -9,6 +9,8 @@ const sleep = require('atomic-sleep')
9
9
  const onExit = require('on-exit-leak-free')
10
10
  const ThreadStream = require('thread-stream')
11
11
 
12
+ const { transportUsesMultistreamSym } = require('./symbols')
13
+
12
14
  function setupOnExit (stream) {
13
15
  // This is leak free, it does not leave event handlers
14
16
  onExit.register(stream, autoEnd)
@@ -194,6 +196,8 @@ function transport (fullOptions) {
194
196
  ...fullOptions.options
195
197
  }
196
198
 
199
+ let usesMultistream = false
200
+
197
201
  // Backwards compatibility
198
202
  const callers = typeof caller === 'string' ? [caller] : caller
199
203
 
@@ -228,6 +232,11 @@ function transport (fullOptions) {
228
232
  }
229
233
  })
230
234
  })
235
+
236
+ const targetsHaveLevel = options.targets.some(t => t.level != null)
237
+ const pipelinesHaveLevel = options.pipelines.some(p => p.some(t => t.level != null))
238
+ usesMultistream = options.targets.length + options.pipelines.length > 1 ||
239
+ targetsHaveLevel || pipelinesHaveLevel
231
240
  } else if (pipeline) {
232
241
  target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')
233
242
  options.pipelines = [pipeline.map((dest) => {
@@ -249,7 +258,11 @@ function transport (fullOptions) {
249
258
  options.pinoWillSendConfig = true
250
259
 
251
260
  const name = (targets || pipeline) ? 'pino.transport' : target
252
- return buildStream(fixTarget(target), options, worker, sync, name)
261
+ const stream = buildStream(fixTarget(target), options, worker, sync, name)
262
+ if (usesMultistream) {
263
+ stream[transportUsesMultistreamSym] = true
264
+ }
265
+ return stream
253
266
 
254
267
  function fixTarget (origin) {
255
268
  origin = bundlerOverrides[origin] || origin
@@ -123,7 +123,10 @@ module.exports = async function ({ targets, pipelines, levels, dedupe }) {
123
123
  // OR
124
124
  //
125
125
  // pino.transport({ pipeline: ... })
126
- if (targetStreams.length === 1) {
126
+ //
127
+ // When a `level` is set on the single target/pipeline, fall through to the
128
+ // multistream path so the per-target level filter is honored (#1996).
129
+ if (targetStreams.length === 1 && targetStreams[0].level == null) {
127
130
  return targetStreams[0].stream
128
131
  } else {
129
132
  return build(process, {