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.
Files changed (234) hide show
  1. henchman_ai-0.1.9/CHANGELOG.md +172 -0
  2. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/PKG-INFO +1 -1
  3. henchman_ai-0.1.9/PROJECT_PLAN.md +233 -0
  4. henchman_ai-0.1.9/TOOL_CHAINING_DESIGN.md +425 -0
  5. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/pyproject.toml +1 -1
  6. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/scripts/ci.sh +5 -3
  7. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/builtins.py +2 -0
  8. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/chat.py +29 -0
  9. henchman_ai-0.1.9/src/henchman/cli/commands/unlimited.py +70 -0
  10. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/input.py +6 -4
  11. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/prompts.py +2 -2
  12. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/repl.py +105 -14
  13. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/config/schema.py +14 -0
  14. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/core/__init__.py +11 -1
  15. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/core/agent.py +70 -18
  16. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/core/events.py +2 -0
  17. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/core/session.py +47 -0
  18. henchman_ai-0.1.9/src/henchman/core/turn.py +247 -0
  19. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/registry.py +111 -8
  20. henchman_ai-0.1.9/src/henchman/utils/__init__.py +15 -0
  21. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/utils/compaction.py +174 -51
  22. henchman_ai-0.1.9/src/henchman/utils/retry.py +166 -0
  23. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/utils/tokens.py +1 -1
  24. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/utils/validation.py +5 -0
  25. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/version.py +1 -1
  26. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/commands/test_plan.py +13 -13
  27. henchman_ai-0.1.9/tests/cli/commands/test_unlimited.py +345 -0
  28. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_chat_command.py +127 -0
  29. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_cli_smoke.py +6 -6
  30. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_keyboard_fixes.py +1 -1
  31. henchman_ai-0.1.9/tests/cli/test_loop_protection.py +213 -0
  32. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_repl.py +102 -0
  33. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/test_streaming_tool_calls.py +1 -1
  34. henchman_ai-0.1.9/tests/core/test_turn_state.py +188 -0
  35. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/e2e/test_context_safety.py +10 -10
  36. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/e2e/test_tool_fix.py +2 -2
  37. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/empty_message_validation/test_empty_messages.py +6 -6
  38. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/integration/test_context_limits.py +58 -58
  39. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_413_error_handling.py +4 -4
  40. henchman_ai-0.1.9/tests/smoke/test_escape_key_behavior.py +309 -0
  41. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/smoke/test_large_file_handling.py +35 -34
  42. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/test_coverage_suite.py +20 -16
  43. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_registry.py +258 -1
  44. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_agent.py +74 -78
  45. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_compaction_llm.py +11 -15
  46. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_events.py +17 -18
  47. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_llm.py +66 -71
  48. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_mcp.py +37 -37
  49. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_plan_mode.py +45 -47
  50. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_repl_integration.py +2 -2
  51. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_session.py +14 -16
  52. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_skills.py +2 -3
  53. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_slash_commands.py +2 -2
  54. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_tokens_llm.py +18 -22
  55. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_tool_calls.py +63 -64
  56. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_compaction.py +11 -3
  57. henchman_ai-0.1.9/tests/utils/test_compaction_edge_cases.py +137 -0
  58. henchman_ai-0.1.9/tests/utils/test_compaction_validation.py +241 -0
  59. henchman_ai-0.1.9/tests/utils/test_protected_zone.py +138 -0
  60. henchman_ai-0.1.9/tests/utils/test_retry.py +224 -0
  61. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_summarization.py +37 -36
  62. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_tiktoken_integration.py +5 -6
  63. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_tool_sequence_compaction.py +24 -25
  64. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_validation.py +28 -28
  65. henchman_ai-0.1.7/400_error.md +0 -90
  66. henchman_ai-0.1.7/400_error_final_report.md +0 -152
  67. henchman_ai-0.1.7/400_error_fix_report.md +0 -46
  68. henchman_ai-0.1.7/ATTRIBUTE_ERROR_FIX_SUMMARY.md +0 -89
  69. henchman_ai-0.1.7/CHANGELOG.md +0 -93
  70. henchman_ai-0.1.7/CI_100_PERCENT_PASS_RATE_ANALYSIS.md +0 -143
  71. henchman_ai-0.1.7/CI_FIX_ACTION_PLAN.md +0 -55
  72. henchman_ai-0.1.7/CI_FIX_PROGRESS_SUMMARY.md +0 -26
  73. henchman_ai-0.1.7/CI_PIPELINE_COMPREHENSIVE_ANALYSIS.md +0 -151
  74. henchman_ai-0.1.7/FUNCTIONAL_TEST_IMPLEMENTATION_SUMMARY.md +0 -128
  75. henchman_ai-0.1.7/IMPLEMENTATION_PLAN.md +0 -1900
  76. henchman_ai-0.1.7/INTEGRATION_TESTING.md +0 -145
  77. henchman_ai-0.1.7/INTEGRATION_TESTING_PROGRESS_SUMMARY.md +0 -25
  78. henchman_ai-0.1.7/INTEGRATION_TESTING_TASK_COMPLETION.md +0 -28
  79. henchman_ai-0.1.7/KEYBOARD_INTERRUPT_FIXES_SUMMARY.md +0 -74
  80. henchman_ai-0.1.7/UI_INTEGRATION_TESTING_SUMMARY.md +0 -157
  81. henchman_ai-0.1.7/UI_TOOL_CALLS_SUMMARY.md +0 -10
  82. henchman_ai-0.1.7/analyze_400_error.py +0 -156
  83. henchman_ai-0.1.7/compaction_bug_analysis.md +0 -200
  84. henchman_ai-0.1.7/detailed_400_analysis.md +0 -188
  85. henchman_ai-0.1.7/src/henchman/utils/__init__.py +0 -1
  86. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/.github/copilot-instructions.md +0 -0
  87. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/.github/workflows/ci.yml +0 -0
  88. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/.github/workflows/publish.yml +0 -0
  89. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/.gitignore +0 -0
  90. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/LICENSE +0 -0
  91. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/README.md +0 -0
  92. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/TASK_COMPLETION_SUMMARY.md +0 -0
  93. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/debug_compaction.py +0 -0
  94. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/api.md +0 -0
  95. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/configuration.md +0 -0
  96. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/extensions.md +0 -0
  97. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/getting-started.md +0 -0
  98. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/index.md +0 -0
  99. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/mcp.md +0 -0
  100. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/providers.md +0 -0
  101. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/docs/tools.md +0 -0
  102. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/fix_repl.py +0 -0
  103. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/fix_repl_simple.py +0 -0
  104. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/mkdocs.yml +0 -0
  105. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/replace_method.py +0 -0
  106. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/reproduce_400_error.py +0 -0
  107. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/run_interactive_tests.py +0 -0
  108. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/__init__.py +0 -0
  109. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/__main__.py +0 -0
  110. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/__init__.py +0 -0
  111. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/app.py +0 -0
  112. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/__init__.py +0 -0
  113. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/extensions.py +0 -0
  114. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/mcp.py +0 -0
  115. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/plan.py +0 -0
  116. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/commands/skill.py +0 -0
  117. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/console.py +0 -0
  118. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/json_output.py +0 -0
  119. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/repl.py.backup +0 -0
  120. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/cli/repl.py.backup2 +0 -0
  121. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/config/__init__.py +0 -0
  122. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/config/context.py +0 -0
  123. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/config/settings.py +0 -0
  124. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/core/agent.py.backup +0 -0
  125. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/extensions/__init__.py +0 -0
  126. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/extensions/base.py +0 -0
  127. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/extensions/manager.py +0 -0
  128. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/mcp/__init__.py +0 -0
  129. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/mcp/client.py +0 -0
  130. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/mcp/config.py +0 -0
  131. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/mcp/manager.py +0 -0
  132. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/mcp/tool.py +0 -0
  133. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/__init__.py +0 -0
  134. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/anthropic.py +0 -0
  135. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/base.py +0 -0
  136. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/deepseek.py +0 -0
  137. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/ollama.py +0 -0
  138. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/openai_compat.py +0 -0
  139. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/openai_compat.py.backup +0 -0
  140. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/providers/registry.py +0 -0
  141. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/skills/__init__.py +0 -0
  142. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/skills/executor.py +0 -0
  143. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/skills/learner.py +0 -0
  144. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/skills/models.py +0 -0
  145. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/skills/store.py +0 -0
  146. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/__init__.py +0 -0
  147. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/base.py +0 -0
  148. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/__init__.py +0 -0
  149. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/ask_user.py +0 -0
  150. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/file_edit.py +0 -0
  151. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/file_read.py +0 -0
  152. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/file_write.py +0 -0
  153. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/glob_tool.py +0 -0
  154. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/grep.py +0 -0
  155. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/ls.py +0 -0
  156. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/shell.py +0 -0
  157. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/src/henchman/tools/builtins/web_fetch.py +0 -0
  158. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/test_compaction.py +0 -0
  159. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/test_compaction_fix.py +0 -0
  160. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/test_fixes.py +0 -0
  161. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/test_output.txt +0 -0
  162. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/test_run.py +0 -0
  163. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/__init__.py +0 -0
  164. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/__init__.py +0 -0
  165. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/commands/test_skill.py +0 -0
  166. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/commands/test_skill_extended.py +0 -0
  167. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_app.py +0 -0
  168. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_app_extended.py +0 -0
  169. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_builtins.py +0 -0
  170. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_commands.py +0 -0
  171. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_commands_repro.py +0 -0
  172. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_console.py +0 -0
  173. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_enhanced_tool_display.py +0 -0
  174. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_input.py +0 -0
  175. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_input_bindings.py +0 -0
  176. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_json_output.py +0 -0
  177. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_keyboard_integration.py +0 -0
  178. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_keyboard_interrupt.py +0 -0
  179. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_keyboard_verification.py +0 -0
  180. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_mcp_command.py +0 -0
  181. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_repl_attribute_fix.py +0 -0
  182. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_repl_startup_message.py +0 -0
  183. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/cli/test_repl_toolbar.py +0 -0
  184. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/config/__init__.py +0 -0
  185. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/config/test_context.py +0 -0
  186. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/config/test_schema.py +0 -0
  187. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/config/test_settings.py +0 -0
  188. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/conftest.py +0 -0
  189. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/__init__.py +0 -0
  190. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/test_automatic_compaction.py +0 -0
  191. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/test_events.py +0 -0
  192. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/test_session.py +0 -0
  193. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/core/test_session_manager.py +0 -0
  194. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/extensions/__init__.py +0 -0
  195. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/extensions/test_base.py +0 -0
  196. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/extensions/test_command.py +0 -0
  197. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/extensions/test_manager.py +0 -0
  198. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/integration/test_tool_integration.py +0 -0
  199. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/mcp/__init__.py +0 -0
  200. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/mcp/test_client.py +0 -0
  201. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/mcp/test_config.py +0 -0
  202. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/mcp/test_manager.py +0 -0
  203. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/mcp/test_tool.py +0 -0
  204. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/__init__.py +0 -0
  205. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_anthropic.py +0 -0
  206. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_base.py +0 -0
  207. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_deepseek.py +0 -0
  208. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_ollama.py +0 -0
  209. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_openai_compat.py +0 -0
  210. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/providers/test_registry.py +0 -0
  211. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_executor.py +0 -0
  212. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_learner.py +0 -0
  213. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_markdown_skills.py +0 -0
  214. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_models.py +0 -0
  215. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_store.py +0 -0
  216. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/skills/test_store_extended.py +0 -0
  217. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/test_main.py +0 -0
  218. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/test_version.py +0 -0
  219. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/__init__.py +0 -0
  220. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_ask_user_tool.py +0 -0
  221. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_base.py +0 -0
  222. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_directory_tools.py +0 -0
  223. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_file_tools.py +0 -0
  224. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_grep_tool.py +0 -0
  225. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_plan_mode_enforcement.py +0 -0
  226. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_shell_tool.py +0 -0
  227. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/tools/test_web_fetch_tool.py +0 -0
  228. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/INTERACTIVE_SESSION_TESTS.md +0 -0
  229. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/__init__.py +0 -0
  230. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/conftest.py +0 -0
  231. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_repl_e2e.py +0 -0
  232. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/ui_integration/test_tool_integration.py +0 -0
  233. {henchman_ai-0.1.7 → henchman_ai-0.1.9}/tests/utils/test_multi_turn_tool_calls.py +0 -0
  234. {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.7
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