agentic-cli 0.4.2__tar.gz → 0.4.4__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 (180) hide show
  1. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/.gitignore +2 -1
  2. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/CHANGELOG.md +52 -0
  3. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/CLAUDE.md +9 -11
  4. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/PKG-INFO +40 -28
  5. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/README.md +36 -26
  6. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/arxiv_demo.py +2 -34
  7. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/fileops_demo.py +81 -115
  8. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/__init__.py +1 -2
  9. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/agents.py +61 -75
  10. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/app.py +5 -6
  11. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/commands.py +1 -42
  12. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/settings.py +13 -12
  13. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/shell_demo.py +24 -32
  14. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/websearch_demo.py +19 -18
  15. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/pyproject.toml +4 -2
  16. agentic_cli-0.4.4/requirements.txt +4 -0
  17. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/__init__.py +4 -7
  18. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/__init__.py +1 -3
  19. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/app.py +74 -21
  20. agentic_cli-0.4.4/src/agentic_cli/cli/builtin_commands.py +351 -0
  21. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/commands.py +1 -162
  22. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/message_processor.py +144 -77
  23. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/settings_introspection.py +0 -26
  24. agentic_cli-0.4.4/src/agentic_cli/cli/usage_tracker.py +154 -0
  25. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/workflow_controller.py +31 -107
  26. agentic_cli-0.4.4/src/agentic_cli/config.py +338 -0
  27. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/constants.py +1 -1
  28. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/knowledge_base/__init__.py +2 -12
  29. agentic_cli-0.4.4/src/agentic_cli/knowledge_base/_mocks.py +144 -0
  30. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/knowledge_base/embeddings.py +0 -61
  31. agentic_cli-0.4.4/src/agentic_cli/knowledge_base/manager.py +690 -0
  32. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/knowledge_base/models.py +16 -4
  33. agentic_cli-0.4.4/src/agentic_cli/knowledge_base/sources.py +114 -0
  34. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/knowledge_base/vector_store.py +75 -141
  35. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/logging.py +0 -14
  36. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/persistence/__init__.py +0 -4
  37. agentic_cli-0.4.4/src/agentic_cli/persistence/_utils.py +81 -0
  38. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/persistence/artifacts.py +76 -42
  39. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/persistence/session.py +65 -196
  40. agentic_cli-0.4.4/src/agentic_cli/settings_mixins.py +120 -0
  41. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/settings_persistence.py +29 -12
  42. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/__init__.py +13 -16
  43. agentic_cli-0.4.4/src/agentic_cli/tools/arxiv_source.py +221 -0
  44. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/arxiv_tools.py +29 -58
  45. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/execution_tools.py +1 -1
  46. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/executor.py +6 -2
  47. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/glob_tool.py +1 -7
  48. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/grep_tool.py +15 -19
  49. agentic_cli-0.4.4/src/agentic_cli/tools/hitl_tools.py +233 -0
  50. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/interaction_tools.py +5 -3
  51. agentic_cli-0.4.4/src/agentic_cli/tools/knowledge_tools.py +676 -0
  52. agentic_cli-0.4.4/src/agentic_cli/tools/pdf_utils.py +55 -0
  53. agentic_cli-0.4.4/src/agentic_cli/tools/registry.py +236 -0
  54. agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/__init__.py +57 -0
  55. agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/backends/__init__.py +5 -0
  56. agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/backends/base.py +46 -0
  57. agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/backends/jupyter_local.py +238 -0
  58. agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/manager.py +174 -0
  59. agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/models.py +16 -0
  60. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/search.py +7 -7
  61. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/executor.py +2 -64
  62. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/task_tools.py +65 -20
  63. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/converter.py +6 -18
  64. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/fetcher.py +15 -0
  65. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/summarizer.py +1 -2
  66. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/validator.py +24 -0
  67. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch_tool.py +22 -5
  68. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/__init__.py +12 -6
  69. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/adk/event_processor.py +5 -100
  70. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/adk/manager.py +185 -50
  71. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/base_manager.py +298 -78
  72. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/context.py +4 -1
  73. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/events.py +52 -53
  74. agentic_cli-0.4.4/src/agentic_cli/workflow/factory.py +112 -0
  75. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/__init__.py +0 -2
  76. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/graph_builder.py +44 -1
  77. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/manager.py +143 -47
  78. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/state.py +0 -18
  79. agentic_cli-0.4.4/src/agentic_cli/workflow/models.py +508 -0
  80. agentic_cli-0.4.4/src/agentic_cli/workflow/retry.py +47 -0
  81. agentic_cli-0.4.4/src/agentic_cli/workflow/settings.py +448 -0
  82. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/task_progress.py +1 -1
  83. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/tool_summaries.py +55 -13
  84. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/conftest.py +2 -26
  85. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/test_adk_integration.py +20 -36
  86. agentic_cli-0.4.4/tests/test_arxiv_tools.py +380 -0
  87. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_commands.py +0 -158
  88. agentic_cli-0.4.4/tests/test_concurrent_stores.py +192 -0
  89. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_config.py +42 -38
  90. agentic_cli-0.4.4/tests/test_context_trimming.py +249 -0
  91. agentic_cli-0.4.4/tests/test_context_window.py +89 -0
  92. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_embeddings.py +2 -1
  93. agentic_cli-0.4.4/tests/test_grep_tool_cache.py +29 -0
  94. agentic_cli-0.4.4/tests/test_hitl.py +94 -0
  95. agentic_cli-0.4.4/tests/test_input_callback.py +26 -0
  96. agentic_cli-0.4.4/tests/test_kb_helpers.py +63 -0
  97. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_knowledge_base.py +214 -150
  98. agentic_cli-0.4.4/tests/test_knowledge_tools.py +1227 -0
  99. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_langgraph.py +2 -30
  100. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_memory.py +37 -47
  101. agentic_cli-0.4.4/tests/test_model_registry.py +500 -0
  102. agentic_cli-0.4.4/tests/test_persistence.py +249 -0
  103. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_planning.py +26 -25
  104. agentic_cli-0.4.4/tests/test_session_save_resume.py +490 -0
  105. agentic_cli-0.4.4/tests/test_settings_persistence.py +121 -0
  106. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_task_tools.py +168 -125
  107. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_tool_summaries.py +145 -44
  108. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_tools.py +221 -244
  109. agentic_cli-0.4.4/tests/test_update_setting.py +21 -0
  110. agentic_cli-0.4.4/tests/test_usage_tracker.py +229 -0
  111. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_vector_store.py +1 -1
  112. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_webfetch.py +104 -35
  113. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_workflow.py +0 -1
  114. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_workflow_controller.py +20 -19
  115. agentic_cli-0.4.4/tests/tools/test_sandbox.py +579 -0
  116. agentic_cli-0.4.2/examples/research_demo/README.md +0 -160
  117. agentic_cli-0.4.2/requirements.txt +0 -13
  118. agentic_cli-0.4.2/src/agentic_cli/cli/builtin_commands.py +0 -115
  119. agentic_cli-0.4.2/src/agentic_cli/cli/settings.py +0 -58
  120. agentic_cli-0.4.2/src/agentic_cli/config.py +0 -629
  121. agentic_cli-0.4.2/src/agentic_cli/hitl/__init__.py +0 -26
  122. agentic_cli-0.4.2/src/agentic_cli/hitl/approval.py +0 -84
  123. agentic_cli-0.4.2/src/agentic_cli/hitl/checkpoints.py +0 -70
  124. agentic_cli-0.4.2/src/agentic_cli/hitl/config.py +0 -47
  125. agentic_cli-0.4.2/src/agentic_cli/knowledge_base/manager.py +0 -423
  126. agentic_cli-0.4.2/src/agentic_cli/knowledge_base/sources.py +0 -403
  127. agentic_cli-0.4.2/src/agentic_cli/persistence/_utils.py +0 -23
  128. agentic_cli-0.4.2/src/agentic_cli/resolvers.py +0 -237
  129. agentic_cli-0.4.2/src/agentic_cli/tools/hitl_tools.py +0 -157
  130. agentic_cli-0.4.2/src/agentic_cli/tools/knowledge_tools.py +0 -110
  131. agentic_cli-0.4.2/src/agentic_cli/tools/registry.py +0 -401
  132. agentic_cli-0.4.2/src/agentic_cli/workflow/settings.py +0 -180
  133. agentic_cli-0.4.2/tests/test_hitl.py +0 -159
  134. agentic_cli-0.4.2/tests/test_persistence.py +0 -546
  135. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/LICENSE +0 -0
  136. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/environment.yml +0 -0
  137. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/hello_agent.py +0 -0
  138. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/hello_langgraph.py +0 -0
  139. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/memory_demo.py +0 -0
  140. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/planning_demo.py +0 -0
  141. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/__main__.py +0 -0
  142. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/webfetch_demo.py +0 -0
  143. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/requirements-dev.txt +0 -0
  144. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/settings_command.py +0 -0
  145. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/file_read.py +0 -0
  146. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/file_write.py +0 -0
  147. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/memory_tools.py +0 -0
  148. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/planning_tools.py +0 -0
  149. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/__init__.py +0 -0
  150. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/audit.py +0 -0
  151. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/classifier.py +0 -0
  152. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/config.py +0 -0
  153. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/models.py +0 -0
  154. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/path_analyzer.py +0 -0
  155. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/preprocessor.py +0 -0
  156. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/risk_assessor.py +0 -0
  157. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/sandbox.py +0 -0
  158. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/tokenizer.py +0 -0
  159. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/__init__.py +0 -0
  160. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/robots.py +0 -0
  161. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/adk/__init__.py +0 -0
  162. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/adk/llm_event_logger.py +0 -0
  163. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/config.py +0 -0
  164. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/persistence/__init__.py +0 -0
  165. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/persistence/checkpointers.py +0 -0
  166. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/persistence/stores.py +0 -0
  167. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/tools/__init__.py +0 -0
  168. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/tools/file_search.py +0 -0
  169. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/tools/shell.py +0 -0
  170. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/thinking.py +0 -0
  171. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/__init__.py +0 -0
  172. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/__init__.py +0 -0
  173. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/conftest.py +0 -0
  174. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/helpers.py +0 -0
  175. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/test_langgraph_integration.py +0 -0
  176. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/test_live.py +0 -0
  177. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_thinking.py +0 -0
  178. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_token_caching.py +0 -0
  179. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/tools/__init__.py +0 -0
  180. {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/tools/test_shell_security.py +0 -0
@@ -43,10 +43,11 @@ Thumbs.db
43
43
 
44
44
  #CLAUDE.md
45
45
  .claude/
46
+ .research_demo/
46
47
  plans/
47
48
  docs/
48
49
  changes/
49
- .research_demo/
50
+ findings/
50
51
 
51
52
  # Git worktrees
52
53
  .worktrees/
@@ -5,6 +5,58 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.4.4] - 2026-03-11
9
+
10
+ ### Added
11
+ - **Session Save/Resume**: Persistent conversations across CLI exits with `/save` and `/resume`
12
+ - **Sandbox Executor**: Stateful multi-turn Python code execution with sandboxing and default deps
13
+ - **Context Window Management**: Native ADK and LangGraph context trimming with source-level detection
14
+ - **Context Window Visibility**: Trim detection, status bar token display, and `/status` breakdown
15
+ - **Dynamic Model Registry**: Replace static model lists with live API discovery from Google/Anthropic
16
+ - **Task Progress Display**: Rich-colored task progress in thinking box, persisted across turns
17
+
18
+ ### Changed
19
+ - **Architecture**: Separated workflow+tools layer from UI/CLI layer; composable settings mixins
20
+ - **DRY/SOLID Cleanup** (PR #59, #60): Deduplicated config paths, ArXiv parsing, session persistence, artifact loading; extracted `drain_trim_events()`, `format_detail_rows()`, `format_task_checklist()`; removed dead code (`get_help()`, `FinanceResearchState`, unused settings introspection); replaced dynamic `type()` with `_SessionEvent` class; moved token-drop heuristic into `UsageTracker`
21
+ - **MessageProcessor**: Removed dead code, unused params, cleaner state init
22
+ - **HITL**: Removed dead Future-based machinery, simplified callback path
23
+ - **Ripgrep**: Cache availability check with `lru_cache`
24
+
25
+ ### Fixed
26
+ - Executor import validation blocking allowed submodules
27
+ - Settings not persisting (replaced `exclude_defaults` with explicit exclusion)
28
+ - `verbose_thinking` not persisting across restarts
29
+ - Thread safety, path traversal, and TOCTOU race conditions in persistence
30
+ - VectorStore crash safety: write mappings before FAISS index
31
+ - Embeddings: update in-memory state after `ingest_document`
32
+ - `open_document`: extension allowlist, DANGEROUS permission, audit logging
33
+
34
+ ### Removed
35
+ - `FinanceResearchState` (domain-specific code in shared library)
36
+ - Dead `get_help()`, `get_ui_section`, `is_ui_hidden` methods
37
+ - Dead `generate_tool_summary`, `clear_context`/`unbind_context`, model constant re-exports
38
+ - Dead `cli/settings.py` re-export shim
39
+
40
+ ## [0.4.3] - 2026-02-12
41
+
42
+ ### Changed
43
+ - **Overengineering Cleanup**: Removed ~550 lines of dead code — StateSnapshot, SearchSourceRegistry, unused settings/tool fields, dead ToolRegistry methods, dead command APIs
44
+ - **Inlined Resolvers**: ModelResolver and PathResolver inlined into BaseSettings (`resolvers.py` now contains only constants)
45
+ - **HITL Consolidation**: Merged `hitl/` package into single `tools/hitl_tools.py`; removed `create_checkpoint` tool
46
+ - **Persistence Hardening**: Extracted `sanitize_filename` utility, hardened atomic writes in `persistence/_utils.py`
47
+ - **Test Mocks Relocated**: MockEmbeddingService and MockVectorStore moved to `knowledge_base/_mocks.py`
48
+
49
+ ### Fixed
50
+ - Broken example demos: updated stale imports in arxiv_demo, fileops_demo, shell_demo, websearch_demo
51
+ - Disruptive `logger.error` in background init bypassing CLI UI
52
+ - Research demo: removed stale README, trimmed prompt bloat
53
+
54
+ ### Removed
55
+ - `create_checkpoint` tool (HITL simplified to `request_approval` only)
56
+ - `SearchSourceRegistry` class (unused abstraction)
57
+ - `StateSnapshot`, `ToolCallRecord` data classes (unused)
58
+ - 3 unused conftest test fixtures
59
+
8
60
  ## [0.4.2] - 2026-02-08
9
61
 
10
62
  ### Added
@@ -7,7 +7,7 @@ Agentic CLI is a shared library providing the core infrastructure for building d
7
7
  ## Tech Stack
8
8
 
9
9
  - **Language**: Python 3.12+
10
- - **CLI UI**: `thinking_prompt` - enhanced CLI with thinking boxes and markdown
10
+ - **CLI UI**: `thinking-prompt` - enhanced CLI with thinking boxes and markdown
11
11
  - **Workflow**: Google ADK + LangGraph - dual orchestration backends (selectable via settings)
12
12
  - **Config**: `pydantic-settings` - type-safe configuration
13
13
  - **Logging**: `structlog` - structured logging
@@ -20,7 +20,6 @@ agentic-cli/
20
20
  │ ├── __init__.py # Package exports, lazy imports
21
21
  │ ├── config.py # BaseSettings (pydantic-settings)
22
22
  │ ├── constants.py # Shared constants, truncate()
23
- │ ├── resolvers.py # ModelResolver, PathResolver
24
23
  │ ├── settings_persistence.py
25
24
  │ ├── logging.py
26
25
  │ ├── cli/
@@ -63,24 +62,21 @@ agentic-cli/
63
62
  │ │ ├── memory_tools.py # save_memory, search_memory + MemoryStore
64
63
  │ │ ├── planning_tools.py # save_plan, get_plan + PlanStore
65
64
  │ │ ├── task_tools.py # save_tasks, get_tasks + TaskStore
66
- │ │ ├── hitl_tools.py # request_approval, create_checkpoint
65
+ │ │ ├── hitl_tools.py # request_approval + ApprovalManager, HITLConfig
67
66
  │ │ ├── shell/ # 8-layer shell security
68
67
  │ │ └── webfetch/ # Fetcher, converter, validator, robots
69
- │ ├── hitl/
70
- │ │ ├── config.py # ApprovalRule, HITLConfig
71
- │ │ ├── approval.py # ApprovalManager
72
- │ │ └── checkpoints.py # CheckpointManager
73
68
  │ ├── knowledge_base/
74
69
  │ │ ├── models.py # Document, SearchResult
75
70
  │ │ ├── embeddings.py # EmbeddingService
76
71
  │ │ ├── vector_store.py # VectorStore (FAISS)
72
+ │ │ ├── _mocks.py # MockEmbeddingService, MockVectorStore
77
73
  │ │ └── manager.py # KnowledgeBaseManager
78
74
  │ └── persistence/
79
75
  │ ├── session.py # SessionPersistence
80
76
  │ ├── artifacts.py # ArtifactManager
81
77
  │ └── _utils.py # Atomic write utilities
82
78
  ├── tests/
83
- │ ├── conftest.py # MockContext, MockVectorStore, MockEmbeddingService
79
+ │ ├── conftest.py # MockContext, shared fixtures
84
80
  │ ├── test_*.py # Unit tests
85
81
  │ ├── tools/ # Tool-specific tests
86
82
  │ └── integration/ # ADK & LangGraph pipeline tests
@@ -110,10 +106,12 @@ conda run -n agenticcli python -c "from agentic_cli import BaseCLIApp; print(Bas
110
106
  - **main**: Stable branch, matches latest release. Only updated via merges from `develop` when releasing.
111
107
  - **develop**: Integration branch for ongoing work. Small fixes can be committed directly here.
112
108
  - **feature/\***: Feature branches for larger changes. Branch from `develop`, merge back to `develop`.
109
+ - **fix/\***: Fix branches for fixing issues. Branch from `develop`, merge back to `develop`.
110
+ - **refactor/\***: For larger refactoring changes. Branch from `develop`, merge back to `develop`.
113
111
 
114
112
  Workflow:
115
113
  1. For small fixes: commit directly to `develop`
116
- 2. For features: create `feature/<name>` from `develop`, work there, merge back to `develop`
114
+ 2. For features: create `feature/<name>` (or `fix/<name>` or `refactor/<name>`) from `develop`, work there, merge back to `develop`
117
115
  3. When ready to release: merge `develop` → `main` and tag the release
118
116
 
119
117
  ## Development Principles
@@ -133,7 +131,7 @@ Workflow:
133
131
  ### Key Design Patterns
134
132
  - **Tool error handling**: All tools return `{"success": bool, ...}` dicts. Never raise `ToolError`.
135
133
  - **Tool registration**: Use `@register_tool(category=..., permission_level=..., description=...)` decorator. Tools are auto-discovered via the global `ToolRegistry`.
136
- - **Store consolidation**: Stores (MemoryStore, PlanStore, TaskStore) live inside their tool files (e.g. `memory_tools.py`), not in separate packages.
134
+ - **Store consolidation**: Stores and managers (MemoryStore, PlanStore, TaskStore, ApprovalManager) live inside their tool files (e.g. `memory_tools.py`, `hitl_tools.py`), not in separate packages.
137
135
  - **Context access**: Tools use `get_context_*()` functions from `workflow.context` to access managers and stores via ContextVars.
138
136
  - **Atomic writes**: Use `atomic_write_json`/`atomic_write_text` from `persistence/_utils.py` for file persistence.
139
137
 
@@ -153,6 +151,6 @@ Available session methods:
153
151
 
154
152
  - **Framework**: pytest with `asyncio_mode = "auto"`
155
153
  - **MockContext**: From `tests/conftest.py` — provides isolated settings and temp dirs for all tests
156
- - **MockVectorStore** and **MockEmbeddingService**: In-tree mocks for testing without ML dependencies
154
+ - **MockVectorStore** and **MockEmbeddingService**: In `knowledge_base/_mocks.py` for testing without ML dependencies
157
155
  - **FAISS tests**: Guard with `pytest.importorskip("faiss")` since FAISS is not installed in dev env
158
156
  - **Integration tests**: `tests/integration/` covers ADK and LangGraph pipeline tests
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentic-cli
3
- Version: 0.4.2
3
+ Version: 0.4.4
4
4
  Summary: A framework for building domain-specific agentic CLI applications
5
5
  Project-URL: Homepage, https://github.com/shoom1/agentic-cli
6
6
  Project-URL: Repository, https://github.com/shoom1/agentic-cli
@@ -17,6 +17,8 @@ Requires-Python: >=3.12
17
17
  Requires-Dist: feedparser>=6.0.0
18
18
  Requires-Dist: google-adk[genai]>=0.4.0
19
19
  Requires-Dist: httpx>=0.27.0
20
+ Requires-Dist: ipykernel>=6.0.0
21
+ Requires-Dist: jupyter-client>=8.0.0
20
22
  Requires-Dist: numpy>=1.26.0
21
23
  Requires-Dist: prompt-toolkit>=3.0.0
22
24
  Requires-Dist: pydantic-settings>=2.0.0
@@ -24,7 +26,7 @@ Requires-Dist: pydantic>=2.0.0
24
26
  Requires-Dist: pypdf>=4.0.0
25
27
  Requires-Dist: rich>=13.0.0
26
28
  Requires-Dist: structlog>=24.0.0
27
- Requires-Dist: thinking-prompt>=0.2.0
29
+ Requires-Dist: thinking-prompt>=0.2.5
28
30
  Provides-Extra: dev
29
31
  Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
30
32
  Requires-Dist: pytest-cov>=6.0.0; extra == 'dev'
@@ -384,7 +386,7 @@ agent = AgentConfig(
384
386
  )
385
387
 
386
388
  # Or call directly
387
- results = web_search("Python async programming", max_results=5)
389
+ results = await web_search("Python async programming", max_results=5)
388
390
  # Returns: {"results": [{"title": "...", "url": "...", "snippet": "..."}], ...}
389
391
  ```
390
392
 
@@ -397,7 +399,7 @@ Fetch web content and summarize with LLM:
397
399
  ```python
398
400
  from agentic_cli.tools import web_fetch
399
401
 
400
- result = web_fetch(
402
+ result = await web_fetch(
401
403
  url="https://example.com/article",
402
404
  prompt="Extract the main points from this article",
403
405
  )
@@ -411,16 +413,13 @@ Features: URL validation, robots.txt compliance, SSRF protection, content cachin
411
413
  Search and analyze academic papers:
412
414
 
413
415
  ```python
414
- from agentic_cli.tools import search_arxiv, fetch_arxiv_paper, analyze_arxiv_paper
416
+ from agentic_cli.tools import search_arxiv, fetch_arxiv_paper
415
417
 
416
418
  # Search papers
417
419
  results = search_arxiv("transformer attention", max_results=10, categories=["cs.CL"])
418
420
 
419
421
  # Fetch paper details
420
422
  paper = fetch_arxiv_paper("1706.03762") # "Attention Is All You Need"
421
-
422
- # Analyze with LLM
423
- analysis = await analyze_arxiv_paper("1706.03762", "Summarize the key contributions")
424
423
  ```
425
424
 
426
425
  #### File Operations
@@ -449,8 +448,8 @@ result = list_dir("src/", include_hidden=False)
449
448
  # Returns: {"success": True, "entries": [...]}
450
449
 
451
450
  # Compare files or text
452
- result = diff_compare(source1="old.txt", source2="new.txt")
453
- # Returns: {"success": True, "diff": "...", "has_changes": True}
451
+ result = diff_compare(source_a="old.txt", source_b="new.txt")
452
+ # Returns: {"success": True, "diff": "...", "similarity": 0.85}
454
453
  ```
455
454
 
456
455
  **WRITE Tools (Caution)**
@@ -538,8 +537,9 @@ class MyCommand(Command):
538
537
 
539
538
  # In your app
540
539
  class MyApp(BaseCLIApp):
541
- def get_custom_commands(self) -> list[Command]:
542
- return [MyCommand()]
540
+ def register_commands(self) -> None:
541
+ super().register_commands()
542
+ self.command_registry.register(MyCommand())
543
543
  ```
544
544
 
545
545
  ## Events
@@ -602,7 +602,7 @@ See the `examples/` directory for complete working examples:
602
602
  **Feature Demos**
603
603
  - **arxiv_demo.py** - ArXiv paper search and analysis
604
604
  - **fileops_demo.py** - File operation tools (read, write, grep, glob)
605
- - **memory_demo.py** - Working and long-term memory management
605
+ - **memory_demo.py** - Memory persistence system
606
606
  - **planning_demo.py** - Task graph and planning tools
607
607
  - **shell_demo.py** - Shell security pattern detection
608
608
  - **webfetch_demo.py** - Web fetching and summarization
@@ -652,27 +652,43 @@ agentic-cli/
652
652
  │ ├── __init__.py # Package exports
653
653
  │ ├── config.py # BaseSettings, SettingsContext
654
654
  │ ├── constants.py # Shared constants (truncation, limits)
655
+ │ ├── resolvers.py # Model/path constants (GOOGLE_MODELS, etc.)
656
+ │ ├── settings_persistence.py
655
657
  │ ├── logging.py # Structlog configuration
656
658
  │ ├── cli/
657
659
  │ │ ├── app.py # BaseCLIApp
658
660
  │ │ ├── commands.py # Command, CommandRegistry
659
661
  │ │ ├── builtin_commands.py
660
662
  │ │ ├── workflow_controller.py # Workflow orchestration
661
- │ │ └── message_processor.py # Event stream processing
663
+ │ │ ├── message_processor.py # Event stream processing
664
+ │ │ └── settings*.py # Settings UI (introspection, dialog)
662
665
  │ ├── workflow/
663
666
  │ │ ├── base_manager.py # BaseWorkflowManager (abstract)
664
667
  │ │ ├── events.py # WorkflowEvent, EventType
665
668
  │ │ ├── config.py # AgentConfig
666
669
  │ │ ├── context.py # Context variables for tools
667
670
  │ │ ├── thinking.py # ThinkingDetector
668
- │ │ ├── adk_manager.py # GoogleADKWorkflowManager
671
+ │ │ ├── task_progress.py # Task progress events
672
+ │ │ ├── tool_summaries.py # Tool result summaries
673
+ │ │ ├── settings.py # WorkflowSettingsMixin
674
+ │ │ ├── adk/ # ADK orchestrator
675
+ │ │ │ ├── manager.py # GoogleADKWorkflowManager
676
+ │ │ │ ├── event_processor.py # ADK event processing
677
+ │ │ │ └── llm_event_logger.py # LLM traffic logging
669
678
  │ │ └── langgraph/ # LangGraph submodule
670
679
  │ │ ├── manager.py # LangGraphWorkflowManager
671
- │ │ ├── state.py # AgentState, CheckpointData
672
- │ │ └── persistence/ # Checkpointers and stores
680
+ │ │ ├── graph_builder.py # Graph + LLM factory
681
+ │ │ ├── state.py # AgentState
682
+ │ │ ├── persistence/ # Checkpointers and stores
683
+ │ │ └── tools/ # LangChain-compatible wrappers
673
684
  │ ├── tools/
674
685
  │ │ ├── registry.py # ToolRegistry, ToolCategory, PermissionLevel
675
686
  │ │ ├── executor.py # SafePythonExecutor
687
+ │ │ ├── arxiv_tools.py # search_arxiv, fetch_arxiv_paper
688
+ │ │ ├── arxiv_source.py # ArxivSearchSource
689
+ │ │ ├── execution_tools.py # execute_python
690
+ │ │ ├── interaction_tools.py # ask_clarification
691
+ │ │ ├── knowledge_tools.py # search/ingest_to_knowledge_base
676
692
  │ │ ├── file_read.py # read_file, diff_compare
677
693
  │ │ ├── file_write.py # write_file, edit_file
678
694
  │ │ ├── grep_tool.py # grep (pattern search)
@@ -682,8 +698,7 @@ agentic-cli/
682
698
  │ │ ├── memory_tools.py # MemoryStore, save/search_memory
683
699
  │ │ ├── planning_tools.py # PlanStore, save/get_plan
684
700
  │ │ ├── task_tools.py # TaskStore, save/get_tasks
685
- │ │ ├── hitl_tools.py # request_approval, create_checkpoint
686
- │ │ ├── standard.py # ArXiv tools, ask_clarification
701
+ │ │ ├── hitl_tools.py # request_approval, ApprovalManager
687
702
  │ │ └── shell/ # Shell executor with security
688
703
  │ │ ├── executor.py # Main entry point (disabled by default)
689
704
  │ │ ├── tokenizer.py # Command parsing
@@ -695,15 +710,12 @@ agentic-cli/
695
710
  │ │ ├── models.py # Document, SearchResult
696
711
  │ │ ├── embeddings.py # EmbeddingService
697
712
  │ │ ├── vector_store.py # VectorStore
698
- │ │ └── sources.py # ArxivSearchSource, SearchSourceRegistry
699
- ├── persistence/
700
- │ ├── session.py # SessionPersistence
701
- ├── artifacts.py # ArtifactManager
702
- │ └── _utils.py # Atomic write utilities
703
- └── hitl/
704
- │ ├── approval.py # ApprovalManager
705
- │ ├── checkpoints.py # CheckpointManager
706
- │ └── config.py # HITLConfig
713
+ │ │ ├── _mocks.py # MockEmbeddingService, MockVectorStore
714
+ │ └── sources.py # ArxivSearchSource
715
+ └── persistence/
716
+ ├── session.py # SessionPersistence
717
+ ├── artifacts.py # ArtifactManager
718
+ └── _utils.py # Atomic write utilities
707
719
  ├── examples/
708
720
  │ ├── hello_agent.py # Basic ADK example
709
721
  │ ├── hello_langgraph.py # Basic LangGraph example
@@ -344,7 +344,7 @@ agent = AgentConfig(
344
344
  )
345
345
 
346
346
  # Or call directly
347
- results = web_search("Python async programming", max_results=5)
347
+ results = await web_search("Python async programming", max_results=5)
348
348
  # Returns: {"results": [{"title": "...", "url": "...", "snippet": "..."}], ...}
349
349
  ```
350
350
 
@@ -357,7 +357,7 @@ Fetch web content and summarize with LLM:
357
357
  ```python
358
358
  from agentic_cli.tools import web_fetch
359
359
 
360
- result = web_fetch(
360
+ result = await web_fetch(
361
361
  url="https://example.com/article",
362
362
  prompt="Extract the main points from this article",
363
363
  )
@@ -371,16 +371,13 @@ Features: URL validation, robots.txt compliance, SSRF protection, content cachin
371
371
  Search and analyze academic papers:
372
372
 
373
373
  ```python
374
- from agentic_cli.tools import search_arxiv, fetch_arxiv_paper, analyze_arxiv_paper
374
+ from agentic_cli.tools import search_arxiv, fetch_arxiv_paper
375
375
 
376
376
  # Search papers
377
377
  results = search_arxiv("transformer attention", max_results=10, categories=["cs.CL"])
378
378
 
379
379
  # Fetch paper details
380
380
  paper = fetch_arxiv_paper("1706.03762") # "Attention Is All You Need"
381
-
382
- # Analyze with LLM
383
- analysis = await analyze_arxiv_paper("1706.03762", "Summarize the key contributions")
384
381
  ```
385
382
 
386
383
  #### File Operations
@@ -409,8 +406,8 @@ result = list_dir("src/", include_hidden=False)
409
406
  # Returns: {"success": True, "entries": [...]}
410
407
 
411
408
  # Compare files or text
412
- result = diff_compare(source1="old.txt", source2="new.txt")
413
- # Returns: {"success": True, "diff": "...", "has_changes": True}
409
+ result = diff_compare(source_a="old.txt", source_b="new.txt")
410
+ # Returns: {"success": True, "diff": "...", "similarity": 0.85}
414
411
  ```
415
412
 
416
413
  **WRITE Tools (Caution)**
@@ -498,8 +495,9 @@ class MyCommand(Command):
498
495
 
499
496
  # In your app
500
497
  class MyApp(BaseCLIApp):
501
- def get_custom_commands(self) -> list[Command]:
502
- return [MyCommand()]
498
+ def register_commands(self) -> None:
499
+ super().register_commands()
500
+ self.command_registry.register(MyCommand())
503
501
  ```
504
502
 
505
503
  ## Events
@@ -562,7 +560,7 @@ See the `examples/` directory for complete working examples:
562
560
  **Feature Demos**
563
561
  - **arxiv_demo.py** - ArXiv paper search and analysis
564
562
  - **fileops_demo.py** - File operation tools (read, write, grep, glob)
565
- - **memory_demo.py** - Working and long-term memory management
563
+ - **memory_demo.py** - Memory persistence system
566
564
  - **planning_demo.py** - Task graph and planning tools
567
565
  - **shell_demo.py** - Shell security pattern detection
568
566
  - **webfetch_demo.py** - Web fetching and summarization
@@ -612,27 +610,43 @@ agentic-cli/
612
610
  │ ├── __init__.py # Package exports
613
611
  │ ├── config.py # BaseSettings, SettingsContext
614
612
  │ ├── constants.py # Shared constants (truncation, limits)
613
+ │ ├── resolvers.py # Model/path constants (GOOGLE_MODELS, etc.)
614
+ │ ├── settings_persistence.py
615
615
  │ ├── logging.py # Structlog configuration
616
616
  │ ├── cli/
617
617
  │ │ ├── app.py # BaseCLIApp
618
618
  │ │ ├── commands.py # Command, CommandRegistry
619
619
  │ │ ├── builtin_commands.py
620
620
  │ │ ├── workflow_controller.py # Workflow orchestration
621
- │ │ └── message_processor.py # Event stream processing
621
+ │ │ ├── message_processor.py # Event stream processing
622
+ │ │ └── settings*.py # Settings UI (introspection, dialog)
622
623
  │ ├── workflow/
623
624
  │ │ ├── base_manager.py # BaseWorkflowManager (abstract)
624
625
  │ │ ├── events.py # WorkflowEvent, EventType
625
626
  │ │ ├── config.py # AgentConfig
626
627
  │ │ ├── context.py # Context variables for tools
627
628
  │ │ ├── thinking.py # ThinkingDetector
628
- │ │ ├── adk_manager.py # GoogleADKWorkflowManager
629
+ │ │ ├── task_progress.py # Task progress events
630
+ │ │ ├── tool_summaries.py # Tool result summaries
631
+ │ │ ├── settings.py # WorkflowSettingsMixin
632
+ │ │ ├── adk/ # ADK orchestrator
633
+ │ │ │ ├── manager.py # GoogleADKWorkflowManager
634
+ │ │ │ ├── event_processor.py # ADK event processing
635
+ │ │ │ └── llm_event_logger.py # LLM traffic logging
629
636
  │ │ └── langgraph/ # LangGraph submodule
630
637
  │ │ ├── manager.py # LangGraphWorkflowManager
631
- │ │ ├── state.py # AgentState, CheckpointData
632
- │ │ └── persistence/ # Checkpointers and stores
638
+ │ │ ├── graph_builder.py # Graph + LLM factory
639
+ │ │ ├── state.py # AgentState
640
+ │ │ ├── persistence/ # Checkpointers and stores
641
+ │ │ └── tools/ # LangChain-compatible wrappers
633
642
  │ ├── tools/
634
643
  │ │ ├── registry.py # ToolRegistry, ToolCategory, PermissionLevel
635
644
  │ │ ├── executor.py # SafePythonExecutor
645
+ │ │ ├── arxiv_tools.py # search_arxiv, fetch_arxiv_paper
646
+ │ │ ├── arxiv_source.py # ArxivSearchSource
647
+ │ │ ├── execution_tools.py # execute_python
648
+ │ │ ├── interaction_tools.py # ask_clarification
649
+ │ │ ├── knowledge_tools.py # search/ingest_to_knowledge_base
636
650
  │ │ ├── file_read.py # read_file, diff_compare
637
651
  │ │ ├── file_write.py # write_file, edit_file
638
652
  │ │ ├── grep_tool.py # grep (pattern search)
@@ -642,8 +656,7 @@ agentic-cli/
642
656
  │ │ ├── memory_tools.py # MemoryStore, save/search_memory
643
657
  │ │ ├── planning_tools.py # PlanStore, save/get_plan
644
658
  │ │ ├── task_tools.py # TaskStore, save/get_tasks
645
- │ │ ├── hitl_tools.py # request_approval, create_checkpoint
646
- │ │ ├── standard.py # ArXiv tools, ask_clarification
659
+ │ │ ├── hitl_tools.py # request_approval, ApprovalManager
647
660
  │ │ └── shell/ # Shell executor with security
648
661
  │ │ ├── executor.py # Main entry point (disabled by default)
649
662
  │ │ ├── tokenizer.py # Command parsing
@@ -655,15 +668,12 @@ agentic-cli/
655
668
  │ │ ├── models.py # Document, SearchResult
656
669
  │ │ ├── embeddings.py # EmbeddingService
657
670
  │ │ ├── vector_store.py # VectorStore
658
- │ │ └── sources.py # ArxivSearchSource, SearchSourceRegistry
659
- ├── persistence/
660
- │ ├── session.py # SessionPersistence
661
- ├── artifacts.py # ArtifactManager
662
- │ └── _utils.py # Atomic write utilities
663
- └── hitl/
664
- │ ├── approval.py # ApprovalManager
665
- │ ├── checkpoints.py # CheckpointManager
666
- │ └── config.py # HITLConfig
671
+ │ │ ├── _mocks.py # MockEmbeddingService, MockVectorStore
672
+ │ └── sources.py # ArxivSearchSource
673
+ └── persistence/
674
+ ├── session.py # SessionPersistence
675
+ ├── artifacts.py # ArtifactManager
676
+ └── _utils.py # Atomic write utilities
667
677
  ├── examples/
668
678
  │ ├── hello_agent.py # Basic ADK example
669
679
  │ ├── hello_langgraph.py # Basic LangGraph example
@@ -22,11 +22,8 @@ Usage:
22
22
  import sys
23
23
  import time
24
24
 
25
- from agentic_cli.knowledge_base.sources import (
26
- ArxivSearchSource,
27
- SearchSourceResult,
28
- get_search_registry,
29
- )
25
+ from agentic_cli.knowledge_base.sources import SearchSourceResult
26
+ from agentic_cli.tools.arxiv_source import ArxivSearchSource
30
27
 
31
28
 
32
29
  # =============================================================================
@@ -234,34 +231,6 @@ def demo_rate_limiting():
234
231
  print()
235
232
 
236
233
 
237
- def demo_registry_integration():
238
- """Demo integration with search source registry."""
239
- print("\n" + "=" * 60)
240
- print("Registry Integration Demo")
241
- print("=" * 60)
242
-
243
- registry = get_search_registry()
244
-
245
- # List registered sources
246
- sources = registry.list_sources()
247
- print(f" Registered sources: {[s.name for s in sources]}")
248
-
249
- # Get arXiv source from registry
250
- arxiv = registry.get("arxiv")
251
- if arxiv:
252
- print(f" arXiv source available: {arxiv.is_available()}")
253
-
254
- # Search through registry
255
- print("\n Searching via registry...")
256
- results = registry.search("reinforcement learning", sources=["arxiv"], max_results=2)
257
-
258
- arxiv_results = results.get("arxiv", [])
259
- print(f" Results from arXiv: {len(arxiv_results)}")
260
- for r in arxiv_results:
261
- print(f" - {r.title[:50]}...")
262
- print()
263
-
264
-
265
234
  def main():
266
235
  """Run all demos."""
267
236
  print("\n" + "#" * 60)
@@ -292,7 +261,6 @@ def main():
292
261
  demo_sort_options()
293
262
  demo_caching()
294
263
  demo_rate_limiting()
295
- demo_registry_integration()
296
264
 
297
265
  print("\n" + "#" * 60)
298
266
  print("# Demo Complete!")