drydock-cli 2.8.91__tar.gz → 2.8.93__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.
- drydock_cli-2.8.93/.auto_release.lock +1 -0
- drydock_cli-2.8.93/.test_harness_runs/20260525_115028.json +182 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/PKG-INFO +1 -1
- drydock_cli-2.8.93/drydock/core/spec_check.py +490 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/pyproject.toml +1 -1
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/auto_release.sh +8 -9
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/deploy_to_github.sh +7 -5
- drydock_cli-2.8.93/web/README.md +60 -0
- drydock_cli-2.8.93/web/_redirects +4 -0
- drydock_cli-2.8.93/web/index.html +296 -0
- drydock_cli-2.8.93/web/netlify.toml +15 -0
- drydock_cli-2.8.91/.auto_release.lock +0 -1
- drydock_cli-2.8.91/.pause_100_projects +0 -0
- drydock_cli-2.8.91/.pause_eval_loop +0 -0
- drydock_cli-2.8.91/.pause_hle_babysitter +0 -0
- drydock_cli-2.8.91/.pause_hle_burndown +0 -0
- drydock_cli-2.8.91/.pause_hle_burndown_keepalive +0 -0
- drydock_cli-2.8.91/.pause_stress +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/loop.lock +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_205633_ISS_Overhead_Notifier.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_205704_Escape_the_maze.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_205735_Linkedin_Job_Application_Bot.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_205812_An_Online_Shop.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_205849_Custom_API.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_210031_Functional_Contact_Form.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_210404_Basic_HTML_Website.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_210743_Flask-WTForms.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_211147_Type_Flow_App.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_211513_Selenium_Login_Bot.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_211914_API_with_RESTful_Routing.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_212308_Password_generator.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_212657_API_with_RESTful_Routing.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260518_213042_Flask-WTForms.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_033302_Password_Manager.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_040256_Blog_Capstone_Project_Part_2.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_040548_Brand_name_generator.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_081315_Basic_HTML_Website-2.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_100155_Basic_HTML_Website-2.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_110148_Password_generator.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_110534_Quiz_Project.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_110800_Flask-WTForms.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_113052_Instagram_Follower_Bot.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_113349_Custom_API.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_123223_Blog_Capstone_Project_Part_2.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_190019_Higher_Lower_Game.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.100_projects/runs/20260519_193215_HTML_Website_using_CSS.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.claude/scheduled_tasks.lock +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.drydock/current_session.txt +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.drydock/graphrag.sqlite +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.eval_loop/last_finding_count.txt +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.eval_loop/loop.lock +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.eval_loop/wake_interval.txt +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260519_214101.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260519_215238.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260519_221015.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260519_223926.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260519_230852.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260519_234111.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_003151.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_011447.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_015451.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_023823.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_031539.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_033610.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_041736.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_045951.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_054110.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_075055.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_092645.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_105459.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_123526.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_141419.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_154149.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_170939.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_174957.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_190252.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_203429.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_220237.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260520_232652.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_005708.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_022444.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_025953.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_042809.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_061329.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_085157.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_102936.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_115042.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_131555.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_144002.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_160400.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_172246.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_184235.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_200139.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_212446.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260521_224318.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_000611.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_013951.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_030208.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_042705.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_055033.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_071318.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_084319.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_101023.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_114355.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_131023.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_144156.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_151653.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_163533.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_190432.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_202601.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260522_225536.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_001542.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_012935.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_025454.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_041611.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_053928.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_065837.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_083109.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_095004.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_111432.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_124202.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_135642.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_151116.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_163217.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_174704.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_190351.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_201617.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_213247.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_220429.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260523_232912.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_004259.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_015904.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_031312.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_043440.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_060914.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_073340.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_084934.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_100321.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_112207.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_123921.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_131432.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_143717.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_155025.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_170602.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_173049.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_184536.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_200107.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260524_213454.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260525_000147.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260525_011943.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260525_024302.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260525_040018.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260525_052020.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260525_063542.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260525_065236.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gauntlet_runs/20260525_084313.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.gitignore +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260519_232839_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_001355_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_010114_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_013946_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_022655_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_030321_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_040419_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_044736_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_052725_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_061619_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_073632_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_091212_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_122258_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_135904_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_152633_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_165424_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260520_173631_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260521_024819_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260521_060406_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260521_073847_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260521_101756_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260521_130916_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260522_143408_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260522_150949_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260522_175558_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260522_214744_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260523_000952_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260523_040733_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260523_071930_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260523_123233_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260523_215550_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260524_042718_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260524_055951_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260524_130442_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260524_172144_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260524_212650_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260524_224938_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260524_235315_word_count.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260525_064821_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.lifecycle_runs/20260525_083332_csv_to_json.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.python-version +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.stress_runs/20260525_151109/placeholder_before.txt +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.stress_runs/20260525_151109/scrub_before.txt +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260520_095359.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260520_112228.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260520_125834.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260520_142603.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260520_155354.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260520_172134.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260520_180152.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260520_193329.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260520_210137.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260520_222551.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260520_235608.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_012344.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_032709.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_043509.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_063817.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_075057.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_091726.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_104942.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_120846.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_133902.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_150300.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_162146.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_174135.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_190039.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_202346.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_214218.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260521_230511.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_003851.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_020108.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_032605.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_044933.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_061218.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_074219.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_090923.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_104255.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_120923.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_133338.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_153433.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_165528.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_180332.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_192501.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_204714.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_215436.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260522_230922.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_002835.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_015354.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_030703.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_043828.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_055737.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_073009.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_084904.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_101332.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_113203.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_125542.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_141016.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_153117.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_164604.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_180251.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_191517.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_203147.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_222812.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260523_234159.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_005804.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_021212.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_032648.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_045921.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_063240.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_074834.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_090221.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_102107.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_113821.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_133617.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_144925.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_160502.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_174436.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_190007.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_202620.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_214908.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260524_225245.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260525_001843.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260525_014202.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260525_025918.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260525_041920.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260525_053442.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260525_070625.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260525_081411.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260525_085805.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs/20260525_101110.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs_autogoal/.kickoff_20260525_131411 +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs_autogoal/.kickoff_20260525_131411.prev +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs_baseline/.kickoff_20260525_120441 +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.test_harness_runs_baseline/baseline_20260525_120441.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.tui_observability/tui_capture.out +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.tui_observability/tui_watch.out +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.typos.toml +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.vscode/extensions.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.vscode/launch.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/.vscode/settings.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/AGENTS.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/CHANGELOG.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/CLAUDE.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/DRYDOCK.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/LICENSE +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/NOTICE +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/README.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/action.yml +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/PRDs/Admiral.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/PRDs/Curiosity_Engine_PRD.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/PRDs/DEEP_NOIR_PRD.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/PRDs/HLE_PRD.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/PRDs/JETSON_BENCH.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/PRDs/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/PRDs/SOVEREIGN_PRD.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/PRDs/TRIAGE_v1.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/README.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/acp-setup.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/archive/BASELINE_412.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/archive/Drydock_rebrand.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/archive/OVERNIGHT_PROGRESS.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/archive/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/archive/PERF_SWEEP_PLAN.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/archive/PRD.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/archive/drydock_terms.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/archive/resume.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/scratch/curiosity_engine_results.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/scratch/outlook_draft_assistant.tar.gz +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/docs/scratch/resume.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/__main__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/detectors_proposed.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/fix_windows_path.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/agent_loop.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/auto_solve.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/classifier/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/classifier/__main__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/classifier/classifier.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/classifier/dispatcher.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/classifier/rules.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/classifier/signal.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/config/_dotenv.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/config/local_detect.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/config/migrate.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/constraint_extract.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/constraint_hint.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/context_recovery.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/goal.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/logger.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/gemma4_math.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/slug.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/steering_hook.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/algebra_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/chemistry_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/count_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/linear_algebra_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/logic_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/math_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/mechanical_rename.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/memory_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/number_theory_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prolog_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/retrieve.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/retrieve.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/set_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/solve_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/stats_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/units_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/verify_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/types.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/core/utils.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/curiosity/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/curiosity/__main__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/curiosity/gap_detector.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/curiosity/ingest.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/curiosity/item.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/curiosity/queue.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/curiosity/surprise.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/graphrag/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/graphrag/__main__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/graphrag/code_indexer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/graphrag/retriever.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/graphrag/storage.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/graphrag/text_indexer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/constraint-reasoning/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/logic/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/logic/assets/cheat_sheet_full.txt +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/prove/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/__main__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/applier.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/config.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/registry.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/sandbox.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/sidecar/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/sidecar/header_parser.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/sidecar/hooks.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/sidecar/loader.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/sidecar/server.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/train/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/train/capture.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/train/compute_vector.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/train/extract_pairs.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/train/scan_sessions.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/steering/vectors.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock/whats_new.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/drydock-acp.spec +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/flake.lock +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/flake.nix +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/README.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/publish/Dockerfile +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/publish/README.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/publish/entrypoint.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/publish/publish.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/results/20260525_153433/ubuntu.log.build +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/results/20260525_153433/ubuntu.result +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/rocky/Dockerfile +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/run_all.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/smoke_test.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/ubuntu/Dockerfile +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/windows/README.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/install_tests/windows/smoke_test.ps1 +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/medium/curiosity-engine-honest-postmortem.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/medium/drydock.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/medium/give-your-local-harness-graphrag.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/medium/instrumenting-your-local-llm-agent.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/README.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/_archived_eval_harness/README.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/_archived_eval_harness/auto_solve_audit.py.deprecated +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/_archived_eval_harness/backfill_hle_curiosity.py.deprecated +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/_archived_eval_harness/hle_babysitter.sh.deprecated +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/_archived_eval_harness/hle_burndown.sh.deprecated +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/_archived_eval_harness/hle_burndown_keepalive.sh.deprecated +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/_archived_eval_harness/hle_burndown_status.py.deprecated +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/_archived_eval_harness/hle_eval.py.deprecated +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/_eval_live_printer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/_gauntlet_seed.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/_test_harness_seeds.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/archive/auto_test_loop.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/archive/monitor_test_battery.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/archive/overnight_agents_test.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/archive/test_bank.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/archive/test_full.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/archive/test_smoke.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/archive/tui_test.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/autonomous_review.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/autonomous_review_prompt.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/backup.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/bench_inference.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/bump_version.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/classify_pulse.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/consume_retrieval_queue.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/curiosity_idle_cycle.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/dedupe_dispatch_queues.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/dispatch_report.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/drydock_status.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/eval_loop.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/fetch_arxiv_abstracts.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/gauntlet_runner.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/hle_aggregate.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/hle_eval_seed.jsonl +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/install_post_commit_hook.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/lifecycle_runner.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/notify_release.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/perf_baseline_when_idle.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/perf_sweep.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/queue_top.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/rejudge_hle.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/research_babysitter.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/run_100_projects.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/run_100_projects_loop.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/shakedown.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/start_steering_sidecar.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/stress_babysitter.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/test_harness_runner.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/tool_usage_report.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/tui_capture.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/tui_observability_keepalive.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/tui_watch.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/scripts/watch_eval.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/test_harness/CASES.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/test_harness/PRD.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/test_harness/SEEDS.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/test_harness/TEST_SUITE.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/test_harness/cases.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/test_harness/gen_cases_json.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/autocompletion/conftest.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/backend/test_generic_adapter_sanitize.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/conftest.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_circuit_breaker_count_escalation.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_circuit_breaker_readonly_threshold.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/e2e/common.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/mock/utils.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_admiral.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_admiral_hallucinated_tool_filter.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_admiral_intervention_outcome.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_admiral_proposed.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_admiral_session_id.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_admiral_struggle_dedup.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_agents.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_algebra_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_api_error_recovery.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_approval_modal_stray_keys.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_auto_retrieve_soft_nudge.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_auto_solve.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_chemistry_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_classifier.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_config_migration.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_constraint_extract.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_constraint_hint.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_context_recovery.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_count_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_curiosity.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_dispatch_report.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_dispatcher.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_fake_tool_call_paren_syntax.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_gemma4_anti_loop_migration.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_goal.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_graphrag.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_graphrag_worked_examples.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_hallucinated_tool_suppression.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_hle_aggregate.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_integration.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_linear_algebra_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_local_detect.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_logic_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_math_docs_lazy_injection.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_math_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_mcp_settings.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_mcp_stdio_command_normalization.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_memory_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_message_id.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_middleware.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_number_theory_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_prolog_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_read_file_not_found_listing.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_read_file_notebook_slim.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_rejudge_hle.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_retrieval_consumer.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_retrieve_project_detection.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_retrieve_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_safe_parse_tool_args.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_search_replace_args_not_truncated.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_search_replace_syntax_rollback.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_session_log_event.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_session_publish_on_resume.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_set_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_smoke.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_solve_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_specialist_math_tools_hidden.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_stats_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_steering.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_steering_capture.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_steering_compute_vector.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_steering_extract_pairs.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_steering_hook.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_steering_sidecar_chat_inputs.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_steering_sidecar_hooks.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_task_complete_nudge.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_tool_stop_injected_scope.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_truncate_args_valid_json.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_truncated_arg_path_hint.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_truncated_search_replace_escalation.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_truncated_write_escalation.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_units_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_verify_tool.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_wall_of_text_rescue.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_workloads.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/test_write_file_missing_path.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_bash_binary_grep_hint.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_bash_consec_empty_search.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_bash_echo_escape_loop_breaker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_bash_empty_search_loop_breaker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_bash_error_loop_breaker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_bash_exact_cmd_loop_breaker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_bash_heredoc_confirmation.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_bash_kill_exit1_annotation.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_bash_python_c_syntaxerr_loop_breaker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_hallucinated_retrieval_redirect.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_manager_gemma_derived_models.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_read_file_dedup_alternating_offset.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_read_file_dedup_reembed.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_read_file_directory.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_read_file_limit_truncation.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_search_replace_append_fallback.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_search_replace_dir_path.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_search_replace_empty_content.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_search_replace_file_not_found.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_search_replace_first_failure_hint.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_search_replace_hard_stop.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_search_replace_malformed_block.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_search_replace_no_op_loop_breaker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_search_replace_placeholder.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_search_replace_refused_loop_breaker.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_write_file_dedup_missing_imports.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_write_file_missing_main_module.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_write_file_missing_path_hint.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/tools/test_write_file_multifile_rename.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/uv.lock +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/worked_examples/README.md +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.8.91 → drydock_cli-2.8.93}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1268559
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
{
|
|
2
|
+
"started_at": "20260525_115028",
|
|
3
|
+
"n_cases_total": 52,
|
|
4
|
+
"n_cases_attempted": 52,
|
|
5
|
+
"results": [
|
|
6
|
+
{
|
|
7
|
+
"id": "P0-B1",
|
|
8
|
+
"phase": "baseline",
|
|
9
|
+
"difficulty": "D1",
|
|
10
|
+
"project": "romanize",
|
|
11
|
+
"chain": "none",
|
|
12
|
+
"passed": true,
|
|
13
|
+
"skipped": false,
|
|
14
|
+
"skip_reason": "",
|
|
15
|
+
"duration_sec": 102.8,
|
|
16
|
+
"messages_added": 15,
|
|
17
|
+
"max_repeat": 1,
|
|
18
|
+
"files_touched": 7,
|
|
19
|
+
"forbidden_touched": 0,
|
|
20
|
+
"yielded_cleanly": true,
|
|
21
|
+
"check_results": [
|
|
22
|
+
{
|
|
23
|
+
"spec": "python -m romanize to-roman 1994 -> 'MCMXCIV'",
|
|
24
|
+
"passed": true,
|
|
25
|
+
"detail": "stdout contains 'MCMXCIV'",
|
|
26
|
+
"kind": "exact"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"spec": "python -m romanize to-int MCMXCIV -> '1994'",
|
|
30
|
+
"passed": true,
|
|
31
|
+
"detail": "stdout contains '1994'",
|
|
32
|
+
"kind": "exact"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"spec": "green(6)",
|
|
36
|
+
"passed": true,
|
|
37
|
+
"detail": "pytest green: 13 passed",
|
|
38
|
+
"kind": "exact"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"spec": "all created .py parse",
|
|
42
|
+
"passed": true,
|
|
43
|
+
"detail": "all 5 .py files parse",
|
|
44
|
+
"kind": "exact"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"detail": "python -m romanize to-roman 19=Pe; python -m romanize to-int MCMX=Pe; green(6)=Pe; all created .py parse=Pe"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "P1-B1",
|
|
51
|
+
"phase": "baseline",
|
|
52
|
+
"difficulty": "D2",
|
|
53
|
+
"project": "mdparse",
|
|
54
|
+
"chain": "C1[1]",
|
|
55
|
+
"passed": false,
|
|
56
|
+
"skipped": false,
|
|
57
|
+
"skip_reason": "",
|
|
58
|
+
"duration_sec": 73.6,
|
|
59
|
+
"messages_added": 5,
|
|
60
|
+
"max_repeat": 1,
|
|
61
|
+
"files_touched": 2,
|
|
62
|
+
"forbidden_touched": 0,
|
|
63
|
+
"yielded_cleanly": true,
|
|
64
|
+
"check_results": [
|
|
65
|
+
{
|
|
66
|
+
"spec": "--verbose -> stderr matches /rendered in [\\d.]+ ms/",
|
|
67
|
+
"passed": false,
|
|
68
|
+
"detail": "stderr did NOT match /rendered in [\\d.]+ ms/; got: 'usage: mdparse [-h] [-o OUTPUT] input\\nmdparse: error: the following arguments are required: input\\n'",
|
|
69
|
+
"kind": "exact"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"spec": "stdout identical to no-flag run",
|
|
73
|
+
"passed": true,
|
|
74
|
+
"detail": "stdout-identity assertion \u2014 manual review",
|
|
75
|
+
"kind": "manual_review"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"spec": "green(27)",
|
|
79
|
+
"passed": false,
|
|
80
|
+
"detail": "pytest rc=1 3 failed, 24 passed in 0.04s (passed=24 failed=3)",
|
|
81
|
+
"kind": "exact"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"spec": "readonly(all but mdparse/cli.py)",
|
|
85
|
+
"passed": true,
|
|
86
|
+
"detail": "readonly checked separately",
|
|
87
|
+
"kind": "manual_review"
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"detail": "--verbose -> stderr matches /r=Fe; stdout identical to no-flag ru=Pm; green(27)=Fe; readonly(all but mdparse/cli.p=Pm"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"id": "P2-B1",
|
|
94
|
+
"phase": "baseline",
|
|
95
|
+
"difficulty": "D2",
|
|
96
|
+
"project": "taskvault",
|
|
97
|
+
"chain": "none",
|
|
98
|
+
"passed": false,
|
|
99
|
+
"skipped": false,
|
|
100
|
+
"skip_reason": "",
|
|
101
|
+
"duration_sec": 110.5,
|
|
102
|
+
"messages_added": 16,
|
|
103
|
+
"max_repeat": 1,
|
|
104
|
+
"files_touched": 2,
|
|
105
|
+
"forbidden_touched": 0,
|
|
106
|
+
"yielded_cleanly": true,
|
|
107
|
+
"check_results": [
|
|
108
|
+
{
|
|
109
|
+
"spec": "count prints 'open: 3 done: 2 total: 5'",
|
|
110
|
+
"passed": false,
|
|
111
|
+
"detail": "output did NOT contain 'open: 3 done: 2 total: 5'; got: 'open: 3 done: 0 total: 3\\n\\n'",
|
|
112
|
+
"kind": "exact"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"spec": "new test references count",
|
|
116
|
+
"passed": true,
|
|
117
|
+
"detail": "tests/test_cli.py references 'count'",
|
|
118
|
+
"kind": "exact"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"spec": "green(>=32)",
|
|
122
|
+
"passed": true,
|
|
123
|
+
"detail": "pytest green: 32 passed",
|
|
124
|
+
"kind": "exact"
|
|
125
|
+
}
|
|
126
|
+
],
|
|
127
|
+
"detail": "count prints 'open: 3 done: 2=Fe; new test references count=Pe; green(>=32)=Pe"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"id": "P3-B1",
|
|
131
|
+
"phase": "baseline",
|
|
132
|
+
"difficulty": "D2",
|
|
133
|
+
"project": "loglens",
|
|
134
|
+
"chain": "none",
|
|
135
|
+
"passed": false,
|
|
136
|
+
"skipped": false,
|
|
137
|
+
"skip_reason": "",
|
|
138
|
+
"duration_sec": 243.3,
|
|
139
|
+
"messages_added": 29,
|
|
140
|
+
"max_repeat": 1,
|
|
141
|
+
"files_touched": 2,
|
|
142
|
+
"forbidden_touched": 0,
|
|
143
|
+
"yielded_cleanly": false,
|
|
144
|
+
"check_results": [
|
|
145
|
+
{
|
|
146
|
+
"spec": "grep -i matches across case",
|
|
147
|
+
"passed": true,
|
|
148
|
+
"detail": "behavioral assertion \u2014 manual review",
|
|
149
|
+
"kind": "manual_review"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"spec": "default case-sensitive path intact",
|
|
153
|
+
"passed": true,
|
|
154
|
+
"detail": "behavioral assertion \u2014 manual review",
|
|
155
|
+
"kind": "manual_review"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"spec": "new test present",
|
|
159
|
+
"passed": true,
|
|
160
|
+
"detail": "tests/ has 5 files (no baseline; advisory)",
|
|
161
|
+
"kind": "manual_review"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"spec": "green(>=30)",
|
|
165
|
+
"passed": false,
|
|
166
|
+
"detail": "pytest rc=1 1 failed, 30 passed in 0.25s (passed=30 failed=1)",
|
|
167
|
+
"kind": "exact"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"spec": "readonly(sample_logs/)",
|
|
171
|
+
"passed": true,
|
|
172
|
+
"detail": "readonly checked separately",
|
|
173
|
+
"kind": "manual_review"
|
|
174
|
+
}
|
|
175
|
+
],
|
|
176
|
+
"detail": "grep -i matches across case=Pm; default case-sensitive path in=Pm; new test present=Pm; green(>=30)=Fe; readonly(sample_logs/)=Pm"
|
|
177
|
+
}
|
|
178
|
+
],
|
|
179
|
+
"score_running": "1/4",
|
|
180
|
+
"skipped_running": 0,
|
|
181
|
+
"last_update": "2026-05-25T11:59:18"
|
|
182
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.8.
|
|
3
|
+
Version: 2.8.93
|
|
4
4
|
Summary: Local-first CLI coding agent — tested with Gemma 4 26B via llama.cpp
|
|
5
5
|
Project-URL: Homepage, https://github.com/fbobe321/drydock
|
|
6
6
|
Project-URL: Repository, https://github.com/fbobe321/drydock
|
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
"""Spec-assertion checker.
|
|
2
|
+
|
|
3
|
+
Parses the natural-language ``check`` strings from
|
|
4
|
+
``test_harness/cases.json`` (and equivalent PRD acceptance criteria) into
|
|
5
|
+
typed assertions, then runs them against a working tree. Returns a
|
|
6
|
+
machine-readable verdict the agent loop can use to decide whether a
|
|
7
|
+
"done" claim should be accepted.
|
|
8
|
+
|
|
9
|
+
Background: the ceiling cases (P1-B1, P2-B1, P6-B1, P2-S1, P4-S1, P5-S1,
|
|
10
|
+
P6-S1, P3-S2) all fail in spec-specific ways the model doesn't notice
|
|
11
|
+
— wrong test count, missing backup file, missing ABC class, etc. Soft
|
|
12
|
+
prompt nudges have been ineffective. This module is the bottom half of
|
|
13
|
+
a fix: extract the same assertions the harness uses to score, run them
|
|
14
|
+
ourselves, and surface the *specific* failed assertion as feedback the
|
|
15
|
+
model gets the next turn.
|
|
16
|
+
|
|
17
|
+
Supported assertion shapes (covers ~50% of harness checks by count):
|
|
18
|
+
|
|
19
|
+
* ``green(N)`` / ``green(>=N)`` / ``green(>N)`` — exact / minimum pytest
|
|
20
|
+
pass count
|
|
21
|
+
* ``<path> exists`` / ``<path>`` (bare path with extension) — file
|
|
22
|
+
presence on disk
|
|
23
|
+
* ``<path> == <other-path>`` — byte-for-byte file equality (e.g.
|
|
24
|
+
``tasks.json.v1.bak == original``)
|
|
25
|
+
* ``<file> defines ABC with <m1>/<m2>/...`` — AST-scans the file for a
|
|
26
|
+
class with ``ABC`` (or ``abc.ABC``) in its bases and the listed
|
|
27
|
+
methods as ``@abstractmethod``
|
|
28
|
+
* ``<X> issubclass(<Parent>)`` — imports the module and checks
|
|
29
|
+
``issubclass(X, Parent)`` at runtime
|
|
30
|
+
* ``grep -q <pattern> <path>... && echo <TAG> -> '<TAG>'`` — runs the
|
|
31
|
+
literal shell pipeline and checks the output
|
|
32
|
+
* ``python -m <pkg> <args> -> '<output>'`` / ``<cmd> -> '<output>'`` —
|
|
33
|
+
CLI invocation, stdout must equal the quoted string
|
|
34
|
+
|
|
35
|
+
Shapes not yet supported (returned as ``UNKNOWN`` with the raw text):
|
|
36
|
+
``readonly(...)`` (needs a pre-task snapshot), HTTP route checks (needs
|
|
37
|
+
a server), free-text artifact claims (``artifact(X.md) names Y``).
|
|
38
|
+
|
|
39
|
+
Usage::
|
|
40
|
+
|
|
41
|
+
from drydock.core import spec_check
|
|
42
|
+
checks = ["green(30)", "keystore/backend.py exists"]
|
|
43
|
+
verdict = spec_check.verify(checks, cwd=Path("/tmp/keystore"))
|
|
44
|
+
# verdict = {
|
|
45
|
+
# "passed": [...], "failed": [...], "unknown": [...],
|
|
46
|
+
# "ok": False, # all checks must pass for ok=True
|
|
47
|
+
# }
|
|
48
|
+
|
|
49
|
+
CLI: ``python -m drydock.core.spec_check --case P5-S1 --cwd .`` reads
|
|
50
|
+
the case checks out of ``test_harness/cases.json`` and runs them.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
from __future__ import annotations
|
|
54
|
+
|
|
55
|
+
import argparse
|
|
56
|
+
import ast
|
|
57
|
+
import json
|
|
58
|
+
import re
|
|
59
|
+
import subprocess
|
|
60
|
+
import sys
|
|
61
|
+
from dataclasses import dataclass, field
|
|
62
|
+
from pathlib import Path
|
|
63
|
+
from typing import Any
|
|
64
|
+
|
|
65
|
+
# Assertion kinds — string constants keep the wire format JSON-safe.
|
|
66
|
+
KIND_GREEN = "green"
|
|
67
|
+
KIND_FILE_EXISTS = "file_exists"
|
|
68
|
+
KIND_FILE_EQ = "file_eq"
|
|
69
|
+
KIND_DEFINES_ABC = "defines_abc"
|
|
70
|
+
KIND_ISSUBCLASS = "issubclass"
|
|
71
|
+
KIND_GREP_TAG = "grep_tag"
|
|
72
|
+
KIND_CLI_OUTPUT = "cli_output"
|
|
73
|
+
KIND_UNKNOWN = "unknown"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@dataclass
|
|
77
|
+
class Assertion:
|
|
78
|
+
raw: str
|
|
79
|
+
kind: str
|
|
80
|
+
params: dict[str, Any] = field(default_factory=dict)
|
|
81
|
+
ok: bool | None = None
|
|
82
|
+
msg: str = ""
|
|
83
|
+
|
|
84
|
+
def to_dict(self) -> dict[str, Any]:
|
|
85
|
+
return {
|
|
86
|
+
"raw": self.raw, "kind": self.kind, "params": self.params,
|
|
87
|
+
"ok": self.ok, "msg": self.msg,
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
# Regexes anchored once at module load. None of these are user input —
|
|
92
|
+
# they come from the harness's own checks list, so we don't need
|
|
93
|
+
# defensive parsing, just enough discrimination to route to the right
|
|
94
|
+
# runner.
|
|
95
|
+
|
|
96
|
+
_GREEN_RE = re.compile(r"^\s*green\(\s*(>=|>)?\s*(\d+)\s*\)\s*$")
|
|
97
|
+
_FILE_EQ_RE = re.compile(r"^\s*(\S+?)\s*==\s*(\S.+?)\s*$")
|
|
98
|
+
_DEFINES_ABC_RE = re.compile(
|
|
99
|
+
r"^\s*(\S+?)\s+defines\s+ABC\s+with\s+([\w/]+)\s*$",
|
|
100
|
+
)
|
|
101
|
+
_ISSUBCLASS_RE = re.compile(
|
|
102
|
+
r"^\s*(\w[\w.]*)\s+issubclass\((\w[\w.]*)\)\s*$",
|
|
103
|
+
)
|
|
104
|
+
_GREP_TAG_RE = re.compile(
|
|
105
|
+
r"^\s*grep\s+(-\w+\s+)?-?-?\S+\s+\S+.*&&\s*echo\s+(\S+)\s*->\s*'(\S+)'\s*$",
|
|
106
|
+
)
|
|
107
|
+
_CLI_OUTPUT_RE = re.compile(r"^\s*(.+?)\s*->\s*'([^']*)'\s*$")
|
|
108
|
+
_FILE_EXISTS_RE = re.compile(r"^\s*([\w./_-]+\.[\w]+)\s*(?:exists?)?\s*$")
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def parse(check: str) -> Assertion:
|
|
112
|
+
"""Route a check string to the correct typed Assertion. Falls back
|
|
113
|
+
to ``KIND_UNKNOWN`` when no pattern matches; callers should surface
|
|
114
|
+
those as "unverified" rather than failing the run."""
|
|
115
|
+
s = check.strip()
|
|
116
|
+
|
|
117
|
+
m = _GREEN_RE.match(s)
|
|
118
|
+
if m:
|
|
119
|
+
op = m.group(1) or "=="
|
|
120
|
+
n = int(m.group(2))
|
|
121
|
+
return Assertion(raw=check, kind=KIND_GREEN, params={"op": op, "n": n})
|
|
122
|
+
|
|
123
|
+
m = _DEFINES_ABC_RE.match(s)
|
|
124
|
+
if m:
|
|
125
|
+
return Assertion(
|
|
126
|
+
raw=check, kind=KIND_DEFINES_ABC,
|
|
127
|
+
params={"file": m.group(1), "methods": m.group(2).split("/")},
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
m = _ISSUBCLASS_RE.match(s)
|
|
131
|
+
if m:
|
|
132
|
+
return Assertion(
|
|
133
|
+
raw=check, kind=KIND_ISSUBCLASS,
|
|
134
|
+
params={"child": m.group(1), "parent": m.group(2)},
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
m = _GREP_TAG_RE.match(s)
|
|
138
|
+
if m:
|
|
139
|
+
return Assertion(
|
|
140
|
+
raw=check, kind=KIND_GREP_TAG,
|
|
141
|
+
params={"pipeline": s, "expected": m.group(3)},
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
# CLI output before file_eq because both contain "==" / "->" and
|
|
145
|
+
# the CLI pattern is more specific.
|
|
146
|
+
m = _CLI_OUTPUT_RE.match(s)
|
|
147
|
+
if m:
|
|
148
|
+
return Assertion(
|
|
149
|
+
raw=check, kind=KIND_CLI_OUTPUT,
|
|
150
|
+
params={"cmd": m.group(1).strip(), "expected": m.group(2)},
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
m = _FILE_EQ_RE.match(s)
|
|
154
|
+
if m:
|
|
155
|
+
# Heuristic: the right-hand side often says "original" — that
|
|
156
|
+
# means the harness snapshot of the file before the migration.
|
|
157
|
+
# We can't verify "== original" without a snapshot, so route to
|
|
158
|
+
# file_eq only when both sides look like paths.
|
|
159
|
+
lhs, rhs = m.group(1), m.group(2).strip()
|
|
160
|
+
if rhs == "original" or "/" in rhs or "." in rhs:
|
|
161
|
+
return Assertion(
|
|
162
|
+
raw=check, kind=KIND_FILE_EQ,
|
|
163
|
+
params={"lhs": lhs, "rhs": rhs},
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
m = _FILE_EXISTS_RE.match(s)
|
|
167
|
+
if m:
|
|
168
|
+
return Assertion(
|
|
169
|
+
raw=check, kind=KIND_FILE_EXISTS, params={"path": m.group(1)},
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
return Assertion(raw=check, kind=KIND_UNKNOWN)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def _run_pytest_collect(cwd: Path) -> tuple[int, int, str]:
|
|
176
|
+
"""Returns (passed, total_collected, raw_output).
|
|
177
|
+
|
|
178
|
+
We collect-then-run because for our use the *passed* count is the
|
|
179
|
+
thing we score against. If the suite errors out we report passed=0,
|
|
180
|
+
which surfaces a clear failure rather than masking a broken state.
|
|
181
|
+
"""
|
|
182
|
+
try:
|
|
183
|
+
out = subprocess.run(
|
|
184
|
+
[sys.executable, "-m", "pytest", "--tb=no", "-q", "--no-header"],
|
|
185
|
+
cwd=cwd, capture_output=True, text=True, timeout=180,
|
|
186
|
+
)
|
|
187
|
+
except subprocess.TimeoutExpired:
|
|
188
|
+
return 0, 0, "pytest timed out after 180s"
|
|
189
|
+
text = (out.stdout or "") + "\n" + (out.stderr or "")
|
|
190
|
+
# Pytest summary line: "27 passed in 0.42s" or "5 failed, 22 passed in 0.5s"
|
|
191
|
+
passed = 0
|
|
192
|
+
m = re.search(r"(\d+)\s+passed", text)
|
|
193
|
+
if m:
|
|
194
|
+
passed = int(m.group(1))
|
|
195
|
+
failed = 0
|
|
196
|
+
m = re.search(r"(\d+)\s+failed", text)
|
|
197
|
+
if m:
|
|
198
|
+
failed = int(m.group(1))
|
|
199
|
+
return passed, passed + failed, text.strip().splitlines()[-1] if text.strip() else ""
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def _resolve(cwd: Path, ref: str) -> Path:
|
|
203
|
+
"""A check might say ``tasks.json.v1.bak == original``. ``original``
|
|
204
|
+
is a harness sentinel for the seeded baseline; we map it to a
|
|
205
|
+
sibling ``.original`` file or to the file the harness staged at
|
|
206
|
+
task start. For now, support ``<basename>.original`` if present,
|
|
207
|
+
else punt."""
|
|
208
|
+
if ref == "original":
|
|
209
|
+
# Convention: the harness writes <file>.original alongside any
|
|
210
|
+
# file it expects to be backed up. If absent, this assertion
|
|
211
|
+
# cannot be verified.
|
|
212
|
+
return cwd / "MISSING_ORIGINAL_SENTINEL"
|
|
213
|
+
return cwd / ref
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def _run_green(a: Assertion, cwd: Path) -> None:
|
|
217
|
+
passed, total, summary = _run_pytest_collect(cwd)
|
|
218
|
+
op = a.params["op"]
|
|
219
|
+
n = a.params["n"]
|
|
220
|
+
if op == "==":
|
|
221
|
+
a.ok = (passed == n)
|
|
222
|
+
a.msg = f"pytest: {passed} passed (need exactly {n}). {summary}"
|
|
223
|
+
elif op == ">=":
|
|
224
|
+
a.ok = (passed >= n)
|
|
225
|
+
a.msg = f"pytest: {passed} passed (need >= {n}). {summary}"
|
|
226
|
+
elif op == ">":
|
|
227
|
+
a.ok = (passed > n)
|
|
228
|
+
a.msg = f"pytest: {passed} passed (need > {n}). {summary}"
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def _run_file_exists(a: Assertion, cwd: Path) -> None:
|
|
232
|
+
p = cwd / a.params["path"]
|
|
233
|
+
a.ok = p.exists() and p.is_file()
|
|
234
|
+
a.msg = f"{p.relative_to(cwd) if a.ok else a.params['path']} {'exists' if a.ok else 'NOT FOUND'}"
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def _run_file_eq(a: Assertion, cwd: Path) -> None:
|
|
238
|
+
lhs = cwd / a.params["lhs"]
|
|
239
|
+
rhs = _resolve(cwd, a.params["rhs"])
|
|
240
|
+
if not lhs.exists():
|
|
241
|
+
a.ok, a.msg = False, f"{a.params['lhs']} not found"
|
|
242
|
+
return
|
|
243
|
+
if not rhs.exists():
|
|
244
|
+
# "== original" without a snapshot — cannot verify
|
|
245
|
+
a.ok = None
|
|
246
|
+
a.msg = (
|
|
247
|
+
f"cannot verify {a.params['lhs']} == {a.params['rhs']} "
|
|
248
|
+
f"(no snapshot file at {rhs})"
|
|
249
|
+
)
|
|
250
|
+
return
|
|
251
|
+
same = lhs.read_bytes() == rhs.read_bytes()
|
|
252
|
+
a.ok = same
|
|
253
|
+
a.msg = f"{a.params['lhs']} {'==' if same else '!='} {a.params['rhs']}"
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def _scan_abc_class(tree: ast.AST, methods: list[str]) -> tuple[bool, str]:
|
|
257
|
+
"""Look for ANY ClassDef whose bases include ``ABC`` (or
|
|
258
|
+
``abc.ABC``) and that defines every method in ``methods``, each
|
|
259
|
+
decorated with ``@abstractmethod``. Returns (ok, diagnostic)."""
|
|
260
|
+
for node in ast.walk(tree):
|
|
261
|
+
if not isinstance(node, ast.ClassDef):
|
|
262
|
+
continue
|
|
263
|
+
base_names = []
|
|
264
|
+
for b in node.bases:
|
|
265
|
+
if isinstance(b, ast.Name):
|
|
266
|
+
base_names.append(b.id)
|
|
267
|
+
elif isinstance(b, ast.Attribute):
|
|
268
|
+
base_names.append(b.attr)
|
|
269
|
+
if "ABC" not in base_names:
|
|
270
|
+
continue
|
|
271
|
+
# Collect (method_name, has_abstractmethod_decorator) per def
|
|
272
|
+
found: dict[str, bool] = {}
|
|
273
|
+
for item in node.body:
|
|
274
|
+
if isinstance(item, (ast.FunctionDef, ast.AsyncFunctionDef)):
|
|
275
|
+
deco_names = []
|
|
276
|
+
for d in item.decorator_list:
|
|
277
|
+
if isinstance(d, ast.Name):
|
|
278
|
+
deco_names.append(d.id)
|
|
279
|
+
elif isinstance(d, ast.Attribute):
|
|
280
|
+
deco_names.append(d.attr)
|
|
281
|
+
found[item.name] = "abstractmethod" in deco_names
|
|
282
|
+
missing = [m for m in methods if m not in found]
|
|
283
|
+
if missing:
|
|
284
|
+
return False, (
|
|
285
|
+
f"class {node.name}(ABC) found but missing methods: "
|
|
286
|
+
f"{', '.join(missing)}"
|
|
287
|
+
)
|
|
288
|
+
non_abstract = [m for m in methods if not found.get(m, False)]
|
|
289
|
+
if non_abstract:
|
|
290
|
+
return False, (
|
|
291
|
+
f"class {node.name}(ABC) has {', '.join(non_abstract)} "
|
|
292
|
+
f"but not as @abstractmethod"
|
|
293
|
+
)
|
|
294
|
+
return True, f"class {node.name}(ABC) with {'/'.join(methods)}"
|
|
295
|
+
return False, "no class with ABC base found"
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
def _run_defines_abc(a: Assertion, cwd: Path) -> None:
|
|
299
|
+
p = cwd / a.params["file"]
|
|
300
|
+
if not p.exists():
|
|
301
|
+
a.ok, a.msg = False, f"{a.params['file']} does not exist"
|
|
302
|
+
return
|
|
303
|
+
try:
|
|
304
|
+
tree = ast.parse(p.read_text(encoding="utf-8"))
|
|
305
|
+
except SyntaxError as exc:
|
|
306
|
+
a.ok, a.msg = False, f"{a.params['file']} has syntax error: {exc}"
|
|
307
|
+
return
|
|
308
|
+
a.ok, a.msg = _scan_abc_class(tree, a.params["methods"])
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
def _run_issubclass(a: Assertion, cwd: Path) -> None:
|
|
312
|
+
child = a.params["child"]
|
|
313
|
+
parent = a.params["parent"]
|
|
314
|
+
# Run via subprocess so the package's own __init__ side-effects
|
|
315
|
+
# don't bleed into our process.
|
|
316
|
+
code = (
|
|
317
|
+
f"import sys; sys.path.insert(0, {str(cwd)!r}); "
|
|
318
|
+
f"try:\n"
|
|
319
|
+
f" from {child.rsplit('.', 1)[0] if '.' in child else child} "
|
|
320
|
+
f" import {child.rsplit('.', 1)[-1]} as _c\n"
|
|
321
|
+
f" from {parent.rsplit('.', 1)[0] if '.' in parent else parent} "
|
|
322
|
+
f" import {parent.rsplit('.', 1)[-1]} as _p\n"
|
|
323
|
+
f" print('YES' if issubclass(_c, _p) else 'NO')\n"
|
|
324
|
+
f"except Exception as e:\n"
|
|
325
|
+
f" print(f'ERR: {{type(e).__name__}}: {{e}}')\n"
|
|
326
|
+
)
|
|
327
|
+
try:
|
|
328
|
+
out = subprocess.run(
|
|
329
|
+
[sys.executable, "-c", code],
|
|
330
|
+
cwd=cwd, capture_output=True, text=True, timeout=30,
|
|
331
|
+
)
|
|
332
|
+
except subprocess.TimeoutExpired:
|
|
333
|
+
a.ok, a.msg = False, "issubclass check timed out"
|
|
334
|
+
return
|
|
335
|
+
output = (out.stdout or "").strip() + (out.stderr or "").strip()
|
|
336
|
+
if output == "YES":
|
|
337
|
+
a.ok, a.msg = True, f"{child} issubclass({parent})"
|
|
338
|
+
elif output == "NO":
|
|
339
|
+
a.ok, a.msg = False, f"{child} is NOT subclass of {parent}"
|
|
340
|
+
else:
|
|
341
|
+
a.ok, a.msg = False, f"issubclass check failed: {output[:200]}"
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
def _run_grep_tag(a: Assertion, cwd: Path) -> None:
|
|
345
|
+
try:
|
|
346
|
+
out = subprocess.run(
|
|
347
|
+
["bash", "-c", a.params["pipeline"]],
|
|
348
|
+
cwd=cwd, capture_output=True, text=True, timeout=15,
|
|
349
|
+
)
|
|
350
|
+
except subprocess.TimeoutExpired:
|
|
351
|
+
a.ok, a.msg = False, "grep pipeline timed out"
|
|
352
|
+
return
|
|
353
|
+
actual = (out.stdout or "").strip()
|
|
354
|
+
expected = a.params["expected"]
|
|
355
|
+
a.ok = (actual == expected)
|
|
356
|
+
a.msg = (
|
|
357
|
+
f"grep -> {actual!r}"
|
|
358
|
+
if a.ok else f"expected {expected!r}, got {actual!r}"
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
def _run_cli_output(a: Assertion, cwd: Path) -> None:
|
|
363
|
+
cmd = a.params["cmd"]
|
|
364
|
+
expected = a.params["expected"]
|
|
365
|
+
try:
|
|
366
|
+
out = subprocess.run(
|
|
367
|
+
["bash", "-c", cmd], cwd=cwd, capture_output=True,
|
|
368
|
+
text=True, timeout=30,
|
|
369
|
+
)
|
|
370
|
+
except subprocess.TimeoutExpired:
|
|
371
|
+
a.ok, a.msg = False, f"{cmd!r} timed out"
|
|
372
|
+
return
|
|
373
|
+
actual = (out.stdout or "").strip()
|
|
374
|
+
a.ok = (actual == expected)
|
|
375
|
+
a.msg = (
|
|
376
|
+
f"{cmd!r} -> {actual!r}"
|
|
377
|
+
if a.ok else f"{cmd!r} expected {expected!r}, got {actual!r}"
|
|
378
|
+
)
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
_RUNNERS = {
|
|
382
|
+
KIND_GREEN: _run_green,
|
|
383
|
+
KIND_FILE_EXISTS: _run_file_exists,
|
|
384
|
+
KIND_FILE_EQ: _run_file_eq,
|
|
385
|
+
KIND_DEFINES_ABC: _run_defines_abc,
|
|
386
|
+
KIND_ISSUBCLASS: _run_issubclass,
|
|
387
|
+
KIND_GREP_TAG: _run_grep_tag,
|
|
388
|
+
KIND_CLI_OUTPUT: _run_cli_output,
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
def run(a: Assertion, cwd: Path) -> Assertion:
|
|
393
|
+
"""Dispatch to the kind-specific runner. Mutates and returns the
|
|
394
|
+
assertion in place."""
|
|
395
|
+
runner = _RUNNERS.get(a.kind)
|
|
396
|
+
if runner is None:
|
|
397
|
+
a.ok = None
|
|
398
|
+
a.msg = f"unsupported assertion kind: {a.kind}"
|
|
399
|
+
return a
|
|
400
|
+
try:
|
|
401
|
+
runner(a, cwd)
|
|
402
|
+
except Exception as exc:
|
|
403
|
+
a.ok = False
|
|
404
|
+
a.msg = f"runner crashed: {type(exc).__name__}: {exc}"
|
|
405
|
+
return a
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
def verify(checks: list[str], cwd: Path) -> dict[str, Any]:
|
|
409
|
+
"""Parse and run every check; aggregate the verdict.
|
|
410
|
+
|
|
411
|
+
``ok`` is True only when every parseable assertion passed.
|
|
412
|
+
Unparseable assertions (``KIND_UNKNOWN``) are reported separately
|
|
413
|
+
in the ``unknown`` bucket — the caller can decide whether to treat
|
|
414
|
+
them as soft warnings or block. By default we do NOT count UNKNOWN
|
|
415
|
+
against the verdict, since the alternative is refusing to ship
|
|
416
|
+
every PRD with free-text criteria.
|
|
417
|
+
"""
|
|
418
|
+
passed: list[dict[str, Any]] = []
|
|
419
|
+
failed: list[dict[str, Any]] = []
|
|
420
|
+
unknown: list[dict[str, Any]] = []
|
|
421
|
+
for s in checks:
|
|
422
|
+
a = parse(s)
|
|
423
|
+
if a.kind == KIND_UNKNOWN:
|
|
424
|
+
unknown.append(a.to_dict())
|
|
425
|
+
continue
|
|
426
|
+
run(a, cwd)
|
|
427
|
+
if a.ok:
|
|
428
|
+
passed.append(a.to_dict())
|
|
429
|
+
else:
|
|
430
|
+
failed.append(a.to_dict())
|
|
431
|
+
return {
|
|
432
|
+
"passed": passed, "failed": failed, "unknown": unknown,
|
|
433
|
+
"ok": not failed, # UNKNOWN doesn't block
|
|
434
|
+
"summary": (
|
|
435
|
+
f"{len(passed)}/{len(passed) + len(failed)} passed"
|
|
436
|
+
+ (f", {len(unknown)} unverifiable" if unknown else "")
|
|
437
|
+
),
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
def _format_for_model(verdict: dict[str, Any]) -> str:
|
|
442
|
+
"""Render the verdict as the agent-loop nudge text. Specific
|
|
443
|
+
failures only — the model needs to know WHAT to fix, not a checklist
|
|
444
|
+
of what's already green."""
|
|
445
|
+
lines = [f"SPEC CHECK: {verdict['summary']}"]
|
|
446
|
+
for a in verdict["failed"]:
|
|
447
|
+
lines.append(f" ✗ {a['raw']}: {a['msg']}")
|
|
448
|
+
for a in verdict["unknown"]:
|
|
449
|
+
lines.append(f" ? {a['raw']} (not auto-verified — please confirm manually)")
|
|
450
|
+
return "\n".join(lines)
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
# ----------------- CLI -----------------
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
def _load_case_checks(cases_json: Path, case_id: str) -> list[str]:
|
|
457
|
+
data = json.loads(cases_json.read_text(encoding="utf-8"))
|
|
458
|
+
for c in data.get("cases", []):
|
|
459
|
+
if c.get("id") == case_id:
|
|
460
|
+
return c.get("check", []) or []
|
|
461
|
+
raise SystemExit(f"case {case_id} not found in {cases_json}")
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
def main(argv: list[str] | None = None) -> int:
|
|
465
|
+
ap = argparse.ArgumentParser(prog="drydock.core.spec_check")
|
|
466
|
+
ap.add_argument("--cwd", type=Path, default=Path.cwd())
|
|
467
|
+
src = ap.add_mutually_exclusive_group(required=True)
|
|
468
|
+
src.add_argument("--case", help="case_id from cases.json")
|
|
469
|
+
src.add_argument("--check", action="append", help="literal check string (repeatable)")
|
|
470
|
+
ap.add_argument(
|
|
471
|
+
"--cases-json", type=Path,
|
|
472
|
+
default=Path("/data3/drydock/test_harness/cases.json"),
|
|
473
|
+
)
|
|
474
|
+
ap.add_argument("--json", action="store_true", help="machine-readable output")
|
|
475
|
+
ns = ap.parse_args(argv)
|
|
476
|
+
|
|
477
|
+
checks = (
|
|
478
|
+
_load_case_checks(ns.cases_json, ns.case)
|
|
479
|
+
if ns.case else ns.check
|
|
480
|
+
)
|
|
481
|
+
verdict = verify(checks, ns.cwd)
|
|
482
|
+
if ns.json:
|
|
483
|
+
print(json.dumps(verdict, indent=2))
|
|
484
|
+
else:
|
|
485
|
+
print(_format_for_model(verdict))
|
|
486
|
+
return 0 if verdict["ok"] else 1
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
if __name__ == "__main__":
|
|
490
|
+
sys.exit(main())
|