abstractcode 0.3.1__tar.gz → 0.3.3__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.
- {abstractcode-0.3.1 → abstractcode-0.3.3}/PKG-INFO +1 -1
- abstractcode-0.3.3/abstractcode/__main__.py +6 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/cli.py +70 -2
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode.egg-info/PKG-INFO +1 -1
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode.egg-info/SOURCES.txt +1 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/pyproject.toml +1 -1
- {abstractcode-0.3.1 → abstractcode-0.3.3}/LICENSE +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/README.md +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/__init__.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/file_mentions.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/flow_cli.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/fullscreen_ui.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/gateway_cli.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/input_handler.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/py.typed +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/react_shell.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/recall.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/remember.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/terminal_markdown.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/theme.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/workflow_agent.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode/workflow_cli.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode.egg-info/dependency_links.txt +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode.egg-info/entry_points.txt +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode.egg-info/requires.txt +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/abstractcode.egg-info/top_level.txt +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/setup.cfg +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_answer_markdown_newline_unescape.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_async_run_controls_and_copy_button.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_at_file_mentions_accept_absolute_paths.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_cli_prompt_mode.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_compact_integration_llm.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_executor_command.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_executor_real_logic.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_file_mentions_parsing_and_search.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_file_tool_ui_no_cwd_injection.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_flow_cli.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_fullscreen_ui_cancel_hotkeys_and_dnd_attachments.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_fullscreen_ui_clickable_links.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_fullscreen_ui_spinner_shimmer.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_gateway_cli_defaults.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_gateway_cli_kg_command.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_history_copy_full_to_clipboard.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_link_extraction.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_log_provider_no_tool_defs.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_log_provider_tool_calls_anthropic.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_mcp_activity_spinner.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_provenance_recall.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_react_shell_artifact_store_wiring.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_react_shell_tool_approval_cancel_mode.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_recall_command.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_remember_command.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_remote_mcp_tool_execution.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_remote_mcp_tool_execution_stdio.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_repeat_guardrail_write_file_content.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_tools_examples_toggle.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_tools_include_skim_files.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_workflow_agent.py +0 -0
- {abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_workflow_registry_install_and_run.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: abstractcode
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: A clean terminal CLI for multi-agent agentic coding
|
|
5
5
|
Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
|
|
6
6
|
Maintainer-email: Laurent-Philippe Albou <contact@abstractcore.ai>
|
|
@@ -4,9 +4,10 @@ import argparse
|
|
|
4
4
|
import os
|
|
5
5
|
import sys
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import Optional, Sequence
|
|
7
|
+
from typing import Optional, Sequence, TYPE_CHECKING
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
if TYPE_CHECKING: # pragma: no cover
|
|
10
|
+
from .react_shell import ReactShell
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
def _default_state_file() -> str:
|
|
@@ -42,6 +43,70 @@ def _default_max_tokens() -> Optional[int]:
|
|
|
42
43
|
return -1 # Auto (use model capabilities)
|
|
43
44
|
|
|
44
45
|
|
|
46
|
+
def _env_flag(name: str, *, default: bool = False) -> bool:
|
|
47
|
+
raw = os.getenv(name)
|
|
48
|
+
if raw is None:
|
|
49
|
+
return bool(default)
|
|
50
|
+
val = str(raw).strip().lower()
|
|
51
|
+
if val in {"1", "true", "yes", "y", "on"}:
|
|
52
|
+
return True
|
|
53
|
+
if val in {"0", "false", "no", "n", "off"}:
|
|
54
|
+
return False
|
|
55
|
+
return bool(default)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _configure_abstractcode_logging(argv_list: Sequence[str]) -> None:
|
|
59
|
+
"""Silence Python/Structured logs for the interactive TUI (default).
|
|
60
|
+
|
|
61
|
+
Rationale: log lines from providers (httpx, AbstractCore providers, etc) break the
|
|
62
|
+
terminal UI and are noisy. AbstractCode should surface errors in its own UI instead.
|
|
63
|
+
|
|
64
|
+
Override:
|
|
65
|
+
- Set `ABSTRACTCODE_SILENCE_LOGS=0` to keep standard logging.
|
|
66
|
+
"""
|
|
67
|
+
if any(arg in {"-h", "--help"} for arg in argv_list):
|
|
68
|
+
# Help should be fast and quiet.
|
|
69
|
+
try:
|
|
70
|
+
import logging
|
|
71
|
+
|
|
72
|
+
logging.disable(logging.CRITICAL)
|
|
73
|
+
except Exception:
|
|
74
|
+
pass
|
|
75
|
+
return
|
|
76
|
+
|
|
77
|
+
if not _env_flag("ABSTRACTCODE_SILENCE_LOGS", default=True):
|
|
78
|
+
return
|
|
79
|
+
|
|
80
|
+
try:
|
|
81
|
+
import logging
|
|
82
|
+
from abstractcore.utils import structured_logging
|
|
83
|
+
|
|
84
|
+
defaults = structured_logging._get_config_defaults()
|
|
85
|
+
log_dir = defaults.get("log_dir")
|
|
86
|
+
file_level = defaults.get("file_level") if log_dir else None
|
|
87
|
+
|
|
88
|
+
structured_logging.configure_logging(
|
|
89
|
+
console_level=None,
|
|
90
|
+
file_level=file_level,
|
|
91
|
+
log_dir=log_dir,
|
|
92
|
+
verbatim_enabled=bool(defaults.get("verbatim_enabled", True)),
|
|
93
|
+
console_json=bool(defaults.get("console_json", False)),
|
|
94
|
+
file_json=bool(defaults.get("file_json", True)),
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# Defensive: if libraries attach their own handlers, keep them quiet.
|
|
98
|
+
for name in ("httpx", "httpcore", "asyncio", "urllib3"):
|
|
99
|
+
logging.getLogger(name).setLevel(logging.WARNING)
|
|
100
|
+
except Exception:
|
|
101
|
+
# Best-effort: suppress any remaining logging noise.
|
|
102
|
+
try:
|
|
103
|
+
import logging
|
|
104
|
+
|
|
105
|
+
logging.disable(logging.CRITICAL)
|
|
106
|
+
except Exception:
|
|
107
|
+
pass
|
|
108
|
+
|
|
109
|
+
|
|
45
110
|
def build_agent_parser() -> argparse.ArgumentParser:
|
|
46
111
|
parser = argparse.ArgumentParser(
|
|
47
112
|
prog="abstractcode",
|
|
@@ -738,6 +803,7 @@ def build_gateway_parser() -> argparse.ArgumentParser:
|
|
|
738
803
|
|
|
739
804
|
def main(argv: Optional[Sequence[str]] = None) -> int:
|
|
740
805
|
argv_list = list(argv) if argv is not None else sys.argv[1:]
|
|
806
|
+
_configure_abstractcode_logging(argv_list)
|
|
741
807
|
|
|
742
808
|
if argv_list and argv_list[0] == "gateway":
|
|
743
809
|
parser = build_gateway_parser()
|
|
@@ -980,6 +1046,8 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
|
|
|
980
1046
|
if isinstance(gw_token, str) and gw_token.strip():
|
|
981
1047
|
os.environ["ABSTRACTCODE_GATEWAY_TOKEN"] = gw_token.strip()
|
|
982
1048
|
|
|
1049
|
+
from .react_shell import ReactShell
|
|
1050
|
+
|
|
983
1051
|
shell = ReactShell(
|
|
984
1052
|
agent=str(args.agent),
|
|
985
1053
|
provider=args.provider,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: abstractcode
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: A clean terminal CLI for multi-agent agentic coding
|
|
5
5
|
Author-email: Laurent-Philippe Albou <contact@abstractcore.ai>
|
|
6
6
|
Maintainer-email: Laurent-Philippe Albou <contact@abstractcore.ai>
|
|
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
|
{abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_at_file_mentions_accept_absolute_paths.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
|
{abstractcode-0.3.1 → abstractcode-0.3.3}/tests/test_react_shell_tool_approval_cancel_mode.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
|