Update app.py
Browse files
app.py
CHANGED
@@ -4,10 +4,10 @@ import git
|
|
4 |
import os
|
5 |
from pathlib import Path
|
6 |
from datetime import datetime
|
|
|
7 |
from config.settings import Settings
|
8 |
from core.file_scanner import FileScanner, FileInfo
|
9 |
from services.llm_service import LLMService
|
10 |
-
from typing import List, Set, Optional
|
11 |
from main import DirectoryStructureScanner, MarkdownGenerator
|
12 |
|
13 |
class StreamlitFileWriter:
|
@@ -26,12 +26,14 @@ class StreamlitFileWriter:
|
|
26 |
content.append("\n")
|
27 |
return "\n".join(content)
|
28 |
|
|
|
29 |
st.set_page_config(
|
30 |
page_title="Repository Code Analysis",
|
31 |
page_icon="🔍",
|
32 |
layout="wide"
|
33 |
)
|
34 |
|
|
|
35 |
st.markdown("""
|
36 |
<style>
|
37 |
.stApp {
|
@@ -88,31 +90,61 @@ if 'llm_service' not in st.session_state:
|
|
88 |
st.error(str(e))
|
89 |
st.stop()
|
90 |
|
|
|
91 |
st.title("🔍 リポジトリ解析・質問システム")
|
92 |
|
|
|
93 |
with st.sidebar:
|
94 |
st.subheader("📌 使い方")
|
95 |
st.markdown("""
|
96 |
1. GitHubリポジトリのURLを入力
|
97 |
-
2.
|
98 |
-
3.
|
99 |
-
4.
|
100 |
-
5.
|
|
|
101 |
""")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
|
|
|
103 |
repo_url = st.text_input(
|
104 |
"GitHubリポジトリのURLを入力",
|
105 |
placeholder="https://github.com/username/repository.git"
|
106 |
)
|
107 |
|
|
|
108 |
if st.button("スキャン開始", disabled=not repo_url):
|
109 |
try:
|
110 |
with st.spinner('リポジトリを解析中...'):
|
111 |
-
#
|
112 |
selected_extensions = {ext for exts in [selected_prog, selected_config, selected_doc]
|
113 |
-
for ext, selected in exts.items() if selected}
|
|
|
|
|
|
|
|
|
114 |
|
115 |
-
#
|
116 |
generator = MarkdownGenerator(repo_url, selected_extensions)
|
117 |
content_md, structure_md, files = generator.generate_markdowns()
|
118 |
|
@@ -130,6 +162,7 @@ if st.button("スキャン開始", disabled=not repo_url):
|
|
130 |
except Exception as e:
|
131 |
st.error(f"エラーが発生しました: {str(e)}")
|
132 |
|
|
|
133 |
if st.session_state.structure_md and st.session_state.content_md:
|
134 |
tab1, tab2 = st.tabs(["📁 ディレクトリ構造", "📄 ファイル内容"])
|
135 |
|
@@ -155,10 +188,12 @@ if st.session_state.structure_md and st.session_state.content_md:
|
|
155 |
mime="text/markdown"
|
156 |
)
|
157 |
|
|
|
158 |
if st.session_state.repo_content:
|
159 |
st.divider()
|
160 |
st.subheader("💭 コードについて質問する")
|
161 |
|
|
|
162 |
for message in st.session_state.llm_service.conversation_history:
|
163 |
if message.role == "assistant":
|
164 |
st.markdown(f'<div class="chat-message assistant-message">{message.content}</div>',
|
@@ -186,4 +221,4 @@ if st.session_state.repo_content:
|
|
186 |
if error:
|
187 |
st.error(error)
|
188 |
else:
|
189 |
-
st.rerun()
|
|
|
4 |
import os
|
5 |
from pathlib import Path
|
6 |
from datetime import datetime
|
7 |
+
from typing import List, Set, Optional
|
8 |
from config.settings import Settings
|
9 |
from core.file_scanner import FileScanner, FileInfo
|
10 |
from services.llm_service import LLMService
|
|
|
11 |
from main import DirectoryStructureScanner, MarkdownGenerator
|
12 |
|
13 |
class StreamlitFileWriter:
|
|
|
26 |
content.append("\n")
|
27 |
return "\n".join(content)
|
28 |
|
29 |
+
# ページ設定
|
30 |
st.set_page_config(
|
31 |
page_title="Repository Code Analysis",
|
32 |
page_icon="🔍",
|
33 |
layout="wide"
|
34 |
)
|
35 |
|
36 |
+
# スタイル設定
|
37 |
st.markdown("""
|
38 |
<style>
|
39 |
.stApp {
|
|
|
90 |
st.error(str(e))
|
91 |
st.stop()
|
92 |
|
93 |
+
# メインのUIレイアウト
|
94 |
st.title("🔍 リポジトリ解析・質問システム")
|
95 |
|
96 |
+
# サイドバーの設定
|
97 |
with st.sidebar:
|
98 |
st.subheader("📌 使い方")
|
99 |
st.markdown("""
|
100 |
1. GitHubリポジトリのURLを入力
|
101 |
+
2. スキャン対象の拡張子を選択
|
102 |
+
3. スキャンを実行
|
103 |
+
4. ディレクトリ構造と内容を確認
|
104 |
+
5. Markdownファイルをダウンロード
|
105 |
+
6. コードについて質問
|
106 |
""")
|
107 |
+
|
108 |
+
# スキャン対象の拡張子選択
|
109 |
+
st.subheader("🔍 スキャン対象の選択")
|
110 |
+
|
111 |
+
# プログラミング言語
|
112 |
+
st.write("プログラミング言語:")
|
113 |
+
prog_exts = {'.py', '.js', '.ts', '.java', '.cpp', '.hpp', '.c', '.h', '.go', '.rs'}
|
114 |
+
selected_prog = {ext: st.checkbox(ext, value=True, key=f"prog_{ext}")
|
115 |
+
for ext in prog_exts}
|
116 |
+
|
117 |
+
# 設定ファイル
|
118 |
+
st.write("設定ファイル:")
|
119 |
+
config_exts = {'.json', '.yml', '.yaml', '.toml'}
|
120 |
+
selected_config = {ext: st.checkbox(ext, value=True, key=f"config_{ext}")
|
121 |
+
for ext in config_exts}
|
122 |
+
|
123 |
+
# ドキュメント
|
124 |
+
st.write("ドキュメント:")
|
125 |
+
doc_exts = {'.md', '.txt'}
|
126 |
+
selected_doc = {ext: st.checkbox(ext, value=True, key=f"doc_{ext}")
|
127 |
+
for ext in doc_exts}
|
128 |
|
129 |
+
# URLの入力
|
130 |
repo_url = st.text_input(
|
131 |
"GitHubリポジトリのURLを入力",
|
132 |
placeholder="https://github.com/username/repository.git"
|
133 |
)
|
134 |
|
135 |
+
# スキャン実行ボタン
|
136 |
if st.button("スキャン開始", disabled=not repo_url):
|
137 |
try:
|
138 |
with st.spinner('リポジトリを解析中...'):
|
139 |
+
# 選択された拡張子を集約
|
140 |
selected_extensions = {ext for exts in [selected_prog, selected_config, selected_doc]
|
141 |
+
for ext, selected in exts.items() if selected}
|
142 |
+
|
143 |
+
# 選択がない場合はデフォルトを使用
|
144 |
+
if not selected_extensions:
|
145 |
+
selected_extensions = Settings.DEFAULT_EXTENSIONS
|
146 |
|
147 |
+
# MarkdownGeneratorを初期化
|
148 |
generator = MarkdownGenerator(repo_url, selected_extensions)
|
149 |
content_md, structure_md, files = generator.generate_markdowns()
|
150 |
|
|
|
162 |
except Exception as e:
|
163 |
st.error(f"エラーが発生しました: {str(e)}")
|
164 |
|
165 |
+
# スキャン結果の表示
|
166 |
if st.session_state.structure_md and st.session_state.content_md:
|
167 |
tab1, tab2 = st.tabs(["📁 ディレクトリ構造", "📄 ファイル内容"])
|
168 |
|
|
|
188 |
mime="text/markdown"
|
189 |
)
|
190 |
|
191 |
+
# 質問セクション
|
192 |
if st.session_state.repo_content:
|
193 |
st.divider()
|
194 |
st.subheader("💭 コードについて質問する")
|
195 |
|
196 |
+
# 会話履歴の表示
|
197 |
for message in st.session_state.llm_service.conversation_history:
|
198 |
if message.role == "assistant":
|
199 |
st.markdown(f'<div class="chat-message assistant-message">{message.content}</div>',
|
|
|
221 |
if error:
|
222 |
st.error(error)
|
223 |
else:
|
224 |
+
st.rerun()
|