henchman-ai 0.1.7__tar.gz → 0.1.9__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.
- henchman_ai-0.1.9/CHANGELOG.md +172 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/PKG-INFO +1 -1
- henchman_ai-0.1.9/PROJECT_PLAN.md +233 -0
- henchman_ai-0.1.9/TOOL_CHAINING_DESIGN.md +425 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/pyproject.toml +1 -1
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/scripts/ci.sh +5 -3
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/builtins.py +2 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/chat.py +29 -0
- henchman_ai-0.1.9/src/henchman/cli/commands/unlimited.py +70 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/input.py +6 -4
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/prompts.py +2 -2
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/repl.py +105 -14
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/config/schema.py +14 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/core/__init__.py +11 -1
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/core/agent.py +70 -18
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/core/events.py +2 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/core/session.py +47 -0
- henchman_ai-0.1.9/src/henchman/core/turn.py +247 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/registry.py +111 -8
- henchman_ai-0.1.9/src/henchman/utils/__init__.py +15 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/utils/compaction.py +174 -51
- henchman_ai-0.1.9/src/henchman/utils/retry.py +166 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/utils/tokens.py +1 -1
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/utils/validation.py +5 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/version.py +1 -1
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/commands/test_plan.py +13 -13
- henchman_ai-0.1.9/tests/cli/commands/test_unlimited.py +345 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_chat_command.py +127 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_cli_smoke.py +6 -6
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_keyboard_fixes.py +1 -1
- henchman_ai-0.1.9/tests/cli/test_loop_protection.py +213 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_repl.py +102 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/test_streaming_tool_calls.py +1 -1
- henchman_ai-0.1.9/tests/core/test_turn_state.py +188 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/e2e/test_context_safety.py +10 -10
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/e2e/test_tool_fix.py +2 -2
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/empty_message_validation/test_empty_messages.py +6 -6
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/integration/test_context_limits.py +58 -58
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_413_error_handling.py +4 -4
- henchman_ai-0.1.9/tests/smoke/test_escape_key_behavior.py +309 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/smoke/test_large_file_handling.py +35 -34
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/test_coverage_suite.py +20 -16
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_registry.py +258 -1
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_agent.py +74 -78
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_compaction_llm.py +11 -15
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_events.py +17 -18
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_llm.py +66 -71
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_mcp.py +37 -37
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_plan_mode.py +45 -47
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_repl_integration.py +2 -2
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_session.py +14 -16
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_skills.py +2 -3
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_slash_commands.py +2 -2
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_tokens_llm.py +18 -22
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_tool_calls.py +63 -64
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_compaction.py +11 -3
- henchman_ai-0.1.9/tests/utils/test_compaction_edge_cases.py +137 -0
- henchman_ai-0.1.9/tests/utils/test_compaction_validation.py +241 -0
- henchman_ai-0.1.9/tests/utils/test_protected_zone.py +138 -0
- henchman_ai-0.1.9/tests/utils/test_retry.py +224 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_summarization.py +37 -36
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_tiktoken_integration.py +5 -6
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_tool_sequence_compaction.py +24 -25
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_validation.py +28 -28
- henchman_ai-0.1.7/400_error.md +0 -90
- henchman_ai-0.1.7/400_error_final_report.md +0 -152
- henchman_ai-0.1.7/400_error_fix_report.md +0 -46
- henchman_ai-0.1.7/ATTRIBUTE_ERROR_FIX_SUMMARY.md +0 -89
- henchman_ai-0.1.7/CHANGELOG.md +0 -93
- henchman_ai-0.1.7/CI_100_PERCENT_PASS_RATE_ANALYSIS.md +0 -143
- henchman_ai-0.1.7/CI_FIX_ACTION_PLAN.md +0 -55
- henchman_ai-0.1.7/CI_FIX_PROGRESS_SUMMARY.md +0 -26
- henchman_ai-0.1.7/CI_PIPELINE_COMPREHENSIVE_ANALYSIS.md +0 -151
- henchman_ai-0.1.7/FUNCTIONAL_TEST_IMPLEMENTATION_SUMMARY.md +0 -128
- henchman_ai-0.1.7/IMPLEMENTATION_PLAN.md +0 -1900
- henchman_ai-0.1.7/INTEGRATION_TESTING.md +0 -145
- henchman_ai-0.1.7/INTEGRATION_TESTING_PROGRESS_SUMMARY.md +0 -25
- henchman_ai-0.1.7/INTEGRATION_TESTING_TASK_COMPLETION.md +0 -28
- henchman_ai-0.1.7/KEYBOARD_INTERRUPT_FIXES_SUMMARY.md +0 -74
- henchman_ai-0.1.7/UI_INTEGRATION_TESTING_SUMMARY.md +0 -157
- henchman_ai-0.1.7/UI_TOOL_CALLS_SUMMARY.md +0 -10
- henchman_ai-0.1.7/analyze_400_error.py +0 -156
- henchman_ai-0.1.7/compaction_bug_analysis.md +0 -200
- henchman_ai-0.1.7/detailed_400_analysis.md +0 -188
- henchman_ai-0.1.7/src/henchman/utils/__init__.py +0 -1
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/.github/copilot-instructions.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/.github/workflows/ci.yml +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/.github/workflows/publish.yml +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/.gitignore +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/LICENSE +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/README.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/TASK_COMPLETION_SUMMARY.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/debug_compaction.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/api.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/configuration.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/extensions.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/getting-started.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/index.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/mcp.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/providers.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/tools.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/fix_repl.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/fix_repl_simple.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/mkdocs.yml +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/replace_method.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/reproduce_400_error.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/run_interactive_tests.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/__main__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/app.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/extensions.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/mcp.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/plan.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/skill.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/console.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/json_output.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/repl.py.backup +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/repl.py.backup2 +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/config/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/config/context.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/config/settings.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/core/agent.py.backup +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/extensions/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/extensions/base.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/extensions/manager.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/mcp/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/mcp/client.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/mcp/config.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/mcp/manager.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/mcp/tool.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/anthropic.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/base.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/deepseek.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/ollama.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/openai_compat.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/openai_compat.py.backup +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/registry.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/skills/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/skills/executor.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/skills/learner.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/skills/models.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/skills/store.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/base.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/ask_user.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/file_edit.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/file_read.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/file_write.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/glob_tool.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/grep.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/ls.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/shell.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/web_fetch.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/test_compaction.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/test_compaction_fix.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/test_fixes.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/test_output.txt +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/test_run.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/commands/test_skill.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/commands/test_skill_extended.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_app.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_app_extended.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_builtins.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_commands.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_commands_repro.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_console.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_enhanced_tool_display.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_input.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_input_bindings.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_json_output.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_keyboard_integration.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_keyboard_interrupt.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_keyboard_verification.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_mcp_command.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_repl_attribute_fix.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_repl_startup_message.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_repl_toolbar.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/config/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/config/test_context.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/config/test_schema.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/config/test_settings.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/conftest.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/test_automatic_compaction.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/test_events.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/test_session.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/test_session_manager.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/extensions/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/extensions/test_base.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/extensions/test_command.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/extensions/test_manager.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/integration/test_tool_integration.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/mcp/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/mcp/test_client.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/mcp/test_config.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/mcp/test_manager.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/mcp/test_tool.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_anthropic.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_base.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_deepseek.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_ollama.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_openai_compat.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_registry.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_executor.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_learner.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_markdown_skills.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_models.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_store.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_store_extended.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/test_main.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/test_version.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_ask_user_tool.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_base.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_directory_tools.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_file_tools.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_grep_tool.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_plan_mode_enforcement.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_shell_tool.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_web_fetch_tool.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/INTERACTIVE_SESSION_TESTS.md +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/__init__.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/conftest.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_repl_e2e.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_tool_integration.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_multi_turn_tool_calls.py +0 -0
- {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_token_counter_extended.py +0 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.1.9] - 2026-01-28
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Error Handling & Recovery**
|
|
15
|
+
- Added retry utilities with exponential backoff (`henchman.utils.retry`)
|
|
16
|
+
- NETWORK tools now automatically retry on transient failures (ConnectionError, TimeoutError, OSError)
|
|
17
|
+
- Configurable retry settings: `network_retries`, `retry_base_delay`, `retry_max_delay` in ToolSettings
|
|
18
|
+
- `RetryConfig` dataclass for fine-grained retry configuration
|
|
19
|
+
- `with_retry` decorator and `retry_async` function for custom retry logic
|
|
20
|
+
|
|
21
|
+
- **Batch Operations**
|
|
22
|
+
- Added `execute_batch()` method to ToolRegistry for parallel tool execution
|
|
23
|
+
- Independent tool calls now execute concurrently using `asyncio.gather()`
|
|
24
|
+
- `BatchResult` dataclass with success/failure counts and individual results
|
|
25
|
+
- Batch execution continues even when some tools fail
|
|
26
|
+
|
|
27
|
+
## [0.1.8] - 2024-01-XX
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **Safety & Stability**
|
|
32
|
+
- Added safety limits to tools and compactor to prevent excessive resource usage
|
|
33
|
+
- Switched safety limits from character-based to token-based for better model compatibility
|
|
34
|
+
- Fixed indentation and syntax issues in tool implementations
|
|
35
|
+
- Enhanced Python 3.10 compatibility (asyncio.TimeoutError handling)
|
|
36
|
+
|
|
37
|
+
- **User Interface**
|
|
38
|
+
- Ctrl+C now exits cleanly when waiting for user input at the prompt (prompt_toolkit key binding)
|
|
39
|
+
- Escape key now exits gracefully (no crash) when pressed on empty buffer
|
|
40
|
+
- Added newline after Henchman finishes talking or after tool execution for improved readability
|
|
41
|
+
|
|
42
|
+
### Added
|
|
43
|
+
|
|
44
|
+
- **Testing & Quality**
|
|
45
|
+
- Comprehensive integration tests for token management, tool calls, and validation
|
|
46
|
+
- Enhanced test coverage for keyboard interrupt handling
|
|
47
|
+
- Added tests for Ctrl+C and Escape key behavior in input bindings
|
|
48
|
+
- GitHub Actions workflows for CI/CD pipeline
|
|
49
|
+
|
|
50
|
+
- **Documentation**
|
|
51
|
+
- MkDocs documentation site with Material theme
|
|
52
|
+
- Updated implementation plans and progress reports
|
|
53
|
+
|
|
54
|
+
## [0.1.7] - 2024-01-XX
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
- Switched safety limits from character-based to token-based
|
|
58
|
+
- Fixed indentation and syntax issues
|
|
59
|
+
|
|
60
|
+
## [0.1.6] - 2024-01-XX
|
|
61
|
+
|
|
62
|
+
### Fixed
|
|
63
|
+
- Added safety limits to tools and compactor
|
|
64
|
+
|
|
65
|
+
## [0.1.5] - 2024-01-XX
|
|
66
|
+
|
|
67
|
+
### Added
|
|
68
|
+
- Integration tests for token management
|
|
69
|
+
|
|
70
|
+
## [0.1.4] - 2024-01-XX
|
|
71
|
+
|
|
72
|
+
### Added
|
|
73
|
+
- Enhanced test coverage
|
|
74
|
+
|
|
75
|
+
## [0.1.3] - 2024-01-XX
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
- Keyboard interrupt handling improvements
|
|
79
|
+
|
|
80
|
+
## [0.1.2] - 2024-01-XX
|
|
81
|
+
|
|
82
|
+
### Added
|
|
83
|
+
- Python 3.10 compatibility fixes
|
|
84
|
+
|
|
85
|
+
## [0.1.1] - 2024-01-XX
|
|
86
|
+
|
|
87
|
+
### Added
|
|
88
|
+
- GitHub Actions workflows
|
|
89
|
+
- CHANGELOG file
|
|
90
|
+
|
|
91
|
+
## [0.1.0] - 2024-01-XX
|
|
92
|
+
|
|
93
|
+
### Added
|
|
94
|
+
|
|
95
|
+
- **Core Agent System**
|
|
96
|
+
- Agent class with streaming event architecture
|
|
97
|
+
- Event-driven processing (CONTENT, THOUGHT, TOOL_CALL_REQUEST, etc.)
|
|
98
|
+
- Tool execution with confirmation workflow
|
|
99
|
+
- Session management with auto-save
|
|
100
|
+
|
|
101
|
+
- **Provider System**
|
|
102
|
+
- DeepSeek provider (default)
|
|
103
|
+
- OpenAI-compatible base provider
|
|
104
|
+
- Anthropic provider with native API
|
|
105
|
+
- Ollama provider for local models
|
|
106
|
+
- Provider registry for dynamic provider creation
|
|
107
|
+
|
|
108
|
+
- **Built-in Tools**
|
|
109
|
+
- `read_file` - Read file contents
|
|
110
|
+
- `write_file` - Write to files
|
|
111
|
+
- `edit_file` - Surgical file edits
|
|
112
|
+
- `ls` - List directory contents
|
|
113
|
+
- `glob` - Find files by pattern
|
|
114
|
+
- `grep` - Search file contents
|
|
115
|
+
- `shell` - Execute shell commands
|
|
116
|
+
- `web_fetch` - Fetch web pages
|
|
117
|
+
|
|
118
|
+
- **Interactive REPL**
|
|
119
|
+
- Rich terminal UI with theming
|
|
120
|
+
- Slash commands (/help, /quit, /clear, /tools, /chat)
|
|
121
|
+
- File references with @filename syntax
|
|
122
|
+
- Shell command execution with !command syntax
|
|
123
|
+
- Session save/resume functionality
|
|
124
|
+
|
|
125
|
+
- **MCP Integration**
|
|
126
|
+
- McpClient for single server connections
|
|
127
|
+
- McpManager for multiple servers
|
|
128
|
+
- Trusted/untrusted server modes
|
|
129
|
+
- /mcp list and /mcp status commands
|
|
130
|
+
|
|
131
|
+
- **Extension System**
|
|
132
|
+
- Extension base class
|
|
133
|
+
- Entry point discovery
|
|
134
|
+
- Local extension loading from ~/.henchman/extensions/
|
|
135
|
+
- /extensions list command
|
|
136
|
+
|
|
137
|
+
- **Configuration**
|
|
138
|
+
- Hierarchical YAML settings
|
|
139
|
+
- Environment variable overrides
|
|
140
|
+
- HENCHMAN.md context file discovery
|
|
141
|
+
- Workspace and user-level settings
|
|
142
|
+
|
|
143
|
+
- **Documentation**
|
|
144
|
+
- MkDocs site with Material theme
|
|
145
|
+
- Getting started guide
|
|
146
|
+
- Provider documentation
|
|
147
|
+
- Tool reference
|
|
148
|
+
- MCP integration guide
|
|
149
|
+
- Extension development guide
|
|
150
|
+
- API reference
|
|
151
|
+
|
|
152
|
+
- **Quality**
|
|
153
|
+
- 100% test coverage (567+ tests)
|
|
154
|
+
- Type hints throughout
|
|
155
|
+
- Google-style docstrings
|
|
156
|
+
- Ruff linting and formatting
|
|
157
|
+
- Mypy type checking
|
|
158
|
+
|
|
159
|
+
### Changed
|
|
160
|
+
|
|
161
|
+
- Rebranded from mlg-cli to henchman-ai
|
|
162
|
+
|
|
163
|
+
[Unreleased]: https://github.com/MGPowerlytics/henchman-ai/compare/v0.1.8...HEAD
|
|
164
|
+
[0.1.8]: https://github.com/MGPowerlytics/henchman-ai/compare/v0.1.7...v0.1.8
|
|
165
|
+
[0.1.7]: https://github.com/MGPowerlytics/henchman-ai/compare/v0.1.6...v0.1.7
|
|
166
|
+
[0.1.6]: https://github.com/MGPowerlytics/henchman-ai/compare/v0.1.5...v0.1.6
|
|
167
|
+
[0.1.5]: https://github.com/MGPowerlytics/henchman-ai/compare/v0.1.4...v0.1.5
|
|
168
|
+
[0.1.4]: https://github.com/MGPowerlytics/henchman-ai/compare/v0.1.3...v0.1.4
|
|
169
|
+
[0.1.3]: https://github.com/MGPowerlytics/henchman-ai/compare/v0.1.2...v0.1.3
|
|
170
|
+
[0.1.2]: https://github.com/MGPowerlytics/henchman-ai/compare/v0.1.1...v0.1.2
|
|
171
|
+
[0.1.1]: https://github.com/MGPowerlytics/henchman-ai/compare/v0.1.0...v0.1.1
|
|
172
|
+
[0.1.0]: https://github.com/MGPowerlytics/henchman-ai/releases/tag/v0.1.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: henchman-ai
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.9
|
|
4
4
|
Summary: A model-agnostic AI agent CLI - your AI henchman for the terminal
|
|
5
5
|
Project-URL: Homepage, https://github.com/MGPowerlytics/henchman-ai
|
|
6
6
|
Project-URL: Repository, https://github.com/MGPowerlytics/henchman-ai
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
# Henchman-AI Tool Usage Improvement Project Plan
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
This document outlines a comprehensive plan to enhance the tool usage capabilities of the Henchman-AI agent system. The goal is to make tool interactions more efficient, intelligent, and user-friendly.
|
|
5
|
+
|
|
6
|
+
## Current State Analysis
|
|
7
|
+
The current tool system provides basic file operations, shell commands, and web fetching capabilities. Tools are invoked individually with stateless interactions and minimal error recovery.
|
|
8
|
+
|
|
9
|
+
## Improvement Categories
|
|
10
|
+
|
|
11
|
+
### 1. Error Handling & Recovery ✅
|
|
12
|
+
**Goal**: Make tool usage more resilient to failures
|
|
13
|
+
**Implementation Plan**:
|
|
14
|
+
- Add automatic retry logic with exponential backoff ✅
|
|
15
|
+
- Implement fallback strategies for common failure modes
|
|
16
|
+
- Add detailed error diagnostics and suggestions
|
|
17
|
+
- Create error recovery templates for different tool types
|
|
18
|
+
|
|
19
|
+
**Status**: Implemented - Retry utilities with exponential backoff for NETWORK tools
|
|
20
|
+
**Priority**: High
|
|
21
|
+
**Estimated Effort**: 2-3 weeks
|
|
22
|
+
|
|
23
|
+
### 2. Tool Chaining & Pipelining
|
|
24
|
+
**Goal**: Enable seamless data flow between tools
|
|
25
|
+
**Implementation Plan**:
|
|
26
|
+
- Design a pipeline DSL for tool composition
|
|
27
|
+
- Implement output/input type matching system
|
|
28
|
+
- Create pipeline execution engine
|
|
29
|
+
- Add pipeline visualization and debugging
|
|
30
|
+
|
|
31
|
+
**Priority**: High
|
|
32
|
+
**Estimated Effort**: 3-4 weeks
|
|
33
|
+
|
|
34
|
+
### 3. Context-Aware Tool Selection
|
|
35
|
+
**Goal**: Intelligent tool recommendation based on context
|
|
36
|
+
**Implementation Plan**:
|
|
37
|
+
- Build tool usage pattern analyzer
|
|
38
|
+
- Implement file type detection and appropriate tool mapping
|
|
39
|
+
- Create context-aware tool suggestion engine
|
|
40
|
+
- Add learning from user preferences
|
|
41
|
+
|
|
42
|
+
**Priority**: Medium
|
|
43
|
+
**Estimated Effort**: 2-3 weeks
|
|
44
|
+
|
|
45
|
+
### 4. Batch Operations ✅
|
|
46
|
+
**Goal**: Support efficient bulk operations
|
|
47
|
+
**Implementation Plan**:
|
|
48
|
+
- Design batch operation API ✅
|
|
49
|
+
- Implement parallel execution for independent operations ✅
|
|
50
|
+
- Add progress tracking for batch jobs
|
|
51
|
+
- Create batch operation templates
|
|
52
|
+
|
|
53
|
+
**Status**: Implemented - execute_batch() with asyncio.gather() for parallel execution
|
|
54
|
+
**Priority**: Medium
|
|
55
|
+
**Estimated Effort**: 2 weeks
|
|
56
|
+
|
|
57
|
+
### 5. Interactive Preview Mode
|
|
58
|
+
**Goal**: Safe editing with preview capabilities
|
|
59
|
+
**Implementation Plan**:
|
|
60
|
+
- Implement diff generation for file changes
|
|
61
|
+
- Create preview interface for tool outputs
|
|
62
|
+
- Add confirmation workflows for destructive operations
|
|
63
|
+
- Design undo/redo capability
|
|
64
|
+
|
|
65
|
+
**Priority**: Medium
|
|
66
|
+
**Estimated Effort**: 2-3 weeks
|
|
67
|
+
|
|
68
|
+
### 6. State Management
|
|
69
|
+
**Goal**: Maintain context across tool interactions
|
|
70
|
+
**Implementation Plan**:
|
|
71
|
+
- Design session state management system
|
|
72
|
+
- Implement tool usage history tracking
|
|
73
|
+
- Create context persistence across turns
|
|
74
|
+
- Add state visualization and management tools
|
|
75
|
+
|
|
76
|
+
**Priority**: Low
|
|
77
|
+
**Estimated Effort**: 3 weeks
|
|
78
|
+
|
|
79
|
+
### 7. Tool Composition
|
|
80
|
+
**Goal**: Create higher-level tools from basic ones
|
|
81
|
+
**Implementation Plan**:
|
|
82
|
+
- Design tool composition language
|
|
83
|
+
- Implement tool template system
|
|
84
|
+
- Create tool library with common compositions
|
|
85
|
+
- Add tool composition sharing mechanism
|
|
86
|
+
|
|
87
|
+
**Priority**: Medium
|
|
88
|
+
**Estimated Effort**: 3 weeks
|
|
89
|
+
|
|
90
|
+
### 8. Progress Feedback
|
|
91
|
+
**Goal**: Provide real-time feedback for long operations
|
|
92
|
+
**Implementation Plan**:
|
|
93
|
+
- Implement progress tracking framework
|
|
94
|
+
- Create progress visualization components
|
|
95
|
+
- Add estimated time remaining calculations
|
|
96
|
+
- Design interruptible operations
|
|
97
|
+
|
|
98
|
+
**Priority**: Low
|
|
99
|
+
**Estimated Effort**: 2 weeks
|
|
100
|
+
|
|
101
|
+
### 9. Resource Management
|
|
102
|
+
**Goal**: Efficient handling of large resources
|
|
103
|
+
**Implementation Plan**:
|
|
104
|
+
- Implement streaming file processing
|
|
105
|
+
- Add memory usage monitoring and limits
|
|
106
|
+
- Create resource cleanup mechanisms
|
|
107
|
+
- Design pagination for large outputs
|
|
108
|
+
|
|
109
|
+
**Priority**: Medium
|
|
110
|
+
**Estimated Effort**: 2 weeks
|
|
111
|
+
|
|
112
|
+
### 10. Tool Validation & Safety
|
|
113
|
+
**Goal**: Prevent errors through validation
|
|
114
|
+
**Implementation Plan**:
|
|
115
|
+
- Create comprehensive parameter validation system
|
|
116
|
+
- Implement pre-execution safety checks
|
|
117
|
+
- Add tool-specific validation rules
|
|
118
|
+
- Design validation feedback system
|
|
119
|
+
|
|
120
|
+
**Priority**: High
|
|
121
|
+
**Estimated Effort**: 2 weeks
|
|
122
|
+
|
|
123
|
+
### 11. Learning from Usage Patterns
|
|
124
|
+
**Goal**: Adaptive tool behavior based on usage
|
|
125
|
+
**Implementation Plan**:
|
|
126
|
+
- Implement usage pattern collection
|
|
127
|
+
- Create pattern analysis engine
|
|
128
|
+
- Design adaptive tool suggestions
|
|
129
|
+
- Add user preference learning
|
|
130
|
+
|
|
131
|
+
**Priority**: Low
|
|
132
|
+
**Estimated Effort**: 4 weeks
|
|
133
|
+
|
|
134
|
+
### 12. Cross-Tool Optimization
|
|
135
|
+
**Goal**: Optimize sequences of tool calls
|
|
136
|
+
**Implementation Plan**:
|
|
137
|
+
- Implement tool call caching system
|
|
138
|
+
- Create dependency analysis for tool sequences
|
|
139
|
+
- Design optimization rules engine
|
|
140
|
+
- Add performance monitoring
|
|
141
|
+
|
|
142
|
+
**Priority**: Low
|
|
143
|
+
**Estimated Effort**: 3 weeks
|
|
144
|
+
|
|
145
|
+
### 13. Better Documentation Integration
|
|
146
|
+
**Goal**: Inline help and examples
|
|
147
|
+
**Implementation Plan**:
|
|
148
|
+
- Enhance tool documentation system
|
|
149
|
+
- Create interactive help with examples
|
|
150
|
+
- Implement context-sensitive documentation
|
|
151
|
+
- Add tool tutorial system
|
|
152
|
+
|
|
153
|
+
**Priority**: Medium
|
|
154
|
+
**Estimated Effort**: 2 weeks
|
|
155
|
+
|
|
156
|
+
### 14. Tool Discovery & Suggestions
|
|
157
|
+
**Goal**: Help users find the right tools
|
|
158
|
+
**Implementation Plan**:
|
|
159
|
+
- Create tool discovery interface
|
|
160
|
+
- Implement intent-based tool matching
|
|
161
|
+
- Add tool recommendation engine
|
|
162
|
+
- Design tool exploration features
|
|
163
|
+
|
|
164
|
+
**Priority**: Medium
|
|
165
|
+
**Estimated Effort**: 2 weeks
|
|
166
|
+
|
|
167
|
+
### 15. Permission & Safety Controls
|
|
168
|
+
**Goal**: Configurable security boundaries
|
|
169
|
+
**Implementation Plan**:
|
|
170
|
+
- Design permission system architecture
|
|
171
|
+
- Implement tool access controls
|
|
172
|
+
- Create safety confirmation workflows
|
|
173
|
+
- Add audit logging for sensitive operations
|
|
174
|
+
|
|
175
|
+
**Priority**: High
|
|
176
|
+
**Estimated Effort**: 3 weeks
|
|
177
|
+
|
|
178
|
+
## Implementation Phases
|
|
179
|
+
|
|
180
|
+
### Phase 1: Foundation (Weeks 1-6)
|
|
181
|
+
1. Error Handling & Recovery
|
|
182
|
+
2. Tool Validation & Safety
|
|
183
|
+
3. Permission & Safety Controls
|
|
184
|
+
|
|
185
|
+
### Phase 2: Intelligence (Weeks 7-12)
|
|
186
|
+
1. Context-Aware Tool Selection
|
|
187
|
+
2. Tool Discovery & Suggestions
|
|
188
|
+
3. Better Documentation Integration
|
|
189
|
+
|
|
190
|
+
### Phase 3: Efficiency (Weeks 13-18)
|
|
191
|
+
1. Tool Chaining & Pipelining
|
|
192
|
+
2. Batch Operations
|
|
193
|
+
3. Resource Management
|
|
194
|
+
|
|
195
|
+
### Phase 4: User Experience (Weeks 19-24)
|
|
196
|
+
1. Interactive Preview Mode
|
|
197
|
+
2. Progress Feedback
|
|
198
|
+
3. Tool Composition
|
|
199
|
+
|
|
200
|
+
### Phase 5: Advanced Features (Weeks 25-30)
|
|
201
|
+
1. State Management
|
|
202
|
+
2. Learning from Usage Patterns
|
|
203
|
+
3. Cross-Tool Optimization
|
|
204
|
+
|
|
205
|
+
## Success Metrics
|
|
206
|
+
- 50% reduction in tool usage errors
|
|
207
|
+
- 30% improvement in task completion time
|
|
208
|
+
- 40% increase in user satisfaction scores
|
|
209
|
+
- 25% reduction in manual tool selection
|
|
210
|
+
|
|
211
|
+
## Risks & Mitigations
|
|
212
|
+
1. **Performance Overhead**: Monitor and optimize critical paths
|
|
213
|
+
2. **Complexity Creep**: Maintain backward compatibility
|
|
214
|
+
3. **Security Concerns**: Implement thorough security reviews
|
|
215
|
+
4. **User Adoption**: Provide gradual migration paths
|
|
216
|
+
|
|
217
|
+
## Dependencies
|
|
218
|
+
- Current tool system architecture
|
|
219
|
+
- User feedback and usage patterns
|
|
220
|
+
- Available development resources
|
|
221
|
+
|
|
222
|
+
## Next Steps
|
|
223
|
+
1. Review current tool implementation code
|
|
224
|
+
2. Create detailed design documents for Phase 1
|
|
225
|
+
3. Set up development environment and testing infrastructure
|
|
226
|
+
4. Begin implementation of error handling improvements
|
|
227
|
+
|
|
228
|
+
## Conclusion
|
|
229
|
+
This comprehensive improvement plan will transform Henchman-AI's tool usage from basic command execution to an intelligent, efficient, and user-friendly system. The phased approach ensures manageable development while delivering continuous value to users.
|
|
230
|
+
|
|
231
|
+
Last Updated: $(date)
|
|
232
|
+
Project Lead: [To be assigned]
|
|
233
|
+
Status: Planning Phase
|