From 4643ec818d6d637f2f2a7716050b618478f7b546 Mon Sep 17 00:00:00 2001 From: badhope Date: Wed, 17 Jun 2026 12:27:43 +0000 Subject: [PATCH] chore: untrack Python build artifacts & update .gitignore Remove accidentally committed backend artifacts from tracking: - __pycache__/*.pyc (27 files) - ai_dev_assistant.egg-info/ (5 files) - backend/logs/app.log - backend/data/assistant.db Add Python ignore rules to .gitignore so they stay local-only. Files are kept on disk (--cached), only untracked from git. --- .gitignore | 16 ++ backend/ai_dev_assistant.egg-info/PKG-INFO | 22 -- backend/ai_dev_assistant.egg-info/SOURCES.txt | 33 --- .../dependency_links.txt | 1 - .../ai_dev_assistant.egg-info/requires.txt | 18 -- .../ai_dev_assistant.egg-info/top_level.txt | 1 - .../app/__pycache__/__init__.cpython-314.pyc | Bin 172 -> 0 bytes .../app/__pycache__/config.cpython-314.pyc | Bin 2081 -> 0 bytes .../app/__pycache__/database.cpython-314.pyc | Bin 2118 -> 0 bytes backend/app/__pycache__/main.cpython-314.pyc | Bin 2088 -> 0 bytes .../app/api/__pycache__/files.cpython-314.pyc | Bin 8057 -> 0 bytes .../app/api/__pycache__/git.cpython-314.pyc | Bin 7327 -> 0 bytes .../core/__pycache__/__init__.cpython-314.pyc | Bin 180 -> 0 bytes .../core/__pycache__/context.cpython-314.pyc | Bin 3527 -> 0 bytes .../file_organizer.cpython-314.pyc | Bin 9348 -> 0 bytes .../__pycache__/git_manager.cpython-314.pyc | Bin 11317 -> 0 bytes .../app/core/__pycache__/llm.cpython-314.pyc | Bin 6987 -> 0 bytes .../__pycache__/__init__.cpython-314.pyc | Bin 343 -> 0 bytes .../models/__pycache__/file.cpython-314.pyc | Bin 3383 -> 0 bytes .../__pycache__/operation.cpython-314.pyc | Bin 2536 -> 0 bytes .../__pycache__/project.cpython-314.pyc | Bin 2890 -> 0 bytes .../__pycache__/__init__.cpython-314.pyc | Bin 177 -> 0 bytes .../__pycache__/hookspecs.cpython-314.pyc | Bin 2907 -> 0 bytes .../__pycache__/manager.cpython-314.pyc | Bin 5716 -> 0 bytes .../__pycache__/__init__.cpython-314.pyc | Bin 175 -> 0 bytes .../utils/__pycache__/logger.cpython-314.pyc | Bin 2356 -> 0 bytes .../__pycache__/validator.cpython-314.pyc | Bin 3586 -> 0 bytes backend/data/assistant.db | 0 backend/logs/app.log | 226 ------------------ ...ile_organizer.cpython-314-pytest-9.0.3.pyc | Bin 53295 -> 0 bytes .../test_git.cpython-314-pytest-9.0.3.pyc | Bin 23547 -> 0 bytes .../test_llm.cpython-314-pytest-9.0.3.pyc | Bin 13385 -> 0 bytes .../test_plugins.cpython-314-pytest-9.0.3.pyc | Bin 17278 -> 0 bytes .../__pycache__/__init__.cpython-314.pyc | Bin 183 -> 0 bytes .../test_api.cpython-314-pytest-9.0.3.pyc | Bin 14193 -> 0 bytes 35 files changed, 16 insertions(+), 301 deletions(-) delete mode 100644 backend/ai_dev_assistant.egg-info/PKG-INFO delete mode 100644 backend/ai_dev_assistant.egg-info/SOURCES.txt delete mode 100644 backend/ai_dev_assistant.egg-info/dependency_links.txt delete mode 100644 backend/ai_dev_assistant.egg-info/requires.txt delete mode 100644 backend/ai_dev_assistant.egg-info/top_level.txt delete mode 100644 backend/app/__pycache__/__init__.cpython-314.pyc delete mode 100644 backend/app/__pycache__/config.cpython-314.pyc delete mode 100644 backend/app/__pycache__/database.cpython-314.pyc delete mode 100644 backend/app/__pycache__/main.cpython-314.pyc delete mode 100644 backend/app/api/__pycache__/files.cpython-314.pyc delete mode 100644 backend/app/api/__pycache__/git.cpython-314.pyc delete mode 100644 backend/app/core/__pycache__/__init__.cpython-314.pyc delete mode 100644 backend/app/core/__pycache__/context.cpython-314.pyc delete mode 100644 backend/app/core/__pycache__/file_organizer.cpython-314.pyc delete mode 100644 backend/app/core/__pycache__/git_manager.cpython-314.pyc delete mode 100644 backend/app/core/__pycache__/llm.cpython-314.pyc delete mode 100644 backend/app/models/__pycache__/__init__.cpython-314.pyc delete mode 100644 backend/app/models/__pycache__/file.cpython-314.pyc delete mode 100644 backend/app/models/__pycache__/operation.cpython-314.pyc delete mode 100644 backend/app/models/__pycache__/project.cpython-314.pyc delete mode 100644 backend/app/plugins/__pycache__/__init__.cpython-314.pyc delete mode 100644 backend/app/plugins/__pycache__/hookspecs.cpython-314.pyc delete mode 100644 backend/app/plugins/__pycache__/manager.cpython-314.pyc delete mode 100644 backend/app/utils/__pycache__/__init__.cpython-314.pyc delete mode 100644 backend/app/utils/__pycache__/logger.cpython-314.pyc delete mode 100644 backend/app/utils/__pycache__/validator.cpython-314.pyc delete mode 100644 backend/data/assistant.db delete mode 100644 backend/logs/app.log delete mode 100644 backend/tests/__pycache__/test_file_organizer.cpython-314-pytest-9.0.3.pyc delete mode 100644 backend/tests/__pycache__/test_git.cpython-314-pytest-9.0.3.pyc delete mode 100644 backend/tests/__pycache__/test_llm.cpython-314-pytest-9.0.3.pyc delete mode 100644 backend/tests/__pycache__/test_plugins.cpython-314-pytest-9.0.3.pyc delete mode 100644 backend/tests/integration/__pycache__/__init__.cpython-314.pyc delete mode 100644 backend/tests/integration/__pycache__/test_api.cpython-314-pytest-9.0.3.pyc diff --git a/.gitignore b/.gitignore index c96f718..69cdab0 100644 --- a/.gitignore +++ b/.gitignore @@ -79,3 +79,19 @@ scripts/inject-cache-buster.js # Prebuilt native directories android/ ios/ + +# Python (backend) +__pycache__/ +*.py[cod] +*.pyo +*.egg-info/ +.eggs/ +*.egg +backend/data/*.db +backend/logs/*.log +.venv/ +venv/ +env/ +.pytest_cache/ +.mypy_cache/ +.ruff_cache/ diff --git a/backend/ai_dev_assistant.egg-info/PKG-INFO b/backend/ai_dev_assistant.egg-info/PKG-INFO deleted file mode 100644 index 75991c5..0000000 --- a/backend/ai_dev_assistant.egg-info/PKG-INFO +++ /dev/null @@ -1,22 +0,0 @@ -Metadata-Version: 2.4 -Name: ai-dev-assistant -Version: 0.1.0 -Summary: AI-powered development assistant with plugin system -Requires-Python: >=3.11 -Requires-Dist: fastapi>=0.109.0 -Requires-Dist: uvicorn[standard]>=0.27.0 -Requires-Dist: langchain-core>=0.1.0 -Requires-Dist: langchain-openai>=0.0.5 -Requires-Dist: langchain-community>=0.0.10 -Requires-Dist: pygit2>=1.13.0 -Requires-Dist: pluggy>=1.3.0 -Requires-Dist: pydantic>=2.5.0 -Requires-Dist: pydantic-settings>=2.1.0 -Requires-Dist: aiosqlite>=0.19.0 -Requires-Dist: python-dotenv>=1.0.0 -Provides-Extra: dev -Requires-Dist: pytest>=7.4.0; extra == "dev" -Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev" -Requires-Dist: black>=23.12.0; extra == "dev" -Requires-Dist: ruff>=0.1.0; extra == "dev" -Requires-Dist: mypy>=1.8.0; extra == "dev" diff --git a/backend/ai_dev_assistant.egg-info/SOURCES.txt b/backend/ai_dev_assistant.egg-info/SOURCES.txt deleted file mode 100644 index cf7eec8..0000000 --- a/backend/ai_dev_assistant.egg-info/SOURCES.txt +++ /dev/null @@ -1,33 +0,0 @@ -pyproject.toml -ai_dev_assistant.egg-info/PKG-INFO -ai_dev_assistant.egg-info/SOURCES.txt -ai_dev_assistant.egg-info/dependency_links.txt -ai_dev_assistant.egg-info/requires.txt -ai_dev_assistant.egg-info/top_level.txt -app/__init__.py -app/config.py -app/database.py -app/main.py -app/api/files.py -app/api/git.py -app/core/__init__.py -app/core/context.py -app/core/file_organizer.py -app/core/git_manager.py -app/core/llm.py -app/models/__init__.py -app/models/file.py -app/models/operation.py -app/models/project.py -app/plugins/__init__.py -app/plugins/hookspecs.py -app/plugins/manager.py -app/plugins/builtin/__init__.py -app/plugins/builtin/example_plugin.py -app/utils/__init__.py -app/utils/logger.py -app/utils/validator.py -tests/test_file_organizer.py -tests/test_git.py -tests/test_llm.py -tests/test_plugins.py \ No newline at end of file diff --git a/backend/ai_dev_assistant.egg-info/dependency_links.txt b/backend/ai_dev_assistant.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/backend/ai_dev_assistant.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/backend/ai_dev_assistant.egg-info/requires.txt b/backend/ai_dev_assistant.egg-info/requires.txt deleted file mode 100644 index d48a8ae..0000000 --- a/backend/ai_dev_assistant.egg-info/requires.txt +++ /dev/null @@ -1,18 +0,0 @@ -fastapi>=0.109.0 -uvicorn[standard]>=0.27.0 -langchain-core>=0.1.0 -langchain-openai>=0.0.5 -langchain-community>=0.0.10 -pygit2>=1.13.0 -pluggy>=1.3.0 -pydantic>=2.5.0 -pydantic-settings>=2.1.0 -aiosqlite>=0.19.0 -python-dotenv>=1.0.0 - -[dev] -pytest>=7.4.0 -pytest-asyncio>=0.23.0 -black>=23.12.0 -ruff>=0.1.0 -mypy>=1.8.0 diff --git a/backend/ai_dev_assistant.egg-info/top_level.txt b/backend/ai_dev_assistant.egg-info/top_level.txt deleted file mode 100644 index b80f0bd..0000000 --- a/backend/ai_dev_assistant.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -app diff --git a/backend/app/__pycache__/__init__.cpython-314.pyc b/backend/app/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 14838d5ffd098414dcace4a65c002c230b756902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmdPqPcjVa9l diff --git a/backend/app/__pycache__/config.cpython-314.pyc b/backend/app/__pycache__/config.cpython-314.pyc deleted file mode 100644 index 6dd49c18a2d3b616d5bc70deafb617fc74bbb0e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2081 zcmaJ?OK;mo5MD}@L|O7n*2{Km%WdLVaU|KXTDyr`*k9hG)NTb~xOf zZ+0~|(BFsPIrww#;|(66-x=vXkpR5h1mL1gByy{$#u09c;m~TR7A9dIhgbPpghXml z67@O18mkFJm_ivejl@U}iP5@H4R`X9cs)LiszGwnC&u1HMd3N)MUL_xNMr{_;krdM z(~$IHi1uAFjV*2avL+K6xuU7M0s+a3lA~^@glNXLBL~_1;b`4I0F_|nbwoH3ko}#S(3kj$f!5~ zmB~?|yUS)0vi|Yiy=V6ho`3e$v+p0Z__Av3wIWTjRa%BZ3Bd4{rmJ+gi?C|QrUEr; z4P96*TvqoA7aT`(h-8pfWWKymp1;zHFPvE_&%@t>c76(>)=B4g`r`hY$`W_BuG}{5n~o*PYLT=1p$e^d zxnk+fZOw3GR^gz^2znT?K708am=(@NH_&Ei`BQ`x@E$`SaywiFZEzoglzuG3?XG+a<5x}WX_LZ{`nl;MP3RGrrP|BH-b3MOQTe#%};t6MzSb5 z)aG+uj*(-2*pxTH$fQs5-V`Ip(MYz^&`-W(&RQD)-7#{Fw;e%327M;T=& zAISIXZNBJLm}A}#FL?`$R8e-c%`bXyG4i%QQ}C7;SwZQ1n_uzXW#l4_T7gu2+`D84WJ^onv%{s1=t{l%ffbut{JLff+L2pV#*lX>oW^&9#naMLV$_zUM_Bb=gn3-UPiE2+W19uFf!#yf&H4XSG z&49QdmL_9~5L;_BiRyqGB9G*kRb9szE`j5a!(pfXynTY@jCYMM=-0qNP#68oXMY`; zI2_I$j!nOcgws)X?L`u0PP(!zc^k*~;n{&!eSsIbxz{ylpcC@Yq863mM*$8k?l{wW%NhGw3kQ?H`a+&f>~d4*u` PY8*g~UXi%Rc*^ z=b5=@cIPwCc842f1nuhm?qge7gnp-;pb2%c{1u2II*c^D7mZ+oM;OA4u!N0MAG4Pm z;R)|+cCRoZ5;2a(*)3>X9BU5#YV{7@=xQ%e8n=t7X(Ep^FjpSO8m|evU`@1BII#E)&M~5d_Pf^`dcIqwDb*-H3MGe~1-C8$m95)?r zUCJ>HV(PV!X{RmQOk%HTkD1CCjzO%G=8)l1m*kp+Sa#Y4&6%mAxi^!HC%`Dz)xBnO zDsMTap0o8-E}OMTimo7NxGt7AfGDDIM6iYkb2vg+4HHgdV9l(@(L`UP(IoFlx^5d; zQ`bFN*R#3FLWXKZ*H09TOg+-1>qjidB^g+;or7?TuDb+QoYD>;%28mTZz3RE9?W~_Cr)zK1^zV; zCV}@|gt+Anc*F#X!^0f{SFMfJHz?@SdtbdXh;_EW6j+@JJi}PS$6&@3F0%W08RgLd zG)D73(+&kdqA{BNnKtHwyw=%QfBnON?$a6K(5Jruq+#aycqbCkzG1jF!XR zf^~{WM%(J?(g1G^Sxg*lhBrZf8tz1c>}F))e%8WCrqBgLt7k7(ugq2FKUw>$q6S0J?e3X!Q6wLy3^EBIz4;3G+mmWpT4}l5{{O# zv)K!KF6}?Je=*j#5bL`g?q8JpZ%O@+Sk&BJnx32f@rkCr$1dINGh2qj_zSFdOJA~} zu54F#@a6Sb-7b||II7zkz+LXbYA;vbDpI{2Q-3d}dWSI75GwD&>MP;$fDHO3%TUXQ zAo?6_ECaL+tkPEB+kZ#a3&2)CH-(BgPAU5bPX9AAeUzCFbO=bPH33b+4#a?px6zmw zcvtUF&H<%#4PS9|6j^nS;9qzCZwgx=>)j8oRZFV~-nnu9?zb05lbqMMrbt48^UIkR zdSfbO<_RsMl9S71X#D`(#CkD(nm8eC`oMKUnl`xHG?*H2vC>RwW`5@Kwg(I!idLd+ zbNj)3+Vf%0?Py|AN!(Hrk3`fQFU`!&JQPr4=bt|}ZCpW&KXx&iScoQWN4pl4t_7v5 zqC_6>5c%s-$e%&yJa$h)t~0GeoA5cThNbf?sEb(L&0pH6M!9QPZI-_0K;3A7Kv~4< zAXk<|s+%#m%h7gqKrFw6)tz#Ahe-7R3$x3En2y;k47CEDct{A}j+k zybbP&jFCwlHM6IB%qi02ze_9UP{JIFfrL8`U-;E9|DVCUXdjn_4ED>T3FO| diff --git a/backend/app/__pycache__/main.cpython-314.pyc b/backend/app/__pycache__/main.cpython-314.pyc deleted file mode 100644 index 60edea10247a254ed467f086a6dc2673fded8549..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2088 zcmbVNTWcFf6h5;Tt!`Fi$+ns%_!1{EN`mBEjDrcGC8d=hjn!@GQxvh5R@Nq~T`@aK zoII&XAuWBV4S~G$p^wSGv1zHrfJ>p2k~g_Fl)RLl+114jDTNN~neUuAXXe~y_IzS2 z3OI^?oWEOF0DcwBV1)bN;4cEufjgj+A`}QCGXhIRsUS1i$8u3As7&>-QVbO|rWL|0 zT!^rUFH?)rLX5?H94f{OV{B{&%0$;PpocSHC$IF6Vu`Xm2jy64df>!pM(ON`8z7XP z8sO1fPUw+kj7JQXDyK>d0X|C0svgy2IZ2P}V>#k~iDfm=K<`qe>{0Ci>&LEOF2vB2 z85nv!`7hezL+#WN?J3mG2fG}lWv#S$ln=0;)+d&w0Q+9O%`*JIEhGPJsZY*BcIuUI zAxn7L@E$tVs_QUwgEbAuSU2fQ!nF?#kG)?iqDJDzs{ZN6R;^~64-9H%Wvbe(S1R_)BNcG#o)UvfEdDE8GSf-55Xyz zL95$?aEATz5$JFiH8)5{zNto0ONS+813GwvbeIPXZpM~mi)6_y8pD0EgdW4m58*5w zN65prRW~sVhfX3Zl)QJ4yu$MiLl8@SlYP3{S^Zgw?8~4|y!J#Cj}y~mlblqx;?pFn zaFtoiHo11+q@LwET&TY^rC%w=O zCpWV_O^Jtkps1nOp78VWnFaDl%VQ>N*7!#jM3jCOL@N%mpcB#TeiRa&!v(GdrVr^E z(<7t z>~S9LUwqqIqcYlat&aB|HK}+wd8W_hn#1d#tGd*qqL^I66y}7kh8z`t7a9@rsF35v zb!$DydRz!<1~b+S&!nPt{jQ`U!Su8sqSyU9!4pQURv8_KkBk{q!w-}vET?L>Yi5PI zZDvv)3g$Oc6u#DUYi--SPM2_JabZ0LX-_7E?7_L;;KUwW`W+T_U||nt_FxvvD@`6s z_!Jz-hfLU7YV(XwdNCmBLkJP6mjX$Bn)xF0Rr<-veMu!Dablt;5bo4p zJN^Sn?@NTtiN%SYK)vYjn9Zf<*S4;`h-^dZN4V4lIXHdu^7ECgmG3QIyf_jsKfk_p O{Y4hVKfx8h)&B-QudL(% diff --git a/backend/app/api/__pycache__/files.cpython-314.pyc b/backend/app/api/__pycache__/files.cpython-314.pyc deleted file mode 100644 index ded114478c2ea0d45bab265d448d86fe7b0e8a12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8057 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 KqT5(wZ|6TwWv#6M diff --git a/backend/app/core/__pycache__/__init__.cpython-314.pyc b/backend/app/core/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 0057d8f6f22839ee3b1eb63cabdc9b77ecb02b6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmdPqQJD%=uezIfM z)2@Xt8+O0gH}Tnug-_>B_tRv&#U3A@lAjzOzmnlI$c$U+`sMjW*~JBk$*KBDiOJci zc`5pd1qJ%a`9-Pv@$s2?nI-Y@dIgoYIBatBQ%ZAE?TXld`aljS<^U2Om>C%vZ!^dh Hu>d&$m}E4P diff --git a/backend/app/core/__pycache__/context.cpython-314.pyc b/backend/app/core/__pycache__/context.cpython-314.pyc deleted file mode 100644 index 428fa2851b64bc5b00e3bc92c2b861cbdc35e6a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3527 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 txNFeRzfhQlY5Padxo>x~gb+HN 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 ALjV8( diff --git a/backend/app/models/__pycache__/__init__.cpython-314.pyc b/backend/app/models/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index 47f8c4620ca2fd7f4b97eb5080ccaee38e121efb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmYj~!Ait15QZmByOq^dQ15#X#Io3e;7vTr7SxqKfFZU~x?7u&M#S6V)93^EGJ#(7 z zjOf5M--ScF!Hc(!x;-$1NOw_D^3! Hy@~TbM=4o? diff --git a/backend/app/models/__pycache__/file.cpython-314.pyc b/backend/app/models/__pycache__/file.cpython-314.pyc deleted file mode 100644 index e455b8aeb6b7b4c13a21b73b394918c3b93cdfc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3383 zcmd5;U2GKB6~41GJ3IToi~qqk#tX(995%I$O@o1o5VFQGI2(i_6*C&oj_rZj+2zjN z2D_=WYFb5oKnf48MARyAgamG?)>YNYRUg_%q`qKvE#Z->sA@wM^@Xib$y^Ne@e{J4VLXryvS2#ILQda19!^JCWIt&k z2S`S2BN^XxWSFo1jzu$4f+YQ4VmIlrrL4jymT>VdjhHunUn;}q_54v*q%Yt=T*5zPssXjL3$iq9h$aA=;!^L*!#j70n z)?c4*kHa-(0u5ZV!?k3B;Ja--};3eo&^m#S5vtJ z{tFhUo>S<8d|g}6pTe%Avx}yFqo~N8dIklV-a0dhrf`%`YzxCDG%FD1wdcVR`KIJwQ6`FAM}v-u)Z zSI8C)un(o)&C}~vK~c5TjG|uG%xnq*HI>U}HN#5bs*e^HY-!9;ax+=wl-<&}RYzUA z1Lm^g03~v_|K7l-13$m{%lB5^EBB7kPGJ8ROQmh_BifFz4*~y6yAZk&_5)zAX5~+$ zk3%1Y?!I&H%JP+R`{4hRm1wSOW&6jSA9dcHzh^8P<&Gi8%A|+3fQBvQ&0+zMDit%n zmh}Xq1>L>X12D#w$YpZXbNmN{WP$A@Z*lWnhI^a)Hc4?1`JOLP-xjIHiWCne-eMHv zcs5US3bVtqtQv}CWp$OwvW3dMC1+FZkSr^vnP*^tEZZGBqM}iB0LED8ny*Ua8R5K> zT*bjViR!ny^RD@zNAMZ|W2LPzXp~3>mN135wdOx`|E~Mt@$>`!Vf4+1(wo~Wc2_OHD933(1LpZoOA&M$ zyxhQE(5^ivJQ=PJ+BKPHm(2458UF&A&>-Vs?j7^)`iJ*x=!#!M*SAY|$GUgfAT{Xj z(1ZQ)H^_ut;{pvb?=D&J1+oyzAil!%AT;OzKrMI*3Y(`dZ}-_k0m=v!l4LGV7i@tk zbCw;dmD^#7=zXQcXK&2YYk(D7Q1J$g@ zc2cB4{1>mAjG|2xbH^5DpgeI7eK;!)Bi#?sn7uTK>`MSxjamN$`04}leNvH#Kl&r< zR&ZT7R`C;#s{}}_^|pHJyX(SKC5S|*PP|qLBN3?+Bb6u;F%oUL{mvbAX?i1)SQjo< z;>hkH!T9a=JBg*PjllkO;cTS|*=Dk*{f@NU^waQ0yl-8YsI(y4O5$y|Z!Yso-`j{C zS{EiOZOFDGYb}9orz;&u?8U*tQs=txdSxFHozA$8SWks`ykeybx!!F~@QVLR0Ous2 zb4grCcG{5FcoaZh2V@zpy&{|qG9GU?ii%N_L}htarxr7GQ#11*_Q`TKuR;S(NQM`C zRgs2pUojr2A7Kyy!+{PV3?tx<(_;uD2ol05!f^x<;hP9PgjW$xAfy27c*Ds$TQt#t z7C4vT5Y|brInG@#Aheg*n{D6*HmeIo5_~DUUU1spS}9$t`X?<4gKoe z+R(2j9vm$9T`Z+HdsC~z8Y}mnEuGy=j;yjjX3NQm(!^%}vDLW;Lb-pkbbhn@$o)6g z-YR#WhIY@(_vhA%<(}6;C-KT7DYm|M>?!X#D3;DwL~`&Oz--0_H{(N3eFBotLU^-0 zac-7pDe&?8wE_TFcOe;bvY}f2h>(*|pjT5RVBIhjL!H-h3)QW6cHQxb<3QXPJF=~G z6z)YQ=NwPlAt;rOV$C=MwLA@jva_AL3J|ECs&RFSPJjwJz&Zr*gy%T!b8`4EWZyr? c=?!xFbMnd;r0c2J&P{S34*#3r*9q4D0tg1nPyhe` diff --git a/backend/app/models/__pycache__/operation.cpython-314.pyc b/backend/app/models/__pycache__/operation.cpython-314.pyc deleted file mode 100644 index c5cb195c7a1b269d3c5c45d5dd79026eb7ab0dfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2536 zcmZuzT}%{L6u$Gbv%~%YvVdX@e->Cl7F~=cMcWu^7cFQ7$P&LMoFqwrOqa8!M*z*mGufVV8K5J#+5)&YXMi zcg{Vt-Jzh5z&Nwk{Xw5d$e%bV4Np;7H$bt-1W~vl5+{trImR{PoFC%j0uvlv7!u1Q zworww+OgFrGB8@T5xI7Z#5l#*NDNu=gREiO97_N#tWF8C@EBqBN(fl5wgV?~I@OTd zceB&^0POznFRuJ`|Eqt$Uwm@^njOlPVAaS@o1?&@KSxt(jn1m)^jVmCQkkSalX?y$ zV4gC0!_X#;N}4g%@RQe%gJO|0E=M3w73tbAfYM6NKv}xulvL6-pCy`L``k!Gq!`>5 zGT93hU$ccgOWY;v=x^_dUdYmOW=>1!(Mc_FPR}HxP!rK~HmMtCbmMHjxmjBtFtqe! zQafVTms8SPGB-j%vlfI!zUjK%^L5X6Ge2Cqduh3CfFcBE_a^lzEpM;{)b7*&*cs_*>-nQ1eakw)d9z`s^KfG5qVk!KHnJzx2JmMz~{KJ7YeF>^VeJ53oMI?%!F*ixuPArMBLLC~yBov;HFN|IrSqZi;iSa@`S{q2X zX`$;@?8e@ex~?U0xX_5!?WDGGerBbn#aZUr4zM}(L>pjdBasFhYB!^$@lyL#6*^bm zKpn38`MhQnk!n?)N>P&;sf?b<0_;`QWHtc`bPR_5*mb0S2+(bcx-svP>1e(t-z`?R`yRe<4EyT*EH-q7~S`OkDnPS0j;Xr3{%E+B<}=S5 znvpoGr)OQ>9HJankvu!JiT6VDcB<8(-wwbhs2Bd_Xp``FgyJXHr2!M}F6}gQdB9Ef t5&9+o$eD>%3vGwv9+S@B$j*OA>>-IgCVfxHuIEyi^Ih%#kHEtT@;?d-Gj0F? diff --git a/backend/app/models/__pycache__/project.cpython-314.pyc b/backend/app/models/__pycache__/project.cpython-314.pyc deleted file mode 100644 index d37757e8d0a25417d2983e8d822664e3b15f45d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2890 zcmd5;O>ERw5Ptqyud{#2k{`nVPY7X~D1n4Oi4au?!G?&CItaBY!E$UTG4Xnr=eL3& z4px8E_P~Jy5}~bVC=x`ifT|aIsKl{H5J4iADpXY!;>I?paBFAm-LRynQZH34`SbXj zdC&7^=FM|^Dj6eijX!HYxlbhISA3~lk+QI0gW!=9MB(~LmN1g#7`G1J`F=htFd>kI zelZ(ik*vg|Y?MW_GLr*d?61kjSS%Z7@!&nupU5Uzavfwj%H^>UpzE?WYCxQgWXZIlZF|!oN-?~ zYMx;*gLGIc6imZU=7OiH=j~$7fl0)DnrrIeXG4_AFAFJ-5Div5LKvqI#-E5Wp^4;S z{Y+GN78#Mib3qYzfgN5fip+?-ft>hrdzk~hphR|6)>RW&#DJ4_@#RtR$|xmTHR_c< z@ppa2jwJ(K>b3c51FlYyA*MBpUrCqQ7_f1;6N^4AJ4SjqCApl~vXTOR973!kUycWMr8i9isV@rp}59aR2Gd4^KY7`Sj!SPky}V%Y{(m9)+;R3)ISKbV{8x zr!f3Q$2wIs{fOll<{8YLQ?zYu)Hbc>5UJPVkFkPVUN{7TM~;VK0vswwY>@zA133=$ z8eT({%vA_@RwC6xX1T#xk>cdO;N(wJ9Oer}rq7ZE9N=&1I-RGJZb8${u2D^&G##T0 zilr-;H%!~@DzC1yFy+g=ww4<;v_8MC9F5Kj(+D%UX#kI0+j70*YR9){Zk?MwH@C5u zt^^iV9yQD{t!T6VV$BrYp-l)Y5YPp>3Sl+E8UW6kL77jV}4Rqbz5^?!_t|m zx@f%73xet=R8@1FJOc+*)o-ZOMm38ecN+j+dgKM+B7G%<>6YLTM!e!S7!mBf;H13J z3xY=!aD52*C07D^5@_DAKS0BGM_^gP*+g&Ip)HoN_pIEp-qCXA-nO$sTc!`z$6JOk zA_YqpUDFAkNeZm?TZvr{)F z@6_L`-Fr{o`)YBO1&S~z$je*6yg4sj1oHwn*MTKazV`46w;ANJj$fkVt8@a`yry4b zEBp&vvC8(fIl-Sul@7ltR)42j23x7hHnKz){Rf?lIy@F>3kb9wp##8=8>XvMD>x1P z=(xqyBDMXPo!2#6Eof}Qm-M_dW{vwXotjXch6;ro3%3f&8HwWg?+cd0Xe-W(h3AV{ z<3Y>J@Dx8z+W@Ldo^C-l1Ayb*s{k)QAs>*EOloRBbI-@`i#tj+gyTvv5>H>KKi_^| z94N(+NRVaC)ACIHm&u3e&B!K^O_5Z?h3xe3#lsJi8}EyQrCMa`NP77N_ae-;yOc&^ z8A;Y(*gd`fV&B6Am>n$DBin#xXCBtAFA+W>l^T&-`HB-G((kK)3o0>ah=ZBsK9n|A zJ(PA#RiW1xZIodvpDJp0SyQX3V-|IpZ8@fs2X$0cjl2#5bOVORSZGM&7>*z@GD?^o zT7$3+p&OwGK|IzhTZQ)8zkk! z^67+r4rXeDsteC(iA@#YS1v5cn0w0BY<^MASDe9K@24fL5#`_noOlaK!Iodlb-C}_I&g1 z=ey@WTe0xz-06OrjJMe1<5TjJ2KczG$)vkyQs1;;;F$a+Nz|6?Vc$-0@hy}<2 E0Bid)8UO$Q diff --git a/backend/app/plugins/__pycache__/hookspecs.cpython-314.pyc b/backend/app/plugins/__pycache__/hookspecs.cpython-314.pyc deleted file mode 100644 index 9dc2bb3b9a7b0228749cf631bc38d5c010ead451..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2907 zcmcJR-D_M$6u{^1_hz%3q-`3tU-{7J8tsaSP%wzl2lc^Fw~!Y}hTFS0$u)QPZf9mI zeUU|jvDn&Ji$VpV5NNm1N)ReZ5bb{;`XC)&1hZ=jJ|rxfK6=jFyUA`gB~Xcrwp--?A$N0NQIxyt(#)Z;aA4vxPdJO87iYQ6#=s983FXi_t)gPdsgY9EPXkfo@JSP16i37V3fwABy z8Pw9gE@DT}2D^R88zw@YE}(S523^?Gg_JJbpo@6Ah|)zHbWu;&qI9taUCUT7-P%Pq z*N>&+qIHyrcsc|4>mz(;HInnAcnOf871SsV>5(g zp!FbmOPkWt+DYwga1cl>>WMkg%WqFd4{LhDiEk zXu@GxUC214h7HKEnNp79dy8@)^{&IFd0scn)G6JVHglPjp3kT9%4nXN0<$@o&5!2K z%2rDCT+R`?Fe#M>8aH;dUfBk-^8+C67s&?k1>@@|N_*GvvlvjdDyWH3b2nCy2-I7v zAt*r5Vlep%DwsZ>gmJ6Q*| z?g6n6-W}NWx$O2ScCJwm!*1pKTb0X;4eVGaF1a6Q`1Ara4!9>_SMKKI!DiN5T09Gn5VTegI+AD387pHl83ezYHeM-;FbB4XSO#pk zuXhK1829)f&sQNPeZ2bhx0QwW%jYg^T>~nVYqXz1NJ$jW zq9u*A6F}Rxvy_>q3nmxxP&4j2^&y<){|RiiX{L-YljofrH(4L7w>x0$)eN}gS7aBC zyMPD(J>c?Z7s^YQ%X6RX3iyR)zLDbl=wNF;KQ4h8FegeCY7js(f?3{Nef4 z*&FUZMfub3R+i^S+$hl0nd3OvJ7FEnoP@|VnL1;7F2iN_Hn%tRcp8RpnWbhPNhV~3 z(wv^f^w&Zu9Fqd%Uy6zGbV0X0O&f)T!?>`moSAb#9i}wn7*L4R(kW91Sw+`VxX|+` zUPSQ{2-yh<8nUcqP+bUSohk^E!|;x}6mFQdO=(hd6A5niRX2|WaTXMqZTNd2?$1Il zyBp~JEg0YMLH@1!Nhq;~rL_o@9(CLL<{E!vNu>m3P%_M326JR64?h=^XJrEaiSXy* zO`T1fj18kwHCoxc?KZl|u&$BN2z;TH+zouz-$>Co~d@V#; g_xuv;{wdb|W6$8vv7usQho+6t5iMRNAe6cP03rCTjQ{`u diff --git a/backend/app/plugins/__pycache__/manager.cpython-314.pyc b/backend/app/plugins/__pycache__/manager.cpython-314.pyc deleted file mode 100644 index a39002983a69b3a8e13034580fe3e6102886ef35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5716 zcmb_geN0=|6~E7Z{s5k_1B5RFHqbhlG?)a^hO}$bjwCP|>bjZPI+{1fHpGjuz4xA* zrm8B|bt`1epi#S|TiSuvN@Q9)T1{QIB~zvD@5v4>C*D{@7Os)-p3Cuv1(=YMW~DtACbrr;$wOliJ_%V z(m|=~)%UOx>%caBuc5~%8GB5UsmCmtDUInZl8T^>?Je#pkxD4d(988$Bnzz@drNz) zlGQ=Bl1Ab)RS}=LQ>Uyf*&ebrl7~vXP1=_7WhbNdDf2PS#9j1HD||0aoVoUgH?F@r zeSPwW+2?2aFEBFe4M@k_dRc#W?4-QVBnJ4RJ5nm?D@h!744YOw;c8>3{6u!dbLm`!)n zVio8ls7VAraG&ruuRaTvQ8HkQA(f`VTt6?X(efqe9ntj3PhvO^O@87vYV~~SEy~xm z+90(e{LdHps)bL3GtdPjM#E5JO zghKo=P)HFJQWS7i*~&-bflxTat84|auwpnmM5mylaJhss>}lrtNGt*Zk}EedSfNwq z?uM?TWWny5H&GCr0>6*zP?u;gHPD&bu5U(X)*J?+|Ac};h%~#P@(2&aUY3D^QZ%979HrhrGJV;1_ z@iShO*@omr7H>#CRvW8vOR?fU;2F$PxuH9JCUkZ(Sgp~$wOTD-HWGi1V+lQ+w?5yd z)drgLC+!;~q=+;C@;4JF8Enw{7)huFC6{0eWardc^Cig6a9GC?pYbpY(#oC4LF!@7 z1bY|TcbcfR2ooW<>+4B`ahsCJkL<)V*MB^l{oNbcQ&S&Yx}*SpvI<&M?El%T*-Ot| zd-HVmm2=tiGkcx=kFu=@It-sI$MFTjvM;^%!Eau6KC0X6bZ=3OF#HIZr6{1H$fgqk zAqM_I){7@anN5Hrk&Tg<7#1WTNrKD{N8?9jHWnBO%f(>Lf+U`ZKqpp|!Xt7~WF!$6 zq-f-*Y*DKGNIaB`hUF48V%3D@qWzBq!wD%8kI4qW@3`PL2z9u;ioyI)1cxX?dAgQS zorejF2I%Q>LQ<^W7K(_$_`_jA0|>ccz4dQwN6v|VgKU(%XD!cI9cim0V|Asiu8g(i zvbE(ZS2odqsy|iVIeR#>dw+WO{#56Il>Oj5*R#l#eQYE}+=O}DJYgNTo@35;oRcyR zPuk&`v$xNicP<-Aoik(Kp0;n#*xS?g_SwoS_B~^L3)Wg~rPj2yb*3X@^<1`k7H!q< z)!v+`ZB5scJg<|~uN1zSbN=1kk1Q}!#i-K$no*LCA# z8>y)Om@wGgR(X~?!=)U%W^bR}@uu)r<6Gsa`u!Q(fy=f7|5?^!pMQ&J4sV;beYI2f zc4tYq%kcJHb={4IKQ$VlzRq_d1|edtf_Z(W@AT=wgEAhl2)AA+h0X$)0+DSBO!IL; z6}?+0;8X&N4eB5fBdMcpXy9NHD9Wv_wstvcT5Xh$W%UHZ7(k}&w3t<)K zra-)p0x^VMOfO032XlP}nm2QTnt|tlV&lwhG9o_1fgp%2f}`%Pp8eZq2FGBIAbHx+(iOH&O_->J`(7e_>ZW{9YQfW?O> z&K`yaSq~AcY#I(jw26p~on_OpfQX+I=7lDhTd09dHVfflfPX+?G&-4$#D?M!p5Z3x zHiX--26_mAm}=R%HH&aU1)f=~ig-+yE04{>4jfmr9*zqf0X6o&L!VLdzPSRBm8(ou zx-u<$(k**3C0&h?+YYI*&+&`aH!a`$|> z`&YxWq0}9RGHw0yZT*X`)?W-w-nUp$vjVo#vBr^#W<<%-Go@2iGZiz&RNL25j=p)@ zy^FTW_c+_c!SRC`t}e~ho#Rtn-8{Ev!M!KLIn$hTsv^y~&>{4l>PywO%}6stsp{QV zxLX0|EnD&fQ}sLO$gTx<*XNAPhmrr|btMnB7Z?hypO2~sfXDe;g~8CdLLi%NriHR0 z)wH1_A*v7HR{snic&pefu0!li zJ!#4*VGn$cl0nT{zJ$7Iep6E^5I>W|;5|EbHv81?m&Qi{fwLfU3b25~iWb1r2^$4a zR3Y(r_#`}+P*IDx3H7$gVV7LYx#3D**hbHeiZV*BS<5H8GZiiAik3{pj&#M2xeCvm zwLN8S&!1mACz=!$mJ=$UC9Fc>6yfEWLb8Bt`+Q`$AA04HL2qbSA&^aX(BhNGfHqx1 zZ@f_X0zyF{Zb*Jc3wGeV%F>8pZVwcZkQ4U`K_FbYLfIVqhz z@yv;{k3I9))Hmm>o-uaOT0Z{x$qjT}u%VG%}eDR`F(hT)VvC@KxEQH%B|u{GiyePY2FQQQaFji=zCi)_sr3vWxy z_`viJuH0~tS!;zLn?~Aeo!}pq(Mhb8f}t*>wXT^#Gya9@L3u!@be9X?h6#o3m^DKt zoAAyE7eE1pAR8h0fa@d;{sjbW1vD@&l#Ai5tSuOi4Mm0pL~(g55|kiAY}@b(WW%^KAg?~U2?MwoUZ2&sp*xfd}zQ`1q9!pFz5BY3P^d7iAY0BqpcoCnY9lr{<;TCl(aw zmzHGa6zj*wXXa&=#K-FuRNmsS$<0qG%}KQ@VgqUf*LQ8DlVG^$zTS-ZADJWii`L zWzI2fl*hcqvtzDN0Sgw-jk!lX*wc+fkH~i*(ba)+{v3mwjx~jmD2VPMM|Cgk6`7qV z+Ennu_>T+MRvukgxp!^l%)N;yLpF;VmT*?hjAV1lsHDm{#eiuxF5wyIg-IP}HC4({ z-c&HvG*b*1qKy&{%?WKS4Zk8vplQe6uMv`At_yw4%rGJ|1(GU>j;Wec2sLK=x7cz7 z;ZE5pLUC$)1I3&W3j2auA*?Fp6(Z!cOfn7L6W&m8!BC?tahljLs2$=0X$G7o{9$0M z*!Z+&T|@KOiHRslcgk+ zh9A~8K{KQ9E239u2eavK`a5r~((dZaE%RF5VjrA*bo%~jOSlHgC{@n@3|!D4Q|#Jr zFk4)gllXcqx(p}`*&V9oU3VOH#Nl#nq^Ww&;=)E5Lc3~Haw|QZ#tFo&3;VkMc*{CD zy*eAn_N05go#qWnFbtz9nk|dsn{2Mp+jewk!uiIC>Z)(@(q8?V7j5+=bp}d;5gnp) zPc5%H3%hmH#dRjZHY_F_@nBt0XA;hJ8caQ-=d6rwwbc@gt)+7bF5YF&H~M&YgSR=6 zg^#m+gqXs%B*BU9X-?!t*PdE^=zN0zU-Ko@BXGe^Z_1U+*62q6k}H0_22`%65P*nY zocZq0hqtRx^w;gXD-VBKxpZTGDAFsLDV)tKQ8P3UiuBU*uCY1ggpyk~&MT%VWk5RL z8u@%6k{^i3p~&cPWPCVs1fa?#Lz$-Y_-NEYT)Jc^DmICroXVOwsm;!F1)Lt(8+8&P zFP+*yhZU1F(b_NQ2eg8UK~qg>GN8u%#DDN9T~JdKmdnGD-dt8yR4po7fz-XtBD8>_ ztp+V8;?5|z3Q88V9;P80w4@0qE5{2N!hQJB{!b1Pc5Gr~lK75bLy__|hz5k4GYM~E zSu0@T9!;E|S;rkYw# zNzPQC1k!3xRKb&OWdW}a?*#Eu_^qopTcf(3Nv-$vge)>z=q}XBf}X7IW%R?8g{1+& zwjz4&Yb*PwZ^>9eK&4 zj_u|4zUB75TL;UyuwFjx}asR+$wA-E(2FZP#&UB5Q97RL>M zYef7~HYqD7l9Fk{J(g5F?}ZGS^tBoUCdy1ieZ-Ya%32CuD0;;V3Nge_^9+}Huy&TF zb?me*@Judyymm40oDMqGN7F-1!hxr=8S6q?M`ZMXv75;9rFx9Q2YF2{SP$^XSC@FYJP$|&(Pb?Q0FtWbp>_5;^{Mam_eTQ#rEDCgOAJ#5L6@gsJ_!!icfs)AWe%qO@jxV6#fGhX9ja|XFL;2hM#KJFm&4f(C_Zu*@|Jp z51sBvyWidY?%wyl`}yqmd-a~8LImabT>Vc@IuQDbcC2DEg@t|)QbO~^njypJw ztD-Wuo$nAdp$e6wY9#U%NEG(i8hK-#W*2QRVy{54V$C5sKz1_ODHecS$m9ai1+tsT zgnBO$uSbA%+w{ZAZ!DLXcH0d@NAx>J(k zp#xD#(hDW&Kq8WiQQ0j?KTU>W=8RX8_Q^!mVsbnhPr$T8k|K#P2<4KbYVf466w)*z z?@ek^Rg#DuOkAM$>i)os39?^RLg8p&Zz#M!8jl1*iV{d_a!d^zGz?9U2IUZ;=fNtv zT6IEo9NiRFeJMCeku?>jUa&kNfJ_f#VIx#2)Ps7trlSZ&U~Cn79`|Dr2Vur2A{XQ= zIlzIR_}jFv3ko=0x09%rBym5d^QuM&oq>a}?@N#aAx)(ZTuVGu9UK#i#}n|*;3iTI zLoWEM#+lqh9{kiit=|3N9BoE+u^zLZnGU+F(02thg#|b4O-=u{IT5L##`mCZ>m|)` z+BBN7rQ7GGxbz)H~Jp8 zw7LMTK`T+vVhGq{&202*N+u^Z5)sm6#NW0>glL6pW+>G#ILW0YVDRy1Z#^c;K~x;lr;Vp7N~D ztZAC?G-sU6|FENq)>PM*#Z`mCq|5ti+f+$)X5F(_cU^7ItlcqDvNPk}Id4NNd~;6T z_SBTOH2v(!fg9fHzj~`DyfqnT%|EAHWp@yUIoQ?rmdKk=yd8S(xD!vBMKBBx-HS2zeC!gfyKd-w-Y z=7r)$^EO%}b1ftOgSCD4X?vGZ-`0b^PONXfLg4GlkDoajjJx#6z6?yfuk^u>+~9izK%Y-qo}p`B5zW$f{> z^_ewWCOlg+&aKlf&rtJ;=98@%;gKbzS{FZ!g7j)%Xk=DAG`fM7QAA!80yGn_8Juz| zBymuVL<#sQ5s4c7>Lh@-Z=@IXf?5q#3f)5mxMiMJBhSpy<`bSZV*(pAY&Y@DY%pyX z7G7oRMJ#d+9E2dQ8Qv}e{D!b)y(c7A6uY9pf{bO6WcP_wiGP2J~5QVp`es>DhCm`RwWRb4Ku>+xmIZ01XL1 zrF$6$CF`J6mA+_gtr;WA7ZJ+NPYNgE`{X`C-<%y%HwY;-T~T$mGV{oHQeBe{?-!0* z0NkXf{(Q&zmeJi;t1?@j&$z_}p7R#YA+DhCo)fuO{Mz=u>n+#&MQ;}|Ses#Go=4xR zy&sQe%7PYXPW7;CYbn>-K)Gxd$iXZTJy;_@7C6I@Wc4M;Ar=t8cho5ljS5Ymq^^a^ zfNdE?XxWJKuZ9=r9ISA5^y zxDhVrkBqDa;6zcS^RZ~0fea$&_hEoV&RQeaSh0wsMbFZdka^6wWTqY7>yC<>-qLAr z#n6!xM<%>gsg5Z};b7CtKToS)I38s zt=qLjiX87V&aDdO4fNMgi2|1)m{1eg2Ls#6u+-URe2Hu#Z7@r@tWvT-N`moCRQWgh iTY1OM;exb$2SIbU5VGyNYa#OA^}+pguM$q0?e|~a%R*=X diff --git a/backend/data/assistant.db b/backend/data/assistant.db deleted file mode 100644 index e69de29..0000000 diff --git a/backend/logs/app.log b/backend/logs/app.log deleted file mode 100644 index 16d202b..0000000 --- a/backend/logs/app.log +++ /dev/null @@ -1,226 +0,0 @@ -2026-06-12 11:04:39,190 - ai_dev_assistant - INFO - clone_repository:49 - 开始克隆仓库: https://github.com/octocat/Hello-World.git -> /tmp/tmp35gqud8h/Hello-World -2026-06-12 11:06:53,620 - ai_dev_assistant - ERROR - clone_repository:69 - 克隆仓库失败: failed to connect to github.com: Connection timed out -2026-06-12 11:06:53,688 - ai_dev_assistant - INFO - clone_repository:49 - 开始克隆仓库: https://github.com/octocat/Hello-World.git -> /tmp/tmpcfp5244o/Hello-World -2026-06-12 11:09:08,788 - ai_dev_assistant - ERROR - clone_repository:69 - 克隆仓库失败: failed to connect to github.com: Connection timed out -2026-06-12 11:09:08,812 - ai_dev_assistant - INFO - clone_repository:49 - 开始克隆仓库: https://github.com/octocat/Hello-World.git -> /tmp/tmpmwk5op6y/Hello-World -2026-06-12 11:11:23,957 - ai_dev_assistant - ERROR - clone_repository:69 - 克隆仓库失败: failed to connect to github.com: Connection timed out -2026-06-12 11:13:10,133 - ai_dev_assistant - INFO - commit_changes:209 - 提交成功: 83dc1427ede21ecf5684da9f794533947351494d -2026-06-12 11:13:10,161 - ai_dev_assistant - INFO - commit_changes:209 - 提交成功: 432ba4312b1cbd534744ae3663eb1f4f07756492 -2026-06-12 11:22:44,517 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 4 个文件 -2026-06-12 11:22:44,528 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 1 个文件 -2026-06-12 11:22:44,584 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmplgnv1sum/test.py -> /tmp/tmplgnv1sum/organized/code/test.py -2026-06-12 11:22:44,597 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmpft2z07tw/test.py -> /tmp/tmpft2z07tw/organized/custom/test.py -2026-06-12 11:22:44,610 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmpmrxuetr3/test.py -> /tmp/tmpmrxuetr3/organized/code/test_1.py -2026-06-12 11:22:44,623 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 3 个文件 -2026-06-12 11:22:44,644 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 10 个文件 -2026-06-12 11:30:02,527 - ai_dev_assistant - INFO - load_plugin:55 - 插件加载成功: test_plugin -2026-06-12 11:30:02,529 - ai_dev_assistant - INFO - load_plugin:55 - 插件加载成功: test_plugin -2026-06-12 11:30:02,529 - ai_dev_assistant - INFO - unload_plugin:64 - 插件已卸载: test_plugin -2026-06-12 11:30:02,531 - ai_dev_assistant - INFO - load_plugin:55 - 插件加载成功: test_plugin -2026-06-12 11:30:02,553 - ai_dev_assistant - INFO - load_plugin:55 - 插件加载成功: test_plugin -2026-06-12 11:30:02,560 - ai_dev_assistant - INFO - load_plugin:55 - 插件加载成功: auto_plugin -2026-06-12 11:30:02,562 - ai_dev_assistant - WARNING - discover_plugins:23 - 插件目录不存在: /nonexistent/plugins -2026-06-12 11:30:02,565 - ai_dev_assistant - INFO - load_plugin:55 - 插件加载成功: plugin1 -2026-06-12 11:30:02,565 - ai_dev_assistant - INFO - load_plugin:55 - 插件加载成功: plugin2 -2026-06-12 11:30:02,570 - ai_dev_assistant - INFO - load_plugin:55 - 插件加载成功: error_plugin -2026-06-12 11:30:34,435 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:30:34,437 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:30:34,437 - ai_dev_assistant - INFO - unload_plugin:72 - 插件已卸载: test_plugin -2026-06-12 11:30:34,439 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:30:34,441 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:30:34,444 - ai_dev_assistant - INFO - load_plugin:60 - 插件加载成功: auto_plugin -2026-06-12 11:30:34,446 - ai_dev_assistant - WARNING - discover_plugins:23 - 插件目录不存在: /nonexistent/plugins -2026-06-12 11:30:34,449 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: plugin1 -2026-06-12 11:30:34,449 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: plugin2 -2026-06-12 11:30:34,451 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: error_plugin -2026-06-12 11:30:49,377 - ai_dev_assistant - ERROR - get_git_status:60 - 获取仓库状态失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:30:49,386 - ai_dev_assistant - ERROR - get_recent_commits:82 - 获取提交记录失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:31:31,084 - ai_dev_assistant - ERROR - get_git_status:60 - 获取仓库状态失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:31:31,093 - ai_dev_assistant - ERROR - get_recent_commits:82 - 获取提交记录失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:31:31,125 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 4 个文件 -2026-06-12 11:31:31,134 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 1 个文件 -2026-06-12 11:31:31,180 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmp5xnijh8m/test.py -> /tmp/tmp5xnijh8m/organized/code/test.py -2026-06-12 11:31:31,192 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmp6y6hpou6/test.py -> /tmp/tmp6y6hpou6/organized/custom/test.py -2026-06-12 11:31:31,205 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmp2tjxl6kz/test.py -> /tmp/tmp2tjxl6kz/organized/code/test_1.py -2026-06-12 11:31:31,217 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 3 个文件 -2026-06-12 11:31:31,237 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 10 个文件 -2026-06-12 11:31:31,395 - ai_dev_assistant - INFO - commit_changes:209 - 提交成功: b0344a342e4c1bed72ce3d9db5fe7f7c909e6139 -2026-06-12 11:31:31,425 - ai_dev_assistant - INFO - commit_changes:209 - 提交成功: 5ba4b68452cbc5de43075d6837e9a53f1f49eee1 -2026-06-12 11:31:31,463 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:31:31,465 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:31:31,465 - ai_dev_assistant - INFO - unload_plugin:72 - 插件已卸载: test_plugin -2026-06-12 11:31:31,468 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:31:31,470 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:31:31,473 - ai_dev_assistant - INFO - load_plugin:60 - 插件加载成功: auto_plugin -2026-06-12 11:31:31,476 - ai_dev_assistant - WARNING - discover_plugins:23 - 插件目录不存在: /nonexistent/plugins -2026-06-12 11:31:31,479 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: plugin1 -2026-06-12 11:31:31,479 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: plugin2 -2026-06-12 11:31:31,481 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: error_plugin -2026-06-12 11:31:57,922 - ai_dev_assistant - ERROR - get_git_status:60 - 获取仓库状态失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:31:57,931 - ai_dev_assistant - ERROR - get_recent_commits:82 - 获取提交记录失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:31:57,961 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 4 个文件 -2026-06-12 11:31:57,970 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 1 个文件 -2026-06-12 11:31:58,012 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmpq0o22fh0/test.py -> /tmp/tmpq0o22fh0/organized/code/test.py -2026-06-12 11:31:58,023 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmpcdnh7oyh/test.py -> /tmp/tmpcdnh7oyh/organized/custom/test.py -2026-06-12 11:31:58,035 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmpvastjeml/test.py -> /tmp/tmpvastjeml/organized/code/test_1.py -2026-06-12 11:31:58,047 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 3 个文件 -2026-06-12 11:31:58,067 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 10 个文件 -2026-06-12 11:31:58,223 - ai_dev_assistant - INFO - commit_changes:209 - 提交成功: 339d8f7653a45117e0ec9290563bf6b8d3b0b8ad -2026-06-12 11:31:58,255 - ai_dev_assistant - INFO - commit_changes:209 - 提交成功: 6442ac30d8898f0bdcdb92649287fd03f74bb151 -2026-06-12 11:31:58,297 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:31:58,299 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:31:58,299 - ai_dev_assistant - INFO - unload_plugin:72 - 插件已卸载: test_plugin -2026-06-12 11:31:58,302 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:31:58,304 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:31:58,308 - ai_dev_assistant - INFO - load_plugin:60 - 插件加载成功: auto_plugin -2026-06-12 11:31:58,310 - ai_dev_assistant - WARNING - discover_plugins:23 - 插件目录不存在: /nonexistent/plugins -2026-06-12 11:31:58,313 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: plugin1 -2026-06-12 11:31:58,313 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: plugin2 -2026-06-12 11:31:58,315 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: error_plugin -2026-06-12 11:37:03,007 - ai_dev_assistant - ERROR - get_git_status:60 - 获取仓库状态失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:37:03,016 - ai_dev_assistant - ERROR - get_recent_commits:82 - 获取提交记录失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:37:03,048 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 4 个文件 -2026-06-12 11:37:03,058 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 1 个文件 -2026-06-12 11:37:03,101 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmp7eyqnnec/test.py -> /tmp/tmp7eyqnnec/organized/code/test.py -2026-06-12 11:37:03,113 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmplf08nzmg/test.py -> /tmp/tmplf08nzmg/organized/custom/test.py -2026-06-12 11:37:03,125 - ai_dev_assistant - INFO - organize_file:133 - 文件已归档: /tmp/tmpj4a6qwsf/test.py -> /tmp/tmpj4a6qwsf/organized/code/test_1.py -2026-06-12 11:37:03,137 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 3 个文件 -2026-06-12 11:37:03,157 - ai_dev_assistant - INFO - scan_directory:53 - 扫描完成,找到 10 个文件 -2026-06-12 11:37:03,315 - ai_dev_assistant - INFO - commit_changes:209 - 提交成功: 3e7ed3a0a1132d24a7790e57c31523814fa91d62 -2026-06-12 11:37:03,345 - ai_dev_assistant - INFO - commit_changes:209 - 提交成功: 70c80e8e0c077a748d702065d47a50dc8dc88fa3 -2026-06-12 11:37:03,388 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:37:03,390 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:37:03,390 - ai_dev_assistant - INFO - unload_plugin:72 - 插件已卸载: test_plugin -2026-06-12 11:37:03,392 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:37:03,394 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: test_plugin -2026-06-12 11:37:03,398 - ai_dev_assistant - INFO - load_plugin:60 - 插件加载成功: auto_plugin -2026-06-12 11:37:03,400 - ai_dev_assistant - WARNING - discover_plugins:23 - 插件目录不存在: /nonexistent/plugins -2026-06-12 11:37:03,403 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: plugin1 -2026-06-12 11:37:03,404 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: plugin2 -2026-06-12 11:37:03,406 - ai_dev_assistant - INFO - load_plugin:65 - 插件加载成功: error_plugin -2026-06-12 11:43:15,525 - ai_dev_assistant - ERROR - get_git_status:61 - 获取仓库状态失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:43:15,534 - ai_dev_assistant - ERROR - get_recent_commits:83 - 获取提交记录失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:43:15,567 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 4 个文件 -2026-06-12 11:43:15,576 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 1 个文件 -2026-06-12 11:43:15,621 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpr1gkqgjn/test.py -> /tmp/tmpr1gkqgjn/organized/code/test.py -2026-06-12 11:43:15,634 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpbdvlduql/test.py -> /tmp/tmpbdvlduql/organized/custom/test.py -2026-06-12 11:43:15,646 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpdgs6q_e2/test.py -> /tmp/tmpdgs6q_e2/organized/code/test_1.py -2026-06-12 11:43:15,659 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 3 个文件 -2026-06-12 11:43:15,680 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 10 个文件 -2026-06-12 11:43:15,830 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: 8ef2b869b35532c0ab0f43c2b6a2572da82da9c5 -2026-06-12 11:43:15,860 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: 27f46ab177285cf5bdc32f2add987dc2fd3dd3f4 -2026-06-12 11:43:15,897 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:43:15,899 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:43:15,899 - ai_dev_assistant - INFO - unload_plugin:75 - 插件已卸载: test_plugin -2026-06-12 11:43:15,902 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:43:15,904 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:43:15,908 - ai_dev_assistant - INFO - load_plugin:63 - 插件加载成功: auto_plugin -2026-06-12 11:43:15,910 - ai_dev_assistant - WARNING - discover_plugins:26 - 插件目录不存在: /nonexistent/plugins -2026-06-12 11:43:15,913 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin1 -2026-06-12 11:43:15,913 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin2 -2026-06-12 11:43:15,915 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: error_plugin -2026-06-12 11:46:47,157 - ai_dev_assistant - ERROR - get_git_status:61 - 获取仓库状态失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:46:47,166 - ai_dev_assistant - ERROR - get_recent_commits:83 - 获取提交记录失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:46:47,197 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 4 个文件 -2026-06-12 11:46:47,206 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 1 个文件 -2026-06-12 11:46:47,249 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmp8wyew02m/test.py -> /tmp/tmp8wyew02m/organized/code/test.py -2026-06-12 11:46:47,260 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmp76bc3i58/test.py -> /tmp/tmp76bc3i58/organized/custom/test.py -2026-06-12 11:46:47,272 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpevqi53h3/test.py -> /tmp/tmpevqi53h3/organized/code/test_1.py -2026-06-12 11:46:47,283 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 3 个文件 -2026-06-12 11:46:47,303 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 10 个文件 -2026-06-12 11:46:47,456 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: 479b3a1587252fd9ef43e19c67111446e0d0d847 -2026-06-12 11:46:47,484 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: 8c139780ea2b9d08676282affdc5b9e6cd3a3003 -2026-06-12 11:46:47,521 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:46:47,523 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:46:47,523 - ai_dev_assistant - INFO - unload_plugin:75 - 插件已卸载: test_plugin -2026-06-12 11:46:47,528 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:46:47,530 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:46:47,534 - ai_dev_assistant - INFO - load_plugin:63 - 插件加载成功: auto_plugin -2026-06-12 11:46:47,536 - ai_dev_assistant - WARNING - discover_plugins:26 - 插件目录不存在: /nonexistent/plugins -2026-06-12 11:46:47,539 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin1 -2026-06-12 11:46:47,539 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin2 -2026-06-12 11:46:47,541 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: error_plugin -2026-06-12 11:48:11,143 - ai_dev_assistant - ERROR - get_git_status:61 - 获取仓库状态失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:48:11,151 - ai_dev_assistant - ERROR - get_recent_commits:83 - 获取提交记录失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:48:11,182 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 4 个文件 -2026-06-12 11:48:11,191 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 1 个文件 -2026-06-12 11:48:11,233 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpngbxj1hu/test.py -> /tmp/tmpngbxj1hu/organized/code/test.py -2026-06-12 11:48:11,244 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpjjioq1_g/test.py -> /tmp/tmpjjioq1_g/organized/custom/test.py -2026-06-12 11:48:11,256 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpl52eo59k/test.py -> /tmp/tmpl52eo59k/organized/code/test_1.py -2026-06-12 11:48:11,268 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 3 个文件 -2026-06-12 11:48:11,290 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 10 个文件 -2026-06-12 11:48:11,441 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: 797e48aa9a59b27104a3de2986dcdbff788857fa -2026-06-12 11:48:11,470 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: 442677382cde600a8048bf7610db7f80f5fb84f7 -2026-06-12 11:48:11,509 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:48:11,511 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:48:11,511 - ai_dev_assistant - INFO - unload_plugin:75 - 插件已卸载: test_plugin -2026-06-12 11:48:11,516 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:48:11,518 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:48:11,521 - ai_dev_assistant - INFO - load_plugin:63 - 插件加载成功: auto_plugin -2026-06-12 11:48:11,523 - ai_dev_assistant - WARNING - discover_plugins:26 - 插件目录不存在: /nonexistent/plugins -2026-06-12 11:48:11,527 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin1 -2026-06-12 11:48:11,527 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin2 -2026-06-12 11:48:11,529 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: error_plugin -2026-06-12 11:49:35,051 - ai_dev_assistant - ERROR - get_git_status:61 - 获取仓库状态失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:49:35,059 - ai_dev_assistant - ERROR - get_recent_commits:83 - 获取提交记录失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:49:35,090 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 4 个文件 -2026-06-12 11:49:35,098 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 1 个文件 -2026-06-12 11:49:35,144 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpzwsibjcf/test.py -> /tmp/tmpzwsibjcf/organized/code/test.py -2026-06-12 11:49:35,155 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmp_c0xsv22/test.py -> /tmp/tmp_c0xsv22/organized/custom/test.py -2026-06-12 11:49:35,167 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpmxmhxz3u/test.py -> /tmp/tmpmxmhxz3u/organized/code/test_1.py -2026-06-12 11:49:35,178 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 3 个文件 -2026-06-12 11:49:35,198 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 10 个文件 -2026-06-12 11:49:35,327 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: 913d73a142190fddd075c74bf56cb200f95a654e -2026-06-12 11:49:35,351 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: 3453f17c85f3f513eca02f67ca24cd4239398d1a -2026-06-12 11:49:35,383 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:49:35,385 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:49:35,385 - ai_dev_assistant - INFO - unload_plugin:75 - 插件已卸载: test_plugin -2026-06-12 11:49:35,387 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:49:35,388 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:49:35,392 - ai_dev_assistant - INFO - load_plugin:63 - 插件加载成功: auto_plugin -2026-06-12 11:49:35,393 - ai_dev_assistant - WARNING - discover_plugins:26 - 插件目录不存在: /nonexistent/plugins -2026-06-12 11:49:35,396 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin1 -2026-06-12 11:49:35,397 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin2 -2026-06-12 11:49:35,398 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: error_plugin -2026-06-12 11:50:04,600 - ai_dev_assistant - ERROR - get_git_status:61 - 获取仓库状态失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:50:04,608 - ai_dev_assistant - ERROR - get_recent_commits:83 - 获取提交记录失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:50:04,642 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 4 个文件 -2026-06-12 11:50:04,650 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 1 个文件 -2026-06-12 11:50:04,693 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpdqk0d7ms/test.py -> /tmp/tmpdqk0d7ms/organized/code/test.py -2026-06-12 11:50:04,704 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpu3ubp7u9/test.py -> /tmp/tmpu3ubp7u9/organized/custom/test.py -2026-06-12 11:50:04,715 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpfz6fwg1b/test.py -> /tmp/tmpfz6fwg1b/organized/code/test_1.py -2026-06-12 11:50:04,726 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 3 个文件 -2026-06-12 11:50:04,747 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 10 个文件 -2026-06-12 11:50:04,872 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: 445c26bf3ca098e61f06528d21b4ac0d99a73a81 -2026-06-12 11:50:04,892 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: 412175dbef977cd86e5863d62e0fd612cc27c0cb -2026-06-12 11:50:04,924 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:50:04,926 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:50:04,926 - ai_dev_assistant - INFO - unload_plugin:75 - 插件已卸载: test_plugin -2026-06-12 11:50:04,927 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:50:04,929 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:50:04,932 - ai_dev_assistant - INFO - load_plugin:63 - 插件加载成功: auto_plugin -2026-06-12 11:50:04,934 - ai_dev_assistant - WARNING - discover_plugins:26 - 插件目录不存在: /nonexistent/plugins -2026-06-12 11:50:04,937 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin1 -2026-06-12 11:50:04,937 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin2 -2026-06-12 11:50:04,939 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: error_plugin -2026-06-12 11:52:23,371 - ai_dev_assistant - ERROR - get_git_status:61 - 获取仓库状态失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:52:23,407 - ai_dev_assistant - ERROR - get_recent_commits:83 - 获取提交记录失败: 仓库路径不存在: /workspace/backend/nonexistent -2026-06-12 11:52:23,488 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 4 个文件 -2026-06-12 11:52:23,521 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 1 个文件 -2026-06-12 11:52:23,622 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpchz_wqab/test.py -> /tmp/tmpchz_wqab/organized/code/test.py -2026-06-12 11:52:23,653 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmp400xzqdr/test.py -> /tmp/tmp400xzqdr/organized/custom/test.py -2026-06-12 11:52:23,681 - ai_dev_assistant - INFO - organize_file:142 - 文件已归档: /tmp/tmpts4v70ix/test.py -> /tmp/tmpts4v70ix/organized/code/test_1.py -2026-06-12 11:52:23,722 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 3 个文件 -2026-06-12 11:52:23,770 - ai_dev_assistant - INFO - scan_directory:60 - 扫描完成,找到 10 个文件 -2026-06-12 11:52:24,100 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: c91d56e3eba42022232e3fa1381caa34564c57f7 -2026-06-12 11:52:24,162 - ai_dev_assistant - INFO - commit_changes:215 - 提交成功: cda3473cefd4db3e129905d39de66856d4468080 -2026-06-12 11:52:24,261 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:52:24,267 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:52:24,269 - ai_dev_assistant - INFO - unload_plugin:75 - 插件已卸载: test_plugin -2026-06-12 11:52:24,274 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:52:24,282 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: test_plugin -2026-06-12 11:52:24,425 - ai_dev_assistant - INFO - load_plugin:63 - 插件加载成功: auto_plugin -2026-06-12 11:52:24,429 - ai_dev_assistant - WARNING - discover_plugins:26 - 插件目录不存在: /nonexistent/plugins -2026-06-12 11:52:24,433 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin1 -2026-06-12 11:52:24,434 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: plugin2 -2026-06-12 11:52:24,439 - ai_dev_assistant - INFO - load_plugin:68 - 插件加载成功: error_plugin diff --git a/backend/tests/__pycache__/test_file_organizer.cpython-314-pytest-9.0.3.pyc b/backend/tests/__pycache__/test_file_organizer.cpython-314-pytest-9.0.3.pyc deleted file mode 100644 index 3dbb71ad8bd89521569117ef34d2a6164c54e877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53295 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 BYC`}3 diff --git a/backend/tests/__pycache__/test_plugins.cpython-314-pytest-9.0.3.pyc b/backend/tests/__pycache__/test_plugins.cpython-314-pytest-9.0.3.pyc deleted file mode 100644 index c2f604c001e0034d35cf0a8c88f1b167300bd553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17278 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 diff --git a/backend/tests/integration/__pycache__/__init__.cpython-314.pyc b/backend/tests/integration/__pycache__/__init__.cpython-314.pyc deleted file mode 100644 index d0dcdd2b2635cf956f5eebe114cfe1593196d6fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmdPqbB{5=%1k^Yr86GxIV_;^XxSDsOSvlPLxuKW?NPJ*sWMsU} KAW_5uo%E50W8Ou7Jsv1C>AW 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