@bitkyc08/opencodex 2.55.0-preview.20260914 → 2.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/gui/dist/assets/{index-DH2PUHqr.js → index-D4zuyIxQ.js} +1 -1
- package/gui/dist/index.html +1 -1
- package/package.json +2 -1
- package/src/adapters/base.ts +21 -0
- package/src/adapters/cursor/transport-retry.ts +46 -1
- package/src/adapters/cursor.ts +4 -0
- package/src/adapters/kiro/adapter.ts +42 -1
- package/src/adapters/kiro-retry.ts +23 -4
- package/src/adapters/openai-chat/errors.ts +116 -0
- package/src/adapters/openai-chat/messages.ts +346 -0
- package/src/adapters/openai-chat/passthrough.ts +146 -0
- package/src/adapters/openai-chat/response-events.ts +117 -0
- package/src/adapters/openai-chat/tool-call-validation.ts +200 -0
- package/src/adapters/openai-chat/tool-schema.ts +477 -0
- package/src/adapters/openai-chat/wire.ts +50 -0
- package/src/adapters/openai-chat.ts +33 -1445
- package/src/adapters/openai-responses/canonical-forward.ts +202 -0
- package/src/adapters/openai-responses/image-gen.ts +406 -0
- package/src/adapters/openai-responses/internal.ts +3 -0
- package/src/adapters/openai-responses/passthrough.ts +611 -0
- package/src/adapters/openai-responses/prompt-cache.ts +83 -0
- package/src/adapters/openai-responses/reasoning.ts +220 -0
- package/src/adapters/openai-responses/request-strips.ts +185 -0
- package/src/adapters/openai-responses/tool-output-recovery.ts +509 -0
- package/src/adapters/openai-responses/tool-schema.ts +293 -0
- package/src/adapters/openai-responses/web-search.ts +156 -0
- package/src/adapters/openai-responses.ts +4 -2625
- package/src/bridge/errors.ts +34 -0
- package/src/bridge/internal.ts +174 -0
- package/src/bridge/response-json.ts +624 -0
- package/src/bridge/sse.ts +1444 -0
- package/src/bridge.ts +5 -2204
- package/src/chat/inbound.ts +12 -1
- package/src/codex/account-lifecycle.ts +3 -0
- package/src/codex/account-store.ts +71 -9
- package/src/codex/auth-api/account-list.ts +507 -0
- package/src/codex/auth-api/http.ts +32 -0
- package/src/codex/auth-api/login-flow.ts +554 -0
- package/src/codex/auth-api/login-state.ts +64 -0
- package/src/codex/auth-api/main-account-probe.ts +331 -0
- package/src/codex/auth-api/pool-mode-gate.ts +274 -0
- package/src/codex/auth-api/pool-quota-probe.ts +512 -0
- package/src/codex/auth-api/reset-credit-service.ts +422 -0
- package/src/codex/auth-api/routes.ts +425 -0
- package/src/codex/auth-api/runtime-config.ts +48 -0
- package/src/codex/auth-api.ts +27 -3118
- package/src/codex/auth-context.ts +95 -28
- package/src/codex/catalog/auto-review.ts +507 -0
- package/src/codex/catalog/build-entries.ts +981 -0
- package/src/codex/catalog/combo-member.ts +375 -0
- package/src/codex/catalog/derive-entry.ts +229 -0
- package/src/codex/catalog/effort.ts +0 -1
- package/src/codex/catalog/gated-native-warn.ts +63 -0
- package/src/codex/catalog/gather-capture.ts +533 -0
- package/src/codex/catalog/model-hints.ts +691 -0
- package/src/codex/catalog/model-visibility.ts +304 -0
- package/src/codex/catalog/provider-fetch.ts +52 -2942
- package/src/codex/catalog/provider-models.ts +685 -0
- package/src/codex/catalog/restore.ts +132 -0
- package/src/codex/catalog/retained-sync.ts +706 -0
- package/src/codex/catalog/routed-gather.ts +858 -0
- package/src/codex/catalog/subagent-roster.ts +176 -0
- package/src/codex/catalog/sync.ts +52 -2698
- package/src/codex/inject/config-toml.ts +563 -0
- package/src/codex/inject/remove.ts +192 -0
- package/src/codex/inject/restore.ts +540 -0
- package/src/codex/inject/routing-classify.ts +109 -0
- package/src/codex/inject/routing-target.ts +125 -0
- package/src/codex/inject.ts +81 -1436
- package/src/codex/lineage.ts +458 -0
- package/src/codex/pool-refresh-backoff.ts +152 -0
- package/src/codex/routing/active-account.ts +194 -0
- package/src/codex/routing/cooldown-math.ts +275 -0
- package/src/codex/routing/health-store.ts +402 -0
- package/src/codex/routing/probe-lease.ts +358 -0
- package/src/codex/routing/selection.ts +703 -0
- package/src/codex/routing/thread-affinity.ts +538 -0
- package/src/codex/routing.ts +353 -2234
- package/src/codex/shim-fingerprint.ts +223 -0
- package/src/codex/shim-inspect.ts +175 -0
- package/src/codex/shim-probe.ts +367 -0
- package/src/codex/shim-restore-lock.ts +169 -0
- package/src/codex/shim-state-file.ts +151 -0
- package/src/codex/shim-templates.ts +265 -0
- package/src/codex/shim.ts +48 -1268
- package/src/config/diagnostics.ts +705 -0
- package/src/config/feature-flags.ts +55 -0
- package/src/config/live-reconcile.ts +403 -0
- package/src/config/load-degrade.ts +880 -0
- package/src/config/mutation-lock.ts +244 -0
- package/src/config/openai-tier-backup.ts +268 -0
- package/src/config/persist-unlocked.ts +92 -0
- package/src/config/proxy-env.ts +188 -0
- package/src/config/salvage.ts +244 -0
- package/src/config/schema/config-schema.ts +640 -0
- package/src/config/schema/leaf-validators.ts +855 -0
- package/src/config/warn-memo.ts +28 -0
- package/src/config.ts +234 -4481
- package/src/generated/compatibility-version.json +539 -39
- package/src/lib/request-execution-budget.ts +69 -20
- package/src/lib/spend-reservation-ledger.ts +940 -0
- package/src/lib/upstream-retry.ts +55 -11
- package/src/lib/workflow-budget.ts +553 -30
- package/src/providers/quota/account-cache.ts +441 -0
- package/src/providers/quota/antigravity.ts +295 -0
- package/src/providers/quota/report-cache.ts +320 -0
- package/src/providers/quota/vendor-probes-key.ts +1243 -0
- package/src/providers/quota/vendor-probes-oauth.ts +590 -0
- package/src/providers/quota.ts +324 -3079
- package/src/providers/registry/entries-core.ts +1221 -0
- package/src/providers/registry/entries-extended.ts +1204 -0
- package/src/providers/registry/model-seeds.ts +908 -0
- package/src/providers/registry/types.ts +352 -0
- package/src/providers/registry.ts +24 -3536
- package/src/responses/continuation-ownership.ts +29 -0
- package/src/responses/state/replay-fingerprint.ts +80 -0
- package/src/responses/state/snapshot-codec.ts +104 -0
- package/src/responses/state/spill-failure.ts +118 -0
- package/src/responses/state/spill-queue.ts +665 -0
- package/src/responses/state/temp-recovery.ts +257 -0
- package/src/responses/state.ts +82 -1143
- package/src/routing/identity-domains.ts +449 -0
- package/src/routing/probe-lease.ts +511 -0
- package/src/server/index/bounded-request.ts +88 -0
- package/src/server/index/live-sideband.ts +565 -0
- package/src/server/index/serve-options.ts +1766 -0
- package/src/server/index/startup-warnings.ts +213 -0
- package/src/server/index/websocket-handler.ts +335 -0
- package/src/server/index.ts +40 -2547
- package/src/server/management/route-registry.ts +26 -23
- package/src/server/management/shared.ts +8 -5
- package/src/server/management/workflow-budget-routes.ts +133 -0
- package/src/server/management-api.ts +12 -0
- package/src/server/request-log-conversation.ts +9 -7
- package/src/server/request-log.ts +245 -1
- package/src/server/responses/account-change-state.ts +233 -0
- package/src/server/responses/adapter-continuation.ts +514 -0
- package/src/server/responses/adapter-delivery.ts +214 -0
- package/src/server/responses/adapter-dispatch.ts +971 -0
- package/src/server/responses/compact.ts +59 -4
- package/src/server/responses/completion-policy.ts +33 -0
- package/src/server/responses/core-auth.ts +527 -0
- package/src/server/responses/core-codex-account.ts +859 -0
- package/src/server/responses/core-combo-failure.ts +210 -0
- package/src/server/responses/core-combo.ts +707 -0
- package/src/server/responses/core-errors.ts +152 -0
- package/src/server/responses/core-lifetime.ts +95 -0
- package/src/server/responses/core-normalize.ts +350 -0
- package/src/server/responses/core-opaque-recovery.ts +380 -0
- package/src/server/responses/core-options.ts +159 -0
- package/src/server/responses/core-replay.ts +225 -0
- package/src/server/responses/core.ts +192 -8893
- package/src/server/responses/passthrough-delivery.ts +856 -0
- package/src/server/responses/passthrough-dispatch.ts +1476 -0
- package/src/server/responses/passthrough-execution.ts +54 -0
- package/src/server/responses/request-prepare.ts +970 -0
- package/src/server/responses/request-send-budget.ts +164 -0
- package/src/server/responses/request-sidecar-auth.ts +149 -0
- package/src/server/responses/request-transport.ts +744 -0
- package/src/server/responses/response-effects.ts +157 -0
- package/src/server/responses/run-turn-execution.ts +448 -0
- package/src/server/responses/sidecar-execution.ts +469 -0
- package/src/server/responses-image-gen-repair.ts +1 -1
- package/src/server/workflow-refusal.ts +84 -0
- package/src/types/config.ts +30 -0
- package/src/usage/log.ts +146 -0
- package/src/usage/summary.ts +171 -21
|
@@ -125,4 +125,4 @@ const closeSession = () => ws.send(JSON.stringify({ type: "session.close" }));`}
|
|
|
125
125
|
`)}),(0,Y.jsxs)(`details`,{className:`audio-api-examples`,children:[(0,Y.jsx)(`summary`,{children:t(`audio.examples`)}),(0,Y.jsx)(tx,{text:lS(e.liveEndpoint,!0,e.liveModel,t(`audio.key`))})]})]})]})}function hS({keys:e,apiBase:t,active:n=!0,attributionSince:r,historyTruncated:i,usageMetadata:a,authMatrix:o,keysLoading:s,keysLoadFailed:c,endpoints:l,claudeCodeEnabled:u,localeTag:d,newName:f,creating:p,newKey:m,copied:h,rotationSecret:g=null,rotationCopied:v=!1,filteredModels:y,modelsLoading:b,modelsRefreshing:x=!1,modelsLoadFailed:S,modelCount:C,hasModelData:w,modelQuery:T,copiedModelId:E,modelTests:D,canTestModels:O,onNewNameChange:k,onCreate:A,onDismissNewKey:j,onCopyKey:M,onDelete:N,onRename:P,onRotationStart:F,onRotationCommit:I,onRotationAbort:L,onCopyRotationSecret:R,onDismissRotationSecret:z,onModelQueryChange:B,onCopyModelId:V,onTestModel:H,onRetryModels:U,sourceLabel:W,protocolLabel:G}){let K=Q(),[q,J]=(0,_.useState)(null),[X,ee]=(0,_.useState)(!1),[te,ne]=(0,_.useState)(!1),[Z,re]=(0,_.useState)(!1),[ie,ae]=(0,_.useState)(!1),[oe,se]=(0,_.useState)(``),[ce,le]=(0,_.useState)(!1),[ue,de]=(0,_.useState)(!1),[fe,pe]=(0,_.useState)(!1),[he,ge]=(0,_.useState)(!1),[_e,ve]=(0,_.useState)(!1),ye=q?e.find(e=>e.id===q)??null:null,be=ye?g?.id===ye.id?g.rotationId:ye.pendingRotation?.id:void 0,xe=Z||ce||he,Se=async e=>{if(!(!ye||he)){ge(!0),ve(!1);try{let t=be;(e===`start`?await F?.(ye.id)??!1:t&&(await(e===`commit`?I:L)?.(ye.id,t)??!1))||ve(!0)}finally{ge(!1)}}},we=(0,_.useMemo)(()=>[{id:`keys`,label:K(`api.section.keys`),meta:s?void 0:String(e.length)},{id:`connect`,label:K(`api.section.connect`)},{id:`endpoints`,label:K(`api.section.endpoints`)},{id:`dictation`,label:K(`audio.dictation`)},{id:`live-voice`,label:K(`audio.liveVoice`)},{id:`models`,label:K(`api.section.models`),meta:String(C)},{id:`examples`,label:K(`api.section.examples`)}],[K,e.length,s,C]),Te=()=>{ee(!1),ne(!1)},Ee=()=>{J(null),Te(),ae(!1),de(!1),pe(!1)};(0,_.useEffect)(()=>{if(!X)return;let e=window.setTimeout(()=>ne(!0),300);return()=>window.clearTimeout(e)},[X]);let De=()=>{ye&&ee(!0)},Oe=async()=>{if(!(!ye||!te||Z)){re(!0),pe(!1);try{await N(ye.id)?(Te(),J(null)):pe(!0)}finally{re(!1)}}},ke=()=>{ye&&(se(ye.name),de(!1),ae(!0))},Ae=async()=>{if(!ye||ce)return;let e=oe.trim();if(!e||e===ye.name){ae(!1);return}le(!0),de(!1);try{await P(ye.id,e)?ae(!1):de(!0)}finally{le(!1)}};return(0,Y.jsxs)(`div`,{className:`apikeys-workspace-shell`,children:[!ye&&(0,Y.jsx)(Mg,{scope:`api`,items:we,ariaLabel:K(`api.workspace.sections`),mobileReadingLine:108}),(0,Y.jsx)(`div`,{className:`apikeys-workspace-root`,children:(0,Y.jsx)(`section`,{className:`apikeys-workspace-main`,"aria-label":K(`api.workspace.details`),children:ye?(0,Y.jsxs)(`div`,{className:`awi-detail`,children:[(0,Y.jsx)(`div`,{className:`awi-detail-toolbar`,children:(0,Y.jsxs)(`button`,{type:`button`,className:`awi-back`,onClick:Ee,disabled:xe,children:[(0,Y.jsx)(Ce,{className:`awi-back-chevron`,"aria-hidden":`true`}),K(`modal.back`)]})}),(0,Y.jsxs)(`div`,{className:`awi-detail-body`,children:[(0,Y.jsxs)(`div`,{className:`awi-detail-head`,children:[(0,Y.jsx)(`h2`,{className:`awi-detail-title`,children:ye.name}),(0,Y.jsx)(`span`,{className:`awi-detail-actions`,children:X?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-danger btn-sm awi-confirm-delete`,onClick:()=>{Oe()},disabled:!te||Z,children:[(0,Y.jsx)(me,{}),` `,K(Z?`api.key.deleting`:`api.confirm`)]},`confirm-delete`),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:Te,disabled:Z,children:K(`common.cancel`)})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:ke,disabled:ie,children:K(`api.key.rename`)},`rename`),(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-danger btn-sm`,onClick:De,"aria-label":K(`api.deleteAria`),children:[(0,Y.jsx)(me,{}),` `,K(`api.workspace.deleteKey`)]},`request-delete`)]})})]}),X&&(0,Y.jsx)(`p`,{className:`muted awi-delete-hint`,children:K(`api.workspace.deleteConfirm`)}),fe&&(0,Y.jsx)(`p`,{className:`awi-delete-error`,role:`alert`,children:K(`api.deleteFailed`)}),ie&&(0,Y.jsxs)(`div`,{className:`awi-rename`,children:[(0,Y.jsx)(`label`,{className:`awi-rename-label`,htmlFor:`awi-key-name`,children:K(`api.key.name`)}),(0,Y.jsx)(`input`,{id:`awi-key-name`,className:`input`,type:`text`,value:oe,maxLength:64,disabled:ce,onChange:e=>se(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),Ae())}}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-sm`,onClick:()=>{Ae()},disabled:ce,children:K(ce?`api.key.renaming`:`api.key.saveName`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>ae(!1),disabled:ce,children:K(`common.cancel`)}),ue&&(0,Y.jsx)(`p`,{className:`awi-rename-error`,role:`alert`,children:K(`api.key.renameFailed`)})]}),(0,Y.jsxs)(`div`,{className:`awi-section`,children:[(0,Y.jsx)(`h3`,{className:`awi-section-title`,children:K(`api.workspace.keyDetails`)}),(0,Y.jsxs)(`dl`,{className:`awi-kv`,children:[(0,Y.jsxs)(`div`,{className:`awi-kv-row`,children:[(0,Y.jsx)(`dt`,{children:K(`api.workspace.keyPrefix`)}),(0,Y.jsx)(`dd`,{children:(0,Y.jsx)(`code`,{children:ye.prefix})})]}),(0,Y.jsxs)(`div`,{className:`awi-kv-row`,children:[(0,Y.jsx)(`dt`,{children:K(`api.colCreated`)}),(0,Y.jsx)(`dd`,{children:Qb(ye.createdAt,d)})]})]})]}),(0,Y.jsxs)(`div`,{className:`awi-section`,"aria-live":`polite`,children:[(0,Y.jsx)(`h3`,{className:`awi-section-title`,children:K(`api.rotation.title`)}),be?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`p`,{className:`muted`,children:K(`api.rotation.pending`)}),ye.pendingRotation&&(0,Y.jsxs)(`p`,{className:`muted`,children:[K(`api.rotation.expires`),` `,Qb(ye.pendingRotation.expiresAt,d)]}),g?.id===ye.id&&(0,Y.jsxs)(`div`,{className:`api-key-reveal`,role:`status`,children:[(0,Y.jsx)(`p`,{children:K(`api.rotation.secretOnce`)}),(0,Y.jsx)(`code`,{children:g.key}),(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-sm`,onClick:R,children:K(v?`api.copied`:`api.copy`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:z,children:K(`common.close`)})]})]}),(0,Y.jsxs)(`div`,{className:`awi-detail-actions`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-sm`,disabled:he,onClick:()=>{Se(`commit`)},children:K(`api.rotation.commit`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:he,onClick:()=>{Se(`abort`)},children:K(`api.rotation.abort`)})]})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`p`,{className:`muted`,children:K(`api.rotation.description`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:he,onClick:()=>{Se(`start`)},children:K(he?`api.rotation.starting`:`api.rotation.start`)})]}),_e&&(0,Y.jsx)(`p`,{className:`awi-delete-error`,role:`alert`,children:K(`api.rotation.failed`)})]}),(0,Y.jsxs)(`div`,{className:`awi-section`,children:[(0,Y.jsx)(`h3`,{className:`awi-section-title`,children:K(`api.attribution.title`)}),(0,Y.jsx)(Jn,{data:a}),r?ye.usage.ambiguous?(0,Y.jsx)(`p`,{className:`muted`,children:K(`api.attribution.ambiguous`)}):(0,Y.jsxs)(`dl`,{className:`awi-kv`,children:[(0,Y.jsxs)(`div`,{className:`awi-kv-row`,children:[(0,Y.jsx)(`dt`,{children:K(`api.attribution.requests7d`)}),(0,Y.jsx)(`dd`,{children:ye.usage.requests7d.toLocaleString(d)})]}),(0,Y.jsxs)(`div`,{className:`awi-kv-row`,children:[(0,Y.jsx)(`dt`,{children:i||a?.usageIncomplete?K(`api.attribution.totalRequestsAvailable`):K(`api.attribution.totalRequests`)}),(0,Y.jsx)(`dd`,{children:ye.usage.totalRequests.toLocaleString(d)})]}),(0,Y.jsxs)(`div`,{className:`awi-kv-row`,children:[(0,Y.jsx)(`dt`,{children:K(`api.attribution.lastUsed`)}),(0,Y.jsx)(`dd`,{children:ye.usage.lastUsedAt?Qb(ye.usage.lastUsedAt,d):K(a?.usageIncomplete?`api.attribution.noRecordedUse`:`api.attribution.neverUsed`)})]}),(0,Y.jsxs)(`div`,{className:`awi-kv-row`,children:[(0,Y.jsx)(`dt`,{children:i||a?.usageIncomplete?K(`api.attribution.sinceAvailable`):K(`api.attribution.since`)}),(0,Y.jsx)(`dd`,{children:Qb(r,d)})]})]}):(0,Y.jsx)(`p`,{className:`muted`,children:K(`api.attribution.unavailableDetail`)})]})]})]}):(0,Y.jsx)(`div`,{className:`awi-overview`,children:(0,Y.jsxs)(`div`,{className:`awi-overview-section`,children:[(0,Y.jsxs)(`div`,{id:kg(`api`,`keys`),className:`awi-section-anchor`,children:[(0,Y.jsx)(ix,{keys:e,keysLoading:s,keysLoadFailed:c,newName:f,creating:p,newKey:m,copied:h,confirmDelete:null,localeTag:d,showKeyList:!1,onNewNameChange:k,onCreate:A,onDismissNewKey:j,onCopyKey:M,onConfirmDelete:()=>{},onCancelDelete:()=>{},onDelete:()=>{}}),(0,Y.jsx)(ux,{keys:e,keysLoading:s,keysLoadFailed:c,attributionSince:r,usageMetadata:a,localeTag:d,busy:xe,onSelect:e=>{J(e),Te(),ae(!1),de(!1),pe(!1)}})]}),(0,Y.jsx)(`div`,{id:kg(`api`,`connect`),className:`awi-section-anchor`,children:(0,Y.jsx)(lx,{apiBase:t,baseUrl:l.baseUrl,hasKeys:e.length>0})}),(0,Y.jsx)(`div`,{id:kg(`api`,`endpoints`),className:`awi-section-anchor`,children:(0,Y.jsx)(rx,{endpoints:l,claudeCodeEnabled:u,authMatrix:o})}),(0,Y.jsx)(`div`,{id:kg(`api`,`dictation`),className:`awi-section-anchor`,children:n&&(0,Y.jsx)(pS,{audio:l.audio},`${t}:${JSON.stringify(l.audio)}`)}),(0,Y.jsx)(`div`,{id:kg(`api`,`live-voice`),className:`awi-section-anchor`,children:n&&(0,Y.jsx)(mS,{audio:l.audio},`${t}:${JSON.stringify(l.audio)}`)}),(0,Y.jsx)(`div`,{id:kg(`api`,`models`),className:`awi-section-anchor`,children:(0,Y.jsx)(ax,{filteredModels:y,modelsLoading:b,modelsRefreshing:x,modelsLoadFailed:S,modelCount:C,hasModelData:w,modelQuery:T,copiedModelId:E,modelTests:D,claudeCodeEnabled:u,onModelQueryChange:B,onCopyModelId:V,onTestModel:H,onRetryModels:U,canTestModels:O,sourceLabel:W,protocolLabel:G})}),(0,Y.jsx)(`div`,{id:kg(`api`,`examples`),className:`awi-section-anchor`,children:(0,Y.jsx)(ox,{endpoints:l,claudeCodeEnabled:u})})]})})})})]})}var gS=[],_S=15e3;function vS(e){let t=e.replace(/\/$/,``);if(!t)return Xb;try{return new URL(t).host?Zb(`${t}/v1/responses`):Xb}catch{return Xb}}function yS(e){if(!e||!Jb(e.authMatrix)||!Array.isArray(e.keys)||e.keys.some(e=>!e||!Kb(e.usage)||!bS(e.pendingRotation)))return null;if(e.endpoints?.audio!==void 0&&!Yb(e.endpoints.audio,e.endpoints.baseUrl)){let{audio:t,...n}=e.endpoints;return{...e,endpoints:n}}return e}function bS(e){if(e===void 0)return!0;if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return typeof t.id==`string`&&!!t.id&&typeof t.createdAt==`string`&&!Number.isNaN(Date.parse(t.createdAt))&&typeof t.expiresAt==`string`&&!Number.isNaN(Date.parse(t.expiresAt))}function xS({apiBase:e,active:t=!0}){let{t:n,locale:r}=ut(),i=nt.find(e=>e.code===r)?.htmlLang,a=`ocx.apikeys.list.v2:${e}`,o=`ocx.apikeys.models.v1:${e}`,s=`api-keys:${e}`,c=`api-models:${e}`,l=Dr(a),u=Dr(o),d=yS(l?.data??null),f=u?.data??null,[p,m]=(0,_.useState)(null),[h,g]=(0,_.useState)(``),[v,y]=(0,_.useState)(null),[b,x]=(0,_.useState)({}),[S,C]=(0,_.useState)(``),[w,T]=(0,_.useState)(!1),[E,D]=(0,_.useState)(null),[O,k]=(0,_.useState)(!1),[A,j]=(0,_.useState)(null),[M,N]=(0,_.useState)(!1),P=(0,_.useRef)(!1),F=(0,_.useCallback)(async t=>{let r=await Lt(await fetch(`${e}/api/keys`,{signal:t}));if(!r||!Jb(r.authMatrix))throw Error(n(`api.keysLoadFailed`));let i=r.keys??[];if(i.some(e=>!Kb(e.usage)||!bS(e.pendingRotation)))throw Error(n(`api.keysLoadFailed`));let o=i,s=Zb(r.endpoint??``),c={keys:o,endpoints:{baseUrl:r.baseUrl??s.baseUrl,responses:r.responsesEndpoint??r.endpoint??Xb.responses,chatCompletions:r.chatCompletionsEndpoint??s.chatCompletions,messages:r.messagesEndpoint??s.messages,models:r.modelsEndpoint??s.models,...Yb(r.audio,r.baseUrl??s.baseUrl)?{audio:r.audio}:{}},claudeCodeEnabled:r.claudeCodeEnabled!==!1,...r.attributionSince?{attributionSince:r.attributionSince}:{},...r.historyTruncated===!0?{historyTruncated:!0}:{},...Kn(r),authMatrix:r.authMatrix};return Or(a,c),c},[e,a,n]),I=(0,_.useCallback)(async t=>{let r=await fetch(`${e}/v1/models`,{signal:t});if(!r.ok)throw Error(n(`api.modelsLoadFailed`));let i=await r.json(),a=Array.isArray(i)?i:typeof i==`object`&&i&&Array.isArray(i.data)?i.data:null;if(!a)throw Error(n(`api.modelsLoadFailed`));let s=a.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`).map(e=>Wb(e)).sort((e,t)=>Gb(e).localeCompare(Gb(t)));return Or(o,s),s},[e,o,n]),L=jr(s,[e],F,{isEmpty:e=>e.keys.length===0,initialData:d??void 0,initialDataCachedAt:l?.cachedAt??null,staleAfterMs:6e4,enabled:t}),R=jr(c,[e],I,{isEmpty:e=>e.length===0,initialData:f??void 0,initialDataCachedAt:u?.cachedAt??null,staleAfterMs:6e4,enabled:t}),z=L.state,B=R.state,V=z.data??d,H=B.data??f??gS,U=V?.keys??[],W=V?.endpoints??vS(e),G=V?.claudeCodeEnabled??!0,K=V?.attributionSince,q=V?.historyTruncated===!0,J=V?.authMatrix??[],X=L.refresh,ee=R.refresh,te=(0,_.useMemo)(()=>{let e=h.trim().toLowerCase();return e?H.filter(t=>Gb(t).toLowerCase().includes(e)||t.displayName.toLowerCase().includes(e)||t.provider.toLowerCase().includes(e)):H},[h,H]),ne=async t=>{if(P.current)return!1;P.current=!0,T(!0),m(null);try{let r=t??S,i=await It(await fetch(`${e}/api/keys`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:r||`default`})}),n(`api.createFailed`));return typeof i?.key!=`string`||i.key.length===0?(m(n(`api.createFailed`)),!1):(D(i.key),C(``),X(),!0)}catch{return m(n(`api.createFailed`)),!1}finally{P.current=!1,T(!1)}},Z=async t=>{m(null);let n=Xn(_S);try{return(await fetch(`${e}/api/keys`,{method:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t}),signal:n.signal})).ok?(X(),!0):!1}catch{return!1}finally{n.clear()}},re=async(t,n)=>{m(null);let r=Xn(_S);try{return(await fetch(`${e}/api/keys`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t,name:n}),signal:r.signal})).ok?(X(),!0):!1}catch{return!1}finally{r.clear()}},ie=async t=>{m(null);let r=Xn(_S);try{let i=await It(await fetch(`${e}/api/keys/rotate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t}),signal:r.signal}),n(`api.rotation.startFailed`));return!i||typeof i.key!=`string`||!i.key||typeof i.rotationId!=`string`||!i.rotationId?!1:(j({id:t,key:i.key,rotationId:i.rotationId}),X(),!0)}catch{return!1}finally{r.clear()}},ae=async(t,n,r)=>{m(null);let i=Xn(_S);try{return(await fetch(`${e}${r===`commit`?`/api/keys/rotate/commit`:`/api/keys/rotate`}`,{method:r===`commit`?`POST`:`DELETE`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t,rotationId:n}),signal:i.signal})).ok?(j(e=>e?.id===t?null:e),X(),!0):!1}catch{return!1}finally{i.clear()}},oe=async()=>{if(A)try{await navigator.clipboard.writeText(A.key),N(!0),window.setTimeout(()=>N(!1),2e3)}catch{m(n(`api.key.copyFailed`))}},se=async()=>{if(E){m(null);try{await navigator.clipboard.writeText(E),k(!0),window.setTimeout(()=>k(!1),2e3)}catch{k(!1),m(n(`api.key.copyFailed`))}}},ce=async e=>{try{await navigator.clipboard.writeText(e),y(e),window.setTimeout(()=>y(t=>t===e?null:t),2e3)}catch{}},le=e=>e.native?n(`api.sourceNative`):e.provider===`combo`?n(`api.sourceCombo`):e.custom?n(`api.sourceCustom`):Ln(e.provider,n),ue=e=>n(e===`responses`?`api.protocolResponses`:e===`messages`?`api.protocolMessages`:`api.protocolChatCompletions`),de=(e,t)=>e===`responses`?{url:W.responses,body:{model:t,input:`ping`,max_output_tokens:1,stream:!1}}:e===`messages`?{url:W.messages,body:{model:t,max_tokens:1,messages:[{role:`user`,content:`ping`}]}}:{url:W.chatCompletions,body:{model:t,messages:[{role:`user`,content:`ping`}],max_tokens:1,stream:!1}},fe=(e,t,n)=>x(r=>({...r,[e]:{...r[e],[t]:n}})),pe=async(e,t)=>{if(!E)return;let r=Gb(e),i=de(t,r);fe(r,t,{state:`testing`});try{let e=await fetch(i.url,{method:`POST`,headers:{"Content-Type":`application/json`,"x-opencodex-api-key":E},body:JSON.stringify(i.body)});if(!e.ok){let n=await e.text();fe(r,t,{state:`error`,detail:n.slice(0,160)||String(e.status)});return}fe(r,t,{state:`ok`})}catch(e){fe(r,t,{state:`error`,detail:e instanceof Error?e.message:n(`api.testFailed`)})}},me=n(`api.subtitle`).split(`{authHeader}`);return(0,Y.jsxs)(`section`,{className:`api-page`,"aria-busy":z.refreshing||B.refreshing||void 0,children:[(0,Y.jsx)(`div`,{className:`page-head`,children:(0,Y.jsx)(`h2`,{children:n(`api.title`)})}),(0,Y.jsxs)(`p`,{className:`page-sub`,children:[me[0],(0,Y.jsx)(`code`,{children:`x-opencodex-api-key`}),me[1]]}),p&&(0,Y.jsx)($,{tone:`err`,children:p}),z.showError&&V&&(0,Y.jsx)($,{tone:`err`,children:n(`api.keysLoadFailed`)}),z.showSkeleton&&!V?(0,Y.jsx)(ep,{label:n(`api.activeKeysLoading`),rows:4}):z.kind===`failed-cold`&&!V?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)($,{tone:`err`,children:z.error instanceof Error?z.error.message:n(`api.keysLoadFailed`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>X(),children:n(`common.retry`)})]}):(0,Y.jsx)(Y.Fragment,{children:(0,Y.jsx)(hS,{active:t,keys:U,apiBase:e,attributionSince:K,historyTruncated:q,usageMetadata:Kn(V),authMatrix:J,keysLoading:!1,keysLoadFailed:z.showError,endpoints:W,claudeCodeEnabled:G,localeTag:i,newName:S,creating:w,newKey:E,copied:O,rotationSecret:A,rotationCopied:M,filteredModels:te,modelsLoading:B.showSkeleton&&!B.data&&!f,modelsRefreshing:B.refreshing&&B.showError&&(B.data!==void 0||f!==null),modelsLoadFailed:B.showError,modelCount:H.length,hasModelData:B.data!==void 0||f!==null,modelQuery:h,copiedModelId:v,modelTests:b,onNewNameChange:C,onCreate:()=>{ne()},onDismissNewKey:()=>D(null),onCopyKey:()=>{se()},onDelete:Z,onRename:re,...Mb()?{onRotationStart:ie,onRotationCommit:(e,t)=>ae(e,t,`commit`),onRotationAbort:(e,t)=>ae(e,t,`abort`),onCopyRotationSecret:()=>{oe()},onDismissRotationSecret:()=>j(null)}:{},onModelQueryChange:g,onCopyModelId:e=>{ce(e)},onTestModel:(e,t)=>{pe(e,t)},onRetryModels:()=>{ee({forceLoading:!0})},canTestModels:E!==null,sourceLabel:le,protocolLabel:ue})})]})}function SS(e,t){let n=(e??[]).map(e=>({value:e,label:tf(e)}));return[{value:``,label:t},...n]}function CS(e){let t=e.autoConnectSupported===!0;return{autoConnectSupported:t,systemEnv:t&&e.systemEnv===!0}}function wS(){if(typeof crypto<`u`&&typeof crypto.randomUUID==`function`)try{return crypto.randomUUID()}catch{}let e=new Uint8Array(16);if(typeof crypto<`u`&&typeof crypto.getRandomValues==`function`)crypto.getRandomValues(e);else for(let t=0;t<16;t++)e[t]=Math.floor(Math.random()*256);e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}var TS=829800;function ES(e,t=`en`){if(e>=1e6){let n=e/1e6,r=n.toFixed(1).replace(/\.0$/,``);return Number.isInteger(n)||Number(r)*1e6===e?new Intl.NumberFormat(t,{notation:`compact`,compactDisplay:`short`,maximumFractionDigits:+!Number.isInteger(n)}).format(e):`${Math.round(e/1e3)}k`}return`${Math.round(e/1e3)}k`}var DS=[`ANTHROPIC_MODEL`,`ANTHROPIC_DEFAULT_OPUS_MODEL`,`ANTHROPIC_DEFAULT_SONNET_MODEL`,`ANTHROPIC_DEFAULT_HAIKU_MODEL`,`ANTHROPIC_DEFAULT_FABLE_MODEL`];function OS(e){let t=`http://127.0.0.1:${e.port}`,n=e.authMode===`auto`?e.markerMode??`subscription`:e.authMode,r=e.autoContext&&e.maxContextTokens===null,i=DS.filter(t=>e.effectiveModelEnv[t]).map(t=>`export ${t}=${e.effectiveModelEnv[t]}`);return[`export ANTHROPIC_BASE_URL=${t}`,...n===`proxy`?[`export ANTHROPIC_AUTH_TOKEN=opencodex-proxy`]:[`# no ANTHROPIC_AUTH_TOKEN: your claude.ai login (and connectors) stay active`],`export CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1`,...n===`proxy`?['[ -z "${CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST+x}" ] && export CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST=1']:[],...r?[`export CLAUDE_CODE_AUTO_COMPACT_WINDOW=${e.autoCompactWindow??829800}`]:[],...i,`claude`].join(`
|
|
126
126
|
`)}function kS(e){return e?e.backend??`auto`:`inherit`}function AS(e,t){if(t!==`inherit`)return t===`auto`?{...e,backend:void 0}:{...e,backend:t}}function jS(e,t){return{...e,model:t}}function MS(e){if(!e)return null;let t=(e.model??``).trim();return e.backend?{backend:e.backend,model:t}:t?{backend:null,model:t}:null}function NS({label:e,checked:t,onChange:n,disabled:r=!1,describedBy:i}){return(0,Y.jsxs)(`label`,{className:`toggle`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,checked:t,disabled:r,"aria-label":e,"aria-describedby":i,onChange:e=>n(e.target.checked)}),(0,Y.jsx)(`span`,{className:`slider`,"aria-hidden":`true`})]})}function PS({supported:e,checked:t,onChange:n}){let r=Q(),i=e?void 0:`claude-system-env-unsupported`;return(0,Y.jsxs)(`div`,{className:`setting-row`,children:[(0,Y.jsxs)(`div`,{className:`setting-label`,children:[(0,Y.jsx)(`span`,{className:`title`,children:r(`claude.systemEnv`)}),e?(0,Y.jsx)(`span`,{className:`desc`,children:r(`claude.systemEnvDesc`)}):(0,Y.jsx)(`span`,{className:`desc`,id:i,children:(0,Y.jsx)(ft,{k:`claude.systemEnvUnsupported`,cmd:`ocx claude`})}),e&&t&&(0,Y.jsx)(`span`,{className:`desc`,style:{color:`var(--red)`},children:r(`claude.systemEnvWarn`)})]}),(0,Y.jsx)(NS,{label:r(`claude.systemEnv`),checked:e&&t,disabled:!e,describedBy:i,onChange:n})]})}function FS({value:e,tierHaikuModel:t,options:n,onChange:r}){let i=Q(),a=t??e;return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`p`,{className:`muted text-label`,style:{margin:`0 0 8px`},children:i(`claude.smallFastModelAccurateHint`)}),(0,Y.jsx)(kt,{value:e,options:n,onChange:r,label:i(`claude.smallFastModel`),style:{maxWidth:420}}),a===``&&(0,Y.jsx)(`p`,{className:`notice-warn`,role:`status`,style:{marginTop:8},children:i(`claude.smallFastModelNativeWarning`)})]})}function IS(e,t){return e&&[`claude-json-oauth`,`claude-credentials-file`,`macos-keychain`,`exported-env`].includes(e)?t(`claude.authSource.${e}`):t(`claude.authSource.unknown`)}function LS({state:e,autoCompactOptions:t,availableModels:n,onStateChange:r}){let i=Q();return(0,Y.jsxs)(`div`,{className:`card`,style:{overflow:`hidden`},children:[(0,Y.jsxs)(`div`,{className:`setting-row`,children:[(0,Y.jsxs)(`div`,{className:`setting-label`,children:[(0,Y.jsx)(`span`,{className:`title`,children:i(`claude.authMode`)}),(0,Y.jsx)(`span`,{className:`desc`,children:i(`claude.authModeHint`)})]}),(0,Y.jsx)(`div`,{className:`setting-controls`,children:(0,Y.jsx)(kt,{value:e.authMode,options:[{value:`auto`,label:i(`claude.authModeAuto`)},{value:`subscription`,label:i(`claude.authModeSubscription`)},{value:`proxy`,label:i(`claude.authModeProxy`)}],onChange:t=>r({...e,authMode:t}),label:i(`claude.authMode`),style:{minWidth:220},align:`right`,portal:!0})})]}),e.authModeOrigin&&(0,Y.jsxs)(`div`,{className:`claude-effective-auth${e.authModeOrigin===`auto-unknown`?` warn`:``}`,role:`status`,children:[(0,Y.jsx)(`span`,{className:`claude-effective-auth-label`,children:i(`claude.effectiveMode.label`)}),(0,Y.jsxs)(`span`,{children:[e.authModeOrigin===`manual`?i(`claude.effectiveMode.manual`,{mode:e.markerMode===`proxy`?i(`claude.authModeProxy`):i(`claude.authModeSubscription`)}):e.authModeOrigin===`auto-present`?i(`claude.effectiveMode.autoPresent`,{source:IS(e.authFoundBy,i)}):e.authModeOrigin===`auto-absent`?i(`claude.effectiveMode.autoAbsent`):i(`claude.effectiveMode.autoUnknown`),e.admissionKeyActive===!0?` ${i(`claude.effectiveMode.admissionKey`)}`:``]})]}),(0,Y.jsx)(PS,{supported:e.autoConnectSupported,checked:e.systemEnv,onChange:t=>r({...e,systemEnv:t})}),(0,Y.jsxs)(`div`,{className:`setting-row`,children:[(0,Y.jsxs)(`div`,{className:`setting-label`,children:[(0,Y.jsx)(`span`,{className:`title`,children:i(`claude.fastMode`)}),(0,Y.jsx)(`span`,{className:`desc`,children:i(`claude.fastModeDesc`)})]}),(0,Y.jsx)(`div`,{className:`setting-controls`,children:(0,Y.jsx)(kt,{value:e.fastMode===null?`auto`:e.fastMode?`on`:`off`,options:[{value:`auto`,label:i(`claude.fastAuto`)},{value:`on`,label:i(`claude.fastOn`)},{value:`off`,label:i(`claude.fastOff`)}],onChange:t=>r({...e,fastMode:t===`auto`?null:t===`on`}),label:i(`claude.fastMode`),style:{minWidth:140},align:`right`,portal:!0})})]}),(0,Y.jsxs)(`div`,{className:`setting-row`,children:[(0,Y.jsxs)(`div`,{className:`setting-label`,children:[(0,Y.jsx)(`span`,{className:`title`,children:i(`claude.autoContext`)}),(0,Y.jsx)(`span`,{className:`desc`,children:i(`claude.autoContextDesc`)}),e.maxContextTokens!==null&&(0,Y.jsx)(`span`,{className:`desc`,style:{color:`var(--muted)`},children:i(`claude.autoContextInert`)})]}),(0,Y.jsx)(NS,{label:i(`claude.autoContext`),checked:e.autoContext,onChange:t=>r({...e,autoContext:t})})]}),e.autoContext&&(0,Y.jsxs)(`div`,{className:`setting-row`,children:[(0,Y.jsxs)(`div`,{className:`setting-label`,children:[(0,Y.jsx)(`span`,{className:`title`,children:i(`claude.autoCompactWindow`)}),(0,Y.jsx)(`span`,{className:`desc`,children:i(`claude.autoCompactWindowDesc`)}),e.autoCompactWindow!==null&&(0,Y.jsx)(`span`,{className:`desc`,style:{color:`var(--red)`},children:i(`claude.autoCompactWindowWarn`)})]}),(0,Y.jsx)(`div`,{className:`setting-controls`,children:(0,Y.jsx)(kt,{value:e.autoCompactWindow===null?``:String(e.autoCompactWindow),options:t,onChange:t=>r({...e,autoCompactWindow:t===``?null:Number(t)}),label:i(`claude.autoCompactWindow`),style:{minWidth:130},align:`right`,portal:!0})})]}),(0,Y.jsxs)(`div`,{className:`setting-row`,children:[(0,Y.jsxs)(`div`,{className:`setting-label`,children:[(0,Y.jsx)(`span`,{className:`title`,children:i(`claude.injectAgents`)}),(0,Y.jsx)(`span`,{className:`desc`,children:i(`claude.injectAgentsDesc`)})]}),(0,Y.jsx)(NS,{label:i(`claude.injectAgents`),checked:e.injectAgents,onChange:t=>r({...e,injectAgents:t})})]}),[`webSearchSidecar`,`visionSidecar`].map(t=>{let a=e[t],o=t===`webSearchSidecar`?`claude.webSearchSidecar`:`claude.visionSidecar`,s=t===`webSearchSidecar`?`claude.webSearchSidecarHint`:`claude.visionSidecarHint`,c=`claude-sidecar-models-${t}`;return(0,Y.jsxs)(`div`,{className:`setting-row`,style:{alignItems:`flex-start`},children:[(0,Y.jsxs)(`div`,{className:`setting-label setting-copy`,style:{flex:1},children:[(0,Y.jsx)(`span`,{className:`title`,children:i(o)}),(0,Y.jsx)(`span`,{className:`desc`,children:i(s)})]}),(0,Y.jsxs)(`div`,{className:`setting-controls`,style:{display:`flex`,gap:8},children:[(0,Y.jsx)(kt,{value:kS(a),options:[{value:`inherit`,label:i(`claude.useMainSetting`)},{value:`auto`,label:i(`dash.backendAuto`)},{value:`openai`,label:i(`dash.backendOpenAI`)},{value:`anthropic`,label:i(`dash.backendAnthropic`)}],onChange:n=>{r({...e,[t]:AS(a,n)})},label:i(`dash.sidecarBackend`),portal:!0}),(0,Y.jsx)(`input`,{className:`input mono`,value:a?.model??``,onChange:n=>{r({...e,[t]:jS(a,n.target.value)})},placeholder:i(`claude.sidecarModelPlaceholder`),disabled:!a,list:a?c:void 0,"aria-label":i(`dash.sidecarModel`),style:{minWidth:210},autoComplete:`off`}),a&&(0,Y.jsx)(`datalist`,{id:c,children:n.map(e=>(0,Y.jsx)(`option`,{value:e},e))})]})]},t)})]})}function RS({manualEnv:e}){let t=Q();return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`p`,{className:`muted text-label`,style:{margin:`0 0 8px`},children:(0,Y.jsx)(ft,{k:`claude.quickstartHint`,cmd:`ocx claude`})}),(0,Y.jsx)(`pre`,{className:`mono card`,style:{padding:`10px 14px`,overflowX:`auto`,margin:0},children:`ocx claude`}),(0,Y.jsxs)(`details`,{style:{margin:`10px 0 0`},children:[(0,Y.jsx)(`summary`,{className:`muted text-label`,style:{cursor:`pointer`,padding:`2px 2px`},children:t(`claude.manualEnv`)}),(0,Y.jsx)(`pre`,{className:`mono card text-label`,style:{padding:`10px 14px`,overflowX:`auto`,margin:`6px 0 0`},children:e})]})]})}function zS({rows:e,onRowsChange:t}){let n=Q();return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`p`,{className:`muted text-label`,style:{margin:`0 0 8px`},children:n(`claude.modelMapHint`)}),(0,Y.jsx)(`div`,{className:`stack`,style:{gap:8},children:e.map((r,i)=>(0,Y.jsxs)(`div`,{className:`row`,style:{gap:8},children:[(0,Y.jsx)(`input`,{className:`input mono`,value:r.from,placeholder:n(`claude.mapFrom`),"aria-label":n(`claude.mapFrom`),onChange:n=>t(e.map((e,t)=>t===i?{...e,from:n.target.value}:e)),style:{flex:1}}),(0,Y.jsx)(`span`,{className:`muted`,"aria-hidden":!0,children:`→`}),(0,Y.jsx)(`input`,{className:`input mono`,value:r.to,placeholder:n(`claude.mapTo`),"aria-label":n(`claude.mapTo`),onChange:n=>t(e.map((e,t)=>t===i?{...e,to:n.target.value}:e)),style:{flex:1}}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-icon btn-sm`,onClick:()=>t(e.filter((e,t)=>t!==i)),"aria-label":n(`claude.removeMapping`),style:{color:`var(--red)`},children:(0,Y.jsx)(le,{})})]},r.id))}),(0,Y.jsx)(`div`,{style:{marginTop:8},children:(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>t([...e,{id:wS(),from:``,to:``}]),children:[(0,Y.jsx)(ue,{}),` `,n(`claude.addMapping`)]})})]})}var BS=`etc`;function VS(e){let t=new Map;for(let n of e){let e=/\(([^)]+)\)\s*$/.exec(n.display_name),r=e?e[1]:BS,i=t.get(r);i?i.push(n):t.set(r,[n])}return Array.from(t)}function HS({aliases:e}){let t=Q();return(0,Y.jsxs)(`div`,{className:`claude-aliases`,children:[(0,Y.jsx)(`p`,{className:`muted text-label claude-aliases-hint`,children:t(`claude.aliasesHint`)}),e.length===0?(0,Y.jsx)(`div`,{className:`muted text-label`,children:t(`claude.none`)}):(0,Y.jsx)(`div`,{className:`claude-aliases-scroll`,children:VS(e).map(([e,n])=>(0,Y.jsxs)(`div`,{className:`claude-aliases-group`,children:[(0,Y.jsxs)(`div`,{className:`claude-aliases-group-label`,children:[e===BS?t(`claude.aliasProviderOther`):e,(0,Y.jsx)(`span`,{className:`claude-aliases-group-count`,children:n.length})]}),(0,Y.jsx)(`div`,{className:`claude-aliases-chips`,children:n.map(e=>(0,Y.jsxs)(`span`,{className:`claude-aliases-chip`,children:[(0,Y.jsx)(`code`,{className:`claude-aliases-chip-id`,children:e.id}),e.display_name?(0,Y.jsx)(`span`,{className:`claude-aliases-chip-name`,children:e.display_name}):null]},e.id))})]},e))})]})}function US({apiBase:e,active:t=!0}){let n=Q(),{locale:r}=ut(),i=nt.find(e=>e.code===r)?.htmlLang??`en`,a=`ocx.claude-code.v1:${e}`,o=`claude-code:${e}`,s=(0,_.useMemo)(()=>Dr(a),[a]),c=s?.data??null,[l,u]=(0,_.useState)(()=>c?.state??null),[d,f]=(0,_.useState)(()=>c?.rows??[]),[p,m]=(0,_.useState)(!!c),[h,g]=(0,_.useState)(``),[v,y]=(0,_.useState)(!1),[b,x]=(0,_.useState)(`settings`),[S,C]=(0,_.useState)(!1),w=(0,_.useRef)(!1),T=(0,_.useCallback)(async t=>{let r=await It(await fetch(`${e}/api/claude-code`,{signal:t}),n(`claude.loadFail`));if(!r)throw Error(n(`claude.loadFail`));let i={...r,authMode:r.authMode===`proxy`||r.authMode===`subscription`?r.authMode:`auto`,...CS(r),fastMode:r.fastMode??null,maxContextTokens:r.maxContextTokens??null,autoContext:r.autoContext!==!1,autoCompactWindow:r.autoCompactWindow??null,injectAgents:r.injectAgents!==!1,effectiveModelEnv:r.effectiveModelEnv??{}},o=Object.entries(r.modelMap??{}).map(([e,t])=>({id:wS(),from:e,to:String(t)})),s={state:i,rows:o};if(t.aborted)throw Error(`Claude Code request aborted`);return u(i),f(o),m(!0),Or(a,s),s},[e,a,n]),E=jr(o,[e],T,{isEmpty:()=>!1,enabled:t,initialData:c??void 0,initialDataCachedAt:s?.cachedAt??null,staleAfterMs:6e4}),D=E.state,O=D.data??c,k=l??O?.state??null,A=p?d:O?.rows??d,j=(0,_.useMemo)(()=>SS(k?.available,n(`claude.smallFastModelUnsetOption`)),[k?.available,n]),M=(0,_.useMemo)(()=>{let e=[1e5,2e5,25e4,3e5,35e4,4e5,5e5,6e5,75e4,TS,9e5,1e6].sort((e,t)=>e-t),t=k?.autoCompactWindow??null,r=t!==null&&!e.includes(t)?[...e,t].sort((e,t)=>e-t):e;return[{value:``,label:n(`claude.autoCompactDefault`,{value:ES(TS,i)})},...r.map(e=>({value:String(e),label:ES(e,i)}))]},[k?.autoCompactWindow,n,i]),N=async()=>{if(!k||w.current)return;w.current=!0,C(!0),g(``);let t=!k.enabled;try{await It(await fetch(`${e}/api/claude-code`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:t})}),n(`claude.saveFailed`)),u({...k,enabled:t}),E.refresh()}catch(e){y(!1),g(e instanceof Error&&e.message?e.message:n(`claude.networkError`))}finally{w.current=!1,C(!1)}},P=async()=>{if(!k)return;g(``);let t={};for(let e of A)e.from.trim()&&e.to.trim()&&(t[e.from.trim()]=e.to.trim());try{await It(await fetch(`${e}/api/claude-code`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({enabled:k.enabled,authMode:k.authMode,systemEnv:k.systemEnv,fastMode:k.fastMode,autoContext:k.autoContext,autoCompactWindow:k.autoCompactWindow,injectAgents:k.injectAgents,smallFastModel:k.smallFastModel,modelMap:t,webSearchSidecar:MS(k.webSearchSidecar),visionSidecar:MS(k.visionSidecar)})}),n(`claude.saveFailed`)),y(!0),g(n(`claude.saved`)),E.refresh()}catch(e){y(!1),g(e instanceof Error&&e.message?e.message:n(`claude.networkError`))}};if(D.kind===`disabled`&&!O)return null;if(D.showSkeleton&&!O)return(0,Y.jsx)(ep,{label:n(`claude.loading`),rows:3});if(D.kind===`failed-cold`){let e=D.error instanceof Error?D.error.message:n(`claude.loadFail`);return(0,Y.jsxs)(`div`,{className:`claudecode-workspace-shell`,children:[(0,Y.jsx)($,{tone:`err`,children:e}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>E.refresh(),children:n(`common.retry`)})]})}if(!k)return null;let F=[{id:`settings`,label:n(`claude.workspace.settings`),body:(0,Y.jsx)(LS,{state:k,autoCompactOptions:M,availableModels:k.available??[],onStateChange:u})},{id:`quickstart`,label:n(`claude.quickstart`),body:(0,Y.jsx)(RS,{manualEnv:OS(k)})},{id:`smallFast`,label:n(`claude.smallFastModel`),body:(0,Y.jsx)(FS,{value:k.smallFastModel,tierHaikuModel:k.tierModels?.haiku,options:j,onChange:e=>u({...k,smallFastModel:e})})},{id:`modelMap`,label:n(`claude.modelMap`),meta:String(A.length),body:(0,Y.jsx)(zS,{rows:A,onRowsChange:e=>{m(!0),f(e)}})},{id:`aliases`,label:n(`claude.aliases`),meta:String(k.aliases.length),body:(0,Y.jsx)(HS,{aliases:k.aliases})}],I=F.find(e=>e.id===b)??F[0],L=b===`settings`||b===`smallFast`||b===`modelMap`;return(0,Y.jsxs)(`div`,{className:`claudecode-workspace-shell`,children:[h&&(0,Y.jsx)($,{tone:v?`ok`:`err`,children:h}),D.showError&&(0,Y.jsx)($,{tone:`err`,children:n(`claude.loadFail`)}),k&&(0,Y.jsxs)(`div`,{className:`claudecode-connection-head`,children:[(0,Y.jsx)(`span`,{id:`claudecode-connection-label`,children:n(`claude.enabledLabel`)}),(0,Y.jsx)(Dt,{on:k.enabled,onClick:()=>void N(),disabled:S,label:n(`claude.toggleAria`)})]}),(0,Y.jsxs)(`div`,{className:`claudecode-workspace-root`,children:[(0,Y.jsx)(`aside`,{className:`claudecode-workspace-rail`,"aria-label":n(`claude.pageTitle`),children:(0,Y.jsx)(`div`,{className:`claudecode-workspace-rail-list`,children:F.map(e=>(0,Y.jsx)(`button`,{type:`button`,className:`claudecode-workspace-rail-row${b===e.id?` claudecode-workspace-rail-row--selected`:``}`,onClick:()=>x(e.id),"aria-current":b===e.id?`true`:void 0,children:(0,Y.jsx)(`span`,{className:`claudecode-workspace-rail-name`,children:e.label})},e.id))})}),(0,Y.jsxs)(`section`,{className:`claudecode-workspace-main`,"aria-label":I.label,children:[(0,Y.jsxs)(`div`,{className:`ccw-main-head`,children:[(0,Y.jsxs)(`h3`,{className:`ccw-main-title`,children:[I.label,I.meta==null?null:(0,Y.jsx)(`span`,{className:`count`,children:I.meta})]}),(0,Y.jsx)(`div`,{className:`claudecode-workspace-save`,"data-visible":L?`true`:`false`,children:(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,disabled:!L,tabIndex:L?0:-1,"aria-hidden":!L,onClick:()=>{P()},children:n(`common.save`)})})]}),(0,Y.jsx)(`div`,{className:`ccw-body`,children:I.body})]})]})]})}function WS(e,t,n){let r=t.trim().toLowerCase(),i=(r?e.filter(e=>e.label.toLowerCase().includes(r)||e.route.toLowerCase().includes(r)):e).toSorted((e,t)=>Number(!e.available)-Number(!t.available)),a=i.slice(0,n);return{total:e.length,showSearch:e.length>4,shown:a,hidden:i.length-a.length,noMatch:e.length>0&&i.length===0}}function GS(e){return new Set(Object.keys(e))}function KS(e,t){return t!==null&&e===t}function qS(e){return e||(typeof localStorage>`u`?void 0:localStorage)}function JS(e){return{read(t){let n=qS(t);if(!n)return null;try{let t=n.getItem(e);if(t===null)return null;let r=JSON.parse(t);return Array.isArray(r)?new Set(r.filter(e=>typeof e==`string`)):null}catch{return null}},write(t,n){let r=qS(n);if(r)try{r.setItem(e,JSON.stringify([...t]))}catch{}}}}function YS(e,t){let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}var XS=[`opus`,`fable`,`sonnet`,`haiku`],ZS=JS(`ocx.claudeDesktop.collapsedFamilies.v2`),QS={opus:`claudeDesktop.family.opus`,fable:`claudeDesktop.family.fable`,sonnet:`claudeDesktop.family.sonnet`,haiku:`claudeDesktop.family.haiku`};function $S(e){return{version:1,assignments:Object.fromEntries(Object.entries(e.assignments).map(([e,t])=>[e,{...t}])),defaults:{...e.defaults},...e.appliedFingerprint===void 0?{}:{appliedFingerprint:e.appliedFingerprint},...e.appliedAt===void 0?{}:{appliedAt:e.appliedAt}}}function eC(e){let t={...e.profile.assignments};for(let n of e.models){let e=t[n.route]??n.assignment;t[n.route]={family:XS.includes(e?.family)?e.family:`opus`,alias:typeof e?.alias==`string`?e.alias:``}}return{version:1,assignments:t,defaults:{opus:e.profile.defaults.opus??null,fable:e.profile.defaults.fable??null,sonnet:e.profile.defaults.sonnet??null,haiku:e.profile.defaults.haiku??null}}}function tC(e,t){return e&&typeof e==`object`&&`error`in e&&typeof e.error==`string`?e.error:t}function nC(e,t){return e?e>=1048576?t(`claudeDesktop.contextM`,{n:Math.round(e/1048576)}):e>=1e6?t(`claudeDesktop.contextM`,{n:e/1e6}):t(`claudeDesktop.contextK`,{n:Math.round(e/1e3)}):null}function rC(e){return Dr(e)?.data??null}function iC(e){return Dr(e)?.cachedAt??null}function aC(e){let t=rC(e);return{held:t,data:t?.data??null,profile:t?.profile??null,savedProfile:t?.profile?$S(t.profile):null,destinations:t?.data?Object.fromEntries(t.data.models.map(e=>[e.route,t.profile.assignments[e.route]?.family??`opus`])):{}}}function oC({apiBase:e,active:t=!0,onPortChange:n}){let{t:r,locale:i}=ut(),a=nt.find(e=>e.code===i)?.htmlLang,o=`ocx.claude-desktop.v1:${e}`,s=`claude-desktop:${e}`,c=(0,_.useMemo)(()=>aC(o),[o]),[l,u]=(0,_.useState)(()=>c.profile),[d,f]=(0,_.useState)(()=>c.savedProfile),[p,m]=(0,_.useState)(()=>c.destinations),[h,g]=(0,_.useState)(null),[v,y]=(0,_.useState)(``),[b,x]=(0,_.useState)(null),[S,C]=(0,_.useState)({}),[w,T]=(0,_.useState)({}),[E,D]=(0,_.useState)(()=>ZS.read()??new Set(XS)),[O,k]=(0,_.useState)({}),A=(0,_.useRef)(null),j=(0,_.useCallback)(async t=>{let n=await It(await fetch(`${e}/api/claude-desktop`,{signal:t}),r(`claudeDesktop.loadFail`));if(!n||!(`profile`in n)||!(`models`in n))throw Error(tC(n,r(`claudeDesktop.loadFail`)));let i=eC(n),a={data:n,profile:i};if(t.aborted)throw Error(`Claude Desktop request aborted`);if(u(i),f($S(i)),m(Object.fromEntries(n.models.map(e=>[e.route,i.assignments[e.route]?.family??`opus`]))),ZS.read()===null){let e=Object.fromEntries(XS.map(e=>[e,0]));for(let t of n.models)e[i.assignments[t.route]?.family??`opus`]+=1;D(GS(e))}return Or(o,a),a},[e,o,r,m,u,f]),M=jr(s,[e],j,{isEmpty:()=>!1,enabled:t,initialData:c.held??void 0,initialDataCachedAt:iC(o),staleAfterMs:6e4}),N=M.state,P=N.data??(c.data&&c.profile?{data:c.data,profile:c.profile}:null),F=P?.data??null,I=l??P?.profile??null,L=d??P?.profile??null,R=P?Object.fromEntries(P.data.models.map(e=>[e.route,P.profile.assignments[e.route]?.family??`opus`])):{},z=Object.keys(p).length>0?p:R;(0,_.useEffect)(()=>{if(n){if(typeof F?.port==`number`){n(F.port);return}N.kind===`failed-cold`&&n(null)}},[F?.port,N.kind,n]);let B=(0,_.useMemo)(()=>I!==null&&L!==null&&JSON.stringify(I)!==JSON.stringify(L),[I,L]),V=(0,_.useMemo)(()=>{let e=Object.fromEntries(XS.map(e=>[e,[]]));if(!F||!I)return e;for(let t of F.models)e[I.assignments[t.route]?.family??`opus`].push(t);return e},[F,I]),H=(0,_.useMemo)(()=>{let e={};for(let t of XS){let n=V[t].filter(e=>e.available).map(e=>e.route).sort(),r=I?.defaults[t]??null;e[t]=r&&n.includes(r)?r:n[0]??null}return e},[V,I]),U=`ocx.claude-desktop.status.v1:${e}`,W=`claude-desktop-status:${e}`,G=Dr(U),K=jr(W,[e],async t=>{let n=await Lt(await fetch(`${e}/api/claude-desktop/status`,{signal:t}));if(!n)throw Error(`Claude Desktop status unavailable`);return Or(U,n),n},{isEmpty:()=>!1,pollMs:5e3,enabled:t,initialData:G?.data??void 0}),q=K.state,J=q.data??G?.data??null,X=q.showError,ee=(e,t)=>{!I||I.assignments[e]?.family===t||(u(n=>{if(!n)return n;let r=n.assignments[e];if(!r||r.family===t)return n;let i={...n.assignments,[e]:{...r,family:t}},a={...n.defaults};return a[r.family]===e&&(a[r.family]=Object.keys(i).filter(t=>t!==e&&i[t].family===r.family).sort()[0]??null),a[t]===null&&(a[t]=e),{...n,assignments:i,defaults:a}}),m(n=>({...n,[e]:t})),y(r(`claudeDesktop.moved`,{route:e,family:r(QS[t])})))},te=e=>{let t=YS(E,e);ZS.write(t),D(t)},ne=async t=>{if(!(!I||b)){x(`save`),g(null);try{await It(await fetch(`${e}/api/claude-desktop`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({profile:I})}),r(`claudeDesktop.saveFailed`)),f($S(I)),t?(x(`apply`),(await It(await fetch(`${e}/api/claude-desktop/apply`,{method:`POST`}),r(`claudeDesktop.applyFailed`)))?.saved===!1?(g({tone:`warn`,text:r(`claudeDesktop.appliedMarkerUnsaved`)}),y(r(`claudeDesktop.appliedMarkerUnsaved`))):(g({tone:`ok`,text:r(`claudeDesktop.savedApplied`)}),y(r(`claudeDesktop.savedAppliedAnnounce`)))):(g({tone:`ok`,text:r(`claudeDesktop.saved`)}),y(r(`claudeDesktop.savedAnnounce`))),K.refresh()}catch(e){let t=e instanceof Error?e.message:r(`claudeDesktop.updateFailed`);g({tone:`err`,text:t}),y(t)}finally{x(null)}}},Z=()=>{if(!I)return;let e=URL.createObjectURL(new Blob([`${JSON.stringify(I,null,2)}\n`],{type:`application/json`})),t=document.createElement(`a`);t.href=e,t.download=`claude-desktop-profile.json`,t.click(),URL.revokeObjectURL(e),y(r(`claudeDesktop.exported`))},re=async e=>{let t=e.target.files?.[0];if(e.target.value=``,t)try{let e=JSON.parse(await t.text());if(e.version!==1||!e.assignments||!e.defaults)throw Error(r(`claudeDesktop.importExpected`));let n=eC({...F,profile:e});u(n),g({tone:`ok`,text:r(`claudeDesktop.importReady`)}),y(r(`claudeDesktop.importedAnnounce`))}catch(e){let t=e instanceof Error?e.message:r(`claudeDesktop.importInvalid`);g({tone:`err`,text:t}),y(r(`claudeDesktop.importFailed`,{error:t}))}},ie=(e,t)=>{e.preventDefault();let n=e.dataTransfer.getData(`text/plain`);n&&ee(n,t)};if(N.kind===`disabled`&&!P)return null;if(N.showSkeleton&&!P)return(0,Y.jsx)(ep,{label:r(`claudeDesktop.loading`),rows:4});if(N.kind===`failed-cold`){let e=N.error instanceof Error?N.error.message:r(`claudeDesktop.loadFail`);return(0,Y.jsxs)(`div`,{className:`claude-desktop-error`,children:[(0,Y.jsx)($,{tone:`err`,children:e}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>M.refresh(),children:r(`claudeDesktop.retry`)})]})}return!F||!I?null:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`claude-desktop-toolbar`,children:(0,Y.jsxs)(`div`,{className:`claude-profile-tools`,children:[(0,Y.jsx)(`input`,{ref:A,type:`file`,accept:`application/json,.json`,hidden:!0,onChange:e=>void re(e)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>A.current?.click(),children:r(`claudeDesktop.importJson`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:Z,children:r(`claudeDesktop.exportJson`)})]})}),(0,Y.jsxs)(`div`,{className:`claude-status-bar ${X&&!J?`not-applied`:J?J.desiredEnabled?J.activeProfile===!1?`not-applied`:J.stale?`stale`:J.applied?`applied`:`not-applied`:`not-applied`:`pending`}`,"aria-busy":!J&&!X||void 0,children:[(0,Y.jsx)(`span`,{className:`claude-status-dot`}),(0,Y.jsx)(`span`,{children:X&&!J?r(`claudeDesktop.loadFail`):J?J.desiredEnabled?J.activeProfile===!1?r(`claudeDesktop.status.notActiveProfile`):J.stale?r(`claudeDesktop.status.stale`):J.applied?r(`claudeDesktop.status.applied`):r(`claudeDesktop.status.notApplied`):r(`claudeDesktop.status.disabled`):r(`claudeDesktop.loading`)}),J?.health.lastRequestAt&&(0,Y.jsxs)(`span`,{className:`claude-status-health`,children:[r(`claudeDesktop.health.lastRequest`),`:`,` `,new Date(J.health.lastRequestAt).toLocaleTimeString(a)]}),J&&J.health.requestCount>0&&(0,Y.jsx)(`span`,{className:`claude-status-health`,children:r(`claudeDesktop.health.stats`,{count:J.health.requestCount,errors:J.health.errorCount})})]}),(0,Y.jsx)(`div`,{className:`sr-only`,"aria-live":`polite`,"aria-atomic":`true`,children:v}),h&&(0,Y.jsx)($,{tone:h.tone,children:h.text}),N.showError&&(0,Y.jsx)($,{tone:`err`,children:r(`claudeDesktop.loadFail`)}),X&&J&&(0,Y.jsx)($,{tone:`err`,children:r(`claudeDesktop.loadFail`)}),(0,Y.jsxs)(`div`,{className:`claude-profile-bar`,children:[(0,Y.jsx)(`span`,{className:`claude-dirty${B?` active`:``}`,children:r(B?`claudeDesktop.unsaved`:`claudeDesktop.upToDate`)}),(0,Y.jsxs)(`div`,{className:`claude-save-actions`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,disabled:!B||b!==null,onClick:()=>void ne(!1),children:r(b===`save`?`claudeDesktop.saving`:`common.save`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary`,disabled:b!==null,onClick:()=>void ne(!0),children:b===`apply`?r(`claudeDesktop.applying`):b===`save`?r(`claudeDesktop.saving`):J?.desiredEnabled===!1?r(`claudeDesktop.enableApply`):r(`claudeDesktop.saveApply`)})]})]}),F.models.length===0&&(0,Y.jsx)(At,{title:r(`claudeDesktop.emptyTitle`),children:r(`claudeDesktop.emptyHint`)}),(0,Y.jsx)(`div`,{className:`ocx-group-stack`,"aria-label":r(`claudeDesktop.assignmentsLabel`),children:XS.map(e=>{let t=V[e],n=WS(t,S[e]??``,w[e]??6),i=E.has(e),a=H[e];return(0,Y.jsxs)(`section`,{className:`ocx-group${i?` collapsed`:``}`,"aria-labelledby":`claude-lane-${e}`,onDragOver:e=>e.preventDefault(),onDrop:t=>ie(t,e),children:[(0,Y.jsxs)(`header`,{className:`ocx-group-head${i?``:` open`}`,children:[(0,Y.jsx)(`h3`,{id:`claude-lane-${e}`,className:`ocx-group-heading`,children:(0,Y.jsxs)(`button`,{type:`button`,className:`ocx-group-toggle`,"aria-expanded":!i,"aria-controls":`claude-lane-body-${e}`,onClick:()=>te(e),children:[(0,Y.jsx)(Ce,{className:`ocx-chevron`,width:14,height:14,"aria-hidden":`true`,style:{transform:i?`none`:`rotate(90deg)`}}),(0,Y.jsx)(`span`,{className:`ocx-group-name`,children:r(QS[e])}),(0,Y.jsx)(`span`,{className:`ocx-group-count`,children:r(t.length===1?`claudeDesktop.modelCountOne`:`claudeDesktop.modelCountMany`,{count:t.length})}),a&&(0,Y.jsx)(`code`,{className:`claude-lane-default`,title:a,children:a})]})}),t.length>0&&I.defaults[e]===null&&(0,Y.jsx)(`span`,{className:`claude-default-needed`,children:r(`claudeDesktop.chooseDefault`)}),a&&a!==I.defaults[e]&&(0,Y.jsx)(`span`,{className:`claude-default-needed`,title:a,children:r(`claudeDesktop.temporaryDefault`)})]}),!i&&(0,Y.jsxs)(`div`,{id:`claude-lane-body-${e}`,children:[n.showSearch&&(0,Y.jsx)(`input`,{className:`input claude-lane-search`,type:`search`,placeholder:r(`models.search`),"aria-label":r(`models.search`),value:S[e]??``,onChange:t=>{let n=t.target.value;C(t=>({...t,[e]:n})),T(t=>({...t,[e]:6}))}}),(0,Y.jsxs)(`div`,{className:`claude-lane-models`,children:[t.length===0?(0,Y.jsx)(`div`,{className:`claude-lane-empty`,children:r(`claudeDesktop.laneEmpty`)}):n.noMatch?(0,Y.jsx)(`div`,{className:`claude-lane-empty`,children:r(`claudeDesktop.laneNoMatch`)}):n.shown.map(t=>{let n=I.assignments[t.route],i=nC(t.contextWindow,r),a=z[t.route]??`opus`,o=O[t.route]??KS(t.route,H[e]);return(0,Y.jsxs)(`article`,{className:`claude-model-card${o?` open`:``}`,draggable:t.available,onDragStart:e=>{e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,t.route)},children:[(0,Y.jsxs)(`button`,{type:`button`,className:`claude-model-summary`,"aria-expanded":o,"aria-controls":`claude-model-body-${t.route}`,onClick:()=>k(e=>({...e,[t.route]:!o})),children:[(0,Y.jsx)(Ce,{className:`ocx-chevron`,width:12,height:12,"aria-hidden":`true`,style:{transform:o?`rotate(90deg)`:`none`}}),(0,Y.jsxs)(`span`,{className:`claude-model-names`,children:[(0,Y.jsx)(`strong`,{title:t.label,children:t.label}),(0,Y.jsx)(`code`,{title:t.route,children:t.route})]}),i&&(0,Y.jsx)(`span`,{className:`claude-model-context`,children:i}),!i&&(0,Y.jsx)(`span`,{className:`claude-model-context claude-model-context-unknown`,children:r(`claudeDesktop.contextUnknown`)}),t.supports1m===!0&&(0,Y.jsx)(`span`,{className:`claude-1m-chip`,children:r(`claudeDesktop.supports1m`)}),t.effortSupported===!1&&(0,Y.jsx)(`span`,{className:`claude-effort-badge off`,children:r(`claudeDesktop.effort.displayOnly`)}),t.effortSupported===!0&&(0,Y.jsx)(`span`,{className:`claude-effort-badge on`,children:r(`claudeDesktop.effort.supported`)}),I.defaults[e]===t.route&&(0,Y.jsx)(`span`,{className:`claude-row-default`,children:r(`claudeDesktop.defaultBadge`)}),(0,Y.jsx)(`span`,{className:`badge ${t.available?`badge-green`:`badge-muted`}`,children:t.available?r(`claudeDesktop.available`):r(`claudeDesktop.unavailable`)})]}),o&&(0,Y.jsxs)(`div`,{className:`claude-model-body`,id:`claude-model-body-${t.route}`,children:[H[e]===t.route&&I.defaults[e]!==t.route&&(0,Y.jsx)(`span`,{className:`claude-effective-default`,children:r(`claudeDesktop.temporaryDefault`)}),(0,Y.jsxs)(`div`,{className:`claude-field`,children:[(0,Y.jsx)(`span`,{children:r(`claudeDesktop.alias`)}),(0,Y.jsx)(`code`,{className:`claude-alias`,title:n.alias,children:n.alias})]}),(0,Y.jsxs)(`label`,{className:`claude-default-radio`,children:[(0,Y.jsx)(`input`,{type:`radio`,name:`default-${e}`,checked:I.defaults[e]===t.route,disabled:!t.available,onChange:()=>u(n=>n&&{...n,defaults:{...n.defaults,[e]:t.route}})}),r(`claudeDesktop.useAsDefault`,{family:r(QS[e])})]}),(0,Y.jsxs)(`div`,{className:`claude-move-row`,children:[(0,Y.jsx)(`label`,{htmlFor:`move-${t.route}`,children:r(`claudeDesktop.moveTo`)}),(0,Y.jsx)(`select`,{id:`move-${t.route}`,className:`input`,value:a,disabled:!t.available,onChange:e=>m(n=>({...n,[t.route]:e.target.value})),children:XS.map(e=>(0,Y.jsx)(`option`,{value:e,children:r(QS[e])},e))}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:!t.available||a===e,onClick:()=>ee(t.route,a),children:r(`claudeDesktop.move`)})]})]})]},t.route)}),n.hidden>0&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm claude-lane-more`,onClick:()=>T(t=>({...t,[e]:(t[e]??6)+6})),children:r(`models.showMore`,{n:n.hidden})})]})]})]},e)})})]})}var sC=`integrations/claude`,cC=`integrations/claude/desktop`;function lC(e=typeof window<`u`?window.location.hash:``){return pt(e)===cC?`desktop`:`code`}function uC(e){let t=Tr(`ocx.claude-desktop.v1:${e}`);return typeof t?.data?.port==`number`?t.data.port:null}function dC({apiBase:e,active:t=!0}){let[n,r]=(0,_.useState)(lC),i=Q(),a=(0,_.useRef)(null),o=(0,_.useRef)(null),s=uC(e),[c,l]=(0,_.useState)(null),u=c?.base===e?c.port:s,d=c?.base===e,f=(0,_.useCallback)(t=>{l(n=>n?.base===e&&n.port===t?n:{base:e,port:t})},[e]);(0,_.useEffect)(()=>{let e=()=>r(lC());return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[]);let p=e=>{ht(e===`desktop`?cC:sC),r(e),window.requestAnimationFrame(()=>{(e===`code`?a:o).current?.focus({preventScroll:!0})})},m=e=>{e.key===`ArrowLeft`||e.key===`ArrowRight`?(e.preventDefault(),p(n===`code`?`desktop`:`code`)):e.key===`Home`?(e.preventDefault(),p(`code`)):e.key===`End`&&(e.preventDefault(),p(`desktop`))};return(0,Y.jsxs)(`section`,{className:`claude-page`,children:[(0,Y.jsxs)(`div`,{className:`claude-page-intro`,children:[(0,Y.jsx)(`div`,{className:`page-head`,children:(0,Y.jsx)(`h2`,{children:i(n===`code`?`claude.pageTitle`:`claudeDesktop.title`)})}),n===`code`?(0,Y.jsx)(`p`,{className:`page-sub`,children:i(`claude.subtitle`)}):(0,Y.jsx)(`p`,{className:`page-sub`,children:u==null?i(d?`claudeDesktop.loadFail`:`claudeDesktop.loading`):i(`claudeDesktop.subtitle`,{port:u})})]}),(0,Y.jsxs)(`div`,{className:`claude-tabs`,role:`tablist`,"aria-label":i(`claude.tabsLabel`),children:[(0,Y.jsx)(`button`,{type:`button`,role:`tab`,ref:a,"aria-selected":n===`code`,"aria-controls":`claude-code-panel`,id:`claude-code-tab`,className:n===`code`?`active`:``,tabIndex:n===`code`?0:-1,onKeyDown:m,onClick:()=>p(`code`),children:i(`claude.tabCode`)}),(0,Y.jsx)(`button`,{type:`button`,role:`tab`,ref:o,"aria-selected":n===`desktop`,"aria-controls":`claude-desktop-panel`,id:`claude-desktop-tab`,className:n===`desktop`?`active`:``,tabIndex:n===`desktop`?0:-1,onKeyDown:m,onClick:()=>p(`desktop`),children:i(`claude.tabDesktop`)})]}),(0,Y.jsx)(`div`,{id:`claude-code-panel`,role:`tabpanel`,"aria-labelledby":`claude-code-tab`,hidden:n!==`code`,children:(0,Y.jsx)(US,{apiBase:e,active:t&&n===`code`},e)}),(0,Y.jsx)(`div`,{id:`claude-desktop-panel`,role:`tabpanel`,"aria-labelledby":`claude-desktop-tab`,hidden:n!==`desktop`,children:(0,Y.jsx)(oC,{apiBase:e,active:t&&n===`desktop`,onPortChange:f},e)})]})}function fC(e,t,n,r){let i=e.filter(e=>r===`native`===e.native).map(e=>({...e,alias:t.get(e.id)??null,enabled:!n.has(e.id)})).toSorted((e,t)=>Number(!e.enabled)-Number(!t.enabled));return{rows:i,total:i.length,enabled:i.filter(e=>e.enabled).length}}var pC=JS(`ocx.grok.collapsedGroups.v2`),mC=[{id:`native`,tkey:`grok.groupNative`},{id:`routed`,tkey:`grok.groupRouted`}],hC=new Set(mC.map(e=>e.id));function gC(e,t){return e?e>=1048576?t(`claudeDesktop.contextM`,{n:Math.round(e/1048576)}):e>=1e6?t(`claudeDesktop.contextM`,{n:e/1e6}):t(`claudeDesktop.contextK`,{n:Math.round(e/1e3)}):`—`}function _C({apiBase:e,active:t=!0}){let n=Q(),r=`ocx.grok.status.v1:${e}`,i=Dr(r),a=i?.data??null,[o,s]=(0,_.useState)(null),[c,l]=(0,_.useState)(()=>pC.read()??new Set(hC)),[u,d]=(0,_.useState)(null),[f,p]=(0,_.useState)(null),[m,h]=(0,_.useState)(``),g=(0,_.useCallback)(async t=>{let i=await It(await fetch(`${e}/api/grok`,{signal:t}),n(`grok.loadFail`));if(!i)throw Error(n(`grok.loadFail`));let a={...i,candidates:i.candidates??[],excluded:i.excluded??[]};return Or(r,a),a},[e,r,n]),v=`grok-status:${e}`,y=jr(v,[e],g,{isEmpty:()=>!1,initialData:a??void 0,initialDataCachedAt:i?.cachedAt??null,staleAfterMs:6e4,enabled:t}),{state:b}=y,x=y.refresh,S=b.data??a,C=(0,_.useMemo)(()=>new Set(S?.excluded??[]),[S]),w=o??C,T=(0,_.useMemo)(()=>o!==null&&(o.size!==C.size||[...o].some(e=>!C.has(e))),[o,C]),E=(0,_.useMemo)(()=>new Map((S?.models??[]).map(e=>[e.id,e.alias])),[S]),D=e=>{let t=YS(c,e);pC.write(t),l(t)},O=e=>{let t=e?new Set(mC.map(e=>e.id)):new Set;pC.write(t),l(t)},k=(e,t)=>{s(n=>{let r=new Set(n??C);return t?r.delete(e):r.add(e),r})},A=async t=>{if(!u){d(`save`),p(null);try{await It(await fetch(`${e}/api/grok/selection`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({excluded:[...w]})}),n(`grok.saveFailed`));let i=[...w];if(S&&q(v,{...S,excluded:i}),s(null),t){d(`apply`);let t=await fetch(`${e}/api/grok/apply`,{method:`POST`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.message??e.error??n(`grok.applyFailed`))}let r=await t.json().catch(()=>({}));r.skippedReason?(p({tone:`err`,text:r.message??n(`grok.applySkipped`)}),h(r.message??n(`grok.applySkipped`))):(p({tone:`ok`,text:n(`grok.savedApplied`)}),h(n(`grok.savedApplied`))),await x()}else p({tone:`ok`,text:n(`grok.saved`)}),h(n(`grok.saved`)),S&&Or(r,{...S,excluded:i})}catch(e){let t=e instanceof Error?e.message:n(`grok.saveFailed`);p({tone:`err`,text:t}),h(t)}finally{d(null)}}};if(b.showSkeleton&&!S)return(0,Y.jsx)(`section`,{className:`grok-page`,children:(0,Y.jsx)(ep,{label:n(`grok.loading`),rows:4})});if(b.kind===`failed-cold`){let e=b.error instanceof Error?b.error.message:n(`grok.loadFail`);return(0,Y.jsxs)(`section`,{className:`grok-page`,children:[(0,Y.jsx)(`div`,{className:`alert alert-err`,role:`alert`,children:e}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>x(),children:n(`common.retry`)})]})}return(0,Y.jsxs)(`section`,{className:`grok-page`,"aria-busy":b.refreshing||void 0,children:[(0,Y.jsx)(`h2`,{className:`page-title`,children:n(`grok.title`)}),(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`grok.subtitle`)}),(0,Y.jsx)(`div`,{className:`sr-only`,"aria-live":`polite`,"aria-atomic":`true`,children:m}),f&&(0,Y.jsx)($,{tone:f.tone,children:f.text}),b.showError&&(0,Y.jsx)($,{tone:`err`,children:n(`grok.loadFail`)}),S&&S.candidates.length>0&&(0,Y.jsxs)(`div`,{className:`claude-profile-bar`,children:[(0,Y.jsx)(`span`,{className:`claude-dirty${T?` active`:``}`,children:n(T?`grok.unsaved`:`grok.upToDate`)}),(0,Y.jsxs)(`div`,{className:`claude-save-actions`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,disabled:!T||u!==null,onClick:()=>void A(!1),children:n(u===`save`?`grok.saving`:`common.save`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary`,disabled:!T||u!==null,onClick:()=>void A(!0),children:n(u===`apply`?`grok.applying`:u===`save`?`grok.saving`:`grok.saveApply`)})]})]}),S?.present?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`grok-endpoint`,children:[(0,Y.jsx)(`span`,{children:n(`grok.endpoint`)}),(0,Y.jsx)(`code`,{children:S.baseUrl??`—`})]}),(0,Y.jsx)(`p`,{className:`page-sub`,children:(0,Y.jsx)(`code`,{children:S.configPath})})]}):(0,Y.jsxs)(At,{title:n(`grok.notConfiguredTitle`),children:[n(`grok.notConfiguredHint`),(0,Y.jsx)(`br`,{}),(0,Y.jsx)(`code`,{children:S?.configPath})]}),S&&S.candidates.length>0&&(0,Y.jsxs)(`div`,{className:`ocx-group-stack`,children:[(0,Y.jsxs)(`div`,{className:`row`,style:{gap:6,margin:`2px 0 10px`},children:[(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-ghost btn-sm text-caption`,onClick:()=>O(!0),disabled:u!==null,children:[(0,Y.jsx)(Ce,{width:12,height:12,"aria-hidden":`true`}),` `,n(`models.collapseAll`)]}),(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-ghost btn-sm text-caption`,onClick:()=>O(!1),disabled:u!==null,children:[(0,Y.jsx)(Ce,{width:12,height:12,"aria-hidden":`true`,style:{transform:`rotate(90deg)`}}),` `,n(`models.expandAll`)]})]}),mC.map(e=>{let t=fC(S.candidates,E,w,e.id);if(t.total===0)return null;let r=c.has(e.id);return(0,Y.jsxs)(`section`,{className:`ocx-group${r?` collapsed`:``}`,"aria-labelledby":`grok-group-${e.id}`,children:[(0,Y.jsx)(`header`,{className:`ocx-group-head${r?``:` open`}`,children:(0,Y.jsx)(`h3`,{id:`grok-group-${e.id}`,className:`ocx-group-heading`,children:(0,Y.jsxs)(`button`,{type:`button`,className:`ocx-group-toggle`,"aria-expanded":!r,"aria-controls":`grok-group-body-${e.id}`,onClick:()=>D(e.id),children:[(0,Y.jsx)(Ce,{className:`ocx-chevron`,width:14,height:14,"aria-hidden":`true`,style:{transform:r?`none`:`rotate(90deg)`}}),(0,Y.jsx)(`span`,{className:`ocx-group-name`,children:n(e.tkey)}),(0,Y.jsx)(`span`,{className:`ocx-group-count`,children:n(`grok.enabledCount`,{on:t.enabled,total:t.total})})]})})}),!r&&(0,Y.jsx)(`div`,{id:`grok-group-body-${e.id}`,className:`grok-model-list`,children:t.rows.map(e=>(0,Y.jsxs)(`div`,{className:`grok-model-row`,children:[(0,Y.jsx)(Dt,{on:e.enabled,onClick:()=>k(e.id,!e.enabled),disabled:u!==null,label:n(`grok.toggleModel`,{id:e.id})}),(0,Y.jsxs)(`span`,{className:`grok-model-names`,children:[(0,Y.jsx)(`strong`,{title:e.id,children:e.id}),(0,Y.jsx)(`code`,{title:e.alias??void 0,children:e.alias??`—`})]}),(0,Y.jsx)(`span`,{className:`claude-model-context`,children:gC(e.contextWindow,n)})]},e.id))})]},e.id)})]})]})}async function vC(e,t){try{let n=await fetch(`${e}/api/native-integrations/cursor`,{signal:t});if(!n.ok)return null;let r=await Lt(n);return!r||typeof r!=`object`||!r.gateway||!r.privateInference?null:r}catch{return null}}function yC({value:e,label:t}){let n=Q(),[r,i]=(0,_.useState)(!1),a=(0,_.useRef)(null);(0,_.useEffect)(()=>()=>{a.current!==null&&window.clearTimeout(a.current)},[]);let o=async()=>{try{await navigator.clipboard.writeText(e),i(!0),a.current!==null&&window.clearTimeout(a.current),a.current=window.setTimeout(()=>i(!1),1500)}catch{i(!1)}};return(0,Y.jsxs)(`div`,{className:`cursor-gateway-row`,children:[(0,Y.jsx)(`span`,{className:`cursor-gateway-label`,children:t}),(0,Y.jsx)(`code`,{className:`cursor-gateway-value`,children:e}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void o(),"aria-label":`${n(`integrations.cursor.copy`)} ${t}`,children:n(r?`integrations.cursor.copied`:`integrations.cursor.copy`)})]})}function bC({labelKey:e,installed:t,path:n,version:r}){let i=Q();return(0,Y.jsxs)(`div`,{className:`cursor-detect-row`,"data-installed":t?`true`:`false`,children:[(0,Y.jsx)(`span`,{className:`cursor-detect-name`,children:i(e)}),(0,Y.jsx)(`span`,{className:`badge ${t?`badge-green`:`badge-muted`}`,children:i(t?`integrations.cursor.detected`:`integrations.cursor.notFound`)}),t&&n&&(0,Y.jsxs)(`span`,{className:`cursor-detect-path muted`,children:[r?`${r} · `:``,n]})]})}function xC({apiBase:e,active:t}){let{t:n,locale:r}=ut(),[i,a]=(0,_.useState)(()=>Date.now()),o=(0,_.useCallback)(async t=>{let n=await vC(e,t);if(!n)throw Error(`cursor status unavailable`);return a(Date.now()),n},[e]),s=jr(`integration-cursor-page:${e}`,[e],o,{isEmpty:()=>!1,enabled:t,pollMs:15e3,pauseWhenHidden:!0}),c=s.state.data??null,l=Pi(n);return(0,Y.jsxs)(`section`,{className:`integration-native-page cursor-page`,"aria-labelledby":`cursor-integration-title`,children:[(0,Y.jsx)(`h3`,{id:`cursor-integration-title`,children:n(`integrations.cursor.title`)}),(0,Y.jsx)(`p`,{children:n(`integrations.cursor.intro`)}),s.state.showError&&(0,Y.jsx)($,{tone:`err`,children:n(`integrations.cursor.unavailable`)}),!c&&!s.state.showError&&(0,Y.jsx)(ep,{label:n(`integrations.cursor.loading`),rows:4}),c&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`cursor-card`,children:[(0,Y.jsx)(`h4`,{children:n(`integrations.cursor.detection`)}),(0,Y.jsx)(bC,{labelKey:`integrations.cursor.privateInference`,installed:c.privateInference.installed,path:c.privateInference.path,version:c.privateInference.version}),(0,Y.jsx)(bC,{labelKey:`integrations.cursor.regular`,installed:c.regularCursor.installed,path:c.regularCursor.path,version:null}),!c.privateInference.installed&&(0,Y.jsxs)($,{tone:`warn`,children:[n(c.regularCursor.installed?`integrations.cursor.regularOnly`:`integrations.cursor.nothingFound`),` `,(0,Y.jsx)(`a`,{href:c.guideUrl,target:`_blank`,rel:`noreferrer`,"data-cursor-guide":`notice`,children:n(`integrations.cursor.guide`)})]})]}),(0,Y.jsxs)(`div`,{className:`cursor-card`,children:[(0,Y.jsx)(`h4`,{children:n(`integrations.cursor.gateway`)}),(0,Y.jsx)(`p`,{className:`muted`,children:n(`integrations.cursor.gatewayHint`)}),(0,Y.jsx)(yC,{label:n(`integrations.cursor.baseUrl`),value:c.gateway.baseUrl}),c.gateway.apiKeyMode===`placeholder`?(0,Y.jsx)(yC,{label:n(`integrations.cursor.apiKey`),value:c.gateway.placeholder}):(0,Y.jsxs)(`div`,{className:`cursor-gateway-row`,children:[(0,Y.jsx)(`span`,{className:`cursor-gateway-label`,children:n(`integrations.cursor.apiKey`)}),(0,Y.jsx)(`span`,{className:`cursor-gateway-value`,children:n(`integrations.cursor.apiKeyCredential`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>ht(`integrations/keys`),children:n(`integrations.tab.keys`)})]})]}),(0,Y.jsxs)(`div`,{className:`cursor-card`,"data-seen":c.lastSeen?`true`:`false`,children:[(0,Y.jsx)(`h4`,{children:n(`integrations.cursor.connection`)}),c.lastSeen?(0,Y.jsx)(`p`,{children:(0,Y.jsx)(`span`,{className:`badge ${i-c.lastSeen.at<864e5?`badge-green`:`badge-muted`}`,children:n(`integrations.cursor.seen`,{time:Ni(c.lastSeen.at,l,i),ua:c.lastSeen.userAgent})})}):(0,Y.jsx)(`p`,{className:`muted`,children:n(`integrations.cursor.neverSeen`)})]}),(0,Y.jsxs)(`div`,{className:`cursor-card`,children:[(0,Y.jsx)(`h4`,{children:n(`integrations.cursor.models`)}),(0,Y.jsx)(`p`,{className:`muted`,children:c.effortTable.source===`bundle`?n(`integrations.cursor.ladderFromBundle`,{version:c.effortTable.version??n(`integrations.cursor.unknownVersion`)}):n(`integrations.cursor.ladderFromStatic`)}),(0,Y.jsxs)(`table`,{className:`cursor-model-table`,children:[(0,Y.jsx)(`thead`,{children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{children:n(`integrations.cursor.colModel`)}),(0,Y.jsx)(`th`,{children:n(`integrations.cursor.colReasoning`)}),(0,Y.jsx)(`th`,{children:n(`integrations.cursor.colContext`)})]})}),(0,Y.jsx)(`tbody`,{children:c.models.map(e=>(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`td`,{children:(0,Y.jsx)(`code`,{children:e.id})}),(0,Y.jsx)(`td`,{children:e.reasoning?e.reasoning.join(` · `):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`cursor-no-control`,title:n(`integrations.cursor.noControlTitle`),"aria-label":n(`integrations.cursor.noControlTitle`),children:n(`integrations.cursor.noControl`)}),e.effortRows.length>0?(0,Y.jsx)(`span`,{className:`cursor-effort-rows`,children:n(e.effortRows.length===1?`integrations.cursor.effortRowsOne`:`integrations.cursor.effortRowsMany`,{n:e.effortRows.length})}):(0,Y.jsx)(`span`,{className:`cursor-effort-rows muted`,children:n(`integrations.cursor.effortRowsOff`)})]})}),(0,Y.jsx)(`td`,{children:e.context?`${Wn(e.context.defaultWindow,r)} · ${Wn(e.context.longWindow,r)}`:n(`integrations.cursor.singleWindow`)})]},e.id))})]}),c.models.some(e=>e.tableLess)&&(0,Y.jsx)(`p`,{className:`muted`,"data-cursor-tableless-hint":!0,children:n(`integrations.cursor.tableLessHint`)})]}),(0,Y.jsx)(`p`,{children:(0,Y.jsx)(`a`,{href:c.guideUrl,target:`_blank`,rel:`noreferrer`,children:n(`integrations.cursor.guide`)})})]})]})}var SC={"not-installed":`integrations.state.notInstalled`,unknown:`integrations.state.unknown`,absent:`integrations.state.absent`,current:`integrations.state.current`,stale:`integrations.state.stale`,conflict:`integrations.state.conflict`,unsafe:`integrations.state.unsafe`},CC={"not-installed":`badge badge-muted`,unknown:`badge badge-muted`,absent:`badge badge-muted`,current:`badge badge-green`,stale:`badge badge-amber`,conflict:`badge integration-badge--danger`,unsafe:`badge integration-badge--danger-outline`};function wC({state:e,installed:t,id:n}){let r=Q(),i=e===`unknown`||e===`not-installed`||t?e:`not-installed`;return(0,Y.jsx)(`span`,{id:n,className:CC[i],"data-integration-state":i,children:r(SC[i])})}function TC({copyKey:e,vars:t}){let n=Q()(e,t),r=t?.path;if(!r||!n.includes(r))return(0,Y.jsx)(`p`,{children:n});let[i,...a]=n.split(r);return(0,Y.jsxs)(`p`,{children:[i,(0,Y.jsx)(`code`,{children:r}),a.join(r)]})}function EC({copy:e,onConfirm:t,onClose:n}){let r=Q(),i=(0,_.useRef)(null),[a,o]=(0,_.useState)(!1),[s,c]=(0,_.useState)(null),l=`integration-consequence-dialog-title`;(0,_.useEffect)(()=>{let e=i.current;return e&&!e.open&&e.showModal(),()=>{e?.open&&e.close()}},[]);let u=(0,_.useCallback)(e=>{e.preventDefault(),a||n()},[n,a]),d=(0,_.useCallback)(async()=>{if(!a){o(!0),c(null);try{await t()}catch(e){c(e instanceof Error?e.message:r(`integrations.error.generic`)),o(!1)}}},[t,a,r]),f=[(0,Y.jsx)(TC,{copyKey:e.changesKey,vars:e.vars},`changes`),(0,Y.jsx)(TC,{copyKey:e.breakageKey,vars:e.vars},`breakage`),(0,Y.jsx)(TC,{copyKey:e.undoKey,vars:e.vars},`undo`)];return e.sideEffectKey&&f.push((0,Y.jsx)(TC,{copyKey:e.sideEffectKey,vars:e.vars},`side-effect`)),(0,Y.jsxs)(`dialog`,{ref:i,className:`modal-overlay`,"aria-labelledby":l,onCancel:u,children:[(0,Y.jsx)(`button`,{type:`button`,className:`modal-backdrop-dismiss`,"aria-label":r(`common.close`),tabIndex:-1,onClick:()=>{a||n()}}),(0,Y.jsxs)(`div`,{className:`modal-card integration-consequence-dialog`,role:`document`,children:[(0,Y.jsxs)(`div`,{className:`modal-head`,children:[(0,Y.jsx)(`h3`,{id:l,children:r(e.titleKey,e.vars)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:n,disabled:a,children:r(`common.close`)})]}),(0,Y.jsx)(`div`,{className:`integration-consequence-body`,children:f}),s&&(0,Y.jsx)($,{tone:`err`,children:s}),(0,Y.jsx)(`div`,{className:`modal-actions`,children:(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>void d(),disabled:a,children:r(e.confirmKey)})})]})]})}function DC({apiBase:e,row:t,onClose:n,onRestored:r,profileId:i,onReconcile:a}){let o=Q(),s=(0,_.useRef)(null),c=(0,_.useRef)(null),l=(0,_.useRef)(null),u=(0,_.useRef)(!1),[d,f]=(0,_.useState)(!1),[p,m]=(0,_.useState)(!1),[h,g]=(0,_.useState)(null);(0,_.useEffect)(()=>{let e=s.current,t=document.activeElement;return c.current=t?.tagName===`BUTTON`?t:null,l.current=t?.closest?.(`section, [role='region'], main`)??null,e&&!e.open&&e.showModal(),()=>{e?.open&&e.close();let t=l.current;if(u.current&&t?.isConnected){t.hasAttribute(`tabindex`)||t.setAttribute(`tabindex`,`-1`),t.focus?.();return}let n=c.current;if(n?.isConnected){n.focus?.();return}t?.isConnected&&(t.hasAttribute(`tabindex`)||t.setAttribute(`tabindex`,`-1`),t.focus?.())}},[]);let v=(0,_.useCallback)(e=>{e.preventDefault(),p||n()},[n,p]),y=async()=>{if(!p){m(!0),g(null);try{await Tf(e,t.opId,d,void 0,t.clientId===`aside`?i??t.profileId:void 0),u.current=!0,r(),n()}catch(e){if(t.clientId===`aside`&&a?.(),Gf(e)?.reason===`drift_requires_confirm`){f(!0),m(!1);return}g(Xf(o,e)),m(!1)}}};return(0,Y.jsxs)(`dialog`,{ref:s,className:`modal-overlay`,"aria-labelledby":`integration-restore-title`,onCancel:v,children:[(0,Y.jsx)(`button`,{type:`button`,className:`modal-backdrop-dismiss`,"aria-label":o(`common.close`),tabIndex:-1,onClick:()=>{p||n()}}),(0,Y.jsxs)(`div`,{className:`modal-card integration-restore-dialog`,role:`document`,children:[(0,Y.jsx)(`div`,{className:`modal-head`,children:(0,Y.jsx)(`h3`,{id:`integration-restore-title`,children:o(d?`integrations.restore.driftTitle`:`integrations.restore.title`)})}),(0,Y.jsx)(`div`,{className:`modal-desc`,children:o(d?`integrations.restore.driftBody`:`integrations.restore.body`)}),(0,Y.jsx)(`p`,{className:`integration-path`,children:t.configPath}),h&&(0,Y.jsx)($,{tone:`err`,children:h}),(0,Y.jsxs)(`div`,{className:`modal-actions`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:n,disabled:p,children:o(`common.cancel`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>void y(),disabled:p,children:o(p?`integrations.restore.pending`:d?`integrations.restore.confirmDrift`:`integrations.restore.confirm`)})]})]})]})}var OC={opencode:`integrations.tab.opencode`,pi:`integrations.tab.pi`,omp:`integrations.tab.omp`,hermes:`integrations.tab.hermes`,openclaw:`integrations.tab.openclaw`,kimi:`integrations.tab.kimi`,gajae:`integrations.tab.gajae`,dsh:`integrations.tab.dsh`,mcode:`integrations.tab.mcode`,zcode:`integrations.tab.zcode`,prime:`integrations.tab.prime`,aside:`integrations.tab.aside`,raycast:`integrations.tab.raycast`,omo:`integrations.tab.omo`,cline:`integrations.tab.cline`},kC={apply:`integrations.kind.apply`,disable:`integrations.kind.disable`,refresh:`integrations.kind.refresh`,restore:`integrations.kind.restore`,overwrite:`integrations.kind.overwrite`};function AC(e){return e===`current`||e===`stale`}function jC(e,t,n){let r={id:`codex`,hash:`integrations/codex`,labelKey:`integrations.tab.codex`,toggle:`codex`,toggleBlocked:t?.disableBlocked??null,togglePath:t?.configPath??null,status:null,detail:null,detailVars:null};if(n===void 0)return e?e.routingInjected===!0?{...r,state:e.status===`error`?`stale`:`current`,installed:!0,applied:!0,detailKey:`integrations.detail.codexRouted`}:{...r,state:`absent`,installed:!0,applied:!1,detail:e.recommendedCommand??null,detailKey:e.recommendedCommand?null:`integrations.detail.codexAbsent`}:{...r,state:`unknown`,installed:!1,applied:!1,detailKey:null};if(!n)return{...r,state:`unknown`,installed:!1,applied:!1,detailKey:null};if(!t)return{...r,toggle:null,state:`unknown`,installed:!1,applied:!1,detailKey:null};let i=t.desiredEnabled;return e?e.routingInjected===!0?{...r,state:e.status===`error`?`stale`:`current`,installed:t.installed,applied:!0,toggleOn:i,detailKey:`integrations.detail.codexRouted`}:{...r,state:`absent`,installed:t.installed,applied:!1,toggleOn:i,detail:e.recommendedCommand??null,detailKey:e.recommendedCommand?null:`integrations.detail.codexAbsent`}:{...r,state:`unknown`,installed:t.installed,applied:!1,toggleOn:i,detailKey:null}}function MC(e,t){let n={hash:`integrations/keys`,labelKey:`integrations.tab.keys`};return e===`checking`?{...n,state:`checking`,detailKey:`integrations.detail.keyChecking`,detailVars:null}:e===`unavailable`||t===null?{...n,state:`unavailable`,detailKey:`integrations.detail.keyUnavailable`,detailVars:null}:{...n,state:t>0?`issued`:`none-issued`,detailKey:t>0?`integrations.detail.keyCount`:`integrations.detail.keyNone`,detailVars:t>0?{count:String(t)}:null}}function NC(e){return e?e.enabled===!0?e.authMode===`subscription`?`claude.authModeSubscription`:e.authMode===`proxy`?`claude.authModeProxy`:e.authMode===`auto`?`claude.authModeAuto`:null:`integrations.detail.claudeOff`:null}function PC(e,t,n){let r={id:`claude`,hash:`integrations/claude`,labelKey:`integrations.tab.claude`,toggle:`claude`,toggleBlocked:t?.disableBlocked??null,togglePath:t?.configPath??null,status:null,detail:null,detailVars:null},i=NC(e);if(n===void 0){if(!e)return{...r,state:`unknown`,installed:!1,applied:!1,detailKey:i};let t=e.enabled===!0;return{...r,state:t?`current`:`absent`,installed:!0,applied:t,detailKey:i}}return n?t?{...r,state:t.state,installed:t.installed,applied:t.state===`current`,detailKey:i}:{...r,toggle:null,state:`unknown`,installed:!1,applied:!1,detailKey:i}:{...r,state:`unknown`,installed:!1,applied:!1,detailKey:i}}function FC(e,t,n){let r={id:`claudeDesktop`,hash:`integrations/claude/desktop`,labelKey:`claudeDesktop.title`,toggle:`claude-desktop`,toggleBlocked:t?.disableBlocked??null,togglePath:t?.configPath??null,status:null,detail:null,detailVars:null};if(!e||!n||!t||typeof e.desiredEnabled!=`boolean`)return{...r,toggle:null,state:`unknown`,installed:!1,applied:!1,detailKey:null};let i=e.desiredEnabled;if(!i)return e.applied===!0||e.driftReason===`desired_off_gateway_selected`?{...r,state:`stale`,installed:e.installed===!0,applied:!0,toggleOn:!1,detailKey:`integrations.detail.desktopDesiredOffCleanupPending`}:{...r,state:`absent`,installed:e.installed===!0,applied:!1,toggleOn:!1,detailKey:`integrations.detail.desktopDesiredOff`};if(e.applied!==!0)return{...r,state:`absent`,installed:e.installed===!0,applied:!1,toggleOn:i,detailKey:`integrations.detail.desktopDesiredOnNotApplied`};let a=e.stale===!0||e.activeProfile===!1;return{...r,state:a?`stale`:`current`,installed:!0,applied:!0,toggleOn:i,detailKey:e.activeProfile===!1?`integrations.detail.desktopNotServed`:a?`integrations.detail.desktopStale`:`integrations.detail.desktopCurrent`}}function IC(e){if(!e)return{detailKey:null,detailVars:null};let t=e.present===!0;return{detailKey:t?`integrations.detail.grokModels`:`integrations.detail.grokAbsent`,detailVars:t?{count:String(e.models?.length??0)}:null}}function LC(e,t,n){let r={id:`grok`,hash:`integrations/grok`,labelKey:`integrations.tab.grok`,toggle:`grok`,toggleBlocked:t?.disableBlocked??null,togglePath:t?.configPath??null,status:null,detail:null},i=IC(e);if(n===void 0){if(!e)return{...r,state:`unknown`,installed:!1,applied:!1,...i};let t=e.present===!0;return{...r,state:t?`current`:`absent`,installed:t,applied:t,...i}}return n?t?{...r,state:t.state,installed:t.installed,applied:t.state===`current`,...i}:{...r,toggle:null,state:`unknown`,installed:!1,applied:!1,...i}:{...r,state:`unknown`,installed:!1,applied:!1,...i}}function RC(e,t=Date.now()){let n={id:`cursor`,hash:`integrations/cursor`,labelKey:`integrations.tab.cursor`,toggle:null,toggleBlocked:null,togglePath:null,status:null,detail:null,detailVars:null};if(!e)return{...n,state:`unknown`,installed:!1,applied:!1,detailKey:null};if(!e.privateInference.installed)return{...n,state:`not-installed`,installed:!1,applied:!1,detailKey:`integrations.detail.cursorAbsent`};let r=e.lastSeen!==null&&t-e.lastSeen.at<864e5;return{...n,state:r?`current`:`absent`,installed:!0,applied:r,detailKey:r?`integrations.detail.cursorSeen`:`integrations.detail.cursorNeverSeen`}}function zC(e){return{id:e.clientId,hash:`integrations/${e.clientId}`,labelKey:OC[e.clientId],state:e.installed?e.state:`not-installed`,installed:e.installed,applied:e.installed&&AC(e.state),detail:e.configPath,detailKey:null,detailVars:null,toggle:e.clientId,toggleBlocked:null,togglePath:e.configPath,status:e}}function BC(e){let t=e.native?.find(e=>e.clientId===`codex`),n=e.native?.find(e=>e.clientId===`claude`),r=e.native?.find(e=>e.clientId===`grok`),i=new Map(e.clients.map(e=>[e.clientId,e])),a=[jC(e.codex,t,e.nativeSettled),PC(e.claude,n,e.nativeSettled),FC(e.claudeDesktop,e.native?.find(e=>e.clientId===`claude-desktop`),e.nativeSettled),LC(e.grok,r,e.nativeSettled),RC(e.cursor)];for(let t of lf){let n=i.get(t);if(n){a.push(zC(n));continue}e.clientsSettled||a.push({id:t,hash:`integrations/${t}`,labelKey:OC[t],state:`unknown`,installed:!1,applied:!1,detail:null,detailKey:null,detailVars:null,toggle:null,toggleBlocked:null,togglePath:null,status:null})}return{keysRow:MC(e.keyPhase,e.keyCount),rows:a}}function VC(e){return{detected:e.filter(e=>e.installed).length,applied:e.filter(e=>e.applied).length,stale:e.filter(e=>e.state===`stale`).length,unknown:e.filter(e=>e.state===`unknown`).length}}var HC=6;function UC({row:e,showClient:t,onRestore:n,onDelete:r}){let i=Q();return(0,Y.jsxs)(`li`,{className:`integration-history-row`,children:[(0,Y.jsx)(`span`,{className:`integration-history-kind`,children:i(kC[e.kind])}),t&&(0,Y.jsx)(`span`,{className:`integration-history-client`,children:e.clientId}),(0,Y.jsx)(`span`,{className:`integration-history-at`,children:new Date(e.at).toLocaleString()}),e.snapshot===`expired`?(0,Y.jsx)(`span`,{className:`badge badge-muted`,children:i(`integrations.action.snapshotExpired`)}):(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(e),children:e.undoable?i(`integrations.action.undo`):i(`integrations.action.restorePoint`)}),e.deletable&&r&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>r(e),"aria-label":i(`integrations.rollback.deleteAria`,{at:new Date(e.at).toLocaleString()}),children:i(`integrations.rollback.delete`)})]})}function WC({rows:e,showClient:t,onRestore:n,onDelete:r}){let i=Q(),[a,o]=(0,_.useState)(HC),[s,...c]=e;if(!s)return null;let l=c.slice(0,a),u=c.length-l.length;return(0,Y.jsxs)(`div`,{className:`integration-history`,children:[(0,Y.jsx)(`ul`,{className:`integration-history-list`,children:(0,Y.jsx)(UC,{row:s,showClient:t,onRestore:n,onDelete:r})}),c.length>0&&(0,Y.jsxs)(`details`,{className:`integration-history-older`,children:[(0,Y.jsx)(`summary`,{children:i(`integrations.rollback.older`)}),(0,Y.jsx)(`ul`,{className:`integration-history-list`,children:l.map(e=>(0,Y.jsx)(UC,{row:e,showClient:t,onRestore:n,onDelete:r},e.opId))}),u>0&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm integration-history-more`,onClick:()=>o(e=>e+HC),children:i(`integrations.rollback.showMore`,{n:String(Math.min(u,HC))})})]})]})}var GC={titleKey:`integrations.dialog.grok.title`,changesKey:`integrations.dialog.grok.changes`,breakageKey:`integrations.dialog.grok.breakage`,undoKey:`integrations.dialog.grok.undo`,confirmKey:`integrations.dialog.grok.confirm`},KC={titleKey:`integrations.dialog.codex.title`,changesKey:`integrations.dialog.codex.changes`,breakageKey:`integrations.dialog.codex.breakage`,undoKey:`integrations.dialog.codex.undo`,sideEffectKey:`integrations.dialog.codex.sideEffect`,confirmKey:`integrations.dialog.codex.confirm`},qC={titleKey:`integrations.dialog.desktop.title`,changesKey:`integrations.dialog.desktop.changes`,breakageKey:`integrations.dialog.desktop.breakage`,undoKey:`integrations.dialog.desktop.undo`,sideEffectKey:`integrations.dialog.desktop.restart`,confirmKey:`integrations.dialog.desktop.confirm`};function JC(e){return e.state===`current`||e.state===`stale`}function YC({row:e,pending:t,result:n,onOpen:r,onToggle:i,onOverwrite:a}){let o=Q(),s=e.detail??(e.detailKey?o(e.detailKey,e.detailVars??void 0):null),c=e.toggleBlocked!==null&&(e.applied||e.toggleBlocked.reason===`orphaned_marker`),l=c&&e.toggleBlocked&&(e.toggle===`claude`||e.toggle===`grok`||e.toggle===`codex`)?Xf(o,new Rf(409,{error:`native integration change refused`,code:`native_integration_refused`,clientId:e.toggle,reason:e.toggleBlocked.reason,message:e.toggleBlocked.message}),void 0,e.togglePath??void 0):null,u=e.toggleOn??e.applied;return(0,Y.jsxs)(`li`,{className:`integration-card`,"data-client":e.id,children:[(0,Y.jsxs)(`div`,{className:`integration-card-head`,children:[(0,Y.jsx)(Ab,{src:kb(e.id),label:o(e.labelKey),size:20}),(0,Y.jsx)(`h4`,{children:(0,Y.jsx)(`button`,{type:`button`,className:`integration-card-link`,onClick:r,children:o(e.labelKey)})}),(0,Y.jsx)(wC,{state:e.state,installed:e.installed})]}),s&&(0,Y.jsx)(`p`,{className:e.detail?`integration-path`:`integration-meta`,children:s}),n?.tone===`err`&&(0,Y.jsx)($,{tone:`err`,children:n.text}),n?.tone===`ok`&&(0,Y.jsx)($,{tone:`ok`,children:n.text}),(0,Y.jsxs)(`div`,{className:`integration-card-actions`,children:[e.toggle&&i&&(0,Y.jsxs)(`div`,{className:`integration-toggle-control`,children:[(0,Y.jsx)(Dt,{on:u,onClick:i,disabled:e.state===`unknown`||!e.installed||e.state===`conflict`||e.state===`unsafe`||c||t,label:o(u?`integrations.action.disable`:`integrations.action.apply`)}),l&&(0,Y.jsx)(`p`,{className:`integration-toggle-blocked`,children:l})]}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:r,tabIndex:-1,children:o(`integrations.action.settings`)}),a&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-danger`,onClick:a,disabled:t,children:o(`integrations.action.overwrite`)})]})]})}function XC({apiBase:e,active:t=!0}){let n=Q(),[r,i]=(0,_.useState)(!1),[a,o]=(0,_.useState)(null),[s,c]=(0,_.useState)(null),[l,u]=(0,_.useState)(null),[d,f]=(0,_.useState)({}),[p,m]=(0,_.useState)(null),[h,g]=(0,_.useState)(null),v=(0,_.useRef)(null);(0,_.useEffect)(()=>{if(p!==null)return;let e=v.current;e&&(v.current=null,e.isConnected&&e.focus())},[p]);let y=(0,_.useCallback)(async t=>(await xf(e,t)).clients,[e]),b=(0,_.useCallback)(async t=>(await Cf(e,void 0,t)).operations,[e]),x=(0,_.useCallback)(t=>Of(e,t),[e]),S=(0,_.useCallback)(t=>kf(e,t),[e]),C=(0,_.useCallback)(t=>Af(e,t),[e]),w=(0,_.useCallback)(t=>jf(e,t),[e]),T=(0,_.useCallback)(t=>Mf(e,t),[e]),E=(0,_.useCallback)(t=>vC(e,t),[e]),D=(0,_.useCallback)(async t=>(await Hf(e,t))?.clients??null,[e]),O=jr(`integration-states:${e}`,[e],y,{isEmpty:e=>e.length===0,enabled:t,sessionCacheKey:`ocx.integrations.states.v1:${e}`}),k=jr(`integration-journal-all:${e}`,[e],b,{isEmpty:e=>e.length===0,enabled:t,sessionCacheKey:`ocx.integrations.journal.v1:${e}`}),A=jr(`integration-codex:${e}`,[e],x,{isEmpty:e=>e===null,enabled:t,sessionCacheKey:`ocx.integrations.codex.v1:${e}`}),j=jr(`integration-keys:${e}`,[e],S,{isEmpty:()=>!1,enabled:t,sessionCacheKey:`ocx.integrations.keys.v1:${e}`}),M=jr(`integration-claude:${e}`,[e],C,{isEmpty:e=>e===null,enabled:t,sessionCacheKey:`ocx.integrations.claude.v1:${e}`}),N=jr(`integration-claude-desktop:${e}`,[e],w,{isEmpty:e=>e===null,enabled:t,sessionCacheKey:`ocx.integrations.claude-desktop.v1:${e}`}),P=jr(`integration-grok:${e}`,[e],T,{isEmpty:e=>e===null,enabled:t,sessionCacheKey:`ocx.integrations.grok.v1:${e}`}),F=jr(`integration-cursor:${e}`,[e],E,{isEmpty:e=>e===null,enabled:t,sessionCacheKey:`ocx.integrations.cursor.v1:${e}`}),I=jr(`integration-native:${e}`,[e],D,{isEmpty:e=>e===null,enabled:t,sessionCacheKey:`ocx.integrations.native.v1:${e}`}),L=O.state.data??[],R=k.state.data??[],z=L.filter(JC),B=L.filter(e=>e.installed),V=O.state.kind!==`cold`&&O.state.kind!==`retrying-cold`,H=I.state.data??null,U=H!==null,W=j.state.kind===`cold`||j.state.kind===`retrying-cold`?`checking`:j.state.kind===`failed-cold`||j.state.kind===`failed-with-stale`?`unavailable`:`settled`,{keysRow:G,rows:K}=BC({clients:L,clientsSettled:V,codex:A.state.data??null,keyCount:j.state.data??null,keyPhase:W,claude:M.state.data??null,claudeDesktop:N.state.data??null,grok:P.state.data??null,cursor:F.state.data??null,native:H,nativeSettled:U}),q=VC(K),J=()=>{O.refresh(),k.refresh(),A.refresh(),j.refresh(),M.refresh(),N.refresh(),P.refresh(),I.refresh()},X=async()=>{if(r||z.length===0)return;let t=[n(`integrations.bulk.title`),n(`integrations.bulk.body`)].join(`
|
|
127
127
|
|
|
128
|
-
`);if(!confirm(t))return;i(!0),o(null);let a=[];for(let t of z)try{await wf(e,t.clientId,!1)}catch(e){a.push(`${t.clientId}: ${Xf(n,e)}`)}let s=!1;try{s=(await xf(e)).clients.some(JC)}catch{a.push(n(`integrations.error.stale`))}s&&a.length===0&&a.push(n(`integrations.error.stale`)),J(),i(!1),o(a.length===0?{tone:`ok`,text:n(`integrations.bulk.success`)}:{tone:`err`,text:n(`integrations.bulk.partial`,{clients:a.join(`; `)})})},ee=R[0]?.at,[te,ne]=(0,_.useState)(null),Z=()=>{I.refresh(),A.refresh(),M.refresh(),P.refresh()},re=(e,t)=>{f(n=>{let r={...n};return t?r[e]=t:delete r[e],r})},ie=async(t,r)=>{if(!te&&t.toggle){ne(t.id),re(t.id,null);try{if(t.status)await wf(e,t.status.clientId,r),J();else if(t.toggle===`claude`||t.toggle===`grok`||t.toggle===`codex`||t.toggle===`claude-desktop`){let i=await Uf(e,t.toggle,r);i.reason===`non_loopback_removed`?re(t.id,{tone:`ok`,text:n(i.changed?`integrations.native.msg.nonLoopbackRemoved`:`integrations.native.msg.nonLoopbackRemovedNoop`)}):i.reason===`non_loopback_superseded`&&re(t.id,{tone:`ok`,text:n(`integrations.native.msg.nonLoopbackSuperseded`)}),Z()}}catch(e){re(t.id,{tone:`err`,text:Xf(n,e,void 0,t.togglePath??void 0)}),(t.toggle===`claude`||t.toggle===`grok`||t.toggle===`codex`||t.toggle===`claude-desktop`)&&Z()}finally{ne(null)}}},ae=(e,t)=>{if(e.status||t||e.id===`claude`||e.toggle===null){ie(e,t);return}let n=document.activeElement;v.current=n?.tagName===`BUTTON`?n:null,m(e)},oe=async t=>{if(t.status){ne(t.id),re(t.id,null);try{await wf(e,t.status.clientId,!0,void 0,!0),J()}catch(e){throw re(t.id,{tone:`err`,text:Xf(n,e,void 0,t.togglePath??void 0)}),e}finally{ne(null)}}};return(0,Y.jsxs)(`section`,{className:`integrations-overview`,children:[(0,Y.jsxs)(`div`,{className:`integration-summary`,children:[(0,Y.jsxs)(`div`,{className:`integration-summary-cell`,children:[(0,Y.jsx)(`span`,{className:`integration-summary-label`,children:n(`integrations.summary.detected`)}),(0,Y.jsx)(`strong`,{children:q.detected})]}),(0,Y.jsxs)(`div`,{className:`integration-summary-cell`,children:[(0,Y.jsx)(`span`,{className:`integration-summary-label`,children:n(`integrations.summary.applied`)}),(0,Y.jsx)(`strong`,{children:q.applied})]}),(0,Y.jsxs)(`div`,{className:`integration-summary-cell`,children:[(0,Y.jsx)(`span`,{className:`integration-summary-label`,children:n(`integrations.summary.stale`)}),(0,Y.jsx)(`strong`,{children:q.stale})]}),q.unknown>0&&(0,Y.jsxs)(`div`,{className:`integration-summary-cell`,children:[(0,Y.jsx)(`span`,{className:`integration-summary-label`,children:n(`integrations.state.unknown`)}),(0,Y.jsx)(`strong`,{children:q.unknown})]}),(0,Y.jsxs)(`div`,{className:`integration-summary-cell`,children:[(0,Y.jsx)(`span`,{className:`integration-summary-label`,children:n(`integrations.summary.lastChange`)}),(0,Y.jsx)(`strong`,{children:ee?new Date(ee).toLocaleString():n(`integrations.status.unknown`)})]}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>void X(),disabled:r||z.length===0,children:n(`integrations.summary.disableAll`)})]}),(0,Y.jsx)(`h3`,{children:n(`integrations.catalog.title`)}),(0,Y.jsx)(ZC,{row:G}),(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`integrations.onboarding`)}),O.state.kind===`failed-cold`&&(0,Y.jsx)($,{tone:`err`,children:n(`integrations.error.load`)}),O.state.kind===`failed-with-stale`&&(0,Y.jsx)($,{tone:`err`,children:n(`integrations.error.stale`)}),a&&(0,Y.jsx)($,{tone:a.tone,children:a.text}),K.length===0?O.state.kind===`failed-cold`?null:(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`common.loading`)}):(0,Y.jsx)(`ul`,{className:`integration-cards`,children:K.map(e=>(0,Y.jsx)(YC,{row:e,pending:te!==null,result:d[e.id]??null,onOpen:()=>ht(e.hash),onToggle:e.toggle?()=>ae(e,!(e.toggleOn??e.applied)):null,onOverwrite:e.status!==null&&e.status.state===`conflict`&&e.installed?()=>g(e):null},e.id))}),V&&B.length===0&&(0,Y.jsxs)(`div`,{className:`integration-empty`,children:[(0,Y.jsx)(`h4`,{children:n(`integrations.empty.title`)}),(0,Y.jsx)(`p`,{children:n(`integrations.empty.body`)})]}),(0,Y.jsx)(`h3`,{children:n(`integrations.rollback.title`)}),k.state.showSkeleton?(0,Y.jsx)(ep,{label:n(`integrations.rollback.title`),rows:2}):k.state.kind===`failed-cold`?(0,Y.jsxs)($,{tone:`err`,children:[n(`integrations.rollback.failed`),` `,(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void k.refresh(),children:n(`common.retry`)})]}):R.length===0?(0,Y.jsxs)(`div`,{className:`integration-empty`,children:[(0,Y.jsx)(`p`,{children:n(`integrations.rollback.empty`)}),(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`integrations.rollback.emptyBody`)})]}):(0,Y.jsx)(WC,{rows:R,showClient:!0,onRestore:c,onDelete:u}),s&&(0,Y.jsx)(DC,{apiBase:e,row:s,onClose:()=>c(null),onRestored:J,onReconcile:J}),l&&(0,Y.jsx)(EC,{copy:{titleKey:`integrations.dialog.deleteEntry.title`,changesKey:`integrations.dialog.deleteEntry.changes`,breakageKey:`integrations.dialog.deleteEntry.breakage`,undoKey:`integrations.dialog.deleteEntry.undo`,confirmKey:`integrations.dialog.deleteEntry.confirm`,vars:{path:l.configPath}},onClose:()=>u(null),onConfirm:async()=>{try{await Ef(e,l.opId,void 0,l.clientId===`aside`?l.profileId:void 0)}catch(e){if(gf(e)){u(null),await k.refresh();return}throw Error(Xf(n,e),{cause:e})}u(null),await k.refresh()}}),p&&(0,Y.jsx)(EC,{copy:{...p.toggle===`claude-desktop`?qC:p.id===`codex`?KC:GC,vars:{path:p.togglePath??``}},onClose:()=>m(null),onConfirm:async()=>{await ie(p,!1),m(null)}}),h&&h.status&&(0,Y.jsx)(EC,{copy:{titleKey:`integrations.dialog.overwrite.title`,changesKey:h.status.reason===`foreign-edit`?`integrations.dialog.overwrite.changesForeign`:`integrations.dialog.overwrite.changesUnowned`,breakageKey:`integrations.dialog.overwrite.breakage`,undoKey:`integrations.dialog.overwrite.undo`,confirmKey:`integrations.dialog.overwrite.confirm`,vars:{path:h.status.configPath}},onClose:()=>g(null),onConfirm:async()=>{await oe(h),g(null)}})]})}function ZC({row:e}){let t=Q(),n=e.detailKey?t(e.detailKey,e.detailVars??void 0):null;return(0,Y.jsxs)(`div`,{className:`integration-api-keys-row`,"data-client":`keys`,"data-key-state":e.state,children:[(0,Y.jsxs)(`div`,{className:`integration-api-keys-copy`,children:[(0,Y.jsx)(`h4`,{children:t(e.labelKey)}),n&&(0,Y.jsx)(`p`,{className:`integration-meta`,children:n})]}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>ht(e.hash),children:t(`integrations.action.manageKeys`)})]})}function QC({install:e}){let t=Q();return(0,Y.jsxs)(Y.Fragment,{children:[e.plan===`free`&&(0,Y.jsx)($,{tone:`warn`,children:t(`integrations.raycast.proRequired`)}),e.plan===`unknown`&&(0,Y.jsx)(`p`,{className:`page-sub`,"data-raycast-plan":`unknown`,children:t(`integrations.raycast.planUnknown`)}),!e.aiDirPresent&&(0,Y.jsx)(`p`,{className:`page-sub`,"data-raycast-ai-dir":`absent`,children:t(`integrations.raycast.revealConfig`)})]})}function $C(e,t){return{titleKey:`integrations.dialog.overwrite.title`,changesKey:e===`foreign-edit`?`integrations.dialog.overwrite.changesForeign`:`integrations.dialog.overwrite.changesUnowned`,breakageKey:`integrations.dialog.overwrite.breakage`,undoKey:`integrations.dialog.overwrite.undo`,confirmKey:`integrations.dialog.overwrite.confirm`,vars:{path:t}}}var ew={opencode:`integrations.semantics.opencode`,pi:`integrations.semantics.pi`,omp:`integrations.semantics.omp`,hermes:`integrations.semantics.hermes`,openclaw:`integrations.semantics.openclaw`,kimi:`integrations.semantics.kimi`,gajae:`integrations.semantics.gajae`,dsh:`integrations.semantics.dsh`,mcode:`integrations.semantics.mcode`,zcode:`integrations.semantics.zcode`,prime:`integrations.semantics.prime`,aside:`integrations.semantics.aside`,raycast:`integrations.semantics.raycast`,omo:`integrations.semantics.omo`,cline:`integrations.semantics.cline`},tw={opencode:`integrations.tab.opencode`,pi:`integrations.tab.pi`,omp:`integrations.tab.omp`,hermes:`integrations.tab.hermes`,openclaw:`integrations.tab.openclaw`,kimi:`integrations.tab.kimi`,gajae:`integrations.tab.gajae`,dsh:`integrations.tab.dsh`,mcode:`integrations.tab.mcode`,zcode:`integrations.tab.zcode`,prime:`integrations.tab.prime`,aside:`integrations.tab.aside`,raycast:`integrations.tab.raycast`,omo:`integrations.tab.omo`,cline:`integrations.tab.cline`};function nw({apiBase:e,client:t,active:n=!0,profileId:r,profileLabel:i}){let a=Q(),o=r===void 0?t:`${t}:${r}`,[s,c]=(0,_.useState)(!1),[l,u]=(0,_.useState)(null),[d,f]=(0,_.useState)(null),[p,m]=(0,_.useState)(null),[h,g]=(0,_.useState)(!1),v=(0,_.useCallback)(n=>Sf(e,t,n,r),[e,t,r]),y=(0,_.useCallback)(async n=>(await Cf(e,t,n,r)).operations,[e,t,r]),b=jr(`integration-state:${e}:${o}`,[e,t,r],v,{isEmpty:()=>!1,enabled:n,sessionCacheKey:`ocx.integrations.state.v1:${e}:${o}`}),x=jr(`integration-journal:${e}:${o}`,[e,t,r],y,{isEmpty:e=>e.length===0,enabled:n,sessionCacheKey:`ocx.integrations.client-journal.v1:${e}:${o}`}),S=b.state.data??null,C=S&&(r===void 0||S.profileId===r&&typeof S.enabled==`boolean`)?S:null,w=x.state.data??[],T=()=>{b.refresh(),x.refresh()},E=async n=>{if(!(!C||s)){c(!0),u(null);try{await wf(e,t,n,void 0,void 0,r)}catch(e){u(Xf(a,e))}finally{T(),c(!1)}}},D=async()=>{if(C){u(null);try{await wf(e,t,!0,void 0,!0,r),T()}catch(e){throw u(Xf(a,e)),T(),e}}},O=()=>void E(!(C&&(r===void 0?C.state===`current`||C.state===`stale`:C.enabled)));if(!C)return(0,Y.jsx)(`section`,{className:`integration-client-page`,children:b.state.showError?(0,Y.jsx)($,{tone:`err`,children:a(`integrations.error.load`)}):(0,Y.jsx)(`p`,{className:`page-sub`,children:a(`common.loading`)})});let k=C.state===`current`||C.state===`stale`,A=r===void 0?k:C.enabled===!0,j=r!==void 0&&(b.state.showError||b.state.refreshing),M=(!C.installed||C.state===`conflict`||C.state===`unsafe`)&&!(r!==void 0&&A);return(0,Y.jsxs)(`section`,{className:`integration-client-page`,children:[(0,Y.jsxs)(`div`,{className:`integration-client-head`,children:[(0,Y.jsx)(Ab,{src:kb(t),label:a(tw[t]),size:24}),(0,Y.jsx)(`h3`,{children:i??a(tw[t])}),(0,Y.jsx)(wC,{state:C.state,installed:C.installed,id:`integration-state-${t}${r===void 0?``:`-${r}`}`}),(0,Y.jsx)(Dt,{on:A,onClick:O,disabled:M||s||j,label:a(A?`integrations.action.disable`:`integrations.action.apply`)})]}),r!==void 0&&b.state.showError&&(0,Y.jsxs)($,{tone:`err`,children:[a(`integrations.aside.loadError`),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:T,disabled:s||b.state.refreshing,children:a(`common.retry`)})]}),C.state===`stale`&&A&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>void E(!0),disabled:s,children:a(`integrations.action.refresh`)}),C.installed&&C.state===`conflict`&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-danger`,onClick:()=>g(!0),disabled:s,children:a(`integrations.action.overwrite`)}),(0,Y.jsx)(`p`,{className:`page-sub`,children:a(ew[t])}),(0,Y.jsx)(`p`,{className:`integration-path`,children:C.configPath}),C.raycast&&(0,Y.jsx)(QC,{install:C.raycast}),C.appliedAt&&(0,Y.jsxs)(`p`,{className:`integration-meta`,children:[a(`integrations.status.appliedAt`),`: `,new Date(C.appliedAt).toLocaleString()]}),C.retentionDegraded&&(0,Y.jsx)($,{tone:`err`,children:a(`integrations.retention.degraded`)}),l&&(0,Y.jsx)($,{tone:`err`,children:l}),(0,Y.jsx)(`h4`,{children:a(`integrations.rollback.title`)}),x.state.showSkeleton?(0,Y.jsx)(ep,{label:a(`integrations.rollback.title`),rows:2}):x.state.kind===`failed-cold`?(0,Y.jsxs)($,{tone:`err`,children:[a(`integrations.rollback.failed`),` `,(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void x.refresh(),children:a(`common.retry`)})]}):w.length===0?(0,Y.jsx)(`p`,{className:`page-sub`,children:a(`integrations.rollback.empty`)}):(0,Y.jsx)(WC,{rows:w,onRestore:f,onDelete:m}),d&&(0,Y.jsx)(DC,{apiBase:e,row:d,profileId:r,onClose:()=>f(null),onRestored:T,onReconcile:T}),p&&(0,Y.jsx)(EC,{copy:{titleKey:`integrations.dialog.deleteEntry.title`,changesKey:`integrations.dialog.deleteEntry.changes`,breakageKey:`integrations.dialog.deleteEntry.breakage`,undoKey:`integrations.dialog.deleteEntry.undo`,confirmKey:`integrations.dialog.deleteEntry.confirm`,vars:{path:p.configPath}},onClose:()=>m(null),onConfirm:async()=>{try{await Ef(e,p.opId,void 0,r)}catch(e){if(gf(e)){m(null),await x.refresh();return}throw Error(Xf(a,e),{cause:e})}m(null),await x.refresh()}}),h&&(0,Y.jsx)(EC,{copy:$C(C.reason,C.configPath),onClose:()=>g(!1),onConfirm:async()=>{await D(),g(!1)}})]})}function rw(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function iw(){throw new hf(502,{code:`invalid_aside_profile_response`})}async function aw(e,t){let n=await vf(await fetch(`${e}/api/client-integrations/aside/profiles`,{signal:t}));(!rw(n)||!Array.isArray(n.profiles)||typeof n.allEnabled!=`boolean`)&&iw();let r=n.profiles.map(e=>sf(e)??iw());new Set(r.map(e=>e.profileId)).size!==r.length&&iw();let i=r.filter(e=>e.enabled).length,a=r.filter(e=>e.state===`current`||e.state===`stale`).length;return(n.total!==r.length||n.enabledCount!==i||n.appliedCount!==a||n.allEnabled!==(r.length>0&&i===r.length))&&iw(),{profiles:r,allEnabled:n.allEnabled,enabledCount:i,appliedCount:a,total:r.length,...typeof n.error==`string`?{error:n.error}:{}}}async function ow(e,t){let n=await vf(await fetch(`${e}/api/client-integrations/aside/sync`,{method:`POST`,headers:{"Content-Type":`application/json`},body:`{}`,signal:t}));(!rw(n)||typeof n.ok!=`boolean`||!Array.isArray(n.results))&&iw(),n.results.some(e=>!rw(e)||e.client!==`aside`)&&iw();let r=cf(n.results)??iw();return n.ok!==r.every(e=>e.ok)&&iw(),{ok:n.ok,results:r}}function sw({apiBase:e,active:t=!0}){let n=Q(),[r,i]=(0,_.useState)(null),[a,o]=(0,_.useState)(null),s=(0,_.useRef)(!1),[c,l]=(0,_.useState)(null),[u,d]=(0,_.useState)(new Map),f=(0,_.useCallback)(t=>aw(e,t),[e]),p=jr(`aside-profiles:${e}`,[e],f,{enabled:t,isEmpty:e=>!e.error&&e.profiles.length===0,sessionCacheKey:`ocx.integrations.aside-profiles.v1:${e}`}),m=p.state.data,h=m?.profiles??[],g=p.state.showError||!!m?.error,v=a!==null||p.state.refreshing,y=e=>e.name||n(`integrations.aside.profile`,{id:e.profileId}),b=e=>d(t=>{let r=new Map(t);for(let t of e)t.ok?r.delete(t.profileId):r.set(t.profileId,Zf(n,t));return r}),x=(e,t)=>{e instanceof hf&&`results`in e.body&&e.body.results?.length?(b(e.body.results),l(n(`integrations.aside.partial`))):t===void 0?l(Xf(n,e)):d(r=>new Map(r).set(t,Xf(n,e)))},S=async(t,n)=>{if(!s.current){s.current=!0,o(n??`all`),l(null);try{let r=await wf(e,`aside`,t,void 0,void 0,n);b(r.results??(n===void 0?h.map(e=>e.profileId):[n]).map(e=>({profileId:e,ok:!0})))}catch(e){x(e,n)}finally{p.refresh(),s.current=!1,o(null)}}},C=async()=>{if(!s.current){s.current=!0,o(`sync`),l(null);try{let t=await ow(e);b(t.results),t.ok||l(n(`integrations.aside.partial`))}catch(e){x(e)}finally{p.refresh(),s.current=!1,o(null)}}};return r?(0,Y.jsxs)(`section`,{className:`integration-client-page`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,autoFocus:!0,onClick:()=>{i(null),p.refresh()},children:n(`integrations.aside.back`)}),u.has(r.profileId)&&(0,Y.jsx)($,{tone:`err`,children:(0,Y.jsx)(`span`,{className:`aside-profile-failure`,children:u.get(r.profileId)})}),(0,Y.jsx)(nw,{apiBase:e,client:`aside`,active:t,profileId:r.profileId,profileLabel:y(r)},r.profileId)]}):(0,Y.jsxs)(`section`,{className:`integration-client-page`,"aria-busy":v,children:[(0,Y.jsxs)(`div`,{className:`integration-client-head`,children:[(0,Y.jsx)(Ab,{src:kb(`aside`),label:n(`integrations.tab.aside`),size:24}),(0,Y.jsx)(`h3`,{children:n(`integrations.aside.profilesTitle`)})]}),(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`integrations.aside.profilesHint`)}),(0,Y.jsxs)(`div`,{className:`aside-profile-toolbar`,children:[(0,Y.jsx)(Dt,{on:m?.allEnabled??!1,mixed:!!(m&&m.enabledCount>0&&m.enabledCount<m.total),onClick:()=>void S(!m?.allEnabled),disabled:v||g||h.length===0,label:n(`integrations.aside.all`),showLabel:!0}),(0,Y.jsx)(`span`,{className:`text-caption muted`,children:n(`integrations.aside.applied`,{count:m?.appliedCount??0,total:m?.total??0})}),(0,Y.jsx)(`button`,{type:`button`,className:`btn`,disabled:v||g||!m?.enabledCount,onClick:()=>void C(),children:n(`integrations.aside.syncNow`)})]}),c&&(0,Y.jsx)($,{tone:`err`,children:(0,Y.jsx)(`span`,{className:`aside-profile-failure`,children:c})}),[...u].filter(([e])=>!h.some(t=>t.profileId===e)).map(([e,t])=>(0,Y.jsx)($,{tone:`err`,children:(0,Y.jsxs)(`span`,{className:`aside-profile-failure`,children:[n(`integrations.aside.profile`,{id:e}),`: `,t]})},e)),g&&(0,Y.jsxs)($,{tone:`err`,children:[(0,Y.jsx)(`span`,{children:n(`integrations.aside.loadError`)}),m?.error&&(0,Y.jsx)(`span`,{className:`text-caption`,children:m.error}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>p.refresh(),disabled:v,children:n(`common.retry`)})]}),p.state.showSkeleton&&(0,Y.jsx)(ep,{label:n(`common.loading`),rows:3}),!p.state.showSkeleton&&!g&&m&&h.length===0&&(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`integrations.aside.empty`)}),h.length>0&&(0,Y.jsx)(`div`,{className:`aside-profile-list`,children:h.map(e=>{let t=y(e),r=e.state===`current`||e.state===`stale`,o=e.enabled!==r||e.enabled&&e.state===`stale`,s=(!e.installed||e.state===`unsafe`||e.state===`conflict`)&&!e.enabled;return(0,Y.jsxs)(`div`,{className:`aside-profile-row`,"aria-busy":a===e.profileId,children:[(0,Y.jsxs)(`div`,{className:`aside-profile-info`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost aside-profile-name`,"aria-label":n(`integrations.aside.details`,{name:t}),onClick:()=>i(e),disabled:v||g,children:t}),(0,Y.jsxs)(`div`,{className:`aside-profile-meta`,children:[(0,Y.jsx)(`code`,{children:e.profileId}),e.current&&(0,Y.jsx)(`span`,{className:`text-caption muted`,children:n(`integrations.aside.current`)})]}),o&&(0,Y.jsx)(`span`,{className:`text-caption muted`,children:n(`integrations.aside.pending`)}),e.error&&(0,Y.jsx)(`span`,{className:`text-caption muted`,children:e.error}),u.has(e.profileId)&&(0,Y.jsx)($,{tone:`err`,children:(0,Y.jsx)(`span`,{className:`aside-profile-failure`,children:u.get(e.profileId)})})]}),(0,Y.jsxs)(`div`,{className:`aside-profile-controls`,children:[(0,Y.jsx)(wC,{state:e.state,installed:e.installed,id:`aside-profile-state-${e.profileId}`}),o&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:v||g,"aria-label":n(`integrations.aside.retry`,{name:t}),onClick:()=>void S(e.enabled,e.profileId),children:n(`common.retry`)}),(0,Y.jsx)(Dt,{on:e.enabled,onClick:()=>void S(!e.enabled,e.profileId),disabled:v||g||s,label:n(`integrations.aside.toggle`,{name:t})})]})]},e.profileId)})})]})}var cw=[{id:`overview`,hash:`integrations`,labelKey:`integrations.tab.overview`},{id:`keys`,hash:`integrations/keys`,labelKey:`integrations.tab.keys`},{id:`codex`,hash:`integrations/codex`,labelKey:`integrations.tab.codex`},{id:`claude`,hash:`integrations/claude`,labelKey:`integrations.tab.claude`},{id:`grok`,hash:`integrations/grok`,labelKey:`integrations.tab.grok`},{id:`cursor`,hash:`integrations/cursor`,labelKey:`integrations.tab.cursor`},{id:`opencode`,hash:`integrations/opencode`,labelKey:`integrations.tab.opencode`},{id:`pi`,hash:`integrations/pi`,labelKey:`integrations.tab.pi`},{id:`omp`,hash:`integrations/omp`,labelKey:`integrations.tab.omp`},{id:`hermes`,hash:`integrations/hermes`,labelKey:`integrations.tab.hermes`},{id:`openclaw`,hash:`integrations/openclaw`,labelKey:`integrations.tab.openclaw`},{id:`kimi`,hash:`integrations/kimi`,labelKey:`integrations.tab.kimi`},{id:`gajae`,hash:`integrations/gajae`,labelKey:`integrations.tab.gajae`},{id:`dsh`,hash:`integrations/dsh`,labelKey:`integrations.tab.dsh`},{id:`mcode`,hash:`integrations/mcode`,labelKey:`integrations.tab.mcode`},{id:`zcode`,hash:`integrations/zcode`,labelKey:`integrations.tab.zcode`},{id:`prime`,hash:`integrations/prime`,labelKey:`integrations.tab.prime`},{id:`aside`,hash:`integrations/aside`,labelKey:`integrations.tab.aside`},{id:`raycast`,hash:`integrations/raycast`,labelKey:`integrations.tab.raycast`},{id:`omo`,hash:`integrations/omo`,labelKey:`integrations.tab.omo`},{id:`cline`,hash:`integrations/cline`,labelKey:`integrations.tab.cline`}],lw=new Set([`opencode`,`pi`,`omp`,`hermes`,`openclaw`,`kimi`,`gajae`,`dsh`,`mcode`,`zcode`,`prime`,`aside`,`raycast`,`omo`,`cline`]);function uw(e=window.location.hash){let t=pt(e);return t===`integrations/claude/desktop`?`claude`:cw.find(e=>e.hash===t)?.id??`overview`}function dw(e){return`integrations-tab-${e}`}function fw(e){return`integrations-panel-${e}`}function pw(e){return e===`overview`||e===`keys`?null:Eb[e]??null}function mw({apiBase:e,machineApiBase:t=e,connected:n=!1}){let r=Q(),[i,a]=(0,_.useState)(uw),[o,s]=(0,_.useState)(()=>new Set([uw()])),c=(0,_.useRef)(null),[l,u]=(0,_.useState)([]),[d,f]=(0,_.useState)(!1);c.current===null&&(c.current=new Map),(0,_.useEffect)(()=>{if(!n)return;let e=new AbortController;return fetch(`${t}/api/machine/clients`,{signal:e.signal}).then(e=>e.ok?e.json():null).then(t=>{!e.signal.aborted&&Array.isArray(t?.selectedClients)&&u(t.selectedClients.filter(e=>typeof e==`string`))}).catch(()=>{}),()=>e.abort()},[n,t]);let p=async()=>{f(!0);try{await fetch(`${t}/api/machine/sync`,{method:`POST`,headers:{"Content-Type":`application/json`},body:`{}`})}finally{f(!1)}},m=e=>{a(e),s(t=>t.has(e)?t:new Set([...t,e]))};(0,_.useEffect)(()=>{let e=()=>m(uw());return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[]);let h=(e,t)=>{let n=cw.find(t=>t.id===e);n&&(ht(n.hash),m(e),t&&window.requestAnimationFrame(()=>{c.current.get(e)?.focus({preventScroll:!0})}))},g=e=>{let t=cw.findIndex(e=>e.id===i),n=null;e.key===`ArrowLeft`?n=(t-1+cw.length)%cw.length:e.key===`ArrowRight`?n=(t+1)%cw.length:e.key===`Home`?n=0:e.key===`End`&&(n=cw.length-1),n!==null&&(e.preventDefault(),h(cw[n].id,!0))};return(0,Y.jsxs)(`section`,{className:`integrations-page`,children:[(0,Y.jsx)(`div`,{className:`page-head`,children:(0,Y.jsx)(`h2`,{children:r(`nav.integrations`)})}),(0,Y.jsx)(`p`,{className:`page-sub`,children:r(`integrations.subtitle`)}),n&&(0,Y.jsxs)(`section`,{className:`notice`,"aria-label":r(`connection.clients.title`),children:[(0,Y.jsx)(`strong`,{children:r(`connection.clients.title`)}),(0,Y.jsx)(`span`,{children:l.length>0?l.join(`, `):r(`connection.clients.none`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:d,onClick:()=>void p(),children:r(d?`connection.clients.syncing`:`connection.clients.sync`)})]}),(0,Y.jsx)(`div`,{className:`page-tabs`,role:`tablist`,"aria-label":r(`integrations.tabsLabel`),children:cw.map(e=>(0,Y.jsxs)(`button`,{ref:t=>{t?c.current.set(e.id,t):c.current.delete(e.id)},type:`button`,role:`tab`,id:dw(e.id),"aria-selected":i===e.id,"aria-controls":fw(e.id),tabIndex:i===e.id?0:-1,className:`page-tab${i===e.id?` page-tab--active`:``}`,onClick:()=>h(e.id,!0),onKeyDown:g,children:[pw(e.id)&&(0,Y.jsx)(Ab,{src:pw(e.id),label:r(e.labelKey),size:14}),r(e.labelKey)]},e.id))}),cw.map(t=>{if(!o.has(t.id))return null;let n=i===t.id;return(0,Y.jsxs)(`div`,{role:`tabpanel`,id:fw(t.id),"aria-labelledby":dw(t.id),hidden:!n,children:[t.id===`overview`&&(0,Y.jsx)(XC,{apiBase:e,active:n}),t.id===`keys`&&(0,Y.jsx)(xS,{apiBase:e,active:n}),t.id===`codex`&&(0,Y.jsxs)(`section`,{className:`integration-native-page`,"aria-labelledby":`codex-integration-title`,children:[(0,Y.jsx)(`h3`,{id:`codex-integration-title`,children:r(`integrations.codex.title`)}),(0,Y.jsx)(`p`,{children:r(`integrations.codex.body`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>ht(`startup`),children:r(`integrations.codex.openService`)})]}),t.id===`claude`&&(0,Y.jsx)(dC,{apiBase:e,active:n}),t.id===`grok`&&(0,Y.jsx)(_C,{apiBase:e,active:n}),t.id===`cursor`&&(0,Y.jsx)(xC,{apiBase:e,active:n}),lw.has(t.id)&&(t.id===`aside`?(0,Y.jsx)(sw,{apiBase:e,active:n}):(0,Y.jsx)(nw,{apiBase:e,client:t.id,active:n}))]},t.id)})]})}function hw(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.supported==`boolean`&&typeof t.installed==`boolean`&&typeof t.running==`boolean`&&typeof t.stale==`boolean`&&typeof t.summary==`string`}var gw={native:`startup.status.native`,protected:`startup.status.protected`,"at-risk":`startup.status.atRisk`},_w={native:`startup.summary.native`,protected:`startup.summary.protected`,"at-risk":`startup.summary.atRisk`},vw={service:`startup.protection.service`,shim:`startup.protection.shim`,none:`startup.protection.none`};function yw({ok:e,yes:t,no:n}){return(0,Y.jsx)(`span`,{className:`badge ${e?`badge-green`:`badge-amber`}`,children:e?t:n})}function bw({failed:e,data:t}){let{t:n}=ut(),r=e?`startup-hero--risk`:t.status===`protected`?`startup-hero--safe`:t.status===`at-risk`?`startup-hero--risk`:`startup-hero--native`,i=e||t.status===`at-risk`?_e:ce,a=t.routingKind===`opencodex-local`?`startup.routing.proxy`:t.routingKind===`custom-local`?`startup.routing.customLocal`:t.routingKind===`custom-remote`?`startup.routing.customRemote`:t.routingKind===`unknown`?`startup.routing.unknown`:`startup.routing.native`;return(0,Y.jsx)(Y.Fragment,{children:(0,Y.jsxs)(`section`,{className:`panel startup-hero ${r}`,"aria-live":`polite`,children:[(0,Y.jsx)(`div`,{className:`startup-hero-icon`,children:(0,Y.jsx)(i,{})}),(0,Y.jsxs)(`div`,{className:`startup-hero-copy`,children:[(0,Y.jsx)(`span`,{className:`badge ${e||t.status===`at-risk`?`badge-amber`:`badge-green`}`,children:n(e?`startup.status.atRisk`:gw[t.status])}),(0,Y.jsx)(`h3`,{children:n(e?`startup.error`:_w[t.status])}),(0,Y.jsx)(`p`,{children:e?n(`startup.staleData`):t.status===`at-risk`?n(Mr(t)):n(`startup.safeDetail`)}),(0,Y.jsxs)(`p`,{className:`muted startup-state-line`,children:[n(a),` · `,n(vw[t.protection]),` · `,n(t.autostartEnabled?`startup.enabled`:`startup.disabled`)]}),(0,Y.jsx)(`p`,{className:`muted text-label`,children:n(`startup.subtitle`)})]})]})})}function xw({data:e,failed:t,loading:n=!1,installBusy:r,installResult:i,onInstall:a}){let{t:o}=ut(),s=e.serviceSupported&&e.serviceInstalled&&e.serviceStale&&!e.serviceConflict,c=e.shimInstalled&&!e.shimHealthy,l=r!==null||t||n;return(0,Y.jsxs)(`section`,{className:`panel startup-details`,children:[(0,Y.jsxs)(`div`,{className:`panel-head`,children:[(0,Y.jsx)(`h3`,{className:`panel-title`,children:o(`startup.details`)}),(0,Y.jsx)(`span`,{className:`muted mono`,children:e.platform})]}),(0,Y.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:o(`startup.service`)}),(0,Y.jsx)(`span`,{children:o(`startup.serviceHint`)})]}),(0,Y.jsxs)(`div`,{className:`startup-detail-actions`,children:[(0,Y.jsx)(yw,{ok:e.serviceViable,yes:o(`startup.viable`),no:o(e.serviceConflict?`startup.conflict`:e.serviceStale?`startup.stale`:e.serviceInstalled?`startup.unhealthy`:e.serviceSupported?`startup.notInstalled`:`startup.unsupported`)}),e.serviceSupported&&!e.serviceInstalled&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${o(`startup.service`)} - ${o(`startup.install`)}`,disabled:l,onClick:()=>a(`install-service`),children:o(r===`install-service`?`startup.installing`:`startup.install`)}),s&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${o(`startup.service`)} - ${o(`startup.repair`)}`,disabled:l,onClick:()=>a(`install-service`,{repair:!0}),children:o(r===`install-service`?`startup.repairing`:`startup.repair`)})]})]}),(0,Y.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:o(`startup.shim`)}),(0,Y.jsx)(`span`,{children:o(`startup.shimHint`)})]}),(0,Y.jsxs)(`div`,{className:`startup-detail-actions`,children:[(0,Y.jsx)(yw,{ok:e.shimHealthy&&e.autostartEnabled,yes:o(e.shimCoverage===`cli-only`?`startup.cliOnly`:`startup.healthy`),no:o(e.shimInstalled?e.shimHealthy&&!e.autostartEnabled?`startup.installedDisabled`:`startup.stale`:`startup.notInstalled`)}),!e.shimInstalled&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${o(`startup.shim`)} - ${o(`startup.install`)}`,disabled:l,onClick:()=>a(`install-shim`),children:o(r===`install-shim`?`startup.installing`:`startup.install`)}),c&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${o(`startup.shim`)} - ${o(`startup.repair`)}`,disabled:l,onClick:()=>a(`install-shim`,{repair:!0}),children:o(r===`install-shim`?`startup.repairing`:`startup.repair`)})]})]}),i&&(0,Y.jsx)(`div`,{className:`notice ${i.kind===`success`?`notice-ok`:`notice-warn`} startup-action-notice`,role:`status`,"aria-live":`polite`,children:i.kind===`success`?i.action===`install-service`?o(i.repair?`startup.serviceRepaired`:`startup.serviceInstalled`):o(i.repair?`startup.shimRepaired`:`startup.shimInstalled`):`${o(`startup.installFailed`)} ${i.detail??``}`})]})}function Sw({tray:e,trayLoading:t,trayError:n,trayBusy:r,onTrayAction:i}){let{t:a}=ut();return(0,Y.jsxs)(`section`,{className:`panel startup-actions`,children:[(0,Y.jsxs)(`div`,{className:`panel-head`,children:[(0,Y.jsx)(`h3`,{className:`panel-title`,children:a(`startup.tray.title`)}),(0,Y.jsx)(Te,{})]}),(0,Y.jsx)(`p`,{className:`muted`,children:a(`startup.tray.hint`)}),(0,Y.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:a(`startup.tray.login`)}),(0,Y.jsx)(`span`,{children:a(`startup.tray.notProtection`)})]}),t||n||!e?(0,Y.jsx)(`span`,{className:`badge badge-amber`,children:a(t?`startup.tray.loading`:`startup.tray.unavailable`)}):(0,Y.jsx)(yw,{ok:e.running&&!e.stale,yes:a(`startup.tray.running`),no:a(e.stale?`startup.tray.stale`:e.installed?`startup.tray.stopped`:`startup.tray.notInstalled`)})]}),(0,Y.jsxs)(`div`,{className:`startup-tray-buttons`,children:[!t&&!n&&e&&!e.installed&&!e.stale&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary`,disabled:r,onClick:()=>i(`install`),children:a(`startup.tray.install`)}),!t&&!n&&e?.installed&&!e.stale&&!e.running&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary`,disabled:r,onClick:()=>i(`start`),children:a(`startup.tray.start`)}),!t&&!n&&e?.running&&!e.stale&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,disabled:r,onClick:()=>i(`stop`),children:a(`startup.tray.stop`)}),!t&&!n&&e&&(e.installed||e.stale)&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-danger`,disabled:r,onClick:()=>{window.confirm(a(`startup.tray.uninstall`))&&i(`uninstall`)},children:a(`startup.tray.uninstall`)})]}),(n||e?.stale)&&(0,Y.jsx)(`div`,{className:`notice notice-warn startup-tray-error`,role:`alert`,children:a(`startup.tray.error`)})]})}function Cw({data:e,copied:t,onCopy:n}){let{t:r}=ut(),i=e.serviceInstalled&&!e.serviceConflict?e.commands.repairService:e.commands.installService;return(0,Y.jsxs)(`section`,{className:`panel startup-actions`,children:[(0,Y.jsxs)(`div`,{className:`panel-head`,children:[(0,Y.jsx)(`h3`,{className:`panel-title`,children:r(`startup.recovery`)}),(0,Y.jsx)(ae,{})]}),(0,Y.jsxs)(`details`,{className:`startup-recovery-details`,open:e.status!==`protected`,children:[(0,Y.jsx)(`summary`,{className:`muted`,children:r(`startup.recoveryHint`)}),(0,Y.jsxs)(`div`,{className:`startup-command-list`,children:[e.serviceSupported&&(0,Y.jsxs)(`div`,{className:`startup-command-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:r(`startup.command.service`)}),(0,Y.jsx)(`code`,{children:i})]}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(i),children:r(t===i?`startup.copied`:`startup.copy`)})]}),(0,Y.jsxs)(`div`,{className:`startup-command-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:r(`startup.command.shim`)}),(0,Y.jsx)(`code`,{children:e.commands.installShim})]}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(e.commands.installShim),children:t===e.commands.installShim?r(`startup.copied`):r(`startup.copy`)})]}),(0,Y.jsxs)(`div`,{className:`startup-command-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:r(`startup.command.native`)}),(0,Y.jsx)(`code`,{children:e.commands.restoreNative})]}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(e.commands.restoreNative),children:t===e.commands.restoreNative?r(`startup.copied`):r(`startup.copy`)})]})]}),e.status===`at-risk`&&(0,Y.jsxs)(`div`,{className:`notice notice-warn startup-action-notice`,role:`alert`,children:[(0,Y.jsx)(Te,{}),` `,r(`startup.recommended`,{cmd:e.recommendedCommand??e.commands.installService})]})]})]})}var ww=`ocx.startup.page.v1:`;function Tw(e,t){let n=t===`win32`?`; `:` && `;return e.join(n)}function Ew(e,t,n){if(!e)return{warning:null,fix:null};let r=!!e.catalogClamp?.active,i=!!e.newerAvailable,a=(r?e.catalogClamp?.runtimeVersion:e.version)??e.version??`unknown`,o=(e.catalogClamp?.removedEfforts??[]).join(`, `),s=Tw([`ocx doctor --fix-codex-runtime`,`ocx sync`],n);return r?{warning:o?t(`startup.codexRuntime.clampHiddenWithEfforts`,{version:a,efforts:o}):t(`startup.codexRuntime.clampHidden`,{version:a}),fix:i?s:`ocx sync`}:i?{warning:t(`startup.codexRuntime.olderBinary`,{version:a}),fix:s}:{warning:null,fix:null}}function Dw({apiBase:e,machineApiBase:t=e,connected:n=!1}){let{t:r}=ut(),i=`${ww}${e}`,a=(0,_.useMemo)(()=>Tr(i),[i]),o=`startup-page:${e}`,[s,c]=(0,_.useState)(null),[l,u]=(0,_.useState)(()=>a?.tray??null),[d,f]=(0,_.useState)(()=>!a?.data),[p,m]=(0,_.useState)(!1),[h,g]=(0,_.useState)(!1),[v,y]=(0,_.useState)(null),[b,x]=(0,_.useState)(null),[S,C]=(0,_.useState)(()=>a?.warning??null),[w,T]=(0,_.useState)(()=>a?.fix??null),[E,D]=(0,_.useState)(()=>!a?.data),O=(0,_.useRef)(!!a?.data),k=(0,_.useRef)(0),[A,j]=(0,_.useState)(null),[M,N]=(0,_.useState)(!1);(0,_.useEffect)(()=>{if(!n)return;let e=new AbortController;return fetch(`${t}/api/machine/shim`,{signal:e.signal}).then(e=>e.ok?e.json():null).then(t=>{e.signal.aborted||j(t)}).catch(()=>{e.signal.aborted||j(null)}),()=>e.abort()},[n,t]);let P=async e=>{N(!0);try{let n=await fetch(`${t}/api/machine/shim`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:e})});if(n.ok){let e=await n.json();j(e.shim??null)}}finally{N(!1)}};(0,_.useEffect)(()=>()=>{k.current+=1},[e]);let F=(0,_.useCallback)(async t=>{let n=++k.current,a=O.current;a||(f(!0),D(!0));try{let a=fetch(`${e}/api/settings`,{signal:t}).then(async e=>e.ok?await e.json():null).catch(()=>null),o=await fetch(`${e}/api/startup-health`,{signal:t});if(!o.ok)throw Error(`fetch failed`);let s=await o.json();x(e=>e?.kind===`error`&&(s.status===`native`&&e.forLocalRouting===!0||(e.action===`install-service`?s.serviceViable:s.shimInstalled&&s.shimHealthy))?null:e),O.current=!0;let c=Tr(i);kr(i,{data:s,warning:c?.warning??null,fix:c?.fix??null,tray:c?.tray??null});let l=s.platform===`win32`?fetch(`${e}/api/windows-tray`,{signal:t}).then(async e=>{if(!e.ok)throw Error(`tray status failed`);let t=await e.json();if(!hw(t))throw Error(`invalid tray status`);return{tray:t,error:!1}}).catch(()=>({tray:null,error:!0})):Promise.resolve({tray:null,error:!1});return Promise.all([a,l]).then(([e,a])=>{if(t.aborted||n!==k.current)return;let o=s.platform===`win32`?a.tray:null;if(s.platform===`win32`?(u(o),g(a.error)):(u(null),g(!1)),f(!1),D(!1),e){let t=Ew(e.codexRuntime,r,s.platform);C(t.warning),T(t.fix),kr(i,{data:s,warning:t.warning,fix:t.fix,tray:o});return}let c=Tr(i);kr(i,{data:s,warning:c?.warning??null,fix:c?.fix??null,tray:o})}),s}catch(e){throw t.aborted?e:(a||(u(null),g(!0),C(null),T(null)),D(!1),f(!1),e)}},[e,i,r]),I=jr(o,[e],F,{isEmpty:()=>!1,initialData:a?.data??void 0}),L=I.state,R=I.refresh,z=L.data??a?.data??null,B=L.refreshing,V=!!z?.diagnosticStale||L.showError;(0,_.useEffect)(()=>{if(!z?.diagnosticStale)return;let e=window.setTimeout(R,2e3);return()=>window.clearTimeout(e)},[z,R]);let H=async e=>{try{await navigator.clipboard.writeText(e),c(e),window.setTimeout(()=>c(t=>t===e?null:t),1600)}catch{c(null)}},U=async t=>{m(!0),g(!1);try{let n=await fetch(`${e}/api/windows-tray`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:t})});if(!n.ok)throw Error(`tray action failed`);let r=await n.json();if(!hw(r.status))throw Error(`invalid tray action status`);u(r.status),g(!1)}catch{u(null),g(!0)}finally{m(!1)}},W=async(t,n)=>{y(t),x(null);try{let r=await fetch(`${e}/api/startup-action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:t,repair:n?.repair===!0})});if(!r.ok){let e=await r.json().catch(()=>null);throw Error(typeof e?.error==`string`?e.error:`installation failed`)}x({kind:`success`,action:t,repair:n?.repair===!0}),R()}catch(e){x({kind:`error`,action:t,repair:n?.repair===!0,detail:e instanceof Error?e.message:String(e),forLocalRouting:z?.localRoutingDependency===!0})}finally{y(null)}};return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`page-head`,children:[(0,Y.jsx)(`h2`,{children:r(`startup.title`)}),(0,Y.jsx)(`div`,{className:`startup-page-head-actions`,children:(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>R(),disabled:B,children:[(0,Y.jsx)(de,{}),` `,r(`startup.refresh`)]})})]}),n&&(0,Y.jsxs)(`section`,{className:`notice startup-page-notice`,"aria-label":r(`connection.machine.title`),children:[(0,Y.jsx)(`strong`,{children:r(`connection.machine.title`)}),(0,Y.jsx)(`span`,{children:A?.healthy?r(`connection.machine.shimHealthy`):r(`connection.machine.shimNeedsAttention`)}),(0,Y.jsxs)(`div`,{className:`startup-page-head-actions`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:M,onClick:()=>void P(`repair`),children:r(`connection.machine.repairShim`)}),A?.installed&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:M,onClick:()=>void P(`uninstall`),children:r(`connection.machine.removeShim`)})]})]}),L.showSkeleton&&!z?(0,Y.jsx)(ep,{label:r(`startup.loading`),rows:5}):L.kind===`failed-cold`?(0,Y.jsxs)(`div`,{className:`startup-page-notice`,children:[(0,Y.jsx)($,{tone:`err`,children:L.error instanceof Error?L.error.message:r(`startup.error`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>R(),children:r(`common.retry`)})]}):z?(0,Y.jsxs)(Y.Fragment,{children:[L.showError&&(0,Y.jsx)($,{tone:`err`,children:r(`startup.error`)}),V&&(0,Y.jsx)(`div`,{className:`notice notice-warn startup-page-notice`,role:`alert`,children:r(`startup.staleData`)}),(E||S)&&(0,Y.jsx)(`div`,{className:`startup-runtime-notice-slot${E&&!S?` startup-runtime-notice-slot--pending`:``}`,"aria-hidden":E&&!S?!0:void 0,children:S&&(0,Y.jsxs)(`div`,{className:`notice notice-warn startup-page-notice startup-runtime-notice`,role:`status`,children:[(0,Y.jsx)(`p`,{className:`startup-runtime-notice__text`,children:S}),w&&(0,Y.jsxs)(`div`,{className:`startup-runtime-notice__fix`,children:[(0,Y.jsx)(`code`,{children:w}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void H(w),children:r(s===w?`startup.copied`:`startup.copy`)})]})]})}),(0,Y.jsx)(bw,{failed:V,data:z}),(0,Y.jsx)(xw,{data:z,failed:V,loading:B,installBusy:v,installResult:b,onInstall:(e,t)=>{W(e,t)}}),z.platform===`win32`&&(0,Y.jsx)(Sw,{tray:l,trayLoading:d,trayError:h,trayBusy:p,onTrayAction:e=>{U(e)}}),(0,Y.jsx)(Cw,{data:z,copied:s,onCopy:e=>{H(e)}})]}):null]})}function Ow(e){return`'${e.replace(/'/g,`'"'"'`)}'`}function kw(e){return`'${e.replace(/'/g,`''`)}'`}function Aw(e,t){return{posix:`printf '%s\\n' ${Ow(e)} | ocx remote-workspace pair ${Ow(t)} --pairing-code-stdin --root "$PWD" && ocx remote-workspace agent`,powershell:`$pairingCode = ${kw(e)}; $pairingCode | ocx remote-workspace pair ${kw(t)} --pairing-code-stdin --root (Get-Location).Path; if ($LASTEXITCODE -eq 0) { ocx remote-workspace agent }`}}var jw=[`codex`,`claude`,`pi`],Mw={codex:`Codex`,claude:`Claude Code`,pi:`Pi`},Nw={starting:`remote.status.starting`,ready:`remote.status.ready`,running:`remote.status.running`,waiting_for_executor:`remote.status.waiting`,failed:`remote.status.failed`,stopped:`remote.status.stopped`},Pw={status:`remote.event.status`,tool:`remote.event.tool`,error:`remote.event.error`};function Fw(e){return e===`codex`||e===`claude`||e===`pi`}function Iw(e){return e===`read-only`||e===`workspace`}async function Lw(e){try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}function Rw({apiBase:e,hubOrigin:t}){let n=Q(),r=K(`remote-workspace:${e}`,[e],async t=>await It(await fetch(`${e}/api/remote-workspace`,{signal:t,cache:`no-store`}),n(`remote.loadFailed`)),{pollMs:3e3,deadlineMs:1e4}),i=r.data,[a,o]=(0,_.useState)(``),[s,c]=(0,_.useState)(``),[l,u]=(0,_.useState)(`codex`),[d,f]=(0,_.useState)(`read-only`),[p,m]=(0,_.useState)(``),[h,g]=(0,_.useState)(null),[v,y]=(0,_.useState)(null),[b,x]=(0,_.useState)({}),[S,C]=(0,_.useState)(null),[w,T]=(0,_.useState)(!1),[E,D]=(0,_.useState)(!1),O=(0,_.useRef)(null),[k,A]=(0,_.useState)(null),[j,M]=(0,_.useState)(null),N=i?.devices??[],P=N.find(e=>e.id===a)??N.find(e=>e.online)??N[0]??null,F=P?.roots.find(e=>e.id===s)??P?.roots[0]??null,I=d===`workspace`&&(P?.capabilities.includes(`workspace.exec`)??!1),L=P&&!P.capabilities.includes(`workspace.exec`)?n(`remote.access.workspaceFilesOnly`):n(`remote.access.workspace`),R=jw.filter(e=>i?.runtimes?.[e]?.available),z=R.includes(l)?l:R[0]??l,B=i?.sessions??[],V=[...B].reverse().find(e=>e.status!==`stopped`),H=(B.find(e=>e.id===p)??(h?.id===p?h:null)??V??h)?.id,U=B.find(e=>e.id===H),W=h?.id===H?h:null,G=(W&&(!U||(W.events.at(-1)?.sequence??0)>(U.events.at(-1)?.sequence??0))?W:U)??V??h,q=b[G?.id??``]??``,J=e=>{let t=G?.id;t&&x(n=>({...n,[t]:typeof e==`function`?e(n[t]??``):e}))},X=!!(i&&!r.lastAttemptOk),ee=!!(G&&q.trim()&&S===null&&!w&&!E&&!X&&G.status!==`running`&&G.status!==`starting`&&G.status!==`stopped`&&(G.status!==`failed`||G.resumable!==!1)&&!(G.status===`waiting_for_executor`&&!N.find(e=>e.id===G.deviceId)?.online)),te=(0,_.useMemo)(()=>v?Aw(v.code,t):{posix:``,powershell:``},[v,t]),ne=async(t,n,r)=>{let i=await It(await fetch(`${e}${t}`,n),r);if(i===void 0)throw Error(r);return i},Z=async()=>{C(`pair`),A(null);try{let e=await ne(`/api/remote-workspace/pairing`,{method:`POST`},n(`remote.requestFailed`));y(e),M(null)}catch(e){A({tone:`err`,text:e instanceof Error?e.message:n(`remote.requestFailed`)})}finally{C(null)}},re=async()=>{if(!(!P||!F)){C(`session`),A(null);try{let e=await ne(`/api/remote-workspace/sessions`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({profile:z,deviceId:P.id,rootId:F.id,accessMode:d})},n(`remote.requestFailed`));g(e),m(e.id),A({tone:`ok`,text:n(`remote.sessionStarted`)}),r.refresh()}catch(e){A({tone:`err`,text:e instanceof Error?e.message:n(`remote.requestFailed`)})}finally{C(null)}}},ie=async()=>{if(!G||!ee)return;let t=G,i=q;T(!0),A(null);let a;try{let o=await fetch(`${e}/api/remote-workspace/sessions/${t.id}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompt:i})});a=o.status;let s=await It(o,n(`remote.requestFailed`));if(!s)throw Error(n(`remote.requestFailed`));J(e=>e===i?``:e),O.current!==t.id&&g(s),r.refresh()}catch(e){O.current!==t.id&&(A({tone:`err`,text:a!==void 0&&a>=400&&a<500?e instanceof Error?e.message:n(`remote.requestFailed`):n(`remote.submissionUnknown`)}),r.refresh())}finally{T(!1)}},oe=async()=>{if(!G||E)return;let e=G;D(!0);try{await ne(`/api/remote-workspace/sessions/${e.id}`,{method:`DELETE`},n(`remote.requestFailed`)),O.current=e.id,g({...e,status:`stopped`}),r.refresh()}catch(e){A({tone:`err`,text:e instanceof Error?e.message:n(`remote.requestFailed`)})}finally{D(!1)}},se=async e=>{if(confirm(n(`remote.revokeConfirm`,{name:e.name}))){C(`revoke`);try{await ne(`/api/remote-workspace/devices/${e.id}`,{method:`DELETE`},n(`remote.requestFailed`)),a===e.id&&o(``),r.refresh()}catch(e){A({tone:`err`,text:e instanceof Error?e.message:n(`remote.requestFailed`)})}finally{C(null)}}},ce=async(e,t)=>{M(await Lw(t)?e:null)};return r.loading&&!i?(0,Y.jsx)(`div`,{className:`alert`,children:n(`remote.loading`)}):r.error&&!i?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)($,{tone:`err`,children:n(`remote.loadFailed`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>void r.refresh(),children:n(`common.retry`)})]}):i?.available===!1?(0,Y.jsx)($,{tone:`err`,children:n(`remote.hubRequired`)}):(0,Y.jsxs)(`section`,{className:`remote-workspace-page`,children:[(0,Y.jsxs)(`div`,{className:`page-head`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{children:n(`remote.title`)}),(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`remote.subtitle`)})]}),(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void r.refresh(),disabled:r.refreshing,children:[(0,Y.jsx)(de,{}),` `,n(`remote.refresh`)]})]}),X?(0,Y.jsx)($,{tone:`err`,children:n(`remote.loadFailed`)}):null,k?(0,Y.jsx)($,{tone:k.tone,children:k.text}):null,(0,Y.jsxs)(`div`,{className:`remote-workspace-grid`,children:[(0,Y.jsxs)(`div`,{className:`remote-workspace-column`,children:[(0,Y.jsxs)(`article`,{className:`panel panel-accent remote-pair-card`,children:[(0,Y.jsxs)(`div`,{className:`remote-panel-head`,children:[(0,Y.jsx)(`div`,{className:`remote-icon`,children:(0,Y.jsx)(je,{})}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h3`,{children:n(`remote.addComputer`)}),(0,Y.jsx)(`p`,{children:n(`remote.addComputerHint`)})]})]}),(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>void Z(),disabled:S!==null,children:[(0,Y.jsx)(ue,{}),` `,n(`remote.createPairing`)]}),v?(0,Y.jsxs)(`div`,{className:`remote-pairing-result`,children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.pairingCode`)}),(0,Y.jsx)(`div`,{className:`remote-pairing-code`,children:v.code}),(0,Y.jsx)(`div`,{className:`remote-expiry`,children:n(`remote.pairingExpires`,{time:new Date(v.expiresAt).toLocaleTimeString()})}),(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.pairingCommandPosix`)}),(0,Y.jsx)(`pre`,{children:(0,Y.jsx)(`code`,{children:te.posix})}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void ce(`posix`,te.posix),children:n(j===`posix`?`remote.copied`:`remote.copyCommand`)}),(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.pairingCommandWindows`)}),(0,Y.jsx)(`pre`,{children:(0,Y.jsx)(`code`,{children:te.powershell})}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void ce(`powershell`,te.powershell),children:n(j===`powershell`?`remote.copied`:`remote.copyCommand`)})]}):null]}),(0,Y.jsxs)(`section`,{className:`panel remote-device-panel`,children:[(0,Y.jsxs)(`div`,{className:`remote-section-title`,children:[(0,Y.jsx)(`h3`,{children:n(`remote.devices`)}),(0,Y.jsx)(`span`,{children:N.length})]}),N.length===0?(0,Y.jsx)(`p`,{className:`remote-empty`,children:n(`remote.noDevices`)}):(0,Y.jsx)(`div`,{className:`remote-device-list`,children:N.map(e=>(0,Y.jsxs)(`div`,{className:`remote-device${P?.id===e.id?` selected`:``}`,children:[(0,Y.jsxs)(`button`,{type:`button`,className:`remote-device-main`,onClick:()=>{o(e.id),c(e.roots[0]?.id??``)},"aria-pressed":P?.id===e.id,children:[(0,Y.jsx)(`span`,{className:`remote-online-dot${e.online?` online`:``}`}),(0,Y.jsxs)(`span`,{className:`remote-device-copy`,children:[(0,Y.jsx)(`strong`,{children:e.name}),(0,Y.jsxs)(`small`,{children:[e.platform,` · `,e.online?n(`remote.online`):n(`remote.offline`),` · `,e.capabilities.includes(`workspace.exec`)?n(`remote.capability.full`):n(`remote.capability.files`)]})]})]}),(0,Y.jsx)(`button`,{type:`button`,className:`remote-revoke`,"aria-label":n(`remote.revoke`),disabled:S!==null||w||E,onClick:()=>void se(e),children:(0,Y.jsx)(me,{})})]},e.id))})]})]}),(0,Y.jsxs)(`div`,{className:`remote-workspace-column remote-session-column`,children:[(0,Y.jsxs)(`section`,{className:`panel remote-launch-panel`,children:[(0,Y.jsxs)(`div`,{className:`remote-section-title`,children:[(0,Y.jsx)(`h3`,{children:n(`remote.newSession`)}),(0,Y.jsx)(Pe,{})]}),(0,Y.jsxs)(`div`,{className:`remote-launch-fields`,children:[(0,Y.jsxs)(`label`,{children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.device`)}),(0,Y.jsx)(kt,{value:P?.id??``,options:N.map(e=>({value:e.id,label:e.name})),onChange:e=>{o(e),c(N.find(t=>t.id===e)?.roots[0]?.id??``)},label:n(`remote.device`),disabled:N.length===0})]}),(0,Y.jsxs)(`label`,{children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.folder`)}),(0,Y.jsx)(kt,{value:F?.id??``,options:(P?.roots??[]).map(e=>({value:e.id,label:e.label})),onChange:c,label:n(`remote.folder`),disabled:!P})]}),(0,Y.jsxs)(`label`,{children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.runtime`)}),(0,Y.jsx)(kt,{value:z,options:jw.map(e=>({value:e,label:i?.runtimes?.[e]?.available?Mw[e]:`${Mw[e]} · ${n(`remote.unavailable`)}`})),onChange:e=>{Fw(e)&&u(e)},label:n(`remote.runtime`)})]}),(0,Y.jsxs)(`label`,{children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.access`)}),(0,Y.jsx)(kt,{value:d,options:[{value:`read-only`,label:n(`remote.access.readOnly`)},{value:`workspace`,label:L}],onChange:e=>{Iw(e)&&f(e)},label:n(`remote.access`)})]})]}),P?(0,Y.jsxs)(`div`,{className:`remote-execution-map`,children:[(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(`strong`,{children:Mw[z]}),n(`remote.runsOnHub`)]}),(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(`strong`,{children:P.name}),n(d===`read-only`?`remote.runsReadOnly`:I?`remote.runsFilesCommands`:`remote.runsFilesOnly`)]})]}):null,d===`workspace`&&!I&&P?(0,Y.jsx)($,{tone:`err`,children:n(`remote.execUnavailable`)}):null,!i?.runtimes?.[z]?.available&&i?.runtimes?.[z]?.reason?(0,Y.jsx)(`p`,{className:`remote-runtime-reason`,children:i.runtimes[z].reason}):null,(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-primary remote-start`,onClick:()=>void re(),disabled:!P?.online||!F||!i?.runtimes?.[z]?.available||S!==null||w||E,children:[(0,Y.jsx)(ae,{}),` `,n(`remote.startSession`)]})]}),(0,Y.jsxs)(`section`,{className:`panel remote-console-panel`,children:[(0,Y.jsxs)(`div`,{className:`remote-section-title`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h3`,{children:n(`remote.sessions`)}),G?(0,Y.jsxs)(`small`,{children:[Mw[G.profile],` · `,G.deviceName,`/`,G.rootLabel,` · `,G.accessMode===`read-only`?n(`remote.access.readOnly`):G.capabilities.includes(`workspace.exec`)?n(`remote.access.workspace`):n(`remote.access.workspaceFilesOnly`)]}):null]}),G?(0,Y.jsx)(`span`,{className:`remote-status remote-status--${G.status}`,children:n(Nw[G.status])}):null]}),B.length>1?(0,Y.jsx)(kt,{value:G?.id??``,options:B.map(e=>({value:e.id,label:`${Mw[e.profile]} · ${e.deviceName}/${e.rootLabel}`})),onChange:m,label:n(`remote.sessions`)}):null,G?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`remote-events`,"aria-live":`polite`,"aria-label":n(`remote.events`),children:G.events.length===0?(0,Y.jsx)(`p`,{className:`remote-empty`,children:n(`remote.noEvents`)}):G.events.map(e=>(0,Y.jsxs)(`div`,{className:`remote-event remote-event--${e.type}`,children:[(0,Y.jsx)(`span`,{children:e.type===`assistant`?Mw[G.profile]:n(Pw[e.type])}),(0,Y.jsx)(`p`,{children:e.text})]},e.sequence))}),G.status===`failed`&&G.resumable===!1?(0,Y.jsx)($,{tone:`err`,children:n(`remote.notResumable`)}):null,(0,Y.jsxs)(`label`,{className:`remote-composer`,children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.prompt`)}),(0,Y.jsx)(`textarea`,{className:`input`,rows:4,value:q,onChange:e=>J(e.target.value),placeholder:n(`remote.promptPlaceholder`),disabled:G.status===`stopped`||G.status===`failed`&&G.resumable===!1,onKeyDown:e=>{(e.ctrlKey||e.metaKey)&&e.key===`Enter`&&(e.preventDefault(),ie())}})]}),(0,Y.jsxs)(`div`,{className:`remote-console-actions`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>void ie(),disabled:!ee,children:n(`remote.send`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-danger`,onClick:()=>void oe(),disabled:E||G.status===`stopped`,children:n(`remote.stop`)})]})]}):(0,Y.jsx)(`p`,{className:`remote-empty remote-empty--console`,children:n(`remote.noSessions`)})]})]})]})]})}var zw=3e5,Bw=6e5,Vw=`https://github.com/lidge-jun/opencodex`;async function Hw(e,t){let n=await fetch(e,{signal:t});return n.ok?await n.json():null}function Uw({apiBase:e,onOpenUpdate:t}){let n=Q(),[r,i]=(0,_.useState)(!1),[a,o]=(0,_.useState)(null),s=K(`sidebar-star:${e}`,[e],t=>Hw(`${e}/api/github/star`,t),{pollMs:zw}),c=K(`sidebar-update-badge:${e}`,[e],t=>Hw(`${e}/api/update/badge`,t),{pollMs:Bw}),l=s.data?.state??null,u=a!==null&&a.basedOn===l?a.state:l??`not-starred`,d=s.data?.url??Vw,f=u===`starred`,p=c.data,m=p?.updateAvailable===!0,h=p?.latestVersion??null,g=()=>window.open(d,`_blank`,`noopener,noreferrer`),v=async()=>{if(!(f||r)){if(u===`unauthenticated`){g();return}i(!0);try{let t=await fetch(`${e}/api/github/star`,{method:`POST`}),n=t.ok?await t.json():null;if(n?.ok===!0){o({state:`starred`,basedOn:l});return}n?.state&&o({state:n.state,basedOn:l}),g()}catch{g()}finally{i(!1),s.refresh()}}},y=n(f?`sidebar.starred`:u===`unauthenticated`?`sidebar.starUnauthenticated`:`sidebar.star`),b=m&&h?n(`sidebar.updateAvailable`,{version:h}):n(`sidebar.checkUpdate`);return(0,Y.jsxs)(`div`,{className:`sidebar-github-row`,children:[(0,Y.jsxs)(`a`,{className:`sidebar-link sidebar-github-link`,href:d,target:`_blank`,rel:`noreferrer`,children:[(0,Y.jsx)(we,{}),` `,n(`common.github`)]}),(0,Y.jsxs)(`div`,{className:`sidebar-github-actions`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb${f?` sidebar-orb--starred`:``}`,onClick:()=>{v()},disabled:r||f,"aria-label":y,"aria-pressed":f,title:y,children:(0,Y.jsx)(Re,{"aria-hidden":`true`,...f?{fill:`currentColor`}:{}})}),(0,Y.jsxs)(`button`,{type:`button`,className:`sidebar-orb${m?` sidebar-orb--update`:``}`,onClick:t,"aria-label":b,title:b,children:[(0,Y.jsx)(Se,{"aria-hidden":`true`}),m&&(0,Y.jsx)(`span`,{className:`sidebar-orb-dot`,"aria-hidden":`true`})]})]})]})}var Ww=/^ocx_pair_[A-Za-z0-9_-]{43}$/,Gw=class extends Error{kind;constructor(e){super(`pairing_${e}`),this.kind=e,this.name=`PairingError`}};async function Kw(e,t,n,r){r?.throwIfAborted();let i=t.trim();if(!Ww.test(i))throw new Gw(`invalid-code`);let a=n??((e,t)=>window.fetch(e,t)),o;try{o=await a(e.bootstrapPath,{method:`POST`,signal:r,headers:{"Content-Type":`application/json`,Accept:`text/html`},body:JSON.stringify({grant:i})})}catch(e){throw r?.aborted?e:new Gw(`unreachable`)}if(!o.ok){try{await o.body?.cancel()}catch{}throw new Gw(o.status===401||o.status===403?`refused`:`request-failed`)}let s;try{s=await o.text()}catch(e){throw r?.aborted?e:new Gw(`invalid-response`)}if(r?.throwIfAborted(),!Ux(`shared`,s))throw new Gw(`invalid-response`);return!0}function qw({target:e,onConnected:t}){let n=Q(),[r,i]=(0,_.useState)(``),[a,o]=(0,_.useState)(!1),[s,c]=(0,_.useState)(null),l=(0,_.useRef)(null);(0,_.useEffect)(()=>()=>l.current?.abort(),[]);let u=_s(),d=`ocx gui pair --origin "${window.location.origin}"`,f=u.outcomeFor(d);return(0,Y.jsxs)(`section`,{className:`card connect-pairing`,"aria-labelledby":`connect-pairing-title`,children:[(0,Y.jsx)(`h2`,{id:`connect-pairing-title`,children:n(`connection.pairing.title`)}),(0,Y.jsxs)(`p`,{children:[n(`connection.pairing.hub`),`: `,(0,Y.jsx)(`code`,{children:e.serverOrigin})]}),(0,Y.jsx)(`p`,{children:n(`connection.pairing.getCode`)}),(0,Y.jsx)(`pre`,{style:{whiteSpace:`pre-wrap`,overflowWrap:`anywhere`},children:(0,Y.jsx)(`code`,{children:d})}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>u.copy(d,d),children:n(f===`copied`?`startup.copied`:`startup.copy`)}),f===`unavailable`&&(0,Y.jsx)(`p`,{role:`status`,children:n(`prov.linkCopyUnavailable`)}),(0,Y.jsx)(`p`,{children:n(`connection.pairing.askOperator`)}),(0,Y.jsx)(`p`,{children:n(`connection.pairing.notApiKey`)}),(0,Y.jsxs)(`form`,{onSubmit:async n=>{if(n.preventDefault(),a)return;o(!0),c(null);let i=new AbortController;l.current=i;try{await Kw(e,r,void 0,i.signal),i.signal.aborted||t()}catch(e){i.signal.aborted||c(e instanceof Gw?e.kind:`unreachable`)}finally{i.signal.aborted||o(!1),l.current===i&&(l.current=null)}},className:`api-form-row`,children:[(0,Y.jsx)(`label`,{htmlFor:`connect-pairing-code`,className:`field-label`,children:n(`connection.pairing.code`)}),(0,Y.jsx)(`input`,{id:`connect-pairing-code`,name:`pairingCode`,value:r,onChange:e=>i(e.currentTarget.value),autoComplete:`off`,spellCheck:!1,disabled:a,className:`input mono`,"aria-invalid":!!s||void 0,"aria-describedby":s?`connect-pairing-error`:void 0}),(0,Y.jsx)(`button`,{type:`submit`,className:`btn btn-primary`,disabled:a||!r.trim(),children:n(a?`connection.pairing.submitting`:`connection.pairing.submit`)}),s&&(0,Y.jsx)(`p`,{id:`connect-pairing-error`,className:`alert alert-err`,role:`alert`,children:n(s===`invalid-code`?`connection.pairing.notApiKey`:s===`unreachable`?`connection.pairing.networkError`:s===`request-failed`?`connection.pairing.requestError`:s===`invalid-response`?`connection.pairing.responseError`:`connection.pairing.error`)})]}),e.transport===`relay`&&(0,Y.jsx)(`p`,{className:`text-muted`,children:n(`connection.pairing.relayWarning`)})]})}var Jw=new Set([`dashboard`,`startup`,`providers`,`models`,`subagents`,`logs`,`usage`,`storage`,`remote`,`codex-set`,`integrations`]);function Yw(e){let t=pt(e??(typeof window<`u`?window.location.hash:``)).split(`/`)[0];return t===`debug`?`logs`:t===`codex-auth`?`codex-set`:t===`combos`||t===`routing`||t===`lab`?`models`:t===`api`||t===`claude`||t===`grok`?`integrations`:Jw.has(t)?t:`dashboard`}var Xw=[`dashboard/providers`,`dashboard/models`],Zw=[`models/combos`,`models/routing`,`models/compatibility`],Qw=[`integrations/keys`,`integrations/codex`,`integrations/claude`,`integrations/claude/desktop`,`integrations/grok`,`integrations/cursor`,`integrations/opencode`,`integrations/pi`,`integrations/omp`,`integrations/hermes`,`integrations/openclaw`,`integrations/kimi`,`integrations/gajae`,`integrations/dsh`,`integrations/mcode`,`integrations/zcode`,`integrations/prime`,`integrations/aside`,`integrations/raycast`,`integrations/omo`,`integrations/cline`];function $w(e,t){return e===t||t===`logs`&&e===`logs/debug`||t===`codex-set`&&e===`codex-set/prompt`||t===`models`&&Zw.includes(e)||t===`dashboard`&&(e===`dashboard/update`||Xw.includes(e))||t===`integrations`&&Qw.includes(e)}function eT(e){let t=Yw(e);return e===`debug`||e.startsWith(`debug/`)?{page:`logs`,replaceTo:`logs/debug`}:e===`codex-auth`||e.startsWith(`codex-auth/`)?{page:`codex-set`,replaceTo:`codex-set`}:e===`combos`||e.startsWith(`combos/`)?{page:`models`,replaceTo:`models/combos`}:e===`routing`||e.startsWith(`routing/`)?{page:`models`,replaceTo:`models/routing`}:e===`lab`||e.startsWith(`lab/`)?{page:`models`,replaceTo:`models/compatibility`}:e===`api`?{page:`integrations`,replaceTo:`integrations/keys`}:e===`claude`?{page:`integrations`,replaceTo:`integrations/claude`}:e===`grok`?{page:`integrations`,replaceTo:`integrations/grok`}:e===`providers/workspace`?{page:`providers`,replaceTo:`providers`}:$w(e,t)?{page:t,replaceTo:null}:{page:t,replaceTo:t}}var tT=[`ocx-global-view`,`ocx-view`,`ocx-providers-view`,`ocx-subagents-view`,`ocx-storage-view`,`ocx-codexauth-view`,`ocx-apikeys-view`,`ocx-claudecode-view`,`ocx-usage-view`,`ocx-logs-view`,`ocx-models-view`,`ocx-dashboard-view`];function nT(){try{for(let e of tT)localStorage.removeItem(e)}catch{}}function rT(){let[e,t]=(0,_.useState)(Yw);(0,_.useEffect)(()=>{nT()},[]);let n=(0,_.useCallback)(e=>{let n=eT(e);n.replaceTo&&mt(n.replaceTo),t(n.page)},[]);return(0,_.useEffect)(()=>{let e=()=>{n(pt(window.location.hash))};return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[n]),(0,_.useEffect)(()=>{let n=eT(pt(window.location.hash));n.replaceTo&&mt(n.replaceTo),n.page!==e&&t(n.page)},[e]),{page:e,setPageState:t,navigateToPage:(e,n)=>{ht(n?`${e}/${n}`:e),t(e)}}}var iT=15e3;function aT(e,t,n){return typeof e?.message==`string`&&e.message.trim()?e.message:typeof e?.error==`string`&&e.error.trim()?e.error:n(t)}function oT(e){return(e instanceof DOMException||e instanceof Error)&&e.name===`AbortError`}async function sT(e,t={}){let{fetchFn:n=fetch,timeoutMs:r=iT,formatFailure:i=e=>`Failed to stop proxy (HTTP ${e}).`,mode:a=`standalone`}=t,o;try{o=await n(`${e}${a===`client`?`/api/machine/disconnect`:`/api/stop`}`,{method:`POST`,...a===`client`?{headers:{"Content-Type":`application/json`},body:`{}`}:{},signal:AbortSignal.timeout(r)})}catch(e){return oT(e),{accepted:!0}}let s=await o.json().catch(()=>null);return!o.ok||s?.success===!1?{accepted:!1,message:aT(s,o.status,i)}:{accepted:!0}}var cT={dashboard:`nav.dashboard`,startup:`nav.startup`,providers:`nav.providers`,models:`nav.models`,subagents:`nav.subagents`,logs:`nav.logs`,usage:`nav.usage`,storage:`nav.storage`,remote:`nav.remote`,"codex-set":`nav.codexSet`,integrations:`nav.integrations`},lT=``,uT=Rb(lT);Px(uT),eS();var dT=`ocx-theme`,fT=[{id:`dashboard`,tkey:`nav.dashboard`,Icon:ee},{id:`codex-set`,tkey:`nav.codexSet`,Icon:Oe},{id:`providers`,tkey:`nav.providers`,Icon:te},{id:`models`,tkey:`nav.models`,Icon:ne},{id:`subagents`,tkey:`nav.subagents`,Icon:Z},{id:`logs`,tkey:`nav.logs`,Icon:re},{id:`usage`,tkey:`nav.usage`,Icon:oe},{id:`storage`,tkey:`nav.storage`,Icon:se},{id:`remote`,tkey:`nav.remote`,Icon:Pe},{id:`integrations`,tkey:`nav.integrations`,Icon:Fe}],pT={light:Me,dark:Ne,system:Pe},mT={light:`theme.light`,dark:`theme.dark`,system:`theme.system`};function hT(e){if(!e||typeof e!=`object`||!(`version`in e))return null;let t=e.version;return typeof t==`string`&&t.length>0?t:null}function gT(){let e=localStorage.getItem(dT);return e===`light`||e===`dark`?e:`system`}function _T(){let{page:e,navigateToPage:t}=rT(),[n,r]=(0,_.useState)(gg);(0,_.useEffect)(()=>{let e=()=>r(gg());return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[]);let[i,a]=(0,_.useState)(gT),{locale:o,setLocale:s}=ut(),c=Q(),[l,u]=(0,_.useState)(uT),[d,f]=(0,_.useState)(()=>!Mb()),[p,m]=(0,_.useState)(!1),[h,g]=(0,_.useState)(()=>Rx(`shared`)),[v,y]=(0,_.useState)(0),[b,x]=(0,_.useState)(!1);(0,_.useEffect)(()=>{let e=e=>{e.detail?.plane===`shared`&&!Rx(`shared`)&&g(!1)};return window.addEventListener(hx,e),()=>window.removeEventListener(hx,e)},[]),(0,_.useEffect)(()=>{let e=new AbortController;return Hb(lT,e.signal).then(async t=>{if(Px(t),u(t),t.connected&&!Rx(`shared`))try{let n=await fetch(t.shared.bootstrapPath,{cache:`no-store`,signal:AbortSignal.any([e.signal,AbortSignal.timeout(5e3)])});n.ok&&Ux(`shared`,await n.text())}catch{}e.signal.aborted||(g(Rx(`shared`)),m(!1),f(!0))}).catch(()=>{e.signal.aborted||(m(!0),f(!0))}),()=>e.abort()},[]);let S=Vb(`machine`,l),C=Vb(`shared`,l),[w,T]=(0,_.useState)(!1),E=(0,_.useRef)(null),D=(0,_.useRef)(null),O=(0,_.useRef)(!1);(0,_.useEffect)(()=>{let e=()=>T(!1);return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[]),(0,_.useEffect)(()=>{let e=document.documentElement;i===`system`?(e.removeAttribute(`data-theme`),localStorage.removeItem(dT)):(e.setAttribute(`data-theme`,i),localStorage.setItem(dT,i))},[i]);let k=K(`app-healthz:${S}`,[S,d],async e=>{let t=await fetch(`${S}/healthz`,{signal:e});return t.ok?hT(await t.json()):null},{pollMs:3e4,enabled:d}),A=()=>a(e=>e===`light`?`dark`:e===`dark`?`system`:`light`),j=pT[i],M=k.data??`2.55.0-preview.20260914`,[N,P]=(0,_.useState)(!1);(0,_.useEffect)(()=>{if(!w)return;let e=e=>{e.key===`Escape`&&T(!1)};window.addEventListener(`keydown`,e);let t=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{window.removeEventListener(`keydown`,e),document.body.style.overflow=t}},[w]),(0,_.useEffect)(()=>{if(w){O.current=!0;let e=setTimeout(()=>D.current?.focus(),200);return()=>clearTimeout(e)}O.current&&(O.current=!1,E.current?.focus())},[w]),(0,_.useEffect)(()=>{let e=window.matchMedia(`(min-width: 761px)`),t=()=>{e.matches&&T(!1)};return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let[F,I]=(0,_.useState)(0),{restarting:L,restart:R}=Xd(C,{onSettled:()=>I(e=>e+1)}),z=async()=>{if(!confirm(c(l.connected?`connection.disconnectConfirm`:`dash.stopConfirm`)))return;P(!0);let e=await sT(S,{formatFailure:e=>c(`dash.stopFailed`,{status:String(e)}),mode:l.connected?`client`:`standalone`});e.accepted||(P(!1),alert(e.message))},B=async()=>{if(b)return;x(!0);let e=await zx(`shared`);x(!1),e?g(!1):alert(c(`connection.sessionLogoutFailed`))},V=(0,Y.jsxs)(`button`,{type:`button`,className:`brand brand-home`,onClick:()=>{t(`dashboard`),T(!1)},"aria-label":c(`nav.goHome`),title:c(`nav.goHome`),...e===`dashboard`?{"aria-current":`page`}:{},children:[(0,Y.jsx)(`span`,{className:`brand-logo`,role:`img`,"aria-label":c(`app.logoAria`)}),(0,Y.jsx)(`span`,{className:`name`,children:`opencodex`}),(0,Y.jsxs)(`span`,{className:`ver`,title:M,children:[`v`,M]})]});return(0,Y.jsxs)(`div`,{className:`app`,children:[(0,Y.jsxs)(`header`,{className:`mobile-topbar`,inert:w,children:[(0,Y.jsx)(`button`,{ref:E,type:`button`,className:`menu-toggle`,onClick:()=>T(e=>!e),"aria-expanded":w,"aria-controls":`app-sidebar`,"aria-label":c(w?`nav.closeMenu`:`nav.openMenu`),title:c(w?`nav.closeMenu`:`nav.openMenu`),children:(0,Y.jsx)(ie,{})}),V,(0,Y.jsxs)(`div`,{className:`mobile-topbar-actions`,children:[l.connected&&h&&(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb`,onClick:()=>{B()},disabled:b,"aria-label":c(b?`connection.sessionLoggingOut`:`connection.sessionLogout`),title:c(`connection.sessionLogout`),children:(0,Y.jsx)(le,{})}),(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb sidebar-orb--danger`,onClick:z,disabled:N,"aria-label":c(l.connected?`connection.disconnect`:`dash.stop`),title:c(l.connected?`connection.disconnect`:`dash.stop`),children:(0,Y.jsx)(Te,{})}),(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb`,onClick:()=>{R()},disabled:L,"aria-label":c(`dash.codexRestart`),title:c(`dash.codexRestart`),children:(0,Y.jsx)(de,{})})]})]}),w&&(0,Y.jsx)(`div`,{className:`drawer-scrim`,onClick:()=>T(!1),"aria-hidden":`true`}),(0,Y.jsxs)(`aside`,{id:`app-sidebar`,className:`sidebar${w?` open`:``}`,ref:D,tabIndex:-1,children:[(0,Y.jsxs)(`div`,{className:`drawer-head`,children:[V,(0,Y.jsx)(`button`,{type:`button`,className:`menu-toggle drawer-close`,onClick:()=>T(!1),"aria-label":c(`nav.closeMenu`),title:c(`nav.closeMenu`),children:(0,Y.jsx)(le,{})})]}),(0,Y.jsx)(`nav`,{children:fT.map(n=>{let{id:r,tkey:i,Icon:a}=n,o=r===e;return(0,Y.jsx)(`div`,{className:`nav-entry`,children:(0,Y.jsxs)(`button`,{type:`button`,className:`nav-item${o?` active`:``}`,"data-page":r,onClick:()=>{t(r),T(!1)},"aria-current":o?`page`:void 0,children:[(0,Y.jsx)(a,{}),` `,c(i)]})},r)})}),(0,Y.jsxs)(`div`,{className:`sidebar-foot`,children:[(0,Y.jsxs)(`div`,{className:`lang-toggle`,children:[(0,Y.jsx)(Fe,{"aria-hidden":!0}),(0,Y.jsx)(kt,{value:o,options:nt.map(e=>({value:e.code,label:et(e.code)})),onChange:e=>s(e),label:c(`lang.label`),placement:`right`,portal:!1,style:{flex:1,minWidth:0,width:`100%`}})]}),(0,Y.jsxs)(`button`,{type:`button`,className:`theme-toggle`,onClick:A,"aria-label":`${c(`theme.label`)}: ${c(mT[i])}`,title:`${c(`theme.label`)}: ${c(mT[i])}`,children:[(0,Y.jsx)(j,{}),` `,(0,Y.jsx)(`span`,{className:`mode`,children:c(mT[i])})]}),(0,Y.jsxs)(`div`,{className:`sidebar-action-row`,children:[(0,Y.jsx)(`span`,{className:`sidebar-action-label`,children:c(`dash.actions`)}),(0,Y.jsxs)(`div`,{className:`sidebar-action-orbs`,children:[l.connected&&h&&(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb`,onClick:()=>{B()},disabled:b,"aria-label":c(b?`connection.sessionLoggingOut`:`connection.sessionLogout`),title:c(`connection.sessionLogout`),children:(0,Y.jsx)(le,{})}),(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb sidebar-orb--danger`,onClick:z,disabled:N,"aria-label":c(N?`dash.stopping`:l.connected?`connection.disconnect`:`dash.stop`),title:c(N?`dash.stopping`:l.connected?`connection.disconnect`:`dash.stop`),children:(0,Y.jsx)(Te,{})}),(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb`,onClick:()=>{R()},disabled:L,"aria-label":c(L?`dash.codexRestarting`:`dash.codexRestart`),title:c(L?`dash.codexRestarting`:`dash.codexRestart`),children:(0,Y.jsx)(de,{})})]})]}),(0,Y.jsx)(Uw,{apiBase:C,onOpenUpdate:()=>{T(!1),t(`dashboard`,`update`)}})]})]}),(0,Y.jsx)(`main`,{className:`main`,inert:w,children:(0,Y.jsx)(`div`,{className:`main-inner${e===`models`&&n===`combos`?` main-inner--combos`:``}`,children:(0,Y.jsx)(np,{pageName:c(cT[e]),title:c(`errorBoundary.title`),message:c(`errorBoundary.message`),detailsLabel:c(`errorBoundary.details`),reloadLabel:c(`errorBoundary.reload`),children:d?(0,Y.jsxs)(Y.Fragment,{children:[p&&(0,Y.jsx)(`div`,{className:`alert alert-err`,role:`alert`,children:c(`connection.machineUnavailable`)}),l.connected&&!h&&(0,Y.jsx)(qw,{target:l.shared,onConnected:()=>{g(!0),y(e=>e+1)}},`${l.shared.serverOrigin}:${l.shared.bootstrapPath}`),e===`dashboard`&&(0,Y.jsx)(si,{apiBase:C,connected:l.connected,authenticationPending:l.connected&&!h,refreshEpoch:v}),e===`startup`&&(0,Y.jsx)(Dw,{apiBase:C,machineApiBase:S,connected:l.connected}),e===`providers`&&(0,Y.jsx)(sd,{apiBase:C}),e===`models`&&(0,Y.jsx)(Dg,{apiBase:C,restartEpoch:F},C),e===`subagents`&&(0,Y.jsx)(zg,{apiBase:C},C),e===`logs`&&(0,Y.jsx)(jv,{apiBase:C}),e===`usage`&&(0,Y.jsx)(ny,{apiBase:C,connected:l.connected,apiKeyId:l.apiKeyId}),e===`storage`&&(0,Y.jsx)(jy,{apiBase:C}),e===`remote`&&(0,Y.jsx)(Rw,{apiBase:C,hubOrigin:l.shared.serverOrigin}),e===`codex-set`&&(0,Y.jsx)(bb,{apiBase:C}),e===`integrations`&&(0,Y.jsx)(mw,{apiBase:C,machineApiBase:S,connected:l.connected})]}):(0,Y.jsx)(`div`,{className:`alert`,children:c(`connection.discovering`)})},e)})})]})}g.createRoot(document.getElementById(`root`)).render((0,Y.jsx)(_.StrictMode,{children:(0,Y.jsx)(dt,{children:(0,Y.jsx)(_T,{})})}));
|
|
128
|
+
`);if(!confirm(t))return;i(!0),o(null);let a=[];for(let t of z)try{await wf(e,t.clientId,!1)}catch(e){a.push(`${t.clientId}: ${Xf(n,e)}`)}let s=!1;try{s=(await xf(e)).clients.some(JC)}catch{a.push(n(`integrations.error.stale`))}s&&a.length===0&&a.push(n(`integrations.error.stale`)),J(),i(!1),o(a.length===0?{tone:`ok`,text:n(`integrations.bulk.success`)}:{tone:`err`,text:n(`integrations.bulk.partial`,{clients:a.join(`; `)})})},ee=R[0]?.at,[te,ne]=(0,_.useState)(null),Z=()=>{I.refresh(),A.refresh(),M.refresh(),P.refresh()},re=(e,t)=>{f(n=>{let r={...n};return t?r[e]=t:delete r[e],r})},ie=async(t,r)=>{if(!te&&t.toggle){ne(t.id),re(t.id,null);try{if(t.status)await wf(e,t.status.clientId,r),J();else if(t.toggle===`claude`||t.toggle===`grok`||t.toggle===`codex`||t.toggle===`claude-desktop`){let i=await Uf(e,t.toggle,r);i.reason===`non_loopback_removed`?re(t.id,{tone:`ok`,text:n(i.changed?`integrations.native.msg.nonLoopbackRemoved`:`integrations.native.msg.nonLoopbackRemovedNoop`)}):i.reason===`non_loopback_superseded`&&re(t.id,{tone:`ok`,text:n(`integrations.native.msg.nonLoopbackSuperseded`)}),Z()}}catch(e){re(t.id,{tone:`err`,text:Xf(n,e,void 0,t.togglePath??void 0)}),(t.toggle===`claude`||t.toggle===`grok`||t.toggle===`codex`||t.toggle===`claude-desktop`)&&Z()}finally{ne(null)}}},ae=(e,t)=>{if(e.status||t||e.id===`claude`||e.toggle===null){ie(e,t);return}let n=document.activeElement;v.current=n?.tagName===`BUTTON`?n:null,m(e)},oe=async t=>{if(t.status){ne(t.id),re(t.id,null);try{await wf(e,t.status.clientId,!0,void 0,!0),J()}catch(e){throw re(t.id,{tone:`err`,text:Xf(n,e,void 0,t.togglePath??void 0)}),e}finally{ne(null)}}};return(0,Y.jsxs)(`section`,{className:`integrations-overview`,children:[(0,Y.jsxs)(`div`,{className:`integration-summary`,children:[(0,Y.jsxs)(`div`,{className:`integration-summary-cell`,children:[(0,Y.jsx)(`span`,{className:`integration-summary-label`,children:n(`integrations.summary.detected`)}),(0,Y.jsx)(`strong`,{children:q.detected})]}),(0,Y.jsxs)(`div`,{className:`integration-summary-cell`,children:[(0,Y.jsx)(`span`,{className:`integration-summary-label`,children:n(`integrations.summary.applied`)}),(0,Y.jsx)(`strong`,{children:q.applied})]}),(0,Y.jsxs)(`div`,{className:`integration-summary-cell`,children:[(0,Y.jsx)(`span`,{className:`integration-summary-label`,children:n(`integrations.summary.stale`)}),(0,Y.jsx)(`strong`,{children:q.stale})]}),q.unknown>0&&(0,Y.jsxs)(`div`,{className:`integration-summary-cell`,children:[(0,Y.jsx)(`span`,{className:`integration-summary-label`,children:n(`integrations.state.unknown`)}),(0,Y.jsx)(`strong`,{children:q.unknown})]}),(0,Y.jsxs)(`div`,{className:`integration-summary-cell`,children:[(0,Y.jsx)(`span`,{className:`integration-summary-label`,children:n(`integrations.summary.lastChange`)}),(0,Y.jsx)(`strong`,{children:ee?new Date(ee).toLocaleString():n(`integrations.status.unknown`)})]}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>void X(),disabled:r||z.length===0,children:n(`integrations.summary.disableAll`)})]}),(0,Y.jsx)(`h3`,{children:n(`integrations.catalog.title`)}),(0,Y.jsx)(ZC,{row:G}),(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`integrations.onboarding`)}),O.state.kind===`failed-cold`&&(0,Y.jsx)($,{tone:`err`,children:n(`integrations.error.load`)}),O.state.kind===`failed-with-stale`&&(0,Y.jsx)($,{tone:`err`,children:n(`integrations.error.stale`)}),a&&(0,Y.jsx)($,{tone:a.tone,children:a.text}),K.length===0?O.state.kind===`failed-cold`?null:(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`common.loading`)}):(0,Y.jsx)(`ul`,{className:`integration-cards`,children:K.map(e=>(0,Y.jsx)(YC,{row:e,pending:te!==null,result:d[e.id]??null,onOpen:()=>ht(e.hash),onToggle:e.toggle?()=>ae(e,!(e.toggleOn??e.applied)):null,onOverwrite:e.status!==null&&e.status.state===`conflict`&&e.installed?()=>g(e):null},e.id))}),V&&B.length===0&&(0,Y.jsxs)(`div`,{className:`integration-empty`,children:[(0,Y.jsx)(`h4`,{children:n(`integrations.empty.title`)}),(0,Y.jsx)(`p`,{children:n(`integrations.empty.body`)})]}),(0,Y.jsx)(`h3`,{children:n(`integrations.rollback.title`)}),k.state.showSkeleton?(0,Y.jsx)(ep,{label:n(`integrations.rollback.title`),rows:2}):k.state.kind===`failed-cold`?(0,Y.jsxs)($,{tone:`err`,children:[n(`integrations.rollback.failed`),` `,(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void k.refresh(),children:n(`common.retry`)})]}):R.length===0?(0,Y.jsxs)(`div`,{className:`integration-empty`,children:[(0,Y.jsx)(`p`,{children:n(`integrations.rollback.empty`)}),(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`integrations.rollback.emptyBody`)})]}):(0,Y.jsx)(WC,{rows:R,showClient:!0,onRestore:c,onDelete:u}),s&&(0,Y.jsx)(DC,{apiBase:e,row:s,onClose:()=>c(null),onRestored:J,onReconcile:J}),l&&(0,Y.jsx)(EC,{copy:{titleKey:`integrations.dialog.deleteEntry.title`,changesKey:`integrations.dialog.deleteEntry.changes`,breakageKey:`integrations.dialog.deleteEntry.breakage`,undoKey:`integrations.dialog.deleteEntry.undo`,confirmKey:`integrations.dialog.deleteEntry.confirm`,vars:{path:l.configPath}},onClose:()=>u(null),onConfirm:async()=>{try{await Ef(e,l.opId,void 0,l.clientId===`aside`?l.profileId:void 0)}catch(e){if(gf(e)){u(null),await k.refresh();return}throw Error(Xf(n,e),{cause:e})}u(null),await k.refresh()}}),p&&(0,Y.jsx)(EC,{copy:{...p.toggle===`claude-desktop`?qC:p.id===`codex`?KC:GC,vars:{path:p.togglePath??``}},onClose:()=>m(null),onConfirm:async()=>{await ie(p,!1),m(null)}}),h&&h.status&&(0,Y.jsx)(EC,{copy:{titleKey:`integrations.dialog.overwrite.title`,changesKey:h.status.reason===`foreign-edit`?`integrations.dialog.overwrite.changesForeign`:`integrations.dialog.overwrite.changesUnowned`,breakageKey:`integrations.dialog.overwrite.breakage`,undoKey:`integrations.dialog.overwrite.undo`,confirmKey:`integrations.dialog.overwrite.confirm`,vars:{path:h.status.configPath}},onClose:()=>g(null),onConfirm:async()=>{await oe(h),g(null)}})]})}function ZC({row:e}){let t=Q(),n=e.detailKey?t(e.detailKey,e.detailVars??void 0):null;return(0,Y.jsxs)(`div`,{className:`integration-api-keys-row`,"data-client":`keys`,"data-key-state":e.state,children:[(0,Y.jsxs)(`div`,{className:`integration-api-keys-copy`,children:[(0,Y.jsx)(`h4`,{children:t(e.labelKey)}),n&&(0,Y.jsx)(`p`,{className:`integration-meta`,children:n})]}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>ht(e.hash),children:t(`integrations.action.manageKeys`)})]})}function QC({install:e}){let t=Q();return(0,Y.jsxs)(Y.Fragment,{children:[e.plan===`free`&&(0,Y.jsx)($,{tone:`warn`,children:t(`integrations.raycast.proRequired`)}),e.plan===`unknown`&&(0,Y.jsx)(`p`,{className:`page-sub`,"data-raycast-plan":`unknown`,children:t(`integrations.raycast.planUnknown`)}),!e.aiDirPresent&&(0,Y.jsx)(`p`,{className:`page-sub`,"data-raycast-ai-dir":`absent`,children:t(`integrations.raycast.revealConfig`)})]})}function $C(e,t){return{titleKey:`integrations.dialog.overwrite.title`,changesKey:e===`foreign-edit`?`integrations.dialog.overwrite.changesForeign`:`integrations.dialog.overwrite.changesUnowned`,breakageKey:`integrations.dialog.overwrite.breakage`,undoKey:`integrations.dialog.overwrite.undo`,confirmKey:`integrations.dialog.overwrite.confirm`,vars:{path:t}}}var ew={opencode:`integrations.semantics.opencode`,pi:`integrations.semantics.pi`,omp:`integrations.semantics.omp`,hermes:`integrations.semantics.hermes`,openclaw:`integrations.semantics.openclaw`,kimi:`integrations.semantics.kimi`,gajae:`integrations.semantics.gajae`,dsh:`integrations.semantics.dsh`,mcode:`integrations.semantics.mcode`,zcode:`integrations.semantics.zcode`,prime:`integrations.semantics.prime`,aside:`integrations.semantics.aside`,raycast:`integrations.semantics.raycast`,omo:`integrations.semantics.omo`,cline:`integrations.semantics.cline`},tw={opencode:`integrations.tab.opencode`,pi:`integrations.tab.pi`,omp:`integrations.tab.omp`,hermes:`integrations.tab.hermes`,openclaw:`integrations.tab.openclaw`,kimi:`integrations.tab.kimi`,gajae:`integrations.tab.gajae`,dsh:`integrations.tab.dsh`,mcode:`integrations.tab.mcode`,zcode:`integrations.tab.zcode`,prime:`integrations.tab.prime`,aside:`integrations.tab.aside`,raycast:`integrations.tab.raycast`,omo:`integrations.tab.omo`,cline:`integrations.tab.cline`};function nw({apiBase:e,client:t,active:n=!0,profileId:r,profileLabel:i}){let a=Q(),o=r===void 0?t:`${t}:${r}`,[s,c]=(0,_.useState)(!1),[l,u]=(0,_.useState)(null),[d,f]=(0,_.useState)(null),[p,m]=(0,_.useState)(null),[h,g]=(0,_.useState)(!1),v=(0,_.useCallback)(n=>Sf(e,t,n,r),[e,t,r]),y=(0,_.useCallback)(async n=>(await Cf(e,t,n,r)).operations,[e,t,r]),b=jr(`integration-state:${e}:${o}`,[e,t,r],v,{isEmpty:()=>!1,enabled:n,sessionCacheKey:`ocx.integrations.state.v1:${e}:${o}`}),x=jr(`integration-journal:${e}:${o}`,[e,t,r],y,{isEmpty:e=>e.length===0,enabled:n,sessionCacheKey:`ocx.integrations.client-journal.v1:${e}:${o}`}),S=b.state.data??null,C=S&&(r===void 0||S.profileId===r&&typeof S.enabled==`boolean`)?S:null,w=x.state.data??[],T=()=>{b.refresh(),x.refresh()},E=async n=>{if(!(!C||s)){c(!0),u(null);try{await wf(e,t,n,void 0,void 0,r)}catch(e){u(Xf(a,e))}finally{T(),c(!1)}}},D=async()=>{if(C){u(null);try{await wf(e,t,!0,void 0,!0,r),T()}catch(e){throw u(Xf(a,e)),T(),e}}},O=()=>void E(!(C&&(r===void 0?C.state===`current`||C.state===`stale`:C.enabled)));if(!C)return(0,Y.jsx)(`section`,{className:`integration-client-page`,children:b.state.showError?(0,Y.jsx)($,{tone:`err`,children:a(`integrations.error.load`)}):(0,Y.jsx)(`p`,{className:`page-sub`,children:a(`common.loading`)})});let k=C.state===`current`||C.state===`stale`,A=r===void 0?k:C.enabled===!0,j=r!==void 0&&(b.state.showError||b.state.refreshing),M=(!C.installed||C.state===`conflict`||C.state===`unsafe`)&&!(r!==void 0&&A);return(0,Y.jsxs)(`section`,{className:`integration-client-page`,children:[(0,Y.jsxs)(`div`,{className:`integration-client-head`,children:[(0,Y.jsx)(Ab,{src:kb(t),label:a(tw[t]),size:24}),(0,Y.jsx)(`h3`,{children:i??a(tw[t])}),(0,Y.jsx)(wC,{state:C.state,installed:C.installed,id:`integration-state-${t}${r===void 0?``:`-${r}`}`}),(0,Y.jsx)(Dt,{on:A,onClick:O,disabled:M||s||j,label:a(A?`integrations.action.disable`:`integrations.action.apply`)})]}),r!==void 0&&b.state.showError&&(0,Y.jsxs)($,{tone:`err`,children:[a(`integrations.aside.loadError`),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:T,disabled:s||b.state.refreshing,children:a(`common.retry`)})]}),C.state===`stale`&&A&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>void E(!0),disabled:s,children:a(`integrations.action.refresh`)}),C.installed&&C.state===`conflict`&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-danger`,onClick:()=>g(!0),disabled:s,children:a(`integrations.action.overwrite`)}),(0,Y.jsx)(`p`,{className:`page-sub`,children:a(ew[t])}),(0,Y.jsx)(`p`,{className:`integration-path`,children:C.configPath}),C.raycast&&(0,Y.jsx)(QC,{install:C.raycast}),C.appliedAt&&(0,Y.jsxs)(`p`,{className:`integration-meta`,children:[a(`integrations.status.appliedAt`),`: `,new Date(C.appliedAt).toLocaleString()]}),C.retentionDegraded&&(0,Y.jsx)($,{tone:`err`,children:a(`integrations.retention.degraded`)}),l&&(0,Y.jsx)($,{tone:`err`,children:l}),(0,Y.jsx)(`h4`,{children:a(`integrations.rollback.title`)}),x.state.showSkeleton?(0,Y.jsx)(ep,{label:a(`integrations.rollback.title`),rows:2}):x.state.kind===`failed-cold`?(0,Y.jsxs)($,{tone:`err`,children:[a(`integrations.rollback.failed`),` `,(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void x.refresh(),children:a(`common.retry`)})]}):w.length===0?(0,Y.jsx)(`p`,{className:`page-sub`,children:a(`integrations.rollback.empty`)}):(0,Y.jsx)(WC,{rows:w,onRestore:f,onDelete:m}),d&&(0,Y.jsx)(DC,{apiBase:e,row:d,profileId:r,onClose:()=>f(null),onRestored:T,onReconcile:T}),p&&(0,Y.jsx)(EC,{copy:{titleKey:`integrations.dialog.deleteEntry.title`,changesKey:`integrations.dialog.deleteEntry.changes`,breakageKey:`integrations.dialog.deleteEntry.breakage`,undoKey:`integrations.dialog.deleteEntry.undo`,confirmKey:`integrations.dialog.deleteEntry.confirm`,vars:{path:p.configPath}},onClose:()=>m(null),onConfirm:async()=>{try{await Ef(e,p.opId,void 0,r)}catch(e){if(gf(e)){m(null),await x.refresh();return}throw Error(Xf(a,e),{cause:e})}m(null),await x.refresh()}}),h&&(0,Y.jsx)(EC,{copy:$C(C.reason,C.configPath),onClose:()=>g(!1),onConfirm:async()=>{await D(),g(!1)}})]})}function rw(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function iw(){throw new hf(502,{code:`invalid_aside_profile_response`})}async function aw(e,t){let n=await vf(await fetch(`${e}/api/client-integrations/aside/profiles`,{signal:t}));(!rw(n)||!Array.isArray(n.profiles)||typeof n.allEnabled!=`boolean`)&&iw();let r=n.profiles.map(e=>sf(e)??iw());new Set(r.map(e=>e.profileId)).size!==r.length&&iw();let i=r.filter(e=>e.enabled).length,a=r.filter(e=>e.state===`current`||e.state===`stale`).length;return(n.total!==r.length||n.enabledCount!==i||n.appliedCount!==a||n.allEnabled!==(r.length>0&&i===r.length))&&iw(),{profiles:r,allEnabled:n.allEnabled,enabledCount:i,appliedCount:a,total:r.length,...typeof n.error==`string`?{error:n.error}:{}}}async function ow(e,t){let n=await vf(await fetch(`${e}/api/client-integrations/aside/sync`,{method:`POST`,headers:{"Content-Type":`application/json`},body:`{}`,signal:t}));(!rw(n)||typeof n.ok!=`boolean`||!Array.isArray(n.results))&&iw(),n.results.some(e=>!rw(e)||e.client!==`aside`)&&iw();let r=cf(n.results)??iw();return n.ok!==r.every(e=>e.ok)&&iw(),{ok:n.ok,results:r}}function sw({apiBase:e,active:t=!0}){let n=Q(),[r,i]=(0,_.useState)(null),[a,o]=(0,_.useState)(null),s=(0,_.useRef)(!1),[c,l]=(0,_.useState)(null),[u,d]=(0,_.useState)(new Map),f=(0,_.useCallback)(t=>aw(e,t),[e]),p=jr(`aside-profiles:${e}`,[e],f,{enabled:t,isEmpty:e=>!e.error&&e.profiles.length===0,sessionCacheKey:`ocx.integrations.aside-profiles.v1:${e}`}),m=p.state.data,h=m?.profiles??[],g=p.state.showError||!!m?.error,v=a!==null||p.state.refreshing,y=e=>e.name||n(`integrations.aside.profile`,{id:e.profileId}),b=e=>d(t=>{let r=new Map(t);for(let t of e)t.ok?r.delete(t.profileId):r.set(t.profileId,Zf(n,t));return r}),x=(e,t)=>{e instanceof hf&&`results`in e.body&&e.body.results?.length?(b(e.body.results),l(n(`integrations.aside.partial`))):t===void 0?l(Xf(n,e)):d(r=>new Map(r).set(t,Xf(n,e)))},S=async(t,n)=>{if(!s.current){s.current=!0,o(n??`all`),l(null);try{let r=await wf(e,`aside`,t,void 0,void 0,n);b(r.results??(n===void 0?h.map(e=>e.profileId):[n]).map(e=>({profileId:e,ok:!0})))}catch(e){x(e,n)}finally{p.refresh(),s.current=!1,o(null)}}},C=async()=>{if(!s.current){s.current=!0,o(`sync`),l(null);try{let t=await ow(e);b(t.results),t.ok||l(n(`integrations.aside.partial`))}catch(e){x(e)}finally{p.refresh(),s.current=!1,o(null)}}};return r?(0,Y.jsxs)(`section`,{className:`integration-client-page`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,autoFocus:!0,onClick:()=>{i(null),p.refresh()},children:n(`integrations.aside.back`)}),u.has(r.profileId)&&(0,Y.jsx)($,{tone:`err`,children:(0,Y.jsx)(`span`,{className:`aside-profile-failure`,children:u.get(r.profileId)})}),(0,Y.jsx)(nw,{apiBase:e,client:`aside`,active:t,profileId:r.profileId,profileLabel:y(r)},r.profileId)]}):(0,Y.jsxs)(`section`,{className:`integration-client-page`,"aria-busy":v,children:[(0,Y.jsxs)(`div`,{className:`integration-client-head`,children:[(0,Y.jsx)(Ab,{src:kb(`aside`),label:n(`integrations.tab.aside`),size:24}),(0,Y.jsx)(`h3`,{children:n(`integrations.aside.profilesTitle`)})]}),(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`integrations.aside.profilesHint`)}),(0,Y.jsxs)(`div`,{className:`aside-profile-toolbar`,children:[(0,Y.jsx)(Dt,{on:m?.allEnabled??!1,mixed:!!(m&&m.enabledCount>0&&m.enabledCount<m.total),onClick:()=>void S(!m?.allEnabled),disabled:v||g||h.length===0,label:n(`integrations.aside.all`),showLabel:!0}),(0,Y.jsx)(`span`,{className:`text-caption muted`,children:n(`integrations.aside.applied`,{count:m?.appliedCount??0,total:m?.total??0})}),(0,Y.jsx)(`button`,{type:`button`,className:`btn`,disabled:v||g||!m?.enabledCount,onClick:()=>void C(),children:n(`integrations.aside.syncNow`)})]}),c&&(0,Y.jsx)($,{tone:`err`,children:(0,Y.jsx)(`span`,{className:`aside-profile-failure`,children:c})}),[...u].filter(([e])=>!h.some(t=>t.profileId===e)).map(([e,t])=>(0,Y.jsx)($,{tone:`err`,children:(0,Y.jsxs)(`span`,{className:`aside-profile-failure`,children:[n(`integrations.aside.profile`,{id:e}),`: `,t]})},e)),g&&(0,Y.jsxs)($,{tone:`err`,children:[(0,Y.jsx)(`span`,{children:n(`integrations.aside.loadError`)}),m?.error&&(0,Y.jsx)(`span`,{className:`text-caption`,children:m.error}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>p.refresh(),disabled:v,children:n(`common.retry`)})]}),p.state.showSkeleton&&(0,Y.jsx)(ep,{label:n(`common.loading`),rows:3}),!p.state.showSkeleton&&!g&&m&&h.length===0&&(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`integrations.aside.empty`)}),h.length>0&&(0,Y.jsx)(`div`,{className:`aside-profile-list`,children:h.map(e=>{let t=y(e),r=e.state===`current`||e.state===`stale`,o=e.enabled!==r||e.enabled&&e.state===`stale`,s=(!e.installed||e.state===`unsafe`||e.state===`conflict`)&&!e.enabled;return(0,Y.jsxs)(`div`,{className:`aside-profile-row`,"aria-busy":a===e.profileId,children:[(0,Y.jsxs)(`div`,{className:`aside-profile-info`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost aside-profile-name`,"aria-label":n(`integrations.aside.details`,{name:t}),onClick:()=>i(e),disabled:v||g,children:t}),(0,Y.jsxs)(`div`,{className:`aside-profile-meta`,children:[(0,Y.jsx)(`code`,{children:e.profileId}),e.current&&(0,Y.jsx)(`span`,{className:`text-caption muted`,children:n(`integrations.aside.current`)})]}),o&&(0,Y.jsx)(`span`,{className:`text-caption muted`,children:n(`integrations.aside.pending`)}),e.error&&(0,Y.jsx)(`span`,{className:`text-caption muted`,children:e.error}),u.has(e.profileId)&&(0,Y.jsx)($,{tone:`err`,children:(0,Y.jsx)(`span`,{className:`aside-profile-failure`,children:u.get(e.profileId)})})]}),(0,Y.jsxs)(`div`,{className:`aside-profile-controls`,children:[(0,Y.jsx)(wC,{state:e.state,installed:e.installed,id:`aside-profile-state-${e.profileId}`}),o&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:v||g,"aria-label":n(`integrations.aside.retry`,{name:t}),onClick:()=>void S(e.enabled,e.profileId),children:n(`common.retry`)}),(0,Y.jsx)(Dt,{on:e.enabled,onClick:()=>void S(!e.enabled,e.profileId),disabled:v||g||s,label:n(`integrations.aside.toggle`,{name:t})})]})]},e.profileId)})})]})}var cw=[{id:`overview`,hash:`integrations`,labelKey:`integrations.tab.overview`},{id:`keys`,hash:`integrations/keys`,labelKey:`integrations.tab.keys`},{id:`codex`,hash:`integrations/codex`,labelKey:`integrations.tab.codex`},{id:`claude`,hash:`integrations/claude`,labelKey:`integrations.tab.claude`},{id:`grok`,hash:`integrations/grok`,labelKey:`integrations.tab.grok`},{id:`cursor`,hash:`integrations/cursor`,labelKey:`integrations.tab.cursor`},{id:`opencode`,hash:`integrations/opencode`,labelKey:`integrations.tab.opencode`},{id:`pi`,hash:`integrations/pi`,labelKey:`integrations.tab.pi`},{id:`omp`,hash:`integrations/omp`,labelKey:`integrations.tab.omp`},{id:`hermes`,hash:`integrations/hermes`,labelKey:`integrations.tab.hermes`},{id:`openclaw`,hash:`integrations/openclaw`,labelKey:`integrations.tab.openclaw`},{id:`kimi`,hash:`integrations/kimi`,labelKey:`integrations.tab.kimi`},{id:`gajae`,hash:`integrations/gajae`,labelKey:`integrations.tab.gajae`},{id:`dsh`,hash:`integrations/dsh`,labelKey:`integrations.tab.dsh`},{id:`mcode`,hash:`integrations/mcode`,labelKey:`integrations.tab.mcode`},{id:`zcode`,hash:`integrations/zcode`,labelKey:`integrations.tab.zcode`},{id:`prime`,hash:`integrations/prime`,labelKey:`integrations.tab.prime`},{id:`aside`,hash:`integrations/aside`,labelKey:`integrations.tab.aside`},{id:`raycast`,hash:`integrations/raycast`,labelKey:`integrations.tab.raycast`},{id:`omo`,hash:`integrations/omo`,labelKey:`integrations.tab.omo`},{id:`cline`,hash:`integrations/cline`,labelKey:`integrations.tab.cline`}],lw=new Set([`opencode`,`pi`,`omp`,`hermes`,`openclaw`,`kimi`,`gajae`,`dsh`,`mcode`,`zcode`,`prime`,`aside`,`raycast`,`omo`,`cline`]);function uw(e=window.location.hash){let t=pt(e);return t===`integrations/claude/desktop`?`claude`:cw.find(e=>e.hash===t)?.id??`overview`}function dw(e){return`integrations-tab-${e}`}function fw(e){return`integrations-panel-${e}`}function pw(e){return e===`overview`||e===`keys`?null:Eb[e]??null}function mw({apiBase:e,machineApiBase:t=e,connected:n=!1}){let r=Q(),[i,a]=(0,_.useState)(uw),[o,s]=(0,_.useState)(()=>new Set([uw()])),c=(0,_.useRef)(null),[l,u]=(0,_.useState)([]),[d,f]=(0,_.useState)(!1);c.current===null&&(c.current=new Map),(0,_.useEffect)(()=>{if(!n)return;let e=new AbortController;return fetch(`${t}/api/machine/clients`,{signal:e.signal}).then(e=>e.ok?e.json():null).then(t=>{!e.signal.aborted&&Array.isArray(t?.selectedClients)&&u(t.selectedClients.filter(e=>typeof e==`string`))}).catch(()=>{}),()=>e.abort()},[n,t]);let p=async()=>{f(!0);try{await fetch(`${t}/api/machine/sync`,{method:`POST`,headers:{"Content-Type":`application/json`},body:`{}`})}finally{f(!1)}},m=e=>{a(e),s(t=>t.has(e)?t:new Set([...t,e]))};(0,_.useEffect)(()=>{let e=()=>m(uw());return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[]);let h=(e,t)=>{let n=cw.find(t=>t.id===e);n&&(ht(n.hash),m(e),t&&window.requestAnimationFrame(()=>{c.current.get(e)?.focus({preventScroll:!0})}))},g=e=>{let t=cw.findIndex(e=>e.id===i),n=null;e.key===`ArrowLeft`?n=(t-1+cw.length)%cw.length:e.key===`ArrowRight`?n=(t+1)%cw.length:e.key===`Home`?n=0:e.key===`End`&&(n=cw.length-1),n!==null&&(e.preventDefault(),h(cw[n].id,!0))};return(0,Y.jsxs)(`section`,{className:`integrations-page`,children:[(0,Y.jsx)(`div`,{className:`page-head`,children:(0,Y.jsx)(`h2`,{children:r(`nav.integrations`)})}),(0,Y.jsx)(`p`,{className:`page-sub`,children:r(`integrations.subtitle`)}),n&&(0,Y.jsxs)(`section`,{className:`notice`,"aria-label":r(`connection.clients.title`),children:[(0,Y.jsx)(`strong`,{children:r(`connection.clients.title`)}),(0,Y.jsx)(`span`,{children:l.length>0?l.join(`, `):r(`connection.clients.none`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:d,onClick:()=>void p(),children:r(d?`connection.clients.syncing`:`connection.clients.sync`)})]}),(0,Y.jsx)(`div`,{className:`page-tabs`,role:`tablist`,"aria-label":r(`integrations.tabsLabel`),children:cw.map(e=>(0,Y.jsxs)(`button`,{ref:t=>{t?c.current.set(e.id,t):c.current.delete(e.id)},type:`button`,role:`tab`,id:dw(e.id),"aria-selected":i===e.id,"aria-controls":fw(e.id),tabIndex:i===e.id?0:-1,className:`page-tab${i===e.id?` page-tab--active`:``}`,onClick:()=>h(e.id,!0),onKeyDown:g,children:[pw(e.id)&&(0,Y.jsx)(Ab,{src:pw(e.id),label:r(e.labelKey),size:14}),r(e.labelKey)]},e.id))}),cw.map(t=>{if(!o.has(t.id))return null;let n=i===t.id;return(0,Y.jsxs)(`div`,{role:`tabpanel`,id:fw(t.id),"aria-labelledby":dw(t.id),hidden:!n,children:[t.id===`overview`&&(0,Y.jsx)(XC,{apiBase:e,active:n}),t.id===`keys`&&(0,Y.jsx)(xS,{apiBase:e,active:n}),t.id===`codex`&&(0,Y.jsxs)(`section`,{className:`integration-native-page`,"aria-labelledby":`codex-integration-title`,children:[(0,Y.jsx)(`h3`,{id:`codex-integration-title`,children:r(`integrations.codex.title`)}),(0,Y.jsx)(`p`,{children:r(`integrations.codex.body`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>ht(`startup`),children:r(`integrations.codex.openService`)})]}),t.id===`claude`&&(0,Y.jsx)(dC,{apiBase:e,active:n}),t.id===`grok`&&(0,Y.jsx)(_C,{apiBase:e,active:n}),t.id===`cursor`&&(0,Y.jsx)(xC,{apiBase:e,active:n}),lw.has(t.id)&&(t.id===`aside`?(0,Y.jsx)(sw,{apiBase:e,active:n}):(0,Y.jsx)(nw,{apiBase:e,client:t.id,active:n}))]},t.id)})]})}function hw(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.supported==`boolean`&&typeof t.installed==`boolean`&&typeof t.running==`boolean`&&typeof t.stale==`boolean`&&typeof t.summary==`string`}var gw={native:`startup.status.native`,protected:`startup.status.protected`,"at-risk":`startup.status.atRisk`},_w={native:`startup.summary.native`,protected:`startup.summary.protected`,"at-risk":`startup.summary.atRisk`},vw={service:`startup.protection.service`,shim:`startup.protection.shim`,none:`startup.protection.none`};function yw({ok:e,yes:t,no:n}){return(0,Y.jsx)(`span`,{className:`badge ${e?`badge-green`:`badge-amber`}`,children:e?t:n})}function bw({failed:e,data:t}){let{t:n}=ut(),r=e?`startup-hero--risk`:t.status===`protected`?`startup-hero--safe`:t.status===`at-risk`?`startup-hero--risk`:`startup-hero--native`,i=e||t.status===`at-risk`?_e:ce,a=t.routingKind===`opencodex-local`?`startup.routing.proxy`:t.routingKind===`custom-local`?`startup.routing.customLocal`:t.routingKind===`custom-remote`?`startup.routing.customRemote`:t.routingKind===`unknown`?`startup.routing.unknown`:`startup.routing.native`;return(0,Y.jsx)(Y.Fragment,{children:(0,Y.jsxs)(`section`,{className:`panel startup-hero ${r}`,"aria-live":`polite`,children:[(0,Y.jsx)(`div`,{className:`startup-hero-icon`,children:(0,Y.jsx)(i,{})}),(0,Y.jsxs)(`div`,{className:`startup-hero-copy`,children:[(0,Y.jsx)(`span`,{className:`badge ${e||t.status===`at-risk`?`badge-amber`:`badge-green`}`,children:n(e?`startup.status.atRisk`:gw[t.status])}),(0,Y.jsx)(`h3`,{children:n(e?`startup.error`:_w[t.status])}),(0,Y.jsx)(`p`,{children:e?n(`startup.staleData`):t.status===`at-risk`?n(Mr(t)):n(`startup.safeDetail`)}),(0,Y.jsxs)(`p`,{className:`muted startup-state-line`,children:[n(a),` · `,n(vw[t.protection]),` · `,n(t.autostartEnabled?`startup.enabled`:`startup.disabled`)]}),(0,Y.jsx)(`p`,{className:`muted text-label`,children:n(`startup.subtitle`)})]})]})})}function xw({data:e,failed:t,loading:n=!1,installBusy:r,installResult:i,onInstall:a}){let{t:o}=ut(),s=e.serviceSupported&&e.serviceInstalled&&e.serviceStale&&!e.serviceConflict,c=e.shimInstalled&&!e.shimHealthy,l=r!==null||t||n;return(0,Y.jsxs)(`section`,{className:`panel startup-details`,children:[(0,Y.jsxs)(`div`,{className:`panel-head`,children:[(0,Y.jsx)(`h3`,{className:`panel-title`,children:o(`startup.details`)}),(0,Y.jsx)(`span`,{className:`muted mono`,children:e.platform})]}),(0,Y.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:o(`startup.service`)}),(0,Y.jsx)(`span`,{children:o(`startup.serviceHint`)})]}),(0,Y.jsxs)(`div`,{className:`startup-detail-actions`,children:[(0,Y.jsx)(yw,{ok:e.serviceViable,yes:o(`startup.viable`),no:o(e.serviceConflict?`startup.conflict`:e.serviceStale?`startup.stale`:e.serviceInstalled?`startup.unhealthy`:e.serviceSupported?`startup.notInstalled`:`startup.unsupported`)}),e.serviceSupported&&!e.serviceInstalled&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${o(`startup.service`)} - ${o(`startup.install`)}`,disabled:l,onClick:()=>a(`install-service`),children:o(r===`install-service`?`startup.installing`:`startup.install`)}),s&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${o(`startup.service`)} - ${o(`startup.repair`)}`,disabled:l,onClick:()=>a(`install-service`,{repair:!0}),children:o(r===`install-service`?`startup.repairing`:`startup.repair`)})]})]}),(0,Y.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:o(`startup.shim`)}),(0,Y.jsx)(`span`,{children:o(`startup.shimHint`)})]}),(0,Y.jsxs)(`div`,{className:`startup-detail-actions`,children:[(0,Y.jsx)(yw,{ok:e.shimHealthy&&e.autostartEnabled,yes:o(e.shimCoverage===`cli-only`?`startup.cliOnly`:`startup.healthy`),no:o(e.shimInstalled?e.shimHealthy&&!e.autostartEnabled?`startup.installedDisabled`:`startup.stale`:`startup.notInstalled`)}),!e.shimInstalled&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${o(`startup.shim`)} - ${o(`startup.install`)}`,disabled:l,onClick:()=>a(`install-shim`),children:o(r===`install-shim`?`startup.installing`:`startup.install`)}),c&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary btn-sm`,"aria-label":`${o(`startup.shim`)} - ${o(`startup.repair`)}`,disabled:l,onClick:()=>a(`install-shim`,{repair:!0}),children:o(r===`install-shim`?`startup.repairing`:`startup.repair`)})]})]}),i&&(0,Y.jsx)(`div`,{className:`notice ${i.kind===`success`?`notice-ok`:`notice-warn`} startup-action-notice`,role:`status`,"aria-live":`polite`,children:i.kind===`success`?i.action===`install-service`?o(i.repair?`startup.serviceRepaired`:`startup.serviceInstalled`):o(i.repair?`startup.shimRepaired`:`startup.shimInstalled`):`${o(`startup.installFailed`)} ${i.detail??``}`})]})}function Sw({tray:e,trayLoading:t,trayError:n,trayBusy:r,onTrayAction:i}){let{t:a}=ut();return(0,Y.jsxs)(`section`,{className:`panel startup-actions`,children:[(0,Y.jsxs)(`div`,{className:`panel-head`,children:[(0,Y.jsx)(`h3`,{className:`panel-title`,children:a(`startup.tray.title`)}),(0,Y.jsx)(Te,{})]}),(0,Y.jsx)(`p`,{className:`muted`,children:a(`startup.tray.hint`)}),(0,Y.jsxs)(`div`,{className:`startup-detail-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:a(`startup.tray.login`)}),(0,Y.jsx)(`span`,{children:a(`startup.tray.notProtection`)})]}),t||n||!e?(0,Y.jsx)(`span`,{className:`badge badge-amber`,children:a(t?`startup.tray.loading`:`startup.tray.unavailable`)}):(0,Y.jsx)(yw,{ok:e.running&&!e.stale,yes:a(`startup.tray.running`),no:a(e.stale?`startup.tray.stale`:e.installed?`startup.tray.stopped`:`startup.tray.notInstalled`)})]}),(0,Y.jsxs)(`div`,{className:`startup-tray-buttons`,children:[!t&&!n&&e&&!e.installed&&!e.stale&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary`,disabled:r,onClick:()=>i(`install`),children:a(`startup.tray.install`)}),!t&&!n&&e?.installed&&!e.stale&&!e.running&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary`,disabled:r,onClick:()=>i(`start`),children:a(`startup.tray.start`)}),!t&&!n&&e?.running&&!e.stale&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,disabled:r,onClick:()=>i(`stop`),children:a(`startup.tray.stop`)}),!t&&!n&&e&&(e.installed||e.stale)&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-danger`,disabled:r,onClick:()=>{window.confirm(a(`startup.tray.uninstall`))&&i(`uninstall`)},children:a(`startup.tray.uninstall`)})]}),(n||e?.stale)&&(0,Y.jsx)(`div`,{className:`notice notice-warn startup-tray-error`,role:`alert`,children:a(`startup.tray.error`)})]})}function Cw({data:e,copied:t,onCopy:n}){let{t:r}=ut(),i=e.serviceInstalled&&!e.serviceConflict?e.commands.repairService:e.commands.installService;return(0,Y.jsxs)(`section`,{className:`panel startup-actions`,children:[(0,Y.jsxs)(`div`,{className:`panel-head`,children:[(0,Y.jsx)(`h3`,{className:`panel-title`,children:r(`startup.recovery`)}),(0,Y.jsx)(ae,{})]}),(0,Y.jsxs)(`details`,{className:`startup-recovery-details`,open:e.status!==`protected`,children:[(0,Y.jsx)(`summary`,{className:`muted`,children:r(`startup.recoveryHint`)}),(0,Y.jsxs)(`div`,{className:`startup-command-list`,children:[e.serviceSupported&&(0,Y.jsxs)(`div`,{className:`startup-command-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:r(`startup.command.service`)}),(0,Y.jsx)(`code`,{children:i})]}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(i),children:r(t===i?`startup.copied`:`startup.copy`)})]}),(0,Y.jsxs)(`div`,{className:`startup-command-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:r(`startup.command.shim`)}),(0,Y.jsx)(`code`,{children:e.commands.installShim})]}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(e.commands.installShim),children:t===e.commands.installShim?r(`startup.copied`):r(`startup.copy`)})]}),(0,Y.jsxs)(`div`,{className:`startup-command-row`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`strong`,{children:r(`startup.command.native`)}),(0,Y.jsx)(`code`,{children:e.commands.restoreNative})]}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>n(e.commands.restoreNative),children:t===e.commands.restoreNative?r(`startup.copied`):r(`startup.copy`)})]})]}),e.status===`at-risk`&&(0,Y.jsxs)(`div`,{className:`notice notice-warn startup-action-notice`,role:`alert`,children:[(0,Y.jsx)(Te,{}),` `,r(`startup.recommended`,{cmd:e.recommendedCommand??e.commands.installService})]})]})]})}var ww=`ocx.startup.page.v1:`;function Tw(e,t){let n=t===`win32`?`; `:` && `;return e.join(n)}function Ew(e,t,n){if(!e)return{warning:null,fix:null};let r=!!e.catalogClamp?.active,i=!!e.newerAvailable,a=(r?e.catalogClamp?.runtimeVersion:e.version)??e.version??`unknown`,o=(e.catalogClamp?.removedEfforts??[]).join(`, `),s=Tw([`ocx doctor --fix-codex-runtime`,`ocx sync`],n);return r?{warning:o?t(`startup.codexRuntime.clampHiddenWithEfforts`,{version:a,efforts:o}):t(`startup.codexRuntime.clampHidden`,{version:a}),fix:i?s:`ocx sync`}:i?{warning:t(`startup.codexRuntime.olderBinary`,{version:a}),fix:s}:{warning:null,fix:null}}function Dw({apiBase:e,machineApiBase:t=e,connected:n=!1}){let{t:r}=ut(),i=`${ww}${e}`,a=(0,_.useMemo)(()=>Tr(i),[i]),o=`startup-page:${e}`,[s,c]=(0,_.useState)(null),[l,u]=(0,_.useState)(()=>a?.tray??null),[d,f]=(0,_.useState)(()=>!a?.data),[p,m]=(0,_.useState)(!1),[h,g]=(0,_.useState)(!1),[v,y]=(0,_.useState)(null),[b,x]=(0,_.useState)(null),[S,C]=(0,_.useState)(()=>a?.warning??null),[w,T]=(0,_.useState)(()=>a?.fix??null),[E,D]=(0,_.useState)(()=>!a?.data),O=(0,_.useRef)(!!a?.data),k=(0,_.useRef)(0),[A,j]=(0,_.useState)(null),[M,N]=(0,_.useState)(!1);(0,_.useEffect)(()=>{if(!n)return;let e=new AbortController;return fetch(`${t}/api/machine/shim`,{signal:e.signal}).then(e=>e.ok?e.json():null).then(t=>{e.signal.aborted||j(t)}).catch(()=>{e.signal.aborted||j(null)}),()=>e.abort()},[n,t]);let P=async e=>{N(!0);try{let n=await fetch(`${t}/api/machine/shim`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:e})});if(n.ok){let e=await n.json();j(e.shim??null)}}finally{N(!1)}};(0,_.useEffect)(()=>()=>{k.current+=1},[e]);let F=(0,_.useCallback)(async t=>{let n=++k.current,a=O.current;a||(f(!0),D(!0));try{let a=fetch(`${e}/api/settings`,{signal:t}).then(async e=>e.ok?await e.json():null).catch(()=>null),o=await fetch(`${e}/api/startup-health`,{signal:t});if(!o.ok)throw Error(`fetch failed`);let s=await o.json();x(e=>e?.kind===`error`&&(s.status===`native`&&e.forLocalRouting===!0||(e.action===`install-service`?s.serviceViable:s.shimInstalled&&s.shimHealthy))?null:e),O.current=!0;let c=Tr(i);kr(i,{data:s,warning:c?.warning??null,fix:c?.fix??null,tray:c?.tray??null});let l=s.platform===`win32`?fetch(`${e}/api/windows-tray`,{signal:t}).then(async e=>{if(!e.ok)throw Error(`tray status failed`);let t=await e.json();if(!hw(t))throw Error(`invalid tray status`);return{tray:t,error:!1}}).catch(()=>({tray:null,error:!0})):Promise.resolve({tray:null,error:!1});return Promise.all([a,l]).then(([e,a])=>{if(t.aborted||n!==k.current)return;let o=s.platform===`win32`?a.tray:null;if(s.platform===`win32`?(u(o),g(a.error)):(u(null),g(!1)),f(!1),D(!1),e){let t=Ew(e.codexRuntime,r,s.platform);C(t.warning),T(t.fix),kr(i,{data:s,warning:t.warning,fix:t.fix,tray:o});return}let c=Tr(i);kr(i,{data:s,warning:c?.warning??null,fix:c?.fix??null,tray:o})}),s}catch(e){throw t.aborted?e:(a||(u(null),g(!0),C(null),T(null)),D(!1),f(!1),e)}},[e,i,r]),I=jr(o,[e],F,{isEmpty:()=>!1,initialData:a?.data??void 0}),L=I.state,R=I.refresh,z=L.data??a?.data??null,B=L.refreshing,V=!!z?.diagnosticStale||L.showError;(0,_.useEffect)(()=>{if(!z?.diagnosticStale)return;let e=window.setTimeout(R,2e3);return()=>window.clearTimeout(e)},[z,R]);let H=async e=>{try{await navigator.clipboard.writeText(e),c(e),window.setTimeout(()=>c(t=>t===e?null:t),1600)}catch{c(null)}},U=async t=>{m(!0),g(!1);try{let n=await fetch(`${e}/api/windows-tray`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:t})});if(!n.ok)throw Error(`tray action failed`);let r=await n.json();if(!hw(r.status))throw Error(`invalid tray action status`);u(r.status),g(!1)}catch{u(null),g(!0)}finally{m(!1)}},W=async(t,n)=>{y(t),x(null);try{let r=await fetch(`${e}/api/startup-action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({action:t,repair:n?.repair===!0})});if(!r.ok){let e=await r.json().catch(()=>null);throw Error(typeof e?.error==`string`?e.error:`installation failed`)}x({kind:`success`,action:t,repair:n?.repair===!0}),R()}catch(e){x({kind:`error`,action:t,repair:n?.repair===!0,detail:e instanceof Error?e.message:String(e),forLocalRouting:z?.localRoutingDependency===!0})}finally{y(null)}};return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`page-head`,children:[(0,Y.jsx)(`h2`,{children:r(`startup.title`)}),(0,Y.jsx)(`div`,{className:`startup-page-head-actions`,children:(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>R(),disabled:B,children:[(0,Y.jsx)(de,{}),` `,r(`startup.refresh`)]})})]}),n&&(0,Y.jsxs)(`section`,{className:`notice startup-page-notice`,"aria-label":r(`connection.machine.title`),children:[(0,Y.jsx)(`strong`,{children:r(`connection.machine.title`)}),(0,Y.jsx)(`span`,{children:A?.healthy?r(`connection.machine.shimHealthy`):r(`connection.machine.shimNeedsAttention`)}),(0,Y.jsxs)(`div`,{className:`startup-page-head-actions`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:M,onClick:()=>void P(`repair`),children:r(`connection.machine.repairShim`)}),A?.installed&&(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,disabled:M,onClick:()=>void P(`uninstall`),children:r(`connection.machine.removeShim`)})]})]}),L.showSkeleton&&!z?(0,Y.jsx)(ep,{label:r(`startup.loading`),rows:5}):L.kind===`failed-cold`?(0,Y.jsxs)(`div`,{className:`startup-page-notice`,children:[(0,Y.jsx)($,{tone:`err`,children:L.error instanceof Error?L.error.message:r(`startup.error`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>R(),children:r(`common.retry`)})]}):z?(0,Y.jsxs)(Y.Fragment,{children:[L.showError&&(0,Y.jsx)($,{tone:`err`,children:r(`startup.error`)}),V&&(0,Y.jsx)(`div`,{className:`notice notice-warn startup-page-notice`,role:`alert`,children:r(`startup.staleData`)}),(E||S)&&(0,Y.jsx)(`div`,{className:`startup-runtime-notice-slot${E&&!S?` startup-runtime-notice-slot--pending`:``}`,"aria-hidden":E&&!S?!0:void 0,children:S&&(0,Y.jsxs)(`div`,{className:`notice notice-warn startup-page-notice startup-runtime-notice`,role:`status`,children:[(0,Y.jsx)(`p`,{className:`startup-runtime-notice__text`,children:S}),w&&(0,Y.jsxs)(`div`,{className:`startup-runtime-notice__fix`,children:[(0,Y.jsx)(`code`,{children:w}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void H(w),children:r(s===w?`startup.copied`:`startup.copy`)})]})]})}),(0,Y.jsx)(bw,{failed:V,data:z}),(0,Y.jsx)(xw,{data:z,failed:V,loading:B,installBusy:v,installResult:b,onInstall:(e,t)=>{W(e,t)}}),z.platform===`win32`&&(0,Y.jsx)(Sw,{tray:l,trayLoading:d,trayError:h,trayBusy:p,onTrayAction:e=>{U(e)}}),(0,Y.jsx)(Cw,{data:z,copied:s,onCopy:e=>{H(e)}})]}):null]})}function Ow(e){return`'${e.replace(/'/g,`'"'"'`)}'`}function kw(e){return`'${e.replace(/'/g,`''`)}'`}function Aw(e,t){return{posix:`printf '%s\\n' ${Ow(e)} | ocx remote-workspace pair ${Ow(t)} --pairing-code-stdin --root "$PWD" && ocx remote-workspace agent`,powershell:`$pairingCode = ${kw(e)}; $pairingCode | ocx remote-workspace pair ${kw(t)} --pairing-code-stdin --root (Get-Location).Path; if ($LASTEXITCODE -eq 0) { ocx remote-workspace agent }`}}var jw=[`codex`,`claude`,`pi`],Mw={codex:`Codex`,claude:`Claude Code`,pi:`Pi`},Nw={starting:`remote.status.starting`,ready:`remote.status.ready`,running:`remote.status.running`,waiting_for_executor:`remote.status.waiting`,failed:`remote.status.failed`,stopped:`remote.status.stopped`},Pw={status:`remote.event.status`,tool:`remote.event.tool`,error:`remote.event.error`};function Fw(e){return e===`codex`||e===`claude`||e===`pi`}function Iw(e){return e===`read-only`||e===`workspace`}async function Lw(e){try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}function Rw({apiBase:e,hubOrigin:t}){let n=Q(),r=K(`remote-workspace:${e}`,[e],async t=>await It(await fetch(`${e}/api/remote-workspace`,{signal:t,cache:`no-store`}),n(`remote.loadFailed`)),{pollMs:3e3,deadlineMs:1e4}),i=r.data,[a,o]=(0,_.useState)(``),[s,c]=(0,_.useState)(``),[l,u]=(0,_.useState)(`codex`),[d,f]=(0,_.useState)(`read-only`),[p,m]=(0,_.useState)(``),[h,g]=(0,_.useState)(null),[v,y]=(0,_.useState)(null),[b,x]=(0,_.useState)({}),[S,C]=(0,_.useState)(null),[w,T]=(0,_.useState)(!1),[E,D]=(0,_.useState)(!1),O=(0,_.useRef)(null),[k,A]=(0,_.useState)(null),[j,M]=(0,_.useState)(null),N=i?.devices??[],P=N.find(e=>e.id===a)??N.find(e=>e.online)??N[0]??null,F=P?.roots.find(e=>e.id===s)??P?.roots[0]??null,I=d===`workspace`&&(P?.capabilities.includes(`workspace.exec`)??!1),L=P&&!P.capabilities.includes(`workspace.exec`)?n(`remote.access.workspaceFilesOnly`):n(`remote.access.workspace`),R=jw.filter(e=>i?.runtimes?.[e]?.available),z=R.includes(l)?l:R[0]??l,B=i?.sessions??[],V=[...B].reverse().find(e=>e.status!==`stopped`),H=(B.find(e=>e.id===p)??(h?.id===p?h:null)??V??h)?.id,U=B.find(e=>e.id===H),W=h?.id===H?h:null,G=(W&&(!U||(W.events.at(-1)?.sequence??0)>(U.events.at(-1)?.sequence??0))?W:U)??V??h,q=b[G?.id??``]??``,J=e=>{let t=G?.id;t&&x(n=>({...n,[t]:typeof e==`function`?e(n[t]??``):e}))},X=!!(i&&!r.lastAttemptOk),ee=!!(G&&q.trim()&&S===null&&!w&&!E&&!X&&G.status!==`running`&&G.status!==`starting`&&G.status!==`stopped`&&(G.status!==`failed`||G.resumable!==!1)&&!(G.status===`waiting_for_executor`&&!N.find(e=>e.id===G.deviceId)?.online)),te=(0,_.useMemo)(()=>v?Aw(v.code,t):{posix:``,powershell:``},[v,t]),ne=async(t,n,r)=>{let i=await It(await fetch(`${e}${t}`,n),r);if(i===void 0)throw Error(r);return i},Z=async()=>{C(`pair`),A(null);try{let e=await ne(`/api/remote-workspace/pairing`,{method:`POST`},n(`remote.requestFailed`));y(e),M(null)}catch(e){A({tone:`err`,text:e instanceof Error?e.message:n(`remote.requestFailed`)})}finally{C(null)}},re=async()=>{if(!(!P||!F)){C(`session`),A(null);try{let e=await ne(`/api/remote-workspace/sessions`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({profile:z,deviceId:P.id,rootId:F.id,accessMode:d})},n(`remote.requestFailed`));g(e),m(e.id),A({tone:`ok`,text:n(`remote.sessionStarted`)}),r.refresh()}catch(e){A({tone:`err`,text:e instanceof Error?e.message:n(`remote.requestFailed`)})}finally{C(null)}}},ie=async()=>{if(!G||!ee)return;let t=G,i=q;T(!0),A(null);let a;try{let o=await fetch(`${e}/api/remote-workspace/sessions/${t.id}/prompt`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({prompt:i})});a=o.status;let s=await It(o,n(`remote.requestFailed`));if(!s)throw Error(n(`remote.requestFailed`));J(e=>e===i?``:e),O.current!==t.id&&g(s),r.refresh()}catch(e){O.current!==t.id&&(A({tone:`err`,text:a!==void 0&&a>=400&&a<500?e instanceof Error?e.message:n(`remote.requestFailed`):n(`remote.submissionUnknown`)}),r.refresh())}finally{T(!1)}},oe=async()=>{if(!G||E)return;let e=G;D(!0);try{await ne(`/api/remote-workspace/sessions/${e.id}`,{method:`DELETE`},n(`remote.requestFailed`)),O.current=e.id,g({...e,status:`stopped`}),r.refresh()}catch(e){A({tone:`err`,text:e instanceof Error?e.message:n(`remote.requestFailed`)})}finally{D(!1)}},se=async e=>{if(confirm(n(`remote.revokeConfirm`,{name:e.name}))){C(`revoke`);try{await ne(`/api/remote-workspace/devices/${e.id}`,{method:`DELETE`},n(`remote.requestFailed`)),a===e.id&&o(``),r.refresh()}catch(e){A({tone:`err`,text:e instanceof Error?e.message:n(`remote.requestFailed`)})}finally{C(null)}}},ce=async(e,t)=>{M(await Lw(t)?e:null)};return r.loading&&!i?(0,Y.jsx)(`div`,{className:`alert`,children:n(`remote.loading`)}):r.error&&!i?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)($,{tone:`err`,children:n(`remote.loadFailed`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>void r.refresh(),children:n(`common.retry`)})]}):i?.available===!1?(0,Y.jsx)($,{tone:`err`,children:n(`remote.hubRequired`)}):(0,Y.jsxs)(`section`,{className:`remote-workspace-page`,children:[(0,Y.jsxs)(`div`,{className:`page-head`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{children:n(`remote.title`)}),(0,Y.jsx)(`p`,{className:`page-sub`,children:n(`remote.subtitle`)})]}),(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void r.refresh(),disabled:r.refreshing,children:[(0,Y.jsx)(de,{}),` `,n(`remote.refresh`)]})]}),X?(0,Y.jsx)($,{tone:`err`,children:n(`remote.loadFailed`)}):null,k?(0,Y.jsx)($,{tone:k.tone,children:k.text}):null,(0,Y.jsxs)(`div`,{className:`remote-workspace-grid`,children:[(0,Y.jsxs)(`div`,{className:`remote-workspace-column`,children:[(0,Y.jsxs)(`article`,{className:`panel panel-accent remote-pair-card`,children:[(0,Y.jsxs)(`div`,{className:`remote-panel-head`,children:[(0,Y.jsx)(`div`,{className:`remote-icon`,children:(0,Y.jsx)(je,{})}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h3`,{children:n(`remote.addComputer`)}),(0,Y.jsx)(`p`,{children:n(`remote.addComputerHint`)})]})]}),(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>void Z(),disabled:S!==null,children:[(0,Y.jsx)(ue,{}),` `,n(`remote.createPairing`)]}),v?(0,Y.jsxs)(`div`,{className:`remote-pairing-result`,children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.pairingCode`)}),(0,Y.jsx)(`div`,{className:`remote-pairing-code`,children:v.code}),(0,Y.jsx)(`div`,{className:`remote-expiry`,children:n(`remote.pairingExpires`,{time:new Date(v.expiresAt).toLocaleTimeString()})}),(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.pairingCommandPosix`)}),(0,Y.jsx)(`pre`,{children:(0,Y.jsx)(`code`,{children:te.posix})}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void ce(`posix`,te.posix),children:n(j===`posix`?`remote.copied`:`remote.copyCommand`)}),(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.pairingCommandWindows`)}),(0,Y.jsx)(`pre`,{children:(0,Y.jsx)(`code`,{children:te.powershell})}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost btn-sm`,onClick:()=>void ce(`powershell`,te.powershell),children:n(j===`powershell`?`remote.copied`:`remote.copyCommand`)})]}):null]}),(0,Y.jsxs)(`section`,{className:`panel remote-device-panel`,children:[(0,Y.jsxs)(`div`,{className:`remote-section-title`,children:[(0,Y.jsx)(`h3`,{children:n(`remote.devices`)}),(0,Y.jsx)(`span`,{children:N.length})]}),N.length===0?(0,Y.jsx)(`p`,{className:`remote-empty`,children:n(`remote.noDevices`)}):(0,Y.jsx)(`div`,{className:`remote-device-list`,children:N.map(e=>(0,Y.jsxs)(`div`,{className:`remote-device${P?.id===e.id?` selected`:``}`,children:[(0,Y.jsxs)(`button`,{type:`button`,className:`remote-device-main`,onClick:()=>{o(e.id),c(e.roots[0]?.id??``)},"aria-pressed":P?.id===e.id,children:[(0,Y.jsx)(`span`,{className:`remote-online-dot${e.online?` online`:``}`}),(0,Y.jsxs)(`span`,{className:`remote-device-copy`,children:[(0,Y.jsx)(`strong`,{children:e.name}),(0,Y.jsxs)(`small`,{children:[e.platform,` · `,e.online?n(`remote.online`):n(`remote.offline`),` · `,e.capabilities.includes(`workspace.exec`)?n(`remote.capability.full`):n(`remote.capability.files`)]})]})]}),(0,Y.jsx)(`button`,{type:`button`,className:`remote-revoke`,"aria-label":n(`remote.revoke`),disabled:S!==null||w||E,onClick:()=>void se(e),children:(0,Y.jsx)(me,{})})]},e.id))})]})]}),(0,Y.jsxs)(`div`,{className:`remote-workspace-column remote-session-column`,children:[(0,Y.jsxs)(`section`,{className:`panel remote-launch-panel`,children:[(0,Y.jsxs)(`div`,{className:`remote-section-title`,children:[(0,Y.jsx)(`h3`,{children:n(`remote.newSession`)}),(0,Y.jsx)(Pe,{})]}),(0,Y.jsxs)(`div`,{className:`remote-launch-fields`,children:[(0,Y.jsxs)(`label`,{children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.device`)}),(0,Y.jsx)(kt,{value:P?.id??``,options:N.map(e=>({value:e.id,label:e.name})),onChange:e=>{o(e),c(N.find(t=>t.id===e)?.roots[0]?.id??``)},label:n(`remote.device`),disabled:N.length===0})]}),(0,Y.jsxs)(`label`,{children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.folder`)}),(0,Y.jsx)(kt,{value:F?.id??``,options:(P?.roots??[]).map(e=>({value:e.id,label:e.label})),onChange:c,label:n(`remote.folder`),disabled:!P})]}),(0,Y.jsxs)(`label`,{children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.runtime`)}),(0,Y.jsx)(kt,{value:z,options:jw.map(e=>({value:e,label:i?.runtimes?.[e]?.available?Mw[e]:`${Mw[e]} · ${n(`remote.unavailable`)}`})),onChange:e=>{Fw(e)&&u(e)},label:n(`remote.runtime`)})]}),(0,Y.jsxs)(`label`,{children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.access`)}),(0,Y.jsx)(kt,{value:d,options:[{value:`read-only`,label:n(`remote.access.readOnly`)},{value:`workspace`,label:L}],onChange:e=>{Iw(e)&&f(e)},label:n(`remote.access`)})]})]}),P?(0,Y.jsxs)(`div`,{className:`remote-execution-map`,children:[(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(`strong`,{children:Mw[z]}),n(`remote.runsOnHub`)]}),(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(`strong`,{children:P.name}),n(d===`read-only`?`remote.runsReadOnly`:I?`remote.runsFilesCommands`:`remote.runsFilesOnly`)]})]}):null,d===`workspace`&&!I&&P?(0,Y.jsx)($,{tone:`err`,children:n(`remote.execUnavailable`)}):null,!i?.runtimes?.[z]?.available&&i?.runtimes?.[z]?.reason?(0,Y.jsx)(`p`,{className:`remote-runtime-reason`,children:i.runtimes[z].reason}):null,(0,Y.jsxs)(`button`,{type:`button`,className:`btn btn-primary remote-start`,onClick:()=>void re(),disabled:!P?.online||!F||!i?.runtimes?.[z]?.available||S!==null||w||E,children:[(0,Y.jsx)(ae,{}),` `,n(`remote.startSession`)]})]}),(0,Y.jsxs)(`section`,{className:`panel remote-console-panel`,children:[(0,Y.jsxs)(`div`,{className:`remote-section-title`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h3`,{children:n(`remote.sessions`)}),G?(0,Y.jsxs)(`small`,{children:[Mw[G.profile],` · `,G.deviceName,`/`,G.rootLabel,` · `,G.accessMode===`read-only`?n(`remote.access.readOnly`):G.capabilities.includes(`workspace.exec`)?n(`remote.access.workspace`):n(`remote.access.workspaceFilesOnly`)]}):null]}),G?(0,Y.jsx)(`span`,{className:`remote-status remote-status--${G.status}`,children:n(Nw[G.status])}):null]}),B.length>1?(0,Y.jsx)(kt,{value:G?.id??``,options:B.map(e=>({value:e.id,label:`${Mw[e.profile]} · ${e.deviceName}/${e.rootLabel}`})),onChange:m,label:n(`remote.sessions`)}):null,G?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`remote-events`,"aria-live":`polite`,"aria-label":n(`remote.events`),children:G.events.length===0?(0,Y.jsx)(`p`,{className:`remote-empty`,children:n(`remote.noEvents`)}):G.events.map(e=>(0,Y.jsxs)(`div`,{className:`remote-event remote-event--${e.type}`,children:[(0,Y.jsx)(`span`,{children:e.type===`assistant`?Mw[G.profile]:n(Pw[e.type])}),(0,Y.jsx)(`p`,{children:e.text})]},e.sequence))}),G.status===`failed`&&G.resumable===!1?(0,Y.jsx)($,{tone:`err`,children:n(`remote.notResumable`)}):null,(0,Y.jsxs)(`label`,{className:`remote-composer`,children:[(0,Y.jsx)(`span`,{className:`field-label`,children:n(`remote.prompt`)}),(0,Y.jsx)(`textarea`,{className:`input`,rows:4,value:q,onChange:e=>J(e.target.value),placeholder:n(`remote.promptPlaceholder`),disabled:G.status===`stopped`||G.status===`failed`&&G.resumable===!1,onKeyDown:e=>{(e.ctrlKey||e.metaKey)&&e.key===`Enter`&&(e.preventDefault(),ie())}})]}),(0,Y.jsxs)(`div`,{className:`remote-console-actions`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-primary`,onClick:()=>void ie(),disabled:!ee,children:n(`remote.send`)}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-danger`,onClick:()=>void oe(),disabled:E||G.status===`stopped`,children:n(`remote.stop`)})]})]}):(0,Y.jsx)(`p`,{className:`remote-empty remote-empty--console`,children:n(`remote.noSessions`)})]})]})]})]})}var zw=3e5,Bw=6e5,Vw=`https://github.com/lidge-jun/opencodex`;async function Hw(e,t){let n=await fetch(e,{signal:t});return n.ok?await n.json():null}function Uw({apiBase:e,onOpenUpdate:t}){let n=Q(),[r,i]=(0,_.useState)(!1),[a,o]=(0,_.useState)(null),s=K(`sidebar-star:${e}`,[e],t=>Hw(`${e}/api/github/star`,t),{pollMs:zw}),c=K(`sidebar-update-badge:${e}`,[e],t=>Hw(`${e}/api/update/badge`,t),{pollMs:Bw}),l=s.data?.state??null,u=a!==null&&a.basedOn===l?a.state:l??`not-starred`,d=s.data?.url??Vw,f=u===`starred`,p=c.data,m=p?.updateAvailable===!0,h=p?.latestVersion??null,g=()=>window.open(d,`_blank`,`noopener,noreferrer`),v=async()=>{if(!(f||r)){if(u===`unauthenticated`){g();return}i(!0);try{let t=await fetch(`${e}/api/github/star`,{method:`POST`}),n=t.ok?await t.json():null;if(n?.ok===!0){o({state:`starred`,basedOn:l});return}n?.state&&o({state:n.state,basedOn:l}),g()}catch{g()}finally{i(!1),s.refresh()}}},y=n(f?`sidebar.starred`:u===`unauthenticated`?`sidebar.starUnauthenticated`:`sidebar.star`),b=m&&h?n(`sidebar.updateAvailable`,{version:h}):n(`sidebar.checkUpdate`);return(0,Y.jsxs)(`div`,{className:`sidebar-github-row`,children:[(0,Y.jsxs)(`a`,{className:`sidebar-link sidebar-github-link`,href:d,target:`_blank`,rel:`noreferrer`,children:[(0,Y.jsx)(we,{}),` `,n(`common.github`)]}),(0,Y.jsxs)(`div`,{className:`sidebar-github-actions`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb${f?` sidebar-orb--starred`:``}`,onClick:()=>{v()},disabled:r||f,"aria-label":y,"aria-pressed":f,title:y,children:(0,Y.jsx)(Re,{"aria-hidden":`true`,...f?{fill:`currentColor`}:{}})}),(0,Y.jsxs)(`button`,{type:`button`,className:`sidebar-orb${m?` sidebar-orb--update`:``}`,onClick:t,"aria-label":b,title:b,children:[(0,Y.jsx)(Se,{"aria-hidden":`true`}),m&&(0,Y.jsx)(`span`,{className:`sidebar-orb-dot`,"aria-hidden":`true`})]})]})]})}var Ww=/^ocx_pair_[A-Za-z0-9_-]{43}$/,Gw=class extends Error{kind;constructor(e){super(`pairing_${e}`),this.kind=e,this.name=`PairingError`}};async function Kw(e,t,n,r){r?.throwIfAborted();let i=t.trim();if(!Ww.test(i))throw new Gw(`invalid-code`);let a=n??((e,t)=>window.fetch(e,t)),o;try{o=await a(e.bootstrapPath,{method:`POST`,signal:r,headers:{"Content-Type":`application/json`,Accept:`text/html`},body:JSON.stringify({grant:i})})}catch(e){throw r?.aborted?e:new Gw(`unreachable`)}if(!o.ok){try{await o.body?.cancel()}catch{}throw new Gw(o.status===401||o.status===403?`refused`:`request-failed`)}let s;try{s=await o.text()}catch(e){throw r?.aborted?e:new Gw(`invalid-response`)}if(r?.throwIfAborted(),!Ux(`shared`,s))throw new Gw(`invalid-response`);return!0}function qw({target:e,onConnected:t}){let n=Q(),[r,i]=(0,_.useState)(``),[a,o]=(0,_.useState)(!1),[s,c]=(0,_.useState)(null),l=(0,_.useRef)(null);(0,_.useEffect)(()=>()=>l.current?.abort(),[]);let u=_s(),d=`ocx gui pair --origin "${window.location.origin}"`,f=u.outcomeFor(d);return(0,Y.jsxs)(`section`,{className:`card connect-pairing`,"aria-labelledby":`connect-pairing-title`,children:[(0,Y.jsx)(`h2`,{id:`connect-pairing-title`,children:n(`connection.pairing.title`)}),(0,Y.jsxs)(`p`,{children:[n(`connection.pairing.hub`),`: `,(0,Y.jsx)(`code`,{children:e.serverOrigin})]}),(0,Y.jsx)(`p`,{children:n(`connection.pairing.getCode`)}),(0,Y.jsx)(`pre`,{style:{whiteSpace:`pre-wrap`,overflowWrap:`anywhere`},children:(0,Y.jsx)(`code`,{children:d})}),(0,Y.jsx)(`button`,{type:`button`,className:`btn btn-ghost`,onClick:()=>u.copy(d,d),children:n(f===`copied`?`startup.copied`:`startup.copy`)}),f===`unavailable`&&(0,Y.jsx)(`p`,{role:`status`,children:n(`prov.linkCopyUnavailable`)}),(0,Y.jsx)(`p`,{children:n(`connection.pairing.askOperator`)}),(0,Y.jsx)(`p`,{children:n(`connection.pairing.notApiKey`)}),(0,Y.jsxs)(`form`,{onSubmit:async n=>{if(n.preventDefault(),a)return;o(!0),c(null);let i=new AbortController;l.current=i;try{await Kw(e,r,void 0,i.signal),i.signal.aborted||t()}catch(e){i.signal.aborted||c(e instanceof Gw?e.kind:`unreachable`)}finally{i.signal.aborted||o(!1),l.current===i&&(l.current=null)}},className:`api-form-row`,children:[(0,Y.jsx)(`label`,{htmlFor:`connect-pairing-code`,className:`field-label`,children:n(`connection.pairing.code`)}),(0,Y.jsx)(`input`,{id:`connect-pairing-code`,name:`pairingCode`,value:r,onChange:e=>i(e.currentTarget.value),autoComplete:`off`,spellCheck:!1,disabled:a,className:`input mono`,"aria-invalid":!!s||void 0,"aria-describedby":s?`connect-pairing-error`:void 0}),(0,Y.jsx)(`button`,{type:`submit`,className:`btn btn-primary`,disabled:a||!r.trim(),children:n(a?`connection.pairing.submitting`:`connection.pairing.submit`)}),s&&(0,Y.jsx)(`p`,{id:`connect-pairing-error`,className:`alert alert-err`,role:`alert`,children:n(s===`invalid-code`?`connection.pairing.notApiKey`:s===`unreachable`?`connection.pairing.networkError`:s===`request-failed`?`connection.pairing.requestError`:s===`invalid-response`?`connection.pairing.responseError`:`connection.pairing.error`)})]}),e.transport===`relay`&&(0,Y.jsx)(`p`,{className:`text-muted`,children:n(`connection.pairing.relayWarning`)})]})}var Jw=new Set([`dashboard`,`startup`,`providers`,`models`,`subagents`,`logs`,`usage`,`storage`,`remote`,`codex-set`,`integrations`]);function Yw(e){let t=pt(e??(typeof window<`u`?window.location.hash:``)).split(`/`)[0];return t===`debug`?`logs`:t===`codex-auth`?`codex-set`:t===`combos`||t===`routing`||t===`lab`?`models`:t===`api`||t===`claude`||t===`grok`?`integrations`:Jw.has(t)?t:`dashboard`}var Xw=[`dashboard/providers`,`dashboard/models`],Zw=[`models/combos`,`models/routing`,`models/compatibility`],Qw=[`integrations/keys`,`integrations/codex`,`integrations/claude`,`integrations/claude/desktop`,`integrations/grok`,`integrations/cursor`,`integrations/opencode`,`integrations/pi`,`integrations/omp`,`integrations/hermes`,`integrations/openclaw`,`integrations/kimi`,`integrations/gajae`,`integrations/dsh`,`integrations/mcode`,`integrations/zcode`,`integrations/prime`,`integrations/aside`,`integrations/raycast`,`integrations/omo`,`integrations/cline`];function $w(e,t){return e===t||t===`logs`&&e===`logs/debug`||t===`codex-set`&&e===`codex-set/prompt`||t===`models`&&Zw.includes(e)||t===`dashboard`&&(e===`dashboard/update`||Xw.includes(e))||t===`integrations`&&Qw.includes(e)}function eT(e){let t=Yw(e);return e===`debug`||e.startsWith(`debug/`)?{page:`logs`,replaceTo:`logs/debug`}:e===`codex-auth`||e.startsWith(`codex-auth/`)?{page:`codex-set`,replaceTo:`codex-set`}:e===`combos`||e.startsWith(`combos/`)?{page:`models`,replaceTo:`models/combos`}:e===`routing`||e.startsWith(`routing/`)?{page:`models`,replaceTo:`models/routing`}:e===`lab`||e.startsWith(`lab/`)?{page:`models`,replaceTo:`models/compatibility`}:e===`api`?{page:`integrations`,replaceTo:`integrations/keys`}:e===`claude`?{page:`integrations`,replaceTo:`integrations/claude`}:e===`grok`?{page:`integrations`,replaceTo:`integrations/grok`}:e===`providers/workspace`?{page:`providers`,replaceTo:`providers`}:$w(e,t)?{page:t,replaceTo:null}:{page:t,replaceTo:t}}var tT=[`ocx-global-view`,`ocx-view`,`ocx-providers-view`,`ocx-subagents-view`,`ocx-storage-view`,`ocx-codexauth-view`,`ocx-apikeys-view`,`ocx-claudecode-view`,`ocx-usage-view`,`ocx-logs-view`,`ocx-models-view`,`ocx-dashboard-view`];function nT(){try{for(let e of tT)localStorage.removeItem(e)}catch{}}function rT(){let[e,t]=(0,_.useState)(Yw);(0,_.useEffect)(()=>{nT()},[]);let n=(0,_.useCallback)(e=>{let n=eT(e);n.replaceTo&&mt(n.replaceTo),t(n.page)},[]);return(0,_.useEffect)(()=>{let e=()=>{n(pt(window.location.hash))};return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[n]),(0,_.useEffect)(()=>{let n=eT(pt(window.location.hash));n.replaceTo&&mt(n.replaceTo),n.page!==e&&t(n.page)},[e]),{page:e,setPageState:t,navigateToPage:(e,n)=>{ht(n?`${e}/${n}`:e),t(e)}}}var iT=15e3;function aT(e,t,n){return typeof e?.message==`string`&&e.message.trim()?e.message:typeof e?.error==`string`&&e.error.trim()?e.error:n(t)}function oT(e){return(e instanceof DOMException||e instanceof Error)&&e.name===`AbortError`}async function sT(e,t={}){let{fetchFn:n=fetch,timeoutMs:r=iT,formatFailure:i=e=>`Failed to stop proxy (HTTP ${e}).`,mode:a=`standalone`}=t,o;try{o=await n(`${e}${a===`client`?`/api/machine/disconnect`:`/api/stop`}`,{method:`POST`,...a===`client`?{headers:{"Content-Type":`application/json`},body:`{}`}:{},signal:AbortSignal.timeout(r)})}catch(e){return oT(e),{accepted:!0}}let s=await o.json().catch(()=>null);return!o.ok||s?.success===!1?{accepted:!1,message:aT(s,o.status,i)}:{accepted:!0}}var cT={dashboard:`nav.dashboard`,startup:`nav.startup`,providers:`nav.providers`,models:`nav.models`,subagents:`nav.subagents`,logs:`nav.logs`,usage:`nav.usage`,storage:`nav.storage`,remote:`nav.remote`,"codex-set":`nav.codexSet`,integrations:`nav.integrations`},lT=``,uT=Rb(lT);Px(uT),eS();var dT=`ocx-theme`,fT=[{id:`dashboard`,tkey:`nav.dashboard`,Icon:ee},{id:`codex-set`,tkey:`nav.codexSet`,Icon:Oe},{id:`providers`,tkey:`nav.providers`,Icon:te},{id:`models`,tkey:`nav.models`,Icon:ne},{id:`subagents`,tkey:`nav.subagents`,Icon:Z},{id:`logs`,tkey:`nav.logs`,Icon:re},{id:`usage`,tkey:`nav.usage`,Icon:oe},{id:`storage`,tkey:`nav.storage`,Icon:se},{id:`remote`,tkey:`nav.remote`,Icon:Pe},{id:`integrations`,tkey:`nav.integrations`,Icon:Fe}],pT={light:Me,dark:Ne,system:Pe},mT={light:`theme.light`,dark:`theme.dark`,system:`theme.system`};function hT(e){if(!e||typeof e!=`object`||!(`version`in e))return null;let t=e.version;return typeof t==`string`&&t.length>0?t:null}function gT(){let e=localStorage.getItem(dT);return e===`light`||e===`dark`?e:`system`}function _T(){let{page:e,navigateToPage:t}=rT(),[n,r]=(0,_.useState)(gg);(0,_.useEffect)(()=>{let e=()=>r(gg());return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[]);let[i,a]=(0,_.useState)(gT),{locale:o,setLocale:s}=ut(),c=Q(),[l,u]=(0,_.useState)(uT),[d,f]=(0,_.useState)(()=>!Mb()),[p,m]=(0,_.useState)(!1),[h,g]=(0,_.useState)(()=>Rx(`shared`)),[v,y]=(0,_.useState)(0),[b,x]=(0,_.useState)(!1);(0,_.useEffect)(()=>{let e=e=>{e.detail?.plane===`shared`&&!Rx(`shared`)&&g(!1)};return window.addEventListener(hx,e),()=>window.removeEventListener(hx,e)},[]),(0,_.useEffect)(()=>{let e=new AbortController;return Hb(lT,e.signal).then(async t=>{if(Px(t),u(t),t.connected&&!Rx(`shared`))try{let n=await fetch(t.shared.bootstrapPath,{cache:`no-store`,signal:AbortSignal.any([e.signal,AbortSignal.timeout(5e3)])});n.ok&&Ux(`shared`,await n.text())}catch{}e.signal.aborted||(g(Rx(`shared`)),m(!1),f(!0))}).catch(()=>{e.signal.aborted||(m(!0),f(!0))}),()=>e.abort()},[]);let S=Vb(`machine`,l),C=Vb(`shared`,l),[w,T]=(0,_.useState)(!1),E=(0,_.useRef)(null),D=(0,_.useRef)(null),O=(0,_.useRef)(!1);(0,_.useEffect)(()=>{let e=()=>T(!1);return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[]),(0,_.useEffect)(()=>{let e=document.documentElement;i===`system`?(e.removeAttribute(`data-theme`),localStorage.removeItem(dT)):(e.setAttribute(`data-theme`,i),localStorage.setItem(dT,i))},[i]);let k=K(`app-healthz:${S}`,[S,d],async e=>{let t=await fetch(`${S}/healthz`,{signal:e});return t.ok?hT(await t.json()):null},{pollMs:3e4,enabled:d}),A=()=>a(e=>e===`light`?`dark`:e===`dark`?`system`:`light`),j=pT[i],M=k.data??`2.56.0`,[N,P]=(0,_.useState)(!1);(0,_.useEffect)(()=>{if(!w)return;let e=e=>{e.key===`Escape`&&T(!1)};window.addEventListener(`keydown`,e);let t=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{window.removeEventListener(`keydown`,e),document.body.style.overflow=t}},[w]),(0,_.useEffect)(()=>{if(w){O.current=!0;let e=setTimeout(()=>D.current?.focus(),200);return()=>clearTimeout(e)}O.current&&(O.current=!1,E.current?.focus())},[w]),(0,_.useEffect)(()=>{let e=window.matchMedia(`(min-width: 761px)`),t=()=>{e.matches&&T(!1)};return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let[F,I]=(0,_.useState)(0),{restarting:L,restart:R}=Xd(C,{onSettled:()=>I(e=>e+1)}),z=async()=>{if(!confirm(c(l.connected?`connection.disconnectConfirm`:`dash.stopConfirm`)))return;P(!0);let e=await sT(S,{formatFailure:e=>c(`dash.stopFailed`,{status:String(e)}),mode:l.connected?`client`:`standalone`});e.accepted||(P(!1),alert(e.message))},B=async()=>{if(b)return;x(!0);let e=await zx(`shared`);x(!1),e?g(!1):alert(c(`connection.sessionLogoutFailed`))},V=(0,Y.jsxs)(`button`,{type:`button`,className:`brand brand-home`,onClick:()=>{t(`dashboard`),T(!1)},"aria-label":c(`nav.goHome`),title:c(`nav.goHome`),...e===`dashboard`?{"aria-current":`page`}:{},children:[(0,Y.jsx)(`span`,{className:`brand-logo`,role:`img`,"aria-label":c(`app.logoAria`)}),(0,Y.jsx)(`span`,{className:`name`,children:`opencodex`}),(0,Y.jsxs)(`span`,{className:`ver`,title:M,children:[`v`,M]})]});return(0,Y.jsxs)(`div`,{className:`app`,children:[(0,Y.jsxs)(`header`,{className:`mobile-topbar`,inert:w,children:[(0,Y.jsx)(`button`,{ref:E,type:`button`,className:`menu-toggle`,onClick:()=>T(e=>!e),"aria-expanded":w,"aria-controls":`app-sidebar`,"aria-label":c(w?`nav.closeMenu`:`nav.openMenu`),title:c(w?`nav.closeMenu`:`nav.openMenu`),children:(0,Y.jsx)(ie,{})}),V,(0,Y.jsxs)(`div`,{className:`mobile-topbar-actions`,children:[l.connected&&h&&(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb`,onClick:()=>{B()},disabled:b,"aria-label":c(b?`connection.sessionLoggingOut`:`connection.sessionLogout`),title:c(`connection.sessionLogout`),children:(0,Y.jsx)(le,{})}),(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb sidebar-orb--danger`,onClick:z,disabled:N,"aria-label":c(l.connected?`connection.disconnect`:`dash.stop`),title:c(l.connected?`connection.disconnect`:`dash.stop`),children:(0,Y.jsx)(Te,{})}),(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb`,onClick:()=>{R()},disabled:L,"aria-label":c(`dash.codexRestart`),title:c(`dash.codexRestart`),children:(0,Y.jsx)(de,{})})]})]}),w&&(0,Y.jsx)(`div`,{className:`drawer-scrim`,onClick:()=>T(!1),"aria-hidden":`true`}),(0,Y.jsxs)(`aside`,{id:`app-sidebar`,className:`sidebar${w?` open`:``}`,ref:D,tabIndex:-1,children:[(0,Y.jsxs)(`div`,{className:`drawer-head`,children:[V,(0,Y.jsx)(`button`,{type:`button`,className:`menu-toggle drawer-close`,onClick:()=>T(!1),"aria-label":c(`nav.closeMenu`),title:c(`nav.closeMenu`),children:(0,Y.jsx)(le,{})})]}),(0,Y.jsx)(`nav`,{children:fT.map(n=>{let{id:r,tkey:i,Icon:a}=n,o=r===e;return(0,Y.jsx)(`div`,{className:`nav-entry`,children:(0,Y.jsxs)(`button`,{type:`button`,className:`nav-item${o?` active`:``}`,"data-page":r,onClick:()=>{t(r),T(!1)},"aria-current":o?`page`:void 0,children:[(0,Y.jsx)(a,{}),` `,c(i)]})},r)})}),(0,Y.jsxs)(`div`,{className:`sidebar-foot`,children:[(0,Y.jsxs)(`div`,{className:`lang-toggle`,children:[(0,Y.jsx)(Fe,{"aria-hidden":!0}),(0,Y.jsx)(kt,{value:o,options:nt.map(e=>({value:e.code,label:et(e.code)})),onChange:e=>s(e),label:c(`lang.label`),placement:`right`,portal:!1,style:{flex:1,minWidth:0,width:`100%`}})]}),(0,Y.jsxs)(`button`,{type:`button`,className:`theme-toggle`,onClick:A,"aria-label":`${c(`theme.label`)}: ${c(mT[i])}`,title:`${c(`theme.label`)}: ${c(mT[i])}`,children:[(0,Y.jsx)(j,{}),` `,(0,Y.jsx)(`span`,{className:`mode`,children:c(mT[i])})]}),(0,Y.jsxs)(`div`,{className:`sidebar-action-row`,children:[(0,Y.jsx)(`span`,{className:`sidebar-action-label`,children:c(`dash.actions`)}),(0,Y.jsxs)(`div`,{className:`sidebar-action-orbs`,children:[l.connected&&h&&(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb`,onClick:()=>{B()},disabled:b,"aria-label":c(b?`connection.sessionLoggingOut`:`connection.sessionLogout`),title:c(`connection.sessionLogout`),children:(0,Y.jsx)(le,{})}),(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb sidebar-orb--danger`,onClick:z,disabled:N,"aria-label":c(N?`dash.stopping`:l.connected?`connection.disconnect`:`dash.stop`),title:c(N?`dash.stopping`:l.connected?`connection.disconnect`:`dash.stop`),children:(0,Y.jsx)(Te,{})}),(0,Y.jsx)(`button`,{type:`button`,className:`sidebar-orb`,onClick:()=>{R()},disabled:L,"aria-label":c(L?`dash.codexRestarting`:`dash.codexRestart`),title:c(L?`dash.codexRestarting`:`dash.codexRestart`),children:(0,Y.jsx)(de,{})})]})]}),(0,Y.jsx)(Uw,{apiBase:C,onOpenUpdate:()=>{T(!1),t(`dashboard`,`update`)}})]})]}),(0,Y.jsx)(`main`,{className:`main`,inert:w,children:(0,Y.jsx)(`div`,{className:`main-inner${e===`models`&&n===`combos`?` main-inner--combos`:``}`,children:(0,Y.jsx)(np,{pageName:c(cT[e]),title:c(`errorBoundary.title`),message:c(`errorBoundary.message`),detailsLabel:c(`errorBoundary.details`),reloadLabel:c(`errorBoundary.reload`),children:d?(0,Y.jsxs)(Y.Fragment,{children:[p&&(0,Y.jsx)(`div`,{className:`alert alert-err`,role:`alert`,children:c(`connection.machineUnavailable`)}),l.connected&&!h&&(0,Y.jsx)(qw,{target:l.shared,onConnected:()=>{g(!0),y(e=>e+1)}},`${l.shared.serverOrigin}:${l.shared.bootstrapPath}`),e===`dashboard`&&(0,Y.jsx)(si,{apiBase:C,connected:l.connected,authenticationPending:l.connected&&!h,refreshEpoch:v}),e===`startup`&&(0,Y.jsx)(Dw,{apiBase:C,machineApiBase:S,connected:l.connected}),e===`providers`&&(0,Y.jsx)(sd,{apiBase:C}),e===`models`&&(0,Y.jsx)(Dg,{apiBase:C,restartEpoch:F},C),e===`subagents`&&(0,Y.jsx)(zg,{apiBase:C},C),e===`logs`&&(0,Y.jsx)(jv,{apiBase:C}),e===`usage`&&(0,Y.jsx)(ny,{apiBase:C,connected:l.connected,apiKeyId:l.apiKeyId}),e===`storage`&&(0,Y.jsx)(jy,{apiBase:C}),e===`remote`&&(0,Y.jsx)(Rw,{apiBase:C,hubOrigin:l.shared.serverOrigin}),e===`codex-set`&&(0,Y.jsx)(bb,{apiBase:C}),e===`integrations`&&(0,Y.jsx)(mw,{apiBase:C,machineApiBase:S,connected:l.connected})]}):(0,Y.jsx)(`div`,{className:`alert`,children:c(`connection.discovering`)})},e)})})]})}g.createRoot(document.getElementById(`root`)).render((0,Y.jsx)(_.StrictMode,{children:(0,Y.jsx)(dt,{children:(0,Y.jsx)(_T,{})})}));
|
package/gui/dist/index.html
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
} catch (e) {}
|
|
17
17
|
})();
|
|
18
18
|
</script>
|
|
19
|
-
<script type="module" crossorigin src="/assets/index-
|
|
19
|
+
<script type="module" crossorigin src="/assets/index-D4zuyIxQ.js"></script>
|
|
20
20
|
<link rel="stylesheet" crossorigin href="/assets/index-BBOZWGB6.css">
|
|
21
21
|
</head>
|
|
22
22
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitkyc08/opencodex",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.56.0",
|
|
4
4
|
"description": "Universal provider proxy for OpenAI Codex & Claude Code — use any LLM with Codex CLI/App/SDK and Claude Code",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./bin/package-main.mjs",
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"skill:surface:check": "bun scripts/generate-ocx-skill-surface.ts --check",
|
|
54
54
|
"structure:index": "bun scripts/structure-ssot.ts --fix",
|
|
55
55
|
"structure:check": "bun scripts/structure-ssot.ts",
|
|
56
|
+
"ratchet:update": "bun scripts/file-size-ratchet.ts --update",
|
|
56
57
|
"generate:model-metadata": "bun scripts/generate-model-metadata.ts",
|
|
57
58
|
"build:gui": "cd gui && bun install --frozen-lockfile && bun run build && cd .. && bun run prepare:package",
|
|
58
59
|
"build:remote-workspace-helper": "cargo build --release --locked --manifest-path native/remote-workspace-helper/Cargo.toml",
|