regcode 0.8.0__tar.gz → 0.9.0__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 (46) hide show
  1. {regcode-0.8.0 → regcode-0.9.0}/.gitignore +3 -1
  2. {regcode-0.8.0 → regcode-0.9.0}/GOALS.md +11 -6
  3. {regcode-0.8.0 → regcode-0.9.0}/PKG-INFO +2 -1
  4. {regcode-0.8.0 → regcode-0.9.0}/pyproject.toml +2 -1
  5. {regcode-0.8.0 → regcode-0.9.0}/regcode/__init__.py +1 -1
  6. {regcode-0.8.0 → regcode-0.9.0}/regcode/main.py +412 -510
  7. {regcode-0.8.0 → regcode-0.9.0}/regcode/tui.py +68 -52
  8. {regcode-0.8.0 → regcode-0.9.0}/uv.lock +52 -1
  9. {regcode-0.8.0 → regcode-0.9.0}/.gitlab-ci.yml +0 -0
  10. {regcode-0.8.0 → regcode-0.9.0}/.python-version +0 -0
  11. {regcode-0.8.0 → regcode-0.9.0}/.qwen/settings.json +0 -0
  12. {regcode-0.8.0 → regcode-0.9.0}/AGENTS.md +0 -0
  13. {regcode-0.8.0 → regcode-0.9.0}/README.md +0 -0
  14. {regcode-0.8.0 → regcode-0.9.0}/config.yaml.template +0 -0
  15. {regcode-0.8.0 → regcode-0.9.0}/main.py +0 -0
  16. {regcode-0.8.0 → regcode-0.9.0}/regcode/cli.py +0 -0
  17. {regcode-0.8.0 → regcode-0.9.0}/regcode/clipboard.py +0 -0
  18. {regcode-0.8.0 → regcode-0.9.0}/regcode/config.py +0 -0
  19. {regcode-0.8.0 → regcode-0.9.0}/regcode/conversation_manager.py +0 -0
  20. {regcode-0.8.0 → regcode-0.9.0}/regcode/dependencies.py +0 -0
  21. {regcode-0.8.0 → regcode-0.9.0}/regcode/monty_sandbox.py +0 -0
  22. {regcode-0.8.0 → regcode-0.9.0}/regcode/paste.py +0 -0
  23. {regcode-0.8.0 → regcode-0.9.0}/regcode/permissions.py +0 -0
  24. {regcode-0.8.0 → regcode-0.9.0}/regcode/sandbox.py +0 -0
  25. {regcode-0.8.0 → regcode-0.9.0}/regcode/tools/__init__.py +0 -0
  26. {regcode-0.8.0 → regcode-0.9.0}/regcode/tools/base.py +0 -0
  27. {regcode-0.8.0 → regcode-0.9.0}/regcode/tools/builtins.py +0 -0
  28. {regcode-0.8.0 → regcode-0.9.0}/regcode/tools/registry.py +0 -0
  29. {regcode-0.8.0 → regcode-0.9.0}/regcode/tools/review_notes.py +0 -0
  30. {regcode-0.8.0 → regcode-0.9.0}/regcode/tools/web_crawl.py +0 -0
  31. {regcode-0.8.0 → regcode-0.9.0}/regcode/tools/web_search.py +0 -0
  32. {regcode-0.8.0 → regcode-0.9.0}/regcode/tracing.py +0 -0
  33. {regcode-0.8.0 → regcode-0.9.0}/tests/__init__.py +0 -0
  34. {regcode-0.8.0 → regcode-0.9.0}/tests/conftest.py +0 -0
  35. {regcode-0.8.0 → regcode-0.9.0}/tests/test_api.py +0 -0
  36. {regcode-0.8.0 → regcode-0.9.0}/tests/test_cli.py +0 -0
  37. {regcode-0.8.0 → regcode-0.9.0}/tests/test_clipboard.py +0 -0
  38. {regcode-0.8.0 → regcode-0.9.0}/tests/test_config.py +0 -0
  39. {regcode-0.8.0 → regcode-0.9.0}/tests/test_context_manager.py +0 -0
  40. {regcode-0.8.0 → regcode-0.9.0}/tests/test_dependencies.py +0 -0
  41. {regcode-0.8.0 → regcode-0.9.0}/tests/test_main.py +0 -0
  42. {regcode-0.8.0 → regcode-0.9.0}/tests/test_monty_sandbox.py +0 -0
  43. {regcode-0.8.0 → regcode-0.9.0}/tests/test_osv_cve.py +0 -0
  44. {regcode-0.8.0 → regcode-0.9.0}/tests/test_provider_extra.py +0 -0
  45. {regcode-0.8.0 → regcode-0.9.0}/tests/test_review_notes.py +0 -0
  46. {regcode-0.8.0 → regcode-0.9.0}/tests/test_web_search.py +0 -0
@@ -11,4 +11,6 @@ wheels/
11
11
  config.yaml
12
12
  review.py
13
13
  *.config.yaml
14
- .env
14
+ .env
15
+ debug*.*
16
+ llm_calls*.json
@@ -530,10 +530,15 @@ All phases complete. 50/50 tests passing. Lint clean.
530
530
 
531
531
  ## Completed (2026-06-30 — TUI rewrite)
532
532
 
533
- Complete rewrite of `tui.py` from scratch using Textual's `RichLog` widget instead of `TextArea`:
533
+ ## Completed (2026-07-05)
534
534
 
535
- 1. ✅ **`RichLog` instead of `TextArea`** — RichLog natively renders Rich markup (`[bold]`, `[dim]`, etc.) so no fragile Rich→ANSI conversion is needed. Users see properly colored, styled text. RichLog also supports scrollback selection/copy via terminal features.
536
- 2. ✅ **Clean Catppuccin Mocha dark theme** — uses the Catppuccin color palette (`#1e1e2e` background, `#cdd6f4` text, `#313244` surfaces, `#89b4fa` accents) for a modern, polished look.
537
- 3. ✅ **Proper three-zone layout** — status bar (version | model | cost | tokens), scrollable chat history, bottom input bar with progress indicator. No raw markup tags visible.
538
- 4. ✅ **Same backward-compatible API** — `ChatUI` facade, `ChatApp` class, `_ColorFormatter`, all callback methods (`handle_status`, `handle_result`, `handle_cost`, `print_text_chunk`, etc.) preserved exactly as before for CLI integration.
539
- 5. ✅ **All 164 tests pass**, lint clean.
535
+ 1. ✅ **Agent loop rewrite** — `Agent.chat()` completely rewritten following `debug.ipynb` pattern. Key changes:
536
+ - Extracted `_chat_loop()` for non-streaming mode, `_stream()` for streaming — both use shared `_execute_tool_calls()` helper (eliminating ~300 lines of duplicated tool execution code).
537
+ - Added `on_message` callback parameter: called after every LLM call with the assistant's text content BEFORE tool results are shown. This fixes the broken chain where "Let me search" was never displayed — the user now sees it in real-time as tools execute.
538
+ - Fixed `_stream()`: removed `full_text = ""` reset at each iteration (was wiping previously accumulated text). Now `full_text` accumulates across ALL iterations so the user sees the complete conversation.
539
+ - Fixed `_chat_loop` loop bound: was using `self.config.tool_budget` (default 20) instead of `max_tool_calls` (default 10), causing excessive LLM calls. Now properly bounded by `max_tool_calls`.
540
+ - When `finish_reason == "stop"` or text + no tools, loop breaks immediately — no more dead-end loop iterations.
541
+
542
+ 2. ✅ **TUI integration** — `_run_agent_sync()` and `_run_agent_multimodal()` now pass `on_message` callback to `agent.chat()`. The callback inserts each assistant text response directly into the chat area via `call_from_thread(self._insert_rich, text)`, so the user sees intermediate thinking ("Let me search the internet...") BEFORE tool execution markers appear. This makes the agent feel alive and responsive instead of silent during multi-tool chains.
543
+
544
+ 3. ✅ **All 193 tests pass, lint clean.**
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: regcode
3
- Version: 0.8.0
3
+ Version: 0.9.0
4
4
  Summary: Minimalistic coding agent with Python API and CLI
5
5
  Requires-Python: >=3.10
6
+ Requires-Dist: boto3>=1.43.40
6
7
  Requires-Dist: click>=8.0
7
8
  Requires-Dist: crawl4ai>=0.4.0
8
9
  Requires-Dist: litellm>=1.83.17
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "regcode"
3
- version = "0.8.0"
3
+ version = "0.9.0"
4
4
  description = "Minimalistic coding agent with Python API and CLI"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -17,6 +17,7 @@ dependencies = [
17
17
  "textual>=2.0.0",
18
18
  "pathspec>=1.1.1",
19
19
  "pyperclip>=1.9.0",
20
+ "boto3>=1.43.40",
20
21
  ]
21
22
 
22
23
  [project.scripts]
@@ -2,4 +2,4 @@ from regcode.config import Config
2
2
  from regcode.main import Agent, AgentStatus, ToolCall
3
3
 
4
4
  __all__ = ["Agent", "Config", "AgentStatus", "ToolCall"]
5
- __version__ = "0.8.0"
5
+ __version__ = "0.9.0"