e3cli 0.8.4__tar.gz → 0.8.6__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 (264) hide show
  1. {e3cli-0.8.4 → e3cli-0.8.6}/PKG-INFO +1 -1
  2. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/__init__.py +1 -1
  3. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/assignments.py +1 -1
  4. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/interactive.py +10 -10
  5. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/sync.py +1 -1
  6. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/tui_menu.py +37 -0
  7. {e3cli-0.8.4 → e3cli-0.8.6}/pyproject.toml +1 -1
  8. {e3cli-0.8.4 → e3cli-0.8.6}/.github/workflows/ci.yml +0 -0
  9. {e3cli-0.8.4 → e3cli-0.8.6}/.github/workflows/release.yml +0 -0
  10. {e3cli-0.8.4 → e3cli-0.8.6}/.gitignore +0 -0
  11. {e3cli-0.8.4 → e3cli-0.8.6}/CLAUDE.md +0 -0
  12. {e3cli-0.8.4 → e3cli-0.8.6}/COMMIT_EDITMSG +0 -0
  13. {e3cli-0.8.4 → e3cli-0.8.6}/Formula/e3cli.rb +0 -0
  14. {e3cli-0.8.4 → e3cli-0.8.6}/HEAD +0 -0
  15. {e3cli-0.8.4 → e3cli-0.8.6}/LICENSE +0 -0
  16. {e3cli-0.8.4 → e3cli-0.8.6}/Makefile +0 -0
  17. {e3cli-0.8.4 → e3cli-0.8.6}/README.md +0 -0
  18. {e3cli-0.8.4 → e3cli-0.8.6}/README_zh-TW.md +0 -0
  19. {e3cli-0.8.4 → e3cli-0.8.6}/config +0 -0
  20. {e3cli-0.8.4 → e3cli-0.8.6}/description +0 -0
  21. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/__main__.py +0 -0
  22. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/agent_prompt.md +0 -0
  23. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/ai/__init__.py +0 -0
  24. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/__init__.py +0 -0
  25. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/assignments.py +0 -0
  26. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/client.py +0 -0
  27. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/courses.py +0 -0
  28. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/files.py +0 -0
  29. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/forums.py +0 -0
  30. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/members.py +0 -0
  31. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/messages.py +0 -0
  32. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/api/site.py +0 -0
  33. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/auth.py +0 -0
  34. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/cli.py +0 -0
  35. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/__init__.py +0 -0
  36. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/_common.py +0 -0
  37. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/announcements.py +0 -0
  38. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/courses.py +0 -0
  39. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/download.py +0 -0
  40. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/login.py +0 -0
  41. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/logout.py +0 -0
  42. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/members.py +0 -0
  43. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/message.py +0 -0
  44. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/profile.py +0 -0
  45. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/schedule.py +0 -0
  46. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/setup.py +0 -0
  47. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/skill.py +0 -0
  48. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/commands/submit.py +0 -0
  49. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/config.py +0 -0
  50. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/credential.py +0 -0
  51. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/formatting.py +0 -0
  52. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/http.py +0 -0
  53. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/i18n.py +0 -0
  54. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/scheduler/__init__.py +0 -0
  55. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/scheduler/cron.py +0 -0
  56. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/semester.py +0 -0
  57. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/skills/e3cli/SKILL.md +0 -0
  58. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/storage/__init__.py +0 -0
  59. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/storage/db.py +0 -0
  60. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/storage/models.py +0 -0
  61. {e3cli-0.8.4 → e3cli-0.8.6}/e3cli/storage/tracking.py +0 -0
  62. {e3cli-0.8.4 → e3cli-0.8.6}/gk/config +0 -0
  63. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/applypatch-msg.sample +0 -0
  64. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/commit-msg.sample +0 -0
  65. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/fsmonitor-watchman.sample +0 -0
  66. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/post-update.sample +0 -0
  67. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-applypatch.sample +0 -0
  68. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-commit.sample +0 -0
  69. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-merge-commit.sample +0 -0
  70. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-push.sample +0 -0
  71. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-rebase.sample +0 -0
  72. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/pre-receive.sample +0 -0
  73. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/prepare-commit-msg.sample +0 -0
  74. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/push-to-checkout.sample +0 -0
  75. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/sendemail-validate.sample +0 -0
  76. {e3cli-0.8.4 → e3cli-0.8.6}/hooks/update.sample +0 -0
  77. {e3cli-0.8.4 → e3cli-0.8.6}/index +0 -0
  78. {e3cli-0.8.4 → e3cli-0.8.6}/info/exclude +0 -0
  79. {e3cli-0.8.4 → e3cli-0.8.6}/logs/HEAD +0 -0
  80. {e3cli-0.8.4 → e3cli-0.8.6}/logs/refs/heads/main +0 -0
  81. {e3cli-0.8.4 → e3cli-0.8.6}/logs/refs/remotes/origin/main +0 -0
  82. {e3cli-0.8.4 → e3cli-0.8.6}/objects/00/12f54a62a13459820d72b63eee8781d5cc0fae +0 -0
  83. {e3cli-0.8.4 → e3cli-0.8.6}/objects/00/373e054c653e54b45cacae42d71dff863626bf +0 -0
  84. {e3cli-0.8.4 → e3cli-0.8.6}/objects/04/9ee8e5968a9a80f0f1ac53d12141c61e7298ba +0 -0
  85. {e3cli-0.8.4 → e3cli-0.8.6}/objects/04/e0353337b6bb0c0ba43625456e9aaf13090a90 +0 -0
  86. {e3cli-0.8.4 → e3cli-0.8.6}/objects/05/0fec5da6aa35de1058b11671dfd6255b4d6b50 +0 -0
  87. {e3cli-0.8.4 → e3cli-0.8.6}/objects/06/5c820fc3efcd99754c56197a9c4e7142da710d +0 -0
  88. {e3cli-0.8.4 → e3cli-0.8.6}/objects/07/01890044580c4644114b781d474012b2fade80 +0 -0
  89. {e3cli-0.8.4 → e3cli-0.8.6}/objects/07/fb70ff1c509aad1f137a9255b9cb98733472a3 +0 -0
  90. {e3cli-0.8.4 → e3cli-0.8.6}/objects/0e/89da06e2d2273057dfa03705c42bbc57af1a6a +0 -0
  91. {e3cli-0.8.4 → e3cli-0.8.6}/objects/13/ad53a74b643378a7aebfe32d672b256ab73bef +0 -0
  92. {e3cli-0.8.4 → e3cli-0.8.6}/objects/13/fb66226ef7de52c039b1030460c5bb9ad1d576 +0 -0
  93. {e3cli-0.8.4 → e3cli-0.8.6}/objects/14/f44dcbbf53914d2d2b5b5a43453932fb0c6dd6 +0 -0
  94. {e3cli-0.8.4 → e3cli-0.8.6}/objects/15/6da5879f795abd72f645bbcadf18a4928a7502 +0 -0
  95. {e3cli-0.8.4 → e3cli-0.8.6}/objects/19/f9906c2882926f53e77b4be8be579906954a69 +0 -0
  96. {e3cli-0.8.4 → e3cli-0.8.6}/objects/1a/3f91d11c7c9c764fcd1ed01a4a0c3f13b68fee +0 -0
  97. {e3cli-0.8.4 → e3cli-0.8.6}/objects/1c/1765c4b372bd085c6224472de72f66e8d9fbe9 +0 -0
  98. {e3cli-0.8.4 → e3cli-0.8.6}/objects/22/e1020c805f3235c5c85d711a45d70d42883de0 +0 -0
  99. {e3cli-0.8.4 → e3cli-0.8.6}/objects/24/7f60ac43c8a065926f3228575a34d0ecd6f93d +0 -0
  100. {e3cli-0.8.4 → e3cli-0.8.6}/objects/25/4d6ec800e32759015479a68a3afd096ee12680 +0 -0
  101. {e3cli-0.8.4 → e3cli-0.8.6}/objects/27/1aee134d84254ba525ce728b3ecbbcbd73fe97 +0 -0
  102. {e3cli-0.8.4 → e3cli-0.8.6}/objects/27/41f5e19bf92e37c983e7d4d307ec09726b95ed +0 -0
  103. {e3cli-0.8.4 → e3cli-0.8.6}/objects/28/265727a791db9daef09c85ab159ef799908dc4 +0 -0
  104. {e3cli-0.8.4 → e3cli-0.8.6}/objects/2d/4c64fc2752b1356569f24e6f3d53cfd8ff3236 +0 -0
  105. {e3cli-0.8.4 → e3cli-0.8.6}/objects/31/61734dcf7d8b86372753c2552746641969ca7a +0 -0
  106. {e3cli-0.8.4 → e3cli-0.8.6}/objects/33/3da47d4f7d08fc2836374614b902a27f1a7638 +0 -0
  107. {e3cli-0.8.4 → e3cli-0.8.6}/objects/35/25cb5144ca2d643d918824df0f08042f8f1f19 +0 -0
  108. {e3cli-0.8.4 → e3cli-0.8.6}/objects/35/faf439f5e7e6730398397e0988c874ec74c15e +0 -0
  109. {e3cli-0.8.4 → e3cli-0.8.6}/objects/37/2acc5a62b5a8a7cd97d3eb07614d2a71d65c34 +0 -0
  110. {e3cli-0.8.4 → e3cli-0.8.6}/objects/37/f0c29518b9df6cde4d0cd7857d95b425fcaec9 +0 -0
  111. {e3cli-0.8.4 → e3cli-0.8.6}/objects/38/8bc96a53da22ddf8d3684c10480a9ed89274a6 +0 -0
  112. {e3cli-0.8.4 → e3cli-0.8.6}/objects/38/d062de47938882cc8c951cfcd18266bfa834d0 +0 -0
  113. {e3cli-0.8.4 → e3cli-0.8.6}/objects/39/bbbcd0ade10f3066a853cca53ad5159ac78e30 +0 -0
  114. {e3cli-0.8.4 → e3cli-0.8.6}/objects/3c/dd09e594d5716969279d6e3fcf99fca00f8504 +0 -0
  115. {e3cli-0.8.4 → e3cli-0.8.6}/objects/3e/71c91d71be5667a313ecfae444718750b2bf55 +0 -0
  116. {e3cli-0.8.4 → e3cli-0.8.6}/objects/3e/7febbe12d705885c2503c3e0d785e488f60966 +0 -0
  117. {e3cli-0.8.4 → e3cli-0.8.6}/objects/3f/0235e32813f74985f0363e64a110093d979e2f +0 -0
  118. {e3cli-0.8.4 → e3cli-0.8.6}/objects/40/9ded4237099e6e52de508dd46ebe74cf769e79 +0 -0
  119. {e3cli-0.8.4 → e3cli-0.8.6}/objects/41/88bc8a7a0569fd47efb215aad2e3f4a7b7e188 +0 -0
  120. {e3cli-0.8.4 → e3cli-0.8.6}/objects/42/53425dbc4368909b4b782fd53360537d3d9033 +0 -0
  121. {e3cli-0.8.4 → e3cli-0.8.6}/objects/42/925cbdfef5b97f5ae199323a5545810207af09 +0 -0
  122. {e3cli-0.8.4 → e3cli-0.8.6}/objects/42/b238ab6f9c3c74cd23a14c094ad8eb1c66d52b +0 -0
  123. {e3cli-0.8.4 → e3cli-0.8.6}/objects/43/49874ad2cdacc9d50d6ba06df25765d077248a +0 -0
  124. {e3cli-0.8.4 → e3cli-0.8.6}/objects/43/cead7a00c7ef98e1d5c9c86e50a3ccde712277 +0 -0
  125. {e3cli-0.8.4 → e3cli-0.8.6}/objects/43/e88c1a0a115fc72390e7bcef8ce0a8328a4e05 +0 -0
  126. {e3cli-0.8.4 → e3cli-0.8.6}/objects/45/9c23839b54e81c741fd2b5241c2b164079fcc1 +0 -0
  127. {e3cli-0.8.4 → e3cli-0.8.6}/objects/47/d9fe1a890a3d711662f4f414aee1ea6ae92261 +0 -0
  128. {e3cli-0.8.4 → e3cli-0.8.6}/objects/49/da3d511c413f21dca0f072ad52b0aca2d3c167 +0 -0
  129. {e3cli-0.8.4 → e3cli-0.8.6}/objects/4f/1897fc4248a024fc88e51f53f9028f531318cc +0 -0
  130. {e3cli-0.8.4 → e3cli-0.8.6}/objects/50/f89469bbe802dad848dcfeb2a8e447d4cd5787 +0 -0
  131. {e3cli-0.8.4 → e3cli-0.8.6}/objects/51/7ac4b389a310399e096baab0af89f1e5de7b3b +0 -0
  132. {e3cli-0.8.4 → e3cli-0.8.6}/objects/52/61e3b09b4722a7003c53a643085ca69e0c7bbd +0 -0
  133. {e3cli-0.8.4 → e3cli-0.8.6}/objects/53/7671d097d835bda94f0460295ce1cf49eda99a +0 -0
  134. {e3cli-0.8.4 → e3cli-0.8.6}/objects/54/8d12b92b82f95dc93b4f069086d8214651593d +0 -0
  135. {e3cli-0.8.4 → e3cli-0.8.6}/objects/55/2cd273856516fd1a5e026ef23c9ffeb5a33876 +0 -0
  136. {e3cli-0.8.4 → e3cli-0.8.6}/objects/56/52f31ea165a3ace62d1394af754a8aac78aa9f +0 -0
  137. {e3cli-0.8.4 → e3cli-0.8.6}/objects/57/9c69b0b67ebff094514cec01f692e21ca5e965 +0 -0
  138. {e3cli-0.8.4 → e3cli-0.8.6}/objects/57/ddc6c8820bd8ec98845e7f5a29bf3302f0f481 +0 -0
  139. {e3cli-0.8.4 → e3cli-0.8.6}/objects/58/2fba780a9cb7a9f312bd21cf97f16bc5b347c3 +0 -0
  140. {e3cli-0.8.4 → e3cli-0.8.6}/objects/5c/6b70ca4f2f822429a97a84428580966d84ab3a +0 -0
  141. {e3cli-0.8.4 → e3cli-0.8.6}/objects/5e/c686a09ef712b11372e38d25c958b027b3f21f +0 -0
  142. {e3cli-0.8.4 → e3cli-0.8.6}/objects/5f/96e4a89ab06b40be8c45cd0d975bdc2f957064 +0 -0
  143. {e3cli-0.8.4 → e3cli-0.8.6}/objects/60/c9053920fd6a8cd64eb28d8df99bcc2d176d59 +0 -0
  144. {e3cli-0.8.4 → e3cli-0.8.6}/objects/62/1ab88d46df0f1b1015e250f4c8174729629400 +0 -0
  145. {e3cli-0.8.4 → e3cli-0.8.6}/objects/62/5d72f7372bae8ab3ccc056e829c277c0705d1b +0 -0
  146. {e3cli-0.8.4 → e3cli-0.8.6}/objects/64/1ee83ac5a80cc7ae2e5f036db6329eacd03deb +0 -0
  147. {e3cli-0.8.4 → e3cli-0.8.6}/objects/65/011e04aeddd4c893a7a64b7ef745e9ad1af3c3 +0 -0
  148. {e3cli-0.8.4 → e3cli-0.8.6}/objects/66/b5f21689d122c08ee3b98d35f3de096addcfcc +0 -0
  149. {e3cli-0.8.4 → e3cli-0.8.6}/objects/69/89864c6313789a85608f01eda8976e1215bd31 +0 -0
  150. {e3cli-0.8.4 → e3cli-0.8.6}/objects/69/db255149b01f9ab01b48138fbb0f2d9b8b1acd +0 -0
  151. {e3cli-0.8.4 → e3cli-0.8.6}/objects/6a/597477c08142472e4a0559811e459ae7b127fc +0 -0
  152. {e3cli-0.8.4 → e3cli-0.8.6}/objects/6a/5e5e8ca97f2dec142b2ba15ed97a8493c16a54 +0 -0
  153. {e3cli-0.8.4 → e3cli-0.8.6}/objects/6b/d7a53ed2c5cd4c0e97267b70fff1dd461b60b7 +0 -0
  154. {e3cli-0.8.4 → e3cli-0.8.6}/objects/6d/05c5aaad4ff44578bbc46b5f7fc96f0d114e04 +0 -0
  155. {e3cli-0.8.4 → e3cli-0.8.6}/objects/6d/5c36f68694ad597a4deeba39e56e561ba72f2f +0 -0
  156. {e3cli-0.8.4 → e3cli-0.8.6}/objects/6e/3f7883a133ec8310cf8ad07cba6aead4583ff9 +0 -0
  157. {e3cli-0.8.4 → e3cli-0.8.6}/objects/6f/15710e7621abc864dabb788c5dfcab181e4551 +0 -0
  158. {e3cli-0.8.4 → e3cli-0.8.6}/objects/71/6894eaf5165344374d82dda25e82eff5fce119 +0 -0
  159. {e3cli-0.8.4 → e3cli-0.8.6}/objects/71/ca2fc16d0959c7465d57077a260156674274ba +0 -0
  160. {e3cli-0.8.4 → e3cli-0.8.6}/objects/74/0db02cd55f69b9f21f49a359fc14c15ad7f8ce +0 -0
  161. {e3cli-0.8.4 → e3cli-0.8.6}/objects/76/37fd54a47bfbdf2eed4827b78dff6019b87e57 +0 -0
  162. {e3cli-0.8.4 → e3cli-0.8.6}/objects/79/15535a493620715580f5d0ce8c2481172d44bd +0 -0
  163. {e3cli-0.8.4 → e3cli-0.8.6}/objects/7b/ad63d2dd7dab6c33f73a31bd359129523ac5ce +0 -0
  164. {e3cli-0.8.4 → e3cli-0.8.6}/objects/7c/95c6bec18763286e0100ebc4fbef71df48b0ae +0 -0
  165. {e3cli-0.8.4 → e3cli-0.8.6}/objects/7f/a3240ccd3661f7786bd269a0b0875cd9037b4b +0 -0
  166. {e3cli-0.8.4 → e3cli-0.8.6}/objects/82/8511321c72b509d8b39d3a392014e2748036ad +0 -0
  167. {e3cli-0.8.4 → e3cli-0.8.6}/objects/84/3e8bf8d7bf26780eb4c44f0e1733dae7df37da +0 -0
  168. {e3cli-0.8.4 → e3cli-0.8.6}/objects/84/45dbe199e0d8e83aa85b04f68c4b4e97764c46 +0 -0
  169. {e3cli-0.8.4 → e3cli-0.8.6}/objects/85/58de1a164b671ae0c5e9867140f4d105b26c71 +0 -0
  170. {e3cli-0.8.4 → e3cli-0.8.6}/objects/85/bfef5de75cdd3313dea22060cd9f22bf6f611c +0 -0
  171. {e3cli-0.8.4 → e3cli-0.8.6}/objects/87/075d1b2ca01520a54b6e2053d2b07e30ff550e +0 -0
  172. {e3cli-0.8.4 → e3cli-0.8.6}/objects/8a/2f2b74b3a7f9b0f2969ff455d1b5a149189522 +0 -0
  173. {e3cli-0.8.4 → e3cli-0.8.6}/objects/8b/da82680cf77bd85ef26d162f09df5b555c4817 +0 -0
  174. {e3cli-0.8.4 → e3cli-0.8.6}/objects/8b/f368e49da5649603590fd2ad157fb423f91240 +0 -0
  175. {e3cli-0.8.4 → e3cli-0.8.6}/objects/8c/988f80dcde632bee9389cb52d7c2639e358676 +0 -0
  176. {e3cli-0.8.4 → e3cli-0.8.6}/objects/8d/9cc78f614e082762dfd1af4d90b83e97509ba4 +0 -0
  177. {e3cli-0.8.4 → e3cli-0.8.6}/objects/91/b7e6699fcf2d3d87bc9209c30743851b95937e +0 -0
  178. {e3cli-0.8.4 → e3cli-0.8.6}/objects/97/6c6c60bcbbfe1b2ea7dc08631420753e2a2c55 +0 -0
  179. {e3cli-0.8.4 → e3cli-0.8.6}/objects/98/414112321df2d4fef51640978555b7b0a10740 +0 -0
  180. {e3cli-0.8.4 → e3cli-0.8.6}/objects/98/5dbb79e4f3157ba4a5b967ca1f045087fe718c +0 -0
  181. {e3cli-0.8.4 → e3cli-0.8.6}/objects/9b/8451b0fde38dfc5250c52aab3ef3fd30ef616d +0 -0
  182. {e3cli-0.8.4 → e3cli-0.8.6}/objects/9d/04ed7e9c2fdc16eadb72867c45c682d0661d8e +0 -0
  183. {e3cli-0.8.4 → e3cli-0.8.6}/objects/9d/1dcfdaf1a6857c5f83dc27019c7600e1ffaff8 +0 -0
  184. {e3cli-0.8.4 → e3cli-0.8.6}/objects/9e/9190183a3e710fd6a3caabafda0395aacc4907 +0 -0
  185. {e3cli-0.8.4 → e3cli-0.8.6}/objects/a4/9ab06df8e92e9921f006c4687a8119a41f140c +0 -0
  186. {e3cli-0.8.4 → e3cli-0.8.6}/objects/a4/9e182d79178f30917cb9d5d007bf4ad4354efc +0 -0
  187. {e3cli-0.8.4 → e3cli-0.8.6}/objects/a5/374e27f1f437b7b8d795bdbba9990e1b33ac4a +0 -0
  188. {e3cli-0.8.4 → e3cli-0.8.6}/objects/a9/621b26eb6fcf44e82b8f40fe15a08db273ea94 +0 -0
  189. {e3cli-0.8.4 → e3cli-0.8.6}/objects/a9/958ca6bbbce4793eb63dfc75053f6f2c468f7d +0 -0
  190. {e3cli-0.8.4 → e3cli-0.8.6}/objects/ab/8112dc0e039a6764e18515bc8b9d25bf8cba72 +0 -0
  191. {e3cli-0.8.4 → e3cli-0.8.6}/objects/ad/86572a7a3d9c41b39f68c1509f45eeb3c47145 +0 -0
  192. {e3cli-0.8.4 → e3cli-0.8.6}/objects/ae/7c0c0693884ee9968bd46c7e3c1c4801c93f07 +0 -0
  193. {e3cli-0.8.4 → e3cli-0.8.6}/objects/af/66d7ee37e22b5b4ffcb43392bcd6fe58b7189b +0 -0
  194. {e3cli-0.8.4 → e3cli-0.8.6}/objects/b0/1eb7d29ce867088dcfec990e3a118ee7d3a3b2 +0 -0
  195. {e3cli-0.8.4 → e3cli-0.8.6}/objects/b0/6bfa35440cb0bf33a698db8b116077b885dade +0 -0
  196. {e3cli-0.8.4 → e3cli-0.8.6}/objects/b2/30e20e02ded29d01eb93f89b62ab47fb378e1f +0 -0
  197. {e3cli-0.8.4 → e3cli-0.8.6}/objects/b2/e68381120a59886f7999876775e9b3dfeaa550 +0 -0
  198. {e3cli-0.8.4 → e3cli-0.8.6}/objects/b3/a239ea6bac51a6315988af95d83e86323aa461 +0 -0
  199. {e3cli-0.8.4 → e3cli-0.8.6}/objects/b4/1e24e40f90ad6c12b6f840ecdb133b2749ca7e +0 -0
  200. {e3cli-0.8.4 → e3cli-0.8.6}/objects/b9/4bb6724a0646fb1636a66de603cec15e7dfa3e +0 -0
  201. {e3cli-0.8.4 → e3cli-0.8.6}/objects/bb/8fccf2b545f4ba46149fb07bd1f700ae7bcc87 +0 -0
  202. {e3cli-0.8.4 → e3cli-0.8.6}/objects/be/9fc276a620ea29d87e2001489e436f6e714a34 +0 -0
  203. {e3cli-0.8.4 → e3cli-0.8.6}/objects/bf/a019fa30db2df7e7732d119032e84391c3b6ce +0 -0
  204. {e3cli-0.8.4 → e3cli-0.8.6}/objects/c0/2beae1cbe94f20d2a4ef88b46bd8ade684f911 +0 -0
  205. {e3cli-0.8.4 → e3cli-0.8.6}/objects/c6/1651ba7a27cd0ff5c726c4ce79751facc64f39 +0 -0
  206. {e3cli-0.8.4 → e3cli-0.8.6}/objects/c7/f3f6ba90a1ec28fdef6ec7b10d82f4ad144969 +0 -0
  207. {e3cli-0.8.4 → e3cli-0.8.6}/objects/cb/b097bc0ed0f65614e13f563a22624f0ce078e6 +0 -0
  208. {e3cli-0.8.4 → e3cli-0.8.6}/objects/cd/3c462e6a24c9757a0fffd7c42abce926e1adf5 +0 -0
  209. {e3cli-0.8.4 → e3cli-0.8.6}/objects/ce/f38215c9c7dc239421d85ca93221ad7beb63cb +0 -0
  210. {e3cli-0.8.4 → e3cli-0.8.6}/objects/cf/286c5bf7cffc4bf93b51554d4299845172df84 +0 -0
  211. {e3cli-0.8.4 → e3cli-0.8.6}/objects/d0/aa218f92135250fa46b8490c68f4e77846b1b1 +0 -0
  212. {e3cli-0.8.4 → e3cli-0.8.6}/objects/d1/70d82f10fffbce5936fc1d0f5e1f051c354413 +0 -0
  213. {e3cli-0.8.4 → e3cli-0.8.6}/objects/d1/eccedbd9604b59bcc247b6f8a177df5486ce57 +0 -0
  214. {e3cli-0.8.4 → e3cli-0.8.6}/objects/d4/1a891e54bfd7ddd745555624ce9142a47e5fdd +0 -0
  215. {e3cli-0.8.4 → e3cli-0.8.6}/objects/d8/2d02db21187a83d77a71c8665e1b4699e481fb +0 -0
  216. {e3cli-0.8.4 → e3cli-0.8.6}/objects/d8/76cc79a2f25f4e8616805811110f700e277af2 +0 -0
  217. {e3cli-0.8.4 → e3cli-0.8.6}/objects/db/3bb89cba087a88feb4075b467732846a1d0118 +0 -0
  218. {e3cli-0.8.4 → e3cli-0.8.6}/objects/db/dc7e591f97aab4da5d2acb29194355c277acf6 +0 -0
  219. {e3cli-0.8.4 → e3cli-0.8.6}/objects/df/8c39b5b6cfcf19f8f27d5913830cb0a8fcd4c8 +0 -0
  220. {e3cli-0.8.4 → e3cli-0.8.6}/objects/df/a8267b7bcb40cc3c4524934d386516e27dd5db +0 -0
  221. {e3cli-0.8.4 → e3cli-0.8.6}/objects/e0/87a95e8c14f5d090c04d19d3a9f91a208b7841 +0 -0
  222. {e3cli-0.8.4 → e3cli-0.8.6}/objects/e0/e63743c9660300f76483d3ad27ecd85241cdc5 +0 -0
  223. {e3cli-0.8.4 → e3cli-0.8.6}/objects/e2/2ab51073af126f1b602884b02dad11f9027942 +0 -0
  224. {e3cli-0.8.4 → e3cli-0.8.6}/objects/e4/1b4051ac3bac5364f7a5ce048ecc41147857d6 +0 -0
  225. {e3cli-0.8.4 → e3cli-0.8.6}/objects/e4/1dbd057baa81d4e660a52d2486ee700f8c7b60 +0 -0
  226. {e3cli-0.8.4 → e3cli-0.8.6}/objects/e4/fba2702e9b6e30902b10ef946b8e05ee14b3d6 +0 -0
  227. {e3cli-0.8.4 → e3cli-0.8.6}/objects/e5/23965887274b5a3060bca39ec005e6fe99883b +0 -0
  228. {e3cli-0.8.4 → e3cli-0.8.6}/objects/e6/3334965c2117237f22708d1c4681be5d77574b +0 -0
  229. {e3cli-0.8.4 → e3cli-0.8.6}/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  230. {e3cli-0.8.4 → e3cli-0.8.6}/objects/e8/a732d4490c14cf239dd7081c8c1d15b44c495b +0 -0
  231. {e3cli-0.8.4 → e3cli-0.8.6}/objects/eb/22d1e687a8a2dd36474c7add9535ebe9682d3b +0 -0
  232. {e3cli-0.8.4 → e3cli-0.8.6}/objects/eb/7320ad4e2f7d18b503c64b2a983c2a41fc8eb1 +0 -0
  233. {e3cli-0.8.4 → e3cli-0.8.6}/objects/ec/2badeec80e4ddc66a5168d8c3aec878a30f813 +0 -0
  234. {e3cli-0.8.4 → e3cli-0.8.6}/objects/ec/d43841d2e6e7268caf4a1bb03c3f549ca75f49 +0 -0
  235. {e3cli-0.8.4 → e3cli-0.8.6}/objects/f0/c3d899d1d7578174419e3d21fbb43d469ea0df +0 -0
  236. {e3cli-0.8.4 → e3cli-0.8.6}/objects/f2/d740d8021553398f98f1302398006e988697ef +0 -0
  237. {e3cli-0.8.4 → e3cli-0.8.6}/objects/f3/505619e9502b8a75ce04cf75ccb61e54f16cf5 +0 -0
  238. {e3cli-0.8.4 → e3cli-0.8.6}/objects/f3/681d2437d363e9865aec3eb4e3e8f5aff46ca6 +0 -0
  239. {e3cli-0.8.4 → e3cli-0.8.6}/objects/f3/b1f01d9f8fab935f87bee101fa0f1f944c30d8 +0 -0
  240. {e3cli-0.8.4 → e3cli-0.8.6}/objects/f3/e2082feab4cb9a889f623d8fe7b58628f82da9 +0 -0
  241. {e3cli-0.8.4 → e3cli-0.8.6}/objects/f4/21fa018addaacd7f59e11603b182b38207abca +0 -0
  242. {e3cli-0.8.4 → e3cli-0.8.6}/objects/f5/9e7ad7dad379a9752969e3443d3ed60a82cdf1 +0 -0
  243. {e3cli-0.8.4 → e3cli-0.8.6}/objects/f6/d28255ddf6cd98d69342c282663771093ad834 +0 -0
  244. {e3cli-0.8.4 → e3cli-0.8.6}/objects/f7/c7da26bbfca63ed8af08f9b7b1ace4930dad44 +0 -0
  245. {e3cli-0.8.4 → e3cli-0.8.6}/objects/f9/aece29cc134fc99f629129d46c712f015b00c0 +0 -0
  246. {e3cli-0.8.4 → e3cli-0.8.6}/objects/fb/4fbcdf3b0da9864651c5d50322b27c21f26fed +0 -0
  247. {e3cli-0.8.4 → e3cli-0.8.6}/objects/fb/ba70de6b161e2918d9d9e62d734abd85d01ae1 +0 -0
  248. {e3cli-0.8.4 → e3cli-0.8.6}/objects/fb/bc2db563e1d0b7a0745a04fd0a0c5b5ef7e6aa +0 -0
  249. {e3cli-0.8.4 → e3cli-0.8.6}/objects/fc/03924609632d9a9f820119bdf5a9ddf5a4c90a +0 -0
  250. {e3cli-0.8.4 → e3cli-0.8.6}/objects/fd/3fb430f4e9190752eb58cef5019660e9aa92ef +0 -0
  251. {e3cli-0.8.4 → e3cli-0.8.6}/objects/fd/d0e4feee582591e85b9d488dd4fa1794364abb +0 -0
  252. {e3cli-0.8.4 → e3cli-0.8.6}/objects/fe/092d97fe5a0e2a3d7b807e1a9f44735281a286 +0 -0
  253. {e3cli-0.8.4 → e3cli-0.8.6}/refs/heads/main +0 -0
  254. {e3cli-0.8.4 → e3cli-0.8.6}/refs/remotes/origin/main +0 -0
  255. {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.1.0 +0 -0
  256. {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.2.0 +0 -0
  257. {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.3.0 +0 -0
  258. {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.3.1 +0 -0
  259. {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.3.2 +0 -0
  260. {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.4.0 +0 -0
  261. {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.4.1 +0 -0
  262. {e3cli-0.8.4 → e3cli-0.8.6}/refs/tags/v0.4.3 +0 -0
  263. {e3cli-0.8.4 → e3cli-0.8.6}/tests/__init__.py +0 -0
  264. {e3cli-0.8.4 → e3cli-0.8.6}/tests/test_basic.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: e3cli
3
- Version: 0.8.4
3
+ Version: 0.8.6
4
4
  Summary: NYCU E3 Moodle automation CLI — sync courses, download materials, submit assignments.
5
5
  Project-URL: Homepage, https://github.com/junlinwk/e3cli
6
6
  Project-URL: Repository, https://github.com/junlinwk/e3cli
@@ -1,3 +1,3 @@
1
1
  """E3CLI — NYCU E3 Moodle Automation CLI Tool"""
2
2
 
3
- __version__ = "0.8.4"
3
+ __version__ = "0.8.6"
@@ -62,7 +62,7 @@ def assignments(
62
62
  course_list = filtered
63
63
 
64
64
  courseids = [c["id"] for c in course_list]
65
- course_names = {c["id"]: c.get("shortname", "") for c in course_list}
65
+ course_names = {c["id"]: c.get("fullname", "") or c.get("shortname", "") for c in course_list}
66
66
 
67
67
  if not courseids:
68
68
  console.print(f"[yellow]{t('common.no_courses')}[/yellow]")
@@ -34,7 +34,7 @@ from e3cli.semester import (
34
34
  get_current_semester_code,
35
35
  group_by_semester,
36
36
  )
37
- from e3cli.tui_menu import MenuItem, show_menu_fullscreen, wait_for_back
37
+ from e3cli.tui_menu import MenuItem, prompt_with_back, show_menu_fullscreen, wait_for_back
38
38
 
39
39
  console = Console()
40
40
  app = typer.Typer()
@@ -511,9 +511,9 @@ def _assignments_view(client, db, info, cid, cname):
511
511
  while True:
512
512
  _show_assignments_table(sorted_raw, f"{t('tui.assignments')} — {cname}")
513
513
  console.print(f"\n[dim]{t('tui.view_detail')}[/dim]")
514
- choice = _prompt()
514
+ choice = prompt_with_back("> ")
515
515
 
516
- if choice in ("q", "b", "back", ""):
516
+ if choice is None or choice in ("q", "b", "back", ""):
517
517
  break
518
518
  if choice.isdigit():
519
519
  idx = int(choice) - 1
@@ -524,7 +524,7 @@ def _assignments_view(client, db, info, cid, cname):
524
524
 
525
525
  def _all_assignments_view(client, db, info, courses):
526
526
  courseids = [c["id"] for c in courses]
527
- course_names = {c["id"]: c.get("shortname", "") for c in courses}
527
+ course_names = {c["id"]: c.get("fullname", "") or c.get("shortname", "") for c in courses}
528
528
 
529
529
  if not courseids:
530
530
  console.print(f"[yellow]{t('common.no_courses')}[/yellow]")
@@ -551,9 +551,9 @@ def _all_assignments_view(client, db, info, courses):
551
551
  while True:
552
552
  _show_assignments_table(sorted_raw, t("tui.assignments"), show_course=True)
553
553
  console.print(f"\n[dim]{t('tui.view_detail')}[/dim]")
554
- choice = _prompt()
554
+ choice = prompt_with_back("> ")
555
555
 
556
- if choice in ("q", "b", "back", ""):
556
+ if choice is None or choice in ("q", "b", "back", ""):
557
557
  break
558
558
  if choice.isdigit():
559
559
  idx = int(choice) - 1
@@ -865,9 +865,9 @@ def _announcements_view(client, cid, cname):
865
865
 
866
866
  console.print(table)
867
867
  console.print(f"\n[dim]{t('announce.view_detail')}[/dim]")
868
- choice = _prompt()
868
+ choice = prompt_with_back("> ")
869
869
 
870
- if choice in ("q", "b", "back", ""):
870
+ if choice is None or choice in ("q", "b", "back", ""):
871
871
  break
872
872
 
873
873
  if choice.isdigit():
@@ -943,9 +943,9 @@ def _members_view(client, info, cid, cname):
943
943
  console.print(f"[dim]{t('members.total', n=len(all_users))}[/dim]")
944
944
  console.print(f"\n[dim]{t('members.select_msg')}[/dim]")
945
945
 
946
- choice = _prompt()
946
+ choice = prompt_with_back("> ")
947
947
 
948
- if choice in ("q", "b", "back", ""):
948
+ if choice is None or choice in ("q", "b", "back", ""):
949
949
  break
950
950
 
951
951
  if choice.isdigit():
@@ -95,7 +95,7 @@ def sync(
95
95
  for c in course_list:
96
96
  cid = c["id"]
97
97
  courseids.append(cid)
98
- course_names[cid] = c.get("shortname", "")
98
+ course_names[cid] = c.get("fullname", "") or c.get("shortname", "")
99
99
  db.upsert_course(cid, c.get("shortname", ""), c.get("fullname", ""))
100
100
 
101
101
  # 下載教材
@@ -265,6 +265,43 @@ def _render_menu(
265
265
  _last_render_lines = len(output)
266
266
 
267
267
 
268
+ def prompt_with_back(prompt_text: str = "> ") -> str | None:
269
+ """
270
+ 讀一行輸入,支援左鍵/esc/q 直接返回(不需先清空輸入)。
271
+ 回傳:
272
+ - 字串:使用者按 Enter 結束輸入(可能為空字串)
273
+ - None:使用者按 ←、esc、q 或 Ctrl+C → 表示返回
274
+ 支援 backspace 修正打字。
275
+ """
276
+ sys.stdout.write(f"\033[1;36m{prompt_text}\033[0m")
277
+ sys.stdout.flush()
278
+ buf: list[str] = []
279
+ while True:
280
+ key = _read_key()
281
+ if key in ("left", "esc", "quit"):
282
+ sys.stdout.write("\r\033[K")
283
+ sys.stdout.flush()
284
+ return None
285
+ if key == "q" and not buf:
286
+ sys.stdout.write("\r\033[K")
287
+ sys.stdout.flush()
288
+ return None
289
+ if key == "enter":
290
+ sys.stdout.write("\n")
291
+ sys.stdout.flush()
292
+ return "".join(buf)
293
+ if key == "backspace":
294
+ if buf:
295
+ buf.pop()
296
+ sys.stdout.write("\b \b")
297
+ sys.stdout.flush()
298
+ continue
299
+ if len(key) == 1 and key.isprintable():
300
+ buf.append(key)
301
+ sys.stdout.write(key)
302
+ sys.stdout.flush()
303
+
304
+
268
305
  def wait_for_back(prompt_text: str = "") -> None:
269
306
  """等待使用者按 Enter、← 或 q 返回。支援方向鍵。"""
270
307
  if prompt_text:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "e3cli"
7
- version = "0.8.4"
7
+ version = "0.8.6"
8
8
  description = "NYCU E3 Moodle automation CLI — sync courses, download materials, submit assignments."
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes