Skip to content

Commit e1dfaea

Browse files
Merge branch 'main' into discordBot/main
2 parents 4399267 + 2573612 commit e1dfaea

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+5308
-16662
lines changed

backend/app/core/events/enums.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class EventType(str, Enum):
1616
PR_UPDATED = "pr.updated"
1717
PR_COMMENTED = "pr.commented"
1818
PR_MERGED = "pr.merged"
19+
1920
PR_REVIEWED = "pr.reviewed"
2021

2122
MESSAGE_CREATED = "message.created"
@@ -28,4 +29,8 @@ class EventType(str, Enum):
2829
ONBOARDING_COMPLETED = "onboarding.completed"
2930
FAQ_REQUESTED = "faq.requested"
3031
KNOWLEDGE_UPDATED = "knowledge.updated"
31-
ANALYTICS_COLLECTED = "analytics.collected"
32+
33+
ANALYTICS_COLLECTED = "analytics.collected"
34+
35+
ANALYTICS_COLLECTED = "analytics.collected"
36+

backend/app/services/vector_db/service.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import logging
21
import os
32
from typing import List, Dict, Any, Optional
3+
from uuid import UUID
4+
from pydantic import BaseModel, Field
45
from dotenv import load_dotenv
56
from supabase import create_client, Client
6-
from embedding_service.service import EmbeddingItem
77

88
load_dotenv()
99

@@ -12,6 +12,14 @@
1212

1313
logger = logging.getLogger(__name__)
1414

15+
class EmbeddingItem(BaseModel):
16+
id: str
17+
18+
collection: str
19+
content: str
20+
metadata: Dict[str, Any] = Field(default_factory=dict)
21+
embedding: Optional[List[float]] = None
22+
1523

1624
class VectorDBService:
1725
"""Service for interacting with Supabase Vector DB via RPC"""

backend/main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import uvicorn
44

55
app = FastAPI()
6-
76
# Include GitHub webhook routes
87
app.include_router(router)
98

109
if __name__ == "__main__":
11-
uvicorn.run(app, host="127.0.0.1", port=8000)
10+
uvicorn.run(app, host="127.0.0.1", port=8000)
11+

backend/routes.py

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import asyncio
2+
import uuid
3+
import logging
4+
from fastapi import APIRouter, Request, HTTPException
5+
from app.core.events.event_bus import EventBus
6+
from app.core.events.enums import EventType, PlatformType
7+
from app.core.events.base import BaseEvent
8+
from app.core.handler.handler_registry import HandlerRegistry
9+
from pydantic import BaseModel
10+
11+
router = APIRouter()
12+
13+
class RepoRequest(BaseModel):
14+
repo_url: str
15+
16+
logging.basicConfig(level=logging.INFO)
17+
handler_registry = HandlerRegistry()
18+
event_bus = EventBus(handler_registry)
19+
20+
# Sample handler function to process events
21+
async def sample_handler(event: BaseEvent):
22+
logging.info(f"Handler received event: {event.event_type} with data: {event.raw_data}")
23+
24+
# Register all the event handlers for issues and pull requests
25+
def register_event_handlers():
26+
# Issue events
27+
event_bus.register_handler(EventType.ISSUE_CREATED, sample_handler, PlatformType.GITHUB)
28+
event_bus.register_handler(EventType.ISSUE_CLOSED, sample_handler, PlatformType.GITHUB)
29+
event_bus.register_handler(EventType.ISSUE_UPDATED, sample_handler, PlatformType.GITHUB)
30+
event_bus.register_handler(EventType.ISSUE_COMMENTED, sample_handler, PlatformType.GITHUB)
31+
# Pull request events
32+
event_bus.register_handler(EventType.PR_CREATED, sample_handler, PlatformType.GITHUB)
33+
event_bus.register_handler(EventType.PR_UPDATED, sample_handler, PlatformType.GITHUB)
34+
event_bus.register_handler(EventType.PR_COMMENTED, sample_handler, PlatformType.GITHUB)
35+
event_bus.register_handler(EventType.PR_MERGED, sample_handler, PlatformType.GITHUB)
36+
37+
@router.post("/github/webhook")
38+
async def github_webhook(request: Request):
39+
payload = await request.json()
40+
event_header = request.headers.get("X-GitHub-Event")
41+
logging.info(f"Received GitHub event: {event_header}")
42+
43+
event_type = None
44+
45+
# Handle issue events
46+
if event_header == "issues":
47+
action = payload.get("action")
48+
if action == "opened":
49+
event_type = EventType.ISSUE_CREATED
50+
elif action == "closed":
51+
event_type = EventType.ISSUE_CLOSED
52+
elif action == "edited":
53+
event_type = EventType.ISSUE_UPDATED
54+
55+
# Handle issue comment events
56+
elif event_header == "issue_comment":
57+
action = payload.get("action")
58+
if action == "created":
59+
event_type = EventType.ISSUE_COMMENTED
60+
61+
# Handle pull request events
62+
elif event_header == "pull_request":
63+
action = payload.get("action")
64+
if action == "opened":
65+
event_type = EventType.PR_CREATED
66+
elif action == "edited":
67+
event_type = EventType.PR_UPDATED
68+
elif action == "closed":
69+
# Determine if the PR was merged or simply closed
70+
if payload.get("pull_request", {}).get("merged"):
71+
event_type = EventType.PR_MERGED
72+
else:
73+
logging.info("Pull request closed without merge; no event dispatched.")
74+
75+
# Handle pull request comment events
76+
elif event_header in ["pull_request_review_comment", "pull_request_comment"]:
77+
action = payload.get("action")
78+
if action == "created":
79+
event_type = EventType.PR_COMMENTED
80+
81+
# Dispatch the event if we have a matching type
82+
if event_type:
83+
event = BaseEvent(
84+
id=str(uuid.uuid4()),
85+
actor_id=str(payload.get("sender", {}).get("id", "unknown")),
86+
event_type=event_type,
87+
platform=PlatformType.GITHUB,
88+
raw_data=payload
89+
)
90+
await event_bus.dispatch(event)
91+
else:
92+
logging.info(f"No matching event type for header: {event_header} with action: {payload.get('action')}")
93+
94+
return {"status": "ok"}

backend/temp/Perspective

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit cd9f19d40e9bdd25172c09d6093386778959690c

frontend/.gitignore

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
1-
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2-
3-
# dependencies
4-
/node_modules
5-
/.pnp
6-
.pnp.js
7-
8-
# testing
9-
/coverage
10-
11-
# production
12-
/build
13-
14-
# misc
15-
.DS_Store
16-
.env.local
17-
.env.development.local
18-
.env.test.local
19-
.env.production.local
20-
1+
# Logs
2+
logs
3+
*.log
214
npm-debug.log*
225
yarn-debug.log*
236
yarn-error.log*
7+
pnpm-debug.log*
8+
lerna-debug.log*
9+
10+
node_modules
11+
dist
12+
dist-ssr
13+
*.local
14+
15+
# Editor directories and files
16+
.vscode/*
17+
!.vscode/extensions.json
18+
.idea
19+
.DS_Store
20+
*.suo
21+
*.ntvs*
22+
*.njsproj
23+
*.sln
24+
*.sw?

frontend/README.md

Lines changed: 0 additions & 70 deletions
This file was deleted.

frontend/eslint.config.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import js from '@eslint/js';
2+
import globals from 'globals';
3+
import reactHooks from 'eslint-plugin-react-hooks';
4+
import reactRefresh from 'eslint-plugin-react-refresh';
5+
import tseslint from 'typescript-eslint';
6+
7+
export default tseslint.config(
8+
{ ignores: ['dist'] },
9+
{
10+
extends: [js.configs.recommended, ...tseslint.configs.recommended],
11+
files: ['**/*.{ts,tsx}'],
12+
languageOptions: {
13+
ecmaVersion: 2020,
14+
globals: globals.browser,
15+
},
16+
plugins: {
17+
'react-hooks': reactHooks,
18+
'react-refresh': reactRefresh,
19+
},
20+
rules: {
21+
...reactHooks.configs.recommended.rules,
22+
'react-refresh/only-export-components': [
23+
'warn',
24+
{ allowConstantExport: true },
25+
],
26+
},
27+
}
28+
);

frontend/index.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8" />
5+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
7+
<title>Devr.AI</title>
8+
</head>
9+
<body>
10+
<div id="root"></div>
11+
<script type="module" src="/src/main.tsx"></script>
12+
</body>
13+
</html>

0 commit comments

Comments
 (0)