@vibesdotdev/logging 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -0
- package/SPEC.md +65 -0
- package/dist/audit/audit.descriptor.d.ts +11 -0
- package/dist/audit/audit.descriptor.d.ts.map +1 -0
- package/dist/audit/audit.descriptor.js +40 -0
- package/dist/audit/audit.descriptor.js.map +1 -0
- package/dist/audit/audit.storage.schema.d.ts +79 -0
- package/dist/audit/audit.storage.schema.d.ts.map +1 -0
- package/dist/audit/audit.storage.schema.js +33 -0
- package/dist/audit/audit.storage.schema.js.map +1 -0
- package/dist/audit/index.d.ts +2 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +2 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/cli/logs.descriptor.d.ts +9 -0
- package/dist/cli/logs.descriptor.d.ts.map +1 -0
- package/dist/cli/logs.descriptor.js +16 -0
- package/dist/cli/logs.descriptor.js.map +1 -0
- package/dist/cli/logs.list.descriptor.d.ts +9 -0
- package/dist/cli/logs.list.descriptor.d.ts.map +1 -0
- package/dist/cli/logs.list.descriptor.js +23 -0
- package/dist/cli/logs.list.descriptor.js.map +1 -0
- package/dist/cli/logs.list.impl.d.ts +13 -0
- package/dist/cli/logs.list.impl.d.ts.map +1 -0
- package/dist/cli/logs.list.impl.js +81 -0
- package/dist/cli/logs.list.impl.js.map +1 -0
- package/dist/cli/logs.rotate.descriptor.d.ts +9 -0
- package/dist/cli/logs.rotate.descriptor.d.ts.map +1 -0
- package/dist/cli/logs.rotate.descriptor.js +34 -0
- package/dist/cli/logs.rotate.descriptor.js.map +1 -0
- package/dist/cli/logs.rotate.impl.d.ts +17 -0
- package/dist/cli/logs.rotate.impl.d.ts.map +1 -0
- package/dist/cli/logs.rotate.impl.js +48 -0
- package/dist/cli/logs.rotate.impl.js.map +1 -0
- package/dist/cli/logs.search.descriptor.d.ts +9 -0
- package/dist/cli/logs.search.descriptor.d.ts.map +1 -0
- package/dist/cli/logs.search.descriptor.js +55 -0
- package/dist/cli/logs.search.descriptor.js.map +1 -0
- package/dist/cli/logs.search.impl.d.ts +22 -0
- package/dist/cli/logs.search.impl.d.ts.map +1 -0
- package/dist/cli/logs.search.impl.js +145 -0
- package/dist/cli/logs.search.impl.js.map +1 -0
- package/dist/cli/logs.tail.descriptor.d.ts +9 -0
- package/dist/cli/logs.tail.descriptor.d.ts.map +1 -0
- package/dist/cli/logs.tail.descriptor.js +43 -0
- package/dist/cli/logs.tail.descriptor.js.map +1 -0
- package/dist/cli/logs.tail.impl.d.ts +19 -0
- package/dist/cli/logs.tail.impl.d.ts.map +1 -0
- package/dist/cli/logs.tail.impl.js +78 -0
- package/dist/cli/logs.tail.impl.js.map +1 -0
- package/dist/cli/logs.view.descriptor.d.ts +9 -0
- package/dist/cli/logs.view.descriptor.d.ts.map +1 -0
- package/dist/cli/logs.view.descriptor.js +51 -0
- package/dist/cli/logs.view.descriptor.js.map +1 -0
- package/dist/cli/logs.view.impl.d.ts +21 -0
- package/dist/cli/logs.view.impl.d.ts.map +1 -0
- package/dist/cli/logs.view.impl.js +85 -0
- package/dist/cli/logs.view.impl.js.map +1 -0
- package/dist/cli/types.d.ts +57 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +9 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/contexts/audit.d.ts +34 -0
- package/dist/contexts/audit.d.ts.map +1 -0
- package/dist/contexts/audit.js +13 -0
- package/dist/contexts/audit.js.map +1 -0
- package/dist/contexts/fallback-logger.d.ts +3 -0
- package/dist/contexts/fallback-logger.d.ts.map +1 -0
- package/dist/contexts/fallback-logger.js +67 -0
- package/dist/contexts/fallback-logger.js.map +1 -0
- package/dist/contexts/index.d.ts +8 -0
- package/dist/contexts/index.d.ts.map +1 -0
- package/dist/contexts/index.js +9 -0
- package/dist/contexts/index.js.map +1 -0
- package/dist/contexts/logger.d.ts +26 -0
- package/dist/contexts/logger.d.ts.map +1 -0
- package/dist/contexts/logger.js +88 -0
- package/dist/contexts/logger.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +10 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +3 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +118 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/namespace.d.ts +69 -0
- package/dist/core/namespace.d.ts.map +1 -0
- package/dist/core/namespace.js +136 -0
- package/dist/core/namespace.js.map +1 -0
- package/dist/core/parsing.d.ts +3 -0
- package/dist/core/parsing.d.ts.map +1 -0
- package/dist/core/parsing.js +25 -0
- package/dist/core/parsing.js.map +1 -0
- package/dist/core/types.d.ts +69 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +7 -0
- package/dist/core/types.js.map +1 -0
- package/dist/docs/levels.docs.descriptor.d.ts +4 -0
- package/dist/docs/levels.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/levels.docs.descriptor.js +342 -0
- package/dist/docs/levels.docs.descriptor.js.map +1 -0
- package/dist/docs/structured.docs.descriptor.d.ts +4 -0
- package/dist/docs/structured.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/structured.docs.descriptor.js +442 -0
- package/dist/docs/structured.docs.descriptor.js.map +1 -0
- package/dist/docs/transports.docs.descriptor.d.ts +4 -0
- package/dist/docs/transports.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/transports.docs.descriptor.js +426 -0
- package/dist/docs/transports.docs.descriptor.js.map +1 -0
- package/dist/formatters/index.d.ts +7 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +8 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/formatters/json/json.formatters.descriptor.d.ts +9 -0
- package/dist/formatters/json/json.formatters.descriptor.d.ts.map +1 -0
- package/dist/formatters/json/json.formatters.descriptor.js +22 -0
- package/dist/formatters/json/json.formatters.descriptor.js.map +1 -0
- package/dist/formatters/json/json.impl.d.ts +22 -0
- package/dist/formatters/json/json.impl.d.ts.map +1 -0
- package/dist/formatters/json/json.impl.js +32 -0
- package/dist/formatters/json/json.impl.js.map +1 -0
- package/dist/formatters/json5/json5.descriptor.d.ts +9 -0
- package/dist/formatters/json5/json5.descriptor.d.ts.map +1 -0
- package/dist/formatters/json5/json5.descriptor.js +22 -0
- package/dist/formatters/json5/json5.descriptor.js.map +1 -0
- package/dist/formatters/json5/json5.impl.d.ts +23 -0
- package/dist/formatters/json5/json5.impl.d.ts.map +1 -0
- package/dist/formatters/json5/json5.impl.js +34 -0
- package/dist/formatters/json5/json5.impl.js.map +1 -0
- package/dist/formatters/jsonl/jsonl.descriptor.d.ts +10 -0
- package/dist/formatters/jsonl/jsonl.descriptor.d.ts.map +1 -0
- package/dist/formatters/jsonl/jsonl.descriptor.js +23 -0
- package/dist/formatters/jsonl/jsonl.descriptor.js.map +1 -0
- package/dist/formatters/jsonl/jsonl.impl.d.ts +21 -0
- package/dist/formatters/jsonl/jsonl.impl.d.ts.map +1 -0
- package/dist/formatters/jsonl/jsonl.impl.js +30 -0
- package/dist/formatters/jsonl/jsonl.impl.js.map +1 -0
- package/dist/formatters/pretty/pretty.descriptor.d.ts +9 -0
- package/dist/formatters/pretty/pretty.descriptor.d.ts.map +1 -0
- package/dist/formatters/pretty/pretty.descriptor.js +23 -0
- package/dist/formatters/pretty/pretty.descriptor.js.map +1 -0
- package/dist/formatters/pretty/pretty.impl.cli.d.ts +23 -0
- package/dist/formatters/pretty/pretty.impl.cli.d.ts.map +1 -0
- package/dist/formatters/pretty/pretty.impl.cli.js +81 -0
- package/dist/formatters/pretty/pretty.impl.cli.js.map +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/kinds/audit.d.ts +85 -0
- package/dist/kinds/audit.d.ts.map +1 -0
- package/dist/kinds/audit.js +71 -0
- package/dist/kinds/audit.js.map +1 -0
- package/dist/kinds/contexts.d.ts +21 -0
- package/dist/kinds/contexts.d.ts.map +1 -0
- package/dist/kinds/contexts.js +8 -0
- package/dist/kinds/contexts.js.map +1 -0
- package/dist/kinds/formatter.d.ts +42 -0
- package/dist/kinds/formatter.d.ts.map +1 -0
- package/dist/kinds/formatter.js +69 -0
- package/dist/kinds/formatter.js.map +1 -0
- package/dist/kinds/index.d.ts +13 -0
- package/dist/kinds/index.d.ts.map +1 -0
- package/dist/kinds/index.js +13 -0
- package/dist/kinds/index.js.map +1 -0
- package/dist/kinds/logger.contracts.d.ts +16 -0
- package/dist/kinds/logger.contracts.d.ts.map +1 -0
- package/dist/kinds/logger.contracts.js +9 -0
- package/dist/kinds/logger.contracts.js.map +1 -0
- package/dist/kinds/logger.d.ts +15 -0
- package/dist/kinds/logger.d.ts.map +1 -0
- package/dist/kinds/logger.impl.d.ts +40 -0
- package/dist/kinds/logger.impl.d.ts.map +1 -0
- package/dist/kinds/logger.impl.js +139 -0
- package/dist/kinds/logger.impl.js.map +1 -0
- package/dist/kinds/logger.js +28 -0
- package/dist/kinds/logger.js.map +1 -0
- package/dist/kinds/logger.utils.d.ts +15 -0
- package/dist/kinds/logger.utils.d.ts.map +1 -0
- package/dist/kinds/logger.utils.js +55 -0
- package/dist/kinds/logger.utils.js.map +1 -0
- package/dist/kinds/output.contracts.d.ts +50 -0
- package/dist/kinds/output.contracts.d.ts.map +1 -0
- package/dist/kinds/output.contracts.js +10 -0
- package/dist/kinds/output.contracts.js.map +1 -0
- package/dist/kinds/output.d.ts +20 -0
- package/dist/kinds/output.d.ts.map +1 -0
- package/dist/kinds/output.impl.d.ts +22 -0
- package/dist/kinds/output.impl.d.ts.map +1 -0
- package/dist/kinds/output.impl.js +84 -0
- package/dist/kinds/output.impl.js.map +1 -0
- package/dist/kinds/output.js +29 -0
- package/dist/kinds/output.js.map +1 -0
- package/dist/kinds/output.types.d.ts +92 -0
- package/dist/kinds/output.types.d.ts.map +1 -0
- package/dist/kinds/output.types.js +7 -0
- package/dist/kinds/output.types.js.map +1 -0
- package/dist/kinds/sink.d.ts +40 -0
- package/dist/kinds/sink.d.ts.map +1 -0
- package/dist/kinds/sink.js +61 -0
- package/dist/kinds/sink.js.map +1 -0
- package/dist/logger.context.descriptor.d.ts +21 -0
- package/dist/logger.context.descriptor.d.ts.map +1 -0
- package/dist/logger.context.descriptor.js +12 -0
- package/dist/logger.context.descriptor.js.map +1 -0
- package/dist/logging.cli.plugin.d.ts +20 -0
- package/dist/logging.cli.plugin.d.ts.map +1 -0
- package/dist/logging.cli.plugin.js +39 -0
- package/dist/logging.cli.plugin.js.map +1 -0
- package/dist/logging.plugin.d.ts +16 -0
- package/dist/logging.plugin.d.ts.map +1 -0
- package/dist/logging.plugin.js +83 -0
- package/dist/logging.plugin.js.map +1 -0
- package/dist/outputs/index.d.ts +7 -0
- package/dist/outputs/index.d.ts.map +1 -0
- package/dist/outputs/index.js +8 -0
- package/dist/outputs/index.js.map +1 -0
- package/dist/outputs/remote/remote.descriptor.d.ts +10 -0
- package/dist/outputs/remote/remote.descriptor.d.ts.map +1 -0
- package/dist/outputs/remote/remote.descriptor.js +24 -0
- package/dist/outputs/remote/remote.descriptor.js.map +1 -0
- package/dist/outputs/remote/remote.impl.d.ts +50 -0
- package/dist/outputs/remote/remote.impl.d.ts.map +1 -0
- package/dist/outputs/remote/remote.impl.js +178 -0
- package/dist/outputs/remote/remote.impl.js.map +1 -0
- package/dist/outputs.context.descriptor.d.ts +19 -0
- package/dist/outputs.context.descriptor.d.ts.map +1 -0
- package/dist/outputs.context.descriptor.js +9 -0
- package/dist/outputs.context.descriptor.js.map +1 -0
- package/dist/outputs.context.impl.d.ts +9 -0
- package/dist/outputs.context.impl.d.ts.map +1 -0
- package/dist/outputs.context.impl.js +18 -0
- package/dist/outputs.context.impl.js.map +1 -0
- package/dist/paths.d.ts +8 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +10 -0
- package/dist/paths.js.map +1 -0
- package/dist/schemas/audit.d.ts +133 -0
- package/dist/schemas/audit.d.ts.map +1 -0
- package/dist/schemas/audit.js +80 -0
- package/dist/schemas/audit.js.map +1 -0
- package/dist/schemas/entry.d.ts +74 -0
- package/dist/schemas/entry.d.ts.map +1 -0
- package/dist/schemas/entry.js +62 -0
- package/dist/schemas/entry.js.map +1 -0
- package/dist/schemas/formatter.d.ts +46 -0
- package/dist/schemas/formatter.d.ts.map +1 -0
- package/dist/schemas/formatter.js +31 -0
- package/dist/schemas/formatter.js.map +1 -0
- package/dist/schemas/index.d.ts +12 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +18 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/logger.d.ts +48 -0
- package/dist/schemas/logger.d.ts.map +1 -0
- package/dist/schemas/logger.js +27 -0
- package/dist/schemas/logger.js.map +1 -0
- package/dist/schemas/output.d.ts +68 -0
- package/dist/schemas/output.d.ts.map +1 -0
- package/dist/schemas/output.js +48 -0
- package/dist/schemas/output.js.map +1 -0
- package/dist/schemas/sink.d.ts +52 -0
- package/dist/schemas/sink.d.ts.map +1 -0
- package/dist/schemas/sink.js +30 -0
- package/dist/schemas/sink.js.map +1 -0
- package/dist/sinks/buffer/buffer.descriptor.d.ts +4 -0
- package/dist/sinks/buffer/buffer.descriptor.d.ts.map +1 -0
- package/dist/sinks/buffer/buffer.descriptor.js +11 -0
- package/dist/sinks/buffer/buffer.descriptor.js.map +1 -0
- package/dist/sinks/buffer/buffer.impl.cli.d.ts +21 -0
- package/dist/sinks/buffer/buffer.impl.cli.d.ts.map +1 -0
- package/dist/sinks/buffer/buffer.impl.cli.js +34 -0
- package/dist/sinks/buffer/buffer.impl.cli.js.map +1 -0
- package/dist/sinks/console/console.descriptor.d.ts +10 -0
- package/dist/sinks/console/console.descriptor.d.ts.map +1 -0
- package/dist/sinks/console/console.descriptor.js +17 -0
- package/dist/sinks/console/console.descriptor.js.map +1 -0
- package/dist/sinks/console/console.impl.browser.d.ts +21 -0
- package/dist/sinks/console/console.impl.browser.d.ts.map +1 -0
- package/dist/sinks/console/console.impl.browser.js +57 -0
- package/dist/sinks/console/console.impl.browser.js.map +1 -0
- package/dist/sinks/console/console.impl.cli.d.ts +21 -0
- package/dist/sinks/console/console.impl.cli.d.ts.map +1 -0
- package/dist/sinks/console/console.impl.cli.js +57 -0
- package/dist/sinks/console/console.impl.cli.js.map +1 -0
- package/dist/sinks/index.d.ts +8 -0
- package/dist/sinks/index.d.ts.map +1 -0
- package/dist/sinks/index.js +8 -0
- package/dist/sinks/index.js.map +1 -0
- package/dist/sinks/memory/memory.descriptor.d.ts +10 -0
- package/dist/sinks/memory/memory.descriptor.d.ts.map +1 -0
- package/dist/sinks/memory/memory.descriptor.js +17 -0
- package/dist/sinks/memory/memory.descriptor.js.map +1 -0
- package/dist/sinks/memory/memory.impl.d.ts +50 -0
- package/dist/sinks/memory/memory.impl.d.ts.map +1 -0
- package/dist/sinks/memory/memory.impl.js +88 -0
- package/dist/sinks/memory/memory.impl.js.map +1 -0
- package/dist/sinks/stdout/stdout.descriptor.d.ts +4 -0
- package/dist/sinks/stdout/stdout.descriptor.d.ts.map +1 -0
- package/dist/sinks/stdout/stdout.descriptor.js +11 -0
- package/dist/sinks/stdout/stdout.descriptor.js.map +1 -0
- package/dist/sinks/stdout/stdout.impl.cli.d.ts +10 -0
- package/dist/sinks/stdout/stdout.impl.cli.d.ts.map +1 -0
- package/dist/sinks/stdout/stdout.impl.cli.js +21 -0
- package/dist/sinks/stdout/stdout.impl.cli.js.map +1 -0
- package/dist/sinks.context.descriptor.d.ts +19 -0
- package/dist/sinks.context.descriptor.d.ts.map +1 -0
- package/dist/sinks.context.descriptor.js +9 -0
- package/dist/sinks.context.descriptor.js.map +1 -0
- package/dist/sinks.context.impl.d.ts +9 -0
- package/dist/sinks.context.impl.d.ts.map +1 -0
- package/dist/sinks.context.impl.js +18 -0
- package/dist/sinks.context.impl.js.map +1 -0
- package/package.json +331 -0
- package/src/audit/audit.descriptor.ts +45 -0
- package/src/audit/audit.storage.schema.ts +57 -0
- package/src/audit/index.ts +8 -0
- package/src/cli/logs.descriptor.ts +19 -0
- package/src/cli/logs.list.descriptor.ts +28 -0
- package/src/cli/logs.list.impl.ts +93 -0
- package/src/cli/logs.rotate.descriptor.ts +40 -0
- package/src/cli/logs.rotate.impl.ts +61 -0
- package/src/cli/logs.search.descriptor.ts +61 -0
- package/src/cli/logs.search.impl.ts +173 -0
- package/src/cli/logs.tail.descriptor.ts +49 -0
- package/src/cli/logs.tail.impl.ts +105 -0
- package/src/cli/logs.view.descriptor.ts +57 -0
- package/src/cli/logs.view.impl.ts +108 -0
- package/src/cli/types.ts +59 -0
- package/src/contexts/audit.ts +36 -0
- package/src/contexts/fallback-logger.ts +80 -0
- package/src/contexts/index.ts +23 -0
- package/src/contexts/logger.ts +119 -0
- package/src/core/index.ts +32 -0
- package/src/core/logger.ts +150 -0
- package/src/core/namespace.ts +195 -0
- package/src/core/parsing.ts +21 -0
- package/src/core/types.ts +82 -0
- package/src/docs/levels.docs.descriptor.ts +344 -0
- package/src/docs/structured.docs.descriptor.ts +444 -0
- package/src/docs/transports.docs.descriptor.ts +428 -0
- package/src/formatters/index.ts +6 -0
- package/src/formatters/json/json.formatters.descriptor.ts +25 -0
- package/src/formatters/json/json.impl.ts +41 -0
- package/src/formatters/json5/json5.descriptor.ts +25 -0
- package/src/formatters/json5/json5.impl.ts +43 -0
- package/src/formatters/jsonl/jsonl.descriptor.ts +26 -0
- package/src/formatters/jsonl/jsonl.impl.ts +39 -0
- package/src/formatters/pretty/pretty.descriptor.ts +26 -0
- package/src/formatters/pretty/pretty.impl.cli.ts +101 -0
- package/src/index.ts +190 -0
- package/src/kinds/audit.ts +169 -0
- package/src/kinds/contexts.ts +22 -0
- package/src/kinds/formatter.ts +117 -0
- package/src/kinds/index.ts +25 -0
- package/src/kinds/logger.contracts.ts +17 -0
- package/src/kinds/logger.impl.ts +206 -0
- package/src/kinds/logger.ts +46 -0
- package/src/kinds/logger.utils.ts +91 -0
- package/src/kinds/output.contracts.ts +54 -0
- package/src/kinds/output.impl.ts +118 -0
- package/src/kinds/output.ts +59 -0
- package/src/kinds/output.types.ts +105 -0
- package/src/kinds/sink.ts +100 -0
- package/src/logger.context.descriptor.ts +13 -0
- package/src/logging.cli.plugin.ts +43 -0
- package/src/logging.plugin.ts +93 -0
- package/src/outputs/index.ts +6 -0
- package/src/outputs/remote/remote.descriptor.ts +27 -0
- package/src/outputs/remote/remote.impl.ts +218 -0
- package/src/outputs.context.descriptor.ts +10 -0
- package/src/outputs.context.impl.ts +30 -0
- package/src/paths.ts +10 -0
- package/src/schemas/audit.ts +98 -0
- package/src/schemas/entry.ts +88 -0
- package/src/schemas/formatter.ts +37 -0
- package/src/schemas/index.ts +80 -0
- package/src/schemas/logger.ts +38 -0
- package/src/schemas/output.ts +62 -0
- package/src/schemas/sink.ts +39 -0
- package/src/sinks/buffer/buffer.descriptor.ts +13 -0
- package/src/sinks/buffer/buffer.impl.cli.ts +49 -0
- package/src/sinks/console/console.descriptor.ts +20 -0
- package/src/sinks/console/console.impl.browser.ts +69 -0
- package/src/sinks/console/console.impl.cli.ts +71 -0
- package/src/sinks/index.ts +8 -0
- package/src/sinks/memory/memory.descriptor.ts +20 -0
- package/src/sinks/memory/memory.impl.ts +119 -0
- package/src/sinks/stdout/stdout.descriptor.ts +13 -0
- package/src/sinks/stdout/stdout.impl.cli.ts +27 -0
- package/src/sinks.context.descriptor.ts +10 -0
- package/src/sinks.context.impl.ts +30 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging Entry Schemas
|
|
3
|
+
*
|
|
4
|
+
* Core types for log entries, levels, and contexts.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as z from 'zod/v4';
|
|
8
|
+
|
|
9
|
+
/** Log severity levels */
|
|
10
|
+
export const LogLevelSchema = z.enum(['debug', 'info', 'warn', 'error']);
|
|
11
|
+
export type LogLevel = z.infer<typeof LogLevelSchema>;
|
|
12
|
+
|
|
13
|
+
/** Log level priority ordering */
|
|
14
|
+
export const LOG_LEVEL_ORDER: Record<LogLevel, number> = {
|
|
15
|
+
debug: 0,
|
|
16
|
+
info: 1,
|
|
17
|
+
warn: 2,
|
|
18
|
+
error: 3
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/** Context attached to log entries */
|
|
22
|
+
export const LogContextSchema = z.record(z.string(), z.unknown());
|
|
23
|
+
export type LogContext = z.infer<typeof LogContextSchema>;
|
|
24
|
+
|
|
25
|
+
/** Options for creating child loggers */
|
|
26
|
+
export const LoggerChildOptionsSchema = z.union([
|
|
27
|
+
z.string(),
|
|
28
|
+
z
|
|
29
|
+
.object({
|
|
30
|
+
namespace: z.string().optional(),
|
|
31
|
+
context: z.string().optional()
|
|
32
|
+
})
|
|
33
|
+
.and(LogContextSchema)
|
|
34
|
+
]);
|
|
35
|
+
export type LoggerChildOptions = z.infer<typeof LoggerChildOptionsSchema>;
|
|
36
|
+
|
|
37
|
+
/** A single log entry */
|
|
38
|
+
export const RuntimeLogEntrySchema = z.object({
|
|
39
|
+
/** Timestamp of the entry (ISO 8601) */
|
|
40
|
+
timestamp: z.string(),
|
|
41
|
+
/** Log severity level */
|
|
42
|
+
level: LogLevelSchema,
|
|
43
|
+
/** Hierarchical namespace (e.g., 'vibes:pm:daemon') */
|
|
44
|
+
namespace: z.string(),
|
|
45
|
+
/** Log message */
|
|
46
|
+
message: z.string(),
|
|
47
|
+
/** Arbitrary context data */
|
|
48
|
+
context: LogContextSchema
|
|
49
|
+
});
|
|
50
|
+
export type RuntimeLogEntry = z.infer<typeof RuntimeLogEntrySchema>;
|
|
51
|
+
|
|
52
|
+
/** Request-specific context fields */
|
|
53
|
+
export const RequestLogContextSchema = z.object({
|
|
54
|
+
requestId: z.string().optional(),
|
|
55
|
+
correlationId: z.string().optional(),
|
|
56
|
+
sessionId: z.string().optional(),
|
|
57
|
+
userId: z.string().optional(),
|
|
58
|
+
userAgent: z.string().optional(),
|
|
59
|
+
ip: z.string().optional(),
|
|
60
|
+
route: z.string().optional(),
|
|
61
|
+
method: z.string().optional()
|
|
62
|
+
});
|
|
63
|
+
export type RequestLogContext = z.infer<typeof RequestLogContextSchema>;
|
|
64
|
+
|
|
65
|
+
/** Job-specific context fields */
|
|
66
|
+
export const JobLogContextSchema = z.object({
|
|
67
|
+
jobId: z.string().optional(),
|
|
68
|
+
queueId: z.string().optional(),
|
|
69
|
+
queueName: z.string().optional(),
|
|
70
|
+
toolId: z.string().optional(),
|
|
71
|
+
parentJobId: z.string().optional(),
|
|
72
|
+
attempt: z.number().optional(),
|
|
73
|
+
maxAttempts: z.number().optional()
|
|
74
|
+
});
|
|
75
|
+
export type JobLogContext = z.infer<typeof JobLogContextSchema>;
|
|
76
|
+
|
|
77
|
+
/** Performance tracking parameters */
|
|
78
|
+
export interface PerformanceTrackerParams {
|
|
79
|
+
operation: string;
|
|
80
|
+
metadata?: LogContext;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Performance tracker for timing operations */
|
|
84
|
+
export interface PerformanceTracker {
|
|
85
|
+
start(): void;
|
|
86
|
+
end(successContext?: LogContext): void;
|
|
87
|
+
fail(error: unknown, errorContext?: LogContext): void;
|
|
88
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging Formatter Descriptor Schema
|
|
3
|
+
*
|
|
4
|
+
* Formatters serialize and deserialize log entries.
|
|
5
|
+
* Examples: JSONL, JSON, JSON5, pretty-printed text.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as z from 'zod/v4';
|
|
9
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
|
|
10
|
+
import { SinkFormatSchema } from './sink.ts';
|
|
11
|
+
|
|
12
|
+
/** Formatter-specific options */
|
|
13
|
+
export const FormatterOptionsSchema = z.object({
|
|
14
|
+
/** Pretty-print with indentation */
|
|
15
|
+
indent: z.number().int().min(0).default(0),
|
|
16
|
+
/** Include timestamp in formatted output */
|
|
17
|
+
includeTimestamp: z.boolean().default(true),
|
|
18
|
+
/** Include namespace in formatted output */
|
|
19
|
+
includeNamespace: z.boolean().default(true),
|
|
20
|
+
/** Include level in formatted output */
|
|
21
|
+
includeLevel: z.boolean().default(true),
|
|
22
|
+
/** Use colors (for pretty formatter) */
|
|
23
|
+
colors: z.boolean().default(true)
|
|
24
|
+
});
|
|
25
|
+
export type FormatterOptions = z.infer<typeof FormatterOptionsSchema>;
|
|
26
|
+
|
|
27
|
+
/** Formatter descriptor schema */
|
|
28
|
+
export const FormatterDescriptorSchema = RuntimeDescriptorSchema.extend({
|
|
29
|
+
kind: z.literal('logging/formatter'),
|
|
30
|
+
|
|
31
|
+
/** Output format type */
|
|
32
|
+
format: SinkFormatSchema,
|
|
33
|
+
|
|
34
|
+
/** Formatter options */
|
|
35
|
+
options: FormatterOptionsSchema.optional()
|
|
36
|
+
});
|
|
37
|
+
export type FormatterDescriptor = z.infer<typeof FormatterDescriptorSchema>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging Schemas
|
|
3
|
+
*
|
|
4
|
+
* Exports all logging-related schemas and types.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// Core entry types
|
|
8
|
+
export {
|
|
9
|
+
LogLevelSchema,
|
|
10
|
+
type LogLevel,
|
|
11
|
+
LOG_LEVEL_ORDER,
|
|
12
|
+
LogContextSchema,
|
|
13
|
+
type LogContext,
|
|
14
|
+
LoggerChildOptionsSchema,
|
|
15
|
+
type LoggerChildOptions,
|
|
16
|
+
RuntimeLogEntrySchema,
|
|
17
|
+
type RuntimeLogEntry,
|
|
18
|
+
RequestLogContextSchema,
|
|
19
|
+
type RequestLogContext,
|
|
20
|
+
JobLogContextSchema,
|
|
21
|
+
type JobLogContext,
|
|
22
|
+
type PerformanceTrackerParams,
|
|
23
|
+
type PerformanceTracker
|
|
24
|
+
} from './entry.ts';
|
|
25
|
+
|
|
26
|
+
// Sink schemas
|
|
27
|
+
export {
|
|
28
|
+
SinkFormatSchema,
|
|
29
|
+
type SinkFormat,
|
|
30
|
+
SinkBatchingSchema,
|
|
31
|
+
type SinkBatching,
|
|
32
|
+
SinkDescriptorSchema,
|
|
33
|
+
type SinkDescriptor
|
|
34
|
+
} from './sink.ts';
|
|
35
|
+
|
|
36
|
+
// Formatter schemas
|
|
37
|
+
export {
|
|
38
|
+
FormatterOptionsSchema,
|
|
39
|
+
type FormatterOptions,
|
|
40
|
+
FormatterDescriptorSchema,
|
|
41
|
+
type FormatterDescriptor
|
|
42
|
+
} from './formatter.ts';
|
|
43
|
+
|
|
44
|
+
// Output schemas
|
|
45
|
+
export {
|
|
46
|
+
OutputRotationSchema,
|
|
47
|
+
type OutputRotation,
|
|
48
|
+
OutputBufferingSchema,
|
|
49
|
+
type OutputBuffering,
|
|
50
|
+
OutputStorageSchema,
|
|
51
|
+
type OutputStorage,
|
|
52
|
+
OutputDescriptorSchema,
|
|
53
|
+
type OutputDescriptor
|
|
54
|
+
} from './output.ts';
|
|
55
|
+
|
|
56
|
+
// Audit schemas
|
|
57
|
+
export {
|
|
58
|
+
AuditCategorySchema,
|
|
59
|
+
type AuditCategory,
|
|
60
|
+
AuditSeveritySchema,
|
|
61
|
+
type AuditSeverity,
|
|
62
|
+
AuditOutcomeSchema,
|
|
63
|
+
type AuditOutcome,
|
|
64
|
+
AuditActorSchema,
|
|
65
|
+
type AuditActor,
|
|
66
|
+
AuditTargetSchema,
|
|
67
|
+
type AuditTarget,
|
|
68
|
+
AuditEntrySchema,
|
|
69
|
+
type AuditEntry,
|
|
70
|
+
AuditDescriptorSchema,
|
|
71
|
+
type AuditDescriptor
|
|
72
|
+
} from './audit.ts';
|
|
73
|
+
|
|
74
|
+
// Logger schemas
|
|
75
|
+
export {
|
|
76
|
+
LoggerRuntimeSchema,
|
|
77
|
+
type LoggerRuntime,
|
|
78
|
+
LoggerDescriptorSchema,
|
|
79
|
+
type LoggerDescriptor
|
|
80
|
+
} from './logger.ts';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Descriptor Schema
|
|
3
|
+
*
|
|
4
|
+
* Loggers are named log emitters with namespace filtering and sink routing.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import * as z from 'zod/v4';
|
|
8
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
|
|
9
|
+
import { LogLevelSchema } from './entry.ts';
|
|
10
|
+
|
|
11
|
+
/** Runtime environment for the logger */
|
|
12
|
+
export const LoggerRuntimeSchema = z.enum(['server', 'cli', 'worker', 'browser', 'mcp']);
|
|
13
|
+
export type LoggerRuntime = z.infer<typeof LoggerRuntimeSchema>;
|
|
14
|
+
|
|
15
|
+
/** Logger descriptor schema */
|
|
16
|
+
export const LoggerDescriptorSchema = RuntimeDescriptorSchema.extend({
|
|
17
|
+
kind: z.literal('logging/logger'),
|
|
18
|
+
|
|
19
|
+
/** Hierarchical namespace for filtering (e.g., 'vibes:pm:daemon') */
|
|
20
|
+
namespace: z.string(),
|
|
21
|
+
|
|
22
|
+
/** Runtime environment */
|
|
23
|
+
runtime: LoggerRuntimeSchema.default('server'),
|
|
24
|
+
|
|
25
|
+
/** Sink IDs to emit to (default: ['console']) */
|
|
26
|
+
sinks: z.array(z.string()).default(['console']),
|
|
27
|
+
|
|
28
|
+
/** Output IDs to write to (optional, for persistent logging) */
|
|
29
|
+
outputs: z.array(z.string()).optional(),
|
|
30
|
+
|
|
31
|
+
/** Minimum log level (default: 'info') */
|
|
32
|
+
level: LogLevelSchema.default('info'),
|
|
33
|
+
|
|
34
|
+
/** Static metadata to include in all entries */
|
|
35
|
+
metadata: z.record(z.string(), z.unknown()).optional()
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export type LoggerDescriptor = z.infer<typeof LoggerDescriptorSchema>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging Output Descriptor Schema
|
|
3
|
+
*
|
|
4
|
+
* Outputs are named log streams with rotation and buffering.
|
|
5
|
+
* Examples: file output, remote HTTP endpoint.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as z from 'zod/v4';
|
|
9
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
|
|
10
|
+
import { SinkFormatSchema } from './sink.ts';
|
|
11
|
+
|
|
12
|
+
/** File rotation configuration */
|
|
13
|
+
export const OutputRotationSchema = z.object({
|
|
14
|
+
/** Maximum file size before rotation (e.g., '10MB', '1GB') */
|
|
15
|
+
maxSize: z.string().optional(),
|
|
16
|
+
/** Maximum age before rotation (e.g., '7d', '24h') */
|
|
17
|
+
maxAge: z.string().optional(),
|
|
18
|
+
/** Maximum number of rotated files to keep */
|
|
19
|
+
maxFiles: z.number().int().positive().default(5)
|
|
20
|
+
});
|
|
21
|
+
export type OutputRotation = z.infer<typeof OutputRotationSchema>;
|
|
22
|
+
|
|
23
|
+
/** Buffering configuration */
|
|
24
|
+
export const OutputBufferingSchema = z.object({
|
|
25
|
+
/** Enable buffered writes */
|
|
26
|
+
enabled: z.boolean().default(true),
|
|
27
|
+
/** Buffer size in bytes */
|
|
28
|
+
size: z.number().int().positive().default(8192),
|
|
29
|
+
/** Flush interval in milliseconds */
|
|
30
|
+
flushInterval: z.number().int().positive().default(1000),
|
|
31
|
+
/** Maximum number of entries to buffer (for memory safety under failure conditions) */
|
|
32
|
+
maxBufferEntries: z.number().int().positive().default(10000)
|
|
33
|
+
});
|
|
34
|
+
export type OutputBuffering = z.infer<typeof OutputBufferingSchema>;
|
|
35
|
+
|
|
36
|
+
/** Storage backend type */
|
|
37
|
+
export const OutputStorageSchema = z.enum(['file', 'remote']);
|
|
38
|
+
export type OutputStorage = z.infer<typeof OutputStorageSchema>;
|
|
39
|
+
|
|
40
|
+
/** Output descriptor schema */
|
|
41
|
+
export const OutputDescriptorSchema = RuntimeDescriptorSchema.extend({
|
|
42
|
+
kind: z.literal('logging/output'),
|
|
43
|
+
|
|
44
|
+
/** Storage backend (file or remote) */
|
|
45
|
+
storage: OutputStorageSchema,
|
|
46
|
+
|
|
47
|
+
/** Output format */
|
|
48
|
+
format: SinkFormatSchema.default('jsonl'),
|
|
49
|
+
|
|
50
|
+
/** File path (relative to workspace or absolute) */
|
|
51
|
+
path: z.string().optional(),
|
|
52
|
+
|
|
53
|
+
/** Remote endpoint URL */
|
|
54
|
+
endpoint: z.string().url().optional(),
|
|
55
|
+
|
|
56
|
+
/** Rotation configuration (file outputs only) */
|
|
57
|
+
rotation: OutputRotationSchema.optional(),
|
|
58
|
+
|
|
59
|
+
/** Buffering configuration */
|
|
60
|
+
buffering: OutputBufferingSchema.optional()
|
|
61
|
+
});
|
|
62
|
+
export type OutputDescriptor = z.infer<typeof OutputDescriptorSchema>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging Sink Descriptor Schema
|
|
3
|
+
*
|
|
4
|
+
* Sinks are output destinations for log entries.
|
|
5
|
+
* Examples: console, OpenTelemetry, memory buffer.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import * as z from 'zod/v4';
|
|
9
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/runtime/schemas/descriptor';
|
|
10
|
+
|
|
11
|
+
/** Supported output formats for sinks */
|
|
12
|
+
export const SinkFormatSchema = z.enum(['jsonl', 'json', 'json5', 'pretty', 'raw']);
|
|
13
|
+
export type SinkFormat = z.infer<typeof SinkFormatSchema>;
|
|
14
|
+
|
|
15
|
+
/** Batching configuration for async sinks */
|
|
16
|
+
export const SinkBatchingSchema = z.object({
|
|
17
|
+
/** Enable batched writes */
|
|
18
|
+
enabled: z.boolean().default(false),
|
|
19
|
+
/** Maximum entries before flush */
|
|
20
|
+
maxSize: z.number().int().positive().default(100),
|
|
21
|
+
/** Maximum wait time (ms) before flush */
|
|
22
|
+
maxWait: z.number().int().positive().default(1000)
|
|
23
|
+
});
|
|
24
|
+
export type SinkBatching = z.infer<typeof SinkBatchingSchema>;
|
|
25
|
+
|
|
26
|
+
/** Sink descriptor schema */
|
|
27
|
+
export const SinkDescriptorSchema = RuntimeDescriptorSchema.extend({
|
|
28
|
+
kind: z.literal('logging/sink'),
|
|
29
|
+
|
|
30
|
+
/** Whether sink supports async writes */
|
|
31
|
+
async: z.boolean().default(false),
|
|
32
|
+
|
|
33
|
+
/** Batching configuration */
|
|
34
|
+
batching: SinkBatchingSchema.optional(),
|
|
35
|
+
|
|
36
|
+
/** Supported output formats */
|
|
37
|
+
formats: z.array(SinkFormatSchema).default(['raw'])
|
|
38
|
+
});
|
|
39
|
+
export type SinkDescriptor = z.infer<typeof SinkDescriptorSchema>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SinkDescriptor } from '../../schemas/sink.ts';
|
|
2
|
+
|
|
3
|
+
const descriptor: SinkDescriptor = {
|
|
4
|
+
kind: 'logging/sink',
|
|
5
|
+
id: 'buffer',
|
|
6
|
+
name: 'Buffer Sink',
|
|
7
|
+
description: 'Temporary in-memory sink for startup buffering and deferred flush',
|
|
8
|
+
tags: ['cli', 'buffer'],
|
|
9
|
+
async: false,
|
|
10
|
+
formats: ['raw']
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default descriptor;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { SinkImplementation, SinkContext } from '../../kinds/sink.ts';
|
|
2
|
+
import type { SinkDescriptor } from '../../schemas/sink.ts';
|
|
3
|
+
import type { RuntimeLogEntry } from '../../schemas/entry.ts';
|
|
4
|
+
|
|
5
|
+
export interface DrainableSink extends SinkImplementation {
|
|
6
|
+
drain(): RuntimeLogEntry[];
|
|
7
|
+
clear(): void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function drainable(sink: SinkImplementation): sink is DrainableSink {
|
|
11
|
+
return typeof (sink as Partial<DrainableSink>).drain === 'function';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export default class BufferSink implements DrainableSink {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly descriptor: SinkDescriptor;
|
|
17
|
+
private entries: RuntimeLogEntry[] = [];
|
|
18
|
+
private maxEntries = 50000;
|
|
19
|
+
|
|
20
|
+
constructor(descriptor: SinkDescriptor, _context: SinkContext) {
|
|
21
|
+
this.id = descriptor.id;
|
|
22
|
+
this.descriptor = descriptor;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
emit(entry: RuntimeLogEntry): void {
|
|
26
|
+
this.entries.push(entry);
|
|
27
|
+
if (this.entries.length > this.maxEntries) {
|
|
28
|
+
this.entries = this.entries.slice(-this.maxEntries);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
drain(): RuntimeLogEntry[] {
|
|
33
|
+
const drained = this.entries;
|
|
34
|
+
this.entries = [];
|
|
35
|
+
return drained;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
clear(): void {
|
|
39
|
+
this.entries = [];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
async flush(): Promise<void> {
|
|
43
|
+
// Buffered in-memory only.
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async close(): Promise<void> {
|
|
47
|
+
this.clear();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Console Sink Descriptor
|
|
3
|
+
*
|
|
4
|
+
* Default sink that writes colorized log output to stderr.
|
|
5
|
+
* Universal - works on all hardware.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { SinkDescriptor } from '../../schemas/sink.ts';
|
|
9
|
+
|
|
10
|
+
export const consoleSinkDescriptor: SinkDescriptor = {
|
|
11
|
+
kind: 'logging/sink',
|
|
12
|
+
id: 'console',
|
|
13
|
+
name: 'Console Sink',
|
|
14
|
+
description: 'Writes colorized log entries to stderr',
|
|
15
|
+
tags: ['default', 'development'],
|
|
16
|
+
async: false,
|
|
17
|
+
formats: ['pretty', 'jsonl', 'raw']
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default consoleSinkDescriptor;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Console Sink Implementation (Browser)
|
|
3
|
+
*
|
|
4
|
+
* Uses native console methods for browser environments.
|
|
5
|
+
* Minimal bundle impact - no color library dependencies.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { SinkImplementation, SinkContext } from '../../kinds/sink.ts';
|
|
9
|
+
import type { SinkDescriptor } from '../../schemas/sink.ts';
|
|
10
|
+
import type { RuntimeLogEntry, LogLevel } from '../../schemas/entry.ts';
|
|
11
|
+
|
|
12
|
+
/** Console methods by level */
|
|
13
|
+
const CONSOLE_METHODS: Record<LogLevel, typeof console.log> = {
|
|
14
|
+
debug: console.debug,
|
|
15
|
+
info: console.info,
|
|
16
|
+
warn: console.warn,
|
|
17
|
+
error: console.error
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/** CSS styles for levels (browser devtools) */
|
|
21
|
+
const LEVEL_STYLES: Record<LogLevel, string> = {
|
|
22
|
+
debug: 'color: gray',
|
|
23
|
+
info: 'color: blue',
|
|
24
|
+
warn: 'color: orange',
|
|
25
|
+
error: 'color: red; font-weight: bold'
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Console sink - writes to browser console.
|
|
30
|
+
*/
|
|
31
|
+
export default class BrowserConsoleSink implements SinkImplementation {
|
|
32
|
+
readonly id: string;
|
|
33
|
+
readonly descriptor: SinkDescriptor;
|
|
34
|
+
|
|
35
|
+
constructor(descriptor: SinkDescriptor, _context: SinkContext) {
|
|
36
|
+
this.id = descriptor.id;
|
|
37
|
+
this.descriptor = descriptor;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
emit(entry: RuntimeLogEntry): void {
|
|
41
|
+
const { level, namespace, message, context } = entry;
|
|
42
|
+
const consoleFn = CONSOLE_METHODS[level];
|
|
43
|
+
const style = LEVEL_STYLES[level];
|
|
44
|
+
|
|
45
|
+
// Extract non-standard context
|
|
46
|
+
const payload = { ...context };
|
|
47
|
+
delete payload.timestamp;
|
|
48
|
+
delete payload.level;
|
|
49
|
+
delete payload.namespace;
|
|
50
|
+
delete payload.runtime;
|
|
51
|
+
|
|
52
|
+
const prefix = `[${namespace}]`;
|
|
53
|
+
|
|
54
|
+
if (Object.keys(payload).length > 0) {
|
|
55
|
+
// Use styled console output
|
|
56
|
+
consoleFn(`%c${level.toUpperCase()} ${prefix}`, style, message, payload);
|
|
57
|
+
} else {
|
|
58
|
+
consoleFn(`%c${level.toUpperCase()} ${prefix}`, style, message);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async flush(): Promise<void> {
|
|
63
|
+
// Console is synchronous
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async close(): Promise<void> {
|
|
67
|
+
// Nothing to close
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Console Sink Implementation (CLI)
|
|
3
|
+
*
|
|
4
|
+
* Uses ansis for colorized output written to stderr.
|
|
5
|
+
* Stdout is never used - it may be reserved for protocols (MCP stdio).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { SinkImplementation, SinkContext } from '../../kinds/sink.ts';
|
|
9
|
+
import type { SinkDescriptor } from '../../schemas/sink.ts';
|
|
10
|
+
import type { RuntimeLogEntry, LogLevel } from '../../schemas/entry.ts';
|
|
11
|
+
import ansis from 'ansis';
|
|
12
|
+
|
|
13
|
+
/** Level colors */
|
|
14
|
+
const LEVEL_COLORS: Record<LogLevel, (text: string) => string> = {
|
|
15
|
+
debug: (t) => ansis.gray(t),
|
|
16
|
+
info: (t) => ansis.blue(t),
|
|
17
|
+
warn: (t) => ansis.yellow(t),
|
|
18
|
+
error: (t) => ansis.red(t)
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Console sink - writes to stderr with colors.
|
|
23
|
+
*/
|
|
24
|
+
export default class ConsoleSink implements SinkImplementation {
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly descriptor: SinkDescriptor;
|
|
27
|
+
|
|
28
|
+
constructor(descriptor: SinkDescriptor, _context: SinkContext) {
|
|
29
|
+
this.id = descriptor.id;
|
|
30
|
+
this.descriptor = descriptor;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
emit(entry: RuntimeLogEntry): void {
|
|
34
|
+
const { level, namespace, message, context } = entry;
|
|
35
|
+
const rawLine = context.rawLine;
|
|
36
|
+
if (typeof rawLine === 'string') {
|
|
37
|
+
process.stderr.write(rawLine);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const colorFn = LEVEL_COLORS[level];
|
|
41
|
+
|
|
42
|
+
const prefix = ansis.cyan(`[${namespace}]`);
|
|
43
|
+
const levelStr = colorFn(level.toUpperCase().padEnd(5));
|
|
44
|
+
|
|
45
|
+
// Extract non-standard context
|
|
46
|
+
const contextKeys = Object.keys(context).filter(
|
|
47
|
+
(k) => !['timestamp', 'level', 'namespace', 'runtime'].includes(k)
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
let line: string;
|
|
51
|
+
if (contextKeys.length > 0) {
|
|
52
|
+
const contextObj: Record<string, unknown> = {};
|
|
53
|
+
for (const key of contextKeys) {
|
|
54
|
+
contextObj[key] = context[key];
|
|
55
|
+
}
|
|
56
|
+
line = `${levelStr} ${prefix} ${message} ${ansis.dim(JSON.stringify(contextObj))}\n`;
|
|
57
|
+
} else {
|
|
58
|
+
line = `${levelStr} ${prefix} ${message}\n`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
process.stderr.write(line);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async flush(): Promise<void> {
|
|
65
|
+
// Console is synchronous, nothing to flush
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async close(): Promise<void> {
|
|
69
|
+
// Nothing to close
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Sink Descriptor
|
|
3
|
+
*
|
|
4
|
+
* In-memory buffer for testing and debugging.
|
|
5
|
+
* Entries are queryable and clearable.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { SinkDescriptor } from '../../schemas/sink.ts';
|
|
9
|
+
|
|
10
|
+
export const memorySinkDescriptor: SinkDescriptor = {
|
|
11
|
+
kind: 'logging/sink',
|
|
12
|
+
id: 'memory',
|
|
13
|
+
name: 'Memory Sink',
|
|
14
|
+
description: 'In-memory buffer for testing and debugging',
|
|
15
|
+
tags: ['testing', 'debug'],
|
|
16
|
+
async: false,
|
|
17
|
+
formats: ['raw']
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default memorySinkDescriptor;
|