langchain-agentx-cli 0.2.0__tar.gz → 0.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.
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/PKG-INFO +1 -1
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/__init__.py +1 -1
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/clipboard.py +82 -24
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli.egg-info/PKG-INFO +1 -1
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/pyproject.toml +1 -1
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/LICENSE +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/README.md +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/__main__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/app.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/bootstrap.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/bridge/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/bridge/session_bridge.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/cli.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/builtin/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/builtin/clear.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/builtin/compact.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/builtin/help.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/builtin/model.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/builtin/quit.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/builtin/theme.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/parser.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/providers/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/providers/sdk_commands.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/registry.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/completion/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/completion/base.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/completion/command_source.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/completion/history_source.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/config.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/history/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/history/store.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/keybindings/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/keybindings/bindings.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/llm_config.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/permissions/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/permissions/factory.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/permissions/policy.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/prompts/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/prompts/assembler.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/prompts/sections.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/prompts/system_prompt.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/screens/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/screens/repl.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/session_factory.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/session_options.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/state/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/state/task_store.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/colors.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/detection.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/manager.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/settings.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/system_theme.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/themes.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/watcher.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tools/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tools/registry.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/message_selection.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/cache.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/component_manager.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/config.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/consumer.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/dialog.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/inject.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/models.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/presenters/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/presenters/base.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/presenters/bash.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/presenters/fallback.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/presenters/file.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/permissions/queue.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/safe_screen.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/welcome.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/compact_progress.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/completion_overlay.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/input_area.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/message_events.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/message_list.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/messages/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/messages/assistant_message.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/messages/error_message.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/messages/rendering.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/messages/thinking_message.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/pending_permission.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/permission_inline.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/permission_keybindings.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/spinner.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/task_panel.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/agent/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/agent/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/ask_user_question/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/ask_user_question/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/base.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/bash/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/bash/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/batch_edit/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/batch_edit/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/edit/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/edit/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/glob/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/glob/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/grep/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/grep/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/helpers.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/read/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/read/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/skill/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/skill/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/user_message/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/user_message/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/webfetch/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/webfetch/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/websearch/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/websearch/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/write/__init__.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/write/widget.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli.egg-info/SOURCES.txt +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli.egg-info/dependency_links.txt +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli.egg-info/entry_points.txt +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli.egg-info/not-zip-safe +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli.egg-info/requires.txt +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli.egg-info/top_level.txt +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/setup.cfg +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/tests/test_app_interrupt.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/tests/test_repl_commands.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/tests/test_repl_submit_flow.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/tests/test_repl_ui.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/tests/test_smoke.py +0 -0
- {langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/tests/test_welcome.py +0 -0
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/clipboard.py
RENAMED
|
@@ -53,9 +53,11 @@ def _wrap_for_multiplexer(sequence: str) -> str:
|
|
|
53
53
|
def _write_osc52_to_tty(sequence: str) -> bool:
|
|
54
54
|
"""直接写入终端 fd,对齐 CC 写 stdout 的行为。
|
|
55
55
|
|
|
56
|
+
修复:改进 OSC 52 写入的可靠性和兼容性。
|
|
57
|
+
|
|
56
58
|
CC (Ink) 通过 process.stdout.write(raw) 发送 OSC 52。
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
优先使用 Python IO 层(sys.stdout/sys.stderr),因为它能正确
|
|
60
|
+
处理各种终端环境(包括管道/重定向)。
|
|
59
61
|
|
|
60
62
|
Args:
|
|
61
63
|
sequence: OSC 52 序列(已包装 tmux/screen)
|
|
@@ -63,32 +65,54 @@ def _write_osc52_to_tty(sequence: str) -> bool:
|
|
|
63
65
|
Returns:
|
|
64
66
|
是否成功写入
|
|
65
67
|
"""
|
|
66
|
-
|
|
68
|
+
# 方法 1:sys.stdout(对齐 CC 的 process.stdout.write)
|
|
69
|
+
# 某些环境下 os.write(1) 会失败但 sys.stdout.write 能工作
|
|
70
|
+
try:
|
|
71
|
+
sys.stdout.write(sequence)
|
|
72
|
+
sys.stdout.flush()
|
|
73
|
+
return True
|
|
74
|
+
except Exception:
|
|
75
|
+
pass
|
|
76
|
+
|
|
77
|
+
# 方法 2:sys.stderr(备选输出流)
|
|
78
|
+
try:
|
|
79
|
+
sys.stderr.write(sequence)
|
|
80
|
+
sys.stderr.flush()
|
|
81
|
+
return True
|
|
82
|
+
except Exception:
|
|
83
|
+
pass
|
|
67
84
|
|
|
68
|
-
#
|
|
85
|
+
# 方法 3:写 stdout fd(绕过 Python IO 层)
|
|
86
|
+
# 某些环境下这会失败,所以放在后面
|
|
87
|
+
encoded = sequence.encode("utf-8")
|
|
69
88
|
try:
|
|
70
89
|
os.write(1, encoded)
|
|
90
|
+
os.fsync(1)
|
|
71
91
|
return True
|
|
72
92
|
except OSError:
|
|
73
93
|
pass
|
|
74
94
|
|
|
75
|
-
#
|
|
95
|
+
# 方法 4:stderr fd
|
|
96
|
+
try:
|
|
97
|
+
os.write(2, encoded)
|
|
98
|
+
os.fsync(2)
|
|
99
|
+
return True
|
|
100
|
+
except OSError:
|
|
101
|
+
pass
|
|
102
|
+
|
|
103
|
+
# 方法 5:/dev/tty(直接与终端通信)
|
|
76
104
|
try:
|
|
77
105
|
fd = os.open("/dev/tty", os.O_WRONLY)
|
|
78
106
|
try:
|
|
79
107
|
os.write(fd, encoded)
|
|
108
|
+
os.fsync(fd)
|
|
80
109
|
return True
|
|
81
110
|
finally:
|
|
82
111
|
os.close(fd)
|
|
83
112
|
except OSError:
|
|
84
113
|
pass
|
|
85
114
|
|
|
86
|
-
|
|
87
|
-
try:
|
|
88
|
-
os.write(2, encoded)
|
|
89
|
-
return True
|
|
90
|
-
except OSError:
|
|
91
|
-
return False
|
|
115
|
+
return False
|
|
92
116
|
|
|
93
117
|
|
|
94
118
|
def _detect_linux_copy_command() -> Literal["wl-copy", "xclip", "xsel"] | None:
|
|
@@ -124,7 +148,12 @@ def _detect_linux_copy_command() -> Literal["wl-copy", "xclip", "xsel"] | None:
|
|
|
124
148
|
|
|
125
149
|
|
|
126
150
|
def _copy_native(text: str) -> bool:
|
|
127
|
-
"""使用系统工具写入剪贴板(对齐 CC copyNative)。
|
|
151
|
+
"""使用系统工具写入剪贴板(对齐 CC copyNative)。
|
|
152
|
+
|
|
153
|
+
修复 Linux 下 PRIMARY/CLIPBOARD 选择不匹配问题:
|
|
154
|
+
- 同时写入 PRIMARY 和 CLIPBOARD 选择
|
|
155
|
+
- 确保鼠标选中粘贴(中键)和 Ctrl+V 粘贴都能工作
|
|
156
|
+
"""
|
|
128
157
|
# SSH 环境下不使用 native copy(会写入远程剪贴板)
|
|
129
158
|
if os.environ.get("SSH_CONNECTION"):
|
|
130
159
|
return False
|
|
@@ -150,17 +179,35 @@ def _copy_native(text: str) -> bool:
|
|
|
150
179
|
)
|
|
151
180
|
return True
|
|
152
181
|
if cmd == "xclip":
|
|
182
|
+
# 修复:同时写入 PRIMARY 和 CLIPBOARD
|
|
183
|
+
# PRIMARY: 鼠标选中自动复制(中键粘贴)
|
|
184
|
+
# CLIPBOARD: Ctrl+C/V 粘贴
|
|
185
|
+
subprocess.run(
|
|
186
|
+
["xclip", "-selection", "primary"],
|
|
187
|
+
input=text.encode(),
|
|
188
|
+
timeout=2,
|
|
189
|
+
check=False,
|
|
190
|
+
)
|
|
153
191
|
subprocess.run(
|
|
154
192
|
["xclip", "-selection", "clipboard"],
|
|
155
193
|
input=text.encode(),
|
|
156
194
|
timeout=2,
|
|
195
|
+
check=False,
|
|
157
196
|
)
|
|
158
197
|
return True
|
|
159
198
|
if cmd == "xsel":
|
|
199
|
+
# 同时写入 PRIMARY 和 CLIPBOARD
|
|
200
|
+
subprocess.run(
|
|
201
|
+
["xsel", "--primary", "--input"],
|
|
202
|
+
input=text.encode(),
|
|
203
|
+
timeout=2,
|
|
204
|
+
check=False,
|
|
205
|
+
)
|
|
160
206
|
subprocess.run(
|
|
161
207
|
["xsel", "--clipboard", "--input"],
|
|
162
208
|
input=text.encode(),
|
|
163
209
|
timeout=2,
|
|
210
|
+
check=False,
|
|
164
211
|
)
|
|
165
212
|
return True
|
|
166
213
|
return False
|
|
@@ -186,7 +233,7 @@ def copy_text(text: str) -> tuple[bool, str | None]:
|
|
|
186
233
|
复制文本到剪贴板(对齐 CC setClipboard)。
|
|
187
234
|
|
|
188
235
|
策略:
|
|
189
|
-
1. Native copy (pbcopy/xclip/wl-copy/clip.exe) -
|
|
236
|
+
1. Native copy (pbcopy/xclip/wl-copy/clip.exe) - 同时写入 PRIMARY/CLIPBOARD
|
|
190
237
|
2. OSC 52 - 直接写入 stdout(对齐 CC,支持 OrcaTerm 等网页终端)
|
|
191
238
|
|
|
192
239
|
Args:
|
|
@@ -212,25 +259,36 @@ def copy_text(text: str) -> tuple[bool, str | None]:
|
|
|
212
259
|
if osc52_ok or native_ok:
|
|
213
260
|
return True, None
|
|
214
261
|
|
|
215
|
-
#
|
|
262
|
+
# 诊断失败原因(更详细的错误信息)
|
|
216
263
|
reasons = []
|
|
217
|
-
|
|
264
|
+
system = platform.system().lower()
|
|
265
|
+
|
|
266
|
+
if system == "linux":
|
|
267
|
+
# 检查 DISPLAY/WAYLAND_DISPLAY
|
|
268
|
+
has_display = bool(os.environ.get("DISPLAY") or os.environ.get("WAYLAND_DISPLAY"))
|
|
218
269
|
if os.environ.get("SSH_CONNECTION"):
|
|
219
|
-
reasons.append("SSH 环境无法使用 xclip/xsel")
|
|
220
|
-
elif not
|
|
221
|
-
reasons.append("无 DISPLAY/WAYLAND_DISPLAY
|
|
270
|
+
reasons.append("SSH 环境无法使用 xclip/xsel(需使用 OSC 52)")
|
|
271
|
+
elif not has_display:
|
|
272
|
+
reasons.append("无 DISPLAY/WAYLAND_DISPLAY(需安装 xclip: sudo yum install xclip)")
|
|
222
273
|
else:
|
|
223
274
|
cmd = _detect_linux_copy_command()
|
|
224
275
|
if cmd:
|
|
225
|
-
reasons.append(f"{cmd}
|
|
276
|
+
reasons.append(f"{cmd} 调用失败")
|
|
226
277
|
else:
|
|
227
|
-
reasons.append("未安装 xclip/wl-copy/xsel
|
|
278
|
+
reasons.append("未安装 xclip/wl-copy/xsel")
|
|
228
279
|
|
|
280
|
+
# 终端复用器诊断
|
|
229
281
|
if os.environ.get("TMUX"):
|
|
230
|
-
reasons.append("tmux
|
|
282
|
+
reasons.append("tmux: 需 set-clipboard on(允许 OSC 52)")
|
|
231
283
|
elif os.environ.get("STY"):
|
|
232
|
-
reasons.append("screen
|
|
233
|
-
|
|
234
|
-
|
|
284
|
+
reasons.append("screen: 需 altscreen on(允许 OSC 52)")
|
|
285
|
+
|
|
286
|
+
# 如果没有 terminal multiplexer,检查终端类型
|
|
287
|
+
if not (os.environ.get("TMUX") or os.environ.get("STY")):
|
|
288
|
+
term = os.environ.get("TERM", "")
|
|
289
|
+
if "xterm" in term or "screen" in term:
|
|
290
|
+
reasons.append("终端可能不支持 OSC 52")
|
|
291
|
+
else:
|
|
292
|
+
reasons.append("建议使用支持 OSC 52 的终端(如 iTerm2、WezTerm)")
|
|
235
293
|
|
|
236
294
|
return False, ",".join(reasons)
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "langchain-agentx-cli"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.1"
|
|
8
8
|
description = "Terminal CLI/TUI for AgentX: migrate Claude Code Ink UI, backed by langchain-agentx-python SDK."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/bridge/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/commands/registry.py
RENAMED
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/completion/base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/history/__init__.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/history/store.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/llm_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/permissions/policy.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/prompts/__init__.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/prompts/assembler.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/prompts/sections.py
RENAMED
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/screens/__init__.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/screens/repl.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/session_factory.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/session_options.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/state/__init__.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/state/task_store.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/__init__.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/colors.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/detection.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/manager.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/settings.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/system_theme.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/themes.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/theme/watcher.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tools/__init__.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tools/registry.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/__init__.py
RENAMED
|
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
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/tui/safe_screen.py
RENAMED
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/input_area.py
RENAMED
|
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
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/spinner.py
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/task_panel.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli/widgets/tools/base.py
RENAMED
|
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
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli.egg-info/not-zip-safe
RENAMED
|
File without changes
|
{langchain_agentx_cli-0.2.0 → langchain_agentx_cli-0.2.1}/langchain_agentx_cli.egg-info/requires.txt
RENAMED
|
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
|