abstractcode 0.3.1__tar.gz → 0.3.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 (58) hide show
  1. {abstractcode-0.3.1 → abstractcode-0.3.2}/PKG-INFO +1 -1
  2. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/cli.py +70 -2
  3. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode.egg-info/PKG-INFO +1 -1
  4. {abstractcode-0.3.1 → abstractcode-0.3.2}/pyproject.toml +1 -1
  5. {abstractcode-0.3.1 → abstractcode-0.3.2}/LICENSE +0 -0
  6. {abstractcode-0.3.1 → abstractcode-0.3.2}/README.md +0 -0
  7. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/__init__.py +0 -0
  8. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/file_mentions.py +0 -0
  9. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/flow_cli.py +0 -0
  10. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/fullscreen_ui.py +0 -0
  11. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/gateway_cli.py +0 -0
  12. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/input_handler.py +0 -0
  13. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/py.typed +0 -0
  14. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/react_shell.py +0 -0
  15. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/recall.py +0 -0
  16. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/remember.py +0 -0
  17. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/terminal_markdown.py +0 -0
  18. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/theme.py +0 -0
  19. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/workflow_agent.py +0 -0
  20. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode/workflow_cli.py +0 -0
  21. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode.egg-info/SOURCES.txt +0 -0
  22. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode.egg-info/dependency_links.txt +0 -0
  23. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode.egg-info/entry_points.txt +0 -0
  24. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode.egg-info/requires.txt +0 -0
  25. {abstractcode-0.3.1 → abstractcode-0.3.2}/abstractcode.egg-info/top_level.txt +0 -0
  26. {abstractcode-0.3.1 → abstractcode-0.3.2}/setup.cfg +0 -0
  27. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_answer_markdown_newline_unescape.py +0 -0
  28. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_async_run_controls_and_copy_button.py +0 -0
  29. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_at_file_mentions_accept_absolute_paths.py +0 -0
  30. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_cli_prompt_mode.py +0 -0
  31. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_compact_integration_llm.py +0 -0
  32. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_executor_command.py +0 -0
  33. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_executor_real_logic.py +0 -0
  34. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_file_mentions_parsing_and_search.py +0 -0
  35. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_file_tool_ui_no_cwd_injection.py +0 -0
  36. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_flow_cli.py +0 -0
  37. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_fullscreen_ui_cancel_hotkeys_and_dnd_attachments.py +0 -0
  38. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_fullscreen_ui_clickable_links.py +0 -0
  39. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_fullscreen_ui_spinner_shimmer.py +0 -0
  40. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_gateway_cli_defaults.py +0 -0
  41. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_gateway_cli_kg_command.py +0 -0
  42. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_history_copy_full_to_clipboard.py +0 -0
  43. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_link_extraction.py +0 -0
  44. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_log_provider_no_tool_defs.py +0 -0
  45. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_log_provider_tool_calls_anthropic.py +0 -0
  46. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_mcp_activity_spinner.py +0 -0
  47. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_provenance_recall.py +0 -0
  48. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_react_shell_artifact_store_wiring.py +0 -0
  49. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_react_shell_tool_approval_cancel_mode.py +0 -0
  50. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_recall_command.py +0 -0
  51. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_remember_command.py +0 -0
  52. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_remote_mcp_tool_execution.py +0 -0
  53. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_remote_mcp_tool_execution_stdio.py +0 -0
  54. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_repeat_guardrail_write_file_content.py +0 -0
  55. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_tools_examples_toggle.py +0 -0
  56. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_tools_include_skim_files.py +0 -0
  57. {abstractcode-0.3.1 → abstractcode-0.3.2}/tests/test_workflow_agent.py +0 -0
  58. {abstractcode-0.3.1 → abstractcode-0.3.2}/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.1
3
+ Version: 0.3.2
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
- from .react_shell import ReactShell
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.1
3
+ Version: 0.3.2
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,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "abstractcode"
7
- version = "0.3.1"
7
+ version = "0.3.2"
8
8
  description = "A clean terminal CLI for multi-agent agentic coding"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
File without changes
File without changes
File without changes