Spaces:
Sleeping
Sleeping
| import json | |
| import base64 | |
| from github import Github | |
| class GitHubBrain: | |
| def __init__(self, token, repo_name): | |
| """ | |
| GitHubとの接続を初期化します。 | |
| token: GitHubの個人アクセストークン | |
| repo_name: 'ユーザー名/リポジトリ名' の形式 | |
| """ | |
| self.gh = Github(token) | |
| self.repo = self.gh.get_repo(repo_name) | |
| self.memory_path = "memory.json" | |
| def load_memory(self): | |
| """GitHub上の memory.json を読み込む""" | |
| try: | |
| content = self.repo.get_contents(self.memory_path) | |
| # GitHubはBase64でデータを返すのでデコードしてJSONに変換 | |
| return json.loads(content.decoded_content.decode('utf-8')) | |
| except Exception as e: | |
| print(f"Memory load error: {e}") | |
| # ファイルがない場合は初期状態を返す | |
| return {"history": [], "last_action": ""} | |
| def save_memory(self, data, commit_message="AI Memory Update"): | |
| """GitHub上の memory.json を更新する""" | |
| try: | |
| content = self.repo.get_contents(self.memory_path) | |
| # JSONを文字列にしてから保存 | |
| new_content = json.dumps(data, indent=2, ensure_ascii=False) | |
| self.repo.update_file( | |
| path=self.memory_path, | |
| message=commit_message, | |
| content=new_content, | |
| sha=content.sha | |
| ) | |
| except Exception as e: | |
| print(f"Memory save error: {e}") | |
| def get_latest_tasks(self): | |
| """ | |
| GitHubのIssueから未解決のタスク(ラベル: 'task')を取得 | |
| """ | |
| tasks = [] | |
| try: | |
| # 'task'ラベルがついたオープンなIssueを検索 | |
| issues = self.repo.get_issues(state='open', labels=['task']) | |
| for issue in issues: | |
| tasks.append({ | |
| "id": issue.number, | |
| "title": issue.title, | |
| "body": issue.body | |
| }) | |
| except Exception as e: | |
| print(f"Task fetch error: {e}") | |
| return tasks | |
| def report_to_issue(self, issue_number, comment): | |
| """Issueに進捗をコメントとして書き込む""" | |
| try: | |
| issue = self.repo.get_issue(number=issue_number) | |
| issue.create_comment(comment) | |
| except Exception as e: | |
| print(f"Report error: {e}") | |