mirror of
https://github.com/sst/opencode.git
synced 2025-08-22 05:54:08 +00:00
sync
This commit is contained in:
parent
0a6152a0e0
commit
27f7cc86ab
1 changed files with 39 additions and 30 deletions
|
@ -113,10 +113,6 @@ type IssueQueryResponse = {
|
|||
}
|
||||
|
||||
const { client, server } = createOpencode()
|
||||
let input = {
|
||||
mockEvent: process.env["MOCK_EVENT"],
|
||||
mockToken: process.env["MOCK_TOKEN"],
|
||||
}
|
||||
let accessToken: string
|
||||
let octoRest: Octokit
|
||||
let octoGraph: typeof graphql
|
||||
|
@ -150,8 +146,8 @@ try {
|
|||
session = await client.session.create<true>().then((r) => r.data)
|
||||
await subscribeSessionEvents()
|
||||
shareId = await (async () => {
|
||||
if (useShare() === false) return
|
||||
if (!useShare() && repoData.data.private) return
|
||||
if (useEnvShare() === false) return
|
||||
if (!useEnvShare() && repoData.data.private) return
|
||||
await client.session.share<true>({ path: session })
|
||||
return session.id.slice(-8)
|
||||
})()
|
||||
|
@ -274,23 +270,7 @@ function assertContextEvent(...events: string[]) {
|
|||
return context
|
||||
}
|
||||
|
||||
function isMock() {
|
||||
const { mockEvent, mockToken } = input
|
||||
return Boolean(mockEvent || mockToken)
|
||||
}
|
||||
|
||||
function isPullRequest() {
|
||||
const context = useContext()
|
||||
const payload = context.payload as IssueCommentEvent
|
||||
return Boolean(payload.issue.pull_request)
|
||||
}
|
||||
|
||||
function useContext() {
|
||||
const { mockEvent } = input
|
||||
return isMock() ? (JSON.parse(mockEvent!) as GitHubContext) : github.context
|
||||
}
|
||||
|
||||
function useModel() {
|
||||
function useEnvModel() {
|
||||
const value = process.env["MODEL"]
|
||||
if (!value) throw new Error(`Environment variable "MODEL" is not set`)
|
||||
|
||||
|
@ -302,7 +282,7 @@ function useModel() {
|
|||
return { providerID, modelID }
|
||||
}
|
||||
|
||||
function useRunUrl() {
|
||||
function useEnvRunUrl() {
|
||||
const { repo } = useContext()
|
||||
|
||||
const runId = process.env["GITHUB_RUN_ID"]
|
||||
|
@ -311,7 +291,7 @@ function useRunUrl() {
|
|||
return `/${repo.owner}/${repo.repo}/actions/runs/${runId}`
|
||||
}
|
||||
|
||||
function useShare() {
|
||||
function useEnvShare() {
|
||||
const value = process.env["SHARE"]
|
||||
if (!value) return undefined
|
||||
if (value === "true") return true
|
||||
|
@ -319,6 +299,33 @@ function useShare() {
|
|||
throw new Error(`Invalid share value: ${value}. Share must be a boolean.`)
|
||||
}
|
||||
|
||||
function useEnvMock() {
|
||||
return {
|
||||
mockEvent: process.env["MOCK_EVENT"],
|
||||
mockToken: process.env["MOCK_TOKEN"],
|
||||
}
|
||||
}
|
||||
|
||||
function useEnvGithubApp() {
|
||||
if (process.env["USE_GITHUB_APP"]?.toLowerCase() === "false") return false
|
||||
return true
|
||||
}
|
||||
|
||||
function isMock() {
|
||||
const { mockEvent, mockToken } = useEnvMock()
|
||||
return Boolean(mockEvent || mockToken)
|
||||
}
|
||||
|
||||
function isPullRequest() {
|
||||
const context = useContext()
|
||||
const payload = context.payload as IssueCommentEvent
|
||||
return Boolean(payload.issue.pull_request)
|
||||
}
|
||||
|
||||
function useContext() {
|
||||
return isMock() ? (JSON.parse(useEnvMock().mockEvent!) as GitHubContext) : github.context
|
||||
}
|
||||
|
||||
function useIssueId() {
|
||||
const payload = useContext().payload as IssueCommentEvent
|
||||
return payload.issue.number
|
||||
|
@ -331,12 +338,14 @@ function useShareUrl() {
|
|||
async function getAccessToken() {
|
||||
const { repo } = useContext()
|
||||
|
||||
if (useEnvGithubApp()) return await core.getIDToken("opencode-github-action")
|
||||
|
||||
let response
|
||||
if (isMock()) {
|
||||
response = await fetch("https://api.opencode.ai/exchange_github_app_token_with_pat", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
Authorization: `Bearer ${input.mockToken}`,
|
||||
Authorization: `Bearer ${useEnvMock().mockToken}`,
|
||||
},
|
||||
body: JSON.stringify({ owner: repo.owner, repo: repo.repo }),
|
||||
})
|
||||
|
@ -366,7 +375,7 @@ async function createComment() {
|
|||
owner: repo.owner,
|
||||
repo: repo.repo,
|
||||
issue_number: useIssueId(),
|
||||
body: `[Working...](${useRunUrl()})`,
|
||||
body: `[Working...](${useEnvRunUrl()})`,
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -525,7 +534,7 @@ async function summarize(response: string) {
|
|||
|
||||
async function chat(text: string, files: PromptFiles = []) {
|
||||
console.log("Sending message to opencode...")
|
||||
const { providerID, modelID } = useModel()
|
||||
const { providerID, modelID } = useEnvModel()
|
||||
|
||||
const chat = await client.session.chat<true>({
|
||||
path: session,
|
||||
|
@ -722,7 +731,7 @@ async function createPR(base: string, branch: string, title: string, body: strin
|
|||
}
|
||||
|
||||
function footer(opts?: { image?: boolean }) {
|
||||
const { providerID, modelID } = useModel()
|
||||
const { providerID, modelID } = useEnvModel()
|
||||
|
||||
const image = (() => {
|
||||
if (!shareId) return ""
|
||||
|
@ -734,7 +743,7 @@ function footer(opts?: { image?: boolean }) {
|
|||
return `<a href="${useShareUrl()}/s/${shareId}"><img width="200" alt="${titleAlt}" src="https://social-cards.sst.dev/opencode-share/${title64}.png?model=${providerID}/${modelID}&version=${session.version}&id=${shareId}" /></a>\n`
|
||||
})()
|
||||
const shareUrl = shareId ? `[opencode session](${useShareUrl()}/s/${shareId}) | ` : ""
|
||||
return `\n\n${image}${shareUrl}[github run](${useRunUrl()})`
|
||||
return `\n\n${image}${shareUrl}[github run](${useEnvRunUrl()})`
|
||||
}
|
||||
|
||||
async function fetchRepo() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue