openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
132 lines • 28.6 kB
JavaScript
import{n as e}from"./rolldown-runtime-8BhlS34s.js";import{Gu as t,I as n,Pu as r,W as i,Wu as a,bu as o,ll as s,pl as c,xu as l,yu as u,zu as d}from"./control-ui-core-CBJ5efDh.js";import{ca as f,sa as p}from"./control-ui-core-DtLivg_r.js";import{G as m,J as h,W as g,c as _,l as v}from"./lit-runtime-IOnANfcZ.js";import{At as ee,jt as te,kt as ne}from"./control-ui-boot-shared-UG5ko-VG.js";import{Kt as re,Mt as ie,jt as y,qt as b,wa as x}from"./ui-CmSP4d14.js";import{I as S,J as ae,Y as C,Z as w,an as T,na as E,on as D,q as O,ta as k,tt as A}from"./control-ui-boot-shared-XreXSF7h.js";var j,M;function N(){return(N=e((()=>{t(),j={agentTools:{githubVerify:`Verify`,githubConnection:`Gateway connection`,githubDisconnected:`Disconnected`,githubAccessRequired:`Access required`,githubReadRequired:`GitHub identity status requires operator.read access.`,githubAdminRequired:`Connecting, replacing, or removing a GitHub identity requires operator.admin access.`,githubEffectiveAuthor:`Effective Git Author`,githubEffectiveCredential:`Effective credential`,githubEffectiveAccessExpiry:`Effective access expiry`,githubEffectiveRefresh:`Effective refresh token`,githubEffectiveScopes:`Effective OAuth scopes`,githubNoAccount:`No verified account`,githubAuthorUnset:`Not set`,githubErrorTitle:`Error`,githubStateVerified:`Verified`,githubStateUnverified:`Not verified`,githubStateRateLimited:`Rate limited`,githubStateUnavailable:`No credentials`,githubStateConfiguredUnavailable:`Configured, but unavailable`,githubAuthorization:`GitHub authorization`,githubStarting:`Requesting code…`,githubCancelling:`Requesting cancellation…`,githubFinishing:`Authorization is already finishing…`,githubCancelFailed:`Cancellation could not be confirmed`,githubCancelFailedHint:`Authorization is still active. Wait for it to finish or try cancellation again.`,githubRetryCancel:`Try cancel again`,githubCodeReady:`Code ready`,githubWaiting:`Waiting for approval…`,githubSlowDown:`GitHub asked us to wait longer…`,githubNetworkRetry:`Connection interrupted; retry scheduled`,githubAuthorizationHint:`Open GitHub yourself, then enter the one-time code shown here.`,githubDeviceCode:`One-time code`,githubDeviceCodeHint:`This code authorizes only the selected identity scope.`,githubExpires:`Code expires`,githubOpen:`Open github.com/login/device`,githubCopyCode:`Copy code`,githubAuthorizationFailed:`GitHub authorization failed`,githubExpired:`The one-time code expired. Connect again to request a new code.`,githubDenied:`GitHub authorization was denied. Connect again when you are ready.`,githubIncorrectCode:`GitHub rejected this device code. Connect again to request a new code.`,githubConnect:`Connect GitHub`,githubConnectHint:`Authorize GitHub without pasting a long-lived credential into the browser.`,githubPatFallback:`Personal access token`,githubPatFallbackHint:`Use a fine-grained PAT only when browser authorization is unsuitable.`,githubUsePat:`Use a PAT instead`,githubToken:`Fine-grained PAT`,githubTokenDesc:`Stored in a private managed GitHub CLI profile; only the setup handoff is removed.`,githubTokenToggle:`Toggle token visibility`,githubPasteToken:`Paste a fine-grained personal access token first.`,githubAuthorName:`Author Name`,githubAuthorEmail:`Author Email`,githubConfigure:`Save Identity`,githubConfiguredHere:`Configured here`,githubInheritedHere:`Inherited`,githubKindNative:`Native GitHub CLI`,githubKindPat:`Managed personal access token`,githubKindOAuth:`Managed GitHub authorization`,githubRefreshAvailable:`Available`,githubRefreshExpired:`Expired — reconnect required`,githubRefreshUnavailable:`Unavailable — reconnect required`,githubRefreshRefreshing:`Refreshing…`,githubRefreshFailed:`Refresh failed — retrying`,githubUseSystemNewRuns:`Use system for new runs`,githubUseNativeNewRuns:`Use native for new runs`,githubUseSystemConfirmTitle:`Use the system GitHub identity for new runs?`,githubUseNativeConfirmTitle:`Use the native GitHub identity for new runs?`,githubUseSystemConfirmMessage:`New runs for this agent will use the System identity. Active runs keep their current identity until they exit or restart. Revoke the GitHub authorization or PAT separately on GitHub if needed.`,githubUseNativeConfirmMessage:`New runs without an agent override will use the native GitHub identity. Active runs keep their current identity until they exit or restart. Revoke the GitHub authorization or PAT separately on GitHub if needed.`,githubAgentMutationHint:`Authorization and removal below apply to This Agent for new runs.`,githubSystemMutationHint:`Authorization and removal below apply to System for new runs.`}},M=Object.assign(()=>Object.assign(a.agentTools,j.agentTools),{catalog:j})})))()}function P(e){let t=x(e)?e:void 0,n=x(t?.gitAuthor)?t.gitAuthor:void 0;return{token:``,name:typeof n?.name==`string`?n.name:``,email:typeof n?.email==`string`?n.email:``}}function F(e){return JSON.stringify(e?.kind===`shared`?{kind:e.kind,agentId:e.agentId}:e)}function I(e,t){return`${e.target.kind===`personal`?`users`:`tools`}.github.authorize.${t}`}function L(e){e.start?.requestId&&e.owner.client.request(I(e.owner,`cancel`),{requestId:e.start.requestId}).catch(()=>void 0)}function R(){return(R=e((()=>{})))()}var z;function B(){return(B=e((()=>{re(),l(),R(),z=class{constructor(e){this.host=e,this.state={phase:`idle`},this.operation=null}get active(){return this.operation!==null}isCurrent(e){return this.operation===e&&this.host.isCurrent(e.owner)}retire(e){let t=this.operation;this.operation=null,this.state={phase:`idle`},t&&(t.timer!==void 0&&clearTimeout(t.timer),t.controller.abort(),e&&L(t))}restore(e,t){if(this.active||!this.host.isCurrent(e))return;let n={owner:e,controller:new AbortController,start:t,displayExpiresAtMs:Date.now()+t.expiresInMs};this.operation=n,this.present(n,`code`),this.schedule(n,t.pollAfterMs)}present(e,t,n){e.start&&(this.state={...e.start,displayExpiresAtMs:e.displayExpiresAtMs??Date.now(),phase:t,...e.cancelError?{message:e.cancelError}:{},...n?{slowedDown:!0}:{}},this.host.requestUpdate())}async start(e){let t={owner:e,controller:new AbortController};this.operation=t,this.state={phase:`starting`},this.host.requestUpdate();try{let n=e.target,r=await e.client.request(I(e,`start`),n.kind===`personal`?{}:{scope:n.scope,agentId:n.agentId},{signal:t.controller.signal});if(t.start=r,t.displayExpiresAtMs=Date.now()+r.expiresInMs,!this.isCurrent(t)){L(t);return}if(t.cancelRequested){await this.finishCancellation(t);return}this.present(t,`code`),this.schedule(t,r.pollAfterMs)}catch(e){if(!this.isCurrent(t))return;this.operation=null,this.state={phase:`failed`,message:u(e)},this.host.requestUpdate()}}async cancel(){let e=this.operation;!e||e.cancelRequested||e.cancelInFlight||(e.cancelRequested=!0,e.cancelError=void 0,e.start?this.present(e,`cancelling`):(this.state={phase:`cancelling`},this.host.requestUpdate()),e.start?.requestId&&await this.finishCancellation(e))}async finishCancellation(e){if(e.start?.requestId&&!e.cancelInFlight&&this.isCurrent(e)){e.cancelInFlight=!0;try{let t=await e.owner.client.request(I(e.owner,`cancel`),{requestId:e.start.requestId});if(!this.isCurrent(e))return;if(t.cancelled){this.retire(!1),this.host.finish(e.owner,!1),this.host.requestUpdate();return}e.cancelTooLate=!0,this.present(e,`finishing`)}catch(t){if(!this.isCurrent(e))return;e.cancelRequested=!1,e.cancelError=u(t),this.present(e,`cancel_error`)}finally{e.cancelInFlight=!1}e.timer===void 0&&!e.pollInFlight&&this.schedule(e,e.start.pollAfterMs)}}schedule(e,t){this.isCurrent(e)&&e.start&&(e.timer!==void 0&&clearTimeout(e.timer),e.timer=setTimeout(()=>{e.timer=void 0,this.isCurrent(e)&&this.poll(e)},b(t,{minMs:0})))}async requestPoll(e){let t=()=>e.owner.client.request(I(e.owner,`poll`),{requestId:e.start?.requestId},{signal:e.controller.signal});if(e.owner.target.kind===`personal`)return{result:await t(),refreshError:null};if(!this.host.runExternalMutation)throw Error(`Shared GitHub configuration is unavailable.`);let n=await this.host.runExternalMutation(n=>{if(n!==e.owner.client)throw Error(`Connection changed before GitHub authorization was checked.`);return t()},{canDispatch:()=>this.isCurrent(e),dispatchError:`Access changed before GitHub authorization was checked.`,shouldRefresh:e=>e.status===`success`});if(!n.ok)throw Error(n.error);return{result:n.value,refreshError:n.refresh.ok?null:n.refresh.error}}async poll(e){if(!e.start?.requestId||!this.isCurrent(e))return;this.present(e,e.cancelTooLate?`finishing`:e.cancelError?`cancel_error`:`pending`),e.pollInFlight=!0,this.host.begin(e.owner);let t=!1;try{let{result:n,refreshError:r}=await this.requestPoll(e);if(!this.isCurrent(e))return;if(n.status===`pending`||n.status===`slow_down`||n.status===`network_error`){let t=e.cancelTooLate?`finishing`:e.cancelError?`cancel_error`:n.status===`network_error`?`network_error`:`pending`;this.present(e,t,n.status===`slow_down`),this.schedule(e,n.retryAfterMs);return}n.status===`success`?(this.host.applySuccess(e.owner,n,r),this.host.authorizationSucceeded?.(),this.state={phase:`idle`},t=!0):this.state={phase:n.status},this.operation=null}catch(t){this.isCurrent(e)&&(this.operation=null,this.state={phase:`failed`,message:u(t)})}finally{e.pollInFlight=!1,this.host.finish(e.owner,t)}}}})))()}var V;function H(){return(H=e((()=>{k(),r(),N(),s(),l(),ie(),B(),R(),V=class{constructor(e){this.host=e,this.status=null,this.personal=null,this.system=null,this.loading=!1,this.busy=!1,this.error=null,this.statusReadable=!1,this.configurable=!1,this.authorizable=!1,this.tokenRevealed=!1,this.patVisible=!1,this.target=null,this.client=null,this.connected=!1,this.clientRevision=-1,this.requestRevision=0,this.displayedIdentityFingerprint=null,this.verificationQueued=!1,this.confirmationPending=!1,this.mutationOwner=null,this.mutationIdentityChanged=!1,this.selectedDraft=P(void 0),this.draftDirty=!1,this.configFingerprint=``,this.dispose=()=>{this.deviceAuthorization.retire(!0),this.requestRevision+=1,this.client=null,this.target=null,this.connected=!1,this.status=null,this.personal=null,this.system=null,this.loading=!1,this.busy=!1,this.mutationOwner=null,this.selectedDraft=P(void 0)},this.deviceAuthorization=new z({...e,isCurrent:e=>this.authorizable&&this.isCurrent(e),begin:e=>this.beginMutation(e),finish:(e,t)=>this.finishMutation(e,t),applySuccess:(e,t,n)=>{if(e.target.kind===`personal`&&`personal`in t)this.personal=t.personal;else if(e.target.kind===`shared`&&`githubStatus`in t)this.applyMutationStatus({...e,target:e.target},t.githubStatus,{...this.selectedDraft,token:``},n);else throw Error(`Gateway returned GitHub authorization for a different target.`)}})}get scope(){return this.target?.kind===`personal`?`personal`:this.target?.scope??`system`}get authorization(){return this.deviceAuthorization.state}get authorizationActive(){return this.deviceAuthorization.active}get connectionReady(){return this.connected&&this.client!==null}get draft(){return this.scope===`personal`?P(void 0):this.selectedDraft}queueVerification(){!this.verificationQueued&&!this.confirmationPending&&this.statusReadable&&this.connectionReady&&this.target&&!this.authorizationActive&&(this.verificationQueued=!0,queueMicrotask(()=>{this.verificationQueued=!1,this.verify()}))}sync(e){let t=this.client!==e.client||this.connected!==e.connected||this.clientRevision!==e.clientRevision,n=F(this.target)!==F(e.target),r=e.target?.kind===`personal`?`personal`:e.target?.scope??`system`,i=this.scope!==r,a=e.target?.kind===`shared`&&e.configurable,o=this.statusReadable!==e.statusReadable||this.configurable!==a||this.authorizable!==e.authorizable,s=t||n||i||o;s&&(this.deviceAuthorization.retire(!0),this.requestRevision+=1,this.mutationOwner=null,this.mutationIdentityChanged=!1),this.client=e.client,this.connected=e.connected,this.clientRevision=e.clientRevision,this.statusReadable=e.statusReadable,this.configurable=a,this.authorizable=e.authorizable,this.target=e.target?{...e.target}:null;let l=e.target?.kind===`shared`?c(e.target.config,e.target.agentId):null,u={system:l?.globalTools?.github,agent:l?.entry?.tools?.github},d=JSON.stringify(r===`personal`?null:{effective:u.agent??u.system,selectedScope:r,selected:u[r]}),f=this.displayedIdentityFingerprint!==null&&this.displayedIdentityFingerprint!==d;this.displayedIdentityFingerprint=d;let p=this.mutationOwner,m=f&&p!==null&&this.busy&&this.isCurrent(p);m?this.mutationIdentityChanged=!0:f&&(this.requestRevision+=1,this.deviceAuthorization.retire(!0)),(s||f&&!m)&&(this.status=null,this.personal=null,this.system=null,this.error=null,this.loading=!1,this.busy=!1,this.tokenRevealed=!1,this.patVisible=!1,this.confirmationPending=!1);let h=r===`personal`?void 0:u[r],g=JSON.stringify(h??null);(t||n||i||!this.draftDirty&&this.configFingerprint!==g)&&(this.selectedDraft=P(h),this.draftDirty=!1,this.configFingerprint=g),!(t||n)&&f&&!m&&this.queueVerification()}showPatFallback(){this.configurable&&this.scope!==`personal`&&!this.authorizationActive&&(this.patVisible=!0,this.host.requestUpdate())}hidePatFallback(){this.busy||(this.patVisible=!1,this.tokenRevealed=!1,this.host.requestUpdate())}toggleTokenVisibility(){this.configurable&&this.scope!==`personal`&&(this.tokenRevealed=!this.tokenRevealed,this.host.requestUpdate())}setDraft(e,t){this.scope!==`personal`&&(this.selectedDraft={...this.selectedDraft,[e]:t},this.draftDirty=!0,this.host.requestUpdate())}captureRequest(){if(!this.client||!this.connected||!this.target)return null;let e=this.target;return{client:this.client,target:e.kind===`personal`?{...e}:{kind:`shared`,scope:e.scope,agentId:e.agentId},clientRevision:this.clientRevision,requestRevision:++this.requestRevision}}isCurrent(e){return this.client===e.client&&this.connected&&this.clientRevision===e.clientRevision&&this.requestRevision===e.requestRevision}async startAuthorization(){if(!this.authorizable||this.authorizationActive||this.busy||this.confirmationPending)return;let e=this.captureRequest();e&&(this.loading=!1,this.error=null,this.patVisible=!1,await this.deviceAuthorization.start(e))}cancelAuthorization(){return this.deviceAuthorization.cancel()}beginMutation(e){this.mutationOwner=e,this.mutationIdentityChanged=!1,this.loading=!1,this.busy=!0,this.error=null,this.host.requestUpdate()}finishMutation(e,t){if(this.mutationOwner!==e)return;let n=this.mutationIdentityChanged&&!t;this.mutationOwner=null,this.mutationIdentityChanged=!1,this.isCurrent(e)&&(this.busy=!1,this.host.requestUpdate(),n&&this.queueVerification())}async runMutation(e,t){this.beginMutation(e);let n=!1;try{n=await t()}catch(t){this.isCurrent(e)&&(this.error=u(t))}finally{this.finishMutation(e,n)}return n}acceptSharedStatus(e,t){if(t.agentId!==e.target.agentId||t.selectedScope!==e.target.scope||t.selected.scope!==e.target.scope)throw Error(`Gateway returned GitHub identity status for a different target.`);this.status=t,e.target.scope===`system`&&(this.system=t.selected.identity)}applyMutationStatus(e,t,n,r){this.isCurrent(e)&&(this.acceptSharedStatus(e,t),this.selectedDraft=n,this.draftDirty=!1,this.tokenRevealed=!1,this.patVisible=!1,this.error=r?`GitHub identity was updated, but its configuration refresh failed: ${r}`:null)}async verify(){if(!this.statusReadable||this.loading||this.busy||this.confirmationPending||this.authorizationActive)return;let e=this.captureRequest();if(e){this.loading=!0,this.error=null,this.host.requestUpdate();try{if(e.target.kind===`personal`){let t=await e.client.request(`users.github.status`,{});if(!this.isCurrent(e))return;this.personal=t.personal,this.system=t.system,t.personal.pending&&this.authorizable&&this.deviceAuthorization.restore(e,t.personal.pending)}else{let t=await e.client.request(`tools.github.status`,{agentId:e.target.agentId,selectedScope:e.target.scope});this.isCurrent(e)&&this.acceptSharedStatus({...e,target:e.target},t)}}catch(t){this.isCurrent(e)&&(this.error=u(t))}finally{this.isCurrent(e)&&(this.loading=!1,this.host.requestUpdate())}}}async disconnect(){if(this.target?.kind!==`personal`||!this.authorizable||this.busy||this.authorizationActive)return;let e=this.captureRequest();e&&await this.runMutation(e,async()=>(await e.client.request(`users.github.disconnect`,{}),this.isCurrent(e)?(this.personal=null,!0):!1))&&this.isCurrent(e)&&await this.verify()}async configure(){if(this.target?.kind!==`shared`||!this.configurable||this.busy||this.authorizationActive||this.confirmationPending)return;let e={...this.draft};if(!e.token.trim()){this.error=d(`agentTools.githubPasteToken`),this.host.requestUpdate();return}let t=this.captureRequest(),n=this.host.runExternalMutation;if(!t||t.target.kind!==`shared`||!n)return;let r={...t,target:t.target},i=e.name.trim(),a=e.email.trim();await this.runMutation(r,async()=>{let t=`github-setup-${y().replaceAll(`-`,``).toLowerCase()}`,o=!1;try{if(await r.client.request(`secrets.store.set`,{name:t,value:e.token,kind:`secret`,allowedHosts:[]}),o=!0,!this.isCurrent(r))return!1;let s=await this.runConfigureMutation(r,n,{scope:r.target.scope,agentId:r.target.agentId,mode:`managed`,secretName:t,...i||a?{gitAuthor:{...i?{name:i}:{},...a?{email:a}:{}}}:{}});if(!s.ok)throw Error(s.error);return o=!1,this.applyMutationStatus(r,s.value,{...e,token:``},s.refresh.ok?null:s.refresh.error),!0}finally{o&&await r.client.request(`secrets.store.delete`,{name:t}).catch(()=>void 0)}})}async inherit(){if(this.target?.kind!==`shared`||!this.configurable||this.busy||this.authorizationActive||this.confirmationPending)return;let e=this.captureRequest(),t=this.host.runExternalMutation;if(!e||e.target.kind!==`shared`||!t)return;let n={...e,target:e.target},r=n.target.scope;this.confirmationPending=!0;let i=!1;try{i=await E({title:d(r===`agent`?`agentTools.githubUseSystemConfirmTitle`:`agentTools.githubUseNativeConfirmTitle`),message:d(r===`agent`?`agentTools.githubUseSystemConfirmMessage`:`agentTools.githubUseNativeConfirmMessage`),confirmLabel:d(r===`agent`?`agentTools.githubUseSystemNewRuns`:`agentTools.githubUseNativeNewRuns`)})}finally{this.isCurrent(n)&&(this.confirmationPending=!1)}i&&this.isCurrent(n)&&this.configurable&&!this.busy&&!this.authorizationActive&&await this.runMutation(n,async()=>{let e=await this.runConfigureMutation(n,t,{scope:r,agentId:n.target.agentId,mode:`inherit`});if(!e.ok)throw Error(e.error);return this.isCurrent(n)?(this.applyMutationStatus(n,e.value,{token:``,name:``,email:``},e.refresh.ok?null:e.refresh.error),!0):!1})}runConfigureMutation(e,t,n){return t(t=>{if(t!==e.client)throw Error(`Connection changed before the GitHub identity update started.`);return t.request(`tools.github.configure`,n)},{canDispatch:()=>this.isCurrent(e)&&this.configurable,dispatchError:`Access changed before the GitHub identity update started.`})}},M()})))()}function U(e){return w({kind:e.error?`warn`:`muted`,label:e.loading?d(`githubConnections.checking`):e.error?d(`githubConnections.statusUnavailable`):d(`githubConnections.notLoaded`)})}function W(e,t){if(!e)return U(t);let n=Y[e.credentialState];return w({kind:n.kind,label:d(n.label)})}function G(e){if(!e)return m;let t=[e.gitAuthor.name,e.gitAuthor.email].filter(Boolean).join(` · `);return h`<details class="settings-row settings-row--stacked">
<summary class="settings-row__title">${d(`githubConnections.details`)}</summary>
<div class="settings-subrows">
${O({title:d(`agentTools.githubEffectiveAuthor`),control:A(t||d(`agentTools.githubAuthorUnset`))})}
${O({title:d(`agentTools.githubEffectiveCredential`),control:A(d(X[e.credentialKind]))})}
${e.credentialKind===`managed-oauth`?h`
${O({title:d(`agentTools.githubEffectiveAccessExpiry`),control:A(e.accessExpiresAtMs?n(e.accessExpiresAtMs):d(`common.na`))})}
${O({title:d(`agentTools.githubEffectiveRefresh`),control:A(d(Z[e.refreshState]))})}
${O({title:d(`agentTools.githubEffectiveScopes`),control:A(e.oauthScopes.join(`, `)||d(`common.none`))})}
`:m}
</div>
</details>`}function K(e){let t=e.authorization;if(!e.connectionReady)return O({title:d(`agentTools.githubConnection`),control:w({kind:`muted`,label:d(`agentTools.githubDisconnected`)})});if(!e.statusReadable)return O({title:w({kind:`danger`,label:d(`agentTools.githubAccessRequired`)}),description:d(`agentTools.githubReadRequired`)});if(!e.authorizable)return O({title:w({kind:`warn`,label:d(`agentTools.githubAccessRequired`)}),description:d(`agentTools.githubAdminRequired`)});if(t.phase===`starting`||t.phase===`cancelling`&&!(`userCode`in t))return O({title:d(`agentTools.githubAuthorization`),control:h`
${w({kind:`accent`,label:t.phase===`cancelling`?d(`agentTools.githubCancelling`):d(`agentTools.githubStarting`)})}
${t.phase===`starting`?h`<button
class="btn btn--sm"
=${()=>void e.cancelAuthorization()}
>
${d(`common.cancel`)}
</button>`:m}
`});if(`userCode`in t){let r=d(`agentTools.githubCopyCode`),i=d(t.phase===`pending`&&t.slowedDown?`agentTools.githubSlowDown`:Q[t.phase]);return h`
${O({title:d(`agentTools.githubAuthorization`),description:t.phase===`cancel_error`?t.message?`${d(`agentTools.githubCancelFailedHint`)} ${t.message}`:d(`agentTools.githubCancelFailedHint`):d(`agentTools.githubAuthorizationHint`),control:h`
${w({kind:t.phase===`network_error`||t.phase===`cancel_error`?`warn`:`accent`,label:i})}
<a
class="btn"
href=${t.verificationUri}
target=${ne}
rel=${ee()}
>
${d(`agentTools.githubOpen`)}
</a>
`})}
${O({title:d(`agentTools.githubDeviceCode`),description:d(`agentTools.githubDeviceCodeHint`),control:h`
<code class="settings-row__value settings-row__value--mono github-device-code"
>${t.userCode}</code
>
${v(t.userCode,h`<button
type="button"
class="btn btn--sm"
=${e=>void T(e,t.userCode,r)}
>
${p.copy}
<span data-copy-label>${r}</span>
</button>`)}
`})}
${O({title:d(`agentTools.githubExpires`),control:A(n(t.displayExpiresAtMs,{dateStyle:`medium`,timeStyle:`short`}))})}
<div class="settings-row settings-row--actions">
<div class="settings-row__control">
${t.phase===`cancelling`||t.phase===`finishing`?m:h`<button
type="button"
class="btn"
=${()=>void e.cancelAuthorization()}
>
${t.phase===`cancel_error`?d(`agentTools.githubRetryCancel`):d(`common.cancel`)}
</button>`}
</div>
</div>
`}if(e.patVisible)return m;let r=h`<button
class="btn"
=${()=>void e.startAuthorization()}
>
${d(`githubConnections.continue`)}
</button>`,i=e.scope===`personal`?m:h`<button class="btn" =${()=>e.showPatFallback()}>
${d(`agentTools.githubUsePat`)}
</button>`;if(t.phase===`access_denied`||t.phase===`expired`||t.phase===`incorrect_device_code`||t.phase===`failed`){let e=t.phase===`expired`?d(`agentTools.githubExpired`):t.phase===`access_denied`?d(`agentTools.githubDenied`):t.phase===`incorrect_device_code`?d(`agentTools.githubIncorrectCode`):t.message??d(`agentTools.githubAuthorizationFailed`);return O({title:w({kind:`danger`,label:d(`agentTools.githubAuthorizationFailed`)}),description:o(e),control:h`${r}${i}`})}return h`
${O({title:d(`agentTools.githubAuthorization`),description:d(`agentTools.githubConnectHint`),control:r})}
${e.scope===`personal`?m:O({title:d(`agentTools.githubPatFallback`),description:d(`agentTools.githubPatFallbackHint`),control:i})}
`}function q(e,t){return e?O({title:d(`agentTools.githubErrorTitle`),description:h`<span role="alert">${o(e)}</span>`,control:t}):m}function J(e){let t=e.draft,n=e.busy||!e.configurable||e.authorizationActive,r=(r,i)=>O({title:i,control:h` <input
class="settings-input"
aria-label=${i}
autocomplete="off"
.value=${t[r]}
?disabled=${n}
=${t=>{t.currentTarget instanceof HTMLInputElement&&e.setDraft(r,t.currentTarget.value)}}
/>`});return h`
${K(e)}
${e.patVisible?h`
<div class="settings-subrows">
${O({title:d(`agentTools.githubToken`),description:d(`agentTools.githubTokenDesc`),control:ae({ariaLabel:d(`agentTools.githubToken`),value:t.token,visible:e.tokenRevealed,disabled:n,showLabel:d(`configForm.revealValue`),hideLabel:d(`configForm.hideValue`),toggleLabel:d(`agentTools.githubTokenToggle`),onInput:t=>e.setDraft(`token`,t),onToggle:()=>e.toggleTokenVisibility()})})}
${r(`name`,d(`agentTools.githubAuthorName`))}
${r(`email`,d(`agentTools.githubAuthorEmail`))}
<div class="settings-row settings-row--actions">
<div class="settings-row__control">
<button
class="btn"
?disabled=${e.busy}
=${()=>e.hidePatFallback()}
>
${d(`common.cancel`)}
</button>
<button
class="btn primary"
?disabled=${n}
=${()=>void e.configure()}
>
${e.busy?d(`common.saving`):d(`agentTools.githubConfigure`)}
</button>
</div>
</div>
</div>
`:m}
`}function oe(e,t){let n=e.status?.effective??null;return C({title:d(`githubConnections.agentTitle`),description:d(`githubConnections.agentDescription`),actions:e.statusReadable?h`<button
class="btn btn--sm"
?disabled=${e.loading||e.busy||e.authorizationActive}
=${()=>void e.verify()}
>
${d(`agentTools.githubVerify`)}
</button>`:void 0},h`
${O({title:n?.account?`@${n.account.login}`:d(`agentTools.githubNoAccount`),description:n?.source===`agent-override`?d(`githubConnections.agentOverride`):d(`githubConnections.system`),control:h`${W(n,e)}<button
class="btn btn--sm"
=${t}
>
${d(`githubConnections.manageCommon`)}
</button>`})}
${q(e.error)}
${e.configurable?h`<details class="settings-row settings-row--stacked">
<summary class="settings-row__title">
${d(`githubConnections.advancedOverride`)}
</summary>
<div class="settings-subrows">
${O({title:d(`githubConnections.agentOverride`),description:e.status?.selected.configured?d(`agentTools.githubConfiguredHere`):d(`agentTools.githubInheritedHere`)})}
${J(e)}
${e.status?.selected.configured?O({title:d(`agentTools.githubUseSystemNewRuns`),description:d(`agentTools.githubAgentMutationHint`),control:h`<button
class="btn"
?disabled=${e.busy||e.authorizationActive}
=${()=>void e.inherit()}
>
${d(`agentTools.githubUseSystemNewRuns`)}
</button>`}):m}
</div>
</details>`:m}
${G(n)}
`)}var Y,X,Z,Q;function $(){return($=e((()=>{g(),_(),D(),f(),S(),r(),N(),te(),l(),i(),Y={available:{kind:`ok`,label:`agentTools.githubStateVerified`},unverified:{kind:`warn`,label:`agentTools.githubStateUnverified`},rate_limited:{kind:`warn`,label:`agentTools.githubStateRateLimited`},unavailable:{kind:`danger`,label:`agentTools.githubStateUnavailable`},configured_unavailable:{kind:`danger`,label:`agentTools.githubStateConfiguredUnavailable`}},X={native:`agentTools.githubKindNative`,"managed-pat":`agentTools.githubKindPat`,"managed-oauth":`agentTools.githubKindOAuth`},Z={available:`agentTools.githubRefreshAvailable`,expired:`agentTools.githubRefreshExpired`,unavailable:`agentTools.githubRefreshUnavailable`,refreshing:`agentTools.githubRefreshRefreshing`,failed:`agentTools.githubRefreshFailed`,not_applicable:`common.na`},Q={code:`agentTools.githubCodeReady`,pending:`agentTools.githubWaiting`,cancelling:`agentTools.githubCancelling`,finishing:`agentTools.githubFinishing`,cancel_error:`agentTools.githubCancelFailed`,network_error:`agentTools.githubNetworkRetry`},M()})))()}export{W as a,V as c,M as d,G as i,H as l,q as n,oe as o,J as r,U as s,$ as t,N as u};