Skip to content

Commit

Permalink
Added box for gh pr's and issues (#558)
Browse files Browse the repository at this point in the history
* Added box for gh pr's and issues

* only mount for pull and issue

* add title to issue parser

* due to allowing issue analysis, now getPatchUrl allows exceptions to occur and continue

---------

Co-authored-by: josc146 <[email protected]>
  • Loading branch information
JKamsker and josStorer committed Nov 12, 2023
1 parent 524b39f commit e82f62e
Show file tree
Hide file tree
Showing 6 changed files with 121 additions and 5 deletions.
5 changes: 3 additions & 2 deletions src/content-script/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -274,14 +274,15 @@ async function prepareForStaticCard() {
)
return

let initSuccess = true
if (siteName in siteConfig) {
const siteAction = siteConfig[siteName].action
if (siteAction && siteAction.init) {
await siteAction.init(location.hostname, userConfig, getInput, mountComponent)
initSuccess = await siteAction.init(location.hostname, userConfig, getInput, mountComponent)
}
}

mountComponent(siteConfig[siteName], userConfig)
if (initSuccess) mountComponent(siteConfig[siteName], userConfig)
}
}

Expand Down
1 change: 1 addition & 0 deletions src/content-script/site-adapters/baidu/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ export default {
} catch (e) {
/* empty */
}
return true
},
}
1 change: 1 addition & 0 deletions src/content-script/site-adapters/bilibili/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export default {
} catch (e) {
/* empty */
}
return true
},
inputQuery: async () => {
try {
Expand Down
114 changes: 113 additions & 1 deletion src/content-script/site-adapters/github/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { config } from '../index.mjs'

const getPatchUrl = async () => {
const patchUrl = location.origin + location.pathname + '.patch'
const response = await fetch(patchUrl, { method: 'HEAD' })
const response = await fetch(patchUrl, { method: 'HEAD' }).catch(() => ({}))
if (response.ok) return patchUrl
return ''
}
Expand All @@ -16,13 +16,118 @@ 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 the issue title
const title = document.querySelector('.js-issue-title').textContent.trim()

// Get all messages
const messages = parseAllMessages()

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

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

function createChatGPtSummaryPrompt(issueData, isIssue = true) {
// Destructure the issueData object into messages and commentBoxContent
const { title, 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'

prompt += `Title:\n${title}\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 @@ -33,9 +138,16 @@ export default {
} catch (e) {
/* empty */
}
return (await getPatchUrl()) || isPull() || isIssue()
},
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
1 change: 1 addition & 0 deletions src/content-script/site-adapters/youtube/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export default {
} catch (e) {
/* empty */
}
return true
},
inputQuery: async () => {
try {
Expand Down

0 comments on commit e82f62e

Please sign in to comment.