@datalust/seqcli-osx-arm64 2026.1.2638-dev-02638

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 (417) hide show
  1. package/Attribution/.NET Core License.txt +23 -0
  2. package/Attribution/Autofac License.txt +21 -0
  3. package/Attribution/Json.NET License.txt +20 -0
  4. package/Attribution/Serilog License.txt +191 -0
  5. package/Attribution/System.Reactive License.txt +14 -0
  6. package/Autofac.Extensions.DependencyInjection.dll +0 -0
  7. package/Autofac.dll +0 -0
  8. package/Cli/Commands/Bench/BenchCases.json +74 -0
  9. package/LICENSE +201 -0
  10. package/Microsoft.AspNetCore.Antiforgery.dll +0 -0
  11. package/Microsoft.AspNetCore.Authentication.Abstractions.dll +0 -0
  12. package/Microsoft.AspNetCore.Authentication.BearerToken.dll +0 -0
  13. package/Microsoft.AspNetCore.Authentication.Cookies.dll +0 -0
  14. package/Microsoft.AspNetCore.Authentication.Core.dll +0 -0
  15. package/Microsoft.AspNetCore.Authentication.OAuth.dll +0 -0
  16. package/Microsoft.AspNetCore.Authentication.dll +0 -0
  17. package/Microsoft.AspNetCore.Authorization.Policy.dll +0 -0
  18. package/Microsoft.AspNetCore.Authorization.dll +0 -0
  19. package/Microsoft.AspNetCore.Components.Authorization.dll +0 -0
  20. package/Microsoft.AspNetCore.Components.Endpoints.dll +0 -0
  21. package/Microsoft.AspNetCore.Components.Forms.dll +0 -0
  22. package/Microsoft.AspNetCore.Components.Server.dll +0 -0
  23. package/Microsoft.AspNetCore.Components.Web.dll +0 -0
  24. package/Microsoft.AspNetCore.Components.dll +0 -0
  25. package/Microsoft.AspNetCore.Connections.Abstractions.dll +0 -0
  26. package/Microsoft.AspNetCore.CookiePolicy.dll +0 -0
  27. package/Microsoft.AspNetCore.Cors.dll +0 -0
  28. package/Microsoft.AspNetCore.Cryptography.Internal.dll +0 -0
  29. package/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll +0 -0
  30. package/Microsoft.AspNetCore.DataProtection.Abstractions.dll +0 -0
  31. package/Microsoft.AspNetCore.DataProtection.Extensions.dll +0 -0
  32. package/Microsoft.AspNetCore.DataProtection.dll +0 -0
  33. package/Microsoft.AspNetCore.Diagnostics.Abstractions.dll +0 -0
  34. package/Microsoft.AspNetCore.Diagnostics.HealthChecks.dll +0 -0
  35. package/Microsoft.AspNetCore.Diagnostics.dll +0 -0
  36. package/Microsoft.AspNetCore.HostFiltering.dll +0 -0
  37. package/Microsoft.AspNetCore.Hosting.Abstractions.dll +0 -0
  38. package/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll +0 -0
  39. package/Microsoft.AspNetCore.Hosting.dll +0 -0
  40. package/Microsoft.AspNetCore.Html.Abstractions.dll +0 -0
  41. package/Microsoft.AspNetCore.Http.Abstractions.dll +0 -0
  42. package/Microsoft.AspNetCore.Http.Connections.Common.dll +0 -0
  43. package/Microsoft.AspNetCore.Http.Connections.dll +0 -0
  44. package/Microsoft.AspNetCore.Http.Extensions.dll +0 -0
  45. package/Microsoft.AspNetCore.Http.Features.dll +0 -0
  46. package/Microsoft.AspNetCore.Http.Results.dll +0 -0
  47. package/Microsoft.AspNetCore.Http.dll +0 -0
  48. package/Microsoft.AspNetCore.HttpLogging.dll +0 -0
  49. package/Microsoft.AspNetCore.HttpOverrides.dll +0 -0
  50. package/Microsoft.AspNetCore.HttpsPolicy.dll +0 -0
  51. package/Microsoft.AspNetCore.Identity.dll +0 -0
  52. package/Microsoft.AspNetCore.Localization.Routing.dll +0 -0
  53. package/Microsoft.AspNetCore.Localization.dll +0 -0
  54. package/Microsoft.AspNetCore.Metadata.dll +0 -0
  55. package/Microsoft.AspNetCore.Mvc.Abstractions.dll +0 -0
  56. package/Microsoft.AspNetCore.Mvc.ApiExplorer.dll +0 -0
  57. package/Microsoft.AspNetCore.Mvc.Core.dll +0 -0
  58. package/Microsoft.AspNetCore.Mvc.Cors.dll +0 -0
  59. package/Microsoft.AspNetCore.Mvc.DataAnnotations.dll +0 -0
  60. package/Microsoft.AspNetCore.Mvc.Formatters.Json.dll +0 -0
  61. package/Microsoft.AspNetCore.Mvc.Formatters.Xml.dll +0 -0
  62. package/Microsoft.AspNetCore.Mvc.Localization.dll +0 -0
  63. package/Microsoft.AspNetCore.Mvc.Razor.dll +0 -0
  64. package/Microsoft.AspNetCore.Mvc.RazorPages.dll +0 -0
  65. package/Microsoft.AspNetCore.Mvc.TagHelpers.dll +0 -0
  66. package/Microsoft.AspNetCore.Mvc.ViewFeatures.dll +0 -0
  67. package/Microsoft.AspNetCore.Mvc.dll +0 -0
  68. package/Microsoft.AspNetCore.OutputCaching.dll +0 -0
  69. package/Microsoft.AspNetCore.RateLimiting.dll +0 -0
  70. package/Microsoft.AspNetCore.Razor.Runtime.dll +0 -0
  71. package/Microsoft.AspNetCore.Razor.dll +0 -0
  72. package/Microsoft.AspNetCore.RequestDecompression.dll +0 -0
  73. package/Microsoft.AspNetCore.ResponseCaching.Abstractions.dll +0 -0
  74. package/Microsoft.AspNetCore.ResponseCaching.dll +0 -0
  75. package/Microsoft.AspNetCore.ResponseCompression.dll +0 -0
  76. package/Microsoft.AspNetCore.Rewrite.dll +0 -0
  77. package/Microsoft.AspNetCore.Routing.Abstractions.dll +0 -0
  78. package/Microsoft.AspNetCore.Routing.dll +0 -0
  79. package/Microsoft.AspNetCore.Server.HttpSys.dll +0 -0
  80. package/Microsoft.AspNetCore.Server.IIS.dll +0 -0
  81. package/Microsoft.AspNetCore.Server.IISIntegration.dll +0 -0
  82. package/Microsoft.AspNetCore.Server.Kestrel.Core.dll +0 -0
  83. package/Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.dll +0 -0
  84. package/Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.dll +0 -0
  85. package/Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll +0 -0
  86. package/Microsoft.AspNetCore.Server.Kestrel.dll +0 -0
  87. package/Microsoft.AspNetCore.Session.dll +0 -0
  88. package/Microsoft.AspNetCore.SignalR.Common.dll +0 -0
  89. package/Microsoft.AspNetCore.SignalR.Core.dll +0 -0
  90. package/Microsoft.AspNetCore.SignalR.Protocols.Json.dll +0 -0
  91. package/Microsoft.AspNetCore.SignalR.dll +0 -0
  92. package/Microsoft.AspNetCore.StaticAssets.dll +0 -0
  93. package/Microsoft.AspNetCore.StaticFiles.dll +0 -0
  94. package/Microsoft.AspNetCore.WebSockets.dll +0 -0
  95. package/Microsoft.AspNetCore.WebUtilities.dll +0 -0
  96. package/Microsoft.AspNetCore.dll +0 -0
  97. package/Microsoft.CSharp.dll +0 -0
  98. package/Microsoft.Extensions.AI.Abstractions.dll +0 -0
  99. package/Microsoft.Extensions.Caching.Abstractions.dll +0 -0
  100. package/Microsoft.Extensions.Caching.Memory.dll +0 -0
  101. package/Microsoft.Extensions.Configuration.Abstractions.dll +0 -0
  102. package/Microsoft.Extensions.Configuration.Binder.dll +0 -0
  103. package/Microsoft.Extensions.Configuration.CommandLine.dll +0 -0
  104. package/Microsoft.Extensions.Configuration.EnvironmentVariables.dll +0 -0
  105. package/Microsoft.Extensions.Configuration.FileExtensions.dll +0 -0
  106. package/Microsoft.Extensions.Configuration.Ini.dll +0 -0
  107. package/Microsoft.Extensions.Configuration.Json.dll +0 -0
  108. package/Microsoft.Extensions.Configuration.KeyPerFile.dll +0 -0
  109. package/Microsoft.Extensions.Configuration.UserSecrets.dll +0 -0
  110. package/Microsoft.Extensions.Configuration.Xml.dll +0 -0
  111. package/Microsoft.Extensions.Configuration.dll +0 -0
  112. package/Microsoft.Extensions.DependencyInjection.Abstractions.dll +0 -0
  113. package/Microsoft.Extensions.DependencyInjection.dll +0 -0
  114. package/Microsoft.Extensions.DependencyModel.dll +0 -0
  115. package/Microsoft.Extensions.Diagnostics.Abstractions.dll +0 -0
  116. package/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll +0 -0
  117. package/Microsoft.Extensions.Diagnostics.HealthChecks.dll +0 -0
  118. package/Microsoft.Extensions.Diagnostics.dll +0 -0
  119. package/Microsoft.Extensions.Features.dll +0 -0
  120. package/Microsoft.Extensions.FileProviders.Abstractions.dll +0 -0
  121. package/Microsoft.Extensions.FileProviders.Composite.dll +0 -0
  122. package/Microsoft.Extensions.FileProviders.Embedded.dll +0 -0
  123. package/Microsoft.Extensions.FileProviders.Physical.dll +0 -0
  124. package/Microsoft.Extensions.FileSystemGlobbing.dll +0 -0
  125. package/Microsoft.Extensions.Hosting.Abstractions.dll +0 -0
  126. package/Microsoft.Extensions.Hosting.dll +0 -0
  127. package/Microsoft.Extensions.Http.dll +0 -0
  128. package/Microsoft.Extensions.Identity.Core.dll +0 -0
  129. package/Microsoft.Extensions.Identity.Stores.dll +0 -0
  130. package/Microsoft.Extensions.Localization.Abstractions.dll +0 -0
  131. package/Microsoft.Extensions.Localization.dll +0 -0
  132. package/Microsoft.Extensions.Logging.Abstractions.dll +0 -0
  133. package/Microsoft.Extensions.Logging.Configuration.dll +0 -0
  134. package/Microsoft.Extensions.Logging.Console.dll +0 -0
  135. package/Microsoft.Extensions.Logging.Debug.dll +0 -0
  136. package/Microsoft.Extensions.Logging.EventLog.dll +0 -0
  137. package/Microsoft.Extensions.Logging.EventSource.dll +0 -0
  138. package/Microsoft.Extensions.Logging.TraceSource.dll +0 -0
  139. package/Microsoft.Extensions.Logging.dll +0 -0
  140. package/Microsoft.Extensions.ObjectPool.dll +0 -0
  141. package/Microsoft.Extensions.Options.ConfigurationExtensions.dll +0 -0
  142. package/Microsoft.Extensions.Options.DataAnnotations.dll +0 -0
  143. package/Microsoft.Extensions.Options.dll +0 -0
  144. package/Microsoft.Extensions.Primitives.dll +0 -0
  145. package/Microsoft.Extensions.Validation.dll +0 -0
  146. package/Microsoft.Extensions.WebEncoders.dll +0 -0
  147. package/Microsoft.JSInterop.dll +0 -0
  148. package/Microsoft.Net.Http.Headers.dll +0 -0
  149. package/Microsoft.VisualBasic.Core.dll +0 -0
  150. package/Microsoft.VisualBasic.dll +0 -0
  151. package/Microsoft.Win32.Primitives.dll +0 -0
  152. package/Microsoft.Win32.Registry.dll +0 -0
  153. package/ModelContextProtocol.Core.dll +0 -0
  154. package/ModelContextProtocol.dll +0 -0
  155. package/Newtonsoft.Json.dll +0 -0
  156. package/Roastery.dll +0 -0
  157. package/Roastery.pdb +0 -0
  158. package/Sample/Templates/alert-Batch Processing Errors.template +35 -0
  159. package/Sample/Templates/alert-Frontend Errors.template +35 -0
  160. package/Sample/Templates/alert-Low Stock.template +25 -0
  161. package/Sample/Templates/alert-Production Errors.template +35 -0
  162. package/Sample/Templates/dashboard-Database.template +145 -0
  163. package/Sample/Templates/dashboard-HTTP Requests.template +177 -0
  164. package/Sample/Templates/dashboard-Orders.template +256 -0
  165. package/Sample/Templates/dashboard-Overview.template +155 -0
  166. package/Sample/Templates/dashboard-Production.template +85 -0
  167. package/Sample/Templates/expressionindex-16.template +5 -0
  168. package/Sample/Templates/expressionindex-17.template +5 -0
  169. package/Sample/Templates/retentionpolicy-82.template +9 -0
  170. package/Sample/Templates/retentionpolicy-84.template +6 -0
  171. package/Sample/Templates/signal-Bad Request.template +19 -0
  172. package/Sample/Templates/signal-Batch Processing.template +19 -0
  173. package/Sample/Templates/signal-Columns.template +19 -0
  174. package/Sample/Templates/signal-Database.template +19 -0
  175. package/Sample/Templates/signal-Errors.template +19 -0
  176. package/Sample/Templates/signal-Exceptions.template +19 -0
  177. package/Sample/Templates/signal-HTTP Requests.template +19 -0
  178. package/Sample/Templates/signal-Information.template +19 -0
  179. package/Sample/Templates/signal-Internal Server Error.template +19 -0
  180. package/Sample/Templates/signal-Logs.template +19 -0
  181. package/Sample/Templates/signal-Not Found.template +19 -0
  182. package/Sample/Templates/signal-Order Abandoned.template +19 -0
  183. package/Sample/Templates/signal-Order Archived.template +19 -0
  184. package/Sample/Templates/signal-Order Created.template +19 -0
  185. package/Sample/Templates/signal-Order Placed.template +19 -0
  186. package/Sample/Templates/signal-Order Shipped.template +19 -0
  187. package/Sample/Templates/signal-Roastery Production.template +19 -0
  188. package/Sample/Templates/signal-Sample Data.template +19 -0
  189. package/Sample/Templates/signal-Spans.template +19 -0
  190. package/Sample/Templates/signal-Stock Level Warnings.template +19 -0
  191. package/Sample/Templates/signal-Success.template +19 -0
  192. package/Sample/Templates/signal-Warnings.template +19 -0
  193. package/Sample/Templates/signal-Web Frontend.template +19 -0
  194. package/Sample/Templates/sqlquery-Available Properties.template +8 -0
  195. package/Sample/Templates/sqlquery-Count by Hour.template +8 -0
  196. package/Sample/Templates/sqlquery-Latest as Table.template +8 -0
  197. package/Sample/Templates/sqlquery-Order Items by Product Size.template +8 -0
  198. package/Sample/Templates/sqlquery-Route Bindings.template +8 -0
  199. package/Sample/Templates/sqlquery-Space by Event Type.template +8 -0
  200. package/Sample/Templates/view-Overview.template +35 -0
  201. package/Sample/Templates/view-Production.template +21 -0
  202. package/Sample/Templates/workspace-Seq Caf/303/251 /342/230/225.template" +46 -0
  203. package/Seq.Api.dll +0 -0
  204. package/Seq.Apps.dll +0 -0
  205. package/Seq.Syntax.V2.dll +0 -0
  206. package/SeqCli.ico +0 -0
  207. package/Serilog.AspNetCore.dll +0 -0
  208. package/Serilog.Extensions.Hosting.dll +0 -0
  209. package/Serilog.Extensions.Logging.dll +0 -0
  210. package/Serilog.Formatting.Compact.Reader.dll +0 -0
  211. package/Serilog.Formatting.Compact.dll +0 -0
  212. package/Serilog.Settings.Configuration.dll +0 -0
  213. package/Serilog.Sinks.Console.dll +0 -0
  214. package/Serilog.Sinks.Debug.dll +0 -0
  215. package/Serilog.Sinks.File.dll +0 -0
  216. package/Serilog.Sinks.Seq.dll +0 -0
  217. package/Serilog.dll +0 -0
  218. package/SerilogTracing.dll +0 -0
  219. package/Skills/building-seq-plug-in-apps/SKILL.md +540 -0
  220. package/Skills/seq-search-and-query/SKILL.md +360 -0
  221. package/Skills/working-with-seq-metrics/SKILL.md +157 -0
  222. package/Superpower.dll +0 -0
  223. package/System.AppContext.dll +0 -0
  224. package/System.Buffers.dll +0 -0
  225. package/System.Collections.Concurrent.dll +0 -0
  226. package/System.Collections.Immutable.dll +0 -0
  227. package/System.Collections.NonGeneric.dll +0 -0
  228. package/System.Collections.Specialized.dll +0 -0
  229. package/System.Collections.dll +0 -0
  230. package/System.ComponentModel.Annotations.dll +0 -0
  231. package/System.ComponentModel.DataAnnotations.dll +0 -0
  232. package/System.ComponentModel.EventBasedAsync.dll +0 -0
  233. package/System.ComponentModel.Primitives.dll +0 -0
  234. package/System.ComponentModel.TypeConverter.dll +0 -0
  235. package/System.ComponentModel.dll +0 -0
  236. package/System.Configuration.dll +0 -0
  237. package/System.Console.dll +0 -0
  238. package/System.Core.dll +0 -0
  239. package/System.Data.Common.dll +0 -0
  240. package/System.Data.DataSetExtensions.dll +0 -0
  241. package/System.Data.dll +0 -0
  242. package/System.Diagnostics.Contracts.dll +0 -0
  243. package/System.Diagnostics.Debug.dll +0 -0
  244. package/System.Diagnostics.DiagnosticSource.dll +0 -0
  245. package/System.Diagnostics.EventLog.dll +0 -0
  246. package/System.Diagnostics.FileVersionInfo.dll +0 -0
  247. package/System.Diagnostics.Process.dll +0 -0
  248. package/System.Diagnostics.StackTrace.dll +0 -0
  249. package/System.Diagnostics.TextWriterTraceListener.dll +0 -0
  250. package/System.Diagnostics.Tools.dll +0 -0
  251. package/System.Diagnostics.TraceSource.dll +0 -0
  252. package/System.Diagnostics.Tracing.dll +0 -0
  253. package/System.Drawing.Primitives.dll +0 -0
  254. package/System.Drawing.dll +0 -0
  255. package/System.Dynamic.Runtime.dll +0 -0
  256. package/System.Formats.Asn1.dll +0 -0
  257. package/System.Formats.Cbor.dll +0 -0
  258. package/System.Formats.Tar.dll +0 -0
  259. package/System.Globalization.Calendars.dll +0 -0
  260. package/System.Globalization.Extensions.dll +0 -0
  261. package/System.Globalization.dll +0 -0
  262. package/System.IO.Compression.Brotli.dll +0 -0
  263. package/System.IO.Compression.FileSystem.dll +0 -0
  264. package/System.IO.Compression.ZipFile.dll +0 -0
  265. package/System.IO.Compression.dll +0 -0
  266. package/System.IO.FileSystem.AccessControl.dll +0 -0
  267. package/System.IO.FileSystem.DriveInfo.dll +0 -0
  268. package/System.IO.FileSystem.Primitives.dll +0 -0
  269. package/System.IO.FileSystem.Watcher.dll +0 -0
  270. package/System.IO.FileSystem.dll +0 -0
  271. package/System.IO.IsolatedStorage.dll +0 -0
  272. package/System.IO.MemoryMappedFiles.dll +0 -0
  273. package/System.IO.Pipelines.dll +0 -0
  274. package/System.IO.Pipes.AccessControl.dll +0 -0
  275. package/System.IO.Pipes.dll +0 -0
  276. package/System.IO.UnmanagedMemoryStream.dll +0 -0
  277. package/System.IO.dll +0 -0
  278. package/System.Linq.AsyncEnumerable.dll +0 -0
  279. package/System.Linq.Expressions.dll +0 -0
  280. package/System.Linq.Parallel.dll +0 -0
  281. package/System.Linq.Queryable.dll +0 -0
  282. package/System.Linq.dll +0 -0
  283. package/System.Memory.dll +0 -0
  284. package/System.Net.Http.Json.dll +0 -0
  285. package/System.Net.Http.dll +0 -0
  286. package/System.Net.HttpListener.dll +0 -0
  287. package/System.Net.Mail.dll +0 -0
  288. package/System.Net.NameResolution.dll +0 -0
  289. package/System.Net.NetworkInformation.dll +0 -0
  290. package/System.Net.Ping.dll +0 -0
  291. package/System.Net.Primitives.dll +0 -0
  292. package/System.Net.Quic.dll +0 -0
  293. package/System.Net.Requests.dll +0 -0
  294. package/System.Net.Security.dll +0 -0
  295. package/System.Net.ServerSentEvents.dll +0 -0
  296. package/System.Net.ServicePoint.dll +0 -0
  297. package/System.Net.Sockets.dll +0 -0
  298. package/System.Net.WebClient.dll +0 -0
  299. package/System.Net.WebHeaderCollection.dll +0 -0
  300. package/System.Net.WebProxy.dll +0 -0
  301. package/System.Net.WebSockets.Client.dll +0 -0
  302. package/System.Net.WebSockets.dll +0 -0
  303. package/System.Net.dll +0 -0
  304. package/System.Numerics.Vectors.dll +0 -0
  305. package/System.Numerics.dll +0 -0
  306. package/System.ObjectModel.dll +0 -0
  307. package/System.Private.CoreLib.dll +0 -0
  308. package/System.Private.DataContractSerialization.dll +0 -0
  309. package/System.Private.Uri.dll +0 -0
  310. package/System.Private.Xml.Linq.dll +0 -0
  311. package/System.Private.Xml.dll +0 -0
  312. package/System.Reflection.DispatchProxy.dll +0 -0
  313. package/System.Reflection.Emit.ILGeneration.dll +0 -0
  314. package/System.Reflection.Emit.Lightweight.dll +0 -0
  315. package/System.Reflection.Emit.dll +0 -0
  316. package/System.Reflection.Extensions.dll +0 -0
  317. package/System.Reflection.Metadata.dll +0 -0
  318. package/System.Reflection.Primitives.dll +0 -0
  319. package/System.Reflection.TypeExtensions.dll +0 -0
  320. package/System.Reflection.dll +0 -0
  321. package/System.Resources.Reader.dll +0 -0
  322. package/System.Resources.ResourceManager.dll +0 -0
  323. package/System.Resources.Writer.dll +0 -0
  324. package/System.Runtime.CompilerServices.Unsafe.dll +0 -0
  325. package/System.Runtime.CompilerServices.VisualC.dll +0 -0
  326. package/System.Runtime.Extensions.dll +0 -0
  327. package/System.Runtime.Handles.dll +0 -0
  328. package/System.Runtime.InteropServices.JavaScript.dll +0 -0
  329. package/System.Runtime.InteropServices.RuntimeInformation.dll +0 -0
  330. package/System.Runtime.InteropServices.dll +0 -0
  331. package/System.Runtime.Intrinsics.dll +0 -0
  332. package/System.Runtime.Loader.dll +0 -0
  333. package/System.Runtime.Numerics.dll +0 -0
  334. package/System.Runtime.Serialization.Formatters.dll +0 -0
  335. package/System.Runtime.Serialization.Json.dll +0 -0
  336. package/System.Runtime.Serialization.Primitives.dll +0 -0
  337. package/System.Runtime.Serialization.Xml.dll +0 -0
  338. package/System.Runtime.Serialization.dll +0 -0
  339. package/System.Runtime.dll +0 -0
  340. package/System.Security.AccessControl.dll +0 -0
  341. package/System.Security.Claims.dll +0 -0
  342. package/System.Security.Cryptography.Algorithms.dll +0 -0
  343. package/System.Security.Cryptography.Cng.dll +0 -0
  344. package/System.Security.Cryptography.Csp.dll +0 -0
  345. package/System.Security.Cryptography.Encoding.dll +0 -0
  346. package/System.Security.Cryptography.OpenSsl.dll +0 -0
  347. package/System.Security.Cryptography.Pkcs.dll +0 -0
  348. package/System.Security.Cryptography.Primitives.dll +0 -0
  349. package/System.Security.Cryptography.ProtectedData.dll +0 -0
  350. package/System.Security.Cryptography.X509Certificates.dll +0 -0
  351. package/System.Security.Cryptography.Xml.dll +0 -0
  352. package/System.Security.Cryptography.dll +0 -0
  353. package/System.Security.Principal.Windows.dll +0 -0
  354. package/System.Security.Principal.dll +0 -0
  355. package/System.Security.SecureString.dll +0 -0
  356. package/System.Security.dll +0 -0
  357. package/System.ServiceModel.Web.dll +0 -0
  358. package/System.ServiceProcess.ServiceController.dll +0 -0
  359. package/System.ServiceProcess.dll +0 -0
  360. package/System.Text.Encoding.CodePages.dll +0 -0
  361. package/System.Text.Encoding.Extensions.dll +0 -0
  362. package/System.Text.Encoding.dll +0 -0
  363. package/System.Text.Encodings.Web.dll +0 -0
  364. package/System.Text.Json.dll +0 -0
  365. package/System.Text.RegularExpressions.dll +0 -0
  366. package/System.Threading.AccessControl.dll +0 -0
  367. package/System.Threading.Channels.dll +0 -0
  368. package/System.Threading.Overlapped.dll +0 -0
  369. package/System.Threading.RateLimiting.dll +0 -0
  370. package/System.Threading.Tasks.Dataflow.dll +0 -0
  371. package/System.Threading.Tasks.Extensions.dll +0 -0
  372. package/System.Threading.Tasks.Parallel.dll +0 -0
  373. package/System.Threading.Tasks.dll +0 -0
  374. package/System.Threading.Thread.dll +0 -0
  375. package/System.Threading.ThreadPool.dll +0 -0
  376. package/System.Threading.Timer.dll +0 -0
  377. package/System.Threading.dll +0 -0
  378. package/System.Transactions.Local.dll +0 -0
  379. package/System.Transactions.dll +0 -0
  380. package/System.ValueTuple.dll +0 -0
  381. package/System.Web.HttpUtility.dll +0 -0
  382. package/System.Web.dll +0 -0
  383. package/System.Windows.dll +0 -0
  384. package/System.Xml.Linq.dll +0 -0
  385. package/System.Xml.ReaderWriter.dll +0 -0
  386. package/System.Xml.Serialization.dll +0 -0
  387. package/System.Xml.XDocument.dll +0 -0
  388. package/System.Xml.XPath.XDocument.dll +0 -0
  389. package/System.Xml.XPath.dll +0 -0
  390. package/System.Xml.XmlDocument.dll +0 -0
  391. package/System.Xml.XmlSerializer.dll +0 -0
  392. package/System.Xml.dll +0 -0
  393. package/System.dll +0 -0
  394. package/Tavis.UriTemplates.dll +0 -0
  395. package/WindowsBase.dll +0 -0
  396. package/createdump +0 -0
  397. package/libSystem.Globalization.Native.dylib +0 -0
  398. package/libSystem.IO.Compression.Native.dylib +0 -0
  399. package/libSystem.Native.dylib +0 -0
  400. package/libSystem.Net.Security.Native.dylib +0 -0
  401. package/libSystem.Security.Cryptography.Native.Apple.dylib +0 -0
  402. package/libclrgc.dylib +0 -0
  403. package/libclrgcexp.dylib +0 -0
  404. package/libclrjit.dylib +0 -0
  405. package/libcoreclr.dylib +0 -0
  406. package/libhostfxr.dylib +0 -0
  407. package/libhostpolicy.dylib +0 -0
  408. package/libmscordaccore.dylib +0 -0
  409. package/libmscordbi.dylib +0 -0
  410. package/mscorlib.dll +0 -0
  411. package/netstandard.dll +0 -0
  412. package/package.json +24 -0
  413. package/seqcli +0 -0
  414. package/seqcli.deps.json +1838 -0
  415. package/seqcli.dll +0 -0
  416. package/seqcli.pdb +0 -0
  417. package/seqcli.runtimeconfig.json +19 -0
Binary file
Binary file
Binary file
Binary file
package/Serilog.dll ADDED
Binary file
Binary file
@@ -0,0 +1,540 @@
1
+ ---
2
+ name: building-seq-plug-in-apps
3
+ description: Use this when developing plug-in Seq inputs (for ingestion) and outputs (for alert notifications or streamed events).
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: Datalust and Contributors
7
+ ---
8
+
9
+ This skill covers building [Seq](https://datalust.co/seq) apps (plugins) using the `Seq.Apps` runtime API. Seq apps are .NET libraries that extend Seq with custom event processing (output apps) or event generation (input apps).
10
+
11
+ ## Project structure
12
+
13
+ A Seq app follows this layout:
14
+
15
+ ```
16
+ src/
17
+ Seq.App.{Name}/
18
+ Seq.App.{Name}.csproj # Main library
19
+ {Name}App.cs # SeqApp subclass (entry point)
20
+ ... # Supporting types
21
+ Resources/ # Embedded resources (default templates, etc.)
22
+ Seq.App.{Name}.SmokeTest/ # Optional console app for manual testing
23
+ Program.cs
24
+ test/
25
+ Seq.App.{Name}.Tests/
26
+ {Name}AppTests.cs # App-level integration tests
27
+ ...Tests.cs # Unit tests for components
28
+ Support/
29
+ Test{Gateway}.cs # Test doubles
30
+ Some.cs # LogEvent factory helpers
31
+ ```
32
+
33
+ Input apps use `Seq.Input.{Name}` naming.
34
+
35
+ ### `.csproj` conventions
36
+
37
+ ```xml
38
+ <Project Sdk="Microsoft.NET.Sdk">
39
+ <PropertyGroup>
40
+ <TargetFramework>net8.0</TargetFramework>
41
+ <LangVersion>latest</LangVersion>
42
+ <Nullable>enable</Nullable>
43
+ <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
44
+ </PropertyGroup>
45
+ <ItemGroup>
46
+ <PackageReference Include="Seq.Apps" Version="..." />
47
+ <!-- Add Seq.Syntax (project or package reference) if using the Seq template language -->
48
+ </ItemGroup>
49
+ <ItemGroup>
50
+ <!-- Package dependencies into primary NUPKG file, except those shipped in the app host itself -->
51
+ <None Include="./obj/publish/**/*" Exclude="./obj/publish/$(MSBuildProjectName).dll;./obj/publish/Seq.Apps.dll;./obj/publish/Serilog.dll" Pack="true" PackagePath="lib/$(TargetFramework)" />
52
+ </ItemGroup>
53
+ </Project>
54
+ ```
55
+
56
+ Embedded resources for default templates use `LogicalName` for clean resource stream access:
57
+
58
+ ```xml
59
+ <ItemGroup>
60
+ <EmbeddedResource Include="./Resources/DefaultHtmlTemplate.txt" LogicalName="DefaultHtmlTemplate" />
61
+ </ItemGroup>
62
+ ```
63
+
64
+ Test projects target the latest stable .NET release, and use xUnit.
65
+
66
+ The runtime pins its own copies of `Seq.Apps`, `Serilog`, and `Seq.Syntax` — the app's copies of these assemblies are ignored at load time. Other dependencies are loaded from the app's package.
67
+
68
+ ### Namespace disambiguation
69
+
70
+ Projects named `Seq.App.{Name}` have a root namespace that collides with `Seq.Apps`. Use `global::` where `Seq.Apps.App` or `Seq.Apps.Host` is referenced as a type within a `Seq.App.*` namespace:
71
+
72
+ ```csharp
73
+ public static LogEventPropertyValue? MyAppHost(global::Seq.Apps.Host host) { ... }
74
+ public static LogEventPropertyValue? MyAppInstance(global::Seq.Apps.App app) { ... }
75
+ ```
76
+
77
+ Use `InternalsVisibleTo` in the main project to expose `internal` constructors and types to the test project.
78
+
79
+ ## App class structure
80
+
81
+ ### Output apps (event subscribers)
82
+
83
+ Output apps derive from `SeqApp` and implement `ISubscribeToAsync<LogEvent>`:
84
+
85
+ ```csharp
86
+ using Seq.Apps;
87
+ using Serilog.Events;
88
+
89
+ [SeqApp("App Name",
90
+ Description = "A short sentence describing what the app does.")]
91
+ public class MyApp : SeqApp, ISubscribeToAsync<LogEvent>, IDisposable
92
+ {
93
+ readonly IMyGateway _gateway;
94
+ MyMessageFactory? _messageFactory;
95
+
96
+ // Public parameterless constructor for production use
97
+ public MyApp() : this(new MyHttpGateway()) { }
98
+
99
+ // Internal constructor for testing (dependency injection)
100
+ internal MyApp(IMyGateway gateway) { _gateway = gateway; }
101
+
102
+ // Settings (see "App settings" section below)
103
+
104
+ protected override void OnAttached()
105
+ {
106
+ // Validate required settings, resolve defaults, create factories
107
+ }
108
+
109
+ public async Task OnAsync(Event<LogEvent> evt)
110
+ {
111
+ // Process the event: render message, send via gateway
112
+ }
113
+
114
+ public void Dispose()
115
+ {
116
+ (_gateway as IDisposable)?.Dispose();
117
+ }
118
+ }
119
+ ```
120
+
121
+ The `SeqApp` attribute's `Name` parameter is the display name in Seq's UI. Keep it short (1-3 words). `Description` is a single sentence shown below the name.
122
+
123
+ ### Output apps using raw JSON (`ISubscribeToJsonAsync`)
124
+
125
+ Apps that don't need Serilog `LogEvent` deserialization can implement `ISubscribeToJsonAsync` instead. This receives each event as a raw [CLEF](https://clef-json.org) JSON string, skipping `LogEvent`/`MessageTemplate`/`LogEventProperty` construction entirely:
126
+
127
+ ```csharp
128
+ [SeqApp("App Name",
129
+ Description = "A short sentence describing what the app does.")]
130
+ public class MyApp : SeqApp, ISubscribeToJsonAsync, IAsyncDisposable
131
+ {
132
+ public async Task OnAsync(string json)
133
+ {
134
+ // Parse and process the raw CLEF JSON
135
+ }
136
+
137
+ public async ValueTask DisposeAsync() { }
138
+ }
139
+ ```
140
+
141
+ Prefer `ISubscribeToJsonAsync` for apps that forward or transform events without rendering human-readable output (exporters, relays, bridges), especially at high volume. It avoids the Serilog dependency entirely. The trade-off is that the `Event<LogEvent>` wrapper (`Id`, `EventType`, `Timestamp`) and `Seq.Syntax` template rendering are not available; the app must extract CLEF fields (`@t`, `@l`, `@mt`, `@x`, etc.) from the JSON directly.
142
+
143
+ Stick with `ISubscribeToAsync<LogEvent>` when the app renders human-readable output using `Seq.Syntax` templates (emails, chat messages, tickets) or inspects structured property values using the Serilog type system (`ScalarValue`, `SequenceValue`, `StructureValue`).
144
+
145
+ ### Input apps (event publishers)
146
+
147
+ Input apps implement `IPublishJson`:
148
+
149
+ ```csharp
150
+ [SeqApp("My Input",
151
+ Description = "Periodically does X and publishes metrics to Seq.")]
152
+ public class MyInput : SeqApp, IPublishJson, IDisposable
153
+ {
154
+ public void Start(TextWriter inputWriter)
155
+ {
156
+ // Begin producing events; write CLEF JSON lines to inputWriter
157
+ // Return immediately; use background tasks for ongoing work
158
+ }
159
+
160
+ public void Stop()
161
+ {
162
+ // Block until publishing has stopped
163
+ }
164
+ }
165
+ ```
166
+
167
+ The app must synchronize writes to `inputWriter` so that events are not interleaved (e.g., use a `lock` when multiple background threads produce events).
168
+
169
+ ### Lifecycle
170
+
171
+ 1. Seq instantiates the app using the public parameterless constructor
172
+ 2. The runtime sets `[SeqAppSetting]` properties via reflection, matched by **property name**
173
+ 3. `Attach()` is called, making `App`, `Host`, and `Log` available
174
+ 4. `OnAttached()` runs — validate settings and initialize here
175
+ 5. For subscribers: `OnAsync()` is called for each matching event
176
+ 6. For publishers: `Start()` is called, then `Stop()` on shutdown
177
+ 7. `Dispose()` if implemented
178
+
179
+ Each app instance runs as a separate `seqcli` process. Initialization, event dispatch, and disposal are single-threaded. Events are dispatched one at a time — if `OnAsync()` is slow, backpressure is applied naturally. Apps may create their own background threads for ingestion.
180
+
181
+ ## App settings
182
+
183
+ Settings are public properties on the app class decorated with `[SeqAppSetting]`. They appear in Seq's UI for the user to configure. The runtime injects values by matching on the **property name** (not `DisplayName`), using `Enum.Parse` for enum types and `Convert.ChangeType` for everything else.
184
+
185
+ ### `SeqAppSetting` attribute properties
186
+
187
+ | Property | Type | Purpose |
188
+ |---|---|---|
189
+ | `DisplayName` | `string` | User-facing label in the UI. If omitted, the property name is used. |
190
+ | `HelpText` | `string` | Descriptive text shown to the user. Should explain the setting's purpose and give examples. |
191
+ | `IsOptional` | `bool` | If `true`, the user can leave the field blank. Non-optional settings that are missing cause a startup error before `Attach()` is called. |
192
+ | `InputType` | `SettingInputType` | Controls the UI input widget: `Text`, `LongText`, `Checkbox`, `Integer`, `Decimal`, `Password`. If `Unspecified`, the runtime chooses based on the property type. |
193
+ | `Syntax` | `string` | Syntax highlighting in the UI. `"template"` for fields accepting Seq template expressions (in `{braces}`), `"code"` for structured values (JSON, headers). Omit for plain values. |
194
+ | `IsInvocationParameter` | `bool` | Marks settings that can be overridden per-invocation (e.g., destination address, channel). |
195
+
196
+ ### Quality guidelines for settings
197
+
198
+ **Display names** should be concise, title-case-ish, and match how users think about the concept:
199
+
200
+ | Good | Avoid |
201
+ |---|---|
202
+ | Bot token | BotToken |
203
+ | Chat ID | Telegram Chat Identifier |
204
+ | Silent notification | DisableNotification |
205
+ | Body is plain text | BodyIsPlainText |
206
+ | Connection security | ProtocolSecurity |
207
+
208
+ **Help text** should:
209
+ - Start with a clear description of the setting's purpose
210
+ - Include concrete examples where helpful (e.g., format strings, URL patterns, expected values)
211
+ - Mention defaults explicitly (e.g., "The default is `Etc/UTC`.", "The default is `POST`.")
212
+ - Use backticks for code/values in help text
213
+ - Note when template syntax is supported: "Template syntax is supported."
214
+ - For password/token fields, explain how to obtain the value
215
+
216
+ ```csharp
217
+ [SeqAppSetting(
218
+ DisplayName = "Time zone",
219
+ IsOptional = true,
220
+ HelpText = "The IANA time zone name used when formatting dates and times " +
221
+ "(e.g. Australia/Brisbane). The default is Etc/UTC.")]
222
+ public string? TimeZoneName { get; set; }
223
+
224
+ [SeqAppSetting(
225
+ DisplayName = "Bot token",
226
+ InputType = SettingInputType.Password,
227
+ HelpText = "The bot's API token, in the format 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. " +
228
+ "You can create a bot and obtain a token via @BotFather on Telegram.")]
229
+ public string? BotToken { get; set; }
230
+ ```
231
+
232
+ ### Enum settings
233
+
234
+ When a setting has a fixed set of valid values, use an `enum` type. The runtime presents enum settings as a dropdown and handles validation automatically. Apply `[Description]` to enum members to control the dropdown text when the member name doesn't read naturally:
235
+
236
+ ```csharp
237
+ using System.ComponentModel;
238
+
239
+ public enum OtlpExportProtocol
240
+ {
241
+ [Description("HTTP/Protobuf")]
242
+ HttpProtobuf,
243
+ [Description("gRPC")]
244
+ Grpc
245
+ }
246
+
247
+ [SeqAppSetting(
248
+ DisplayName = "Protocol",
249
+ HelpText = "The OTLP export protocol. The default is `HTTP/Protobuf`.",
250
+ IsOptional = true)]
251
+ public OtlpExportProtocol Protocol { get; set; } = OtlpExportProtocol.HttpProtobuf;
252
+ ```
253
+
254
+ ### Setting validation
255
+
256
+ Validate required settings in `OnAttached()` and throw `ArgumentException` with a message that names the setting using its display name in backticks:
257
+
258
+ ```csharp
259
+ protected override void OnAttached()
260
+ {
261
+ var botToken = NormalizeOption(BotToken)
262
+ ?? throw new ArgumentException("A `Bot token` must be supplied.");
263
+ var chatId = NormalizeOption(ChatId)
264
+ ?? throw new ArgumentException("A `Chat ID` must be supplied.");
265
+ // ...
266
+ }
267
+
268
+ // Treat empty strings as null for optional settings
269
+ static string? NormalizeOption(string? s) => s == "" ? null : s;
270
+ ```
271
+
272
+ ## Gateway pattern (testability)
273
+
274
+ External I/O (HTTP APIs, SMTP, cloud services) is abstracted behind an interface so tests can run without network access.
275
+
276
+ ```csharp
277
+ // Interface
278
+ interface IMyGateway
279
+ {
280
+ Task<MyResponse> SendAsync(string param1, string param2, CancellationToken cancel);
281
+ }
282
+
283
+ // Production implementation
284
+ class MyHttpGateway : IMyGateway, IDisposable
285
+ {
286
+ readonly HttpClient _httpClient = new();
287
+
288
+ public async Task<MyResponse> SendAsync(...)
289
+ {
290
+ // HTTP calls, JSON serialization, response parsing
291
+ }
292
+
293
+ public void Dispose() => _httpClient.Dispose();
294
+ }
295
+
296
+ // Test double
297
+ class TestMyGateway : IMyGateway
298
+ {
299
+ public List<(string Param1, string Param2)> Sent { get; } = [];
300
+ public MyResponse NextResponse { get; set; } = new() { Ok = true };
301
+
302
+ public Task<MyResponse> SendAsync(string param1, string param2, CancellationToken cancel)
303
+ {
304
+ Sent.Add((param1, param2));
305
+ return Task.FromResult(NextResponse);
306
+ }
307
+ }
308
+ ```
309
+
310
+ The app class has dual constructors:
311
+
312
+ ```csharp
313
+ public MyApp() : this(new MyHttpGateway()) { } // Production
314
+ internal MyApp(IMyGateway gateway) { _gateway = gateway; } // Testing
315
+ ```
316
+
317
+ Use a single long-lived `HttpClient` per gateway. Use `System.Text.Json` for serialization — no third-party HTTP or serialization libraries.
318
+
319
+ ## Template support (Seq.Syntax)
320
+
321
+ Apps that support user-customizable output should use the Seq template language via `Seq.Syntax`. This is the same expression language used in Seq's UI.
322
+
323
+ ### Template compilation
324
+
325
+ Templates are compiled into `ExpressionTemplate` instances in `OnAttached()` or a factory constructor:
326
+
327
+ ```csharp
328
+ using Seq.Syntax.Templates;
329
+ using Seq.Syntax.Templates.Encoding;
330
+
331
+ var template = new ExpressionTemplate(
332
+ templateText,
333
+ nameResolver: new OrderedNameResolver(new NameResolver[]
334
+ {
335
+ new StaticMemberNameResolver(typeof(MyBuiltInFunctions)),
336
+ myAppNameResolver
337
+ }),
338
+ encoder: isPlainText ? null : new MyHtmlEncoder());
339
+ ```
340
+
341
+ ### Template rendering
342
+
343
+ Render a template against a `LogEvent`:
344
+
345
+ ```csharp
346
+ static string Format(ExpressionTemplate template, LogEvent evt)
347
+ {
348
+ var writer = new StringWriter();
349
+ template.Format(evt, writer);
350
+ return writer.ToString();
351
+ }
352
+ ```
353
+
354
+ ### Custom encoding
355
+
356
+ When output is HTML (or another format requiring escaping), implement `TemplateOutputEncoder`. The encoder is applied **only to interpolated values**, not to template literal text:
357
+
358
+ ```csharp
359
+ class TemplateOutputTelegramHtmlEncoder : TemplateOutputEncoder
360
+ {
361
+ public override string Encode(string value)
362
+ {
363
+ return value
364
+ .Replace("&", "&amp;")
365
+ .Replace("<", "&lt;")
366
+ .Replace(">", "&gt;");
367
+ }
368
+ }
369
+ ```
370
+
371
+ ### Built-in functions and name resolution
372
+
373
+ Apps can expose custom functions and properties within templates through a `NameResolver`:
374
+
375
+ ```csharp
376
+ public static class MyAppBuiltInFunctions
377
+ {
378
+ // Available as UriEncode(value) in templates
379
+ public static LogEventPropertyValue? UriEncode(LogEventPropertyValue? value) { ... }
380
+
381
+ // Bound to @Host in templates via the name resolver
382
+ public static LogEventPropertyValue? MyAppHost(Host host) { ... }
383
+
384
+ // Bound to @App in templates via the name resolver
385
+ public static LogEventPropertyValue? MyAppInstance(App app) { ... }
386
+ }
387
+ ```
388
+
389
+ The name resolver maps `@Host` and `@App` to the built-in functions and binds the actual `Host` and `App` instances as function parameters. See `TelegramAppNameResolver` or `MailAppNameResolver` in the reference apps for the implementation pattern.
390
+
391
+ ### Default templates
392
+
393
+ Provide sensible default templates as embedded resources. Templates should:
394
+ - Handle both regular events and alert notifications (`@EventType = 0xA1E77001`)
395
+ - Include level indicators appropriate to the output format
396
+ - Show timestamp, message, properties, and exceptions
397
+ - Link back to the event in Seq using `@Host.BaseUri`
398
+
399
+ For HTML templates, use only tags supported by the target (e.g., Telegram supports only `<b>`, `<i>`, `<code>`, `<pre>`, `<a>`).
400
+
401
+ ## Error handling
402
+
403
+ All exceptions thrown from `OnAsync()` are caught per-event by the runtime, logged to the app's diagnostic stream, and recorded against the event. The app continues processing the next event regardless.
404
+
405
+ | Scenario | Pattern |
406
+ |---|---|
407
+ | Missing required settings | `ArgumentException` from `OnAttached()` — Seq reports as a configuration error |
408
+ | Invalid template syntax | `ArgumentException` from `ExpressionTemplate` constructor — fails at attachment time |
409
+ | Transient API errors (rate limits) | Log via `Log.Warning()`, do **not** throw — avoids per-event failure noise |
410
+ | Permanent API errors (auth, bad request) | Throw `SeqAppException` with the error details — Seq records against the event |
411
+ | Network failures | Let `HttpRequestException` propagate — Seq records against the event |
412
+
413
+ ```csharp
414
+ public async Task OnAsync(Event<LogEvent> evt)
415
+ {
416
+ var response = await _gateway.SendAsync(...);
417
+ if (!response.Ok)
418
+ {
419
+ if (response.ErrorCode == 429) // Rate limited
420
+ {
421
+ Log.Warning("Rate limit exceeded; retry after {RetryAfter}s", response.RetryAfter);
422
+ return; // Don't throw
423
+ }
424
+
425
+ throw new SeqAppException($"API error {response.ErrorCode}: {response.Description}");
426
+ }
427
+ }
428
+ ```
429
+
430
+ ## Testing
431
+
432
+ ### Test infrastructure
433
+
434
+ **`TestAppHost`** (from `Seq.Apps.Testing`): Provides a minimal `IAppHost` with default `App` (id `"app-1"`, base URI `https://seq.example.com`), `Host`, and `Logger` instances. Used to attach the app in tests.
435
+
436
+ ### Test pattern
437
+
438
+ Setting properties are set directly on the app instance before calling `Attach()`, since the runtime injects them by reflection in production but tests bypass that:
439
+
440
+ ```csharp
441
+ [Fact]
442
+ public async Task EventsAreSentWithCorrectParameters()
443
+ {
444
+ var gateway = new TestMyGateway();
445
+ var app = new MyApp(gateway);
446
+ app.BotToken = "test-token";
447
+ app.ChatId = "12345";
448
+ app.Attach(new TestAppHost());
449
+
450
+ await app.OnAsync(Some.InformationEvent());
451
+
452
+ Assert.Single(gateway.Sent);
453
+ Assert.Equal("12345", gateway.Sent[0].ChatId);
454
+ }
455
+ ```
456
+
457
+ For `ISubscribeToJsonAsync` apps, pass a CLEF JSON string directly:
458
+
459
+ ```csharp
460
+ await app.OnAsync("""{"@t":"2024-01-15T10:30:00Z","@mt":"Test event"}""");
461
+ ```
462
+
463
+ A `Some` helper class is typically used to create `Event<LogEvent>` test fixtures for `ISubscribeToAsync<LogEvent>` apps.
464
+
465
+ ### Test categories
466
+
467
+ **App-level tests** exercise the full path from `OnAsync()` through the gateway using test doubles:
468
+
469
+ - Happy path: event flows end-to-end and the gateway receives the expected payload
470
+ - Different log levels produce appropriate output (level indicators, severity mapping)
471
+ - Alert events (`EventType = 0xA1E77001`) are handled distinctly from regular events
472
+ - Events with exceptions (`@x`) include the exception in output
473
+ - Events with missing optional properties degrade gracefully
474
+ - Structured property values (sequences, structures, dictionaries) render correctly
475
+
476
+ **Configuration tests** cover `OnAttached()`:
477
+
478
+ - Each required setting, when missing or empty, throws `ArgumentException` naming the setting
479
+ - Invalid combinations and out-of-range values are rejected
480
+ - Optional settings fall back to documented defaults
481
+
482
+ **Template/rendering tests** (for apps using `Seq.Syntax`):
483
+
484
+ - Default templates render sensibly for both regular events and alerts
485
+ - HTML/encoded output: interpolated values are encoded, literal template text is not
486
+ - Special characters in property values don't break the output format
487
+ - Built-in functions (`@Host`, `@App`, custom functions) resolve correctly
488
+ - Output truncation at size limits preserves valid output
489
+
490
+ **Error handling tests**:
491
+
492
+ - Gateway errors throw `SeqAppException` with a diagnostic message
493
+ - Transient errors (rate limits) log but do not throw
494
+ - Error context is sufficient for diagnosis (status codes, response excerpts)
495
+
496
+ **For `ISubscribeToJsonAsync` apps**, test with realistic CLEF inputs covering minimal events (`@t` + `@mt`), events with all optional fields (`@l`, `@x`, `@i`, `@tr`, `@sp`, `@st`), and properties containing special characters, nested structures, and arrays.
497
+
498
+ ### Smoke test project
499
+
500
+ An optional console app for manual end-to-end verification against real services. Reads settings from `SEQ_APP_SETTING_{PROPERTYNAME}` environment variables (uppercase, no underscores in the property name part).
501
+
502
+ Take care that the smoke test project doesn't exit or assume completion before asynchronous background processes complete, e.g. flushing buffered output to disk or remote APIs.
503
+
504
+ ## Runtime API reference
505
+
506
+ ### Key types from `Seq.Apps` (in `seq-apps-runtime`)
507
+
508
+ | Type | Purpose |
509
+ |---|---|
510
+ | `SeqApp` | Abstract base class. Provides `App`, `Host`, `Log` after attachment. |
511
+ | `SeqAppAttribute` | Marks the entry point class. `Name` (short UI label), `Description` (sentence), `AllowReprocessing` (default `false`; if `true`, the app will receive events that it produced itself). |
512
+ | `SeqAppSettingAttribute` | Marks configurable properties. See "App settings" section. |
513
+ | `ISubscribeToAsync<LogEvent>` | For output apps processing Serilog `LogEvent` objects. |
514
+ | `ISubscribeToJsonAsync` | For output apps processing raw CLEF JSON strings. |
515
+ | `IPublishJson` | For input apps that generate events. `Start(TextWriter)` / `Stop()`. |
516
+ | `Event<TData>` | Wrapper with `Id`, `EventType`, `Timestamp`, `Data`. Alert events have `EventType = 0xA1E77001`. |
517
+ | `App` | `Id`, `Title`, `Settings` (`IReadOnlyDictionary<string, string>`), `StoragePath`. |
518
+ | `Host` | `BaseUri`, `InstanceName` (nullable). |
519
+ | `SeqAppException` | Throw for app-specific errors; Seq records against the event. |
520
+ | `SettingInputType` | Enum: `Unspecified`, `Text`, `LongText`, `Checkbox`, `Integer`, `Decimal`, `Password`. |
521
+
522
+ ### Important constants
523
+
524
+ - Alert event type: `0xA1E77001`
525
+ - Default time zone: `Etc/UTC`
526
+ - Default date/time format: `o` (ISO-8601 round-trip)
527
+
528
+ ## Gotchas
529
+
530
+ - Seq does not resolve package dependencies when installing apps. Apps must package assembly dependencies into their own NUPKG (see CSPROJ conventions above).
531
+
532
+ ## References
533
+
534
+ - [CLEF specification](https://clef-json.org) — the Compact Log Event Format (`@t`, `@mt`, `@m`, `@l`, `@x`, `@i`, `@r`)
535
+ - [Posting raw events](https://docs.datalust.co/docs/posting-raw-events) — CLEF reference including Seq trace extensions (`@tr`, `@sp`, `@ps`, `@st`, `@sa`, `@ra`, `@sk`)
536
+ - [Template syntax](https://docs.datalust.co/docs/template-syntax) — documentation for the Seq template language used in app settings
537
+ - [seq-apps-runtime](https://github.com/datalust/seq-apps-runtime) — source code for the `Seq.Apps` API (`SeqApp`, `ISubscribeToAsync<LogEvent>`, `ISubscribeToJsonAsync`, etc.)
538
+ - [seqcli](https://github.com/datalust/seqcli) — source code for the `seqcli app run` command that Seq uses to host apps at runtime
539
+ - [seq-app-mail](https://github.com/datalust/seq-app-mail) — canonical output app example (email); also the home of `Seq.Syntax` source code
540
+ - [seq-input-healthcheck](https://github.com/datalust/seq-input-healthcheck) — canonical input app example (HTTP health checks)