@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 +9 -1
- package/claude_any.py +70 -49
- package/docs/README.ja.md +9 -1
- package/docs/README.ko.md +9 -1
- package/docs/README.zh.md +8 -1
- package/docs/manual.md +1 -1
- package/package.json +1 -1
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.
|
|
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.
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
10618
|
-
if not
|
|
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
|
-
|
|
10638
|
-
|
|
10639
|
-
|
|
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
|
-
|
|
10642
|
-
|
|
10643
|
-
|
|
10644
|
-
|
|
10645
|
-
|
|
10646
|
-
|
|
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
|
-
|
|
10652
|
-
|
|
10653
|
-
|
|
10654
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
package/package.json
CHANGED