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.
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/.gitignore +2 -1
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/CHANGELOG.md +52 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/CLAUDE.md +9 -11
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/PKG-INFO +40 -28
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/README.md +36 -26
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/arxiv_demo.py +2 -34
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/fileops_demo.py +81 -115
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/__init__.py +1 -2
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/agents.py +61 -75
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/app.py +5 -6
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/commands.py +1 -42
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/settings.py +13 -12
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/shell_demo.py +24 -32
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/websearch_demo.py +19 -18
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/pyproject.toml +4 -2
- agentic_cli-0.4.4/requirements.txt +4 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/__init__.py +4 -7
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/__init__.py +1 -3
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/app.py +74 -21
- agentic_cli-0.4.4/src/agentic_cli/cli/builtin_commands.py +351 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/commands.py +1 -162
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/message_processor.py +144 -77
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/settings_introspection.py +0 -26
- agentic_cli-0.4.4/src/agentic_cli/cli/usage_tracker.py +154 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/workflow_controller.py +31 -107
- agentic_cli-0.4.4/src/agentic_cli/config.py +338 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/constants.py +1 -1
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/knowledge_base/__init__.py +2 -12
- agentic_cli-0.4.4/src/agentic_cli/knowledge_base/_mocks.py +144 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/knowledge_base/embeddings.py +0 -61
- agentic_cli-0.4.4/src/agentic_cli/knowledge_base/manager.py +690 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/knowledge_base/models.py +16 -4
- agentic_cli-0.4.4/src/agentic_cli/knowledge_base/sources.py +114 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/knowledge_base/vector_store.py +75 -141
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/logging.py +0 -14
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/persistence/__init__.py +0 -4
- agentic_cli-0.4.4/src/agentic_cli/persistence/_utils.py +81 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/persistence/artifacts.py +76 -42
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/persistence/session.py +65 -196
- agentic_cli-0.4.4/src/agentic_cli/settings_mixins.py +120 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/settings_persistence.py +29 -12
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/__init__.py +13 -16
- agentic_cli-0.4.4/src/agentic_cli/tools/arxiv_source.py +221 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/arxiv_tools.py +29 -58
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/execution_tools.py +1 -1
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/executor.py +6 -2
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/glob_tool.py +1 -7
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/grep_tool.py +15 -19
- agentic_cli-0.4.4/src/agentic_cli/tools/hitl_tools.py +233 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/interaction_tools.py +5 -3
- agentic_cli-0.4.4/src/agentic_cli/tools/knowledge_tools.py +676 -0
- agentic_cli-0.4.4/src/agentic_cli/tools/pdf_utils.py +55 -0
- agentic_cli-0.4.4/src/agentic_cli/tools/registry.py +236 -0
- agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/__init__.py +57 -0
- agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/backends/__init__.py +5 -0
- agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/backends/base.py +46 -0
- agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/backends/jupyter_local.py +238 -0
- agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/manager.py +174 -0
- agentic_cli-0.4.4/src/agentic_cli/tools/sandbox/models.py +16 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/search.py +7 -7
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/executor.py +2 -64
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/task_tools.py +65 -20
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/converter.py +6 -18
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/fetcher.py +15 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/summarizer.py +1 -2
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/validator.py +24 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch_tool.py +22 -5
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/__init__.py +12 -6
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/adk/event_processor.py +5 -100
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/adk/manager.py +185 -50
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/base_manager.py +298 -78
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/context.py +4 -1
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/events.py +52 -53
- agentic_cli-0.4.4/src/agentic_cli/workflow/factory.py +112 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/__init__.py +0 -2
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/graph_builder.py +44 -1
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/manager.py +143 -47
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/state.py +0 -18
- agentic_cli-0.4.4/src/agentic_cli/workflow/models.py +508 -0
- agentic_cli-0.4.4/src/agentic_cli/workflow/retry.py +47 -0
- agentic_cli-0.4.4/src/agentic_cli/workflow/settings.py +448 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/task_progress.py +1 -1
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/tool_summaries.py +55 -13
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/conftest.py +2 -26
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/test_adk_integration.py +20 -36
- agentic_cli-0.4.4/tests/test_arxiv_tools.py +380 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_commands.py +0 -158
- agentic_cli-0.4.4/tests/test_concurrent_stores.py +192 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_config.py +42 -38
- agentic_cli-0.4.4/tests/test_context_trimming.py +249 -0
- agentic_cli-0.4.4/tests/test_context_window.py +89 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_embeddings.py +2 -1
- agentic_cli-0.4.4/tests/test_grep_tool_cache.py +29 -0
- agentic_cli-0.4.4/tests/test_hitl.py +94 -0
- agentic_cli-0.4.4/tests/test_input_callback.py +26 -0
- agentic_cli-0.4.4/tests/test_kb_helpers.py +63 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_knowledge_base.py +214 -150
- agentic_cli-0.4.4/tests/test_knowledge_tools.py +1227 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_langgraph.py +2 -30
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_memory.py +37 -47
- agentic_cli-0.4.4/tests/test_model_registry.py +500 -0
- agentic_cli-0.4.4/tests/test_persistence.py +249 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_planning.py +26 -25
- agentic_cli-0.4.4/tests/test_session_save_resume.py +490 -0
- agentic_cli-0.4.4/tests/test_settings_persistence.py +121 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_task_tools.py +168 -125
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_tool_summaries.py +145 -44
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_tools.py +221 -244
- agentic_cli-0.4.4/tests/test_update_setting.py +21 -0
- agentic_cli-0.4.4/tests/test_usage_tracker.py +229 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_vector_store.py +1 -1
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_webfetch.py +104 -35
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_workflow.py +0 -1
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_workflow_controller.py +20 -19
- agentic_cli-0.4.4/tests/tools/test_sandbox.py +579 -0
- agentic_cli-0.4.2/examples/research_demo/README.md +0 -160
- agentic_cli-0.4.2/requirements.txt +0 -13
- agentic_cli-0.4.2/src/agentic_cli/cli/builtin_commands.py +0 -115
- agentic_cli-0.4.2/src/agentic_cli/cli/settings.py +0 -58
- agentic_cli-0.4.2/src/agentic_cli/config.py +0 -629
- agentic_cli-0.4.2/src/agentic_cli/hitl/__init__.py +0 -26
- agentic_cli-0.4.2/src/agentic_cli/hitl/approval.py +0 -84
- agentic_cli-0.4.2/src/agentic_cli/hitl/checkpoints.py +0 -70
- agentic_cli-0.4.2/src/agentic_cli/hitl/config.py +0 -47
- agentic_cli-0.4.2/src/agentic_cli/knowledge_base/manager.py +0 -423
- agentic_cli-0.4.2/src/agentic_cli/knowledge_base/sources.py +0 -403
- agentic_cli-0.4.2/src/agentic_cli/persistence/_utils.py +0 -23
- agentic_cli-0.4.2/src/agentic_cli/resolvers.py +0 -237
- agentic_cli-0.4.2/src/agentic_cli/tools/hitl_tools.py +0 -157
- agentic_cli-0.4.2/src/agentic_cli/tools/knowledge_tools.py +0 -110
- agentic_cli-0.4.2/src/agentic_cli/tools/registry.py +0 -401
- agentic_cli-0.4.2/src/agentic_cli/workflow/settings.py +0 -180
- agentic_cli-0.4.2/tests/test_hitl.py +0 -159
- agentic_cli-0.4.2/tests/test_persistence.py +0 -546
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/LICENSE +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/environment.yml +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/hello_agent.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/hello_langgraph.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/memory_demo.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/planning_demo.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/research_demo/__main__.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/examples/webfetch_demo.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/requirements-dev.txt +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/cli/settings_command.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/file_read.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/file_write.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/memory_tools.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/planning_tools.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/__init__.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/audit.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/classifier.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/config.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/models.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/path_analyzer.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/preprocessor.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/risk_assessor.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/sandbox.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/shell/tokenizer.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/__init__.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/tools/webfetch/robots.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/adk/__init__.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/adk/llm_event_logger.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/config.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/persistence/__init__.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/persistence/checkpointers.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/persistence/stores.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/tools/__init__.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/tools/file_search.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/langgraph/tools/shell.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/src/agentic_cli/workflow/thinking.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/__init__.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/__init__.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/conftest.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/helpers.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/test_langgraph_integration.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/integration/test_live.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_thinking.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/test_token_caching.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/tools/__init__.py +0 -0
- {agentic_cli-0.4.2 → agentic_cli-0.4.4}/tests/tools/test_shell_security.py +0 -0
|
@@ -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**: `
|
|
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,
|
|
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,
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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(
|
|
453
|
-
# Returns: {"success": True, "diff": "...", "
|
|
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
|
|
542
|
-
|
|
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** -
|
|
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
|
-
│ │
|
|
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
|
-
│ │ ├──
|
|
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
|
-
│ │ ├──
|
|
672
|
-
│ │
|
|
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,
|
|
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
|
-
│ │
|
|
699
|
-
│
|
|
700
|
-
│
|
|
701
|
-
│
|
|
702
|
-
│
|
|
703
|
-
│
|
|
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
|
|
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(
|
|
413
|
-
# Returns: {"success": True, "diff": "...", "
|
|
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
|
|
502
|
-
|
|
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** -
|
|
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
|
-
│ │
|
|
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
|
-
│ │ ├──
|
|
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
|
-
│ │ ├──
|
|
632
|
-
│ │
|
|
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,
|
|
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
|
-
│ │
|
|
659
|
-
│
|
|
660
|
-
│
|
|
661
|
-
│
|
|
662
|
-
│
|
|
663
|
-
│
|
|
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
|
-
|
|
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!")
|