e3cli 0.4.1__tar.gz → 0.8.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 (274) hide show
  1. e3cli-0.8.4/.github/workflows/release.yml +170 -0
  2. e3cli-0.8.4/CLAUDE.md +113 -0
  3. e3cli-0.8.4/COMMIT_EDITMSG +1 -0
  4. e3cli-0.8.4/HEAD +1 -0
  5. e3cli-0.8.4/PKG-INFO +512 -0
  6. e3cli-0.8.4/README.md +478 -0
  7. e3cli-0.8.4/README_zh-TW.md +478 -0
  8. e3cli-0.8.4/config +16 -0
  9. e3cli-0.8.4/description +1 -0
  10. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/__init__.py +1 -1
  11. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/assignments.py +17 -0
  12. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/client.py +2 -2
  13. e3cli-0.8.4/e3cli/api/forums.py +44 -0
  14. e3cli-0.8.4/e3cli/api/members.py +22 -0
  15. e3cli-0.8.4/e3cli/api/messages.py +31 -0
  16. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/auth.py +13 -3
  17. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/cli.py +12 -2
  18. e3cli-0.8.4/e3cli/commands/announcements.py +121 -0
  19. e3cli-0.8.4/e3cli/commands/assignments.py +159 -0
  20. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/download.py +2 -0
  21. e3cli-0.8.4/e3cli/commands/interactive.py +1469 -0
  22. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/login.py +27 -10
  23. e3cli-0.8.4/e3cli/commands/members.py +72 -0
  24. e3cli-0.8.4/e3cli/commands/message.py +65 -0
  25. e3cli-0.8.4/e3cli/commands/profile.py +69 -0
  26. e3cli-0.8.4/e3cli/commands/setup.py +310 -0
  27. e3cli-0.8.4/e3cli/commands/skill.py +185 -0
  28. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/sync.py +2 -0
  29. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/config.py +16 -3
  30. e3cli-0.8.4/e3cli/credential.py +307 -0
  31. e3cli-0.8.4/e3cli/formatting.py +113 -0
  32. e3cli-0.8.4/e3cli/http.py +166 -0
  33. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/i18n.py +112 -0
  34. e3cli-0.8.4/e3cli/semester.py +174 -0
  35. e3cli-0.8.4/e3cli/skills/e3cli/SKILL.md +102 -0
  36. e3cli-0.8.4/e3cli/tui_menu.py +307 -0
  37. e3cli-0.8.4/gk/config +3 -0
  38. e3cli-0.8.4/hooks/applypatch-msg.sample +15 -0
  39. e3cli-0.8.4/hooks/commit-msg.sample +24 -0
  40. e3cli-0.8.4/hooks/fsmonitor-watchman.sample +174 -0
  41. e3cli-0.8.4/hooks/post-update.sample +8 -0
  42. e3cli-0.8.4/hooks/pre-applypatch.sample +14 -0
  43. e3cli-0.8.4/hooks/pre-commit.sample +49 -0
  44. e3cli-0.8.4/hooks/pre-merge-commit.sample +13 -0
  45. e3cli-0.8.4/hooks/pre-push.sample +53 -0
  46. e3cli-0.8.4/hooks/pre-rebase.sample +169 -0
  47. e3cli-0.8.4/hooks/pre-receive.sample +24 -0
  48. e3cli-0.8.4/hooks/prepare-commit-msg.sample +42 -0
  49. e3cli-0.8.4/hooks/push-to-checkout.sample +78 -0
  50. e3cli-0.8.4/hooks/sendemail-validate.sample +77 -0
  51. e3cli-0.8.4/hooks/update.sample +128 -0
  52. e3cli-0.8.4/index +0 -0
  53. e3cli-0.8.4/info/exclude +6 -0
  54. e3cli-0.8.4/logs/HEAD +20 -0
  55. e3cli-0.8.4/logs/refs/heads/main +19 -0
  56. e3cli-0.8.4/logs/refs/remotes/origin/main +14 -0
  57. e3cli-0.8.4/objects/00/12f54a62a13459820d72b63eee8781d5cc0fae +0 -0
  58. e3cli-0.8.4/objects/00/373e054c653e54b45cacae42d71dff863626bf +2 -0
  59. e3cli-0.8.4/objects/04/9ee8e5968a9a80f0f1ac53d12141c61e7298ba +0 -0
  60. e3cli-0.8.4/objects/04/e0353337b6bb0c0ba43625456e9aaf13090a90 +0 -0
  61. e3cli-0.8.4/objects/05/0fec5da6aa35de1058b11671dfd6255b4d6b50 +0 -0
  62. e3cli-0.8.4/objects/06/5c820fc3efcd99754c56197a9c4e7142da710d +0 -0
  63. e3cli-0.8.4/objects/07/01890044580c4644114b781d474012b2fade80 +0 -0
  64. e3cli-0.8.4/objects/07/fb70ff1c509aad1f137a9255b9cb98733472a3 +0 -0
  65. e3cli-0.8.4/objects/0e/89da06e2d2273057dfa03705c42bbc57af1a6a +0 -0
  66. e3cli-0.8.4/objects/13/ad53a74b643378a7aebfe32d672b256ab73bef +0 -0
  67. e3cli-0.8.4/objects/13/fb66226ef7de52c039b1030460c5bb9ad1d576 +0 -0
  68. e3cli-0.8.4/objects/14/f44dcbbf53914d2d2b5b5a43453932fb0c6dd6 +0 -0
  69. e3cli-0.8.4/objects/15/6da5879f795abd72f645bbcadf18a4928a7502 +3 -0
  70. e3cli-0.8.4/objects/19/f9906c2882926f53e77b4be8be579906954a69 +0 -0
  71. e3cli-0.8.4/objects/1a/3f91d11c7c9c764fcd1ed01a4a0c3f13b68fee +0 -0
  72. e3cli-0.8.4/objects/1c/1765c4b372bd085c6224472de72f66e8d9fbe9 +1 -0
  73. e3cli-0.8.4/objects/22/e1020c805f3235c5c85d711a45d70d42883de0 +0 -0
  74. e3cli-0.8.4/objects/24/7f60ac43c8a065926f3228575a34d0ecd6f93d +0 -0
  75. e3cli-0.8.4/objects/25/4d6ec800e32759015479a68a3afd096ee12680 +2 -0
  76. e3cli-0.8.4/objects/27/1aee134d84254ba525ce728b3ecbbcbd73fe97 +0 -0
  77. e3cli-0.8.4/objects/27/41f5e19bf92e37c983e7d4d307ec09726b95ed +0 -0
  78. e3cli-0.8.4/objects/28/265727a791db9daef09c85ab159ef799908dc4 +1 -0
  79. e3cli-0.8.4/objects/2d/4c64fc2752b1356569f24e6f3d53cfd8ff3236 +0 -0
  80. e3cli-0.8.4/objects/31/61734dcf7d8b86372753c2552746641969ca7a +0 -0
  81. e3cli-0.8.4/objects/33/3da47d4f7d08fc2836374614b902a27f1a7638 +0 -0
  82. e3cli-0.8.4/objects/35/25cb5144ca2d643d918824df0f08042f8f1f19 +0 -0
  83. e3cli-0.8.4/objects/35/faf439f5e7e6730398397e0988c874ec74c15e +0 -0
  84. e3cli-0.8.4/objects/37/2acc5a62b5a8a7cd97d3eb07614d2a71d65c34 +0 -0
  85. e3cli-0.8.4/objects/37/f0c29518b9df6cde4d0cd7857d95b425fcaec9 +0 -0
  86. e3cli-0.8.4/objects/38/8bc96a53da22ddf8d3684c10480a9ed89274a6 +0 -0
  87. e3cli-0.8.4/objects/38/d062de47938882cc8c951cfcd18266bfa834d0 +0 -0
  88. e3cli-0.8.4/objects/39/bbbcd0ade10f3066a853cca53ad5159ac78e30 +0 -0
  89. e3cli-0.8.4/objects/3c/dd09e594d5716969279d6e3fcf99fca00f8504 +0 -0
  90. e3cli-0.8.4/objects/3e/71c91d71be5667a313ecfae444718750b2bf55 +0 -0
  91. e3cli-0.8.4/objects/3e/7febbe12d705885c2503c3e0d785e488f60966 +0 -0
  92. e3cli-0.8.4/objects/3f/0235e32813f74985f0363e64a110093d979e2f +1 -0
  93. e3cli-0.8.4/objects/40/9ded4237099e6e52de508dd46ebe74cf769e79 +0 -0
  94. e3cli-0.8.4/objects/41/88bc8a7a0569fd47efb215aad2e3f4a7b7e188 +0 -0
  95. e3cli-0.8.4/objects/42/53425dbc4368909b4b782fd53360537d3d9033 +0 -0
  96. e3cli-0.8.4/objects/42/925cbdfef5b97f5ae199323a5545810207af09 +3 -0
  97. e3cli-0.8.4/objects/42/b238ab6f9c3c74cd23a14c094ad8eb1c66d52b +0 -0
  98. e3cli-0.8.4/objects/43/49874ad2cdacc9d50d6ba06df25765d077248a +0 -0
  99. e3cli-0.8.4/objects/43/cead7a00c7ef98e1d5c9c86e50a3ccde712277 +0 -0
  100. e3cli-0.8.4/objects/43/e88c1a0a115fc72390e7bcef8ce0a8328a4e05 +3 -0
  101. e3cli-0.8.4/objects/45/9c23839b54e81c741fd2b5241c2b164079fcc1 +0 -0
  102. e3cli-0.8.4/objects/47/d9fe1a890a3d711662f4f414aee1ea6ae92261 +0 -0
  103. e3cli-0.8.4/objects/49/da3d511c413f21dca0f072ad52b0aca2d3c167 +0 -0
  104. e3cli-0.8.4/objects/4f/1897fc4248a024fc88e51f53f9028f531318cc +3 -0
  105. e3cli-0.8.4/objects/50/f89469bbe802dad848dcfeb2a8e447d4cd5787 +0 -0
  106. e3cli-0.8.4/objects/51/7ac4b389a310399e096baab0af89f1e5de7b3b +0 -0
  107. e3cli-0.8.4/objects/52/61e3b09b4722a7003c53a643085ca69e0c7bbd +0 -0
  108. e3cli-0.8.4/objects/53/7671d097d835bda94f0460295ce1cf49eda99a +0 -0
  109. e3cli-0.8.4/objects/54/8d12b92b82f95dc93b4f069086d8214651593d +0 -0
  110. e3cli-0.8.4/objects/55/2cd273856516fd1a5e026ef23c9ffeb5a33876 +0 -0
  111. e3cli-0.8.4/objects/56/52f31ea165a3ace62d1394af754a8aac78aa9f +0 -0
  112. e3cli-0.8.4/objects/57/9c69b0b67ebff094514cec01f692e21ca5e965 +0 -0
  113. e3cli-0.8.4/objects/57/ddc6c8820bd8ec98845e7f5a29bf3302f0f481 +0 -0
  114. e3cli-0.8.4/objects/58/2fba780a9cb7a9f312bd21cf97f16bc5b347c3 +0 -0
  115. e3cli-0.8.4/objects/5c/6b70ca4f2f822429a97a84428580966d84ab3a +0 -0
  116. e3cli-0.8.4/objects/5e/c686a09ef712b11372e38d25c958b027b3f21f +0 -0
  117. e3cli-0.8.4/objects/5f/96e4a89ab06b40be8c45cd0d975bdc2f957064 +0 -0
  118. e3cli-0.8.4/objects/60/c9053920fd6a8cd64eb28d8df99bcc2d176d59 +0 -0
  119. e3cli-0.8.4/objects/62/1ab88d46df0f1b1015e250f4c8174729629400 +1 -0
  120. e3cli-0.8.4/objects/62/5d72f7372bae8ab3ccc056e829c277c0705d1b +0 -0
  121. e3cli-0.8.4/objects/64/1ee83ac5a80cc7ae2e5f036db6329eacd03deb +0 -0
  122. e3cli-0.8.4/objects/65/011e04aeddd4c893a7a64b7ef745e9ad1af3c3 +0 -0
  123. e3cli-0.8.4/objects/66/b5f21689d122c08ee3b98d35f3de096addcfcc +0 -0
  124. e3cli-0.8.4/objects/69/89864c6313789a85608f01eda8976e1215bd31 +0 -0
  125. e3cli-0.8.4/objects/69/db255149b01f9ab01b48138fbb0f2d9b8b1acd +0 -0
  126. e3cli-0.8.4/objects/6a/597477c08142472e4a0559811e459ae7b127fc +0 -0
  127. e3cli-0.8.4/objects/6a/5e5e8ca97f2dec142b2ba15ed97a8493c16a54 +0 -0
  128. e3cli-0.8.4/objects/6b/d7a53ed2c5cd4c0e97267b70fff1dd461b60b7 +0 -0
  129. e3cli-0.8.4/objects/6d/05c5aaad4ff44578bbc46b5f7fc96f0d114e04 +0 -0
  130. e3cli-0.8.4/objects/6d/5c36f68694ad597a4deeba39e56e561ba72f2f +0 -0
  131. e3cli-0.8.4/objects/6e/3f7883a133ec8310cf8ad07cba6aead4583ff9 +0 -0
  132. e3cli-0.8.4/objects/6f/15710e7621abc864dabb788c5dfcab181e4551 +0 -0
  133. e3cli-0.8.4/objects/71/6894eaf5165344374d82dda25e82eff5fce119 +0 -0
  134. e3cli-0.8.4/objects/71/ca2fc16d0959c7465d57077a260156674274ba +0 -0
  135. e3cli-0.8.4/objects/74/0db02cd55f69b9f21f49a359fc14c15ad7f8ce +0 -0
  136. e3cli-0.8.4/objects/76/37fd54a47bfbdf2eed4827b78dff6019b87e57 +0 -0
  137. e3cli-0.8.4/objects/79/15535a493620715580f5d0ce8c2481172d44bd +4 -0
  138. e3cli-0.8.4/objects/7b/ad63d2dd7dab6c33f73a31bd359129523ac5ce +0 -0
  139. e3cli-0.8.4/objects/7c/95c6bec18763286e0100ebc4fbef71df48b0ae +0 -0
  140. e3cli-0.8.4/objects/7f/a3240ccd3661f7786bd269a0b0875cd9037b4b +0 -0
  141. e3cli-0.8.4/objects/82/8511321c72b509d8b39d3a392014e2748036ad +0 -0
  142. e3cli-0.8.4/objects/84/3e8bf8d7bf26780eb4c44f0e1733dae7df37da +0 -0
  143. e3cli-0.8.4/objects/84/45dbe199e0d8e83aa85b04f68c4b4e97764c46 +0 -0
  144. e3cli-0.8.4/objects/85/58de1a164b671ae0c5e9867140f4d105b26c71 +0 -0
  145. e3cli-0.8.4/objects/85/bfef5de75cdd3313dea22060cd9f22bf6f611c +0 -0
  146. e3cli-0.8.4/objects/87/075d1b2ca01520a54b6e2053d2b07e30ff550e +0 -0
  147. e3cli-0.8.4/objects/8a/2f2b74b3a7f9b0f2969ff455d1b5a149189522 +0 -0
  148. e3cli-0.8.4/objects/8b/da82680cf77bd85ef26d162f09df5b555c4817 +0 -0
  149. e3cli-0.8.4/objects/8b/f368e49da5649603590fd2ad157fb423f91240 +0 -0
  150. e3cli-0.8.4/objects/8c/988f80dcde632bee9389cb52d7c2639e358676 +6 -0
  151. e3cli-0.8.4/objects/8d/9cc78f614e082762dfd1af4d90b83e97509ba4 +0 -0
  152. e3cli-0.8.4/objects/91/b7e6699fcf2d3d87bc9209c30743851b95937e +0 -0
  153. e3cli-0.8.4/objects/97/6c6c60bcbbfe1b2ea7dc08631420753e2a2c55 +0 -0
  154. e3cli-0.8.4/objects/98/414112321df2d4fef51640978555b7b0a10740 +1 -0
  155. e3cli-0.8.4/objects/98/5dbb79e4f3157ba4a5b967ca1f045087fe718c +0 -0
  156. e3cli-0.8.4/objects/9b/8451b0fde38dfc5250c52aab3ef3fd30ef616d +0 -0
  157. e3cli-0.8.4/objects/9d/04ed7e9c2fdc16eadb72867c45c682d0661d8e +0 -0
  158. e3cli-0.8.4/objects/9d/1dcfdaf1a6857c5f83dc27019c7600e1ffaff8 +0 -0
  159. e3cli-0.8.4/objects/9e/9190183a3e710fd6a3caabafda0395aacc4907 +0 -0
  160. e3cli-0.8.4/objects/a4/9ab06df8e92e9921f006c4687a8119a41f140c +0 -0
  161. e3cli-0.8.4/objects/a4/9e182d79178f30917cb9d5d007bf4ad4354efc +0 -0
  162. e3cli-0.8.4/objects/a5/374e27f1f437b7b8d795bdbba9990e1b33ac4a +0 -0
  163. e3cli-0.8.4/objects/a9/621b26eb6fcf44e82b8f40fe15a08db273ea94 +0 -0
  164. e3cli-0.8.4/objects/a9/958ca6bbbce4793eb63dfc75053f6f2c468f7d +0 -0
  165. e3cli-0.8.4/objects/ab/8112dc0e039a6764e18515bc8b9d25bf8cba72 +0 -0
  166. e3cli-0.8.4/objects/ad/86572a7a3d9c41b39f68c1509f45eeb3c47145 +0 -0
  167. e3cli-0.8.4/objects/ae/7c0c0693884ee9968bd46c7e3c1c4801c93f07 +0 -0
  168. e3cli-0.8.4/objects/af/66d7ee37e22b5b4ffcb43392bcd6fe58b7189b +2 -0
  169. e3cli-0.8.4/objects/b0/1eb7d29ce867088dcfec990e3a118ee7d3a3b2 +0 -0
  170. e3cli-0.8.4/objects/b0/6bfa35440cb0bf33a698db8b116077b885dade +0 -0
  171. e3cli-0.8.4/objects/b2/30e20e02ded29d01eb93f89b62ab47fb378e1f +0 -0
  172. e3cli-0.8.4/objects/b2/e68381120a59886f7999876775e9b3dfeaa550 +0 -0
  173. e3cli-0.8.4/objects/b3/a239ea6bac51a6315988af95d83e86323aa461 +0 -0
  174. e3cli-0.8.4/objects/b4/1e24e40f90ad6c12b6f840ecdb133b2749ca7e +0 -0
  175. e3cli-0.8.4/objects/b9/4bb6724a0646fb1636a66de603cec15e7dfa3e +0 -0
  176. e3cli-0.8.4/objects/bb/8fccf2b545f4ba46149fb07bd1f700ae7bcc87 +2 -0
  177. e3cli-0.8.4/objects/be/9fc276a620ea29d87e2001489e436f6e714a34 +0 -0
  178. e3cli-0.8.4/objects/bf/a019fa30db2df7e7732d119032e84391c3b6ce +0 -0
  179. e3cli-0.8.4/objects/c0/2beae1cbe94f20d2a4ef88b46bd8ade684f911 +0 -0
  180. e3cli-0.8.4/objects/c6/1651ba7a27cd0ff5c726c4ce79751facc64f39 +0 -0
  181. e3cli-0.8.4/objects/c7/f3f6ba90a1ec28fdef6ec7b10d82f4ad144969 +0 -0
  182. e3cli-0.8.4/objects/cb/b097bc0ed0f65614e13f563a22624f0ce078e6 +0 -0
  183. e3cli-0.8.4/objects/cd/3c462e6a24c9757a0fffd7c42abce926e1adf5 +0 -0
  184. e3cli-0.8.4/objects/ce/f38215c9c7dc239421d85ca93221ad7beb63cb +2 -0
  185. e3cli-0.8.4/objects/cf/286c5bf7cffc4bf93b51554d4299845172df84 +0 -0
  186. e3cli-0.8.4/objects/d0/aa218f92135250fa46b8490c68f4e77846b1b1 +0 -0
  187. e3cli-0.8.4/objects/d1/70d82f10fffbce5936fc1d0f5e1f051c354413 +0 -0
  188. e3cli-0.8.4/objects/d1/eccedbd9604b59bcc247b6f8a177df5486ce57 +0 -0
  189. e3cli-0.8.4/objects/d4/1a891e54bfd7ddd745555624ce9142a47e5fdd +0 -0
  190. e3cli-0.8.4/objects/d8/2d02db21187a83d77a71c8665e1b4699e481fb +0 -0
  191. e3cli-0.8.4/objects/d8/76cc79a2f25f4e8616805811110f700e277af2 +0 -0
  192. e3cli-0.8.4/objects/db/3bb89cba087a88feb4075b467732846a1d0118 +0 -0
  193. e3cli-0.8.4/objects/db/dc7e591f97aab4da5d2acb29194355c277acf6 +2 -0
  194. e3cli-0.8.4/objects/df/8c39b5b6cfcf19f8f27d5913830cb0a8fcd4c8 +0 -0
  195. e3cli-0.8.4/objects/df/a8267b7bcb40cc3c4524934d386516e27dd5db +0 -0
  196. e3cli-0.8.4/objects/e0/87a95e8c14f5d090c04d19d3a9f91a208b7841 +0 -0
  197. e3cli-0.8.4/objects/e0/e63743c9660300f76483d3ad27ecd85241cdc5 +0 -0
  198. e3cli-0.8.4/objects/e2/2ab51073af126f1b602884b02dad11f9027942 +0 -0
  199. e3cli-0.8.4/objects/e4/1b4051ac3bac5364f7a5ce048ecc41147857d6 +0 -0
  200. e3cli-0.8.4/objects/e4/1dbd057baa81d4e660a52d2486ee700f8c7b60 +0 -0
  201. e3cli-0.8.4/objects/e4/fba2702e9b6e30902b10ef946b8e05ee14b3d6 +0 -0
  202. e3cli-0.8.4/objects/e5/23965887274b5a3060bca39ec005e6fe99883b +0 -0
  203. e3cli-0.8.4/objects/e6/3334965c2117237f22708d1c4681be5d77574b +0 -0
  204. e3cli-0.8.4/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  205. e3cli-0.8.4/objects/e8/a732d4490c14cf239dd7081c8c1d15b44c495b +0 -0
  206. e3cli-0.8.4/objects/eb/22d1e687a8a2dd36474c7add9535ebe9682d3b +0 -0
  207. e3cli-0.8.4/objects/eb/7320ad4e2f7d18b503c64b2a983c2a41fc8eb1 +0 -0
  208. e3cli-0.8.4/objects/ec/2badeec80e4ddc66a5168d8c3aec878a30f813 +0 -0
  209. e3cli-0.8.4/objects/ec/d43841d2e6e7268caf4a1bb03c3f549ca75f49 +0 -0
  210. e3cli-0.8.4/objects/f0/c3d899d1d7578174419e3d21fbb43d469ea0df +0 -0
  211. e3cli-0.8.4/objects/f2/d740d8021553398f98f1302398006e988697ef +0 -0
  212. e3cli-0.8.4/objects/f3/505619e9502b8a75ce04cf75ccb61e54f16cf5 +0 -0
  213. e3cli-0.8.4/objects/f3/681d2437d363e9865aec3eb4e3e8f5aff46ca6 +0 -0
  214. e3cli-0.8.4/objects/f3/b1f01d9f8fab935f87bee101fa0f1f944c30d8 +0 -0
  215. e3cli-0.8.4/objects/f3/e2082feab4cb9a889f623d8fe7b58628f82da9 +0 -0
  216. e3cli-0.8.4/objects/f4/21fa018addaacd7f59e11603b182b38207abca +2 -0
  217. e3cli-0.8.4/objects/f5/9e7ad7dad379a9752969e3443d3ed60a82cdf1 +0 -0
  218. e3cli-0.8.4/objects/f6/d28255ddf6cd98d69342c282663771093ad834 +0 -0
  219. e3cli-0.8.4/objects/f7/c7da26bbfca63ed8af08f9b7b1ace4930dad44 +0 -0
  220. e3cli-0.8.4/objects/f9/aece29cc134fc99f629129d46c712f015b00c0 +1 -0
  221. e3cli-0.8.4/objects/fb/4fbcdf3b0da9864651c5d50322b27c21f26fed +0 -0
  222. e3cli-0.8.4/objects/fb/ba70de6b161e2918d9d9e62d734abd85d01ae1 +2 -0
  223. e3cli-0.8.4/objects/fb/bc2db563e1d0b7a0745a04fd0a0c5b5ef7e6aa +0 -0
  224. e3cli-0.8.4/objects/fc/03924609632d9a9f820119bdf5a9ddf5a4c90a +0 -0
  225. e3cli-0.8.4/objects/fd/3fb430f4e9190752eb58cef5019660e9aa92ef +0 -0
  226. e3cli-0.8.4/objects/fd/d0e4feee582591e85b9d488dd4fa1794364abb +0 -0
  227. e3cli-0.8.4/objects/fe/092d97fe5a0e2a3d7b807e1a9f44735281a286 +0 -0
  228. {e3cli-0.4.1 → e3cli-0.8.4}/pyproject.toml +4 -1
  229. e3cli-0.8.4/refs/heads/main +1 -0
  230. e3cli-0.8.4/refs/remotes/origin/main +1 -0
  231. e3cli-0.8.4/refs/tags/v0.1.0 +1 -0
  232. e3cli-0.8.4/refs/tags/v0.2.0 +1 -0
  233. e3cli-0.8.4/refs/tags/v0.3.0 +1 -0
  234. e3cli-0.8.4/refs/tags/v0.3.1 +1 -0
  235. e3cli-0.8.4/refs/tags/v0.3.2 +1 -0
  236. e3cli-0.8.4/refs/tags/v0.4.0 +1 -0
  237. e3cli-0.8.4/refs/tags/v0.4.1 +1 -0
  238. e3cli-0.8.4/refs/tags/v0.4.3 +1 -0
  239. {e3cli-0.4.1 → e3cli-0.8.4}/tests/test_basic.py +4 -4
  240. e3cli-0.4.1/.github/workflows/release.yml +0 -117
  241. e3cli-0.4.1/CLAUDE.md +0 -41
  242. e3cli-0.4.1/PKG-INFO +0 -346
  243. e3cli-0.4.1/README.md +0 -312
  244. e3cli-0.4.1/README_zh-TW.md +0 -312
  245. e3cli-0.4.1/e3cli/commands/assignments.py +0 -91
  246. e3cli-0.4.1/e3cli/commands/interactive.py +0 -589
  247. e3cli-0.4.1/e3cli/commands/setup.py +0 -142
  248. e3cli-0.4.1/e3cli/credential.py +0 -116
  249. e3cli-0.4.1/e3cli/semester.py +0 -93
  250. {e3cli-0.4.1 → e3cli-0.8.4}/.github/workflows/ci.yml +0 -0
  251. {e3cli-0.4.1 → e3cli-0.8.4}/.gitignore +0 -0
  252. {e3cli-0.4.1 → e3cli-0.8.4}/Formula/e3cli.rb +0 -0
  253. {e3cli-0.4.1 → e3cli-0.8.4}/LICENSE +0 -0
  254. {e3cli-0.4.1 → e3cli-0.8.4}/Makefile +0 -0
  255. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/__main__.py +0 -0
  256. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/agent_prompt.md +0 -0
  257. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/ai/__init__.py +0 -0
  258. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/__init__.py +0 -0
  259. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/courses.py +0 -0
  260. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/files.py +0 -0
  261. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/site.py +0 -0
  262. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/__init__.py +0 -0
  263. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/_common.py +0 -0
  264. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/courses.py +0 -0
  265. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/logout.py +0 -0
  266. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/schedule.py +0 -0
  267. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/submit.py +0 -0
  268. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/scheduler/__init__.py +0 -0
  269. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/scheduler/cron.py +0 -0
  270. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/storage/__init__.py +0 -0
  271. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/storage/db.py +0 -0
  272. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/storage/models.py +0 -0
  273. {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/storage/tracking.py +0 -0
  274. {e3cli-0.4.1 → e3cli-0.8.4}/tests/__init__.py +0 -0
@@ -0,0 +1,170 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ permissions:
8
+ contents: write
9
+
10
+ jobs:
11
+ release:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - uses: actions/setup-python@v5
17
+ with:
18
+ python-version: "3.12"
19
+
20
+ - name: Install build tools
21
+ run: pip install build
22
+
23
+ - name: Build package
24
+ run: python -m build
25
+
26
+ - name: Create GitHub Release
27
+ uses: softprops/action-gh-release@v2
28
+ with:
29
+ files: dist/*
30
+ generate_release_notes: true
31
+
32
+ - name: Publish to PyPI
33
+ env:
34
+ TWINE_USERNAME: __token__
35
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
36
+ run: pip install twine && twine upload dist/*
37
+
38
+ update-homebrew:
39
+ needs: release
40
+ runs-on: ubuntu-latest
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+
44
+ - name: Calculate tarball sha256
45
+ id: sha
46
+ run: |
47
+ TARBALL_URL="https://github.com/${{ github.repository }}/archive/refs/tags/${{ github.ref_name }}.tar.gz"
48
+ echo "url=${TARBALL_URL}" >> "$GITHUB_OUTPUT"
49
+ SHA=$(curl -sL "${TARBALL_URL}" | sha256sum | cut -d' ' -f1)
50
+ echo "sha256=${SHA}" >> "$GITHUB_OUTPUT"
51
+ echo "Tarball: ${TARBALL_URL}"
52
+ echo "SHA256: ${SHA}"
53
+
54
+ - name: Clone homebrew tap
55
+ uses: actions/checkout@v4
56
+ with:
57
+ repository: ${{ github.repository_owner }}/homebrew-e3cli
58
+ token: ${{ secrets.TAP_GITHUB_TOKEN }}
59
+ path: homebrew-tap
60
+
61
+ - uses: actions/setup-python@v5
62
+ with:
63
+ python-version: "3.12"
64
+
65
+ - name: Generate formula with all transitive dependencies
66
+ run: |
67
+ python3 - "${{ github.repository }}" "${{ steps.sha.outputs.url }}" "${{ steps.sha.outputs.sha256 }}" << 'PYSCRIPT'
68
+ import json, re, sys, urllib.request
69
+
70
+ repo, tarball_url, tarball_sha = sys.argv[1], sys.argv[2], sys.argv[3]
71
+
72
+ def get_info(pkg):
73
+ pkg_normalized = re.sub(r'[-_.]+', '-', pkg).lower()
74
+ try:
75
+ data = json.loads(urllib.request.urlopen(f"https://pypi.org/pypi/{pkg_normalized}/json").read())
76
+ except Exception:
77
+ return None
78
+ ver = data["info"]["version"]
79
+ requires = data["info"].get("requires_dist") or []
80
+ deps = []
81
+ for r in requires:
82
+ if "extra ==" in r:
83
+ continue
84
+ # Extract package name (before any version specifier or marker)
85
+ m = re.match(r'^([A-Za-z0-9]([A-Za-z0-9._-]*[A-Za-z0-9])?)', r)
86
+ if m:
87
+ deps.append(m.group(1).lower())
88
+ sdist_url, sha = "", ""
89
+ for f in data["releases"].get(ver, []):
90
+ if f["packagetype"] == "sdist":
91
+ sdist_url, sha = f["url"], f["digests"]["sha256"]
92
+ break
93
+ return {"name": pkg_normalized, "deps": deps, "url": sdist_url, "sha256": sha}
94
+
95
+ # Resolve ALL transitive dependencies
96
+ seen = set()
97
+ queue = ["typer", "requests", "rich"]
98
+ resources = []
99
+
100
+ while queue:
101
+ pkg = queue.pop(0)
102
+ key = re.sub(r'[-_.]+', '_', pkg).lower()
103
+ if key in seen:
104
+ continue
105
+ seen.add(key)
106
+ info = get_info(pkg)
107
+ if info is None:
108
+ print(f"WARNING: Could not resolve {pkg}", file=sys.stderr)
109
+ continue
110
+ if info["url"]:
111
+ resources.append(info)
112
+ for d in info["deps"]:
113
+ dk = re.sub(r'[-_.]+', '_', d).lower()
114
+ if dk not in seen:
115
+ queue.append(d)
116
+
117
+ # Build formula
118
+ lines = [
119
+ 'class E3cli < Formula',
120
+ ' include Language::Python::Virtualenv',
121
+ '',
122
+ ' desc "NYCU E3 Moodle automation CLI — sync courses, download materials, submit assignments"',
123
+ f' homepage "https://github.com/{repo}"',
124
+ f' url "{tarball_url}"',
125
+ f' sha256 "{tarball_sha}"',
126
+ ' license "MIT"',
127
+ '',
128
+ ' depends_on "python@3.12"',
129
+ ]
130
+
131
+ for r in resources:
132
+ lines += [
133
+ '',
134
+ f' resource "{r["name"]}" do',
135
+ f' url "{r["url"]}"',
136
+ f' sha256 "{r["sha256"]}"',
137
+ ' end',
138
+ ]
139
+
140
+ lines += [
141
+ '',
142
+ ' def install',
143
+ ' virtualenv_install_with_resources',
144
+ ' end',
145
+ '',
146
+ ' test do',
147
+ ' assert_match "e3cli", shell_output("#{bin}/e3cli version")',
148
+ ' end',
149
+ 'end',
150
+ '',
151
+ ]
152
+
153
+ formula = "\n".join(lines)
154
+ with open("homebrew-tap/Formula/e3cli.rb", "w") as f:
155
+ f.write(formula)
156
+
157
+ print("=== Generated formula ===")
158
+ print(formula)
159
+ print(f"\nTotal resources: {len(resources)}", file=sys.stderr)
160
+ PYSCRIPT
161
+
162
+ - name: Push updated formula
163
+ run: |
164
+ cd homebrew-tap
165
+ git config user.name "github-actions[bot]"
166
+ git config user.email "github-actions[bot]@users.noreply.github.com"
167
+ git add Formula/e3cli.rb
168
+ git diff --cached --quiet && echo "No changes" && exit 0
169
+ git commit -m "Update e3cli to ${{ github.ref_name }}"
170
+ git push
e3cli-0.8.4/CLAUDE.md ADDED
@@ -0,0 +1,113 @@
1
+ # E3CLI — Claude Code Integration
2
+
3
+ ## What is this?
4
+
5
+ e3cli is a CLI tool for Moodle platforms (default: NYCU E3). It can sync courses, download materials, check assignments, view announcements, list members, send messages, and submit homework.
6
+
7
+ ## Quick Reference
8
+
9
+ ```bash
10
+ # Sync current semester (materials + assignments)
11
+ e3cli sync
12
+
13
+ # List assignments (sorted by urgency, with submission status)
14
+ e3cli assignments
15
+
16
+ # Assignments due within 7 days
17
+ e3cli assignments --due-soon 7
18
+
19
+ # View full assignment description + attachments
20
+ e3cli assignments --detail <ASSIGNMENT_ID>
21
+
22
+ # List courses (current semester)
23
+ e3cli courses
24
+ e3cli courses --all # all semesters
25
+
26
+ # Download materials
27
+ e3cli download # current semester
28
+ e3cli download --course "OS" # specific course (fuzzy match)
29
+
30
+ # View announcements
31
+ e3cli announcements -c "OS"
32
+ e3cli announcements -c "OS" --detail <ID>
33
+
34
+ # List course members
35
+ e3cli members -c "OS"
36
+
37
+ # Send message to a user
38
+ e3cli message <USER_ID> "message text"
39
+
40
+ # Submit assignment
41
+ e3cli submit <ASSIGNMENT_ID> <FILE_PATH>
42
+
43
+ # Re-submit (overwrite) — same command, overwrites previous
44
+ e3cli submit <ASSIGNMENT_ID> <NEW_FILE_PATH>
45
+
46
+ # Profile management (multi-account, multi-school)
47
+ e3cli profile # list all profiles (with Moodle URL)
48
+ e3cli profile use <name> # switch profile (also switches Moodle URL)
49
+ e3cli profile remove <name> # remove a profile
50
+ e3cli login --profile <name> --url <moodle-url> --save # add profile for different school
51
+
52
+ # Interactive mode (arrow keys)
53
+ e3cli i
54
+
55
+ # Token expired?
56
+ e3cli login --refresh
57
+ ```
58
+
59
+ ## Workflow: When a New Assignment is Detected
60
+
61
+ 1. `e3cli sync` — pull latest materials and assignment status
62
+ 2. `e3cli assignments` — see what's new/urgent (sorted by deadline)
63
+ 3. `e3cli assignments --detail <ID>` — read the full description and check attachments
64
+ 4. Downloaded materials are in the download directory (check `e3cli sync` output for path)
65
+ 5. Work on the assignment
66
+ 6. `e3cli submit <ID> <file>` — submit when ready
67
+ 7. **Always confirm with the user before submitting**
68
+
69
+ ## Reading Assignment Details
70
+
71
+ ```bash
72
+ # Get assignment list with IDs
73
+ e3cli assignments
74
+
75
+ # Read full description (HTML converted to text)
76
+ e3cli assignments --detail 12345
77
+
78
+ # The output includes:
79
+ # - Full description text
80
+ # - Attachment list with URLs
81
+ # - Submission status
82
+ # - Due date
83
+ ```
84
+
85
+ ## Checking Course Materials
86
+
87
+ ```bash
88
+ # Download materials for a course
89
+ e3cli download --course "artificial intelligence"
90
+
91
+ # Materials are saved to the download directory
92
+ # The exact path is shown after download completes
93
+ ```
94
+
95
+ ## Important Rules
96
+
97
+ 1. **Never submit without user confirmation** — always ask before running `e3cli submit`
98
+ 2. **Academic integrity** — assist, don't replace the student's work
99
+ 3. **Check deadlines first** — prioritize urgent assignments
100
+ 4. **Token expiry** — if commands fail with auth errors, run `e3cli login --refresh`
101
+ 5. **Don't read credential files** — use CLI commands, not direct file access
102
+
103
+ ## Data Locations
104
+
105
+ | Path | Content |
106
+ |------|---------|
107
+ | Download directory | Course materials (shown in sync/download output) |
108
+ | `~/.e3cli/data/e3cli.db` | Local tracking database |
109
+ | `~/.e3cli/config.toml` | Configuration |
110
+
111
+ ## Full Agent Automation Guide
112
+
113
+ See `e3cli/agent_prompt.md` for the complete automation workflow.
@@ -0,0 +1 @@
1
+ release: v0.4.3
e3cli-0.8.4/HEAD ADDED
@@ -0,0 +1 @@
1
+ ref: refs/heads/main