Skip to content

Commit

Permalink
Added box for gh pr's and issues
Browse files Browse the repository at this point in the history
  • Loading branch information
JKamsker committed Nov 8, 2023
1 parent 25d1480 commit dd652e8
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 2 deletions.
105 changes: 105 additions & 0 deletions src/content-script/site-adapters/github/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,112 @@ const getPatchData = async (patchUrl) => {
return patchData
}

const isPull = () => {
return location.href.match(/\/pull\/\d+$/)
}

const isIssue = () => {
return location.href.match(/\/issues\/\d+$/)
}

function parseGitHubIssueData() {
// Function to parse a single comment
function parseComment(commentElement) {
// Parse the date
const dateElement = commentElement.querySelector('relative-time')
const date = dateElement.getAttribute('datetime')

// Parse the author
const authorElement =
commentElement.querySelector('.author') || commentElement.querySelector('.author-name')
const author = authorElement.textContent.trim()

// Parse the body
const bodyElement = commentElement.querySelector('.comment-body')
const body = bodyElement.textContent.trim()

return { date, author, body }
}

// Function to parse all messages on the page
function parseAllMessages() {
// Find all comment containers
const commentElements = document.querySelectorAll('.timeline-comment-group')
const messages = Array.from(commentElements).map(parseComment)

// The initial post is not a ".timeline-comment-group", so we need to handle it separately
const initialPostElement = document.querySelector('.js-comment-container')
const initialPost = parseComment(initialPostElement)

// Combine the initial post with the rest of the comments
return [initialPost, ...messages]
}

// Function to get the content of the comment input box
function getCommentInputContent() {
const commentInput = document.querySelector('.js-new-comment-form textarea')
return commentInput ? commentInput.value : ''
}

// Get all messages
const messages = parseAllMessages()

// Get the content of the new comment box
const commentBoxContent = getCommentInputContent()

// Return an object with both results
return {
messages: messages,
commentBoxContent: commentBoxContent,
}
}

function createChatGPtSummaryPrompt(issueData, isIssue = true) {
// Destructure the issueData object into messages and commentBoxContent
const { messages, commentBoxContent } = issueData

// Start crafting the prompt
let prompt = ''

if (isIssue) {
prompt =
'Please summarize the following GitHub issue thread.\nWhat is the main issue and key points discussed in this thread?\n\n'
} else {
prompt =
'Please summarize the following GitHub pull request thread.\nWhat is the main issue this pull request is trying to solve?\n\n'
}

prompt += '---\n\n'

// Add each message to the prompt
messages.forEach((message, index) => {
prompt += `Message ${index + 1} by ${message.author} on ${message.date}:\n${message.body}\n\n`
})

// If there's content in the comment box, add it as a draft message
if (commentBoxContent) {
prompt += '---\n\n'
prompt += `Draft message in comment box:\n${commentBoxContent}\n\n`
}

// Add a request for summary at the end of the prompt
// prompt += 'What is the main issue and key points discussed in this thread?'

return prompt
}

export default {
init: async (hostname, userConfig, getInput, mountComponent) => {
try {
let oldUrl = location.href
const checkUrlChange = async () => {
if (location.href !== oldUrl) {
oldUrl = location.href
if (isPull() || isIssue()) {
mountComponent(config.github, userConfig)
return
}

const patchUrl = await getPatchUrl()
if (patchUrl) {
mountComponent(config.github, userConfig)
Expand All @@ -36,6 +135,12 @@ export default {
},
inputQuery: async () => {
try {
if (isPull() || isIssue()) {
const issueData = parseGitHubIssueData()
const summaryPrompt = createChatGPtSummaryPrompt(issueData, isIssue())

return await cropText(summaryPrompt)
}
const patchUrl = await getPatchUrl()
const patchData = await getPatchData(patchUrl)
if (!patchData) return
Expand Down
4 changes: 2 additions & 2 deletions src/content-script/site-adapters/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,9 @@ export const config = {
},
github: {
inputQuery: github.inputQuery,
sidebarContainerQuery: ['#diff', '.commit'],
sidebarContainerQuery: ['#diff', '.commit', '.Layout-main'],
appendContainerQuery: [],
resultsContainerQuery: ['#diff', '.commit'],
resultsContainerQuery: ['#diff', '.commit', '.Layout-main'],
action: {
init: github.init,
},
Expand Down

0 comments on commit dd652e8

Please sign in to comment.