@oneciel-ai/claude-any 0.1.66 → 0.1.67

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 CHANGED
@@ -56,7 +56,7 @@ arguments through unchanged.
56
56
 
57
57
  Credits: One Ciel LLC
58
58
 
59
- Current version: `0.1.66`
59
+ Current version: `0.1.67`
60
60
 
61
61
  ## Why This Exists
62
62
 
@@ -393,6 +393,14 @@ steps under that larger model's supervision.
393
393
 
394
394
  ## Changelog
395
395
 
396
+ ### 0.1.67
397
+
398
+ - **Fast prelaunch navigation**: arrow-key redraws no longer call the router
399
+ `/health` endpoint just to render the `mode:` label, avoiding per-keystroke
400
+ delays when the router is stopped or slow.
401
+ - **Lower-latency paste handling**: portable raw input prompts drain pasted
402
+ bursts and flush once per batch instead of once per character.
403
+
396
404
  ### 0.1.66
397
405
 
398
406
  - **TUI input fix for tmux/zsh**: portable menu prompts now handle visible text,
package/claude_any.py CHANGED
@@ -95,7 +95,7 @@ PROVIDER_LABELS = {
95
95
  "self-hosted-nim": "Self Hosted NIM",
96
96
  }
97
97
  APP_NAME = "Claude Any"
98
- VERSION = "0.1.66"
98
+ VERSION = "0.1.67"
99
99
  CREDITS = "Credits: One Ciel LLC"
100
100
 
101
101
  LOG_LEVELS = {"SILENT": 0, "ERROR": 1, "WARN": 2, "INFO": 3, "DEBUG": 4, "TRACE": 5}
@@ -7183,21 +7183,24 @@ def cmd_ollama_catalog(args: argparse.Namespace) -> None:
7183
7183
  print(f"Context windows: {context_count}/{len(models)}")
7184
7184
 
7185
7185
 
7186
+ def provider_mode_label(provider: str, pcfg: dict[str, Any]) -> str:
7187
+ if native_anthropic_enabled(provider):
7188
+ return "anthropic-native"
7189
+ if ollama_native_compat_enabled(provider, pcfg):
7190
+ return "ollama-native"
7191
+ if vllm_native_compat_enabled(provider, pcfg):
7192
+ return "vllm-native"
7193
+ if nim_native_compat_enabled(provider, pcfg):
7194
+ return "nim-native"
7195
+ if nvidia_hosted_native_compat_enabled(provider, pcfg):
7196
+ return "nvidia-native"
7197
+ return "claude-any-router"
7198
+
7199
+
7186
7200
  def status_lines() -> list[str]:
7187
7201
  cfg = load_config()
7188
7202
  provider, pcfg = get_current_provider(cfg)
7189
- if native_anthropic_enabled(provider):
7190
- mode = "anthropic-native"
7191
- elif ollama_native_compat_enabled(provider, pcfg):
7192
- mode = "ollama-native"
7193
- elif vllm_native_compat_enabled(provider, pcfg):
7194
- mode = "vllm-native"
7195
- elif nim_native_compat_enabled(provider, pcfg):
7196
- mode = "nim-native"
7197
- elif nvidia_hosted_native_compat_enabled(provider, pcfg):
7198
- mode = "nvidia-native"
7199
- else:
7200
- mode = "claude-any-router"
7203
+ mode = provider_mode_label(provider, pcfg)
7201
7204
  direct_native = mode != "claude-any-router"
7202
7205
  return [
7203
7206
  f"provider: {provider}",
@@ -10501,7 +10504,7 @@ def render_prelaunch_screen(
10501
10504
  padding = " " * max(0, render_width - cell_width(visible))
10502
10505
  screen.append(rendered_text + padding)
10503
10506
 
10504
- mode_line = next((line for line in status_lines() if line.startswith("mode:")), "mode: claude-any-router")
10507
+ mode_line = f"mode: {provider_mode_label(provider, pcfg)}"
10505
10508
  title_text = f"Claude Any v{VERSION}"
10506
10509
  add_rendered(title_text, animated_ansi_text(title_text))
10507
10510
  add(CREDITS, "2")
@@ -10594,6 +10597,7 @@ def _prompt_menu_value_raw(label: str, default: str = "", secret: bool = False)
10594
10597
  return None
10595
10598
  try:
10596
10599
  import codecs
10600
+ import select
10597
10601
  import termios
10598
10602
  except Exception:
10599
10603
  return None
@@ -10614,44 +10618,61 @@ def _prompt_menu_value_raw(label: str, default: str = "", secret: bool = False)
10614
10618
  sys.stdout.write("\n" + ansi(label, "1;38;5;208"))
10615
10619
  sys.stdout.flush()
10616
10620
  while True:
10617
- b = os.read(fd, 1)
10618
- if not b:
10619
- continue
10620
- if b in (b"\r", b"\n"):
10621
- sys.stdout.write("\n")
10622
- sys.stdout.flush()
10623
- break
10624
- if b in (b"\x03",):
10625
- raise KeyboardInterrupt
10626
- if b in (b"\x04", b"\x1b"):
10627
- sys.stdout.write("\n")
10628
- sys.stdout.flush()
10629
- return default
10630
- if b in (b"\x7f", b"\x08"):
10631
- if chars:
10632
- chars.pop()
10633
- if not secret:
10634
- sys.stdout.write("\b \b")
10635
- sys.stdout.flush()
10621
+ first = os.read(fd, 1)
10622
+ if not first:
10636
10623
  continue
10637
- if b == b"\x15":
10638
- if chars and not secret:
10639
- sys.stdout.write("\b \b" * len(chars))
10624
+ data = bytearray(first)
10625
+ try:
10626
+ while select.select([fd], [], [], 0)[0]:
10627
+ more = os.read(fd, 4096)
10628
+ if not more:
10629
+ break
10630
+ data.extend(more)
10631
+ except Exception:
10632
+ pass
10633
+
10634
+ display: list[str] = []
10635
+ done = False
10636
+ for byte in data:
10637
+ b = bytes((byte,))
10638
+ if b in (b"\r", b"\n"):
10639
+ display.append("\n")
10640
+ done = True
10641
+ break
10642
+ if b in (b"\x03",):
10643
+ raise KeyboardInterrupt
10644
+ if b in (b"\x04", b"\x1b"):
10645
+ display.append("\n")
10646
+ sys.stdout.write("".join(display))
10640
10647
  sys.stdout.flush()
10641
- chars.clear()
10642
- continue
10643
- if b < b" ":
10644
- continue
10645
- text = decoder.decode(b)
10646
- if not text:
10647
- continue
10648
- for ch in text:
10649
- if ch in ("\ufffd", "\r", "\n"):
10648
+ return default
10649
+ if b in (b"\x7f", b"\x08"):
10650
+ if chars:
10651
+ chars.pop()
10652
+ if not secret:
10653
+ display.append("\b \b")
10650
10654
  continue
10651
- chars.append(ch)
10652
- if not secret:
10653
- sys.stdout.write(ch)
10654
- sys.stdout.flush()
10655
+ if b == b"\x15":
10656
+ if chars and not secret:
10657
+ display.append("\b \b" * len(chars))
10658
+ chars.clear()
10659
+ continue
10660
+ if byte < 0x20:
10661
+ continue
10662
+ text = decoder.decode(b)
10663
+ if not text:
10664
+ continue
10665
+ for ch in text:
10666
+ if ch in ("\ufffd", "\r", "\n"):
10667
+ continue
10668
+ chars.append(ch)
10669
+ if not secret:
10670
+ display.append(ch)
10671
+ if display:
10672
+ sys.stdout.write("".join(display))
10673
+ sys.stdout.flush()
10674
+ if done:
10675
+ break
10655
10676
  return "".join(chars).strip() or default
10656
10677
  finally:
10657
10678
  try:
package/docs/README.ja.md CHANGED
@@ -55,7 +55,7 @@ vLLM、NVIDIA hosted、self-hosted NIM を選択し、通常の Claude Code 引
55
55
 
56
56
  Credits: One Ciel LLC
57
57
 
58
- 現在のバージョン: `0.1.66`
58
+ 現在のバージョン: `0.1.67`
59
59
 
60
60
  ## 作られた理由
61
61
 
@@ -359,6 +359,14 @@ Windows/Linux 管理、クリーンアップスクリプト、定期的なセキ
359
359
 
360
360
  ## 変更履歴
361
361
 
362
+ ### 0.1.67
363
+
364
+ - **高速な prelaunch ナビゲーション**: arrow-key redraw は `mode:` ラベルを
365
+ 描画するためだけに router `/health` endpoint を呼ばなくなり、router が停止中
366
+ または遅い場合でもキー入力ごとの遅延を避けます。
367
+ - **貼り付け遅延を低減**: portable raw 入力プロンプトは貼り付け burst をまとめて
368
+ drain し、文字ごとではなく batch ごとに flush します。
369
+
362
370
  ### 0.1.66
363
371
 
364
372
  - **tmux/zsh の TUI 入力修正**: portable menu の入力プロンプトは、壊れやすい
package/docs/README.ko.md CHANGED
@@ -55,7 +55,7 @@ NVIDIA hosted, self-hosted NIM을 선택하고, Claude Code의 일반 인자는
55
55
 
56
56
  Credits: One Ciel LLC
57
57
 
58
- 현재 버전: `0.1.66`
58
+ 현재 버전: `0.1.67`
59
59
 
60
60
  ## 왜 만들었나
61
61
 
@@ -359,6 +359,14 @@ Windows 이벤트 로그 리뷰, 바이러스/랜섬웨어 침입 시도 정리,
359
359
 
360
360
  ## 변경 이력
361
361
 
362
+ ### 0.1.67
363
+
364
+ - **빠른 prelaunch 탐색**: 방향키 redraw가 `mode:` 라벨 하나를 그리기 위해
365
+ router `/health` endpoint를 호출하지 않으므로, router가 꺼져 있거나 느릴 때도
366
+ 키 입력마다 지연되지 않습니다.
367
+ - **붙여넣기 지연 완화**: portable raw 입력 프롬프트가 붙여넣기 burst를 한 번에
368
+ drain하고 batch 단위로 flush합니다.
369
+
362
370
  ### 0.1.66
363
371
 
364
372
  - **tmux/zsh TUI 입력 수정**: portable menu 입력 프롬프트가 이제 fragile한
package/docs/README.zh.md CHANGED
@@ -55,7 +55,7 @@ NIM,并把普通 Claude Code 参数原样传递。
55
55
 
56
56
  Credits: One Ciel LLC
57
57
 
58
- 当前版本: `0.1.66`
58
+ 当前版本: `0.1.67`
59
59
 
60
60
  ## 为什么存在
61
61
 
@@ -345,6 +345,13 @@ Hermes 格式模型或部分较旧的 Qwen tool template。
345
345
 
346
346
  ## 更新日志
347
347
 
348
+ ### 0.1.67
349
+
350
+ - **更快的 prelaunch 导航**:方向键 redraw 不再为了渲染 `mode:` 标签而调用
351
+ router `/health` endpoint,因此 router 停止或响应较慢时也不会每次按键都卡顿。
352
+ - **降低粘贴延迟**:portable raw 输入提示会一次性 drain 粘贴 burst,并按 batch
353
+ flush,而不是每个字符 flush 一次。
354
+
348
355
  ### 0.1.66
349
356
 
350
357
  - **修复 tmux/zsh 下的 TUI 输入**:portable menu 的输入提示现在不再依赖脆弱的
package/docs/manual.md CHANGED
@@ -10,7 +10,7 @@ Code starts, while passing normal Claude Code arguments through unchanged.
10
10
 
11
11
  Credits: One Ciel LLC
12
12
 
13
- Current version: `0.1.66`
13
+ Current version: `0.1.67`
14
14
 
15
15
  ## Install
16
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneciel-ai/claude-any",
3
- "version": "0.1.66",
3
+ "version": "0.1.67",
4
4
  "description": "Claude Code provider selector for Anthropic, Ollama, Ollama Cloud, vLLM, NVIDIA hosted, and self-hosted NIM.",
5
5
  "license": "MIT",
6
6
  "author": "One Ciel LLC",