comate-cli 0.10.2__tar.gz → 0.10.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. {comate_cli-0.10.2 → comate_cli-0.10.4}/PKG-INFO +1 -1
  2. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/markdown_render.py +49 -20
  3. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/theme.py +1 -1
  4. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/update_check.py +15 -4
  5. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/update_messages.py +7 -6
  6. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/windows_updater.py +114 -14
  7. {comate_cli-0.10.2 → comate_cli-0.10.4}/pyproject.toml +1 -1
  8. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_history_printer.py +29 -8
  9. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_markdown_render.py +48 -28
  10. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_theme.py +1 -1
  11. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_update_check.py +41 -2
  12. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_windows_updater.py +101 -10
  13. {comate_cli-0.10.2 → comate_cli-0.10.4}/uv.lock +2 -2
  14. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/08b40bf6a68c85059572f3478db27d848acd36a6e8c6b89fa5173927210e7b53.json +0 -0
  15. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/0ff4f2f1382d2c19ca8d86e01ee8b6768b2fa925bdcf1e57829cecc590120371.txt +0 -0
  16. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/1571cd767eb43ae39534d8f53f60bd56a2a537a64ecf8b5d93ee7556ea4cbb54.txt +0 -0
  17. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/19ac2280798d9988d4bd8e29952989eabf0749b893d4026bf9786169cd50c659.txt +0 -0
  18. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/24efc545d3f0b694a02cfa8022b8f93be27e57547a4f0661f608c80d9bc78113.txt +0 -0
  19. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/3d69373ac48a465a06bd30094e4c28921c1201865c27dc0f012768799351c10b.txt +0 -0
  20. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/46c7def792f8820aff04a0083057d32079d7ccc208e394eb00a440618f4455ba.json +0 -0
  21. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/594a10eddaf1ea6344dc62d41af7146f6e52471ccf1ee1fba6e61376c3ba5bce.json +0 -0
  22. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/5e4d793a1bc3ae3b2c7fedb39645e04d3bd6a86ceb064ba99746d6164034942d.json +0 -0
  23. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/6a28b28d04d8cf003fc6e41560ad05af138aecfdb0f7f9978bf12a1d3b4e353a.json +0 -0
  24. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/8e9d29f51d07bd7d9cd02aae2cc12c1bd575f3748f6a2b9065dcad75973c1e90.json +0 -0
  25. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/954f324b297d871035343be09391bc7c5e0df38faf3f4a3a92be92685a9ad4e3.txt +0 -0
  26. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/a58d73b67de68741d8e4e9e7d212a7e98a7db0b864113fbd2b9056b166095c85.txt +0 -0
  27. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/b44535f54c0d62ce9f9fa3a673ccff0f6d17086dce54787da0f8ab910c2ed1c9.json +0 -0
  28. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/b8f6674b359865d1c0880633f552a30210a60d30d2c11370e9ab0457f65f75a3.txt +0 -0
  29. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/da3d0964cd50a338b3dedc5212ee6d4d045c04629f62a0e948c905c3ec27ab4c.json +0 -0
  30. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/dfc071d5c7a17280f23b1875b16a0f38ff61736e5985b2c9e3056f741f17bd5d.json +0 -0
  31. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/e12f27ecae32f087ea8696b8061c42facb63a91b2b100568f3602cc2f0b6ce60.json +0 -0
  32. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/bash/fe60ed7a2e79c21b81416fa2e77c827ea64df5ba5b6cd343a9b423731dc15b4d.txt +0 -0
  33. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/glob/dc28800ddef1229e5c0bd125335ab31d85d5f8aba0ff2713d09829671b70f2ec.json +0 -0
  34. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/glob/e6fa077dd5e2e19045abf084f97dcfbcbffc1571967a0243ca40ff996d8bc9f2.json +0 -0
  35. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/010b7d94484960699c5c28b5d2ea86d53c2d998a78141c75b834409de64bf25c.txt +0 -0
  36. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/0193f8465b3eaba72bb4f4f78d0376ca89a09d96e87bb9b63c4543023c6b5516.txt +0 -0
  37. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/03edbaec20870710ae8531b002c837e2c092d53ed8b544d05330cf5fd699dcb4.txt +0 -0
  38. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/09c695b86ba43584b134ed6ee26cbe023f58551e579158cf94790644ad6aaa53.txt +0 -0
  39. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/0b96a0a521f9d4c0a88fc75a2e5f69e4c4b7be8ea5d73599eab390c88d4098d8.txt +0 -0
  40. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/0ba5851c04aaa37f25f6b0a37daa3522754d7865e79b3abf0daf8fca54fc07f7.txt +0 -0
  41. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/0beb89f407f205d5b2fdb075c98869ffa5db8e2a3687706e06399d3f58a3278f.txt +0 -0
  42. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/0bf5d9171b6ec0a61962ae22ce8109a26abf764c031ddd5c8dcad25c678020ec.txt +0 -0
  43. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/0db7a1bd5eb18329885082bc554f4456a5c254b687c25c2b3611a364634badd8.txt +0 -0
  44. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/0dd1a484cf5b506de9a8e85db9c9156e7623bc633c07d8805d83768edf1d1b68.txt +0 -0
  45. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/0f48a977857dc6fe0658c5341b8b409205bb6391cc458d19d18f06b1c37e3b8c.txt +0 -0
  46. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/1194ded949e902bc25be21bfe63952a98381416bed255dc052b6715ebb81f11e.txt +0 -0
  47. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/134f90a9b26f8bbc6fc602c3a1301623823abec5cb8eb9680ea060bea5d78b07.txt +0 -0
  48. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/1461fb3572a606968e5d9738ec65dfe0cf4616ead5696f2b47dd36dd12cd8346.txt +0 -0
  49. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/14f7537d8a7090ad8f6531bd9ecfadd9d727f2bf0c620afde878e8765d596cc8.txt +0 -0
  50. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/176241ffb6774d19531593769c50349debb431f8c888f8e4fb46178af6f8f9e6.txt +0 -0
  51. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/17e25775e4ce9b0fcb34b7af659d7d72f53262b1b59c21190f450c4eda8bb6a2.txt +0 -0
  52. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/1a9cea8b7b788598502df8771b6c03f6b393613e1d911f04959ec59f3b7e9869.txt +0 -0
  53. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/1b2ee53405771f837aa234d5a8d128c3f1fd6f16306ec5c71e30df1a55f0eab8.txt +0 -0
  54. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/1c265542a4a6dac9cdc557ba271a9022d5f5bfa044d7ae4201a302ee59517542.txt +0 -0
  55. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/1dd72f0779d1616cc4683de1565d1cc4242dee18987cfe5c9ead6ec445ab952f.txt +0 -0
  56. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/1f0f6484841d5396cfb19f060ada806f54d62594a2a6f81af4ed70d379bdb82e.txt +0 -0
  57. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/1f4854573b520c1a6e0fb4cd8488263f823a61a6867e4c7d92cdce74b4cb4d1b.txt +0 -0
  58. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/200787ede572c7eee4ff7cd579a936b8ab0ecf6f25bb2f6ac89dbd04fdac1ef7.txt +0 -0
  59. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/22fb4c5aa3fea197c71b90824449eca45095da4bd1c7bc76dbfb689abcd5cc49.txt +0 -0
  60. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/29cd9403e9ab3dac5cc3a95fa0ede278decb57cf7183eaad8e29aed9903aba26.txt +0 -0
  61. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/2aa8195d533da9ee878d5ff7e7c4574ad9dc54c57e85f0be801d9aa5ba7e9d65.txt +0 -0
  62. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/2df4412a93598e76038f722e112a5519bbca58e31a27a471346aecf3c5d486b8.txt +0 -0
  63. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/2f04b6777f986f64bbdcdd828eb4a7fa5aa67872fc0d61e891d2af9ec51a6fb8.txt +0 -0
  64. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/3114f2804efe81842b21a85a4bc9eb2ef9f975c28e9220564e6cd2185fed11f7.txt +0 -0
  65. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/3240cf436c636223d89029d2859dc8b8bbc059ea3b8b9a3cdcececb6e75d6da9.txt +0 -0
  66. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/3a03ca37d32ea15316bb77147116bf8eeaa55ea255b7819f1b6350e80cd38481.txt +0 -0
  67. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/4274f27741d2a37b85ea968754ede69180f59300532f1c8e2c8bcc6cb57d93f8.txt +0 -0
  68. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/42c75defbb53e48d8521927f945412100cd487ad492ee1a57a57df3f64831096.txt +0 -0
  69. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/435267ab04edbf55d21c169170faf8eca36f065abb282e9fd731cbf500763757.txt +0 -0
  70. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/448d3ded3b00200238f3782ed0fb5fbe30166139308cfa6cd3e31867f3cf941e.txt +0 -0
  71. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/449ac499b090311eb8b5594f7646d84f67e9da1fad4ad968b772d4d8ab404141.txt +0 -0
  72. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/45f0d5dda63863f163106fbf234ba98c6b2ba88ee63c308b922b6b18b9d6d179.txt +0 -0
  73. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/48a5ea12ce666954aeb22afab26d199f9ceb7c5db99531077bed0298837a4777.txt +0 -0
  74. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/4d6a33d9eaeb38ed7558b7e0162b399580b211cedefdd2a4126b6363b0616b9a.txt +0 -0
  75. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/54822f93bd0f279a2dc67f57f4b49a549938346f606c3ea62f76573ed7c19729.txt +0 -0
  76. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/5592b8582682415bf399fd16bc4e354a8af6979acc7ee5f7d8161b6a2a090a6e.txt +0 -0
  77. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/5697b946b47f9c271273606510662d25c579a1c3cd66a3f73f845178626adf8c.txt +0 -0
  78. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/571cb6737be8d74e05976da2ba022ea1a5e191bdfeafa40b22834b61aca984ec.txt +0 -0
  79. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/592ea99ad61dc416029a0a68a9ea47c765d706d7ffbae9cd697405da2dd8a9ec.txt +0 -0
  80. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/5c0df9216c4f53dc1c2d786266a137dbe326ab4363ddc40307fb21a00a9f94ac.txt +0 -0
  81. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/5ce22f90e1ec6217b95997fad94cc926c12ffdd6f3ef3e278bf0b89ecbcc6d62.txt +0 -0
  82. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/5dc1de7af87cb4091467bc5f0265745e602853afdc3863c267b6e90a26f412c9.txt +0 -0
  83. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/5fff0b4efc09b785f1ee5dee2e5d7ad4e247bdb9c93f41b5814c9db1c04cb8d7.txt +0 -0
  84. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/6249573679ee1a300a25baec32ea72ee34eeffb45f73f676cc0b0f0d11a2d31d.txt +0 -0
  85. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/6258f866ee46c82b3b4584aafd49625b86793f1324318970124c849013397865.txt +0 -0
  86. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/640e6e9edd64f8ed1f4928e9af1f9890c17386cdbc86d329cc2256628e7c50bb.txt +0 -0
  87. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/643717af84fd6f09302e9656f696f853b85dc10bdd144cc4b3ea064c0ee39056.txt +0 -0
  88. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/65ed38867aa3162db6899d4f1b76907655d6af699cff567e2b776ec997f65b9e.txt +0 -0
  89. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/67196d9894f03b07594d654caf016388b13842a7b3d11466a7b7532727d11bfa.txt +0 -0
  90. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/6c6f4e1f9e1d09af3d8a7c10dd243df92781e6ebbbf4f1215c189d74b7a16e01.txt +0 -0
  91. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/6cfadf5d61982d2bb941416d5fefc22202df0bd4dde584321be50716843f2a4e.txt +0 -0
  92. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/6dbade43d62180ae1367c70744d985615fe64768efba5c77317ea4c349aa7958.txt +0 -0
  93. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/6e20e5b86fbf934bbe180ab38a81e259006f0fc43b4d650820994dea3ead8075.txt +0 -0
  94. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/705ec2d0ab89a76fbc02a18d23d8bf10b26eebd5144911cb398e46e2374524cf.txt +0 -0
  95. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/73f1fdec89c242b1c28093dcc12e830a4467c5c5197286879a25feda693b3ede.txt +0 -0
  96. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/745e2b17c9b412d9d89d380626ceb2eb088b2d24e1a4f26be948061a8daaccdd.txt +0 -0
  97. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/74bf1dc40d9b884a5312567e5bc923389e9bcd10e9efa1eb87a01c50b1e11ef1.txt +0 -0
  98. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/758f6bd9fa04989fe968fb80567eb4a4d028e9dd6ca9c482c0a919a7c9da6dad.txt +0 -0
  99. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/762dfb3969ac05cfd8ed58ea34abea8b4e4756ec5c8ef7496e49bb6f824439af.txt +0 -0
  100. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/7880b26ed67f9abd746b4e5c7ccc009f97a16cc5245b4fb04e9e51faf2e99b43.txt +0 -0
  101. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/7b530ebb0d7be5cb364886c326ac09fedb208520170ec424c0d66f2a049cd735.txt +0 -0
  102. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/7d4e0f51f0fa21846dfda5ceebb79cf53d0e8abf1b2f86ecd09ddf06f85cd3bc.txt +0 -0
  103. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/7d79d72b0ff97ae7703118b1c3edc22a3e9aad968baaeb1210281e1b3e0fdf75.txt +0 -0
  104. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/81d4cf35489f009f64aba1f01c0a9c73ac256391d5369dbbae2b3f92c912afb0.txt +0 -0
  105. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/89124ab34d06feebcf91d5fa7fd8d3f36493f0d62ae79b0f339f87a229333a3b.txt +0 -0
  106. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/8a1456d96d430228501f6c305ba67912312bfdd48b2841e2456160a02498ea5b.txt +0 -0
  107. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/8bc79492c38d7124f4214f0437350fb1cfadaf6635bc4391c69fe64c6e8f6096.txt +0 -0
  108. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/8c95072ee427abdb9a07444bf26dc78e72cf93ed9e898d77dd9aa643f6f5b913.txt +0 -0
  109. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/98060d6195be5fb98d6098eb947853a25a305bce1ebf5a4218ffb791379b9dc6.txt +0 -0
  110. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/98b2832dd79c7972eb441b3102f1f6aa40ccb867d7771ec238142564a3b4a117.txt +0 -0
  111. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/98b76a32c3a05f7d91b8b81518f28b613f7ccb373575858fd6aa2711ddbc382e.txt +0 -0
  112. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/9a5fd2d8be3b1e8ef2343f9a19bd75adba3687b2cb8234ee341d6cdc3ab1f361.txt +0 -0
  113. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/9c80158f162aadb87f84195c4496a1c24f68ceca3535852835de9cf4e428d028.txt +0 -0
  114. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/a9594b8f4f25e5b378fcc883960fa7afb2dea9d80851cb5d52f18d856be95219.txt +0 -0
  115. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/abacaab899684c1677f97720dcfc4a6c1fbf98d2cfa44e25f040959586ccaa20.txt +0 -0
  116. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/ac65e45db9f2c51a484173eb31b907c1cb007c5cacca21396790f5345968ca72.txt +0 -0
  117. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/ac8641710e4c96567edad6364d218a08630ff20af9f075f61c20d013f9369648.txt +0 -0
  118. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/ad798be6fa338bd3ee7fc49048192e39d3b2b78837051208815b817e5ca96793.txt +0 -0
  119. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/b04c0955b68f788125018525e308e82987ada00d3943e21cb159f577319ccf11.txt +0 -0
  120. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/b1b9c6d1eefe14c5076aa214fe4f98242f99ed9b146214d0305224539d8e78a1.txt +0 -0
  121. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/b39bb289db5f9e4f31c67766f5e08333d10f384a2d5f6b71fb44522bc4f17f80.txt +0 -0
  122. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/b64736bbdd8fe7ca1ff2ef98558f16f145ca437255ccebca44bf1041b0afbd55.txt +0 -0
  123. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/b898cd80aa00ebdfda4ef314a4e245e62ee96c21935a7f332243a67b0072d1a0.txt +0 -0
  124. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/c1a4508b9a74b3d1649f25dbd474780e6212ced036bbca6b4aac06d324ff10e9.txt +0 -0
  125. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/c3c33582bb37fb71235e9d0fd2b8d2cc8c926cfcb014261356ea917db6417ebd.txt +0 -0
  126. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/c63907ae1cb41e59de75df3d6e0dff27db2ce2434cac5f283a428e4fd9bee301.txt +0 -0
  127. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/d2402b2d42c975305d4866353935ce285eb67ff7f2a2d74ee9be559d022c86f6.txt +0 -0
  128. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/d4e8e439058ef24fb0671ee6674a5b854c17e0b93b012d2dbe8ed85928afe560.txt +0 -0
  129. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/d8c8f51da7a2bc8977320248883adabe9a4d9da131e99f7dfe18a9c826b1c8b1.txt +0 -0
  130. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/dbd79a71f323da5dc1570d5c8d6b99e73b642128697b6c51ab240379fa74f763.txt +0 -0
  131. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/de09b36cc3fd06274fcdbfc7d431f170afe40b4fa8ddd5c0a281581ee03eabec.txt +0 -0
  132. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/dfd45c97a1da7d27da6790c1b24048f584ed4f831e971cf3f4c366b7d8687980.txt +0 -0
  133. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/e138fb7f4303433003aeeaf67b15d783b253696d3d24fd7dfacc50f619db04fd.txt +0 -0
  134. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/e1ca31c715894314164641ba9d80dc13f7e8e146e8f77a995bc3650057ee3ba3.txt +0 -0
  135. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/e6f0fb5f2688faeaa4875724c32f27e79d8a9710bbb91d2a950b84b3481fc374.txt +0 -0
  136. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/e707578cd4b2132eae2e3bdfa918555c2a8f1f4ac52fd6dbc6fc9a347c44221b.txt +0 -0
  137. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/ea0fc86903a5bd1f02832cc3eed4446d55e16dc7df0298c5d74afa56a89a8ca7.txt +0 -0
  138. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/eab81978291f4725b9433192c5b7f4b5409cdcdeb80ffab9884c79ef230bdcdd.txt +0 -0
  139. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/f04828b2b54922581d7cde5351807a457896b2940fd748e8d706fd5dc4bed971.txt +0 -0
  140. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/f04b4f70fe5292dc485164699342c03f3cf4715ba0d5efa815cb7a332dd78c0b.txt +0 -0
  141. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/f2012bd41aa48cd2e3f56611f32b041bd41863b681a79d5ff5f515a97e7e1ddc.txt +0 -0
  142. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/f35c437708355261ca868cf38ade97384e86f24de9aab20849113dc78eb8564c.txt +0 -0
  143. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/f638dfe4edbde834bd968f4d479c1c535dff1dfac10f3e003ec8673d5eca5864.txt +0 -0
  144. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/f916ed291897b4afb5f8a55f5e333a53f11540e2ade24f691a7828885aa77a32.txt +0 -0
  145. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/fa3b737ee93d45bfff6e78245a5ecad2476dc7010c75c772abc1c272cddae072.txt +0 -0
  146. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/fd1133b3a420133590ffb1c050a65477a4751902ca9b832db1c23a6fb90200b8.txt +0 -0
  147. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/fe3df7b68f7041d210336363f5b11faf963427dbcf4027172e19db05f7b24fa1.txt +0 -0
  148. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/grep_content/ff6b896f93f2ac018a3af519be3001d1e4c8ca6ef9ae3e051aa646b409b6773f.txt +0 -0
  149. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/index.json +0 -0
  150. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/ls/4f2cd109869e06f70f28f7aaaa3163fea4731bbb92dc4da8ac25177d6f122f87.json +0 -0
  151. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/ls/768197391db12061fb74d56cad07e9331db0bd832503b5e40be76b49208a111a.json +0 -0
  152. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/ls/a560ae7492ac913282b703abd48897905727acc058d0f9346b17d450f32e1a8a.json +0 -0
  153. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/01f0c4c39cc01ec7d59077fa8bfca183cbd6c93d0a7083261f228badca115eba.txt +0 -0
  154. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/03079608ffe5b120094798aababb67671a20f8466c0197044eacaea56fa12d30.txt +0 -0
  155. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/08e5d1cdde9e2d6dff5435ee87c6710470709d83c271185eaaaa6d652068d80e.txt +0 -0
  156. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/10f74765725e10bd94d92eb25cea495ea8cb9d9151397b05b200ed44a852d882.txt +0 -0
  157. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/3faa3ddc36161e84da99e18707d61b7ffbbbeb8217c28a55a027134f8def5d17.txt +0 -0
  158. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/45cd4ad764e19e3fc0481b8d8649c235ae51634eb41da0806f9f00ab1bdb640d.txt +0 -0
  159. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/4fdacfc564ff558dd602f672edfbb4a72494d8e3c8937bcf0a3d15e085c4a0b7.txt +0 -0
  160. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/50eb11fb5aa96e54b2a7e68c0b9278ec3c07d222bad92270f4a51df58ca69e03.txt +0 -0
  161. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/5a1f18c61191f6b4c1635363748a2aca49ad2183f046035728b5c23ee3df1123.txt +0 -0
  162. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/72718c187cf24910d3c21d7e719e004efa27b4f5d7315bbe2b9a33e2494cc0f9.txt +0 -0
  163. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/7fa851f7100b6e3e652604de11be2767b7a679aea40e941b0b1218478e5935ed.txt +0 -0
  164. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/9d3ace7b725f6aa5809ca4bc298c5ac3d022cb92c29684c7709d63c9c5fd2ad4.txt +0 -0
  165. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/dbeea3cc8bd22fdb703675e202063e7f4ce21ef00c5c83f74268cd6328ad912d.txt +0 -0
  166. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/tool_result/ea66ecb02621262c26d0368c108d2f2f94e2d1f75dea6b38bf958c5bdbaa2ee7.txt +0 -0
  167. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/webfetch/2669c40a92ce6395790ae997503be646bdc3af4a49f799b38d8380e5ecd1e015.md +0 -0
  168. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/webfetch/5701edea87e370ce51349413bcba507833f48f2ad7337eef3deccc82c7d45a8d.md +0 -0
  169. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/webfetch/5c0eeec3d9ab0a6881d12ebd5a95b6b71b90d47640e38c914232d75704332f54.md +0 -0
  170. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/webfetch/80baa6870df61f51b68fadde829aa2ab889fd487f8a8171db36ea3b67ded24db.md +0 -0
  171. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/webfetch/915acd44f3846631527a3cd62e81d9908bb7e8769b970208ffa3326c65df8778.md +0 -0
  172. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/webfetch/a758c9f6242610e875e36aed11e99ac337359cbe512df15db6544504fa9e68b8.md +0 -0
  173. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/artifacts/webfetch/eca7d820f7461f58ee9b2b1e931842de54cd1ec023eca7a27e3bfb387efc6aa2.md +0 -0
  174. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/scheduled_prompts.json +0 -0
  175. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/SKILL.md +0 -0
  176. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/html2pptx.md +0 -0
  177. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  178. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  179. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  180. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  181. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  182. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  183. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  184. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  185. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  186. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  187. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  188. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  189. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  190. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  191. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  192. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  193. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  194. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  195. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  196. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  197. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  198. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  199. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  200. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  201. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  202. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  203. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  204. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  205. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  206. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  207. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  208. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/mce/mc.xsd +0 -0
  209. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  210. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  211. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  212. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  213. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  214. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  215. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  216. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/scripts/pack.py +0 -0
  217. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/scripts/unpack.py +0 -0
  218. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/scripts/validate.py +0 -0
  219. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/scripts/validation/base.py +0 -0
  220. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/scripts/validation/docx.py +0 -0
  221. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/scripts/validation/pptx.py +0 -0
  222. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml/scripts/validation/redlining.py +0 -0
  223. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/references/ooxml.md +0 -0
  224. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/scripts/html2pptx.js +0 -0
  225. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/scripts/inventory.py +0 -0
  226. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/scripts/rearrange.py +0 -0
  227. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/scripts/replace.py +0 -0
  228. {comate_cli-0.10.2 → comate_cli-0.10.4}/.agent/skills/powerpoint/scripts/thumbnail.py +0 -0
  229. {comate_cli-0.10.2 → comate_cli-0.10.4}/.gitignore +0 -0
  230. {comate_cli-0.10.2 → comate_cli-0.10.4}/CHANGELOG.md +0 -0
  231. {comate_cli-0.10.2 → comate_cli-0.10.4}/CONTEXT.md +0 -0
  232. {comate_cli-0.10.2 → comate_cli-0.10.4}/README.md +0 -0
  233. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/__init__.py +0 -0
  234. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/__main__.py +0 -0
  235. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/distribution.py +0 -0
  236. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/main.py +0 -0
  237. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/mcp_cli.py +0 -0
  238. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/__init__.py +0 -0
  239. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/animations.py +0 -0
  240. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/app.py +0 -0
  241. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/approval_bridge.py +0 -0
  242. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/assistant_render.py +0 -0
  243. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/builtin_commands/.keep +0 -0
  244. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/builtin_commands/implement-plan.md +0 -0
  245. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/builtin_commands/learn.md +0 -0
  246. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/codenames.py +0 -0
  247. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/config/__init__.py +0 -0
  248. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/config/model.py +0 -0
  249. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/config/picker.py +0 -0
  250. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/config/picker_state.py +0 -0
  251. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/config/store.py +0 -0
  252. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/custom_slash_commands.py +0 -0
  253. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/env_utils.py +0 -0
  254. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/error_display.py +0 -0
  255. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/event_renderer.py +0 -0
  256. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/figures.py +0 -0
  257. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/file_ref_hint.py +0 -0
  258. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/fragment_utils.py +0 -0
  259. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/goal_edit_view.py +0 -0
  260. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/goal_resume_view.py +0 -0
  261. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/history_printer.py +0 -0
  262. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/input_geometry.py +0 -0
  263. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/layout_coordinator.py +0 -0
  264. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/logging_adapter.py +0 -0
  265. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/logo.py +0 -0
  266. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/mention_completer.py +0 -0
  267. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/message_style.py +0 -0
  268. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/models.py +0 -0
  269. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/path_context_hint.py +0 -0
  270. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/__init__.py +0 -0
  271. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/components/__init__.py +0 -0
  272. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/components/detail_view.py +0 -0
  273. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/components/plugin_list.py +0 -0
  274. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/components/search_box.py +0 -0
  275. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/components/tab_bar.py +0 -0
  276. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/marketplace_install_view.py +0 -0
  277. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/operation_state.py +0 -0
  278. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/plugin_picker.py +0 -0
  279. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/tabs/__init__.py +0 -0
  280. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/tabs/discover_tab.py +0 -0
  281. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/tabs/errors_tab.py +0 -0
  282. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/tabs/installed_tab.py +0 -0
  283. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/plugins/tabs/marketplaces_tab.py +0 -0
  284. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/preflight.py +0 -0
  285. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/preflight_wizard.py +0 -0
  286. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/print_mode.py +0 -0
  287. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/question_view.py +0 -0
  288. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/recap/__init__.py +0 -0
  289. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/recap/controller.py +0 -0
  290. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/resume_picker.py +0 -0
  291. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/resume_preview.py +0 -0
  292. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/resume_selector.py +0 -0
  293. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/rpc/__init__.py +0 -0
  294. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/rpc/approval.py +0 -0
  295. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/rpc/options.py +0 -0
  296. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/rpc/protocol.py +0 -0
  297. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/rpc/serde.py +0 -0
  298. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/rpc/server.py +0 -0
  299. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/rpc/session_host.py +0 -0
  300. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/rpc/stdin_reader.py +0 -0
  301. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/rpc/stdio.py +0 -0
  302. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/rpc_protocol.py +0 -0
  303. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/rpc_stdio.py +0 -0
  304. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/selection_menu.py +0 -0
  305. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/skill_slash_input.py +0 -0
  306. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/slash_commands.py +0 -0
  307. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/startup.py +0 -0
  308. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/startup_profile.py +0 -0
  309. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/status_bar.py +0 -0
  310. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/statusline/__init__.py +0 -0
  311. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/statusline/model.py +0 -0
  312. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/statusline/picker.py +0 -0
  313. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/statusline/picker_state.py +0 -0
  314. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/statusline/store.py +0 -0
  315. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/text_effects.py +0 -0
  316. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tips.py +0 -0
  317. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tool_approval_view.py +0 -0
  318. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tool_fold.py +0 -0
  319. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tool_result_formatters.py +0 -0
  320. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tool_result_store.py +0 -0
  321. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tool_result_viewer.py +0 -0
  322. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tool_view.py +0 -0
  323. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/transcript_viewer.py +0 -0
  324. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tui.py +0 -0
  325. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tui_parts/__init__.py +0 -0
  326. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tui_parts/btw_view.py +0 -0
  327. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tui_parts/commands.py +0 -0
  328. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tui_parts/history_sync.py +0 -0
  329. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tui_parts/input_behavior.py +0 -0
  330. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tui_parts/key_bindings.py +0 -0
  331. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tui_parts/mcp_connecting_view.py +0 -0
  332. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tui_parts/render_panels.py +0 -0
  333. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tui_parts/slash_command_registry.py +0 -0
  334. {comate_cli-0.10.2 → comate_cli-0.10.4}/comate_cli/terminal_agent/tui_parts/ui_mode.py +0 -0
  335. {comate_cli-0.10.2 → comate_cli-0.10.4}/dist-comate/.gitignore +0 -0
  336. {comate_cli-0.10.2 → comate_cli-0.10.4}/dist-comate/comate_cli-0.7.10-py3-none-any.whl +0 -0
  337. {comate_cli-0.10.2 → comate_cli-0.10.4}/dist-comate/comate_cli-0.7.10.tar.gz +0 -0
  338. {comate_cli-0.10.2 → comate_cli-0.10.4}/dist-hico/.gitignore +0 -0
  339. {comate_cli-0.10.2 → comate_cli-0.10.4}/dist-hico/hico_cli-0.7.17-py3-none-any.whl +0 -0
  340. {comate_cli-0.10.2 → comate_cli-0.10.4}/dist-hico/hico_cli-0.7.17.tar.gz +0 -0
  341. {comate_cli-0.10.2 → comate_cli-0.10.4}/docs/cli-rpc-stdio-guide.md +0 -0
  342. {comate_cli-0.10.2 → comate_cli-0.10.4}/docs/startup-performance.md +0 -0
  343. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/config/__init__.py +0 -0
  344. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/config/test_model.py +0 -0
  345. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/config/test_picker_state.py +0 -0
  346. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/config/test_picker_ui.py +0 -0
  347. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/config/test_roundtrip.py +0 -0
  348. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/config/test_store_load.py +0 -0
  349. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/config/test_store_save.py +0 -0
  350. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/conftest.py +0 -0
  351. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/fixtures/fake_mcp_misbehaving_stdout.py +0 -0
  352. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/recap/test_idle_recap_controller.py +0 -0
  353. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/recap/test_recap_history_rendering.py +0 -0
  354. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/recap/test_tui_idle_recap_integration.py +0 -0
  355. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/statusline/__init__.py +0 -0
  356. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/statusline/test_model.py +0 -0
  357. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/statusline/test_picker_state.py +0 -0
  358. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/statusline/test_store.py +0 -0
  359. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_animations_styles.py +0 -0
  360. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_animator_shuffle.py +0 -0
  361. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_app_mcp_preload.py +0 -0
  362. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_app_preflight_gate.py +0 -0
  363. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_app_print_mode.py +0 -0
  364. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_app_profile_threading.py +0 -0
  365. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_app_pty_smoke.py +0 -0
  366. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_app_shutdown.py +0 -0
  367. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_app_startup_latency.py +0 -0
  368. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_app_startup_order.py +0 -0
  369. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_app_token_cost_config.py +0 -0
  370. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_app_usage_line.py +0 -0
  371. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_approval_bridge.py +0 -0
  372. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_btw_slash_command.py +0 -0
  373. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_busy_slash_gating.py +0 -0
  374. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_cli_project_root.py +0 -0
  375. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_compact_command_semantics.py +0 -0
  376. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_completion_context_activation.py +0 -0
  377. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_completion_status_panel.py +0 -0
  378. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_context_command.py +0 -0
  379. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_custom_slash_commands.py +0 -0
  380. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_discover_tab.py +0 -0
  381. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_distribution_contract.py +0 -0
  382. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_errors_tab.py +0 -0
  383. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_event_renderer.py +0 -0
  384. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_event_renderer_approval_wait.py +0 -0
  385. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_event_renderer_boundary.py +0 -0
  386. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_event_renderer_e2e.py +0 -0
  387. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_event_renderer_log_boundary.py +0 -0
  388. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_event_renderer_log_queue.py +0 -0
  389. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_event_renderer_stream_staging.py +0 -0
  390. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_event_renderer_streaming.py +0 -0
  391. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_event_renderer_tool_args_progress.py +0 -0
  392. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_event_renderer_tool_fold.py +0 -0
  393. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_file_ref_hint.py +0 -0
  394. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_format_error.py +0 -0
  395. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_goal_edit_handlers.py +0 -0
  396. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_goal_edit_view.py +0 -0
  397. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_goal_resume_tui.py +0 -0
  398. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_goal_resume_view.py +0 -0
  399. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_goal_slash_command.py +0 -0
  400. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_handle_error.py +0 -0
  401. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_history_drain_throttle.py +0 -0
  402. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_history_printer_log.py +0 -0
  403. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_history_printer_styles.py +0 -0
  404. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_history_printer_subtitle_position.py +0 -0
  405. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_history_printer_tool_fold.py +0 -0
  406. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_history_sync.py +0 -0
  407. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_history_sync_tool_fold.py +0 -0
  408. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_import_weight.py +0 -0
  409. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_input_behavior.py +0 -0
  410. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_input_history.py +0 -0
  411. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_installed_tab.py +0 -0
  412. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_interrupt_exit_semantics.py +0 -0
  413. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_layout_coordinator.py +0 -0
  414. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_logging_adapter.py +0 -0
  415. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_logo.py +0 -0
  416. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_main_args.py +0 -0
  417. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_main_args_yolo.py +0 -0
  418. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_main_profile_entry.py +0 -0
  419. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_marketplaces_tab.py +0 -0
  420. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_mcp_cli.py +0 -0
  421. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_mcp_slash_command.py +0 -0
  422. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_mention_completer.py +0 -0
  423. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_menu_cursor_unification.py +0 -0
  424. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_message_style.py +0 -0
  425. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_model_switch_command.py +0 -0
  426. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_no_raw_colors.py +0 -0
  427. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_path_context_hint.py +0 -0
  428. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_permission_mode_cycle.py +0 -0
  429. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_plugin_operation_state.py +0 -0
  430. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_plugin_slash_commands.py +0 -0
  431. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_plugin_tui_components.py +0 -0
  432. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_preflight.py +0 -0
  433. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_preflight_copilot.py +0 -0
  434. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_pty_output_integrity.py +0 -0
  435. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_question_key_bindings.py +0 -0
  436. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_question_view.py +0 -0
  437. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_resume_picker.py +0 -0
  438. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_resume_preview.py +0 -0
  439. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_resume_selector.py +0 -0
  440. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_rewind_command_semantics.py +0 -0
  441. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_rpc_approval.py +0 -0
  442. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_rpc_options.py +0 -0
  443. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_rpc_protocol.py +0 -0
  444. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_rpc_serde.py +0 -0
  445. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_rpc_server_methods.py +0 -0
  446. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_rpc_session_host.py +0 -0
  447. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_rpc_stdin_reader.py +0 -0
  448. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_rpc_stdio_transport.py +0 -0
  449. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_selection_menu.py +0 -0
  450. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_session_query_token_summary.py +0 -0
  451. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_shutdown_noise_guard.py +0 -0
  452. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_shutdown_noise_integration.py +0 -0
  453. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_skill_slash_input.py +0 -0
  454. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_skills_slash_command.py +0 -0
  455. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_slash_argument_hint.py +0 -0
  456. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_slash_clear.py +0 -0
  457. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_slash_completer.py +0 -0
  458. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_slash_registry.py +0 -0
  459. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_startup_import_budget.py +0 -0
  460. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_startup_profile.py +0 -0
  461. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_status_bar.py +0 -0
  462. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_status_bar_transient.py +0 -0
  463. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_stream_staging_panel.py +0 -0
  464. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_style_class_coverage.py +0 -0
  465. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_task_panel_format.py +0 -0
  466. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_task_panel_key_bindings.py +0 -0
  467. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_task_panel_rendering.py +0 -0
  468. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_task_poll.py +0 -0
  469. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tips.py +0 -0
  470. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tool_approval_key_bindings.py +0 -0
  471. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tool_approval_tui.py +0 -0
  472. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tool_approval_view.py +0 -0
  473. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tool_fold.py +0 -0
  474. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tool_fold_panel.py +0 -0
  475. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tool_result_formatters.py +0 -0
  476. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tool_result_store.py +0 -0
  477. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tool_result_viewer.py +0 -0
  478. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tool_result_viewer_key_bindings.py +0 -0
  479. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tool_view.py +0 -0
  480. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tool_view_styles.py +0 -0
  481. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_transcript_viewer.py +0 -0
  482. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_transcript_viewer_tool_fold.py +0 -0
  483. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_builtin_slash_chain.py +0 -0
  484. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_elapsed_status.py +0 -0
  485. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_esc_queue.py +0 -0
  486. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_llm_retry_panel.py +0 -0
  487. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_local_interactive_barrier.py +0 -0
  488. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_mcp_init_gate.py +0 -0
  489. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_paste_newline_guard.py +0 -0
  490. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_paste_placeholder.py +0 -0
  491. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_provider_error_shield.py +0 -0
  492. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_queue_preview.py +0 -0
  493. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_queue_sdk_source.py +0 -0
  494. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_scheduled_fire_log.py +0 -0
  495. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_send_undo_window.py +0 -0
  496. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_split_invariance.py +0 -0
  497. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_startup_latency.py +0 -0
  498. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_team_messages.py +0 -0
  499. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_thinking_display.py +0 -0
  500. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_tool_result_registry_lifecycle.py +0 -0
  501. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_tui_window_too_small_fallback.py +0 -0
  502. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_usage_command.py +0 -0
  503. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_wellformed_terminal_input.py +0 -0
  504. {comate_cli-0.10.2 → comate_cli-0.10.4}/tests/test_wrap_user_text.py +0 -0
  505. {comate_cli-0.10.2 → comate_cli-0.10.4}/tools/logo_lab.py +0 -0
  506. {comate_cli-0.10.2 → comate_cli-0.10.4}/tools/nico_preview.py +0 -0
  507. {comate_cli-0.10.2 → comate_cli-0.10.4}/tools/startup_bench.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: comate-cli
3
- Version: 0.10.2
3
+ Version: 0.10.4
4
4
  Summary: Comate terminal CLI built on comate-agent-sdk
5
5
  Project-URL: Homepage, https://github.com/AndyLee1024/agent-sdk
6
6
  Project-URL: Repository, https://github.com/AndyLee1024/agent-sdk
@@ -6,31 +6,35 @@ from rich.segment import Segment
6
6
  from rich.style import Style
7
7
  from rich.text import Text
8
8
  from rich.theme import Theme
9
+ from rich.color import Color, ColorType
10
+
11
+ from prompt_toolkit.styles.base import ANSI_COLOR_NAMES
9
12
 
10
13
  from comate_cli.terminal_agent import theme
11
14
 
12
15
  Fragment = tuple[str, str]
13
16
 
14
17
  _MIN_WIDTH = 40
15
- _CODE_THEME = "nord" # 冷灰蓝系,与 Nico Dark 同族(spec 5 节)
18
+ _CODE_THEME = "ansi_dark" # Rich 内置 ANSI 主题:无背景,token 映射终端 16 色(对齐 CC cli-highlight)
16
19
 
17
20
  MARKDOWN_RICH_STYLES: dict[str, str] = {
18
- "markdown.paragraph": theme.TEXT,
19
- "markdown.h1": f"bold underline {theme.TEXT_BRIGHT}",
20
- "markdown.h2": f"bold {theme.TEXT_BRIGHT}",
21
- "markdown.h3": f"bold {theme.TEXT_BRIGHT}",
22
- "markdown.h4": f"bold {theme.TEXT_BRIGHT}",
23
- "markdown.h5": f"bold {theme.TEXT_BRIGHT}",
24
- "markdown.h6": f"bold {theme.TEXT_BRIGHT}",
25
- "markdown.strong": f"bold {theme.TEXT_BRIGHT}",
26
- "markdown.em": f"italic {theme.TEXT}",
21
+ # CC 模型:正文零前景色,只用属性;颜色仅出现在行内代码与代码块语法高亮。
22
+ "markdown.paragraph": "",
23
+ "markdown.h1": "bold italic underline",
24
+ "markdown.h2": "bold",
25
+ "markdown.h3": "bold",
26
+ "markdown.h4": "bold",
27
+ "markdown.h5": "bold",
28
+ "markdown.h6": "bold",
29
+ "markdown.strong": "bold",
30
+ "markdown.em": "italic",
27
31
  "markdown.code": theme.INLINE_CODE,
28
- "markdown.block_quote": f"italic {theme.TEXT_MUTED}",
29
- "markdown.item": theme.TEXT,
30
- "markdown.item.bullet": f"bold {theme.TEXT_BRIGHT}",
31
- "markdown.item.number": f"bold {theme.TEXT_BRIGHT}",
32
- "markdown.link": f"underline {theme.ACCENT}",
33
- "markdown.link_url": f"underline {theme.ACCENT}",
32
+ "markdown.block_quote": "italic",
33
+ "markdown.item": "",
34
+ "markdown.item.bullet": "",
35
+ "markdown.item.number": "",
36
+ "markdown.link": "underline",
37
+ "markdown.link_url": "underline",
34
38
  }
35
39
 
36
40
  _MARKDOWN_THEME = Theme(MARKDOWN_RICH_STYLES)
@@ -132,6 +136,29 @@ def render_markdown_to_rich(content: str, *, width: int) -> Text:
132
136
  return Text(str(content).strip("\n"))
133
137
 
134
138
 
139
+ def _rich_color_to_pt(color: Color | None) -> str | None:
140
+ """把 Rich Color 映射成 prompt_toolkit 颜色 token。
141
+
142
+ ANSI 标准/8-bit 色(number 0-15)没有 RGB triplet;缺这个分支时
143
+ rich_style_to_prompt_toolkit_style 会把 ansi_dark 的每个语法高亮色
144
+ 静默丢弃(transcript viewer 的 pt-fragment 路径)。
145
+ prompt_toolkit 的 ANSI_COLOR_NAMES 首位是 'ansidefault',整体偏移 1,
146
+ 故 Rich color number N 对应 ANSI_COLOR_NAMES[N + 1]。
147
+ """
148
+ if color is None:
149
+ return None
150
+ number = color.number
151
+ if (
152
+ color.type in (ColorType.STANDARD, ColorType.EIGHT_BIT)
153
+ and number is not None
154
+ and number < 16
155
+ ):
156
+ return ANSI_COLOR_NAMES[number + 1]
157
+ if color.triplet is not None:
158
+ return color.triplet.hex
159
+ return None
160
+
161
+
135
162
  def rich_style_to_prompt_toolkit_style(rich_style: Style) -> str:
136
163
  parts: list[str] = []
137
164
  if getattr(rich_style, "bold", False):
@@ -144,10 +171,12 @@ def rich_style_to_prompt_toolkit_style(rich_style: Style) -> str:
144
171
  parts.append("dim")
145
172
  if getattr(rich_style, "reverse", False):
146
173
  parts.append("reverse")
147
- if rich_style.color and rich_style.color.triplet:
148
- parts.append(f"fg:{rich_style.color.triplet.hex}")
149
- if rich_style.bgcolor and rich_style.bgcolor.triplet:
150
- parts.append(f"bg:{rich_style.bgcolor.triplet.hex}")
174
+ fg = _rich_color_to_pt(rich_style.color)
175
+ if fg is not None:
176
+ parts.append(f"fg:{fg}")
177
+ bg = _rich_color_to_pt(rich_style.bgcolor)
178
+ if bg is not None:
179
+ parts.append(f"bg:{bg}")
151
180
  return " ".join(parts)
152
181
 
153
182
 
@@ -35,7 +35,7 @@ PALETTE: dict[str, str] = {
35
35
  }
36
36
 
37
37
  # ── 派生色(仅限指定用途,spec 第 3 节)───────────────────────────────
38
- INLINE_CODE = "#A5DFF7" # markdown 行内代码(比 accent 安静的浅青)
38
+ INLINE_CODE = "cyan" # markdown 行内代码:终端原生 ANSI 青,继承 shell 主题
39
39
  SWEEP_BASE_RGB = (78, 134, 166) # #4E86A6 流光基色
40
40
  SWEEP_MID_RGB = (103, 213, 255) # #67D5FF 流光峰值=品牌青
41
41
  SWEEP_HIGH_RGB = (224, 246, 255) # #E0F6FF 流光高光
@@ -408,11 +408,17 @@ def format_update_hint(info: UpdateInfo, target: UpdateTarget | None = None) ->
408
408
 
409
409
  update_target = _target_for_info(info, target)
410
410
  messages = get_update_messages()
411
- hint_template = messages.windows_hint if sys.platform == "win32" else messages.hint
411
+ is_windows = sys.platform == "win32"
412
+ command = _format_update_command(update_target)
413
+ if is_windows:
414
+ from comate_cli.terminal_agent.windows_updater import windows_update_command_text
415
+
416
+ command = windows_update_command_text(update_target)
417
+ hint_template = messages.windows_hint if is_windows else messages.hint
412
418
  return hint_template.format(
413
419
  product=update_target.product_label,
414
420
  package=update_target.package,
415
- command=_format_update_command(update_target),
421
+ command=command,
416
422
  current=info.current_version,
417
423
  latest=info.latest_version,
418
424
  )
@@ -589,7 +595,12 @@ async def run_update_command(
589
595
  command_text = " ".join(command)
590
596
  messages = get_update_messages()
591
597
  if sys.platform == "win32":
592
- from comate_cli.terminal_agent.windows_updater import spawn_detached_updater
598
+ from comate_cli.terminal_agent.windows_updater import (
599
+ spawn_detached_updater,
600
+ windows_update_command_text,
601
+ )
602
+
603
+ windows_command_text = windows_update_command_text(update_target)
593
604
 
594
605
  if spawn_detached_updater(info, target=update_target):
595
606
  console.out(
@@ -605,7 +616,7 @@ async def run_update_command(
605
616
  messages.windows_manual_update.format(
606
617
  product=update_target.product_label,
607
618
  package=update_target.package,
608
- command=command_text,
619
+ command=windows_command_text,
609
620
  current=info.current_version,
610
621
  latest=info.latest_version,
611
622
  ),
@@ -61,8 +61,9 @@ _MESSAGES: dict[str, UpdateMessages] = {
61
61
  "windows and run `{command}` in a new PowerShell to update manually."
62
62
  ),
63
63
  windows_update_result_timeout=(
64
- "Background update to {latest} did not run: {product} windows stayed open "
65
- 'past the wait limit. Choose "Update now" again, or run `{command}` manually.'
64
+ "Background update to {latest} did not run: {product} did not finish "
65
+ 'shutting down before the wait limit. Choose "Update now" again, or run '
66
+ "`{command}` manually."
66
67
  ),
67
68
  success="🎉 Update ran successfully! Please restart {product}.",
68
69
  failure=(
@@ -105,7 +106,7 @@ _MESSAGES: dict[str, UpdateMessages] = {
105
106
  "在新的 PowerShell 中运行 `{command}` 手动更新。"
106
107
  ),
107
108
  windows_update_result_timeout=(
108
- "后台更新到 {latest} 未执行:等待 {product} 窗口关闭超时。"
109
+ "后台更新到 {latest} 未执行:{product} 退出未完成,等待超时。"
109
110
  "可再次选择“立即更新”,或手动运行 `{command}`。"
110
111
  ),
111
112
  success="🎉 更新命令已成功执行!请重启 {product}。",
@@ -149,7 +150,7 @@ _MESSAGES: dict[str, UpdateMessages] = {
149
150
  "在新的 PowerShell 中執行 `{command}` 手動更新。"
150
151
  ),
151
152
  windows_update_result_timeout=(
152
- "背景更新到 {latest} 未執行:等待 {product} 視窗關閉逾時。"
153
+ "背景更新到 {latest} 未執行:{product} 結束未完成,等待逾時。"
153
154
  "可再次選擇「立即更新」,或手動執行 `{command}`。"
154
155
  ),
155
156
  success="🎉 更新命令已成功執行!請重新啟動 {product}。",
@@ -194,8 +195,8 @@ _MESSAGES: dict[str, UpdateMessages] = {
194
195
  "を実行して手動で更新してください。"
195
196
  ),
196
197
  windows_update_result_timeout=(
197
- "{latest} へのバックグラウンド更新は実行されませんでした:{product} ウィンドウが"
198
- "閉じられるのを待機中にタイムアウトしました。もう一度「今すぐ更新」を選ぶか、"
198
+ "{latest} へのバックグラウンド更新は実行されませんでした:{product} "
199
+ "待機時間内に終了しませんでした。もう一度「今すぐ更新」を選ぶか、"
199
200
  "`{command}` を手動で実行してください。"
200
201
  ),
201
202
  success="🎉 更新コマンドが正常に完了しました。{product} を再起動してください。",
@@ -10,6 +10,7 @@ from __future__ import annotations
10
10
 
11
11
  import json
12
12
  import logging
13
+ import os
13
14
  import shutil
14
15
  import subprocess
15
16
  from contextlib import suppress
@@ -31,14 +32,23 @@ UPDATER_CREATIONFLAGS = (
31
32
  _DETACHED_PROCESS | _CREATE_NEW_PROCESS_GROUP | _CREATE_NO_WINDOW
32
33
  )
33
34
 
34
- _WAIT_TIMEOUT_MINUTES = 10
35
- _POLL_INTERVAL_SECONDS = 2
35
+ _PARENT_WAIT_TIMEOUT_SECONDS = 60
36
+ _POST_PARENT_EXIT_GRACE_MS = 800
36
37
  _VALID_STATUSES = frozenset({"success", "failed", "timeout"})
37
38
 
38
39
  _SCRIPT_TEMPLATE = """\
39
40
  $ErrorActionPreference = 'Stop'
40
41
  $resultPath = __RESULT_PATH__
41
42
  $logPath = __LOG_PATH__
43
+ $parentPid = __PARENT_PID__
44
+ $commandName = __COMMAND_NAME__
45
+ $processFilter = __PROCESS_FILTER__
46
+ $mutexName = __MUTEX_NAME__
47
+
48
+ function Write-Log {
49
+ param([string]$Message)
50
+ Add-Content -LiteralPath $logPath -Value $Message -Encoding UTF8
51
+ }
42
52
 
43
53
  function Write-UpdateResult {
44
54
  param($Status, $ExitCode)
@@ -53,16 +63,62 @@ function Write-UpdateResult {
53
63
  $payload | ConvertTo-Json | Set-Content -LiteralPath $resultPath -Encoding UTF8
54
64
  }
55
65
 
56
- try {
57
- Set-Content -LiteralPath $logPath -Value ('updater started ' + (Get-Date)) -Encoding UTF8
58
- $deadline = (Get-Date).AddMinutes(__WAIT_MINUTES__)
59
- while (Get-Process -Name __COMMAND_NAME__ -ErrorAction SilentlyContinue) {
60
- if ((Get-Date) -gt $deadline) {
61
- Write-UpdateResult -Status 'timeout' -ExitCode $null
62
- exit 0
66
+ function Write-CommandProcessSnapshot {
67
+ param([string]$Label)
68
+ Write-Log ('[' + $Label + '] remaining processes named ' + $commandName + '.exe')
69
+ try {
70
+ $processes = Get-CimInstance Win32_Process -Filter $processFilter -ErrorAction SilentlyContinue
71
+ if (-not $processes) {
72
+ Write-Log ' none'
73
+ return
74
+ }
75
+ foreach ($proc in $processes) {
76
+ Write-Log (
77
+ ' PID=' + $proc.ProcessId +
78
+ ' ParentPID=' + $proc.ParentProcessId +
79
+ ' Created=' + $proc.CreationDate +
80
+ ' Path=' + $proc.ExecutablePath +
81
+ ' CommandLine=' + $proc.CommandLine
82
+ )
63
83
  }
64
- Start-Sleep -Seconds __POLL_SECONDS__
84
+ } catch {
85
+ Write-Log (' snapshot failed: ' + ($_ | Out-String))
86
+ }
87
+ }
88
+
89
+ $createdNew = $false
90
+ $mutex = $null
91
+ try {
92
+ Set-Content -LiteralPath $logPath -Value ('updater started ' + (Get-Date) + ' parent_pid=' + $parentPid) -Encoding UTF8
93
+ $mutex = [System.Threading.Mutex]::new($true, $mutexName, [ref]$createdNew)
94
+ if (-not $createdNew) {
95
+ Write-Log ('another updater already owns mutex ' + $mutexName)
96
+ exit 0
97
+ }
98
+
99
+ try {
100
+ Wait-Process -Id $parentPid -Timeout __WAIT_SECONDS__ -ErrorAction SilentlyContinue
101
+ } catch {
102
+ Write-Log ('parent wait raised: ' + ($_ | Out-String))
65
103
  }
104
+
105
+ $parent = Get-Process -Id $parentPid -ErrorAction SilentlyContinue
106
+ if ($parent) {
107
+ Write-Log ('parent process still running after timeout: PID=' + $parentPid)
108
+ Write-CommandProcessSnapshot -Label 'timeout'
109
+ Write-UpdateResult -Status 'timeout' -ExitCode $null
110
+ exit 0
111
+ }
112
+
113
+ Start-Sleep -Milliseconds __POST_PARENT_EXIT_GRACE_MS__
114
+ Write-CommandProcessSnapshot -Label 'before-uv'
115
+
116
+ $env:UV_HTTP_TIMEOUT = '30'
117
+ $env:PIP_NO_INPUT = '1'
118
+ $env:GIT_TERMINAL_PROMPT = '0'
119
+ $env:UV_NO_PROGRESS = '1'
120
+
121
+ Write-Log ('running uv: ' + __UV_COMMAND_TEXT__)
66
122
  $ErrorActionPreference = 'Continue'
67
123
  & __UV_PATH__ __UV_ARGS__ *>> $logPath
68
124
  $code = $LASTEXITCODE
@@ -75,6 +131,13 @@ try {
75
131
  } catch {
76
132
  ($_ | Out-String) | Add-Content -LiteralPath $logPath -Encoding UTF8
77
133
  Write-UpdateResult -Status 'failed' -ExitCode -1
134
+ } finally {
135
+ if ($createdNew -and $null -ne $mutex) {
136
+ try { $mutex.ReleaseMutex() } catch {}
137
+ }
138
+ if ($null -ne $mutex) {
139
+ $mutex.Dispose()
140
+ }
78
141
  }
79
142
  """
80
143
 
@@ -114,19 +177,51 @@ def _ps_quote(value: str) -> str:
114
177
  return "'" + value.replace("'", "''") + "'"
115
178
 
116
179
 
180
+ def _ps_double_quote(value: str) -> str:
181
+ return '"' + value.replace("`", "``").replace('"', '`"') + '"'
182
+
183
+
184
+ def windows_update_command(target: "UpdateTarget") -> tuple[str, ...]:
185
+ """Windows repair-style uv command.
186
+
187
+ Keep this separate from UpdateTarget.update_command(): Linux/Mac preserve the
188
+ existing command, while Windows uses --reinstall to recover from partial tool
189
+ environment updates after file-lock failures.
190
+ """
191
+ return (
192
+ "uv",
193
+ "tool",
194
+ "install",
195
+ f"{target.package}@latest",
196
+ "--force",
197
+ "--reinstall",
198
+ "--refresh-package",
199
+ target.package,
200
+ *target.install_args,
201
+ )
202
+
203
+
204
+ def windows_update_command_text(target: "UpdateTarget") -> str:
205
+ return " ".join(windows_update_command(target))
206
+
207
+
117
208
  def build_updater_script(
118
209
  *,
119
210
  info: "UpdateInfo",
120
211
  target: "UpdateTarget",
121
212
  uv_path: str,
122
213
  updates_dir: Path,
214
+ parent_pid: int,
123
215
  ) -> str:
216
+ command = windows_update_command(target)
124
217
  uv_args = (
125
- f"tool install {_ps_quote(target.package + '@latest')} --force "
218
+ f"tool install {_ps_quote(target.package + '@latest')} --force --reinstall "
126
219
  f"--refresh-package {_ps_quote(target.package)}"
127
220
  )
128
221
  if target.install_args:
129
222
  uv_args += " " + " ".join(_ps_quote(arg) for arg in target.install_args)
223
+ uv_command_text = " ".join(command)
224
+ package_key = _package_key(target.package)
130
225
  replacements = {
131
226
  "__RESULT_PATH__": _ps_quote(
132
227
  str(result_path(target.package, updates_dir=updates_dir))
@@ -136,10 +231,14 @@ def build_updater_script(
136
231
  "__FROM_VERSION__": _ps_quote(info.current_version),
137
232
  "__TO_VERSION__": _ps_quote(info.latest_version),
138
233
  "__COMMAND_NAME__": _ps_quote(target.command_name),
234
+ "__PROCESS_FILTER__": _ps_double_quote(f"Name='{target.command_name}.exe'"),
235
+ "__MUTEX_NAME__": _ps_quote(f"Local\\comate-cli-updater-{package_key}"),
236
+ "__PARENT_PID__": str(int(parent_pid)),
139
237
  "__UV_PATH__": _ps_quote(uv_path),
140
238
  "__UV_ARGS__": uv_args,
141
- "__WAIT_MINUTES__": str(_WAIT_TIMEOUT_MINUTES),
142
- "__POLL_SECONDS__": str(_POLL_INTERVAL_SECONDS),
239
+ "__UV_COMMAND_TEXT__": _ps_quote(uv_command_text),
240
+ "__WAIT_SECONDS__": str(_PARENT_WAIT_TIMEOUT_SECONDS),
241
+ "__POST_PARENT_EXIT_GRACE_MS__": str(_POST_PARENT_EXIT_GRACE_MS),
143
242
  }
144
243
  script = _SCRIPT_TEMPLATE
145
244
  for token, value in replacements.items():
@@ -168,6 +267,7 @@ def spawn_detached_updater(
168
267
  target=target,
169
268
  uv_path=uv_path,
170
269
  updates_dir=resolved_dir,
270
+ parent_pid=os.getpid(),
171
271
  ),
172
272
  encoding="utf-8-sig",
173
273
  )
@@ -244,7 +344,7 @@ def format_update_result_message(
244
344
  "package": target.package,
245
345
  "current": result.from_version,
246
346
  "latest": result.to_version,
247
- "command": " ".join(target.update_command()),
347
+ "command": windows_update_command_text(target),
248
348
  "code": result.exit_code if result.exit_code is not None else "?",
249
349
  }
250
350
  if result.status == "success":
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "comate-cli"
7
- version = "0.10.2"
7
+ version = "0.10.4"
8
8
  description = "Comate terminal CLI built on comate-agent-sdk"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11,<3.14"
@@ -639,18 +639,15 @@ class TestAssistantMarkdownStyling(unittest.TestCase):
639
639
  ])
640
640
  plain = _strip_ansi(output)
641
641
  self.assertIn(f"{BULLET} Use foo now", plain)
642
- # INLINE_CODE = #A5DFF7 rgb(165,223,247)
643
- self.assertIn("\x1b[38;2;165;223;247mfoo", output)
642
+ # 行内代码 = ANSI cyan(标准色 36),继承终端主题、不再是固定 hex
643
+ self.assertIn("\x1b[36mfoo", output)
644
644
 
645
- def test_assistant_fenced_code_keeps_final_line_padding_in_scrollhistory(self) -> None:
645
+ def test_assistant_fenced_code_has_no_background_in_scrollhistory(self) -> None:
646
646
  output = self._render_to_str([
647
647
  HistoryEntry(entry_type="assistant", text="```json\n{\n }\n```\n")
648
648
  ])
649
- plain = _strip_ansi(output)
650
- brace_line = next(line for line in plain.splitlines() if line.strip() == "}")
651
- visible = brace_line.rstrip()
652
-
653
- self.assertGreater(len(brace_line), len(visible), msg=repr(brace_line))
649
+ # ansi_dark 无背景:scrollhistory 里不应出现任何背景填充 SGR(48;...)
650
+ self.assertNotIn("\x1b[48", output)
654
651
 
655
652
  def test_markdown_styling_preserves_assistant_run_collapse(self) -> None:
656
653
  output = _strip_ansi(self._render_to_str([
@@ -668,3 +665,27 @@ class TestAssistantMarkdownStyling(unittest.TestCase):
668
665
  ))
669
666
  self.assertNotIn(BULLET, output)
670
667
  self.assertRegex(output, r"^ {2}Use foo now")
668
+
669
+ def test_staging_ansi_path_no_background_and_keeps_color(self) -> None:
670
+ # 复刻 render_panels 的 staging 捕获:render_history_group -> Console(force_terminal)
671
+ # -> ANSI() 解析。断言无背景且 ANSI 语法色被保留。
672
+ import io
673
+ from prompt_toolkit.formatted_text import ANSI, to_formatted_text
674
+ from comate_cli.terminal_agent.markdown_render import render_markdown_to_rich
675
+
676
+ buf = io.StringIO()
677
+ console = Console(file=buf, force_terminal=True, width=44)
678
+ group = render_history_group(
679
+ console,
680
+ [HistoryEntry(entry_type="assistant", text="```python\ndef f():\n return 1\n```\n")],
681
+ terminal_width=44,
682
+ render_markdown_to_plain=render_markdown_to_rich,
683
+ assume_run_continues_at_tail=True,
684
+ )
685
+ assert group is not None
686
+ print_history_group_sync(console, group)
687
+ ansi_text = buf.getvalue()
688
+
689
+ self.assertNotIn("\x1b[48", ansi_text) # 无背景填充
690
+ styles = {s for s, _ in to_formatted_text(ANSI(ansi_text)) if s}
691
+ self.assertTrue(any("ansi" in s for s in styles), styles)
@@ -5,7 +5,6 @@ import unittest
5
5
  from rich.console import Console
6
6
  from rich.style import Style
7
7
 
8
- from comate_cli.terminal_agent import theme
9
8
  from comate_cli.terminal_agent.markdown_render import (
10
9
  MARKDOWN_RICH_STYLES,
11
10
  render_markdown_to_plain,
@@ -65,33 +64,32 @@ class TestSingleLineNoLeadingBlank(unittest.TestCase):
65
64
 
66
65
 
67
66
  class TestClaudeDarkMarkdownTheme(unittest.TestCase):
68
- def test_heading_rich_output_is_bold_underlined_no_italic(self) -> None:
69
- """spec 第 5 节:h1 = text.bright 粗体 + 下划线(去斜体)。"""
67
+ def test_h1_is_bold_italic_underline(self) -> None:
68
+ """CC 模型:h1 = bold + italic + underline,零前景色。"""
70
69
  text = render_markdown_to_rich("# heading\n", width=80)
71
70
  spans = list(getattr(text, "spans", []))
72
71
  self.assertEqual(text.plain.splitlines(), ["heading"])
73
72
  styles = [str(span.style) for span in spans]
74
- self.assertTrue(any("bold" in style for style in styles), styles)
75
- self.assertTrue(any("underline" in style for style in styles), styles)
76
- self.assertFalse(any("italic" in style for style in styles), styles)
73
+ self.assertTrue(any("bold" in s for s in styles), styles)
74
+ self.assertTrue(any("italic" in s for s in styles), styles)
75
+ self.assertTrue(any("underline" in s for s in styles), styles)
77
76
 
78
- def test_inline_code_uses_permission_color(self) -> None:
77
+ def test_inline_code_uses_ansi_cyan(self) -> None:
79
78
  fragments = render_markdown_to_pt_fragments("use `foo` now", width=80)
80
79
  code_styles = [style for style, text in fragments if text == "foo"]
81
80
  self.assertTrue(code_styles, fragments)
82
81
  self.assertTrue(
83
- any(f"fg:{theme.INLINE_CODE.lower()}" in style.lower() for style in code_styles),
82
+ any("fg:ansicyan" in style for style in code_styles),
84
83
  code_styles,
85
84
  )
86
85
 
87
- def test_markdown_body_not_forced_white(self):
88
- """spec 第 5 节:正文告别强制纯白。"""
89
- self.assertNotIn("#ffffff", MARKDOWN_RICH_STYLES["markdown.paragraph"])
90
- self.assertEqual(MARKDOWN_RICH_STYLES["markdown.paragraph"], theme.TEXT)
86
+ def test_markdown_body_has_no_forced_color(self):
87
+ """CC 模型:正文零前景色(空样式,继承终端默认色)。"""
88
+ self.assertEqual(MARKDOWN_RICH_STYLES["markdown.paragraph"], "")
91
89
 
92
- def test_code_theme_is_nord(self):
90
+ def test_code_theme_is_ansi_dark(self):
93
91
  from comate_cli.terminal_agent.markdown_render import _CODE_THEME
94
- self.assertEqual(_CODE_THEME, "nord")
92
+ self.assertEqual(_CODE_THEME, "ansi_dark")
95
93
 
96
94
  def test_blockquote_keeps_bar_and_italic_style(self) -> None:
97
95
  fragments = render_markdown_to_pt_fragments("> quoted text\n", width=80)
@@ -104,21 +102,13 @@ class TestClaudeDarkMarkdownTheme(unittest.TestCase):
104
102
  text = render_markdown_to_rich("```python\nprint(1)\n```\n", width=80)
105
103
  self.assertIn("print(1)", text.plain)
106
104
 
107
- def test_fenced_code_preserves_padding_on_final_code_line(self) -> None:
108
- text = render_markdown_to_rich("```json\n{\n }\n```\n", width=40)
109
- code_lines = [line for line in text.split("\n") if line.plain.strip()]
110
- closing_line = next(line for line in code_lines if line.plain.strip() == "}")
111
- visible = closing_line.plain.rstrip()
112
-
113
- self.assertGreater(len(closing_line.plain), len(visible))
114
- self.assertTrue(closing_line.plain.endswith(" "))
115
-
105
+ def test_fenced_code_has_no_background(self) -> None:
106
+ """CC 模型:代码块无背景盒——每个字符位的 bgcolor 都为 None。"""
107
+ text = render_markdown_to_rich("```python\nprint(1)\n```\n", width=40)
116
108
  console = Console(color_system="truecolor")
117
- trailing_style = closing_line.get_style_at_offset(
118
- console,
119
- len(closing_line.plain) - 1,
120
- )
121
- self.assertIsNotNone(trailing_style.bgcolor)
109
+ for offset in range(len(text.plain)):
110
+ style = text.get_style_at_offset(console, offset)
111
+ self.assertIsNone(style.bgcolor, msg=(offset, text.plain[offset]))
122
112
 
123
113
  def test_prompt_toolkit_fragments_do_not_repeat_hash_for_truecolor(self) -> None:
124
114
  style = rich_style_to_prompt_toolkit_style(Style.parse("#b1b9f9 bold"))
@@ -126,6 +116,36 @@ class TestClaudeDarkMarkdownTheme(unittest.TestCase):
126
116
  self.assertIn("bold", style)
127
117
  self.assertNotIn("##", style)
128
118
 
119
+ def test_prompt_toolkit_fragments_map_ansi_standard_colors(self) -> None:
120
+ # ANSI 命名色无 RGB triplet;转换器必须映射到 pt 的 ansi* 名,
121
+ # 否则 ansi_dark 语法高亮在 pt-fragment 路径(transcript viewer)丢色。
122
+ self.assertIn(
123
+ "fg:ansicyan",
124
+ rich_style_to_prompt_toolkit_style(Style.parse("cyan")),
125
+ )
126
+ self.assertIn(
127
+ "fg:ansibrightblue",
128
+ rich_style_to_prompt_toolkit_style(Style.parse("bright_blue")),
129
+ )
130
+ # 属性 + ANSI 前景色共存
131
+ combined = rich_style_to_prompt_toolkit_style(Style.parse("bold cyan"))
132
+ self.assertIn("bold", combined)
133
+ self.assertIn("fg:ansicyan", combined)
134
+
135
+ def test_code_block_pt_fragments_carry_ansi_color(self) -> None:
136
+ # transcript viewer 路径:代码块须保留 ANSI 语法色(依赖 pt 转换器 ANSI 分支)。
137
+ fragments = render_markdown_to_pt_fragments(
138
+ "```python\ndef f():\n return 1\n```\n", width=40
139
+ )
140
+ styles = [style for style, _ in fragments]
141
+ self.assertTrue(any("fg:ansi" in s for s in styles), styles)
142
+
143
+ def test_prose_pt_fragments_have_no_foreground_color(self) -> None:
144
+ # 正文零上色:段落/加粗/斜体不得带 fg:
145
+ fragments = render_markdown_to_pt_fragments("A **bold** and *em* line.\n", width=40)
146
+ for style, text in fragments:
147
+ self.assertNotIn("fg:", style, (style, text))
148
+
129
149
 
130
150
  if __name__ == "__main__":
131
151
  unittest.main()
@@ -32,7 +32,7 @@ class TestPaletteTokens(unittest.TestCase):
32
32
  )
33
33
 
34
34
  def test_derived_colors(self):
35
- self.assertEqual(theme.INLINE_CODE, "#A5DFF7")
35
+ self.assertEqual(theme.INLINE_CODE, "cyan")
36
36
  self.assertEqual(theme.SWEEP_BASE_RGB, (78, 134, 166)) # 流光基色
37
37
  self.assertEqual(theme.SWEEP_MID_RGB, (103, 213, 255)) # 流光峰值=品牌青
38
38
  self.assertEqual(theme.SWEEP_HIGH_RGB, (224, 246, 255)) # 流光高光