runtime-narrative 1.2.0__tar.gz → 1.2.1__tar.gz

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 (78) hide show
  1. {runtime_narrative-1.2.0/runtime_narrative.egg-info → runtime_narrative-1.2.1}/PKG-INFO +2 -1
  2. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/README.md +1 -0
  3. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/pyproject.toml +1 -1
  4. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/__init__.py +1 -1
  5. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/renderer/console.py +6 -1
  6. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1/runtime_narrative.egg-info}/PKG-INFO +2 -1
  7. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/LICENSE +0 -0
  8. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/analyzers/__init__.py +0 -0
  9. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/analyzers/anthropic.py +0 -0
  10. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/analyzers/base.py +0 -0
  11. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/analyzers/deduplication.py +0 -0
  12. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/analyzers/ollama.py +0 -0
  13. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/celery.py +0 -0
  14. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/cli.py +0 -0
  15. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/context.py +0 -0
  16. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/decorators.py +0 -0
  17. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/diagnostics.py +0 -0
  18. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/events.py +0 -0
  19. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/failure.py +0 -0
  20. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/grpc_interceptor.py +0 -0
  21. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/instrumentation.py +0 -0
  22. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/logging_bridge.py +0 -0
  23. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/middleware.py +0 -0
  24. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/middleware_django.py +0 -0
  25. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/renderer/__init__.py +0 -0
  26. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/renderer/alert_renderer.py +0 -0
  27. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/renderer/filter_renderer.py +0 -0
  28. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/renderer/html_renderer.py +0 -0
  29. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/renderer/json_renderer.py +0 -0
  30. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/renderer/otel_log_renderer.py +0 -0
  31. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/renderer/otel_metrics_renderer.py +0 -0
  32. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/renderer/otel_renderer.py +0 -0
  33. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/renderer/persistence_renderer.py +0 -0
  34. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/renderer/prometheus_renderer.py +0 -0
  35. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/stage.py +0 -0
  36. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/story.py +0 -0
  37. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/task_group.py +0 -0
  38. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative/testing.py +0 -0
  39. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative.egg-info/SOURCES.txt +0 -0
  40. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative.egg-info/dependency_links.txt +0 -0
  41. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative.egg-info/entry_points.txt +0 -0
  42. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative.egg-info/requires.txt +0 -0
  43. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/runtime_narrative.egg-info/top_level.txt +0 -0
  44. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/setup.cfg +0 -0
  45. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_alert_renderer.py +0 -0
  46. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_analyzers.py +0 -0
  47. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_anthropic_analyzer.py +0 -0
  48. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_async_renderer.py +0 -0
  49. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_celery.py +0 -0
  50. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_console_renderer.py +0 -0
  51. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_decorators.py +0 -0
  52. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_deduplication.py +0 -0
  53. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_diagnostics.py +0 -0
  54. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_dry_run.py +0 -0
  55. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_failure.py +0 -0
  56. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_filter_renderer.py +0 -0
  57. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_grpc_interceptor.py +0 -0
  58. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_html_renderer.py +0 -0
  59. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_instrumentation.py +0 -0
  60. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_instrumentation_phase2.py +0 -0
  61. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_issues.py +0 -0
  62. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_json_renderer.py +0 -0
  63. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_logging_bridge.py +0 -0
  64. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_middleware.py +0 -0
  65. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_middleware_django.py +0 -0
  66. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_middleware_propagation.py +0 -0
  67. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_otel_log_renderer.py +0 -0
  68. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_otel_metrics_renderer.py +0 -0
  69. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_otel_renderer.py +0 -0
  70. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_persistence_renderer.py +0 -0
  71. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_prometheus_renderer.py +0 -0
  72. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_redaction_extended.py +0 -0
  73. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_stage.py +0 -0
  74. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_stage_metadata.py +0 -0
  75. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_story.py +0 -0
  76. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_structured_analysis.py +0 -0
  77. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_task_group.py +0 -0
  78. {runtime_narrative-1.2.0 → runtime_narrative-1.2.1}/tests/test_testing_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runtime-narrative
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: Model execution as human-readable stories with lean/rich failure diagnostics and optional LLM analysis
5
5
  Author-email: Shashank Raj <shashank.raj28@gmail.com>
6
6
  License-Expression: MIT
@@ -273,6 +273,7 @@ Every script under `examples/` is runnable as-is: `uv run python examples/<name>
273
273
  | `sqlite_persistence.py` | `SqliteStoryRenderer` + the `runtime-narrative` CLI |
274
274
  | `otel_tracing.py` | `OtelRenderer`, `OtelLogRenderer`, `OtelMetricsRenderer` |
275
275
  | `alert_routing.py` | `AlertRoutingRenderer` — async webhook fan-out |
276
+ | `colorful_errors_and_emojis.py` | `ConsoleRenderer`'s built-in color + `level_icons` emoji across log levels and a failure |
276
277
 
277
278
  **Framework integrations and concurrency**
278
279
  | Script | Demonstrates |
@@ -214,6 +214,7 @@ Every script under `examples/` is runnable as-is: `uv run python examples/<name>
214
214
  | `sqlite_persistence.py` | `SqliteStoryRenderer` + the `runtime-narrative` CLI |
215
215
  | `otel_tracing.py` | `OtelRenderer`, `OtelLogRenderer`, `OtelMetricsRenderer` |
216
216
  | `alert_routing.py` | `AlertRoutingRenderer` — async webhook fan-out |
217
+ | `colorful_errors_and_emojis.py` | `ConsoleRenderer`'s built-in color + `level_icons` emoji across log levels and a failure |
217
218
 
218
219
  **Framework integrations and concurrency**
219
220
  | Script | Demonstrates |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "runtime-narrative"
7
- version = "1.2.0"
7
+ version = "1.2.1"
8
8
  description = "Model execution as human-readable stories with lean/rich failure diagnostics and optional LLM analysis"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,4 +1,4 @@
1
- __version__ = "1.2.0"
1
+ __version__ = "1.2.1"
2
2
 
3
3
  from .analyzers import FailureAnalyzer, LLMFailureAnalyzer, OllamaFailureAnalyzer, DeduplicatingAnalyzer
4
4
  from .context import has_active_story
@@ -131,7 +131,12 @@ class ConsoleRenderer:
131
131
  @staticmethod
132
132
  def _secho(text: str, *, fg=None, bold: bool = False, nl: bool = True) -> None:
133
133
  if typer is None:
134
- print(text, end="\n" if nl else "")
134
+ try:
135
+ print(text, end="\n" if nl else "")
136
+ except UnicodeEncodeError:
137
+ enc = getattr(sys.stdout, "encoding", "utf-8") or "utf-8"
138
+ safe = text.encode(enc, errors="replace").decode(enc, errors="replace")
139
+ print(safe, end="\n" if nl else "")
135
140
  return
136
141
  try:
137
142
  typer.secho(text, fg=fg, bold=bold, nl=nl)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runtime-narrative
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: Model execution as human-readable stories with lean/rich failure diagnostics and optional LLM analysis
5
5
  Author-email: Shashank Raj <shashank.raj28@gmail.com>
6
6
  License-Expression: MIT
@@ -273,6 +273,7 @@ Every script under `examples/` is runnable as-is: `uv run python examples/<name>
273
273
  | `sqlite_persistence.py` | `SqliteStoryRenderer` + the `runtime-narrative` CLI |
274
274
  | `otel_tracing.py` | `OtelRenderer`, `OtelLogRenderer`, `OtelMetricsRenderer` |
275
275
  | `alert_routing.py` | `AlertRoutingRenderer` — async webhook fan-out |
276
+ | `colorful_errors_and_emojis.py` | `ConsoleRenderer`'s built-in color + `level_icons` emoji across log levels and a failure |
276
277
 
277
278
  **Framework integrations and concurrency**
278
279
  | Script | Demonstrates |