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.
- e3cli-0.8.4/.github/workflows/release.yml +170 -0
- e3cli-0.8.4/CLAUDE.md +113 -0
- e3cli-0.8.4/COMMIT_EDITMSG +1 -0
- e3cli-0.8.4/HEAD +1 -0
- e3cli-0.8.4/PKG-INFO +512 -0
- e3cli-0.8.4/README.md +478 -0
- e3cli-0.8.4/README_zh-TW.md +478 -0
- e3cli-0.8.4/config +16 -0
- e3cli-0.8.4/description +1 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/__init__.py +1 -1
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/assignments.py +17 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/client.py +2 -2
- e3cli-0.8.4/e3cli/api/forums.py +44 -0
- e3cli-0.8.4/e3cli/api/members.py +22 -0
- e3cli-0.8.4/e3cli/api/messages.py +31 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/auth.py +13 -3
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/cli.py +12 -2
- e3cli-0.8.4/e3cli/commands/announcements.py +121 -0
- e3cli-0.8.4/e3cli/commands/assignments.py +159 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/download.py +2 -0
- e3cli-0.8.4/e3cli/commands/interactive.py +1469 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/login.py +27 -10
- e3cli-0.8.4/e3cli/commands/members.py +72 -0
- e3cli-0.8.4/e3cli/commands/message.py +65 -0
- e3cli-0.8.4/e3cli/commands/profile.py +69 -0
- e3cli-0.8.4/e3cli/commands/setup.py +310 -0
- e3cli-0.8.4/e3cli/commands/skill.py +185 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/sync.py +2 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/config.py +16 -3
- e3cli-0.8.4/e3cli/credential.py +307 -0
- e3cli-0.8.4/e3cli/formatting.py +113 -0
- e3cli-0.8.4/e3cli/http.py +166 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/i18n.py +112 -0
- e3cli-0.8.4/e3cli/semester.py +174 -0
- e3cli-0.8.4/e3cli/skills/e3cli/SKILL.md +102 -0
- e3cli-0.8.4/e3cli/tui_menu.py +307 -0
- e3cli-0.8.4/gk/config +3 -0
- e3cli-0.8.4/hooks/applypatch-msg.sample +15 -0
- e3cli-0.8.4/hooks/commit-msg.sample +24 -0
- e3cli-0.8.4/hooks/fsmonitor-watchman.sample +174 -0
- e3cli-0.8.4/hooks/post-update.sample +8 -0
- e3cli-0.8.4/hooks/pre-applypatch.sample +14 -0
- e3cli-0.8.4/hooks/pre-commit.sample +49 -0
- e3cli-0.8.4/hooks/pre-merge-commit.sample +13 -0
- e3cli-0.8.4/hooks/pre-push.sample +53 -0
- e3cli-0.8.4/hooks/pre-rebase.sample +169 -0
- e3cli-0.8.4/hooks/pre-receive.sample +24 -0
- e3cli-0.8.4/hooks/prepare-commit-msg.sample +42 -0
- e3cli-0.8.4/hooks/push-to-checkout.sample +78 -0
- e3cli-0.8.4/hooks/sendemail-validate.sample +77 -0
- e3cli-0.8.4/hooks/update.sample +128 -0
- e3cli-0.8.4/index +0 -0
- e3cli-0.8.4/info/exclude +6 -0
- e3cli-0.8.4/logs/HEAD +20 -0
- e3cli-0.8.4/logs/refs/heads/main +19 -0
- e3cli-0.8.4/logs/refs/remotes/origin/main +14 -0
- e3cli-0.8.4/objects/00/12f54a62a13459820d72b63eee8781d5cc0fae +0 -0
- e3cli-0.8.4/objects/00/373e054c653e54b45cacae42d71dff863626bf +2 -0
- e3cli-0.8.4/objects/04/9ee8e5968a9a80f0f1ac53d12141c61e7298ba +0 -0
- e3cli-0.8.4/objects/04/e0353337b6bb0c0ba43625456e9aaf13090a90 +0 -0
- e3cli-0.8.4/objects/05/0fec5da6aa35de1058b11671dfd6255b4d6b50 +0 -0
- e3cli-0.8.4/objects/06/5c820fc3efcd99754c56197a9c4e7142da710d +0 -0
- e3cli-0.8.4/objects/07/01890044580c4644114b781d474012b2fade80 +0 -0
- e3cli-0.8.4/objects/07/fb70ff1c509aad1f137a9255b9cb98733472a3 +0 -0
- e3cli-0.8.4/objects/0e/89da06e2d2273057dfa03705c42bbc57af1a6a +0 -0
- e3cli-0.8.4/objects/13/ad53a74b643378a7aebfe32d672b256ab73bef +0 -0
- e3cli-0.8.4/objects/13/fb66226ef7de52c039b1030460c5bb9ad1d576 +0 -0
- e3cli-0.8.4/objects/14/f44dcbbf53914d2d2b5b5a43453932fb0c6dd6 +0 -0
- e3cli-0.8.4/objects/15/6da5879f795abd72f645bbcadf18a4928a7502 +3 -0
- e3cli-0.8.4/objects/19/f9906c2882926f53e77b4be8be579906954a69 +0 -0
- e3cli-0.8.4/objects/1a/3f91d11c7c9c764fcd1ed01a4a0c3f13b68fee +0 -0
- e3cli-0.8.4/objects/1c/1765c4b372bd085c6224472de72f66e8d9fbe9 +1 -0
- e3cli-0.8.4/objects/22/e1020c805f3235c5c85d711a45d70d42883de0 +0 -0
- e3cli-0.8.4/objects/24/7f60ac43c8a065926f3228575a34d0ecd6f93d +0 -0
- e3cli-0.8.4/objects/25/4d6ec800e32759015479a68a3afd096ee12680 +2 -0
- e3cli-0.8.4/objects/27/1aee134d84254ba525ce728b3ecbbcbd73fe97 +0 -0
- e3cli-0.8.4/objects/27/41f5e19bf92e37c983e7d4d307ec09726b95ed +0 -0
- e3cli-0.8.4/objects/28/265727a791db9daef09c85ab159ef799908dc4 +1 -0
- e3cli-0.8.4/objects/2d/4c64fc2752b1356569f24e6f3d53cfd8ff3236 +0 -0
- e3cli-0.8.4/objects/31/61734dcf7d8b86372753c2552746641969ca7a +0 -0
- e3cli-0.8.4/objects/33/3da47d4f7d08fc2836374614b902a27f1a7638 +0 -0
- e3cli-0.8.4/objects/35/25cb5144ca2d643d918824df0f08042f8f1f19 +0 -0
- e3cli-0.8.4/objects/35/faf439f5e7e6730398397e0988c874ec74c15e +0 -0
- e3cli-0.8.4/objects/37/2acc5a62b5a8a7cd97d3eb07614d2a71d65c34 +0 -0
- e3cli-0.8.4/objects/37/f0c29518b9df6cde4d0cd7857d95b425fcaec9 +0 -0
- e3cli-0.8.4/objects/38/8bc96a53da22ddf8d3684c10480a9ed89274a6 +0 -0
- e3cli-0.8.4/objects/38/d062de47938882cc8c951cfcd18266bfa834d0 +0 -0
- e3cli-0.8.4/objects/39/bbbcd0ade10f3066a853cca53ad5159ac78e30 +0 -0
- e3cli-0.8.4/objects/3c/dd09e594d5716969279d6e3fcf99fca00f8504 +0 -0
- e3cli-0.8.4/objects/3e/71c91d71be5667a313ecfae444718750b2bf55 +0 -0
- e3cli-0.8.4/objects/3e/7febbe12d705885c2503c3e0d785e488f60966 +0 -0
- e3cli-0.8.4/objects/3f/0235e32813f74985f0363e64a110093d979e2f +1 -0
- e3cli-0.8.4/objects/40/9ded4237099e6e52de508dd46ebe74cf769e79 +0 -0
- e3cli-0.8.4/objects/41/88bc8a7a0569fd47efb215aad2e3f4a7b7e188 +0 -0
- e3cli-0.8.4/objects/42/53425dbc4368909b4b782fd53360537d3d9033 +0 -0
- e3cli-0.8.4/objects/42/925cbdfef5b97f5ae199323a5545810207af09 +3 -0
- e3cli-0.8.4/objects/42/b238ab6f9c3c74cd23a14c094ad8eb1c66d52b +0 -0
- e3cli-0.8.4/objects/43/49874ad2cdacc9d50d6ba06df25765d077248a +0 -0
- e3cli-0.8.4/objects/43/cead7a00c7ef98e1d5c9c86e50a3ccde712277 +0 -0
- e3cli-0.8.4/objects/43/e88c1a0a115fc72390e7bcef8ce0a8328a4e05 +3 -0
- e3cli-0.8.4/objects/45/9c23839b54e81c741fd2b5241c2b164079fcc1 +0 -0
- e3cli-0.8.4/objects/47/d9fe1a890a3d711662f4f414aee1ea6ae92261 +0 -0
- e3cli-0.8.4/objects/49/da3d511c413f21dca0f072ad52b0aca2d3c167 +0 -0
- e3cli-0.8.4/objects/4f/1897fc4248a024fc88e51f53f9028f531318cc +3 -0
- e3cli-0.8.4/objects/50/f89469bbe802dad848dcfeb2a8e447d4cd5787 +0 -0
- e3cli-0.8.4/objects/51/7ac4b389a310399e096baab0af89f1e5de7b3b +0 -0
- e3cli-0.8.4/objects/52/61e3b09b4722a7003c53a643085ca69e0c7bbd +0 -0
- e3cli-0.8.4/objects/53/7671d097d835bda94f0460295ce1cf49eda99a +0 -0
- e3cli-0.8.4/objects/54/8d12b92b82f95dc93b4f069086d8214651593d +0 -0
- e3cli-0.8.4/objects/55/2cd273856516fd1a5e026ef23c9ffeb5a33876 +0 -0
- e3cli-0.8.4/objects/56/52f31ea165a3ace62d1394af754a8aac78aa9f +0 -0
- e3cli-0.8.4/objects/57/9c69b0b67ebff094514cec01f692e21ca5e965 +0 -0
- e3cli-0.8.4/objects/57/ddc6c8820bd8ec98845e7f5a29bf3302f0f481 +0 -0
- e3cli-0.8.4/objects/58/2fba780a9cb7a9f312bd21cf97f16bc5b347c3 +0 -0
- e3cli-0.8.4/objects/5c/6b70ca4f2f822429a97a84428580966d84ab3a +0 -0
- e3cli-0.8.4/objects/5e/c686a09ef712b11372e38d25c958b027b3f21f +0 -0
- e3cli-0.8.4/objects/5f/96e4a89ab06b40be8c45cd0d975bdc2f957064 +0 -0
- e3cli-0.8.4/objects/60/c9053920fd6a8cd64eb28d8df99bcc2d176d59 +0 -0
- e3cli-0.8.4/objects/62/1ab88d46df0f1b1015e250f4c8174729629400 +1 -0
- e3cli-0.8.4/objects/62/5d72f7372bae8ab3ccc056e829c277c0705d1b +0 -0
- e3cli-0.8.4/objects/64/1ee83ac5a80cc7ae2e5f036db6329eacd03deb +0 -0
- e3cli-0.8.4/objects/65/011e04aeddd4c893a7a64b7ef745e9ad1af3c3 +0 -0
- e3cli-0.8.4/objects/66/b5f21689d122c08ee3b98d35f3de096addcfcc +0 -0
- e3cli-0.8.4/objects/69/89864c6313789a85608f01eda8976e1215bd31 +0 -0
- e3cli-0.8.4/objects/69/db255149b01f9ab01b48138fbb0f2d9b8b1acd +0 -0
- e3cli-0.8.4/objects/6a/597477c08142472e4a0559811e459ae7b127fc +0 -0
- e3cli-0.8.4/objects/6a/5e5e8ca97f2dec142b2ba15ed97a8493c16a54 +0 -0
- e3cli-0.8.4/objects/6b/d7a53ed2c5cd4c0e97267b70fff1dd461b60b7 +0 -0
- e3cli-0.8.4/objects/6d/05c5aaad4ff44578bbc46b5f7fc96f0d114e04 +0 -0
- e3cli-0.8.4/objects/6d/5c36f68694ad597a4deeba39e56e561ba72f2f +0 -0
- e3cli-0.8.4/objects/6e/3f7883a133ec8310cf8ad07cba6aead4583ff9 +0 -0
- e3cli-0.8.4/objects/6f/15710e7621abc864dabb788c5dfcab181e4551 +0 -0
- e3cli-0.8.4/objects/71/6894eaf5165344374d82dda25e82eff5fce119 +0 -0
- e3cli-0.8.4/objects/71/ca2fc16d0959c7465d57077a260156674274ba +0 -0
- e3cli-0.8.4/objects/74/0db02cd55f69b9f21f49a359fc14c15ad7f8ce +0 -0
- e3cli-0.8.4/objects/76/37fd54a47bfbdf2eed4827b78dff6019b87e57 +0 -0
- e3cli-0.8.4/objects/79/15535a493620715580f5d0ce8c2481172d44bd +4 -0
- e3cli-0.8.4/objects/7b/ad63d2dd7dab6c33f73a31bd359129523ac5ce +0 -0
- e3cli-0.8.4/objects/7c/95c6bec18763286e0100ebc4fbef71df48b0ae +0 -0
- e3cli-0.8.4/objects/7f/a3240ccd3661f7786bd269a0b0875cd9037b4b +0 -0
- e3cli-0.8.4/objects/82/8511321c72b509d8b39d3a392014e2748036ad +0 -0
- e3cli-0.8.4/objects/84/3e8bf8d7bf26780eb4c44f0e1733dae7df37da +0 -0
- e3cli-0.8.4/objects/84/45dbe199e0d8e83aa85b04f68c4b4e97764c46 +0 -0
- e3cli-0.8.4/objects/85/58de1a164b671ae0c5e9867140f4d105b26c71 +0 -0
- e3cli-0.8.4/objects/85/bfef5de75cdd3313dea22060cd9f22bf6f611c +0 -0
- e3cli-0.8.4/objects/87/075d1b2ca01520a54b6e2053d2b07e30ff550e +0 -0
- e3cli-0.8.4/objects/8a/2f2b74b3a7f9b0f2969ff455d1b5a149189522 +0 -0
- e3cli-0.8.4/objects/8b/da82680cf77bd85ef26d162f09df5b555c4817 +0 -0
- e3cli-0.8.4/objects/8b/f368e49da5649603590fd2ad157fb423f91240 +0 -0
- e3cli-0.8.4/objects/8c/988f80dcde632bee9389cb52d7c2639e358676 +6 -0
- e3cli-0.8.4/objects/8d/9cc78f614e082762dfd1af4d90b83e97509ba4 +0 -0
- e3cli-0.8.4/objects/91/b7e6699fcf2d3d87bc9209c30743851b95937e +0 -0
- e3cli-0.8.4/objects/97/6c6c60bcbbfe1b2ea7dc08631420753e2a2c55 +0 -0
- e3cli-0.8.4/objects/98/414112321df2d4fef51640978555b7b0a10740 +1 -0
- e3cli-0.8.4/objects/98/5dbb79e4f3157ba4a5b967ca1f045087fe718c +0 -0
- e3cli-0.8.4/objects/9b/8451b0fde38dfc5250c52aab3ef3fd30ef616d +0 -0
- e3cli-0.8.4/objects/9d/04ed7e9c2fdc16eadb72867c45c682d0661d8e +0 -0
- e3cli-0.8.4/objects/9d/1dcfdaf1a6857c5f83dc27019c7600e1ffaff8 +0 -0
- e3cli-0.8.4/objects/9e/9190183a3e710fd6a3caabafda0395aacc4907 +0 -0
- e3cli-0.8.4/objects/a4/9ab06df8e92e9921f006c4687a8119a41f140c +0 -0
- e3cli-0.8.4/objects/a4/9e182d79178f30917cb9d5d007bf4ad4354efc +0 -0
- e3cli-0.8.4/objects/a5/374e27f1f437b7b8d795bdbba9990e1b33ac4a +0 -0
- e3cli-0.8.4/objects/a9/621b26eb6fcf44e82b8f40fe15a08db273ea94 +0 -0
- e3cli-0.8.4/objects/a9/958ca6bbbce4793eb63dfc75053f6f2c468f7d +0 -0
- e3cli-0.8.4/objects/ab/8112dc0e039a6764e18515bc8b9d25bf8cba72 +0 -0
- e3cli-0.8.4/objects/ad/86572a7a3d9c41b39f68c1509f45eeb3c47145 +0 -0
- e3cli-0.8.4/objects/ae/7c0c0693884ee9968bd46c7e3c1c4801c93f07 +0 -0
- e3cli-0.8.4/objects/af/66d7ee37e22b5b4ffcb43392bcd6fe58b7189b +2 -0
- e3cli-0.8.4/objects/b0/1eb7d29ce867088dcfec990e3a118ee7d3a3b2 +0 -0
- e3cli-0.8.4/objects/b0/6bfa35440cb0bf33a698db8b116077b885dade +0 -0
- e3cli-0.8.4/objects/b2/30e20e02ded29d01eb93f89b62ab47fb378e1f +0 -0
- e3cli-0.8.4/objects/b2/e68381120a59886f7999876775e9b3dfeaa550 +0 -0
- e3cli-0.8.4/objects/b3/a239ea6bac51a6315988af95d83e86323aa461 +0 -0
- e3cli-0.8.4/objects/b4/1e24e40f90ad6c12b6f840ecdb133b2749ca7e +0 -0
- e3cli-0.8.4/objects/b9/4bb6724a0646fb1636a66de603cec15e7dfa3e +0 -0
- e3cli-0.8.4/objects/bb/8fccf2b545f4ba46149fb07bd1f700ae7bcc87 +2 -0
- e3cli-0.8.4/objects/be/9fc276a620ea29d87e2001489e436f6e714a34 +0 -0
- e3cli-0.8.4/objects/bf/a019fa30db2df7e7732d119032e84391c3b6ce +0 -0
- e3cli-0.8.4/objects/c0/2beae1cbe94f20d2a4ef88b46bd8ade684f911 +0 -0
- e3cli-0.8.4/objects/c6/1651ba7a27cd0ff5c726c4ce79751facc64f39 +0 -0
- e3cli-0.8.4/objects/c7/f3f6ba90a1ec28fdef6ec7b10d82f4ad144969 +0 -0
- e3cli-0.8.4/objects/cb/b097bc0ed0f65614e13f563a22624f0ce078e6 +0 -0
- e3cli-0.8.4/objects/cd/3c462e6a24c9757a0fffd7c42abce926e1adf5 +0 -0
- e3cli-0.8.4/objects/ce/f38215c9c7dc239421d85ca93221ad7beb63cb +2 -0
- e3cli-0.8.4/objects/cf/286c5bf7cffc4bf93b51554d4299845172df84 +0 -0
- e3cli-0.8.4/objects/d0/aa218f92135250fa46b8490c68f4e77846b1b1 +0 -0
- e3cli-0.8.4/objects/d1/70d82f10fffbce5936fc1d0f5e1f051c354413 +0 -0
- e3cli-0.8.4/objects/d1/eccedbd9604b59bcc247b6f8a177df5486ce57 +0 -0
- e3cli-0.8.4/objects/d4/1a891e54bfd7ddd745555624ce9142a47e5fdd +0 -0
- e3cli-0.8.4/objects/d8/2d02db21187a83d77a71c8665e1b4699e481fb +0 -0
- e3cli-0.8.4/objects/d8/76cc79a2f25f4e8616805811110f700e277af2 +0 -0
- e3cli-0.8.4/objects/db/3bb89cba087a88feb4075b467732846a1d0118 +0 -0
- e3cli-0.8.4/objects/db/dc7e591f97aab4da5d2acb29194355c277acf6 +2 -0
- e3cli-0.8.4/objects/df/8c39b5b6cfcf19f8f27d5913830cb0a8fcd4c8 +0 -0
- e3cli-0.8.4/objects/df/a8267b7bcb40cc3c4524934d386516e27dd5db +0 -0
- e3cli-0.8.4/objects/e0/87a95e8c14f5d090c04d19d3a9f91a208b7841 +0 -0
- e3cli-0.8.4/objects/e0/e63743c9660300f76483d3ad27ecd85241cdc5 +0 -0
- e3cli-0.8.4/objects/e2/2ab51073af126f1b602884b02dad11f9027942 +0 -0
- e3cli-0.8.4/objects/e4/1b4051ac3bac5364f7a5ce048ecc41147857d6 +0 -0
- e3cli-0.8.4/objects/e4/1dbd057baa81d4e660a52d2486ee700f8c7b60 +0 -0
- e3cli-0.8.4/objects/e4/fba2702e9b6e30902b10ef946b8e05ee14b3d6 +0 -0
- e3cli-0.8.4/objects/e5/23965887274b5a3060bca39ec005e6fe99883b +0 -0
- e3cli-0.8.4/objects/e6/3334965c2117237f22708d1c4681be5d77574b +0 -0
- e3cli-0.8.4/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
- e3cli-0.8.4/objects/e8/a732d4490c14cf239dd7081c8c1d15b44c495b +0 -0
- e3cli-0.8.4/objects/eb/22d1e687a8a2dd36474c7add9535ebe9682d3b +0 -0
- e3cli-0.8.4/objects/eb/7320ad4e2f7d18b503c64b2a983c2a41fc8eb1 +0 -0
- e3cli-0.8.4/objects/ec/2badeec80e4ddc66a5168d8c3aec878a30f813 +0 -0
- e3cli-0.8.4/objects/ec/d43841d2e6e7268caf4a1bb03c3f549ca75f49 +0 -0
- e3cli-0.8.4/objects/f0/c3d899d1d7578174419e3d21fbb43d469ea0df +0 -0
- e3cli-0.8.4/objects/f2/d740d8021553398f98f1302398006e988697ef +0 -0
- e3cli-0.8.4/objects/f3/505619e9502b8a75ce04cf75ccb61e54f16cf5 +0 -0
- e3cli-0.8.4/objects/f3/681d2437d363e9865aec3eb4e3e8f5aff46ca6 +0 -0
- e3cli-0.8.4/objects/f3/b1f01d9f8fab935f87bee101fa0f1f944c30d8 +0 -0
- e3cli-0.8.4/objects/f3/e2082feab4cb9a889f623d8fe7b58628f82da9 +0 -0
- e3cli-0.8.4/objects/f4/21fa018addaacd7f59e11603b182b38207abca +2 -0
- e3cli-0.8.4/objects/f5/9e7ad7dad379a9752969e3443d3ed60a82cdf1 +0 -0
- e3cli-0.8.4/objects/f6/d28255ddf6cd98d69342c282663771093ad834 +0 -0
- e3cli-0.8.4/objects/f7/c7da26bbfca63ed8af08f9b7b1ace4930dad44 +0 -0
- e3cli-0.8.4/objects/f9/aece29cc134fc99f629129d46c712f015b00c0 +1 -0
- e3cli-0.8.4/objects/fb/4fbcdf3b0da9864651c5d50322b27c21f26fed +0 -0
- e3cli-0.8.4/objects/fb/ba70de6b161e2918d9d9e62d734abd85d01ae1 +2 -0
- e3cli-0.8.4/objects/fb/bc2db563e1d0b7a0745a04fd0a0c5b5ef7e6aa +0 -0
- e3cli-0.8.4/objects/fc/03924609632d9a9f820119bdf5a9ddf5a4c90a +0 -0
- e3cli-0.8.4/objects/fd/3fb430f4e9190752eb58cef5019660e9aa92ef +0 -0
- e3cli-0.8.4/objects/fd/d0e4feee582591e85b9d488dd4fa1794364abb +0 -0
- e3cli-0.8.4/objects/fe/092d97fe5a0e2a3d7b807e1a9f44735281a286 +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/pyproject.toml +4 -1
- e3cli-0.8.4/refs/heads/main +1 -0
- e3cli-0.8.4/refs/remotes/origin/main +1 -0
- e3cli-0.8.4/refs/tags/v0.1.0 +1 -0
- e3cli-0.8.4/refs/tags/v0.2.0 +1 -0
- e3cli-0.8.4/refs/tags/v0.3.0 +1 -0
- e3cli-0.8.4/refs/tags/v0.3.1 +1 -0
- e3cli-0.8.4/refs/tags/v0.3.2 +1 -0
- e3cli-0.8.4/refs/tags/v0.4.0 +1 -0
- e3cli-0.8.4/refs/tags/v0.4.1 +1 -0
- e3cli-0.8.4/refs/tags/v0.4.3 +1 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/tests/test_basic.py +4 -4
- e3cli-0.4.1/.github/workflows/release.yml +0 -117
- e3cli-0.4.1/CLAUDE.md +0 -41
- e3cli-0.4.1/PKG-INFO +0 -346
- e3cli-0.4.1/README.md +0 -312
- e3cli-0.4.1/README_zh-TW.md +0 -312
- e3cli-0.4.1/e3cli/commands/assignments.py +0 -91
- e3cli-0.4.1/e3cli/commands/interactive.py +0 -589
- e3cli-0.4.1/e3cli/commands/setup.py +0 -142
- e3cli-0.4.1/e3cli/credential.py +0 -116
- e3cli-0.4.1/e3cli/semester.py +0 -93
- {e3cli-0.4.1 → e3cli-0.8.4}/.github/workflows/ci.yml +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/.gitignore +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/Formula/e3cli.rb +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/LICENSE +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/Makefile +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/__main__.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/agent_prompt.md +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/ai/__init__.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/__init__.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/courses.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/files.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/api/site.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/__init__.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/_common.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/courses.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/logout.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/schedule.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/commands/submit.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/scheduler/__init__.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/scheduler/cron.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/storage/__init__.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/storage/db.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/storage/models.py +0 -0
- {e3cli-0.4.1 → e3cli-0.8.4}/e3cli/storage/tracking.py +0 -0
- {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
|