mirror of
https://github.com/wassname/chatGPTBox.git
synced 2026-07-25 13:10:34 +08:00
Added box for gh pr's and issues (#558)
* 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 <josStorer@outlook.com>
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,5 +22,6 @@ export default {
|
||||
} catch (e) {
|
||||
/* empty */
|
||||
}
|
||||
return true
|
||||
},
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ export default {
|
||||
} catch (e) {
|
||||
/* empty */
|
||||
}
|
||||
return true
|
||||
},
|
||||
inputQuery: async () => {
|
||||
try {
|
||||
|
||||
@@ -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 ''
|
||||
}
|
||||
@@ -16,6 +16,106 @@ 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 {
|
||||
@@ -23,6 +123,11 @@ export default {
|
||||
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)
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
|
||||
@@ -21,6 +21,7 @@ export default {
|
||||
} catch (e) {
|
||||
/* empty */
|
||||
}
|
||||
return true
|
||||
},
|
||||
inputQuery: async () => {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user