henchman-ai 0.1.12__tar.gz → 0.1.14__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 (364) hide show
  1. henchman_ai-0.1.14/.github/workflows/docs.yml +56 -0
  2. henchman_ai-0.1.14/BETA_TESTING_ISSUES3.md +35 -0
  3. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/CHANGELOG.md +20 -0
  4. henchman_ai-0.1.14/CONTRIBUTING.md +220 -0
  5. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134508855764000/b0c5ce5844ad8acc/.rag.lock +0 -0
  6. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134604944477792/b0c5ce5844ad8acc/.rag.lock +0 -0
  7. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134604945877536/b0c5ce5844ad8acc/.rag.lock +0 -0
  8. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134604946059776/b0c5ce5844ad8acc/.rag.lock +0 -0
  9. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134605456585744/b0c5ce5844ad8acc/.rag.lock +0 -0
  10. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134618534097648/b0c5ce5844ad8acc/.rag.lock +0 -0
  11. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134618535070656/b0c5ce5844ad8acc/.rag.lock +0 -0
  12. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134619942883056/b0c5ce5844ad8acc/.rag.lock +0 -0
  13. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134620110571280/b0c5ce5844ad8acc/.rag.lock +0 -0
  14. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/138555538485184/b0c5ce5844ad8acc/.rag.lock +0 -0
  15. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/138555538874752/b0c5ce5844ad8acc/.rag.lock +0 -0
  16. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/138555539451408/b0c5ce5844ad8acc/.rag.lock +0 -0
  17. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/138556062045760/b0c5ce5844ad8acc/.rag.lock +0 -0
  18. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/139088593563008/b0c5ce5844ad8acc/.rag.lock +0 -0
  19. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/139088594086144/b0c5ce5844ad8acc/.rag.lock +0 -0
  20. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/139088594201216/b0c5ce5844ad8acc/.rag.lock +0 -0
  21. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/139088659820192/b0c5ce5844ad8acc/.rag.lock +0 -0
  22. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/139391159286624/b0c5ce5844ad8acc/.rag.lock +0 -0
  23. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/139391160298352/b0c5ce5844ad8acc/.rag.lock +0 -0
  24. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/139391160361968/b0c5ce5844ad8acc/.rag.lock +0 -0
  25. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/139391778658240/b0c5ce5844ad8acc/.rag.lock +0 -0
  26. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/140323476876816/b0c5ce5844ad8acc/.rag.lock +0 -0
  27. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/140323493157376/b0c5ce5844ad8acc/.rag.lock +0 -0
  28. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/140323629475472/b0c5ce5844ad8acc/.rag.lock +0 -0
  29. henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/140324020609984/b0c5ce5844ad8acc/.rag.lock +0 -0
  30. henchman_ai-0.1.14/PKG-INFO +317 -0
  31. henchman_ai-0.1.14/README.md +260 -0
  32. henchman_ai-0.1.14/README_enhanced.md +260 -0
  33. henchman_ai-0.1.14/RELEASE_CHECKLIST.md +106 -0
  34. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/pyproject.toml +12 -2
  35. henchman_ai-0.1.14/scripts/build_docs.py +151 -0
  36. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/input.py +2 -2
  37. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/repl.py +44 -8
  38. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/core/session.py +18 -4
  39. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/builtins/__init__.py +2 -0
  40. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/builtins/shell.py +4 -0
  41. henchman_ai-0.1.14/src/henchman/tools/builtins/web_search.py +129 -0
  42. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/version.py +1 -1
  43. henchman_ai-0.1.14/tests/MagicMock/mock.rag.cache_dir/125572362825280/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin +0 -0
  44. henchman_ai-0.1.14/tests/MagicMock/mock.rag.cache_dir/125572765096208/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin +0 -0
  45. henchman_ai-0.1.14/tests/MagicMock/mock.rag.cache_dir/125572822401392/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin +0 -0
  46. henchman_ai-0.1.14/tests/MagicMock/mock.rag.cache_dir/125572896176320/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin +0 -0
  47. henchman_ai-0.1.14/tests/MagicMock/mock.rag.cache_dir/135520285986352/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin +0 -0
  48. henchman_ai-0.1.14/tests/MagicMock/mock.rag.cache_dir/135520286228656/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin +0 -0
  49. henchman_ai-0.1.14/tests/MagicMock/mock.rag.cache_dir/135520287933552/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin +0 -0
  50. henchman_ai-0.1.14/tests/MagicMock/mock.rag.cache_dir/135520588106160/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin +0 -0
  51. henchman_ai-0.1.14/tests/__init__.py +0 -0
  52. henchman_ai-0.1.14/tests/cli/__init__.py +0 -0
  53. henchman_ai-0.1.14/tests/cli/commands/test_session_resume_id.py +53 -0
  54. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_app_extended.py +1 -1
  55. henchman_ai-0.1.14/tests/cli/test_interrupt.py +84 -0
  56. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_keyboard_fixes.py +1 -1
  57. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_keyboard_interrupt.py +2 -2
  58. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_loop_protection.py +4 -3
  59. henchman_ai-0.1.14/tests/config/__init__.py +0 -0
  60. henchman_ai-0.1.14/tests/core/__init__.py +0 -0
  61. henchman_ai-0.1.14/tests/e2e/test_plan_mode_workflow.py +59 -0
  62. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/e2e/test_tool_fix.py +4 -0
  63. henchman_ai-0.1.14/tests/mcp/__init__.py +0 -0
  64. henchman_ai-0.1.14/tests/providers/__init__.py +0 -0
  65. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/test_rag_command.py +5 -5
  66. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/smoke/test_escape_key_behavior.py +30 -25
  67. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/test_version.py +2 -2
  68. henchman_ai-0.1.14/tests/tools/__init__.py +0 -0
  69. henchman_ai-0.1.14/tests/tools/test_shell_advanced.py +38 -0
  70. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_tool_calls.py +9 -0
  71. henchman_ai-0.1.12/PKG-INFO +0 -144
  72. henchman_ai-0.1.12/README.md +0 -97
  73. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/.github/copilot-instructions.md +0 -0
  74. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/.github/workflows/ci.yml +0 -0
  75. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/.github/workflows/publish.yml +0 -0
  76. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/.gitignore +0 -0
  77. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/ALPHA_TEST_LOG.md +0 -0
  78. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/BETA_TESTING_ISSUES.md +0 -0
  79. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/BETA_TESTING_ISSUES2.md +0 -0
  80. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/LICENSE +0 -0
  81. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/131782863223120 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125050554038512}/b0c5ce5844ad8acc/.rag.lock +0 -0
  82. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/131782952758032 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125050555035824}/b0c5ce5844ad8acc/.rag.lock +0 -0
  83. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/131782953186608 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125050555125200}/b0c5ce5844ad8acc/.rag.lock +0 -0
  84. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/131783467925184 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125051893219152}/b0c5ce5844ad8acc/.rag.lock +0 -0
  85. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/131953655609296 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125080879298512}/b0c5ce5844ad8acc/.rag.lock +0 -0
  86. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/131953656855104 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125080879878832}/b0c5ce5844ad8acc/.rag.lock +0 -0
  87. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/131954146008512 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125080880913088}/b0c5ce5844ad8acc/.rag.lock +0 -0
  88. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/131954155550192 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125081401798976}/b0c5ce5844ad8acc/.rag.lock +0 -0
  89. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/134508512171968 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125246043105824}/b0c5ce5844ad8acc/.rag.lock +0 -0
  90. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/134508512231200 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125246043924496}/b0c5ce5844ad8acc/.rag.lock +0 -0
  91. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/134508512485616 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125246044001472}/b0c5ce5844ad8acc/.rag.lock +0 -0
  92. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/134508855764000 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/125247627445840}/b0c5ce5844ad8acc/.rag.lock +0 -0
  93. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/139391159286624 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/131782863223120}/b0c5ce5844ad8acc/.rag.lock +0 -0
  94. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/139391160298352 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/131782952758032}/b0c5ce5844ad8acc/.rag.lock +0 -0
  95. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/139391160361968 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/131782953186608}/b0c5ce5844ad8acc/.rag.lock +0 -0
  96. {henchman_ai-0.1.12/MagicMock/mock.rag.cache_dir/139391778658240 → henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/131783467925184}/b0c5ce5844ad8acc/.rag.lock +0 -0
  97. /henchman_ai-0.1.12/tests/MagicMock/mock.rag.cache_dir/125572362825280/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/131953655609296/b0c5ce5844ad8acc/.rag.lock +0 -0
  98. /henchman_ai-0.1.12/tests/MagicMock/mock.rag.cache_dir/125572765096208/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/131953656855104/b0c5ce5844ad8acc/.rag.lock +0 -0
  99. /henchman_ai-0.1.12/tests/MagicMock/mock.rag.cache_dir/125572822401392/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/131954146008512/b0c5ce5844ad8acc/.rag.lock +0 -0
  100. /henchman_ai-0.1.12/tests/MagicMock/mock.rag.cache_dir/125572896176320/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/131954155550192/b0c5ce5844ad8acc/.rag.lock +0 -0
  101. /henchman_ai-0.1.12/tests/MagicMock/mock.rag.cache_dir/135520285986352/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/133226809006208/b0c5ce5844ad8acc/.rag.lock +0 -0
  102. /henchman_ai-0.1.12/tests/MagicMock/mock.rag.cache_dir/135520286228656/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/133226810375248/b0c5ce5844ad8acc/.rag.lock +0 -0
  103. /henchman_ai-0.1.12/tests/MagicMock/mock.rag.cache_dir/135520287933552/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/133226812410672/b0c5ce5844ad8acc/.rag.lock +0 -0
  104. /henchman_ai-0.1.12/tests/MagicMock/mock.rag.cache_dir/135520588106160/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/link_lists.bin → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/133227143444000/b0c5ce5844ad8acc/.rag.lock +0 -0
  105. /henchman_ai-0.1.12/tests/__init__.py → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/133999527639808/b0c5ce5844ad8acc/.rag.lock +0 -0
  106. /henchman_ai-0.1.12/tests/cli/__init__.py → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/133999929687216/b0c5ce5844ad8acc/.rag.lock +0 -0
  107. /henchman_ai-0.1.12/tests/config/__init__.py → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/133999955332368/b0c5ce5844ad8acc/.rag.lock +0 -0
  108. /henchman_ai-0.1.12/tests/core/__init__.py → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134000027622176/b0c5ce5844ad8acc/.rag.lock +0 -0
  109. /henchman_ai-0.1.12/tests/mcp/__init__.py → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134508512171968/b0c5ce5844ad8acc/.rag.lock +0 -0
  110. /henchman_ai-0.1.12/tests/providers/__init__.py → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134508512231200/b0c5ce5844ad8acc/.rag.lock +0 -0
  111. /henchman_ai-0.1.12/tests/tools/__init__.py → /henchman_ai-0.1.14/MagicMock/mock.rag.cache_dir/134508512485616/b0c5ce5844ad8acc/.rag.lock +0 -0
  112. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/PROJECT_PLAN.md +0 -0
  113. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/TASK_COMPLETION_SUMMARY.md +0 -0
  114. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/debug_compaction.py +0 -0
  115. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/docs/api.md +0 -0
  116. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/docs/configuration.md +0 -0
  117. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/docs/extensions.md +0 -0
  118. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/docs/getting-started.md +0 -0
  119. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/docs/index.md +0 -0
  120. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/docs/mcp.md +0 -0
  121. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/docs/providers.md +0 -0
  122. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/docs/tools.md +0 -0
  123. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/evals/README.md +0 -0
  124. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/evals/__init__.py +0 -0
  125. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/evals/conftest.py +0 -0
  126. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/evals/helpers.py +0 -0
  127. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/evals/test_answer_vs_action.py +0 -0
  128. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/evals/test_coding_tasks.py +0 -0
  129. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/evals/test_edit_precision.py +0 -0
  130. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/evals/test_skills_memory.py +0 -0
  131. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/evals/test_tool_selection.py +0 -0
  132. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/fix_repl.py +0 -0
  133. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/fix_repl_simple.py +0 -0
  134. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/mkdocs.yml +0 -0
  135. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/replace_method.py +0 -0
  136. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/reproduce_400_error.py +0 -0
  137. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/run_interactive_tests.py +0 -0
  138. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/scripts/ci.sh +0 -0
  139. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/scripts/run_evals.sh +0 -0
  140. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/__init__.py +0 -0
  141. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/__main__.py +0 -0
  142. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/__init__.py +0 -0
  143. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/app.py +0 -0
  144. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/commands/__init__.py +0 -0
  145. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/commands/builtins.py +0 -0
  146. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/commands/chat.py +0 -0
  147. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/commands/extensions.py +0 -0
  148. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/commands/mcp.py +0 -0
  149. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/commands/plan.py +0 -0
  150. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/commands/rag.py +0 -0
  151. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/commands/skill.py +0 -0
  152. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/commands/unlimited.py +0 -0
  153. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/console.py +0 -0
  154. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/json_output.py +0 -0
  155. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/prompts.py +0 -0
  156. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/repl.py.backup +0 -0
  157. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/cli/repl.py.backup2 +0 -0
  158. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/config/__init__.py +0 -0
  159. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/config/context.py +0 -0
  160. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/config/schema.py +0 -0
  161. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/config/settings.py +0 -0
  162. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/core/__init__.py +0 -0
  163. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/core/agent.py +0 -0
  164. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/core/agent.py.backup +0 -0
  165. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/core/events.py +0 -0
  166. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/core/turn.py +0 -0
  167. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/extensions/__init__.py +0 -0
  168. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/extensions/base.py +0 -0
  169. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/extensions/manager.py +0 -0
  170. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/mcp/__init__.py +0 -0
  171. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/mcp/client.py +0 -0
  172. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/mcp/config.py +0 -0
  173. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/mcp/manager.py +0 -0
  174. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/mcp/tool.py +0 -0
  175. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/providers/__init__.py +0 -0
  176. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/providers/anthropic.py +0 -0
  177. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/providers/base.py +0 -0
  178. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/providers/deepseek.py +0 -0
  179. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/providers/ollama.py +0 -0
  180. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/providers/openai_compat.py +0 -0
  181. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/providers/openai_compat.py.backup +0 -0
  182. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/providers/registry.py +0 -0
  183. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/rag/__init__.py +0 -0
  184. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/rag/chunker.py +0 -0
  185. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/rag/concurrency.py +0 -0
  186. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/rag/embedder.py +0 -0
  187. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/rag/indexer.py +0 -0
  188. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/rag/repo_id.py +0 -0
  189. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/rag/store.py +0 -0
  190. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/rag/system.py +0 -0
  191. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/skills/__init__.py +0 -0
  192. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/skills/executor.py +0 -0
  193. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/skills/learner.py +0 -0
  194. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/skills/models.py +0 -0
  195. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/skills/store.py +0 -0
  196. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/__init__.py +0 -0
  197. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/base.py +0 -0
  198. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/builtins/ask_user.py +0 -0
  199. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/builtins/file_edit.py +0 -0
  200. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/builtins/file_read.py +0 -0
  201. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/builtins/file_write.py +0 -0
  202. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/builtins/glob_tool.py +0 -0
  203. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/builtins/grep.py +0 -0
  204. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/builtins/ls.py +0 -0
  205. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/builtins/rag_search.py +0 -0
  206. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/builtins/web_fetch.py +0 -0
  207. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/tools/registry.py +0 -0
  208. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/utils/__init__.py +0 -0
  209. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/utils/compaction.py +0 -0
  210. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/utils/retry.py +0 -0
  211. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/utils/tokens.py +0 -0
  212. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/src/henchman/utils/validation.py +0 -0
  213. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/test_compaction.py +0 -0
  214. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/test_compaction_fix.py +0 -0
  215. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/test_fixes.py +0 -0
  216. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/test_output.txt +0 -0
  217. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/test_run.py +0 -0
  218. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572362825280/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/data_level0.bin +0 -0
  219. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572362825280/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/header.bin +0 -0
  220. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572362825280/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/length.bin +0 -0
  221. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572362825280/b0c5ce5844ad8acc/chroma/chroma.sqlite3 +0 -0
  222. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572362825280/b0c5ce5844ad8acc/manifest.json +0 -0
  223. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572765096208/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/data_level0.bin +0 -0
  224. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572765096208/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/header.bin +0 -0
  225. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572765096208/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/length.bin +0 -0
  226. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572765096208/b0c5ce5844ad8acc/chroma/chroma.sqlite3 +0 -0
  227. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572765096208/b0c5ce5844ad8acc/manifest.json +0 -0
  228. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572822401392/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/data_level0.bin +0 -0
  229. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572822401392/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/header.bin +0 -0
  230. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572822401392/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/length.bin +0 -0
  231. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572822401392/b0c5ce5844ad8acc/chroma/chroma.sqlite3 +0 -0
  232. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572822401392/b0c5ce5844ad8acc/manifest.json +0 -0
  233. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572896176320/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/data_level0.bin +0 -0
  234. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572896176320/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/header.bin +0 -0
  235. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572896176320/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/length.bin +0 -0
  236. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572896176320/b0c5ce5844ad8acc/chroma/chroma.sqlite3 +0 -0
  237. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/125572896176320/b0c5ce5844ad8acc/manifest.json +0 -0
  238. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520285986352/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/data_level0.bin +0 -0
  239. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520285986352/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/header.bin +0 -0
  240. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520285986352/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/length.bin +0 -0
  241. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520285986352/b0c5ce5844ad8acc/chroma/chroma.sqlite3 +0 -0
  242. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520285986352/b0c5ce5844ad8acc/manifest.json +0 -0
  243. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520286228656/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/data_level0.bin +0 -0
  244. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520286228656/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/header.bin +0 -0
  245. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520286228656/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/length.bin +0 -0
  246. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520286228656/b0c5ce5844ad8acc/chroma/chroma.sqlite3 +0 -0
  247. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520286228656/b0c5ce5844ad8acc/manifest.json +0 -0
  248. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520287933552/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/data_level0.bin +0 -0
  249. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520287933552/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/header.bin +0 -0
  250. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520287933552/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/length.bin +0 -0
  251. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520287933552/b0c5ce5844ad8acc/chroma/chroma.sqlite3 +0 -0
  252. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520287933552/b0c5ce5844ad8acc/manifest.json +0 -0
  253. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520588106160/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/data_level0.bin +0 -0
  254. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520588106160/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/header.bin +0 -0
  255. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520588106160/b0c5ce5844ad8acc/chroma/88b10860-7f3a-42c9-a3aa-20e09850b445/length.bin +0 -0
  256. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520588106160/b0c5ce5844ad8acc/chroma/chroma.sqlite3 +0 -0
  257. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/MagicMock/mock.rag.cache_dir/135520588106160/b0c5ce5844ad8acc/manifest.json +0 -0
  258. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/commands/test_plan.py +0 -0
  259. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/commands/test_skill.py +0 -0
  260. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/commands/test_skill_extended.py +0 -0
  261. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/commands/test_unlimited.py +0 -0
  262. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_app.py +0 -0
  263. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_builtins.py +0 -0
  264. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_chat_command.py +0 -0
  265. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_cli_smoke.py +0 -0
  266. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_commands.py +0 -0
  267. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_commands_repro.py +0 -0
  268. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_console.py +0 -0
  269. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_enhanced_tool_display.py +0 -0
  270. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_input.py +0 -0
  271. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_input_bindings.py +0 -0
  272. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_json_output.py +0 -0
  273. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_keyboard_integration.py +0 -0
  274. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_keyboard_verification.py +0 -0
  275. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_mcp_command.py +0 -0
  276. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_repl.py +0 -0
  277. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_repl_attribute_fix.py +0 -0
  278. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_repl_startup_message.py +0 -0
  279. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/cli/test_repl_toolbar.py +0 -0
  280. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/config/test_context.py +0 -0
  281. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/config/test_schema.py +0 -0
  282. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/config/test_settings.py +0 -0
  283. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/conftest.py +0 -0
  284. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/core/test_automatic_compaction.py +0 -0
  285. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/core/test_events.py +0 -0
  286. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/core/test_session.py +0 -0
  287. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/core/test_session_manager.py +0 -0
  288. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/core/test_streaming_tool_calls.py +0 -0
  289. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/core/test_turn_state.py +0 -0
  290. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/e2e/test_context_safety.py +0 -0
  291. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/empty_message_validation/test_empty_messages.py +0 -0
  292. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/extensions/__init__.py +0 -0
  293. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/extensions/test_base.py +0 -0
  294. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/extensions/test_command.py +0 -0
  295. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/extensions/test_manager.py +0 -0
  296. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/integration/test_context_limits.py +0 -0
  297. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/integration/test_tool_integration.py +0 -0
  298. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/mcp/test_client.py +0 -0
  299. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/mcp/test_config.py +0 -0
  300. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/mcp/test_manager.py +0 -0
  301. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/mcp/test_tool.py +0 -0
  302. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/providers/test_413_error_handling.py +0 -0
  303. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/providers/test_anthropic.py +0 -0
  304. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/providers/test_base.py +0 -0
  305. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/providers/test_deepseek.py +0 -0
  306. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/providers/test_ollama.py +0 -0
  307. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/providers/test_openai_compat.py +0 -0
  308. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/providers/test_registry.py +0 -0
  309. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/__init__.py +0 -0
  310. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/test_chunker.py +0 -0
  311. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/test_concurrency.py +0 -0
  312. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/test_concurrency_smoke.py +0 -0
  313. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/test_embedder.py +0 -0
  314. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/test_indexer.py +0 -0
  315. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/test_rag_concurrency_integration.py +0 -0
  316. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/test_rag_search_tool.py +0 -0
  317. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/test_repo_id.py +0 -0
  318. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/test_store.py +0 -0
  319. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/rag/test_system.py +0 -0
  320. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/skills/test_executor.py +0 -0
  321. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/skills/test_learner.py +0 -0
  322. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/skills/test_markdown_skills.py +0 -0
  323. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/skills/test_models.py +0 -0
  324. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/skills/test_store.py +0 -0
  325. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/skills/test_store_extended.py +0 -0
  326. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/smoke/test_large_file_handling.py +0 -0
  327. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/test_coverage_suite.py +0 -0
  328. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/test_main.py +0 -0
  329. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/tools/test_ask_user_tool.py +0 -0
  330. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/tools/test_base.py +0 -0
  331. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/tools/test_directory_tools.py +0 -0
  332. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/tools/test_file_tools.py +0 -0
  333. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/tools/test_grep_tool.py +0 -0
  334. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/tools/test_plan_mode_enforcement.py +0 -0
  335. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/tools/test_registry.py +0 -0
  336. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/tools/test_shell_tool.py +0 -0
  337. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/tools/test_web_fetch_tool.py +0 -0
  338. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/INTERACTIVE_SESSION_TESTS.md +0 -0
  339. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/__init__.py +0 -0
  340. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/conftest.py +0 -0
  341. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_agent.py +0 -0
  342. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_compaction_llm.py +0 -0
  343. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_events.py +0 -0
  344. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_llm.py +0 -0
  345. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_mcp.py +0 -0
  346. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_plan_mode.py +0 -0
  347. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_repl_e2e.py +0 -0
  348. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_repl_integration.py +0 -0
  349. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_session.py +0 -0
  350. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_skills.py +0 -0
  351. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_slash_commands.py +0 -0
  352. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_tokens_llm.py +0 -0
  353. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/ui_integration/test_tool_integration.py +0 -0
  354. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/utils/test_compaction.py +0 -0
  355. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/utils/test_compaction_edge_cases.py +0 -0
  356. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/utils/test_compaction_validation.py +0 -0
  357. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/utils/test_multi_turn_tool_calls.py +0 -0
  358. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/utils/test_protected_zone.py +0 -0
  359. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/utils/test_retry.py +0 -0
  360. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/utils/test_summarization.py +0 -0
  361. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/utils/test_tiktoken_integration.py +0 -0
  362. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/utils/test_token_counter_extended.py +0 -0
  363. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/utils/test_tool_sequence_compaction.py +0 -0
  364. {henchman_ai-0.1.12 → henchman_ai-0.1.14}/tests/utils/test_validation.py +0 -0
@@ -0,0 +1,56 @@
1
+ name: Deploy Documentation
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ paths: ['docs/**', 'mkdocs.yml', 'README.md']
7
+ pull_request:
8
+ branches: [ main ]
9
+ paths: ['docs/**', 'mkdocs.yml', 'README.md']
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ contents: write
14
+ pages: write
15
+ id-token: write
16
+
17
+ concurrency:
18
+ group: "pages"
19
+ cancel-in-progress: false
20
+
21
+ jobs:
22
+ build:
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - name: Checkout
26
+ uses: actions/checkout@v4
27
+
28
+ - name: Setup Python
29
+ uses: actions/setup-python@v5
30
+ with:
31
+ python-version: '3.11'
32
+
33
+ - name: Install dependencies
34
+ run: |
35
+ python -m pip install --upgrade pip
36
+ pip install mkdocs mkdocs-material mkdocstrings[python] mkdocs-autorefs
37
+
38
+ - name: Build documentation
39
+ run: mkdocs build
40
+
41
+ - name: Upload artifact
42
+ uses: actions/upload-pages-artifact@v3
43
+ with:
44
+ path: ./site
45
+
46
+ deploy:
47
+ environment:
48
+ name: github-pages
49
+ url: ${{ steps.deployment.outputs.page_url }}
50
+ runs-on: ubuntu-latest
51
+ needs: build
52
+ if: github.ref == 'refs/heads/main'
53
+ steps:
54
+ - name: Deploy to GitHub Pages
55
+ id: deployment
56
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,35 @@
1
+ 1. **Esc should immediately halt processing and return to the prompt.**
2
+ * **Fix:** `Repl.run()` was updated to distinguish between `KeyboardInterrupt` (Ctrl+C, which exits the REPL) and `KeyMonitor.stop_requested` (Esc key, which interrupts the current agent operation and returns to the prompt). Related tests were refactored to simulate Esc using `monitor.stop_requested = True` in `_run_agent`.
3
+
4
+ 2. **Web Search Tool Integration.**
5
+ * **Fix:** Integrated `DuckDuckGoSearchTool` using `aiohttp` and `beautifulsoup4` to provide web search functionality. `pyproject.toml` was updated with the new dependency.
6
+
7
+ 3. **UI Issues - Input prompt writes over output.**
8
+ * **Fix:** Added `self.console.print()` before `prompt_async` in `_get_input` within `src/henchman/cli/repl.py` to ensure the prompt always appears on a new line.
9
+
10
+ 4. **UI Issues - Bottom bar disappears.**
11
+ * **Fix:** Implemented `_get_rich_status_message` and integrated it with `rich.status.Status` in `_run_agent` and `_process_agent_stream` to maintain a persistent status bar during agent processing.
12
+
13
+ 5. **Loading sessions does not work correctly.**
14
+ * **Fix:** Modified the `load` method in `src/henchman/core/session.py` to support loading sessions by ID prefix in addition to exact UUIDs, enabling resumption with truncated IDs displayed in `/chat list`.
15
+
16
+ 6. **Functional testing of the `/plan` tool.**
17
+ * **Fix:** An E2E test (`tests/e2e/test_plan_mode_workflow.py`) was added to verify `/plan` command behavior, ensuring writes are blocked/allowed correctly based on plan mode status. The `test_cli_plan_flag` assertion was updated to reflect the new `_run_interactive` signature.
18
+
19
+ 7. **Tool execution - Shell commands hanging indefinitely.**
20
+ * **Fix:** Added `asyncio.CancelledError` handling to `ShellTool.execute` to ensure subprocesses are killed if the shell tool execution is interrupted. Tests were added (`tests/tools/test_shell_advanced.py`) to verify shell tool handling of pipes, redirection, and timeouts.
21
+
22
+ 8. **`AttributeError: 'Repl' object has no attribute '_get_rich_status'` failures.**
23
+ * **Fix:** This was primarily a Python import caching issue after refactoring `_get_rich_status` to `_get_rich_status_message`. Clearing `__pycache__` directories resolved the widespread `AttributeError`s.
24
+
25
+ 9. **`OSError: pytest: reading from stdin while output is captured!` in tool execution tests.**
26
+ * **Fix:** Modified relevant test setups in `tests/e2e/test_tool_fix.py` and `tests/ui_integration/test_tool_calls.py` to set `repl.config.auto_approve_tools = True`, preventing interactive confirmation prompts during automated testing.
27
+
28
+ 10. **`test_version.py::test_version_tuple` version mismatch.**
29
+ * **Fix:** Updated the expected version tuple in `tests/test_version.py` from `(0, 1, 11)` to `(0, 1, 13)` to align with the current project version.
30
+
31
+ 11. **`test_rag_command.py::TestRagCommand::test_reindex_with_rag_system` failure.**
32
+ * **Fix:** Corrected the mocking logic in the test to ensure `mock_repl.rag_system.index` was properly configured and its `is_indexing` attribute was set to `False`, allowing the `index` method to be called and asserted.
33
+
34
+ 12. **`test_loop_protection.py::TestSpinningDetection::test_consecutive_duplicate_detection` failure.**
35
+ * **Fix:** Modified the test case to use a non-read-only tool (`write_file`) and increased the number of calls to correctly trigger the consecutive duplicate detection logic within `TurnState.is_spinning()`.
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.1.14] - 2025-02-12
11
+
12
+ ### Added
13
+ - **Enhanced PyPI Documentation**
14
+ - Improved README.md with badges, better structure, and detailed examples
15
+ - Added comprehensive CONTRIBUTING.md guide for contributors
16
+ - Updated project metadata with better classifiers and documentation URLs
17
+ - Added local documentation build script for offline viewing
18
+
19
+ ### Changed
20
+ - **Project Metadata**
21
+ - Updated pyproject.toml with additional Python version classifiers
22
+ - Added more specific topic classifiers (AI, Scientific/Engineering)
23
+ - Enhanced project URLs with better documentation links
24
+
25
+ ### Fixed
26
+ - **Documentation**
27
+ - Fixed documentation URLs to point to GitHub docs directory
28
+ - Improved installation and usage instructions in README
29
+
10
30
  ## [0.1.11] - 2026-01-30
11
31
 
12
32
  ### Fixed
@@ -0,0 +1,220 @@
1
+ # Contributing to Henchman-AI
2
+
3
+ Thank you for your interest in contributing to Henchman-AI! This document provides guidelines and instructions for contributing.
4
+
5
+ ## 🎯 How to Contribute
6
+
7
+ ### 1. Reporting Bugs
8
+ - Check if the bug has already been reported in [Issues](https://github.com/MGPowerlytics/henchman-ai/issues)
9
+ - Use the bug report template
10
+ - Include steps to reproduce, expected vs actual behavior, and environment details
11
+
12
+ ### 2. Suggesting Features
13
+ - Check if the feature has already been suggested
14
+ - Explain the use case and benefits
15
+ - Consider if it aligns with the project's goals
16
+
17
+ ### 3. Contributing Code
18
+ - Fork the repository
19
+ - Create a feature branch (`git checkout -b feature/amazing-feature`)
20
+ - Make your changes
21
+ - Add or update tests
22
+ - Ensure code passes linting and type checking
23
+ - Submit a pull request
24
+
25
+ ## 🏗️ Development Setup
26
+
27
+ ### Prerequisites
28
+ - Python 3.10 or higher
29
+ - Git
30
+ - (Optional) uv for faster dependency management
31
+
32
+ ### Installation
33
+ ```bash
34
+ # Clone your fork
35
+ git clone https://github.com/your-username/henchman-ai.git
36
+ cd henchman-ai
37
+
38
+ # Create virtual environment
39
+ python -m venv venv
40
+ source venv/bin/activate # On Windows: venv\Scripts\activate
41
+
42
+ # Install with development dependencies
43
+ pip install -e ".[dev]"
44
+
45
+ # Install pre-commit hooks (optional but recommended)
46
+ pre-commit install
47
+ ```
48
+
49
+ ### Running Tests
50
+ ```bash
51
+ # Run all tests
52
+ pytest
53
+
54
+ # Run with coverage
55
+ pytest --cov=henchman --cov-report=term-missing
56
+
57
+ # Run specific test files
58
+ pytest tests/test_cli.py -v
59
+
60
+ # Run integration tests
61
+ pytest -m integration
62
+ ```
63
+
64
+ ### Code Quality
65
+ ```bash
66
+ # Format code
67
+ ruff format src/ tests/
68
+
69
+ # Check linting
70
+ ruff check src/ tests/
71
+
72
+ # Type checking
73
+ mypy src/
74
+
75
+ # Security audit
76
+ bandit -r src/
77
+ ```
78
+
79
+ ## 📁 Project Structure
80
+
81
+ ```
82
+ henchman-ai/
83
+ ├── src/henchman/ # Source code
84
+ │ ├── cli/ # CLI interface
85
+ │ ├── core/ # Core functionality
86
+ │ ├── providers/ # LLM provider implementations
87
+ │ ├── tools/ # Tool implementations
88
+ │ └── utils/ # Utility functions
89
+ ├── tests/ # Test suite
90
+ ├── docs/ # Documentation
91
+ ├── scripts/ # Development scripts
92
+ └── evals/ # Evaluation scripts
93
+ ```
94
+
95
+ ## 📝 Code Style
96
+
97
+ ### Python Style Guide
98
+ - Follow [PEP 8](https://peps.python.org/pep-0008/)
99
+ - Use type hints for all functions and methods
100
+ - Document public APIs with docstrings (Google style)
101
+ - Keep functions focused and small (< 50 lines when possible)
102
+
103
+ ### Docstring Format (Google Style)
104
+ ```python
105
+ def process_file(filepath: str, mode: str = "read") -> str:
106
+ """Process a file with the given mode.
107
+
108
+ Args:
109
+ filepath: Path to the file to process
110
+ mode: Processing mode ('read', 'write', 'append')
111
+
112
+ Returns:
113
+ The processed content as a string
114
+
115
+ Raises:
116
+ FileNotFoundError: If the file doesn't exist
117
+ ValueError: If mode is invalid
118
+ """
119
+ # Implementation
120
+ ```
121
+
122
+ ### Commit Messages
123
+ Follow [Conventional Commits](https://www.conventionalcommits.org/):
124
+ ```
125
+ feat: add new provider for Gemini
126
+ fix: handle API rate limiting properly
127
+ docs: update installation instructions
128
+ test: add unit tests for file tools
129
+ refactor: simplify configuration loading
130
+ chore: update dependencies
131
+ ```
132
+
133
+ ## 🧪 Testing Guidelines
134
+
135
+ ### Unit Tests
136
+ - Test one thing per test function
137
+ - Use descriptive test names
138
+ - Mock external dependencies
139
+ - Aim for high coverage (> 80%)
140
+
141
+ ### Integration Tests
142
+ - Test end-to-end functionality
143
+ - Use real API calls (with test credentials)
144
+ - Clean up after tests
145
+
146
+ ### Example Test
147
+ ```python
148
+ import pytest
149
+ from henchman.core.processor import process_prompt
150
+
151
+ def test_process_prompt_with_valid_input():
152
+ """Test prompt processing with valid input."""
153
+ result = process_prompt("Hello, world!")
154
+ assert isinstance(result, str)
155
+ assert len(result) > 0
156
+
157
+ def test_process_prompt_with_empty_input():
158
+ """Test prompt processing with empty input raises error."""
159
+ with pytest.raises(ValueError):
160
+ process_prompt("")
161
+ ```
162
+
163
+ ## 🔌 Adding New Providers
164
+
165
+ 1. Create a new file in `src/henchman/providers/`
166
+ 2. Implement the `BaseProvider` interface
167
+ 3. Add tests in `tests/providers/`
168
+ 4. Update documentation
169
+ 5. Add to provider registry
170
+
171
+ ## 🛠️ Adding New Tools
172
+
173
+ 1. Create a new file in `src/henchman/tools/`
174
+ 2. Implement the `BaseTool` interface
175
+ 3. Add safety checks and user confirmation
176
+ 4. Add tests
177
+ 5. Update documentation
178
+
179
+ ## 📚 Documentation
180
+
181
+ ### Updating Documentation
182
+ - Documentation is in the `docs/` directory
183
+ - Use Markdown with MkDocs
184
+ - Build locally: `mkdocs serve`
185
+ - Update API documentation when changing interfaces
186
+
187
+ ### Adding Examples
188
+ - Add practical examples to relevant documentation
189
+ - Include code snippets that can be copied
190
+ - Show common use cases and edge cases
191
+
192
+ ## 🚀 Release Process
193
+
194
+ ### Versioning
195
+ We follow [Semantic Versioning](https://semver.org/):
196
+ - **MAJOR**: Breaking changes
197
+ - **MINOR**: New features (backward compatible)
198
+ - **PATCH**: Bug fixes (backward compatible)
199
+
200
+ ### Release Checklist
201
+ 1. Update version in `pyproject.toml`
202
+ 2. Update `CHANGELOG.md`
203
+ 3. Run full test suite
204
+ 4. Update documentation
205
+ 5. Create release tag
206
+ 6. Build and publish to PyPI
207
+
208
+ ## ❓ Getting Help
209
+
210
+ - Check the [documentation](https://mgpowerlytics.github.io/henchman-ai/)
211
+ - Search existing [issues](https://github.com/MGPowerlytics/henchman-ai/issues)
212
+ - Join discussions in [GitHub Discussions](https://github.com/MGPowerlytics/henchman-ai/discussions)
213
+
214
+ ## 📄 License
215
+
216
+ By contributing, you agree that your contributions will be licensed under the project's MIT License.
217
+
218
+ ---
219
+
220
+ Thank you for contributing to make Henchman-AI better! 🎉