@@ -113,10 +113,6 @@ type IssueQueryResponse = {
113113}
114114
115115const { client, server } = createOpencode ( )
116- let input = {
117- mockEvent : process . env [ "MOCK_EVENT" ] ,
118- mockToken : process . env [ "MOCK_TOKEN" ] ,
119- }
120116let accessToken : string
121117let octoRest : Octokit
122118let octoGraph : typeof graphql
@@ -150,8 +146,8 @@ try {
150146 session = await client . session . create < true > ( ) . then ( ( r ) => r . data )
151147 await subscribeSessionEvents ( )
152148 shareId = await ( async ( ) => {
153- if ( useShare ( ) === false ) return
154- if ( ! useShare ( ) && repoData . data . private ) return
149+ if ( useEnvShare ( ) === false ) return
150+ if ( ! useEnvShare ( ) && repoData . data . private ) return
155151 await client . session . share < true > ( { path : session } )
156152 return session . id . slice ( - 8 )
157153 } ) ( )
@@ -274,23 +270,7 @@ function assertContextEvent(...events: string[]) {
274270 return context
275271}
276272
277- function isMock ( ) {
278- const { mockEvent, mockToken } = input
279- return Boolean ( mockEvent || mockToken )
280- }
281-
282- function isPullRequest ( ) {
283- const context = useContext ( )
284- const payload = context . payload as IssueCommentEvent
285- return Boolean ( payload . issue . pull_request )
286- }
287-
288- function useContext ( ) {
289- const { mockEvent } = input
290- return isMock ( ) ? ( JSON . parse ( mockEvent ! ) as GitHubContext ) : github . context
291- }
292-
293- function useModel ( ) {
273+ function useEnvModel ( ) {
294274 const value = process . env [ "MODEL" ]
295275 if ( ! value ) throw new Error ( `Environment variable "MODEL" is not set` )
296276
@@ -302,7 +282,7 @@ function useModel() {
302282 return { providerID, modelID }
303283}
304284
305- function useRunUrl ( ) {
285+ function useEnvRunUrl ( ) {
306286 const { repo } = useContext ( )
307287
308288 const runId = process . env [ "GITHUB_RUN_ID" ]
@@ -311,14 +291,41 @@ function useRunUrl() {
311291 return `/${ repo . owner } /${ repo . repo } /actions/runs/${ runId } `
312292}
313293
314- function useShare ( ) {
294+ function useEnvShare ( ) {
315295 const value = process . env [ "SHARE" ]
316296 if ( ! value ) return undefined
317297 if ( value === "true" ) return true
318298 if ( value === "false" ) return false
319299 throw new Error ( `Invalid share value: ${ value } . Share must be a boolean.` )
320300}
321301
302+ function useEnvMock ( ) {
303+ return {
304+ mockEvent : process . env [ "MOCK_EVENT" ] ,
305+ mockToken : process . env [ "MOCK_TOKEN" ] ,
306+ }
307+ }
308+
309+ function useEnvGithubApp ( ) {
310+ if ( process . env [ "USE_GITHUB_APP" ] ?. toLowerCase ( ) === "false" ) return false
311+ return true
312+ }
313+
314+ function isMock ( ) {
315+ const { mockEvent, mockToken } = useEnvMock ( )
316+ return Boolean ( mockEvent || mockToken )
317+ }
318+
319+ function isPullRequest ( ) {
320+ const context = useContext ( )
321+ const payload = context . payload as IssueCommentEvent
322+ return Boolean ( payload . issue . pull_request )
323+ }
324+
325+ function useContext ( ) {
326+ return isMock ( ) ? ( JSON . parse ( useEnvMock ( ) . mockEvent ! ) as GitHubContext ) : github . context
327+ }
328+
322329function useIssueId ( ) {
323330 const payload = useContext ( ) . payload as IssueCommentEvent
324331 return payload . issue . number
@@ -331,12 +338,14 @@ function useShareUrl() {
331338async function getAccessToken ( ) {
332339 const { repo } = useContext ( )
333340
341+ if ( useEnvGithubApp ( ) ) return await core . getIDToken ( "opencode-github-action" )
342+
334343 let response
335344 if ( isMock ( ) ) {
336345 response = await fetch ( "https://api.opencode.ai/exchange_github_app_token_with_pat" , {
337346 method : "POST" ,
338347 headers : {
339- Authorization : `Bearer ${ input . mockToken } ` ,
348+ Authorization : `Bearer ${ useEnvMock ( ) . mockToken } ` ,
340349 } ,
341350 body : JSON . stringify ( { owner : repo . owner , repo : repo . repo } ) ,
342351 } )
@@ -366,7 +375,7 @@ async function createComment() {
366375 owner : repo . owner ,
367376 repo : repo . repo ,
368377 issue_number : useIssueId ( ) ,
369- body : `[Working...](${ useRunUrl ( ) } )` ,
378+ body : `[Working...](${ useEnvRunUrl ( ) } )` ,
370379 } )
371380}
372381
@@ -525,7 +534,7 @@ async function summarize(response: string) {
525534
526535async function chat ( text : string , files : PromptFiles = [ ] ) {
527536 console . log ( "Sending message to opencode..." )
528- const { providerID, modelID } = useModel ( )
537+ const { providerID, modelID } = useEnvModel ( )
529538
530539 const chat = await client . session . chat < true > ( {
531540 path : session ,
@@ -722,7 +731,7 @@ async function createPR(base: string, branch: string, title: string, body: strin
722731}
723732
724733function footer ( opts ?: { image ?: boolean } ) {
725- const { providerID, modelID } = useModel ( )
734+ const { providerID, modelID } = useEnvModel ( )
726735
727736 const image = ( ( ) => {
728737 if ( ! shareId ) return ""
@@ -734,7 +743,7 @@ function footer(opts?: { image?: boolean }) {
734743 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`
735744 } ) ( )
736745 const shareUrl = shareId ? `[opencode session](${ useShareUrl ( ) } /s/${ shareId } ) | ` : ""
737- return `\n\n${ image } ${ shareUrl } [github run](${ useRunUrl ( ) } )`
746+ return `\n\n${ image } ${ shareUrl } [github run](${ useEnvRunUrl ( ) } )`
738747}
739748
740749async function fetchRepo ( ) {
0 commit comments