hotpath 0.2.0__tar.gz → 0.2.2__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 (136) hide show
  1. {hotpath-0.2.0 → hotpath-0.2.2}/.github/workflows/release.yml +0 -21
  2. {hotpath-0.2.0 → hotpath-0.2.2}/CHANGELOG.md +20 -0
  3. {hotpath-0.2.0 → hotpath-0.2.2}/PKG-INFO +1 -1
  4. {hotpath-0.2.0 → hotpath-0.2.2}/hotpath_py/__init__.py +1 -1
  5. {hotpath-0.2.0 → hotpath-0.2.2}/pyproject.toml +2 -2
  6. {hotpath-0.2.0 → hotpath-0.2.2}/src/interactive.cpp +33 -10
  7. {hotpath-0.2.0 → hotpath-0.2.2}/src/main.cpp +1 -1
  8. {hotpath-0.2.0 → hotpath-0.2.2}/.github/workflows/ci.yml +0 -0
  9. {hotpath-0.2.0 → hotpath-0.2.2}/.github/workflows/gpu-smoke.yml +0 -0
  10. {hotpath-0.2.0 → hotpath-0.2.2}/.gitignore +0 -0
  11. {hotpath-0.2.0 → hotpath-0.2.2}/.smoke-bench-a.json +0 -0
  12. {hotpath-0.2.0 → hotpath-0.2.2}/.smoke-bench-b.json +0 -0
  13. {hotpath-0.2.0 → hotpath-0.2.2}/CMakeLists.txt +0 -0
  14. {hotpath-0.2.0 → hotpath-0.2.2}/PLAN.MD +0 -0
  15. {hotpath-0.2.0 → hotpath-0.2.2}/README.md +0 -0
  16. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/fixtures/smoke_prefix_traffic.jsonl +0 -0
  17. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/fixtures/smoke_traffic.jsonl +0 -0
  18. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/fixtures/traffic.jsonl +0 -0
  19. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_aggregate.cpp +0 -0
  20. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_artifacts.cpp +0 -0
  21. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_attach.cpp +0 -0
  22. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_audit.cpp +0 -0
  23. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_batch_analyzer.cpp +0 -0
  24. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_bench.cpp +0 -0
  25. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_bench_json.cpp +0 -0
  26. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_cache_analyzer.cpp +0 -0
  27. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_categorizer.cpp +0 -0
  28. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_cli.cpp +0 -0
  29. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_clock_control.cpp +0 -0
  30. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_diff.cpp +0 -0
  31. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_disagg_model.cpp +0 -0
  32. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_doctor.cpp +0 -0
  33. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_export.cpp +0 -0
  34. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_interactive.cpp +0 -0
  35. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_log_parser.cpp +0 -0
  36. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_otlp_export.cpp +0 -0
  37. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_parser.cpp +0 -0
  38. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_phase_analyzer.cpp +0 -0
  39. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_prefix_analyzer.cpp +0 -0
  40. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_recommender.cpp +0 -0
  41. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_remote.cpp +0 -0
  42. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_report.cpp +0 -0
  43. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_request_trace.cpp +0 -0
  44. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_serve_report.cpp +0 -0
  45. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_server.cpp +0 -0
  46. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_sglang_metrics.cpp +0 -0
  47. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_stability.cpp +0 -0
  48. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_store.cpp +0 -0
  49. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_targets.cpp +0 -0
  50. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_traffic.cpp +0 -0
  51. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_traffic_replayer.cpp +0 -0
  52. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_validate.cpp +0 -0
  53. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_vllm_metrics.cpp +0 -0
  54. {hotpath-0.2.0 → hotpath-0.2.2}/cpp_tests/test_workload_classifier.cpp +0 -0
  55. {hotpath-0.2.0 → hotpath-0.2.2}/hotpath_py/bench_cuda.py +0 -0
  56. {hotpath-0.2.0 → hotpath-0.2.2}/hotpath_py/bench_cuda_kernels.py +0 -0
  57. {hotpath-0.2.0 → hotpath-0.2.2}/hotpath_py/cli.py +0 -0
  58. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/aggregate.h +0 -0
  59. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/artifacts.h +0 -0
  60. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/batch_analyzer.h +0 -0
  61. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/bench/kernels/rms_norm.h +0 -0
  62. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/bench/kernels/rotary_emb.h +0 -0
  63. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/bench/kernels/silu_mul.h +0 -0
  64. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/bench/registry.h +0 -0
  65. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/bench/runner.h +0 -0
  66. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/cache_analyzer.h +0 -0
  67. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/clock_control.h +0 -0
  68. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/diff.h +0 -0
  69. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/disagg_model.h +0 -0
  70. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/doctor.h +0 -0
  71. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/export.h +0 -0
  72. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/kv_config.h +0 -0
  73. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/log_parser.h +0 -0
  74. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/ops.h +0 -0
  75. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/otlp_export.h +0 -0
  76. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/phase_analyzer.h +0 -0
  77. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/prefix_analyzer.h +0 -0
  78. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/profiler/attach.h +0 -0
  79. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/profiler/categorizer.h +0 -0
  80. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/profiler/kernel_record.h +0 -0
  81. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/profiler/parser.h +0 -0
  82. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/profiler/runner.h +0 -0
  83. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/profiler/server.h +0 -0
  84. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/profiler/vllm_metrics.h +0 -0
  85. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/recommender.h +0 -0
  86. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/remote.h +0 -0
  87. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/report.h +0 -0
  88. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/request_trace.h +0 -0
  89. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/serve_profiler.h +0 -0
  90. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/sglang_metrics.h +0 -0
  91. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/stability.h +0 -0
  92. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/store.h +0 -0
  93. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/targets.h +0 -0
  94. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/traffic.h +0 -0
  95. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/traffic_replayer.h +0 -0
  96. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/validate.h +0 -0
  97. {hotpath-0.2.0 → hotpath-0.2.2}/include/hotpath/workload_classifier.h +0 -0
  98. {hotpath-0.2.0 → hotpath-0.2.2}/src/advisor/disagg_model.cpp +0 -0
  99. {hotpath-0.2.0 → hotpath-0.2.2}/src/advisor/kv_config.cpp +0 -0
  100. {hotpath-0.2.0 → hotpath-0.2.2}/src/advisor/recommender.cpp +0 -0
  101. {hotpath-0.2.0 → hotpath-0.2.2}/src/advisor/workload_classifier.cpp +0 -0
  102. {hotpath-0.2.0 → hotpath-0.2.2}/src/aggregate.cpp +0 -0
  103. {hotpath-0.2.0 → hotpath-0.2.2}/src/artifacts.cpp +0 -0
  104. {hotpath-0.2.0 → hotpath-0.2.2}/src/bench/kernels/rms_norm.cpp +0 -0
  105. {hotpath-0.2.0 → hotpath-0.2.2}/src/bench/kernels/rotary_emb.cpp +0 -0
  106. {hotpath-0.2.0 → hotpath-0.2.2}/src/bench/kernels/silu_mul.cpp +0 -0
  107. {hotpath-0.2.0 → hotpath-0.2.2}/src/bench/registry.cpp +0 -0
  108. {hotpath-0.2.0 → hotpath-0.2.2}/src/bench/runner.cpp +0 -0
  109. {hotpath-0.2.0 → hotpath-0.2.2}/src/clock_control.cpp +0 -0
  110. {hotpath-0.2.0 → hotpath-0.2.2}/src/diff.cpp +0 -0
  111. {hotpath-0.2.0 → hotpath-0.2.2}/src/doctor.cpp +0 -0
  112. {hotpath-0.2.0 → hotpath-0.2.2}/src/export/otlp_export.cpp +0 -0
  113. {hotpath-0.2.0 → hotpath-0.2.2}/src/export.cpp +0 -0
  114. {hotpath-0.2.0 → hotpath-0.2.2}/src/interactive.h +0 -0
  115. {hotpath-0.2.0 → hotpath-0.2.2}/src/ops.cpp +0 -0
  116. {hotpath-0.2.0 → hotpath-0.2.2}/src/profiler/attach.cpp +0 -0
  117. {hotpath-0.2.0 → hotpath-0.2.2}/src/profiler/categorizer.cpp +0 -0
  118. {hotpath-0.2.0 → hotpath-0.2.2}/src/profiler/parser.cpp +0 -0
  119. {hotpath-0.2.0 → hotpath-0.2.2}/src/profiler/runner.cpp +0 -0
  120. {hotpath-0.2.0 → hotpath-0.2.2}/src/profiler/server.cpp +0 -0
  121. {hotpath-0.2.0 → hotpath-0.2.2}/src/profiler/sglang_metrics.cpp +0 -0
  122. {hotpath-0.2.0 → hotpath-0.2.2}/src/profiler/vllm_metrics.cpp +0 -0
  123. {hotpath-0.2.0 → hotpath-0.2.2}/src/remote.cpp +0 -0
  124. {hotpath-0.2.0 → hotpath-0.2.2}/src/report.cpp +0 -0
  125. {hotpath-0.2.0 → hotpath-0.2.2}/src/serving/batch_analyzer.cpp +0 -0
  126. {hotpath-0.2.0 → hotpath-0.2.2}/src/serving/cache_analyzer.cpp +0 -0
  127. {hotpath-0.2.0 → hotpath-0.2.2}/src/serving/log_parser.cpp +0 -0
  128. {hotpath-0.2.0 → hotpath-0.2.2}/src/serving/phase_analyzer.cpp +0 -0
  129. {hotpath-0.2.0 → hotpath-0.2.2}/src/serving/prefix_analyzer.cpp +0 -0
  130. {hotpath-0.2.0 → hotpath-0.2.2}/src/serving/serve_profiler.cpp +0 -0
  131. {hotpath-0.2.0 → hotpath-0.2.2}/src/serving/traffic_replayer.cpp +0 -0
  132. {hotpath-0.2.0 → hotpath-0.2.2}/src/stability.cpp +0 -0
  133. {hotpath-0.2.0 → hotpath-0.2.2}/src/store.cpp +0 -0
  134. {hotpath-0.2.0 → hotpath-0.2.2}/src/targets.cpp +0 -0
  135. {hotpath-0.2.0 → hotpath-0.2.2}/src/traffic.cpp +0 -0
  136. {hotpath-0.2.0 → hotpath-0.2.2}/src/validate.cpp +0 -0
@@ -32,26 +32,10 @@ jobs:
32
32
  path: dist/*.tar.gz
33
33
  if-no-files-found: error
34
34
 
35
- build_linux_wheels:
36
- name: build linux wheels
37
- runs-on: ubuntu-latest
38
- steps:
39
- - uses: actions/checkout@v4
40
-
41
- - name: Build wheels
42
- uses: pypa/cibuildwheel@v3.1.4
43
-
44
- - uses: actions/upload-artifact@v4
45
- with:
46
- name: dist-wheels-linux
47
- path: wheelhouse/*.whl
48
- if-no-files-found: error
49
-
50
35
  publish_pypi:
51
36
  name: publish to PyPI
52
37
  needs:
53
38
  - build_sdist
54
- - build_linux_wheels
55
39
  if: github.event_name == 'release' && github.event.action == 'published'
56
40
  runs-on: ubuntu-latest
57
41
  environment: pypi
@@ -63,10 +47,5 @@ jobs:
63
47
  name: dist-sdist
64
48
  path: dist
65
49
 
66
- - uses: actions/download-artifact@v4
67
- with:
68
- name: dist-wheels-linux
69
- path: dist
70
-
71
50
  - name: Publish package distributions to PyPI
72
51
  uses: pypa/gh-action-pypi-publish@release/v1
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.2.2 - 2026-04-05
4
+
5
+ Release workflow safety rollback.
6
+
7
+ Highlights:
8
+
9
+ - Linux wheel publishing is temporarily disabled because the manylinux packaged binary still crashes during wheel smoke tests, even though source builds are healthy
10
+ - PyPI release flow now publishes the source distribution only, which keeps installs on the safe path that compiles against the target system rather than shipping a broken prebuilt ELF
11
+ - the wheel smoke command remains in `pyproject.toml` so future wheel work still fails fast until the packaging root cause is fixed
12
+
13
+ ## v0.2.1 - 2026-04-05
14
+
15
+ Packaging and interactive TUI hardening.
16
+
17
+ Highlights:
18
+
19
+ - release workflow now installs the built wheel artifacts on fresh Python 3.10, 3.11, and 3.12 runners and blocks PyPI publish unless `hotpath --help`, `hotpath`, and `hotpath version` all succeed from the installed entrypoint
20
+ - `cibuildwheel` now smoke-tests the installed `hotpath` CLI instead of only importing the Python package, which would have caught the broken packaged ELF before release
21
+ - interactive arrow-key menus now clip rendered lines to terminal width, avoiding wrapped redraw corruption in Ghostty and other narrow terminals
22
+
3
23
  ## v0.2.0 - 2026-04-05
4
24
 
5
25
  Serving analysis, interactive TUI, and numerical hardening.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: hotpath
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Profile vLLM inference under RL-style rollout workloads.
5
5
  Keywords: cuda,nsys,profiling,rl,vllm
6
6
  Classifier: Development Status :: 4 - Beta
@@ -1,5 +1,5 @@
1
1
  from .cli import main
2
2
 
3
- __version__ = "0.2.0"
3
+ __version__ = "0.2.2"
4
4
 
5
5
  __all__ = ["main", "__version__"]
@@ -6,7 +6,7 @@ build-backend = "scikit_build_core.build"
6
6
 
7
7
  [project]
8
8
  name = "hotpath"
9
- version = "0.2.0"
9
+ version = "0.2.2"
10
10
  description = "Profile vLLM inference under RL-style rollout workloads."
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.10"
@@ -77,7 +77,7 @@ wheel.packages = ["hotpath_py"]
77
77
  [tool.cibuildwheel]
78
78
  build = ["cp310-manylinux_x86_64", "cp311-manylinux_x86_64", "cp312-manylinux_x86_64"]
79
79
  skip = ["pp*"]
80
- test-command = "python -c \"import hotpath_py; print(hotpath_py.__version__)\""
80
+ test-command = "python -c \"import hotpath_py; print(hotpath_py.__version__)\" && hotpath --help && printf 'q\\n' | hotpath"
81
81
 
82
82
  [tool.cibuildwheel.linux]
83
83
  manylinux-x86_64-image = "manylinux_2_28"
@@ -73,6 +73,27 @@ const char* color_code(const char* code) {
73
73
  return use_color() ? code : "";
74
74
  }
75
75
 
76
+ int terminal_columns() {
77
+ struct winsize ws{};
78
+ if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) == 0 && ws.ws_col > 0) {
79
+ return ws.ws_col;
80
+ }
81
+ return 80;
82
+ }
83
+
84
+ std::string truncate_display_text(const std::string& text, int max_columns) {
85
+ if (max_columns <= 0) {
86
+ return "";
87
+ }
88
+ if (static_cast<int>(text.size()) <= max_columns) {
89
+ return text;
90
+ }
91
+ if (max_columns <= 3) {
92
+ return text.substr(0, static_cast<std::size_t>(max_columns));
93
+ }
94
+ return text.substr(0, static_cast<std::size_t>(max_columns - 3)) + "...";
95
+ }
96
+
76
97
  std::filesystem::path defaults_path() {
77
98
  const char* explicit_path = std::getenv("RLPROF_DEFAULTS_PATH");
78
99
  if (explicit_path != nullptr && std::string(explicit_path).size() > 0) {
@@ -297,6 +318,7 @@ std::optional<int> prompt_choice(
297
318
  struct winsize ws{};
298
319
  ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws);
299
320
  const int term_rows = (ws.ws_row > 6) ? ws.ws_row - 6 : 8;
321
+ const int term_cols = terminal_columns();
300
322
  const int n = static_cast<int>(options.size());
301
323
  const int max_vis = std::min(n, std::max(4, term_rows));
302
324
 
@@ -310,19 +332,21 @@ std::optional<int> prompt_choice(
310
332
  if (selected >= vp_start + max_vis) vp_start = selected - max_vis + 1;
311
333
 
312
334
  rendered_lines = 0;
335
+ const std::string header =
336
+ truncate_display_text(label + " (arrows, enter, q)", std::max(1, term_cols - 4));
313
337
  std::cout << "\r " << color_code(CYAN) << "? " << color_code(RESET)
314
- << color_code(BOLD) << label << color_code(RESET)
315
- << " " << color_code(DIM) << "(↑↓ · enter · q)"
316
- << color_code(RESET) << "\033[K\n";
338
+ << color_code(BOLD) << header << color_code(RESET) << "\033[K\n";
317
339
  ++rendered_lines;
318
340
 
319
341
  for (int i = vp_start; i < vp_start + max_vis; ++i) {
342
+ const std::string option =
343
+ truncate_display_text(options[static_cast<std::size_t>(i)], std::max(1, term_cols - 4));
320
344
  if (i == selected) {
321
345
  std::cout << "\r " << color_code(CYAN) << "> " << color_code(RESET)
322
- << options[static_cast<std::size_t>(i)] << "\033[K\n";
346
+ << option << "\033[K\n";
323
347
  } else {
324
348
  std::cout << "\r " << color_code(DIM)
325
- << options[static_cast<std::size_t>(i)]
349
+ << option
326
350
  << color_code(RESET) << "\033[K\n";
327
351
  }
328
352
  ++rendered_lines;
@@ -339,9 +363,8 @@ std::optional<int> prompt_choice(
339
363
  for (int i = 0; i < reserve; ++i) std::cout << '\n';
340
364
  // CUU (up N) + CR to reach column 0 — both universally supported VT100.
341
365
  std::cout << "\033[" << reserve << "A\r";
342
- // DEC save cursor (ESC 7): original VT100 spec, supported by every terminal.
343
- // We restore to this exact position before every redraw instead of counting lines.
344
- std::cout << "\0337";
366
+ // Save the top-of-menu cursor position so redraws can return here cleanly.
367
+ std::cout << "\033[s";
345
368
  }
346
369
  render();
347
370
 
@@ -373,7 +396,7 @@ std::optional<int> prompt_choice(
373
396
  }
374
397
 
375
398
  if (needs_redraw && use_ansi_control()) {
376
- std::cout << "\0338"; // DEC restore cursor to saved position (top of menu)
399
+ std::cout << "\033[u";
377
400
  render();
378
401
  }
379
402
  }
@@ -385,7 +408,7 @@ std::optional<int> prompt_choice(
385
408
 
386
409
  // Replace the menu with a single confirmation line.
387
410
  if (use_ansi_control()) {
388
- std::cout << "\0338\033[J"; // restore to saved position, clear to end of screen
411
+ std::cout << "\033[u\033[J";
389
412
  }
390
413
  if (result.has_value()) {
391
414
  std::cout << " " << color_code(CYAN) << "\xe2\x9c\x93 " << color_code(RESET)
@@ -3075,7 +3075,7 @@ int main(int argc, char** argv) {
3075
3075
  }
3076
3076
 
3077
3077
  if (command == "version") {
3078
- std::cout << "hotpath 0.2.0\n";
3078
+ std::cout << "hotpath 0.2.2\n";
3079
3079
  return 0;
3080
3080
  }
3081
3081
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes