comate-cli 0.10.0__tar.gz → 0.10.2__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.
- {comate_cli-0.10.0 → comate_cli-0.10.2}/PKG-INFO +1 -1
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/main.py +45 -14
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/app.py +1 -1
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/codenames.py +11 -3
- comate_cli-0.10.2/comate_cli/terminal_agent/goal_edit_view.py +86 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/logo.py +1 -2
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/slash_commands.py +15 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/theme.py +6 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui.py +13 -15
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui_parts/commands.py +54 -10
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui_parts/history_sync.py +26 -13
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui_parts/input_behavior.py +3 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui_parts/key_bindings.py +25 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui_parts/ui_mode.py +1 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/pyproject.toml +1 -1
- comate_cli-0.10.2/tests/test_busy_slash_gating.py +89 -0
- comate_cli-0.10.2/tests/test_goal_edit_handlers.py +366 -0
- comate_cli-0.10.2/tests/test_goal_edit_view.py +61 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_goal_slash_command.py +31 -2
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_history_drain_throttle.py +47 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_logo.py +8 -6
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_permission_mode_cycle.py +13 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_startup_profile.py +5 -1
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_style_class_coverage.py +2 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tool_approval_key_bindings.py +24 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_update_check.py +1 -1
- comate_cli-0.10.2/tests/test_wellformed_terminal_input.py +146 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/uv.lock +2 -2
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/08b40bf6a68c85059572f3478db27d848acd36a6e8c6b89fa5173927210e7b53.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/0ff4f2f1382d2c19ca8d86e01ee8b6768b2fa925bdcf1e57829cecc590120371.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/1571cd767eb43ae39534d8f53f60bd56a2a537a64ecf8b5d93ee7556ea4cbb54.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/19ac2280798d9988d4bd8e29952989eabf0749b893d4026bf9786169cd50c659.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/24efc545d3f0b694a02cfa8022b8f93be27e57547a4f0661f608c80d9bc78113.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/3d69373ac48a465a06bd30094e4c28921c1201865c27dc0f012768799351c10b.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/46c7def792f8820aff04a0083057d32079d7ccc208e394eb00a440618f4455ba.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/594a10eddaf1ea6344dc62d41af7146f6e52471ccf1ee1fba6e61376c3ba5bce.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/5e4d793a1bc3ae3b2c7fedb39645e04d3bd6a86ceb064ba99746d6164034942d.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/6a28b28d04d8cf003fc6e41560ad05af138aecfdb0f7f9978bf12a1d3b4e353a.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/8e9d29f51d07bd7d9cd02aae2cc12c1bd575f3748f6a2b9065dcad75973c1e90.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/954f324b297d871035343be09391bc7c5e0df38faf3f4a3a92be92685a9ad4e3.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/a58d73b67de68741d8e4e9e7d212a7e98a7db0b864113fbd2b9056b166095c85.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/b44535f54c0d62ce9f9fa3a673ccff0f6d17086dce54787da0f8ab910c2ed1c9.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/b8f6674b359865d1c0880633f552a30210a60d30d2c11370e9ab0457f65f75a3.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/da3d0964cd50a338b3dedc5212ee6d4d045c04629f62a0e948c905c3ec27ab4c.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/dfc071d5c7a17280f23b1875b16a0f38ff61736e5985b2c9e3056f741f17bd5d.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/e12f27ecae32f087ea8696b8061c42facb63a91b2b100568f3602cc2f0b6ce60.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/bash/fe60ed7a2e79c21b81416fa2e77c827ea64df5ba5b6cd343a9b423731dc15b4d.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/glob/dc28800ddef1229e5c0bd125335ab31d85d5f8aba0ff2713d09829671b70f2ec.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/glob/e6fa077dd5e2e19045abf084f97dcfbcbffc1571967a0243ca40ff996d8bc9f2.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/010b7d94484960699c5c28b5d2ea86d53c2d998a78141c75b834409de64bf25c.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/0193f8465b3eaba72bb4f4f78d0376ca89a09d96e87bb9b63c4543023c6b5516.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/03edbaec20870710ae8531b002c837e2c092d53ed8b544d05330cf5fd699dcb4.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/09c695b86ba43584b134ed6ee26cbe023f58551e579158cf94790644ad6aaa53.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/0b96a0a521f9d4c0a88fc75a2e5f69e4c4b7be8ea5d73599eab390c88d4098d8.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/0ba5851c04aaa37f25f6b0a37daa3522754d7865e79b3abf0daf8fca54fc07f7.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/0beb89f407f205d5b2fdb075c98869ffa5db8e2a3687706e06399d3f58a3278f.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/0bf5d9171b6ec0a61962ae22ce8109a26abf764c031ddd5c8dcad25c678020ec.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/0db7a1bd5eb18329885082bc554f4456a5c254b687c25c2b3611a364634badd8.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/0dd1a484cf5b506de9a8e85db9c9156e7623bc633c07d8805d83768edf1d1b68.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/0f48a977857dc6fe0658c5341b8b409205bb6391cc458d19d18f06b1c37e3b8c.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/1194ded949e902bc25be21bfe63952a98381416bed255dc052b6715ebb81f11e.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/134f90a9b26f8bbc6fc602c3a1301623823abec5cb8eb9680ea060bea5d78b07.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/1461fb3572a606968e5d9738ec65dfe0cf4616ead5696f2b47dd36dd12cd8346.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/14f7537d8a7090ad8f6531bd9ecfadd9d727f2bf0c620afde878e8765d596cc8.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/176241ffb6774d19531593769c50349debb431f8c888f8e4fb46178af6f8f9e6.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/17e25775e4ce9b0fcb34b7af659d7d72f53262b1b59c21190f450c4eda8bb6a2.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/1a9cea8b7b788598502df8771b6c03f6b393613e1d911f04959ec59f3b7e9869.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/1b2ee53405771f837aa234d5a8d128c3f1fd6f16306ec5c71e30df1a55f0eab8.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/1c265542a4a6dac9cdc557ba271a9022d5f5bfa044d7ae4201a302ee59517542.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/1dd72f0779d1616cc4683de1565d1cc4242dee18987cfe5c9ead6ec445ab952f.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/1f0f6484841d5396cfb19f060ada806f54d62594a2a6f81af4ed70d379bdb82e.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/1f4854573b520c1a6e0fb4cd8488263f823a61a6867e4c7d92cdce74b4cb4d1b.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/200787ede572c7eee4ff7cd579a936b8ab0ecf6f25bb2f6ac89dbd04fdac1ef7.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/22fb4c5aa3fea197c71b90824449eca45095da4bd1c7bc76dbfb689abcd5cc49.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/29cd9403e9ab3dac5cc3a95fa0ede278decb57cf7183eaad8e29aed9903aba26.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/2aa8195d533da9ee878d5ff7e7c4574ad9dc54c57e85f0be801d9aa5ba7e9d65.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/2df4412a93598e76038f722e112a5519bbca58e31a27a471346aecf3c5d486b8.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/2f04b6777f986f64bbdcdd828eb4a7fa5aa67872fc0d61e891d2af9ec51a6fb8.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/3114f2804efe81842b21a85a4bc9eb2ef9f975c28e9220564e6cd2185fed11f7.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/3240cf436c636223d89029d2859dc8b8bbc059ea3b8b9a3cdcececb6e75d6da9.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/3a03ca37d32ea15316bb77147116bf8eeaa55ea255b7819f1b6350e80cd38481.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/4274f27741d2a37b85ea968754ede69180f59300532f1c8e2c8bcc6cb57d93f8.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/42c75defbb53e48d8521927f945412100cd487ad492ee1a57a57df3f64831096.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/435267ab04edbf55d21c169170faf8eca36f065abb282e9fd731cbf500763757.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/448d3ded3b00200238f3782ed0fb5fbe30166139308cfa6cd3e31867f3cf941e.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/449ac499b090311eb8b5594f7646d84f67e9da1fad4ad968b772d4d8ab404141.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/45f0d5dda63863f163106fbf234ba98c6b2ba88ee63c308b922b6b18b9d6d179.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/48a5ea12ce666954aeb22afab26d199f9ceb7c5db99531077bed0298837a4777.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/4d6a33d9eaeb38ed7558b7e0162b399580b211cedefdd2a4126b6363b0616b9a.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/54822f93bd0f279a2dc67f57f4b49a549938346f606c3ea62f76573ed7c19729.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/5592b8582682415bf399fd16bc4e354a8af6979acc7ee5f7d8161b6a2a090a6e.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/5697b946b47f9c271273606510662d25c579a1c3cd66a3f73f845178626adf8c.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/571cb6737be8d74e05976da2ba022ea1a5e191bdfeafa40b22834b61aca984ec.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/592ea99ad61dc416029a0a68a9ea47c765d706d7ffbae9cd697405da2dd8a9ec.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/5c0df9216c4f53dc1c2d786266a137dbe326ab4363ddc40307fb21a00a9f94ac.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/5ce22f90e1ec6217b95997fad94cc926c12ffdd6f3ef3e278bf0b89ecbcc6d62.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/5dc1de7af87cb4091467bc5f0265745e602853afdc3863c267b6e90a26f412c9.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/5fff0b4efc09b785f1ee5dee2e5d7ad4e247bdb9c93f41b5814c9db1c04cb8d7.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/6249573679ee1a300a25baec32ea72ee34eeffb45f73f676cc0b0f0d11a2d31d.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/6258f866ee46c82b3b4584aafd49625b86793f1324318970124c849013397865.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/640e6e9edd64f8ed1f4928e9af1f9890c17386cdbc86d329cc2256628e7c50bb.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/643717af84fd6f09302e9656f696f853b85dc10bdd144cc4b3ea064c0ee39056.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/65ed38867aa3162db6899d4f1b76907655d6af699cff567e2b776ec997f65b9e.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/67196d9894f03b07594d654caf016388b13842a7b3d11466a7b7532727d11bfa.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/6c6f4e1f9e1d09af3d8a7c10dd243df92781e6ebbbf4f1215c189d74b7a16e01.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/6cfadf5d61982d2bb941416d5fefc22202df0bd4dde584321be50716843f2a4e.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/6dbade43d62180ae1367c70744d985615fe64768efba5c77317ea4c349aa7958.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/6e20e5b86fbf934bbe180ab38a81e259006f0fc43b4d650820994dea3ead8075.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/705ec2d0ab89a76fbc02a18d23d8bf10b26eebd5144911cb398e46e2374524cf.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/73f1fdec89c242b1c28093dcc12e830a4467c5c5197286879a25feda693b3ede.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/745e2b17c9b412d9d89d380626ceb2eb088b2d24e1a4f26be948061a8daaccdd.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/74bf1dc40d9b884a5312567e5bc923389e9bcd10e9efa1eb87a01c50b1e11ef1.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/758f6bd9fa04989fe968fb80567eb4a4d028e9dd6ca9c482c0a919a7c9da6dad.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/762dfb3969ac05cfd8ed58ea34abea8b4e4756ec5c8ef7496e49bb6f824439af.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/7880b26ed67f9abd746b4e5c7ccc009f97a16cc5245b4fb04e9e51faf2e99b43.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/7b530ebb0d7be5cb364886c326ac09fedb208520170ec424c0d66f2a049cd735.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/7d4e0f51f0fa21846dfda5ceebb79cf53d0e8abf1b2f86ecd09ddf06f85cd3bc.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/7d79d72b0ff97ae7703118b1c3edc22a3e9aad968baaeb1210281e1b3e0fdf75.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/81d4cf35489f009f64aba1f01c0a9c73ac256391d5369dbbae2b3f92c912afb0.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/89124ab34d06feebcf91d5fa7fd8d3f36493f0d62ae79b0f339f87a229333a3b.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/8a1456d96d430228501f6c305ba67912312bfdd48b2841e2456160a02498ea5b.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/8bc79492c38d7124f4214f0437350fb1cfadaf6635bc4391c69fe64c6e8f6096.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/8c95072ee427abdb9a07444bf26dc78e72cf93ed9e898d77dd9aa643f6f5b913.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/98060d6195be5fb98d6098eb947853a25a305bce1ebf5a4218ffb791379b9dc6.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/98b2832dd79c7972eb441b3102f1f6aa40ccb867d7771ec238142564a3b4a117.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/98b76a32c3a05f7d91b8b81518f28b613f7ccb373575858fd6aa2711ddbc382e.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/9a5fd2d8be3b1e8ef2343f9a19bd75adba3687b2cb8234ee341d6cdc3ab1f361.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/9c80158f162aadb87f84195c4496a1c24f68ceca3535852835de9cf4e428d028.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/a9594b8f4f25e5b378fcc883960fa7afb2dea9d80851cb5d52f18d856be95219.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/abacaab899684c1677f97720dcfc4a6c1fbf98d2cfa44e25f040959586ccaa20.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/ac65e45db9f2c51a484173eb31b907c1cb007c5cacca21396790f5345968ca72.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/ac8641710e4c96567edad6364d218a08630ff20af9f075f61c20d013f9369648.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/ad798be6fa338bd3ee7fc49048192e39d3b2b78837051208815b817e5ca96793.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/b04c0955b68f788125018525e308e82987ada00d3943e21cb159f577319ccf11.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/b1b9c6d1eefe14c5076aa214fe4f98242f99ed9b146214d0305224539d8e78a1.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/b39bb289db5f9e4f31c67766f5e08333d10f384a2d5f6b71fb44522bc4f17f80.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/b64736bbdd8fe7ca1ff2ef98558f16f145ca437255ccebca44bf1041b0afbd55.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/b898cd80aa00ebdfda4ef314a4e245e62ee96c21935a7f332243a67b0072d1a0.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/c1a4508b9a74b3d1649f25dbd474780e6212ced036bbca6b4aac06d324ff10e9.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/c3c33582bb37fb71235e9d0fd2b8d2cc8c926cfcb014261356ea917db6417ebd.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/c63907ae1cb41e59de75df3d6e0dff27db2ce2434cac5f283a428e4fd9bee301.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/d2402b2d42c975305d4866353935ce285eb67ff7f2a2d74ee9be559d022c86f6.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/d4e8e439058ef24fb0671ee6674a5b854c17e0b93b012d2dbe8ed85928afe560.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/d8c8f51da7a2bc8977320248883adabe9a4d9da131e99f7dfe18a9c826b1c8b1.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/dbd79a71f323da5dc1570d5c8d6b99e73b642128697b6c51ab240379fa74f763.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/de09b36cc3fd06274fcdbfc7d431f170afe40b4fa8ddd5c0a281581ee03eabec.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/dfd45c97a1da7d27da6790c1b24048f584ed4f831e971cf3f4c366b7d8687980.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/e138fb7f4303433003aeeaf67b15d783b253696d3d24fd7dfacc50f619db04fd.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/e1ca31c715894314164641ba9d80dc13f7e8e146e8f77a995bc3650057ee3ba3.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/e6f0fb5f2688faeaa4875724c32f27e79d8a9710bbb91d2a950b84b3481fc374.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/e707578cd4b2132eae2e3bdfa918555c2a8f1f4ac52fd6dbc6fc9a347c44221b.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/ea0fc86903a5bd1f02832cc3eed4446d55e16dc7df0298c5d74afa56a89a8ca7.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/eab81978291f4725b9433192c5b7f4b5409cdcdeb80ffab9884c79ef230bdcdd.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/f04828b2b54922581d7cde5351807a457896b2940fd748e8d706fd5dc4bed971.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/f04b4f70fe5292dc485164699342c03f3cf4715ba0d5efa815cb7a332dd78c0b.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/f2012bd41aa48cd2e3f56611f32b041bd41863b681a79d5ff5f515a97e7e1ddc.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/f35c437708355261ca868cf38ade97384e86f24de9aab20849113dc78eb8564c.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/f638dfe4edbde834bd968f4d479c1c535dff1dfac10f3e003ec8673d5eca5864.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/f916ed291897b4afb5f8a55f5e333a53f11540e2ade24f691a7828885aa77a32.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/fa3b737ee93d45bfff6e78245a5ecad2476dc7010c75c772abc1c272cddae072.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/fd1133b3a420133590ffb1c050a65477a4751902ca9b832db1c23a6fb90200b8.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/fe3df7b68f7041d210336363f5b11faf963427dbcf4027172e19db05f7b24fa1.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/grep_content/ff6b896f93f2ac018a3af519be3001d1e4c8ca6ef9ae3e051aa646b409b6773f.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/index.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/ls/4f2cd109869e06f70f28f7aaaa3163fea4731bbb92dc4da8ac25177d6f122f87.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/ls/768197391db12061fb74d56cad07e9331db0bd832503b5e40be76b49208a111a.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/ls/a560ae7492ac913282b703abd48897905727acc058d0f9346b17d450f32e1a8a.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/01f0c4c39cc01ec7d59077fa8bfca183cbd6c93d0a7083261f228badca115eba.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/03079608ffe5b120094798aababb67671a20f8466c0197044eacaea56fa12d30.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/08e5d1cdde9e2d6dff5435ee87c6710470709d83c271185eaaaa6d652068d80e.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/10f74765725e10bd94d92eb25cea495ea8cb9d9151397b05b200ed44a852d882.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/3faa3ddc36161e84da99e18707d61b7ffbbbeb8217c28a55a027134f8def5d17.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/45cd4ad764e19e3fc0481b8d8649c235ae51634eb41da0806f9f00ab1bdb640d.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/4fdacfc564ff558dd602f672edfbb4a72494d8e3c8937bcf0a3d15e085c4a0b7.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/50eb11fb5aa96e54b2a7e68c0b9278ec3c07d222bad92270f4a51df58ca69e03.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/5a1f18c61191f6b4c1635363748a2aca49ad2183f046035728b5c23ee3df1123.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/72718c187cf24910d3c21d7e719e004efa27b4f5d7315bbe2b9a33e2494cc0f9.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/7fa851f7100b6e3e652604de11be2767b7a679aea40e941b0b1218478e5935ed.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/9d3ace7b725f6aa5809ca4bc298c5ac3d022cb92c29684c7709d63c9c5fd2ad4.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/dbeea3cc8bd22fdb703675e202063e7f4ce21ef00c5c83f74268cd6328ad912d.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/tool_result/ea66ecb02621262c26d0368c108d2f2f94e2d1f75dea6b38bf958c5bdbaa2ee7.txt +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/webfetch/2669c40a92ce6395790ae997503be646bdc3af4a49f799b38d8380e5ecd1e015.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/webfetch/5701edea87e370ce51349413bcba507833f48f2ad7337eef3deccc82c7d45a8d.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/webfetch/5c0eeec3d9ab0a6881d12ebd5a95b6b71b90d47640e38c914232d75704332f54.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/webfetch/80baa6870df61f51b68fadde829aa2ab889fd487f8a8171db36ea3b67ded24db.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/webfetch/915acd44f3846631527a3cd62e81d9908bb7e8769b970208ffa3326c65df8778.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/webfetch/a758c9f6242610e875e36aed11e99ac337359cbe512df15db6544504fa9e68b8.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/artifacts/webfetch/eca7d820f7461f58ee9b2b1e931842de54cd1ec023eca7a27e3bfb387efc6aa2.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/scheduled_prompts.json +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/SKILL.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/html2pptx.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/mce/mc.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/scripts/pack.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/scripts/unpack.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/scripts/validate.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/scripts/validation/base.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/scripts/validation/docx.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/scripts/validation/pptx.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml/scripts/validation/redlining.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/references/ooxml.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/scripts/html2pptx.js +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/scripts/inventory.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/scripts/rearrange.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/scripts/replace.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.agent/skills/powerpoint/scripts/thumbnail.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/.gitignore +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/CHANGELOG.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/CONTEXT.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/README.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/__main__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/distribution.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/mcp_cli.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/animations.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/approval_bridge.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/assistant_render.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/builtin_commands/.keep +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/builtin_commands/implement-plan.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/builtin_commands/learn.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/config/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/config/model.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/config/picker.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/config/picker_state.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/config/store.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/custom_slash_commands.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/env_utils.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/error_display.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/event_renderer.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/figures.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/file_ref_hint.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/fragment_utils.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/goal_resume_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/history_printer.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/input_geometry.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/layout_coordinator.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/logging_adapter.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/markdown_render.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/mention_completer.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/message_style.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/models.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/path_context_hint.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/components/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/components/detail_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/components/plugin_list.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/components/search_box.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/components/tab_bar.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/marketplace_install_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/operation_state.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/plugin_picker.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/tabs/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/tabs/discover_tab.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/tabs/errors_tab.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/tabs/installed_tab.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/preflight.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/preflight_wizard.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/print_mode.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/question_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/recap/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/recap/controller.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/resume_picker.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/resume_preview.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/resume_selector.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/rpc/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/rpc/approval.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/rpc/options.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/rpc/protocol.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/rpc/serde.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/rpc/server.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/rpc/session_host.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/rpc/stdin_reader.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/rpc/stdio.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/rpc_protocol.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/rpc_stdio.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/selection_menu.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/skill_slash_input.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/startup.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/startup_profile.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/status_bar.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/statusline/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/statusline/model.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/statusline/picker.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/statusline/picker_state.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/statusline/store.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/text_effects.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tips.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tool_approval_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tool_fold.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tool_result_formatters.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tool_result_store.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tool_result_viewer.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tool_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/transcript_viewer.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui_parts/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui_parts/btw_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui_parts/mcp_connecting_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui_parts/render_panels.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui_parts/slash_command_registry.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/update_check.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/update_messages.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/windows_updater.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/dist-comate/.gitignore +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/dist-comate/comate_cli-0.7.10-py3-none-any.whl +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/dist-comate/comate_cli-0.7.10.tar.gz +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/dist-hico/.gitignore +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/dist-hico/hico_cli-0.7.17-py3-none-any.whl +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/dist-hico/hico_cli-0.7.17.tar.gz +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/docs/cli-rpc-stdio-guide.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/docs/startup-performance.md +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/config/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/config/test_model.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/config/test_picker_state.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/config/test_picker_ui.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/config/test_roundtrip.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/config/test_store_load.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/config/test_store_save.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/conftest.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/fixtures/fake_mcp_misbehaving_stdout.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/recap/test_idle_recap_controller.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/recap/test_recap_history_rendering.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/recap/test_tui_idle_recap_integration.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/statusline/__init__.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/statusline/test_model.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/statusline/test_picker_state.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/statusline/test_store.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_animations_styles.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_animator_shuffle.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_app_mcp_preload.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_app_preflight_gate.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_app_print_mode.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_app_profile_threading.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_app_pty_smoke.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_app_shutdown.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_app_startup_latency.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_app_startup_order.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_app_token_cost_config.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_app_usage_line.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_approval_bridge.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_btw_slash_command.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_cli_project_root.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_compact_command_semantics.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_completion_context_activation.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_completion_status_panel.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_context_command.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_custom_slash_commands.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_discover_tab.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_distribution_contract.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_errors_tab.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_event_renderer.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_event_renderer_approval_wait.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_event_renderer_boundary.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_event_renderer_e2e.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_event_renderer_log_boundary.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_event_renderer_log_queue.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_event_renderer_stream_staging.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_event_renderer_streaming.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_event_renderer_tool_args_progress.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_event_renderer_tool_fold.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_file_ref_hint.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_format_error.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_goal_resume_tui.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_goal_resume_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_handle_error.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_history_printer.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_history_printer_log.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_history_printer_styles.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_history_printer_subtitle_position.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_history_printer_tool_fold.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_history_sync.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_history_sync_tool_fold.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_import_weight.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_input_behavior.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_input_history.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_installed_tab.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_interrupt_exit_semantics.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_layout_coordinator.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_logging_adapter.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_main_args.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_main_args_yolo.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_main_profile_entry.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_markdown_render.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_marketplaces_tab.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_mcp_cli.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_mcp_slash_command.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_mention_completer.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_menu_cursor_unification.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_message_style.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_model_switch_command.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_no_raw_colors.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_path_context_hint.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_plugin_operation_state.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_plugin_slash_commands.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_plugin_tui_components.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_preflight.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_preflight_copilot.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_pty_output_integrity.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_question_key_bindings.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_question_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_resume_picker.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_resume_preview.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_resume_selector.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_rewind_command_semantics.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_rpc_approval.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_rpc_options.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_rpc_protocol.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_rpc_serde.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_rpc_server_methods.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_rpc_session_host.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_rpc_stdin_reader.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_rpc_stdio_transport.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_selection_menu.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_session_query_token_summary.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_shutdown_noise_guard.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_shutdown_noise_integration.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_skill_slash_input.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_skills_slash_command.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_slash_argument_hint.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_slash_clear.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_slash_completer.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_slash_registry.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_startup_import_budget.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_status_bar.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_status_bar_transient.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_stream_staging_panel.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_task_panel_format.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_task_panel_key_bindings.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_task_panel_rendering.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_task_poll.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_theme.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tips.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tool_approval_tui.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tool_approval_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tool_fold.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tool_fold_panel.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tool_result_formatters.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tool_result_store.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tool_result_viewer.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tool_result_viewer_key_bindings.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tool_view.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tool_view_styles.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_transcript_viewer.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_transcript_viewer_tool_fold.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_builtin_slash_chain.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_elapsed_status.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_esc_queue.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_llm_retry_panel.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_local_interactive_barrier.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_mcp_init_gate.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_paste_newline_guard.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_paste_placeholder.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_provider_error_shield.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_queue_preview.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_queue_sdk_source.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_scheduled_fire_log.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_send_undo_window.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_split_invariance.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_startup_latency.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_team_messages.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_thinking_display.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_tool_result_registry_lifecycle.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_tui_window_too_small_fallback.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_usage_command.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_windows_updater.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tests/test_wrap_user_text.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tools/logo_lab.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tools/nico_preview.py +0 -0
- {comate_cli-0.10.0 → comate_cli-0.10.2}/tools/startup_bench.py +0 -0
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import atexit
|
|
4
4
|
import asyncio
|
|
5
|
+
from contextlib import nullcontext
|
|
5
6
|
import logging
|
|
6
7
|
import os
|
|
7
8
|
import signal
|
|
@@ -403,6 +404,27 @@ def _read_stdin_if_ready(
|
|
|
403
404
|
return str(read()) if callable(read) else ""
|
|
404
405
|
|
|
405
406
|
|
|
407
|
+
def _build_wellformed_input():
|
|
408
|
+
"""Build terminal input that replaces malformed bytes instead of surrogates."""
|
|
409
|
+
from prompt_toolkit.input import create_input
|
|
410
|
+
|
|
411
|
+
inp = create_input()
|
|
412
|
+
# Only POSIX 的 Vt100Input 用 PosixStdinReader。Windows 返回 Win32Input,
|
|
413
|
+
# 且 prompt_toolkit.input.vt100 顶层 `assert sys.platform != "win32"`,
|
|
414
|
+
# 因此必须先判平台再 import,否则 Windows 交互启动会崩。
|
|
415
|
+
if sys.platform == "win32":
|
|
416
|
+
return inp
|
|
417
|
+
|
|
418
|
+
from prompt_toolkit.input.posix_utils import PosixStdinReader
|
|
419
|
+
from prompt_toolkit.input.vt100 import Vt100Input
|
|
420
|
+
|
|
421
|
+
if isinstance(inp, Vt100Input):
|
|
422
|
+
inp.stdin_reader = PosixStdinReader(
|
|
423
|
+
inp.fileno(), errors="replace", encoding=inp.stdin.encoding
|
|
424
|
+
)
|
|
425
|
+
return inp
|
|
426
|
+
|
|
427
|
+
|
|
406
428
|
def main(argv: list[str] | None = None, *, profile=None) -> None:
|
|
407
429
|
from comate_cli.distribution import DEFAULT_PROFILE
|
|
408
430
|
|
|
@@ -460,22 +482,31 @@ def main(argv: list[str] | None = None, *, profile=None) -> None:
|
|
|
460
482
|
raise SystemExit(1)
|
|
461
483
|
print_message = "\n\n".join(parts)
|
|
462
484
|
|
|
485
|
+
interactive = not rpc_stdio and print_message is None
|
|
486
|
+
if interactive:
|
|
487
|
+
from prompt_toolkit.application import create_app_session
|
|
488
|
+
|
|
489
|
+
input_session = create_app_session(input=_build_wellformed_input())
|
|
490
|
+
else:
|
|
491
|
+
input_session = nullcontext()
|
|
492
|
+
|
|
463
493
|
try:
|
|
464
|
-
|
|
465
|
-
run(
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
494
|
+
with input_session:
|
|
495
|
+
asyncio.run(
|
|
496
|
+
run(
|
|
497
|
+
rpc_stdio=rpc_stdio,
|
|
498
|
+
resume_session_id=resume_session_id,
|
|
499
|
+
resume_select=resume_select,
|
|
500
|
+
print_message=print_message,
|
|
501
|
+
print_output_format=print_output_format,
|
|
502
|
+
add_dirs=add_dirs,
|
|
503
|
+
yolo=yolo,
|
|
504
|
+
process_start_perf=_PROCESS_START_PERF,
|
|
505
|
+
app_import_start_perf=_app_import_start_perf,
|
|
506
|
+
app_import_done_perf=_app_import_done_perf,
|
|
507
|
+
profile=profile,
|
|
508
|
+
)
|
|
477
509
|
)
|
|
478
|
-
)
|
|
479
510
|
except KeyboardInterrupt:
|
|
480
511
|
noise_guard.begin_shutdown()
|
|
481
512
|
finally:
|
|
@@ -310,7 +310,7 @@ def _import_sdk_agent_components(
|
|
|
310
310
|
profiler: StartupProfiler | None = None,
|
|
311
311
|
) -> tuple[type, type, type, type]:
|
|
312
312
|
with _profile_section(profiler, "main.import.sdk_agent"):
|
|
313
|
-
from comate_agent_sdk.agent.compaction import CompactionConfig
|
|
313
|
+
from comate_agent_sdk.agent.compaction.models import CompactionConfig
|
|
314
314
|
from comate_agent_sdk.agent.options import AgentConfig
|
|
315
315
|
from comate_agent_sdk.agent.service import Agent
|
|
316
316
|
from comate_agent_sdk.context import EnvOptions
|
|
@@ -3,15 +3,23 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
CODENAMES: dict[str, str] = {
|
|
6
|
-
"0.11.1": "Fable 5 Verified",
|
|
7
|
-
"0.11.0": "Fable 5 Verified",
|
|
8
6
|
"0.3.4": "",
|
|
9
7
|
"0.3.3": "Update for My Brothers",
|
|
10
8
|
"0.3.2": "We are with Ukraine",
|
|
11
9
|
}
|
|
12
10
|
|
|
11
|
+
SERIES_CODENAMES: dict[str, str] = {
|
|
12
|
+
"0.10.": "Fable 5 Verified",
|
|
13
|
+
}
|
|
14
|
+
|
|
13
15
|
|
|
14
16
|
def get_codename(ver: str) -> str | None:
|
|
15
17
|
"""Return codename for a version string like '0.3.2' or 'v0.3.2'."""
|
|
16
18
|
stripped = ver.lstrip("v")
|
|
17
|
-
|
|
19
|
+
exact = CODENAMES.get(stripped)
|
|
20
|
+
if exact is not None:
|
|
21
|
+
return exact
|
|
22
|
+
for prefix, codename in SERIES_CODENAMES.items():
|
|
23
|
+
if stripped.startswith(prefix):
|
|
24
|
+
return codename
|
|
25
|
+
return None
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from prompt_toolkit.document import Document
|
|
4
|
+
from prompt_toolkit.layout import HSplit, Window
|
|
5
|
+
from prompt_toolkit.layout.controls import FormattedTextControl
|
|
6
|
+
from prompt_toolkit.layout.dimension import Dimension
|
|
7
|
+
from prompt_toolkit.widgets import TextArea
|
|
8
|
+
|
|
9
|
+
from comate_cli.terminal_agent.figures import HEAVY_HORIZONTAL
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class GoalEditView:
|
|
13
|
+
def __init__(self) -> None:
|
|
14
|
+
self._goal_id: str | None = None
|
|
15
|
+
self._error: str = ""
|
|
16
|
+
self._text_area = TextArea(
|
|
17
|
+
text="",
|
|
18
|
+
multiline=True,
|
|
19
|
+
wrap_lines=True,
|
|
20
|
+
height=Dimension(min=3, max=8),
|
|
21
|
+
style="class:goal_edit.body",
|
|
22
|
+
)
|
|
23
|
+
self._root = HSplit(
|
|
24
|
+
[
|
|
25
|
+
Window(
|
|
26
|
+
content=FormattedTextControl(text=self._title_fragments),
|
|
27
|
+
height=1,
|
|
28
|
+
dont_extend_height=True,
|
|
29
|
+
style="class:goal_edit.title",
|
|
30
|
+
),
|
|
31
|
+
self._text_area,
|
|
32
|
+
Window(height=1, char=HEAVY_HORIZONTAL, style="class:goal_edit.divider"),
|
|
33
|
+
Window(
|
|
34
|
+
content=FormattedTextControl(text=self._footer_fragments),
|
|
35
|
+
height=1,
|
|
36
|
+
dont_extend_height=True,
|
|
37
|
+
style="class:goal_edit.footer",
|
|
38
|
+
),
|
|
39
|
+
]
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def container(self) -> HSplit:
|
|
44
|
+
return self._root
|
|
45
|
+
|
|
46
|
+
def focus_target(self) -> Window:
|
|
47
|
+
return self._text_area.window
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def goal_id(self) -> str | None:
|
|
51
|
+
return self._goal_id
|
|
52
|
+
|
|
53
|
+
def enter(self, *, goal_id: str, objective: str) -> None:
|
|
54
|
+
self._goal_id = goal_id
|
|
55
|
+
self._error = ""
|
|
56
|
+
self._text_area.buffer.set_document(
|
|
57
|
+
Document(objective, cursor_position=len(objective)),
|
|
58
|
+
bypass_readonly=True,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
def clear(self) -> None:
|
|
62
|
+
self._goal_id = None
|
|
63
|
+
self._error = ""
|
|
64
|
+
self._text_area.buffer.set_document(
|
|
65
|
+
Document("", cursor_position=0),
|
|
66
|
+
bypass_readonly=True,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
def current_text(self) -> str:
|
|
70
|
+
return self._text_area.buffer.text
|
|
71
|
+
|
|
72
|
+
def set_error(self, message: str) -> None:
|
|
73
|
+
self._error = str(message)
|
|
74
|
+
|
|
75
|
+
def _title_fragments(self) -> list[tuple[str, str]]:
|
|
76
|
+
return [("class:goal_edit.title", " Edit Goal")]
|
|
77
|
+
|
|
78
|
+
def _footer_fragments(self) -> list[tuple[str, str]]:
|
|
79
|
+
if self._error:
|
|
80
|
+
return [("class:goal_edit.error", f" {self._error}")]
|
|
81
|
+
return [
|
|
82
|
+
(
|
|
83
|
+
"class:goal_edit.hint",
|
|
84
|
+
" enter save | ctrl+j newline | esc cancel",
|
|
85
|
+
)
|
|
86
|
+
]
|
|
@@ -210,8 +210,7 @@ def _append_codename(text: Text, codename: str) -> None:
|
|
|
210
210
|
text.append(codename, style=_CODENAME_STYLE)
|
|
211
211
|
return
|
|
212
212
|
|
|
213
|
-
text.append("Fable ", style=
|
|
214
|
-
text.append("5", style=_FABLE_VERIFIED_NUMBER_STYLE)
|
|
213
|
+
text.append("Fable 5", style=_FABLE_VERIFIED_NUMBER_STYLE)
|
|
215
214
|
text.append(" Verified", style=_CODENAME_STYLE)
|
|
216
215
|
|
|
217
216
|
|
|
@@ -150,6 +150,21 @@ SLASH_COMMAND_SPECS: tuple[SlashCommandSpec, ...] = (
|
|
|
150
150
|
),
|
|
151
151
|
)
|
|
152
152
|
SLASH_COMMANDS: tuple[str, ...] = tuple(f"/{cmd.name}" for cmd in SLASH_COMMAND_SPECS)
|
|
153
|
+
ALLOW_WHEN_BUSY_SLASH_COMMANDS: frozenset[str] = frozenset(
|
|
154
|
+
{
|
|
155
|
+
"help",
|
|
156
|
+
"session",
|
|
157
|
+
"usage",
|
|
158
|
+
"context",
|
|
159
|
+
"skills",
|
|
160
|
+
"mcp",
|
|
161
|
+
"exit",
|
|
162
|
+
"plugin",
|
|
163
|
+
"reload-plugins",
|
|
164
|
+
"btw",
|
|
165
|
+
"goal",
|
|
166
|
+
}
|
|
167
|
+
)
|
|
153
168
|
|
|
154
169
|
|
|
155
170
|
class SlashCommandCompleter(Completer):
|
|
@@ -170,6 +170,12 @@ def main_tui_style_dict() -> dict[str, str]:
|
|
|
170
170
|
"goal_resume.description.selected": f"fg:{ACCENT_SOFT}",
|
|
171
171
|
"goal_resume.footer": f"bg:default {TEXT_MUTED}",
|
|
172
172
|
"goal_resume.hint": f"fg:{TEXT_FAINT}",
|
|
173
|
+
"goal_edit.body": f"bg:default {TEXT}",
|
|
174
|
+
"goal_edit.title": f"bg:default {TEXT_BRIGHT} bold",
|
|
175
|
+
"goal_edit.divider": f"fg:{LINE}",
|
|
176
|
+
"goal_edit.footer": f"bg:default {TEXT_MUTED}",
|
|
177
|
+
"goal_edit.hint": f"fg:{TEXT_FAINT}",
|
|
178
|
+
"goal_edit.error": f"fg:{ERROR}",
|
|
173
179
|
# completion
|
|
174
180
|
"completion.status": f"bg:default {TEXT_MUTED}",
|
|
175
181
|
"completion.status.item": f"bg:default {TEXT_MUTED}",
|
|
@@ -62,6 +62,7 @@ from comate_cli.terminal_agent.goal_resume_view import (
|
|
|
62
62
|
GoalResumeActionKind,
|
|
63
63
|
GoalResumePromptUI,
|
|
64
64
|
)
|
|
65
|
+
from comate_cli.terminal_agent.goal_edit_view import GoalEditView
|
|
65
66
|
from comate_cli.terminal_agent.mention_completer import LocalFileMentionCompleter
|
|
66
67
|
from comate_cli.terminal_agent.path_context_hint import build_path_context_hint
|
|
67
68
|
from comate_cli.terminal_agent.custom_slash_commands import (
|
|
@@ -86,6 +87,7 @@ from comate_cli.terminal_agent.selection_menu import (
|
|
|
86
87
|
SelectionMenuUI,
|
|
87
88
|
)
|
|
88
89
|
from comate_cli.terminal_agent.slash_commands import (
|
|
90
|
+
ALLOW_WHEN_BUSY_SLASH_COMMANDS,
|
|
89
91
|
SLASH_COMMAND_SPECS,
|
|
90
92
|
SlashArgumentHintAutoSuggest,
|
|
91
93
|
SlashCommandCompleter,
|
|
@@ -466,6 +468,7 @@ class TerminalAgentTUI(
|
|
|
466
468
|
self._statusline_ui = StatuslinePickerUI()
|
|
467
469
|
self._goal_resume_ui = GoalResumePromptUI()
|
|
468
470
|
self._goal_resume_action_pending = False
|
|
471
|
+
self._goal_edit_view = GoalEditView()
|
|
469
472
|
self._install_view = MarketplaceInstallView()
|
|
470
473
|
self._mcp_connecting_view = McpConnectingView()
|
|
471
474
|
self._btw_view = BtwView()
|
|
@@ -650,6 +653,10 @@ class TerminalAgentTUI(
|
|
|
650
653
|
content=self._goal_resume_ui.container,
|
|
651
654
|
filter=Condition(lambda: self._ui_mode == UIMode.GOAL_RESUME),
|
|
652
655
|
)
|
|
656
|
+
self._goal_edit_container = ConditionalContainer(
|
|
657
|
+
content=self._goal_edit_view.container,
|
|
658
|
+
filter=Condition(lambda: self._ui_mode == UIMode.GOAL_EDIT),
|
|
659
|
+
)
|
|
653
660
|
|
|
654
661
|
# idle 时 todo/queue 全部隐藏,它们之间的分隔空行也应该一并消失,
|
|
655
662
|
# 否则多余的固定高度会导致 prompt_toolkit 非全屏渲染时高度波动 → scrollback 污染。
|
|
@@ -716,6 +723,7 @@ class TerminalAgentTUI(
|
|
|
716
723
|
self._config_container,
|
|
717
724
|
self._statusline_container,
|
|
718
725
|
self._goal_resume_container,
|
|
726
|
+
self._goal_edit_container,
|
|
719
727
|
Window(height=1, char=HEAVY_HORIZONTAL, style="class:input.separator"),
|
|
720
728
|
self._bottom_container,
|
|
721
729
|
],
|
|
@@ -1032,25 +1040,15 @@ class TerminalAgentTUI(
|
|
|
1032
1040
|
"config": self._slash_config,
|
|
1033
1041
|
"statusline": self._slash_statusline,
|
|
1034
1042
|
}
|
|
1035
|
-
allow_when_busy = {
|
|
1036
|
-
"help",
|
|
1037
|
-
"session",
|
|
1038
|
-
"usage",
|
|
1039
|
-
"context",
|
|
1040
|
-
"skills",
|
|
1041
|
-
"mcp",
|
|
1042
|
-
"exit",
|
|
1043
|
-
"plugin",
|
|
1044
|
-
"reload-plugins",
|
|
1045
|
-
"btw",
|
|
1046
|
-
}
|
|
1047
|
-
|
|
1048
1043
|
for spec in SLASH_COMMAND_SPECS:
|
|
1049
1044
|
handler = handlers.get(spec.name)
|
|
1050
1045
|
if handler is None:
|
|
1051
1046
|
logger.warning(f"missing slash command handler: {spec.name}")
|
|
1052
1047
|
continue
|
|
1053
|
-
if
|
|
1048
|
+
if (
|
|
1049
|
+
spec.name in ALLOW_WHEN_BUSY_SLASH_COMMANDS
|
|
1050
|
+
and spec.execution_kind != "local"
|
|
1051
|
+
):
|
|
1054
1052
|
raise ValueError(
|
|
1055
1053
|
f"slash command /{spec.name} cannot be allow_when_busy when "
|
|
1056
1054
|
f"execution_kind={spec.execution_kind}"
|
|
@@ -1058,7 +1056,7 @@ class TerminalAgentTUI(
|
|
|
1058
1056
|
self._slash_registry.register(
|
|
1059
1057
|
spec=spec,
|
|
1060
1058
|
handler=handler,
|
|
1061
|
-
allow_when_busy=spec.name in
|
|
1059
|
+
allow_when_busy=spec.name in ALLOW_WHEN_BUSY_SLASH_COMMANDS,
|
|
1062
1060
|
source="builtin",
|
|
1063
1061
|
argument_hint=spec.argument_hint,
|
|
1064
1062
|
)
|
|
@@ -97,12 +97,6 @@ class CommandsMixin:
|
|
|
97
97
|
self._renderer.append_system_message(normalized, severity=severity)
|
|
98
98
|
|
|
99
99
|
def _cycle_agent_mode(self) -> None:
|
|
100
|
-
if self._busy:
|
|
101
|
-
self._renderer.append_system_message(
|
|
102
|
-
"A task is currently running. Please switch modes after this turn completes.",
|
|
103
|
-
)
|
|
104
|
-
self._refresh_layers()
|
|
105
|
-
return
|
|
106
100
|
try:
|
|
107
101
|
cycle_permission_mode = getattr(self._session, "cycle_permission_mode", None)
|
|
108
102
|
if not callable(cycle_permission_mode):
|
|
@@ -251,10 +245,7 @@ class CommandsMixin:
|
|
|
251
245
|
if command == "edit":
|
|
252
246
|
objective = remainder.strip()
|
|
253
247
|
if not objective:
|
|
254
|
-
self.
|
|
255
|
-
"Usage: /goal edit <objective>",
|
|
256
|
-
severity="error",
|
|
257
|
-
)
|
|
248
|
+
self._open_goal_edit_view()
|
|
258
249
|
return
|
|
259
250
|
await self._run_goal_mutation(
|
|
260
251
|
self._session.edit_goal(objective),
|
|
@@ -336,6 +327,59 @@ class CommandsMixin:
|
|
|
336
327
|
success_prefix="Goal budget updated",
|
|
337
328
|
)
|
|
338
329
|
|
|
330
|
+
def _open_goal_edit_view(self) -> None:
|
|
331
|
+
snapshot = self._session.current_goal_snapshot()
|
|
332
|
+
if snapshot is None:
|
|
333
|
+
self._append_slash_command_result(
|
|
334
|
+
"No goal to edit. Use /goal <objective> to create one.",
|
|
335
|
+
severity="error",
|
|
336
|
+
)
|
|
337
|
+
return
|
|
338
|
+
self._goal_edit_view.enter(
|
|
339
|
+
goal_id=snapshot.goal_id,
|
|
340
|
+
objective=snapshot.objective,
|
|
341
|
+
)
|
|
342
|
+
self._set_ui_mode(UIMode.GOAL_EDIT)
|
|
343
|
+
self._sync_focus_for_mode()
|
|
344
|
+
self._invalidate()
|
|
345
|
+
|
|
346
|
+
def _handle_goal_edit_save(self) -> None:
|
|
347
|
+
objective = self._goal_edit_view.current_text().strip()
|
|
348
|
+
if not objective:
|
|
349
|
+
self._goal_edit_view.set_error("Objective cannot be empty.")
|
|
350
|
+
self._invalidate()
|
|
351
|
+
return
|
|
352
|
+
self._schedule_background(self._apply_goal_edit(objective))
|
|
353
|
+
|
|
354
|
+
def _handle_goal_edit_cancel(self) -> None:
|
|
355
|
+
self._goal_edit_view.clear()
|
|
356
|
+
self._set_ui_mode(UIMode.NORMAL)
|
|
357
|
+
self._sync_focus_for_mode()
|
|
358
|
+
self._renderer.seed_user_message("/goal edit")
|
|
359
|
+
self._renderer.append_subtitle("Goal edit cancelled.")
|
|
360
|
+
self._refresh_layers()
|
|
361
|
+
|
|
362
|
+
async def _apply_goal_edit(self, objective: str) -> None:
|
|
363
|
+
try:
|
|
364
|
+
snapshot = await self._session.edit_goal(objective)
|
|
365
|
+
except (ChatSessionError, ValueError, RuntimeError) as exc:
|
|
366
|
+
self._goal_edit_view.clear()
|
|
367
|
+
self._set_ui_mode(UIMode.NORMAL)
|
|
368
|
+
self._sync_focus_for_mode()
|
|
369
|
+
self._renderer.seed_user_message("/goal edit")
|
|
370
|
+
self._renderer.append_subtitle(str(exc), severity="error")
|
|
371
|
+
self._refresh_layers()
|
|
372
|
+
return
|
|
373
|
+
await self._refresh_status_after_goal_update()
|
|
374
|
+
self._goal_edit_view.clear()
|
|
375
|
+
self._set_ui_mode(UIMode.NORMAL)
|
|
376
|
+
self._sync_focus_for_mode()
|
|
377
|
+
self._renderer.seed_user_message("/goal edit")
|
|
378
|
+
self._renderer.append_subtitle(
|
|
379
|
+
f"Goal updated: {self._format_goal_summary(snapshot)}"
|
|
380
|
+
)
|
|
381
|
+
self._refresh_layers()
|
|
382
|
+
|
|
339
383
|
async def _run_goal_mutation(self, awaitable: Any, *, success_prefix: str) -> None:
|
|
340
384
|
try:
|
|
341
385
|
snapshot = await awaitable
|
|
@@ -8,7 +8,7 @@ from pathlib import Path
|
|
|
8
8
|
from typing import Any
|
|
9
9
|
|
|
10
10
|
from prompt_toolkit.application import run_in_terminal
|
|
11
|
-
from rich.console import Console
|
|
11
|
+
from rich.console import Console, detect_legacy_windows
|
|
12
12
|
|
|
13
13
|
from comate_agent_sdk.agent.runner_engine.projection.tool_result_projection import (
|
|
14
14
|
extract_read_metadata,
|
|
@@ -410,21 +410,34 @@ class HistorySyncMixin:
|
|
|
410
410
|
pending[-1].entry_type == "thinking" and busy
|
|
411
411
|
)
|
|
412
412
|
|
|
413
|
-
#
|
|
414
|
-
#
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
413
|
+
# scrollback 渲染目标按终端 VT 能力分流:
|
|
414
|
+
# - 非 legacy 终端保留 StringIO 预渲染,缩短 run_in_terminal 的擦屏窗口。
|
|
415
|
+
# - legacy Windows conhost 必须直渲真 stdout,才能命中 Rich 的 Win32 上色分支。
|
|
416
|
+
ansi_payload: str | None
|
|
417
|
+
if detect_legacy_windows():
|
|
418
|
+
ansi_payload = None
|
|
419
|
+
else:
|
|
420
|
+
prerender_buffer = io.StringIO()
|
|
421
|
+
prerender_console = Console(
|
|
422
|
+
file=prerender_buffer,
|
|
423
|
+
force_terminal=True,
|
|
424
|
+
width=self._terminal_width(),
|
|
425
|
+
)
|
|
426
|
+
print_history_group_sync(prerender_console, group)
|
|
427
|
+
ansi_payload = prerender_buffer.getvalue()
|
|
423
428
|
|
|
424
429
|
def _print() -> None:
|
|
425
430
|
out = sys.__stdout__ or sys.stdout
|
|
426
|
-
|
|
427
|
-
|
|
431
|
+
if ansi_payload is None:
|
|
432
|
+
scrollback_console = Console(
|
|
433
|
+
file=out,
|
|
434
|
+
force_terminal=True,
|
|
435
|
+
width=self._terminal_width(),
|
|
436
|
+
)
|
|
437
|
+
print_history_group_sync(scrollback_console, group)
|
|
438
|
+
else:
|
|
439
|
+
out.write(ansi_payload)
|
|
440
|
+
out.flush()
|
|
428
441
|
# 如果刚 print 了 user entry 且 staging 仍在,在同一个
|
|
429
442
|
# run_in_terminal 原子窗口内清除 staging,让 Layout 重渲染时
|
|
430
443
|
# staging 行已经消失——erase + print + repaint 零时间差。
|
{comate_cli-0.10.0 → comate_cli-0.10.2}/comate_cli/terminal_agent/tui_parts/input_behavior.py
RENAMED
|
@@ -171,6 +171,9 @@ class InputBehaviorMixin:
|
|
|
171
171
|
if self._ui_mode == UIMode.GOAL_RESUME:
|
|
172
172
|
self._app.layout.focus(self._goal_resume_ui.focus_target())
|
|
173
173
|
return
|
|
174
|
+
if self._ui_mode == UIMode.GOAL_EDIT:
|
|
175
|
+
self._app.layout.focus(self._goal_edit_view.focus_target())
|
|
176
|
+
return
|
|
174
177
|
self._app.layout.focus(self._input_area.window)
|
|
175
178
|
|
|
176
179
|
def _handle_question_action(self, action: QuestionAction | None) -> None:
|
|
@@ -119,6 +119,7 @@ class KeyBindingsMixin:
|
|
|
119
119
|
config_mode = Condition(lambda: self._ui_mode == UIMode.CONFIG)
|
|
120
120
|
statusline_mode = Condition(lambda: self._ui_mode == UIMode.STATUSLINE)
|
|
121
121
|
goal_resume_mode = Condition(lambda: self._ui_mode == UIMode.GOAL_RESUME)
|
|
122
|
+
goal_edit_mode = Condition(lambda: self._ui_mode == UIMode.GOAL_EDIT)
|
|
122
123
|
todo_panel_expanded = Condition(
|
|
123
124
|
lambda: self._todo_panel_expanded and self._renderer.has_active_todos()
|
|
124
125
|
)
|
|
@@ -282,6 +283,15 @@ class KeyBindingsMixin:
|
|
|
282
283
|
self._sync_focus_for_mode()
|
|
283
284
|
self._invalidate()
|
|
284
285
|
|
|
286
|
+
@bindings.add(
|
|
287
|
+
"s-tab",
|
|
288
|
+
filter=tool_approval_mode & ~tool_approval_feedback_focused,
|
|
289
|
+
eager=True,
|
|
290
|
+
)
|
|
291
|
+
def _tool_approval_cycle_mode(event) -> None:
|
|
292
|
+
del event
|
|
293
|
+
self._cycle_agent_mode()
|
|
294
|
+
|
|
285
295
|
@bindings.add("enter", filter=plugin_mode, eager=True)
|
|
286
296
|
def _plugin_enter(event) -> None:
|
|
287
297
|
del event
|
|
@@ -596,6 +606,21 @@ class KeyBindingsMixin:
|
|
|
596
606
|
self._handle_goal_resume_action(self._goal_resume_ui.handle_escape())
|
|
597
607
|
self._invalidate()
|
|
598
608
|
|
|
609
|
+
# ---- GOAL_EDIT mode key bindings ----
|
|
610
|
+
@bindings.add("enter", filter=goal_edit_mode, eager=True)
|
|
611
|
+
def _goal_edit_save(event) -> None:
|
|
612
|
+
del event
|
|
613
|
+
self._handle_goal_edit_save()
|
|
614
|
+
|
|
615
|
+
@bindings.add("c-j", filter=goal_edit_mode, eager=True)
|
|
616
|
+
def _goal_edit_newline(event) -> None:
|
|
617
|
+
event.current_buffer.insert_text("\n")
|
|
618
|
+
|
|
619
|
+
@bindings.add("escape", filter=goal_edit_mode)
|
|
620
|
+
def _goal_edit_cancel(event) -> None:
|
|
621
|
+
del event
|
|
622
|
+
self._handle_goal_edit_cancel()
|
|
623
|
+
|
|
599
624
|
@bindings.add("enter", filter=question_mode)
|
|
600
625
|
def _question_enter(event) -> None:
|
|
601
626
|
del event
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import unittest
|
|
4
|
+
|
|
5
|
+
from comate_cli.terminal_agent.slash_commands import (
|
|
6
|
+
ALLOW_WHEN_BUSY_SLASH_COMMANDS,
|
|
7
|
+
SLASH_COMMAND_SPECS,
|
|
8
|
+
SlashCommandSpec,
|
|
9
|
+
)
|
|
10
|
+
from comate_cli.terminal_agent.tui_parts.commands import CommandsMixin
|
|
11
|
+
from comate_cli.terminal_agent.tui_parts.slash_command_registry import (
|
|
12
|
+
SlashCommandRegistry,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class TestBusyWhitelistContract(unittest.TestCase):
|
|
17
|
+
def test_goal_allowed_when_busy(self) -> None:
|
|
18
|
+
self.assertIn("goal", ALLOW_WHEN_BUSY_SLASH_COMMANDS)
|
|
19
|
+
|
|
20
|
+
def test_destructive_commands_stay_blocked_when_busy(self) -> None:
|
|
21
|
+
for name in ("clear", "rewind", "compact"):
|
|
22
|
+
self.assertNotIn(name, ALLOW_WHEN_BUSY_SLASH_COMMANDS)
|
|
23
|
+
|
|
24
|
+
def test_model_and_config_stay_blocked_when_busy(self) -> None:
|
|
25
|
+
for name in ("model", "config", "statusline"):
|
|
26
|
+
self.assertNotIn(name, ALLOW_WHEN_BUSY_SLASH_COMMANDS)
|
|
27
|
+
|
|
28
|
+
def test_whitelist_only_contains_local_builtin_commands(self) -> None:
|
|
29
|
+
spec_by_name = {spec.name: spec for spec in SLASH_COMMAND_SPECS}
|
|
30
|
+
for name in ALLOW_WHEN_BUSY_SLASH_COMMANDS:
|
|
31
|
+
self.assertIn(name, spec_by_name)
|
|
32
|
+
self.assertEqual(spec_by_name[name].execution_kind, "local")
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class _FakeRenderer:
|
|
36
|
+
def __init__(self) -> None:
|
|
37
|
+
self.messages: list[tuple[str, str]] = []
|
|
38
|
+
|
|
39
|
+
def seed_user_message(self, text: str) -> None:
|
|
40
|
+
del text
|
|
41
|
+
|
|
42
|
+
def append_subtitle(self, text: str, *, severity: str = "info") -> None:
|
|
43
|
+
self.messages.append((text, severity))
|
|
44
|
+
|
|
45
|
+
def append_system_message(self, text: str, *, severity: str = "info") -> None:
|
|
46
|
+
self.messages.append((text, severity))
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class _Harness(CommandsMixin):
|
|
50
|
+
def __init__(self) -> None:
|
|
51
|
+
self._busy = True
|
|
52
|
+
self._renderer = _FakeRenderer()
|
|
53
|
+
self._slash_registry = SlashCommandRegistry()
|
|
54
|
+
self.calls: list[str] = []
|
|
55
|
+
|
|
56
|
+
def _refresh_layers(self) -> None:
|
|
57
|
+
return None
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class TestExecuteCommandBusyGate(unittest.IsolatedAsyncioTestCase):
|
|
61
|
+
async def test_busy_blocks_non_whitelisted_command(self) -> None:
|
|
62
|
+
host = _Harness()
|
|
63
|
+
host._slash_registry.register(
|
|
64
|
+
spec=SlashCommandSpec(name="clear", description="", execution_kind="local"),
|
|
65
|
+
handler=lambda args: host.calls.append(f"clear:{args}"),
|
|
66
|
+
allow_when_busy=False,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
await host._execute_command("/clear")
|
|
70
|
+
|
|
71
|
+
self.assertEqual(host.calls, [])
|
|
72
|
+
self.assertIn("not available right now", host._renderer.messages[-1][0])
|
|
73
|
+
self.assertEqual(host._renderer.messages[-1][1], "error")
|
|
74
|
+
|
|
75
|
+
async def test_busy_allows_whitelisted_command(self) -> None:
|
|
76
|
+
host = _Harness()
|
|
77
|
+
host._slash_registry.register(
|
|
78
|
+
spec=SlashCommandSpec(name="goal", description="", execution_kind="local"),
|
|
79
|
+
handler=lambda args: host.calls.append(f"goal:{args}"),
|
|
80
|
+
allow_when_busy=True,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
await host._execute_command("/goal pause")
|
|
84
|
+
|
|
85
|
+
self.assertEqual(host.calls, ["goal:pause"])
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
if __name__ == "__main__":
|
|
89
|
+
unittest.main(verbosity=2)
|