@webinson/peer-core 0.1.977 → 0.1.981

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.
@@ -2,8 +2,8 @@
2
2
 
3
3
  import { i as __toESM, n as __exportAll, r as __require, t as __commonJSMin } from "./rolldown-runtime-1CwlsFOK.mjs";
4
4
  import { $r as isEmpty, A as NullOr, Ar as fromInput$1, B as String$6, C as Literals$2, Cn as inetAddressFromIpString, Cr as Forbidden$1, Ct as decodeUnknownSync, Di as toEpochMillis, E as Never, Ei as toDate, En as unixPathAddress, Et as encodeSync, Fi as Class, Gt as isNonEmpty, H as Struct, Hr as merge, I as Record, Ir as CurrentRedactedNames, J as TrueLiterals, Jr as value, Jt as isSchemaError, Li as TaggedClass, Nr as toRecord, Nt as is, On as assign, Ot as encodeUnknownEffect, Ri as TaggedError$1, Rr as fromInput, S as Literal, Tt as encodeEffect, W as TaggedError, Xr as empty, Y as Tuple, Yn as isNull, Z as URLFromString, Zr as expireCookie, _ as Finite, _i as makeUnsafe, a as BooleanLiterals, ai as decodeString, bt as decodeUnknownExit, c as DateTimeUtc, d as Duration, di as formatIso, dn as toCodecStringTree, dr as transformEffect, fi as isGreaterThan, ft as declare, g as FalseLiterals, gi as make$65, gn as toType, ht as decodeExit, ii as decode, ir as toEncoded, j as Number$2, jr as redactUrl, jt as fromJsonString, k as Null, ki as toUtc, l as DateTimeUtcFromString, li as add, ln as toCodecArrayFromSingle, mi as isLessThan, mt as decodeEffect, n as ArraySchema, ni as set, nn as optional$3, nt as Union, o as Cause, oi as encode, pi as isGreaterThanOrEqualTo, pn as toEquivalence, qr as make$64, qt as isSchema, r as Boolean$4, ri as toSetCookieHeaders, rn as optionalKey, rt as Unknown, si as Equivalence, ti as parseHeader, u as Defect, un as toCodecJson, v as FiniteFromString, vt as decodeTo, wr as InvalidValue$1, xt as decodeUnknownOption, y as Int$5, yi as now, yt as decodeUnknownEffect, z as SchemaError, zi as taggedEnum, zr as fromRecordUnsafe } from "./Schema-Eq619wkO.mjs";
5
- import { $ as forEach, $i as hasInterrupts, $t as runPromise, Ai as isSuccess, Ar as empty$3, As as findFirst, At as matchEffect, B as filter, Bc as Number$3, Bn as withTracerEnabled, Bo as fromInput$2, Br as tap$1, Bt as promise, C as catchTag, Cc as getOrElse, Cn as tryPromise, Cu as dual, D as context, Dc as isNone, Dl as assignProperty, Dr as effect, Ds as ensure, Dt as match$2, Ec as getOrUndefined, Es as empty$1, Et as mapErrorEager, Eu as memoize, F as exit, Fc as orElse, Fl as equals, Fn as withErrorReporting, Fr as provideMerge, G as findFirst$1, Gi as fail$4, Gr as close, Gs as match$1, Hi as combine$1, Hn as zip, Ho as hours, Hr as Scope, Ht as provideContext, I as fail$2, Ic as some, In as withFiber$1, Ir as succeed$3, It as option, Ji as findErrorOption, Jl as compose, Jr as forkUnsafe, Kt as raceFirst, L as failCause, Lc as toArray, Lt as orDie, M as die, Mc as map$4, Mn as void_, Mo as encode$1, Mr as merge$1, Ms as findLast, Mt as onError, Nc as match, Ni as void_$1, Nr as mergeAll, Ns as flatMapNullishOr, Nt as onExit, On as uninterruptible, Oo as Tracer, Or as effectContext, Os as filter$2, Ot as matchCauseEffect, Ou as pipe, P as ensuring, Pc as none$1, Pr as provide$1, Qa as fnUntraced, Qo as minutes$1, Qr as CurrentLogAnnotations, Qt as runForkWith, Rn as withParentSpan, Ro as days, Rt as orElseSucceed, S as catchReason, Sc as fromUndefinedOr, Sn as timeoutOrElse, Ss as Prototype, St as map$3, T as catch_, Tc as getOrThrow$1, To as MinimumTraceLevel, Tt as mapError, Tu as identity, Ui as die$1, Un as zipWith, Uo as infinity, Ur as addFinalizer, Ut as provideService, Vn as yieldNow, Vo as fromInputUnsafe, Vr as unwrap, Vt as provide, W as filterOrFail, Wr as addFinalizerExit, Ws as map$5, X as fn, Xi as fromReasons, Xo as millis, Xt as retry, Yl as hasProperty, Yr as make$69, Ys as sort, Yt as result, Z as fnUntraced$1, Zo as min, Zr as provide$2, Zt as runFork, _ as catchCauseIf, _c as firstSomeOf, _i as make$68, _o as sync, _s as getUnsafe, a as all, ac as getOrUndefined$1, ai as UnhandledLogLevel, an as scoped, as as toMinutes, b as catchFilter, ba as ConsoleRef, bi as succeed$4, bn as timeout, bs as merge$2, bt as logWithLevel, c as annotateLogs, cc as isSuccess$1, ci as done, cl as isEffect, cn as serviceOption, cr as jittered, cs as Reference, ct as ignore, d as asSome, di as failCause$1, dl as withFiber, dn as succeedNone, ds as empty$2, dt as interruptible, du as isTagged, ea as hasInterruptsOnly, ei as CurrentLogSpans, en as runPromiseWith, et as forever, f as asVoid, fc as succeed$2, fn as succeedSome, fr as spaced, ft as isEffect$1, g as catchCause, ga as prettyErrors, gc as filter$1, gn as tapCause, gt as logError, gu as cast, h as callback, ha as pretty, hc as exists$1, hi as isDone, hl as Class$1, hn as tap, hr as upTo, ht as logDebug, i as addFinalizer$1, ic as getOrThrow, ii as TracerTimingEnabled, in as scope, is as toMillis, it as forkScoped, j as delay, ji as match$3, jr as launch, js as findFirstIndex, jt as never, ju as pipeArguments, k as currentParentSpan, ka as consolePretty$1, kc as isSome, ki as isFailure, kr as effectDiscard, ks as filterMap, l as annotateLogsScoped, ln as sleep$1, lr as modifyDelay, ls as Service, lt as ignoreCause, mc as contains, mn as sync$1, mt as log$1, n as acquireRelease, nc as failVoid, ni as MinimumLogLevel, nn as runSyncExit, ns as sum, nt as forkDetach, o as andThen, oc as isFailure$1, oi as _await, ot as fromResult, ou as isObject, p as cached, pn as suspend, q as flatMap$1, qc as make$67, qs as reduce, qt as repeat, r as acquireUseRelease, ri as TracerEnabled, rn as runSyncWith, ro as loggerMake, rr as exponential, rt as forkIn, ru as isNotUndefined, s as annotateCurrentSpan, si as die$2, ss as zero, st as gen$1, tc as fail$3, tn as runSync, ts as seconds, tu as isNotNull, u as as, ui as fail$5, un as succeed$1, us as add$1, ut as interrupt, v as catchDefect, va as squash, vc as flatMap$2, vi as makeUnsafe$1, vl as format, vn as tapError, vo as tracerLogger$1, vs as make$66, vt as logInfo, w as catchTags, wc as getOrNull, wn as try_, wr as build, wu as flow, x as catchIf, xa as CurrentLoggers$1, xc as fromNullishOr, xn as timeoutOption, xs as omit, xu as constVoid, yc as flatten, ys as makeUnsafe$2, yt as logWarning, zn as withSpan, zo as format$1, zr as sync$2, zs as isReadonlyArrayNonEmpty, zt as partition } from "./Effect-DXlc4A9S.mjs";
6
- import { $ as SecretRequests, $a as workspaceNameForRef, $c as projectDomainEventForWire, $d as FILL_PREVIEW_VIEWPORT, $f as DesktopBrowserEvent, $g as isWithHeaders, $h as setHeader$1, $i as layer$151, $l as ProcessRunner, $m as limitsServices, $n as codexAuthorizationRequest, $o as layer$103, $p as DEFAULT_PROVIDER_INTERACTION_MODE, $r as firstNonEmptyLine, $s as decodeConfirmedOrigin, $t as layer$122, $u as UsageReadError, A as layer$184, A_ as RunId, Aa as EventSinkV2, Ac as load, Ad as environmentThemeFileHasColors, Af as String$7, Ag as AuthOrchestrationOperateScope, Ah as redirect, Ai as restartContinuationNote, Al as PersistenceSqlError, Am as withScope, An as layer$132, Ao as PeerBrokerKind, Ap as toRouterPath, Ar as NoOpProviderEventLoggers, As as layer$156, At as RELAY_HOOK_DELIVERY_TYP, Au as resolveCommandPath, B as coreLayer, B_ as bytes, Ba as ServerActivation, Bc as THREAD_HISTORY_SNAPSHOT_ROW_LIMIT, Bd as AntigravitySettings, Bf as invalidate, Bg as AuthTerminalReadScope, Bh as MaxBodySize, Bi as historyCost, Bl as SERVICE_STATE_FILE, Bm as TracerDisabledWhen, Bn as layer$162, Bo as withLocalTracing, Bp as OrchestrationV2ThreadShell, Br as PtyAdapter, Bs as pipeThroughDuplex, Bt as ThreadTranscriptTooLargeError, Bu as cliReleaseIndexPageUrl, C as stateStream, C_ as PortSchema, Ca as ThreadCommandExecutor, Cc as version, Cd as FilesystemBrowseError, Cf as Boolean$5, Cg as AuthFilesystemReadScope, Ch as empty$4, Ci as isRestartContinuationSource, Cl as sourceControlRepositorySelector, Cm as serve, Cn as layer$171, Co as parseOriginUrlFromGitConfig, Cp as RelayEnvironmentLinkResponse, Cr as hostPreviewMimeTypeFromExtension, Cs as layer$182, Ct as idFromName, Cu as modelSelectionsEqual, D as PreviewAutomationBroker, D_ as ProviderThreadId, Da as IdAllocatorV2, Dc as fromJsonStringPretty, Dd as EnvironmentThemeFile, Df as NonEmptyString, Dg as AuthMcpClientAccess, Dh as jsonUnsafe, Di as neverStarted, Dl as OrchestrationEventStore, Dm as HttpClient, Dn as ProviderRegistry, Do as resolveCodexHomeLayout, Dp as RelayOkResponse, Dr as endOrphanedNativeSubagent, Ds as ServiceLauncherClient, Dt as RELAY_HEALTH_REQUEST_TYP, Du as mergePathEntries, E as layer$197, E_ as ProviderSessionId, Ea as layer$113, Ec as decodeJsonResult, Ed as GitCommandError, Ef as LogLevel$1, Eg as AuthMcpApprovalError, Eh as isHttpServerResponse, Ei as mergeRestartCancelledBackgroundWork, El as layerFromOrchestrationEventStore, Em as make$75, En as layer$168, Eo as withoutCredentials, Ep as RelayManagedEndpointRecoveryResponse, Er as makeUnavailableUsageLimits, Es as layer$199, Et as getOrCreateEnvironmentKeyPairFromSecretStore, Eu as listLoginShellCandidates, F as issueAttachmentUploadUrl, F_ as decodeString$1, Fa as EffectOutboxV2, Fc as ProjectionStoreThreadNotFoundError, Fd as ExternalLauncherUnknownEditorError, Ff as option$1, Fg as AuthRelayWriteScope, Fh as stream$2, Fi as attachmentTokenAllowance, Fl as void_$2, Fm as set$2, Fn as layer$153, Fo as waitForSocketGone, Fp as OrchestrationV2GetShellSnapshotError, Fr as layerJson, Fs as ServerSettingsService, Ft as normalizeRelayIssuer, Fu as make$72, G as peerPlugins, Ga as PeerState, Gc as chatAttachmentStableKey, Gd as DEFAULT_PROVIDER_HEALTH_REFRESH_INTERVAL, Gf as BUILT_IN_BROWSER_PROFILES, Gg as getResponseEncoding, Gh as bodyJson, Gi as layer$129, Gl as parseServiceState, Gm as TypeId$6, Gn as layer$191, Go as NO_SANDBOX_SIGNATURE, Gp as OrchestrationProjectShell, Gr as layer$137, Gs as CLOUD_LINKED_USER_ID, Gt as layer$128, Gu as clientRpcRequiredScopes, H as rpcLayer, Ha as forkParkedFiber, Hc as decodeThreadHistoryCursor, Hd as CodexSettings, Hf as makeWith, Hg as ServerAuthSessionMethod, Hh as inspect$1, Hi as renderHistory, Hl as compareExactServiceVersions, Hm as fromHeaders, Hn as layer$157, Ho as APPARMOR_PROFILE, Hp as latestProviderTurnForAttempt, Hr as layer$190, Hs as toUint8Array, Ht as layerWithLegacyImporter, Hu as RequestInit, I as storeAttachmentUpload, I_ as encode$2, Ia as PROCESS_BOUND_EFFECT_TYPES, Ic as ProjectionStoreV2, Id as ExternalLauncherUnsupportedEditorError, If as schema, Ig as AuthSettingsWriteScope, Ih as text$1, Ii as contextUsageForHandoff, Il as layer$94, Im as update, In as PortDiscovery, Io as EXIT_STATUS, Ip as OrchestrationV2GetThreadProjectionError, Ir as AcpRegistryCatalog, Is as layer$144, It as signRelayJwt, Iu as ChildProcessSpawner, J as WEBHOOK_ROUTE_PREFIX, Ja as remoteOf, Jc as resolveAttachmentPathById, Jd as ServerSettingsError, Jf as findBrowserProfile, Jg as getStatusSuccessSchema, Jh as bodyUrlParams, Ji as layer$119, Jl as PinnedRuntimeInstallError, Jm as schemaSearchParams, Jn as layer$160, Jo as SETUP_SUBCOMMAND, Jp as ProjectMutationError, Jr as BUILT_IN_SOURCE_CONTROL_DRIVERS, Js as HOLD_WEBHOOKS_WHILE_OFFLINE_SECRET, Jt as layerFromProjectStore, Ju as WsRpcGroup, K as ScheduledTaskService, Ka as layer$106, Kc as createDeterministicAttachmentId, Kd as DEFAULT_SERVER_SETTINGS, Kg as getResponseEncodingSchema, Kh as bodyJsonUnsafe, Ki as CheckpointServiceV2, Kl as serviceStateActiveVersion, Km as schemaCookies, Kn as layer$192, Ko as PreviewBrowserLibrariesError, Kp as ProjectListEntriesError, Kr as SourceControlProviderRegistry, Ks as CLOUD_LINK_REVOKED, Kt as layer$131, Ku as RpcScopeAuthorization, L as validateAttachmentUploadToken, L_ as snapshotUnsafe, La as REPLAY_SAFE_EFFECT_TYPES_AFTER_PROCESS_LOSS, Lc as layer$96, Ld as ExternalLauncherUnsupportedTargetError, Lf as withDefault$2, Lg as AuthSourceControlWriteScope, Lh as uint8Array$1, Li as handoffBudget, Ll as readOnly, Lm as updateAndGet, Ln as layer$176, Lo as make$76, Lp as OrchestrationV2ProviderSessionJson, Lr as layerFromHost, Ls as redactServerSettingsForClient, Lt as verifyRelayJwt, Lu as CLI_RELEASE_BASE_URL_ENV, M as launchThread, M_ as ThreadId, Ma as layer$112, Mc as resolveSignalEndpoint, Md as ExternalLauncherBrowserSpawnError, Mf as all$1, Mg as AuthPreviewOperateScope, Mh as setBody, Mi as ContextHandoffServiceV2, Ml as makeLiveStreamBudget, Mm as getAndSet, Mn as layer$177, Mo as coreLaunchCommand, Mp as OrchestrationGetWorkflowScriptError, Mr as Protocol, Ms as layer$154, Mt as RELAY_MANAGED_TUNNEL_RECOVERY_TYP, Mu as resolveWindowsEnvironment, N as ATTACHMENT_UPLOAD_ROUTE_PREFIX, N_ as TurnItemId, Na as ProjectStoreV2, Nc as NetService, Nd as ExternalLauncherCommandNotFoundError, Nf as map$6, Ng as AuthProvidersManageScope, Nh as setHeader, Ni as layer$120, Nl as findAll, Nm as make$71, Nn as NativeTelemetryClient, No as readOwner, Np as OrchestrationV2AppThreadJson, Nr as make$81, Ns as writeAllToFileDescriptor, Nt as RELAY_MINT_REQUEST_TYP, Nu as setWindowsPath, O as layer$198, O_ as ProviderTurnId, Oa as deriveThreadFromProviderThread, Oc as fromLenientJson, Od as EnvironmentThemeId, Of as Port, Og as AuthMcpRegistrationError, Oh as mergeCookies, Oi as pendingRestartCancelledBackgroundWork, Ol as layer$108, Om as filterStatusOk$1, On as layer$185, Oo as mergeProviderInstanceEnvironment, Op as RelayProtectedError, Or as endRunlessRootTurns, Os as layer$200, Ot as RELAY_HEALTH_RESPONSE_TYP, Ou as readEnvironmentFromLoginShell, P as deletePendingAttachment, P_ as decode$1, Pa as layer$110, Pc as layer$180, Pd as ExternalLauncherEditorSpawnError, Pf as mapEffect$1, Pg as AuthRelayReadScope, Ph as setHeaders, Pi as DEFAULT_HANDOFF_TOKEN_CAP, Pl as findOneOption, Pm as modify, Pn as layer$152, Po as requestHandover, Pp as OrchestrationV2DispatchCommandError, Pr as makeProtocolWithHttpEffectWebsocket, Ps as subscribeBeforeSnapshot, Pt as RELAY_MINT_RESPONSE_TYP, Pu as withPathDirectoryListings, Q as layer$138, Qa as resolveWorkspaceRefName, Qc as normalizeProjectPathForComparison, Qd as resolveProviderInstanceEnabled, Qf as DesktopBrowserCommand, Qg as isStreamUint8Array, Qh as post, Qi as layer$150, Ql as pinnedRuntimeVersionsDir, Qm as isPersistedFile, Qn as makeCodexChatGptAuth, Qo as sandboxDisabled, Qp as ProjectWriteFileError, Qr as detailFromCause, Qs as RELAY_URL_SECRET, Qt as CommandOutputHub, Qu as Service$1, R as PreviewManager, R_ as update$1, Ra as layer$111, Rc as InvalidThreadHistoryCursorError, Rd as ProviderSetupError, Rf as SourceError, Rg as AuthStandardClientScopes, Rh as urlParams, Ri as handoffTokenCapConfig, Rl as SERVICE_LAUNCHER_CONTEXT_ENV, Rm as appendPreResponseHandler, Rn as deriveProviderInstanceConfigMap, Ro as RelayClientTracer, Rp as OrchestrationV2SearchThreadError, Rr as toAcpRegistryOperationError, Rs as decode$2, Rt as makeDrainableWorker, Ru as CLI_RELEASE_CHANNELS, S as layer$179, S_ as NonNegativeInt, Sa as layer$142, Sc as resolveStaticDir, Sd as AgentSessionSource, Sf as Crypto, Sg as AuthEnvironmentScopes, Sh as getType, Si as isAwaitedWork, Sl as canonicalRepositoryKey, Sm as route, Sn as GitWorkflowService, So as parseGitHubRepositoryNameWithOwnerFromRemoteUrl, Sp as RelayEnvironmentLinkChallengeResponse, Sr as audioMimeTypeFromExtension, Ss as ServerEnvironmentIdentity, St as PeerWorkspaces, Su as make$70, T as PreviewBrowser, T_ as ProjectId, Ta as LegacyV1ThreadImporter, Tc as resolveServerBackgroundActivitySettings, Td as OrchestrationDispatchCommandError, Tf as Int$6, Tg as AuthGrantScope, Th as html, Ti as isRestartNoteSource, Tl as layer$95, Tm as HttpServer, Tn as GitManager, To as matchRepositories, Tp as RelayManagedEndpointRecoveryRegistrationResponse, Tr as isWorkspacePreviewEntryPath, Ts as ServerSelfUpdate, Tt as layer$183, Tu as isCommandAvailable, U as PeerAdapters, Ua as layerFromApplicationReceipts, Uc as PENDING_ATTACHMENT_THREAD_SEGMENT, Ud as DATABASE_COMPACTION_RECOMMENDED_BYTES, Uf as set$3, Ug as authScopeRequiredResponse, Uh as schemaBodyJson, Ui as selectHistory, Ul as decodeServiceLauncherChildMessage, Um as HttpServerRequest, Un as layer$155, Uo as APPARMOR_PROFILE_PATH, Up as ToolActivityNativeAppReference, Ur as withWorkspaceLease, Us as CLOUD_ENDPOINT_CONFIRMED_ORIGIN, Ut as withCreationProvenance, Uu as layer$99, V as layer$105, Va as forkParked, Vc as buildBoundedThreadProjection, Vd as ClaudeSettings, Vf as make$80, Vg as EnvironmentAuthorizationError, Vh as TypeId$4, Vi as latestNativeContextUsage, Vl as SERVICE_STOP_MARKER_FILE, Vm as compression$1, Vn as BackgroundPolicy, Vo as withRelayClientTracing, Vp as isOrchestrationV2WorkActive, Vr as PtySpawnError, Vs as toArrayBuffer, Vt as isTerminalRunStatus, Vu as newestCliReleaseVersion, W as PeerPluginRegistry, Wa as layer$109, Wc as attachmentRelativePath, Wd as DEFAULT_AUTOMATIC_GIT_FETCH_INTERVAL, Wf as nextIntBetween, Wg as authScopeResponse, Wh as bearerToken, Wi as isNativeMaintenanceCommand, Wl as isExactServiceVersion, Wm as ParsedSearchParams, Wn as BUILT_IN_USAGE_DRIVERS, Wo as DEBIAN_PACKAGES, Wp as UsageLimitSourceError, Wr as TextGeneration, Ws as CLOUD_ENDPOINT_RUNTIME_CONFIG, Wt as OrchestratorV2, Wu as CLIENT_GUARDED_RPC_SCOPES, X as relayHookBaseUrl, Xa as resolveJjRepoPaths, Xc as runRanAfter, Xd as requiredScopesForProjectMutation, Xf as DesktopAppActivationErrorCode, Xg as isNoContent, Xh as get$2, Xi as layer$175, Xl as pinnedRuntimeCommand, Xm as MultipartError, Xn as sameUsageLimitCommandCoverage, Xo as missingLibraries, Xp as ProjectSearchContentsError, Xr as GitHubCredentials, Xs as RELAY_ENVIRONMENT_CREDENTIAL_SECRET, Xt as ProviderSessionManagerV2, Xu as PEER_RPC_SCOPES, Y as layer$136, Ya as checkoutKind, Yc as parseBase64DataUrl, Yd as ServerSettingsPatch, Yf as resolveBrowserProfiles, Yg as getWithHeadersAnnotation, Yh as del, Yi as CheckpointStore, Yl as ensurePinnedRuntimeInstalled, Ym as toURL, Yn as layer$161, Yo as diagnoseLaunchFailure, Yp as ProjectReadFileError, Yr as layer$149, Ys as PUBLISH_AGENT_ACTIVITY_SECRET, Yt as layer$121, Yu as WsT3RpcGroup, Z as Scheduler, Za as invalidateJjAvailability, Zc as projectComposerContextForProvider, Zd as requiredScopesForServerSettingsPatch, Zf as DesktopAppActivationResponse, Zg as isStreamSchema, Zh as make$82, Zi as VcsDriverRegistry, Zl as pinnedRuntimePaths, Zm as TypeId$5, Zn as withUsageLimitsCommands, Zo as sandboxBlocked, Zp as ProjectSearchEntriesError, Zr as layer$167, Zs as RELAY_ISSUER_SECRET, Zt as layer$123, Zu as PEER_LOCAL_WORKSPACE, _ as layer$195, __ as CommandId, _a as make$84, _c as deriveServerPaths, _d as AssetWorkspaceRootNormalizationError, _f as Stdio, _g as AuthAccessTokenType, _h as causeResponse, _i as isUndeliveredMailboxSteer, _l as threadPullRequestKeyOf, _m as normalize, _n as layer$164, _o as webhookDeliveriesTotal, _p as EnvironmentResourceNotFoundError, _r as layer$158, _s as resolveLegacySessionCookieName, _t as listClients, _u as entriesToAttributes, a_ as DEFAULT_MODEL_BY_PROVIDER, aa as isCheckpointRestoreIsolated, ac as readRelayConnection, ad as AssetGitHubMediaUrlValidationError, af as KeybindingRule, ag as layer$147, ah as CloseEvent, al as injectMcpAppCookieBootstrap, am as VcsRepositoryDetectionError, an as layer$127, ao as makeIsManagedWorktreePath, ap as EnvironmentAuthenticatedPrincipal, ar as codexPlanLabel, as as abytes$1, at as userFacingDispatchErrorMessage, au as layer$189, b as DEVICE_HUB_ROUTE_PREFIX, b_ as IsoDateTime, ba as layer$143, bc as make$77, bd as AgentSessionImportSource, bf as SpanPropagationEnabled, bg as AuthDiagnosticsReadScope, bh as HttpPlatform, bi as cancelledRosterTaskWork, bl as parseChangeRequestUrl, bm as cors, bn as layer$116, bo as resolveWorktreeCleanup, bp as RelayCloudEnvironmentHealthProofPayload, br as WORKSPACE_BROWSER_PREVIEW_EXTENSIONS, bs as timingSafeEqualBase64Url, bt as mcpClient, bu as unknownToAttributeValue, c_ as ProviderInstanceMutation, ca as pluginMcpServers, cc as resolveRootCliCommand, cd as AssetProjectFaviconNotFoundError, cf as ResolvedKeybindingRule, cg as raw, ch as WebSocket$1, ci as layer$201, cl as DEFAULT_KEYBINDINGS, cm as OrchestrationGetTurnDiffError, cn as WorkspaceEntries, co as layer$118, cp as EnvironmentHttpBadRequestError, cr as EMPTY_TOTALS, cs as anumber, ct as ProjectCloneTracker, cu as OtlpProtocol, d_ as CheckpointId, da as ProjectService, dc as isSecretStoreError, dd as AssetWorkspaceAssetInspectionError, df as Terminal, dg as FileSystem, dh as makeWebSocket$1, di as ProviderContinuationRequests, dl as mergeWithDefaultKeybindings, dm as PROVIDER_SEND_TURN_MAX_FILE_BYTES, dn as isProjectFaviconPath, do as increment, dp as EnvironmentHttpForbiddenError, dr as readContainedWorkflowFile, ds as randomBytes, dt as layer$172, du as layerOtlpSerialization, e_ as isWithHeadersValue, ea as JjVcsDriver, ec as decodeRuntimeConfig, ed as PREVIEW_AUTOMATION_SERVER_OPERATIONS, ef as PREVIEW_STREAM_HOST_SETUP_CLOSE_CODE, eg as setHeaders$1, eh as makeConfig, ei as PullRequestProviderError, el as projectThreadProjectionForWire, en as RunExecutionServiceV2, eo as make$79, ep as DESKTOP_UPDATE_RESTART_MARKER_FILE, er as codexCallbackUrl, es as layer$101, et as layer$135, eu as layer$98, f_ as ClientConnectionMethod, fa as layer$114, fc as layer$97, fd as AssetWorkspaceAssetNotFoundError, ff as isQuitError, fg as ExecutionEnvironmentDescriptor, fh as ClientAbort, fi as layer$130, fl as parseKeybindingShortcut, fm as PersistChatAttachmentsError, fn as VcsStatusBroadcaster, fo as metricAttributes, fp as EnvironmentHttpInternalServerError, fr as BUNDLED_MODEL_MANIFEST, fs as toBytes, ft as WorktreeSetupTracker, fu as makeLocalFileTracer, g as PullRequestReviewGuideService, g_ as ClientWebDeployment, ga as layer$140, gc as ServerConfig, gd as AssetWorkspaceResolutionError, gf as set$1, gg as AuthAccessStreamError, gh as ServeError, gi as isBufferedProviderNotification, gl as normalizeThreadPullRequestKey, gm as getSuccessSchemas, gn as layer$163, go as rpcRequestsTotal, gp as EnvironmentRequestInvalidError, gr as resolveProviderCompatibility, gs as isRemoteReachableHost, gt as layer$107, gu as OtlpSerialization, h_ as ClientSurface, ha as RepositoryIdentityResolver, hc as RuntimeMode$1, hd as AssetWorkspacePathValidationError, hf as make$78, hg as AuthAccessReadScope, hh as ResponseError, hi as ProviderInstanceRegistry, hl as legacyThreadPullRequestKey, hm as getErrorSchemas, hn as PullRequestService, ho as rpcRequestDuration, hp as EnvironmentOperationForbiddenError, hr as layerModelCatalog, hs as deriveAuthClientMetadata, ht as ensureShim, hu as make$83, i as layer$194, i_ as DEFAULT_MODEL, ia as SHARED_WORKSPACE_RESTORE_MESSAGE, ic as readHoldWebhooksWhileOffline, id as AssetCreateUrlInput, if as PreviewViewportSetting, ig as isIgnored, ih as Path, ii as agentScopeCommand, il as MCP_APP_MAX_HTML_BYTES, im as pullRequestHostOf, in as RunFinalizationService, io as isFilesystemRoot, ip as EnvironmentAuthenticatedAuth, ir as CodexInstallation, is as Hash, it as layer$134, iu as ProviderLatestVersions, j as dispatchCommand, j_ as RuntimeRequestId, ja as layerFromStores, jc as none$2, jd as EDITORS$1, jf as URL$1, jg as AuthOrchestrationReadScope, jh as removeHeader, ji as reportLabel, jl as bufferLiveStream, jm as get, jn as TerminalManager, jo as coordSocketPath, jp as ORCHESTRATION_V2_WS_METHODS, jr as ProviderEventLoggers, js as DesktopTelemetryReceiver, jt as RELAY_LINK_PROOF_TYP, ju as resolveSpawnCommand, k as ThreadSearch, k_ as RpcClientId, ka as layer$115, kc as layerResourceAttributes, kd as ServerProviderUpdateError, kf as Redacted, kg as AuthMcpTokenError, kh as raw$1, ki as restartCancelledBackgroundWorkNote, kl as PersistenceDecodeError, km as mapRequest, kn as ProjectSetupScriptRunner, ko as expandHomePath$1, kp as fromApi, kr as PluginMcpServers, ks as runServicePreflight, kt as RELAY_HOOK_DELIVERY_HEADER, ku as readPathFromLaunchctl, l_ as defaultInstanceIdForDriver, la as ProjectConflictError, lc as ServerSecretStore, ld as AssetProjectFaviconResolutionError, lf as getCurrentVersion, lg as stream$1, lh as WebSocketConstructor, li as ContextHandoffBudgetError, ll as compileResolvedKeybindingRule, lm as OrchestrationGetTurnDiffResult, ln as layer$181, lo as VcsProcess, lp as EnvironmentHttpCommonError, lr as claudeUsageResponseToLimits, ls as clean, lt as layer$173, lu as causeErrorTag, m_ as ClientOs, ma as layer$139, mc as DEFAULT_PORT, md as AssetWorkspaceContextResolutionError, mf as get$3, mg as ORCHESTRATION_PROTOCOL_QUERY_PARAM, mh as RequestParseError, mi as ProviderAdapterTurnStartError, ml as UNPUBLISHABLE_THEME_IDS, mm as getSlotParseOptions, mn as layerAutoPullPolicy, mo as orchestrationEffectQueueWait, mp as EnvironmentInternalError, mr as layer$187, ms as base64UrlEncode, mt as McpClients, mu as RotatingFileSink, n as McpClientAuthenticator, n_ as encoder, na as isGitImport, nc as encodeEndpointRuntimeConfigJson, nd as McpAppRequestError, nf as PreviewClearProfileError, ng as TypeId$7, nh as decodeField, ni as layer$193, nl as mcpAppFromToolItem, nm as PullRequestLinkedThreadsResult, nn as layer$124, no as colocatedGitCommand, np as RelayClientInstallFailedError, nr as isLoopbackHost$1, ns as sha384, nt as threadHasQueuedTurnStart, nu as makeTargetedProviderUpdateAction, o_ as ProviderDriverKind, oa as PeerWork, oc as resolveCliCommand, od as AssetPreviewTypeValidationError, of as KeybindingsConfig, og as layer$102, oh as SocketError, oi as McpAppModelContext, ol as injectMcpAppThemeBootstrap, om as VcsUnsupportedOperationError, on as layerObserver, oo as managedWorktreesDirectories, op as EnvironmentCloudEndpointUnavailableError, or as codexRateLimitsToLimits, os as aexists, ot as ManagedProjectFolders, ou as DEFAULT_SIGNAL_EXPORT, p_ as ClientDeviceType, pa as ProjectEnrichmentService, pc as writeFileStringAtomically, pd as AssetWorkspaceContextNotFoundError, pf as changes, pg as ORCHESTRATION_PROTOCOL_HEADER, ph as HttpServerError, pi as layerFromProviderInstanceRegistry, pl as BUILT_IN_THEME_IDS, pm as isSecurity, pn as layer$174, po as orchestrationEffectClaimsTotal, pp as EnvironmentHttpUnauthorizedError, pr as ModelManifest, ps as base64UrlDecodeUtf8, pt as layer$169, pu as makeTraceSink, q as ScheduledTaskWebhookOrigin, qa as realpathOrSelf$2, qc as parseAttachmentFileExtension, qd as ServerSettings, qg as getStatusErrorSchema, qh as bodyStream, qi as checkpointRefForScopeOrdinal, ql as serviceStateHasPendingUpdate, qm as schemaHeaders, qn as layer$159, qo as PreviewBrowserSandboxError, qp as ProjectMutation, qr as layer$148, qs as CLOUD_MINT_PUBLIC_KEY, qt as RuntimePolicyV2, qu as WS_METHODS, r_ as AcpRegistryOperationError, ra as parseTurnDiffFilesFromNumstat, rc as isAgentActivityPublishingEnabledValue, rd as AssetAttachmentNotFoundError, rf as PreviewStreamHostSetup, rg as ignore$1, rh as make$74, ri as AgentScope, rl as toolOutputImages, rm as PullRequestOperationError, rn as selectInheritedBackgroundTurnItems, ro as jjCommand, rp as EnvironmentAuthInvalidError, rr as normalizePreviewUrl, rs as sha512, rt as ThreadLaunchService, ru as resolveLatestProviderVersion, s_ as ProviderInstanceId, sa as PeerHubClient, sc as resolveHostCliCommand, sd as AssetProjectFaviconInspectionError, sf as KeybindingsConfigError, sg as layerWeak, sh as SocketOpenError, si as layer$125, sl as mcpAppToolCallableByApp, sm as OrchestrationGetFullThreadDiffError, sn as layer$126, so as GitVcsDriver, sp as EnvironmentHttpApi, sr as layer$188, ss as ahash, st as layer$133, su as OtlpHeadersFromString, t_ as hasBody, ta as layer$145, tc as encodeConfirmedOriginJson, td as SERVER_BROWSER_AUTOMATION_CLIENT_ID, tf as PREVIEW_VIEWPORT_PRESET_IDS, tg as isHttpClientError, th as toPersisted, ti as AnalyticsService, tl as MAX_TOOL_OUTPUT_IMAGE_BASE64_LENGTH, tm as RuntimeMode, tn as canRouteRelatedSubagent, to as exactStringPattern, tp as DesktopBackendBootstrap, tr as providerAuthReturnUrl, ts as sha256, tt as make$85, tu as enrichProviderSnapshotWithVersionAdvisory, u_ as AuthSessionId, ua as ProjectOperationError, uc as isSecretAlreadyExistsError, ud as AssetSigningKeyLoadError, uf as QuitError, ug as uint8Array, uh as fromWebSocket, ui as makeProviderFailure, ul as compileResolvedKeybindingsConfig, um as ChatAttachmentId, un as PROJECT_FAVICON_FALLBACK_MARKER, uo as layer$146, up as EnvironmentHttpConflictError, ur as makeEventNdjsonLogStore, us as concatBytes$1, ut as SourceControlRepositoryService, uu as decodeOtlpTraceRecords, v as pullRequestSyncKey, v_ as DpopFailureReason, va as ProjectFaviconResolver, vc as ensureServerDirectories, vd as AgentSessionImportProjectChangedError, vf as map$7, vg as AuthAccessWriteScope, vh as symbol, vi as awaitingProviderThreadId, vl as threadPullRequestKeysEqual, vm as RouteContext, vn as layer$166, vo as withMetrics, vp as EnvironmentScopeRequiredError, vr as AntigravityInstallation, vs as resolveSessionCookieName, vt as userBases, vu as fromConfig, w as remoteSshDeviceHosts, w_ as PositiveInt, wa as layer$117, wc as parsePersistedServerObservabilitySettings, wd as OrchestrationSearchThreadsError, wf as ConfigError, wg as AuthFilesystemWriteScope, wh as file, wi as isRestartNoteContinuation, wl as EventStoreV2, wm as use, wn as layer$170, wo as run$4, wp as RelayHookDeliveryProofPayload, wr as isWorkspaceImagePreviewPath, ws as layerIdentity, wt as AgentAwarenessRelay, wu as collectUint8StreamText, x as DeviceService, x_ as MessageId, xa as WorkspacePaths, xc as otlpResource, xd as AgentSessionScanError, xf as isSqlError, xg as AuthEnvironmentMaintainScope, xh as make$73, xi as cancelledTurnItemWork, xl as siblingPullRequestUrl, xm as middleware, xn as layerAnalytics, xo as normalizeGitRemoteUrl, xp as RelayCloudMintCredentialProofPayload, xr as WORKSPACE_IMAGE_PREVIEW_EXTENSIONS, xs as ServerEnvironment, xt as PeerCoordination, xu as layerFlusher, y as layer$196, y_ as EventId, ya as layer$141, yc as layer$100, yd as AgentSessionImportProjectNotFoundError, yf as SqlClient, yg as AuthClientMetadataDeviceType, yh as toResponse, yi as cancelledBeforeStart, yl as visibleThreadPullRequests, ym as add$2, yn as layer$165, yo as resolveProjectSettings, yp as RelayApi, yr as formatThreadTitleContext, ys as signPayload, yt as MCP_CLIENTS, yu as serviceNameUnsafe, z as layer$178, z_ as withAttributes, za as layerPruneWorker, zc as THREAD_HISTORY_PAGE_POLICY, zd as ProviderUploadFeedbackError, zf as get$1, zg as AuthTerminalOperateScope, zh as filterStatusOk, zi as historicalMessage, zl as SERVICE_RESTART_PENDING_FILE, zm as toHandled, zn as layer$186, zo as layer$104, zp as OrchestrationV2ThreadLaunchError, zr as AcpRegistryRuntimeCoordinator, zs as fromReadable, zt as ThreadManagementService, zu as cliReleaseChannelOf } from "./McpHttpServer-FYeLgJUA.mjs";
5
+ import { $ as forEach, $i as hasInterrupts, $t as runPromise, Ai as isSuccess, Ar as empty$3, As as findFirst, At as matchEffect, B as filter, Bc as Number$3, Bn as withTracerEnabled, Bo as fromInput$2, Br as tap$1, Bt as promise, C as catchTag, Cc as getOrElse, Cn as tryPromise, Cu as dual, D as context, Dc as isNone, Dl as assignProperty, Dr as effect, Ds as ensure, Dt as match$2, Ec as getOrUndefined, Es as empty$1, Et as mapErrorEager, Eu as memoize, F as exit, Fc as orElse, Fl as equals, Fn as withErrorReporting, Fr as provideMerge, G as findFirst$1, Gi as fail$4, Gr as close, Gs as match$1, Hi as combine$1, Hn as zip, Ho as hours, Hr as Scope, Ht as provideContext, I as fail$2, Ic as some, In as withFiber$1, Ir as succeed$3, It as option, Ji as findErrorOption, Jl as compose, Jr as forkUnsafe, Kt as raceFirst, L as failCause, Lc as toArray, Lt as orDie, M as die, Mc as map$4, Mn as void_, Mo as encode$1, Mr as merge$1, Ms as findLast, Mt as onError, Nc as match, Ni as void_$1, Nr as mergeAll, Ns as flatMapNullishOr, Nt as onExit, On as uninterruptible, Oo as Tracer, Or as effectContext, Os as filter$2, Ot as matchCauseEffect, Ou as pipe, P as ensuring, Pc as none$1, Pr as provide$1, Qa as fnUntraced, Qo as minutes$1, Qr as CurrentLogAnnotations, Qt as runForkWith, Rn as withParentSpan, Ro as days, Rt as orElseSucceed, S as catchReason, Sc as fromUndefinedOr, Sn as timeoutOrElse, Ss as Prototype, St as map$3, T as catch_, Tc as getOrThrow$1, To as MinimumTraceLevel, Tt as mapError, Tu as identity, Ui as die$1, Un as zipWith, Uo as infinity, Ur as addFinalizer, Ut as provideService, Vn as yieldNow, Vo as fromInputUnsafe, Vr as unwrap, Vt as provide, W as filterOrFail, Wr as addFinalizerExit, Ws as map$5, X as fn, Xi as fromReasons, Xo as millis, Xt as retry, Yl as hasProperty, Yr as make$69, Ys as sort, Yt as result, Z as fnUntraced$1, Zo as min, Zr as provide$2, Zt as runFork, _ as catchCauseIf, _c as firstSomeOf, _i as make$68, _o as sync$1, _s as getUnsafe, a as all, ac as getOrUndefined$1, ai as UnhandledLogLevel, an as scoped, as as toMinutes, b as catchFilter, ba as ConsoleRef, bi as succeed$4, bn as timeout, bs as merge$2, bt as logWithLevel, c as annotateLogs, cc as isSuccess$1, ci as done, cl as isEffect, cn as serviceOption, cr as jittered, cs as Reference, ct as ignore, d as asSome, di as failCause$1, dl as withFiber, dn as succeedNone, ds as empty$2, dt as interruptible, du as isTagged, ea as hasInterruptsOnly, ei as CurrentLogSpans, en as runPromiseWith, et as forever, f as asVoid, fc as succeed$2, fn as succeedSome, fr as spaced, ft as isEffect$1, g as catchCause, ga as prettyErrors, gc as filter$1, gn as tapCause, gt as logError, gu as cast, h as callback, ha as pretty, hc as exists$1, hi as isDone, hl as Class$1, hn as tap, hr as upTo, ht as logDebug, i as addFinalizer$1, ic as getOrThrow, ii as TracerTimingEnabled, in as scope, is as toMillis, it as forkScoped, j as delay, ji as match$3, jr as launch, js as findFirstIndex, jt as never, ju as pipeArguments, k as currentParentSpan, ka as consolePretty$1, kc as isSome, ki as isFailure, kr as effectDiscard, ks as filterMap, l as annotateLogsScoped, ln as sleep$1, lr as modifyDelay, ls as Service, lt as ignoreCause, mc as contains, mn as sync$2, mt as log$1, n as acquireRelease, nc as failVoid, ni as MinimumLogLevel, nn as runSyncExit, ns as sum, nt as forkDetach, o as andThen, oc as isFailure$1, oi as _await, ot as fromResult, ou as isObject, p as cached, pn as suspend, q as flatMap$1, qc as make$67, qs as reduce, qt as repeat, r as acquireUseRelease, ri as TracerEnabled, rn as runSyncWith, ro as loggerMake, rr as exponential, rt as forkIn, ru as isNotUndefined, s as annotateCurrentSpan, si as die$2, ss as zero, st as gen$1, tc as fail$3, tn as runSync, ts as seconds, tu as isNotNull, u as as, ui as fail$5, un as succeed$1, us as add$1, ut as interrupt, v as catchDefect, va as squash, vc as flatMap$2, vi as makeUnsafe$1, vl as format, vn as tapError, vo as tracerLogger$1, vs as make$66, vt as logInfo, w as catchTags, wc as getOrNull, wn as try_, wr as build, wu as flow, x as catchIf, xa as CurrentLoggers$1, xc as fromNullishOr, xn as timeoutOption, xs as omit, xu as constVoid, yc as flatten, ys as makeUnsafe$2, yt as logWarning, zn as withSpan, zo as format$1, zr as sync$3, zs as isReadonlyArrayNonEmpty, zt as partition } from "./Effect-DXlc4A9S.mjs";
6
+ import { $ as SecretRequests, $a as workspaceNameForRef, $c as projectDomainEventForWire, $d as FILL_PREVIEW_VIEWPORT, $f as DesktopBrowserEvent, $g as isWithHeaders, $h as setHeader$1, $i as layer$151, $l as ProcessRunner, $m as limitsServices, $n as codexAuthorizationRequest, $o as layer$103, $p as DEFAULT_PROVIDER_INTERACTION_MODE, $r as firstNonEmptyLine, $s as decodeConfirmedOrigin, $t as layer$122, $u as UsageReadError, A as layer$184, A_ as RunId, Aa as EventSinkV2, Ac as load, Ad as environmentThemeFileHasColors, Af as String$7, Ag as AuthOrchestrationOperateScope, Ah as redirect, Ai as restartContinuationNote, Al as PersistenceSqlError, Am as withScope, An as layer$132, Ao as PeerBrokerKind, Ap as toRouterPath, Ar as NoOpProviderEventLoggers, As as layer$156, At as RELAY_HOOK_DELIVERY_TYP, Au as resolveCommandPath, B as coreLayer, B_ as bytes, Ba as ServerActivation, Bc as THREAD_HISTORY_SNAPSHOT_ROW_LIMIT, Bd as AntigravitySettings, Bf as invalidate, Bg as AuthTerminalReadScope, Bh as MaxBodySize, Bi as historyCost, Bl as SERVICE_STATE_FILE, Bm as TracerDisabledWhen, Bn as layer$162, Bo as withLocalTracing, Bp as OrchestrationV2ThreadShell, Br as PtyAdapter, Bs as pipeThroughDuplex, Bt as ThreadTranscriptTooLargeError, Bu as cliReleaseIndexPageUrl, C as stateStream, C_ as PortSchema, Ca as ThreadCommandExecutor, Cc as version, Cd as FilesystemBrowseError, Cf as Boolean$5, Cg as AuthFilesystemReadScope, Ch as empty$4, Ci as isRestartContinuationSource, Cl as sourceControlRepositorySelector, Cm as serve, Cn as layer$171, Co as parseOriginUrlFromGitConfig, Cp as RelayEnvironmentLinkResponse, Cr as hostPreviewMimeTypeFromExtension, Cs as layer$182, Ct as idFromName, Cu as modelSelectionsEqual, D as PreviewAutomationBroker, D_ as ProviderThreadId, Da as IdAllocatorV2, Dc as fromJsonStringPretty, Dd as EnvironmentThemeFile, Df as NonEmptyString, Dg as AuthMcpClientAccess, Dh as jsonUnsafe, Di as neverStarted, Dl as OrchestrationEventStore, Dm as HttpClient, Dn as ProviderRegistry, Do as resolveCodexHomeLayout, Dp as RelayOkResponse, Dr as endOrphanedNativeSubagent, Ds as ServiceLauncherClient, Dt as RELAY_HEALTH_REQUEST_TYP, Du as mergePathEntries, E as layer$197, E_ as ProviderSessionId, Ea as layer$113, Ec as decodeJsonResult, Ed as GitCommandError, Ef as LogLevel$1, Eg as AuthMcpApprovalError, Eh as isHttpServerResponse, Ei as mergeRestartCancelledBackgroundWork, El as layerFromOrchestrationEventStore, Em as make$75, En as layer$168, Eo as withoutCredentials, Ep as RelayManagedEndpointRecoveryResponse, Er as makeUnavailableUsageLimits, Es as layer$199, Et as getOrCreateEnvironmentKeyPairFromSecretStore, Eu as listLoginShellCandidates, F as issueAttachmentUploadUrl, F_ as decodeString$1, Fa as EffectOutboxV2, Fc as ProjectionStoreThreadNotFoundError, Fd as ExternalLauncherUnknownEditorError, Ff as option$1, Fg as AuthRelayWriteScope, Fh as stream$2, Fi as attachmentTokenAllowance, Fl as void_$2, Fm as set$2, Fn as layer$153, Fo as waitForSocketGone, Fp as OrchestrationV2GetShellSnapshotError, Fr as layerJson, Fs as ServerSettingsService, Ft as normalizeRelayIssuer, Fu as make$72, G as peerPlugins, Ga as PeerState, Gc as chatAttachmentStableKey, Gd as DEFAULT_PROVIDER_HEALTH_REFRESH_INTERVAL, Gf as BUILT_IN_BROWSER_PROFILES, Gg as getResponseEncoding, Gh as bodyJson, Gi as layer$129, Gl as parseServiceState, Gm as TypeId$6, Gn as layer$191, Go as NO_SANDBOX_SIGNATURE, Gp as OrchestrationProjectShell, Gr as layer$137, Gs as CLOUD_LINKED_USER_ID, Gt as layer$128, Gu as clientRpcRequiredScopes, H as rpcLayer, Ha as forkParkedFiber, Hc as decodeThreadHistoryCursor, Hd as CodexSettings, Hf as makeWith, Hg as ServerAuthSessionMethod, Hh as inspect$1, Hi as renderHistory, Hl as compareExactServiceVersions, Hm as fromHeaders, Hn as layer$157, Ho as APPARMOR_PROFILE, Hp as latestProviderTurnForAttempt, Hr as layer$190, Hs as toUint8Array, Ht as layerWithLegacyImporter, Hu as RequestInit, I as storeAttachmentUpload, I_ as encode$2, Ia as PROCESS_BOUND_EFFECT_TYPES, Ic as ProjectionStoreV2, Id as ExternalLauncherUnsupportedEditorError, If as schema, Ig as AuthSettingsWriteScope, Ih as text$1, Ii as contextUsageForHandoff, Il as layer$94, Im as update, In as PortDiscovery, Io as EXIT_STATUS, Ip as OrchestrationV2GetThreadProjectionError, Ir as AcpRegistryCatalog, Is as layer$144, It as signRelayJwt, Iu as ChildProcessSpawner, J as WEBHOOK_ROUTE_PREFIX, Ja as remoteOf, Jc as resolveAttachmentPathById, Jd as ServerSettingsError, Jf as findBrowserProfile, Jg as getStatusSuccessSchema, Jh as bodyUrlParams, Ji as layer$119, Jl as PinnedRuntimeInstallError, Jm as schemaSearchParams, Jn as layer$160, Jo as SETUP_SUBCOMMAND, Jp as ProjectMutationError, Jr as BUILT_IN_SOURCE_CONTROL_DRIVERS, Js as HOLD_WEBHOOKS_WHILE_OFFLINE_SECRET, Jt as layerFromProjectStore, Ju as WsRpcGroup, K as ScheduledTaskService, Ka as layer$106, Kc as createDeterministicAttachmentId, Kd as DEFAULT_SERVER_SETTINGS, Kg as getResponseEncodingSchema, Kh as bodyJsonUnsafe, Ki as CheckpointServiceV2, Kl as serviceStateActiveVersion, Km as schemaCookies, Kn as layer$192, Ko as PreviewBrowserLibrariesError, Kp as ProjectListEntriesError, Kr as SourceControlProviderRegistry, Ks as CLOUD_LINK_REVOKED, Kt as layer$131, Ku as RpcScopeAuthorization, L as validateAttachmentUploadToken, L_ as snapshotUnsafe, La as REPLAY_SAFE_EFFECT_TYPES_AFTER_PROCESS_LOSS, Lc as layer$96, Ld as ExternalLauncherUnsupportedTargetError, Lf as withDefault$2, Lg as AuthSourceControlWriteScope, Lh as uint8Array$1, Li as handoffBudget, Ll as readOnly, Lm as updateAndGet, Ln as layer$176, Lo as make$76, Lp as OrchestrationV2ProviderSessionJson, Lr as layerFromHost, Ls as redactServerSettingsForClient, Lt as verifyRelayJwt, Lu as CLI_RELEASE_BASE_URL_ENV, M as launchThread, M_ as ThreadId, Ma as layer$112, Mc as resolveSignalEndpoint, Md as ExternalLauncherBrowserSpawnError, Mf as all$1, Mg as AuthPreviewOperateScope, Mh as setBody, Mi as ContextHandoffServiceV2, Ml as makeLiveStreamBudget, Mm as getAndSet, Mn as layer$177, Mo as coreLaunchCommand, Mp as OrchestrationGetWorkflowScriptError, Mr as Protocol, Ms as layer$154, Mt as RELAY_MANAGED_TUNNEL_RECOVERY_TYP, Mu as resolveWindowsEnvironment, N as ATTACHMENT_UPLOAD_ROUTE_PREFIX, N_ as TurnItemId, Na as ProjectStoreV2, Nc as NetService, Nd as ExternalLauncherCommandNotFoundError, Nf as map$6, Ng as AuthProvidersManageScope, Nh as setHeader, Ni as layer$120, Nl as findAll, Nm as make$71, Nn as NativeTelemetryClient, No as readOwner, Np as OrchestrationV2AppThreadJson, Nr as make$81, Ns as writeAllToFileDescriptor, Nt as RELAY_MINT_REQUEST_TYP, Nu as setWindowsPath, O as layer$198, O_ as ProviderTurnId, Oa as deriveThreadFromProviderThread, Oc as fromLenientJson, Od as EnvironmentThemeId, Of as Port, Og as AuthMcpRegistrationError, Oh as mergeCookies, Oi as pendingRestartCancelledBackgroundWork, Ol as layer$108, Om as filterStatusOk$1, On as layer$185, Oo as mergeProviderInstanceEnvironment, Op as RelayProtectedError, Or as endRunlessRootTurns, Os as layer$200, Ot as RELAY_HEALTH_RESPONSE_TYP, Ou as readEnvironmentFromLoginShell, P as deletePendingAttachment, P_ as decode$1, Pa as layer$110, Pc as layer$180, Pd as ExternalLauncherEditorSpawnError, Pf as mapEffect$1, Pg as AuthRelayReadScope, Ph as setHeaders, Pi as DEFAULT_HANDOFF_TOKEN_CAP, Pl as findOneOption, Pm as modify, Pn as layer$152, Po as requestHandover, Pp as OrchestrationV2DispatchCommandError, Pr as makeProtocolWithHttpEffectWebsocket, Ps as subscribeBeforeSnapshot, Pt as RELAY_MINT_RESPONSE_TYP, Pu as withPathDirectoryListings, Q as layer$138, Qa as resolveWorkspaceRefName, Qc as normalizeProjectPathForComparison, Qd as resolveProviderInstanceEnabled, Qf as DesktopBrowserCommand, Qg as isStreamUint8Array, Qh as post, Qi as layer$150, Ql as pinnedRuntimeVersionsDir, Qm as isPersistedFile, Qn as makeCodexChatGptAuth, Qo as sandboxDisabled, Qp as ProjectWriteFileError, Qr as detailFromCause, Qs as RELAY_URL_SECRET, Qt as CommandOutputHub, Qu as Service$1, R as PreviewManager, R_ as update$1, Ra as layer$111, Rc as InvalidThreadHistoryCursorError, Rd as ProviderSetupError, Rf as SourceError, Rg as AuthStandardClientScopes, Rh as urlParams, Ri as handoffTokenCapConfig, Rl as SERVICE_LAUNCHER_CONTEXT_ENV, Rm as appendPreResponseHandler, Rn as deriveProviderInstanceConfigMap, Ro as RelayClientTracer, Rp as OrchestrationV2SearchThreadError, Rr as toAcpRegistryOperationError, Rs as decode$2, Rt as makeDrainableWorker, Ru as CLI_RELEASE_CHANNELS, S as layer$179, S_ as NonNegativeInt, Sa as layer$142, Sc as resolveStaticDir, Sd as AgentSessionSource, Sf as Crypto, Sg as AuthEnvironmentScopes, Sh as getType, Si as isAwaitedWork, Sl as canonicalRepositoryKey, Sm as route, Sn as GitWorkflowService, So as parseGitHubRepositoryNameWithOwnerFromRemoteUrl, Sp as RelayEnvironmentLinkChallengeResponse, Sr as audioMimeTypeFromExtension, Ss as ServerEnvironmentIdentity, St as PeerWorkspaces, Su as make$70, T as PreviewBrowser, T_ as ProjectId, Ta as LegacyV1ThreadImporter, Tc as resolveServerBackgroundActivitySettings, Td as OrchestrationDispatchCommandError, Tf as Int$6, Tg as AuthGrantScope, Th as html, Ti as isRestartNoteSource, Tl as layer$95, Tm as HttpServer, Tn as GitManager, To as matchRepositories, Tp as RelayManagedEndpointRecoveryRegistrationResponse, Tr as isWorkspacePreviewEntryPath, Ts as ServerSelfUpdate, Tt as layer$183, Tu as isCommandAvailable, U as PeerAdapters, Ua as layerFromApplicationReceipts, Uc as PENDING_ATTACHMENT_THREAD_SEGMENT, Ud as DATABASE_COMPACTION_RECOMMENDED_BYTES, Uf as set$3, Ug as authScopeRequiredResponse, Uh as schemaBodyJson, Ui as selectHistory, Ul as decodeServiceLauncherChildMessage, Um as HttpServerRequest, Un as layer$155, Uo as APPARMOR_PROFILE_PATH, Up as ToolActivityNativeAppReference, Ur as withWorkspaceLease, Us as CLOUD_ENDPOINT_CONFIRMED_ORIGIN, Ut as withCreationProvenance, Uu as layer$99, V as layer$105, Va as forkParked, Vc as buildBoundedThreadProjection, Vd as ClaudeSettings, Vf as make$80, Vg as EnvironmentAuthorizationError, Vh as TypeId$4, Vi as latestNativeContextUsage, Vl as SERVICE_STOP_MARKER_FILE, Vm as compression$1, Vn as BackgroundPolicy, Vo as withRelayClientTracing, Vp as isOrchestrationV2WorkActive, Vr as PtySpawnError, Vs as toArrayBuffer, Vt as isTerminalRunStatus, Vu as newestCliReleaseVersion, W as PeerPluginRegistry, Wa as layer$109, Wc as attachmentRelativePath, Wd as DEFAULT_AUTOMATIC_GIT_FETCH_INTERVAL, Wf as nextIntBetween, Wg as authScopeResponse, Wh as bearerToken, Wi as isNativeMaintenanceCommand, Wl as isExactServiceVersion, Wm as ParsedSearchParams, Wn as BUILT_IN_USAGE_DRIVERS, Wo as DEBIAN_PACKAGES, Wp as UsageLimitSourceError, Wr as TextGeneration, Ws as CLOUD_ENDPOINT_RUNTIME_CONFIG, Wt as OrchestratorV2, Wu as CLIENT_GUARDED_RPC_SCOPES, X as relayHookBaseUrl, Xa as resolveJjRepoPaths, Xc as runRanAfter, Xd as requiredScopesForProjectMutation, Xf as DesktopAppActivationErrorCode, Xg as isNoContent, Xh as get$2, Xi as layer$175, Xl as pinnedRuntimeCommand, Xm as MultipartError, Xn as sameUsageLimitCommandCoverage, Xo as missingLibraries, Xp as ProjectSearchContentsError, Xr as GitHubCredentials, Xs as RELAY_ENVIRONMENT_CREDENTIAL_SECRET, Xt as ProviderSessionManagerV2, Xu as PEER_RPC_SCOPES, Y as layer$136, Ya as checkoutKind, Yc as parseBase64DataUrl, Yd as ServerSettingsPatch, Yf as resolveBrowserProfiles, Yg as getWithHeadersAnnotation, Yh as del, Yi as CheckpointStore, Yl as ensurePinnedRuntimeInstalled, Ym as toURL, Yn as layer$161, Yo as diagnoseLaunchFailure, Yp as ProjectReadFileError, Yr as layer$149, Ys as PUBLISH_AGENT_ACTIVITY_SECRET, Yt as layer$121, Yu as WsT3RpcGroup, Z as Scheduler, Za as invalidateJjAvailability, Zc as projectComposerContextForProvider, Zd as requiredScopesForServerSettingsPatch, Zf as DesktopAppActivationResponse, Zg as isStreamSchema, Zh as make$82, Zi as VcsDriverRegistry, Zl as pinnedRuntimePaths, Zm as TypeId$5, Zn as withUsageLimitsCommands, Zo as sandboxBlocked, Zp as ProjectSearchEntriesError, Zr as layer$167, Zs as RELAY_ISSUER_SECRET, Zt as layer$123, Zu as PEER_LOCAL_WORKSPACE, _ as layer$195, __ as CommandId, _a as make$84, _c as deriveServerPaths, _d as AssetWorkspaceRootNormalizationError, _f as Stdio, _g as AuthAccessTokenType, _h as causeResponse, _i as isUndeliveredMailboxSteer, _l as threadPullRequestKeyOf, _m as normalize, _n as layer$164, _o as webhookDeliveriesTotal, _p as EnvironmentResourceNotFoundError, _r as layer$158, _s as resolveLegacySessionCookieName, _t as listClients, _u as entriesToAttributes, a_ as DEFAULT_MODEL_BY_PROVIDER, aa as isCheckpointRestoreIsolated, ac as readRelayConnection, ad as AssetGitHubMediaUrlValidationError, af as KeybindingRule, ag as layer$147, ah as CloseEvent, al as injectMcpAppCookieBootstrap, am as VcsRepositoryDetectionError, an as layer$127, ao as makeIsManagedWorktreePath, ap as EnvironmentAuthenticatedPrincipal, ar as codexPlanLabel, as as abytes$1, at as userFacingDispatchErrorMessage, au as layer$189, b as DEVICE_HUB_ROUTE_PREFIX, b_ as IsoDateTime, ba as layer$143, bc as make$77, bd as AgentSessionImportSource, bf as SpanPropagationEnabled, bg as AuthDiagnosticsReadScope, bh as HttpPlatform, bi as cancelledRosterTaskWork, bl as parseChangeRequestUrl, bm as cors, bn as layer$116, bo as resolveWorktreeCleanup, bp as RelayCloudEnvironmentHealthProofPayload, br as WORKSPACE_BROWSER_PREVIEW_EXTENSIONS, bs as timingSafeEqualBase64Url, bt as mcpClient, bu as unknownToAttributeValue, c_ as ProviderInstanceMutation, ca as pluginMcpServers, cc as resolveRootCliCommand, cd as AssetProjectFaviconNotFoundError, cf as ResolvedKeybindingRule, cg as raw, ch as WebSocket$1, ci as layer$201, cl as DEFAULT_KEYBINDINGS, cm as OrchestrationGetTurnDiffError, cn as WorkspaceEntries, co as layer$118, cp as EnvironmentHttpBadRequestError, cr as EMPTY_TOTALS, cs as anumber, ct as ProjectCloneTracker, cu as OtlpProtocol, d_ as CheckpointId, da as ProjectService, dc as isSecretStoreError, dd as AssetWorkspaceAssetInspectionError, df as Terminal, dg as FileSystem, dh as makeWebSocket$1, di as ProviderContinuationRequests, dl as mergeWithDefaultKeybindings, dm as PROVIDER_SEND_TURN_MAX_FILE_BYTES, dn as isProjectFaviconPath, do as increment, dp as EnvironmentHttpForbiddenError, dr as readContainedWorkflowFile, ds as randomBytes, dt as layer$172, du as layerOtlpSerialization, e_ as isWithHeadersValue, ea as JjVcsDriver, ec as decodeRuntimeConfig, ed as PREVIEW_AUTOMATION_SERVER_OPERATIONS, ef as PREVIEW_STREAM_HOST_SETUP_CLOSE_CODE, eg as setHeaders$1, eh as makeConfig, ei as PullRequestProviderError, el as projectThreadProjectionForWire, en as RunExecutionServiceV2, eo as make$79, ep as DESKTOP_UPDATE_RESTART_MARKER_FILE, er as codexCallbackUrl, es as layer$101, et as layer$135, eu as layer$98, f_ as ClientConnectionMethod, fa as layer$114, fc as layer$97, fd as AssetWorkspaceAssetNotFoundError, ff as isQuitError, fg as ExecutionEnvironmentDescriptor, fh as ClientAbort, fi as layer$130, fl as parseKeybindingShortcut, fm as PersistChatAttachmentsError, fn as VcsStatusBroadcaster, fo as metricAttributes, fp as EnvironmentHttpInternalServerError, fr as BUNDLED_MODEL_MANIFEST, fs as toBytes, ft as WorktreeSetupTracker, fu as makeLocalFileTracer, g as PullRequestReviewGuideService, g_ as ClientWebDeployment, ga as layer$140, gc as ServerConfig, gd as AssetWorkspaceResolutionError, gf as set$1, gg as AuthAccessStreamError, gh as ServeError, gi as isBufferedProviderNotification, gl as normalizeThreadPullRequestKey, gm as getSuccessSchemas, gn as layer$163, go as rpcRequestsTotal, gp as EnvironmentRequestInvalidError, gr as resolveProviderCompatibility, gs as isRemoteReachableHost, gt as layer$107, gu as OtlpSerialization, h_ as ClientSurface, ha as RepositoryIdentityResolver, hc as RuntimeMode$1, hd as AssetWorkspacePathValidationError, hf as make$78, hg as AuthAccessReadScope, hh as ResponseError, hi as ProviderInstanceRegistry, hl as legacyThreadPullRequestKey, hm as getErrorSchemas, hn as PullRequestService, ho as rpcRequestDuration, hp as EnvironmentOperationForbiddenError, hr as layerModelCatalog, hs as deriveAuthClientMetadata, ht as ensureShim, hu as make$83, i as layer$194, i_ as DEFAULT_MODEL, ia as SHARED_WORKSPACE_RESTORE_MESSAGE, ic as readHoldWebhooksWhileOffline, id as AssetCreateUrlInput, if as PreviewViewportSetting, ig as isIgnored, ih as Path, ii as agentScopeCommand, il as MCP_APP_MAX_HTML_BYTES, im as pullRequestHostOf, in as RunFinalizationService, io as isFilesystemRoot, ip as EnvironmentAuthenticatedAuth, ir as CodexInstallation, is as Hash, it as layer$134, iu as ProviderLatestVersions, j as dispatchCommand, j_ as RuntimeRequestId, ja as layerFromStores, jc as none$2, jd as EDITORS$1, jf as URL$1, jg as AuthOrchestrationReadScope, jh as removeHeader, ji as reportLabel, jl as bufferLiveStream, jm as get, jn as TerminalManager, jo as coordSocketPath, jp as ORCHESTRATION_V2_WS_METHODS, jr as ProviderEventLoggers, js as DesktopTelemetryReceiver, jt as RELAY_LINK_PROOF_TYP, ju as resolveSpawnCommand, k as ThreadSearch, k_ as RpcClientId, ka as layer$115, kc as layerResourceAttributes, kd as ServerProviderUpdateError, kf as Redacted, kg as AuthMcpTokenError, kh as raw$1, ki as restartCancelledBackgroundWorkNote, kl as PersistenceDecodeError, km as mapRequest, kn as ProjectSetupScriptRunner, ko as expandHomePath$1, kp as fromApi, kr as PluginMcpServers, ks as runServicePreflight, kt as RELAY_HOOK_DELIVERY_HEADER, ku as readPathFromLaunchctl, l_ as defaultInstanceIdForDriver, la as ProjectConflictError, lc as ServerSecretStore, ld as AssetProjectFaviconResolutionError, lf as getCurrentVersion, lg as stream$1, lh as WebSocketConstructor, li as ContextHandoffBudgetError, ll as compileResolvedKeybindingRule, lm as OrchestrationGetTurnDiffResult, ln as layer$181, lo as VcsProcess, lp as EnvironmentHttpCommonError, lr as claudeUsageResponseToLimits, ls as clean, lt as layer$173, lu as causeErrorTag, m_ as ClientOs, ma as layer$139, mc as DEFAULT_PORT, md as AssetWorkspaceContextResolutionError, mf as get$3, mg as ORCHESTRATION_PROTOCOL_QUERY_PARAM, mh as RequestParseError, mi as ProviderAdapterTurnStartError, ml as UNPUBLISHABLE_THEME_IDS, mm as getSlotParseOptions, mn as layerAutoPullPolicy, mo as orchestrationEffectQueueWait, mp as EnvironmentInternalError, mr as layer$187, ms as base64UrlEncode, mt as McpClients, mu as RotatingFileSink, n as McpClientAuthenticator, n_ as encoder, na as isGitImport, nc as encodeEndpointRuntimeConfigJson, nd as McpAppRequestError, nf as PreviewClearProfileError, ng as TypeId$7, nh as decodeField, ni as layer$193, nl as mcpAppFromToolItem, nm as PullRequestLinkedThreadsResult, nn as layer$124, no as colocatedGitCommand, np as RelayClientInstallFailedError, nr as isLoopbackHost$1, ns as sha384, nt as threadHasQueuedTurnStart, nu as makeTargetedProviderUpdateAction, o_ as ProviderDriverKind, oa as PeerWork, oc as resolveCliCommand, od as AssetPreviewTypeValidationError, of as KeybindingsConfig, og as layer$102, oh as SocketError, oi as McpAppModelContext, ol as injectMcpAppThemeBootstrap, om as VcsUnsupportedOperationError, on as layerObserver, oo as managedWorktreesDirectories, op as EnvironmentCloudEndpointUnavailableError, or as codexRateLimitsToLimits, os as aexists, ot as ManagedProjectFolders, ou as DEFAULT_SIGNAL_EXPORT, p_ as ClientDeviceType, pa as ProjectEnrichmentService, pc as writeFileStringAtomically, pd as AssetWorkspaceContextNotFoundError, pf as changes, pg as ORCHESTRATION_PROTOCOL_HEADER, ph as HttpServerError, pi as layerFromProviderInstanceRegistry, pl as BUILT_IN_THEME_IDS, pm as isSecurity, pn as layer$174, po as orchestrationEffectClaimsTotal, pp as EnvironmentHttpUnauthorizedError, pr as ModelManifest, ps as base64UrlDecodeUtf8, pt as layer$169, pu as makeTraceSink, q as ScheduledTaskWebhookOrigin, qa as realpathOrSelf$2, qc as parseAttachmentFileExtension, qd as ServerSettings, qg as getStatusErrorSchema, qh as bodyStream, qi as checkpointRefForScopeOrdinal, ql as serviceStateHasPendingUpdate, qm as schemaHeaders, qn as layer$159, qo as PreviewBrowserSandboxError, qp as ProjectMutation, qr as layer$148, qs as CLOUD_MINT_PUBLIC_KEY, qt as RuntimePolicyV2, qu as WS_METHODS, r_ as AcpRegistryOperationError, ra as parseTurnDiffFilesFromNumstat, rc as isAgentActivityPublishingEnabledValue, rd as AssetAttachmentNotFoundError, rf as PreviewStreamHostSetup, rg as ignore$1, rh as make$74, ri as AgentScope, rl as toolOutputImages, rm as PullRequestOperationError, rn as selectInheritedBackgroundTurnItems, ro as jjCommand, rp as EnvironmentAuthInvalidError, rr as normalizePreviewUrl, rs as sha512, rt as ThreadLaunchService, ru as resolveLatestProviderVersion, s_ as ProviderInstanceId, sa as PeerHubClient, sc as resolveHostCliCommand, sd as AssetProjectFaviconInspectionError, sf as KeybindingsConfigError, sg as layerWeak, sh as SocketOpenError, si as layer$125, sl as mcpAppToolCallableByApp, sm as OrchestrationGetFullThreadDiffError, sn as layer$126, so as GitVcsDriver, sp as EnvironmentHttpApi, sr as layer$188, ss as ahash, st as layer$133, su as OtlpHeadersFromString, t_ as hasBody, ta as layer$145, tc as encodeConfirmedOriginJson, td as SERVER_BROWSER_AUTOMATION_CLIENT_ID, tf as PREVIEW_VIEWPORT_PRESET_IDS, tg as isHttpClientError, th as toPersisted, ti as AnalyticsService, tl as MAX_TOOL_OUTPUT_IMAGE_BASE64_LENGTH, tm as RuntimeMode, tn as canRouteRelatedSubagent, to as exactStringPattern, tp as DesktopBackendBootstrap, tr as providerAuthReturnUrl, ts as sha256, tt as make$85, tu as enrichProviderSnapshotWithVersionAdvisory, u_ as AuthSessionId, ua as ProjectOperationError, uc as isSecretAlreadyExistsError, ud as AssetSigningKeyLoadError, uf as QuitError, ug as uint8Array, uh as fromWebSocket, ui as makeProviderFailure, ul as compileResolvedKeybindingsConfig, um as ChatAttachmentId, un as PROJECT_FAVICON_FALLBACK_MARKER, uo as layer$146, up as EnvironmentHttpConflictError, ur as makeEventNdjsonLogStore, us as concatBytes$1, ut as SourceControlRepositoryService, uu as decodeOtlpTraceRecords, v as pullRequestSyncKey, v_ as DpopFailureReason, va as ProjectFaviconResolver, vc as ensureServerDirectories, vd as AgentSessionImportProjectChangedError, vf as map$7, vg as AuthAccessWriteScope, vh as symbol, vi as awaitingProviderThreadId, vl as threadPullRequestKeysEqual, vm as RouteContext, vn as layer$166, vo as withMetrics, vp as EnvironmentScopeRequiredError, vr as AntigravityInstallation, vs as resolveSessionCookieName, vt as userBases, vu as fromConfig, w as remoteSshDeviceHosts, w_ as PositiveInt, wa as layer$117, wc as parsePersistedServerObservabilitySettings, wd as OrchestrationSearchThreadsError, wf as ConfigError, wg as AuthFilesystemWriteScope, wh as file, wi as isRestartNoteContinuation, wl as EventStoreV2, wm as use, wn as layer$170, wo as run$4, wp as RelayHookDeliveryProofPayload, wr as isWorkspaceImagePreviewPath, ws as layerIdentity, wt as AgentAwarenessRelay, wu as collectUint8StreamText, x as DeviceService, x_ as MessageId, xa as WorkspacePaths, xc as otlpResource, xd as AgentSessionScanError, xf as isSqlError, xg as AuthEnvironmentMaintainScope, xh as make$73, xi as cancelledTurnItemWork, xl as siblingPullRequestUrl, xm as middleware, xn as layerAnalytics, xo as normalizeGitRemoteUrl, xp as RelayCloudMintCredentialProofPayload, xr as WORKSPACE_IMAGE_PREVIEW_EXTENSIONS, xs as ServerEnvironment, xt as PeerCoordination, xu as layerFlusher, y as layer$196, y_ as EventId, ya as layer$141, yc as layer$100, yd as AgentSessionImportProjectNotFoundError, yf as SqlClient, yg as AuthClientMetadataDeviceType, yh as toResponse, yi as cancelledBeforeStart, yl as visibleThreadPullRequests, ym as add$2, yn as layer$165, yo as resolveProjectSettings, yp as RelayApi, yr as formatThreadTitleContext, ys as signPayload, yt as MCP_CLIENTS, yu as serviceNameUnsafe, z as layer$178, z_ as withAttributes, za as layerPruneWorker, zc as THREAD_HISTORY_PAGE_POLICY, zd as ProviderUploadFeedbackError, zf as get$1, zg as AuthTerminalOperateScope, zh as filterStatusOk, zi as historicalMessage, zl as SERVICE_RESTART_PENDING_FILE, zm as toHandled, zn as layer$186, zo as layer$104, zp as OrchestrationV2ThreadLaunchError, zr as AcpRegistryRuntimeCoordinator, zs as fromReadable, zt as ThreadManagementService, zu as cliReleaseChannelOf } from "./McpHttpServer-B3S4zR3w.mjs";
7
7
  import { a as monotonicTimeNanos, i as currentTimeNanos, r as currentTimeMillis, t as Clock } from "./Clock-B88OfuDl.mjs";
8
8
  import { A as fromEffect, Bt as zipLatestWith, Dn as unbounded$1, Dt as tap$2, F as fromPull, Fn as unbounded, G as mapAccum, H as isStream, Hn as interrupt$1, I as fromQueue, J as mapError$1, Jn as runIn, K as mapArrayEffect, Kn as join$1, M as fromIterable, Mn as sliding, Mt as toPull, N as fromIteratorSucceed, Nn as subscribe, On as publish, P as fromPubSub, R as fromSubscription, Rn as makeUnsafe$3, Rt as unfold, S as filterMap$1, Sn as shutdown, St as switchMap, T as flattenIterable, Tn as take, U as make$87, Vn as getCurrent, W as map$8, Y as merge$3, Yn as Order, Z as mkString, Zn as round, _n as offer, b as filter$3, bt as succeed$5, c as changesWith, d as decodeText, dt as runFold, et as orDie$1, fn as fail$7, g as encodeText, gn as make$88, gt as runHead, h as empty$5, i as catchCause$1, in as make$86, it as provideContext$1, jn as shutdown$1, l as concat, lt as runCollect, m as drop, mt as runForEachArray, nt as pipeThroughChannel, pn as failCause$2, pt as runForEach, q as mapEffect$2, r as callback$1, s as changes$1, sn as clear, u as debounce, un as end, v as fail$6, vn as offerAll, w as flatMap$3, wn as sliding$1, wt as takeUntil, x as filterEffect, xt as suspend$1, yn as offerUnsafe, yt as splitLines, z as groupedWithin, zn as awaitAll, zt as unwrap$1 } from "./mcpResponsePayloads-Be_jYC4_.mjs";
9
9
  import { t as runClaudeHistoryWorker } from "./claudeHistoryWorker-qaiupgMM.mjs";
@@ -185,7 +185,7 @@ const consoleWith = (f) => withFiber((fiber) => f(fiber.getRef(Console)));
185
185
  * @category accessors
186
186
  * @since 2.0.0
187
187
  */
188
- const error = (...args) => consoleWith((console) => sync(() => {
188
+ const error = (...args) => consoleWith((console) => sync$1(() => {
189
189
  console.error(...args);
190
190
  }));
191
191
  /**
@@ -219,7 +219,7 @@ const error = (...args) => consoleWith((console) => sync(() => {
219
219
  * @category accessors
220
220
  * @since 2.0.0
221
221
  */
222
- const log = (...args) => consoleWith((console) => sync(() => {
222
+ const log = (...args) => consoleWith((console) => sync$1(() => {
223
223
  console.log(...args);
224
224
  }));
225
225
  /**
@@ -254,7 +254,7 @@ const log = (...args) => consoleWith((console) => sync(() => {
254
254
  * @category accessors
255
255
  * @since 2.0.0
256
256
  */
257
- const warn = (...args) => consoleWith((console) => sync(() => {
257
+ const warn = (...args) => consoleWith((console) => sync$1(() => {
258
258
  console.warn(...args);
259
259
  }));
260
260
  //#endregion
@@ -2205,7 +2205,7 @@ const runWithInput = (prompt, terminal, input) => suspend(() => {
2205
2205
  });
2206
2206
  const runLoop = /*#__PURE__*/ fnUntraced$1(function* (loop, terminal, input) {
2207
2207
  let state = isEffect$1(loop.initialState) ? yield* loop.initialState : loop.initialState;
2208
- let action = Action$1.NextFrame({ state });
2208
+ let action = Action$2.NextFrame({ state });
2209
2209
  let clear = "";
2210
2210
  while (true) {
2211
2211
  const msg = yield* loop.render(state, action);
@@ -2240,7 +2240,7 @@ const runLoop = /*#__PURE__*/ fnUntraced$1(function* (loop, terminal, input) {
2240
2240
  }
2241
2241
  }
2242
2242
  }, (effect, _, terminal) => ensuring(effect, orDie(terminal.display(cursorShow))));
2243
- const Action$1 = /*#__PURE__*/ taggedEnum();
2243
+ const Action$2 = /*#__PURE__*/ taggedEnum();
2244
2244
  /**
2245
2245
  * Clears all lines taken up by the specified `text`.
2246
2246
  */
@@ -2288,7 +2288,7 @@ const renderConfirmSubmission = /*#__PURE__*/ fnUntraced$1(function* (value, opt
2288
2288
  });
2289
2289
  const handleConfirmRender = (options) => {
2290
2290
  return (_, action) => {
2291
- return Action$1.$match(action, {
2291
+ return Action$2.$match(action, {
2292
2292
  Beep: () => succeed$1(renderBeep),
2293
2293
  NextFrame: ({ state }) => renderConfirmNextFrame(state, options),
2294
2294
  Submit: ({ value }) => renderConfirmSubmission(value, options)
@@ -2299,10 +2299,10 @@ const TRUE_VALUE_REGEXP = /^y|t$/;
2299
2299
  const FALSE_VALUE_REGEXP = /^n|f$/;
2300
2300
  const handleConfirmProcess = (input, defaultValue) => {
2301
2301
  const value = getOrElse(input.input, () => "");
2302
- if (input.key.name === "enter" || input.key.name === "return") return succeed$1(Action$1.Submit({ value: defaultValue }));
2303
- if (TRUE_VALUE_REGEXP.test(value.toLowerCase())) return succeed$1(Action$1.Submit({ value: true }));
2304
- if (FALSE_VALUE_REGEXP.test(value.toLowerCase())) return succeed$1(Action$1.Submit({ value: false }));
2305
- return succeed$1(Action$1.Beep());
2302
+ if (input.key.name === "enter" || input.key.name === "return") return succeed$1(Action$2.Submit({ value: defaultValue }));
2303
+ if (TRUE_VALUE_REGEXP.test(value.toLowerCase())) return succeed$1(Action$2.Submit({ value: true }));
2304
+ if (FALSE_VALUE_REGEXP.test(value.toLowerCase())) return succeed$1(Action$2.Submit({ value: false }));
2305
+ return succeed$1(Action$2.Beep());
2306
2306
  };
2307
2307
  const handleDateClear = (options) => {
2308
2308
  return fnUntraced$1(function* (state, _) {
@@ -2357,35 +2357,35 @@ const renderDateSubmission = /*#__PURE__*/ fnUntraced$1(function* (state, option
2357
2357
  });
2358
2358
  const processUp = (state) => {
2359
2359
  state.dateParts[state.cursor].increment();
2360
- return Action$1.NextFrame({ state: {
2360
+ return Action$2.NextFrame({ state: {
2361
2361
  ...state,
2362
2362
  typed: ""
2363
2363
  } });
2364
2364
  };
2365
2365
  const processDown = (state) => {
2366
2366
  state.dateParts[state.cursor].decrement();
2367
- return Action$1.NextFrame({ state: {
2367
+ return Action$2.NextFrame({ state: {
2368
2368
  ...state,
2369
2369
  typed: ""
2370
2370
  } });
2371
2371
  };
2372
2372
  const processDateCursorLeft = (state) => {
2373
2373
  const previous = state.dateParts[state.cursor].previousPart();
2374
- if (isSome(previous)) return Action$1.NextFrame({ state: {
2374
+ if (isSome(previous)) return Action$2.NextFrame({ state: {
2375
2375
  ...state,
2376
2376
  typed: "",
2377
2377
  cursor: state.dateParts.indexOf(previous.value)
2378
2378
  } });
2379
- return Action$1.Beep();
2379
+ return Action$2.Beep();
2380
2380
  };
2381
2381
  const processDateCursorRight = (state) => {
2382
2382
  const next = state.dateParts[state.cursor].nextPart();
2383
- if (isSome(next)) return Action$1.NextFrame({ state: {
2383
+ if (isSome(next)) return Action$2.NextFrame({ state: {
2384
2384
  ...state,
2385
2385
  typed: "",
2386
2386
  cursor: state.dateParts.indexOf(next.value)
2387
2387
  } });
2388
- return Action$1.Beep();
2388
+ return Action$2.Beep();
2389
2389
  };
2390
2390
  const processDateNext = (state) => {
2391
2391
  const next = state.dateParts[state.cursor].nextPart();
@@ -2393,7 +2393,7 @@ const processDateNext = (state) => {
2393
2393
  onNone: () => state.dateParts.findIndex((part) => !part.isToken()),
2394
2394
  onSome: (next) => state.dateParts.indexOf(next)
2395
2395
  });
2396
- return Action$1.NextFrame({ state: {
2396
+ return Action$2.NextFrame({ state: {
2397
2397
  ...state,
2398
2398
  typed: "",
2399
2399
  cursor
@@ -2403,12 +2403,12 @@ const defaultDateProcessor = (value, state) => {
2403
2403
  if (/\d/.test(value)) {
2404
2404
  const typed = state.typed + value;
2405
2405
  state.dateParts[state.cursor].setValue(typed);
2406
- return Action$1.NextFrame({ state: {
2406
+ return Action$2.NextFrame({ state: {
2407
2407
  ...state,
2408
2408
  typed
2409
2409
  } });
2410
2410
  }
2411
- return Action$1.Beep();
2411
+ return Action$2.Beep();
2412
2412
  };
2413
2413
  const defaultLocales = {
2414
2414
  months: [
@@ -2460,7 +2460,7 @@ const defaultLocales = {
2460
2460
  };
2461
2461
  const handleDateRender = (options) => {
2462
2462
  return (state, action) => {
2463
- return Action$1.$match(action, {
2463
+ return Action$2.$match(action, {
2464
2464
  Beep: () => succeed$1(renderBeep),
2465
2465
  NextFrame: ({ state }) => renderDateNextFrame(state, options),
2466
2466
  Submit: () => renderDateSubmission(state, options)
@@ -2479,11 +2479,11 @@ const handleDateProcess = (options) => {
2479
2479
  case "tab": return succeed$1(processDateNext(state));
2480
2480
  case "enter":
2481
2481
  case "return": return match$2(options.validate(state.value), {
2482
- onFailure: (error) => Action$1.NextFrame({ state: {
2482
+ onFailure: (error) => Action$2.NextFrame({ state: {
2483
2483
  ...state,
2484
2484
  error: some(error)
2485
2485
  } }),
2486
- onSuccess: (value) => Action$1.Submit({ value })
2486
+ onSuccess: (value) => Action$2.Submit({ value })
2487
2487
  });
2488
2488
  default: return succeed$1(defaultDateProcessor(getOrElse(input.input, () => ""), state));
2489
2489
  }
@@ -2735,7 +2735,7 @@ const resolveCurrentPath = (path, options) => {
2735
2735
  const startingPath = options.startingPath.value;
2736
2736
  return flatMap$1(FileSystem, (fs) => orDie(fs.exists(startingPath)).pipe(flatMap$1((exists) => exists ? void_ : die(`The provided starting path '${startingPath}' does not exist`)), as(startingPath)));
2737
2737
  }
2738
- return sync$1(() => process.cwd());
2738
+ return sync$2(() => process.cwd());
2739
2739
  };
2740
2740
  const getFileList = /*#__PURE__*/ fnUntraced$1(function* (directory, options) {
2741
2741
  const fs = yield* FileSystem;
@@ -2861,7 +2861,7 @@ const renderFileSubmission = /*#__PURE__*/ fnUntraced$1(function* (state, value,
2861
2861
  });
2862
2862
  const handleFileRender = (options) => {
2863
2863
  return (state, action) => {
2864
- return Action$1.$match(action, {
2864
+ return Action$2.$match(action, {
2865
2865
  Beep: () => succeed$1(renderBeep),
2866
2866
  NextFrame: ({ state }) => renderFileNextFrame(state, options),
2867
2867
  Submit: ({ value }) => renderFileSubmission(state, value, options)
@@ -2869,33 +2869,33 @@ const handleFileRender = (options) => {
2869
2869
  };
2870
2870
  };
2871
2871
  const processFileCursorUp = (state) => {
2872
- if (state.files.length === 0) return succeed$1(Action$1.Beep());
2872
+ if (state.files.length === 0) return succeed$1(Action$2.Beep());
2873
2873
  const cursor = state.cursor - 1;
2874
- return succeed$1(Action$1.NextFrame({ state: {
2874
+ return succeed$1(Action$2.NextFrame({ state: {
2875
2875
  ...state,
2876
2876
  cursor: cursor < 0 ? state.files.length - 1 : cursor
2877
2877
  } }));
2878
2878
  };
2879
2879
  const processFileCursorDown = (state) => {
2880
- if (state.files.length === 0) return succeed$1(Action$1.Beep());
2881
- return succeed$1(Action$1.NextFrame({ state: {
2880
+ if (state.files.length === 0) return succeed$1(Action$2.Beep());
2881
+ return succeed$1(Action$2.NextFrame({ state: {
2882
2882
  ...state,
2883
2883
  cursor: (state.cursor + 1) % state.files.length
2884
2884
  } }));
2885
2885
  };
2886
2886
  const processFileBackspace = (state) => {
2887
- if (state.query.length === 0) return succeed$1(Action$1.Beep());
2887
+ if (state.query.length === 0) return succeed$1(Action$2.Beep());
2888
2888
  const query = state.query.slice(0, state.query.length - 1);
2889
- return succeed$1(Action$1.NextFrame({ state: updateFileState(state, query) }));
2889
+ return succeed$1(Action$2.NextFrame({ state: updateFileState(state, query) }));
2890
2890
  };
2891
- const processFileClear = (state) => succeed$1(Action$1.NextFrame({ state: updateFileState(state, "") }));
2891
+ const processFileClear = (state) => succeed$1(Action$2.NextFrame({ state: updateFileState(state, "") }));
2892
2892
  const processFileInput = (input, state) => {
2893
- if (input.length === 0) return succeed$1(Action$1.Beep());
2893
+ if (input.length === 0) return succeed$1(Action$2.Beep());
2894
2894
  const query = state.query + input;
2895
- return succeed$1(Action$1.NextFrame({ state: updateFileState(state, query) }));
2895
+ return succeed$1(Action$2.NextFrame({ state: updateFileState(state, query) }));
2896
2896
  };
2897
2897
  const processSelection = /*#__PURE__*/ fnUntraced$1(function* (state, options) {
2898
- if (state.files.length === 0) return Action$1.Beep();
2898
+ if (state.files.length === 0) return Action$2.Beep();
2899
2899
  const fs = yield* FileSystem;
2900
2900
  const path = yield* Path;
2901
2901
  const currentPath = yield* resolveCurrentPath(state.path, options);
@@ -2904,11 +2904,11 @@ const processSelection = /*#__PURE__*/ fnUntraced$1(function* (state, options) {
2904
2904
  if ((yield* orDie(fs.stat(resolvedPath))).type === "Directory") {
2905
2905
  const files = yield* getFileList(resolvedPath, options);
2906
2906
  const filesWithoutParent = files.filter((file) => file !== "..");
2907
- if (options.type === "directory" || options.type === "either") return filesWithoutParent.length === 0 ? Action$1.Submit({ value: resolvedPath }) : Action$1.NextFrame({ state: {
2907
+ if (options.type === "directory" || options.type === "either") return filesWithoutParent.length === 0 ? Action$2.Submit({ value: resolvedPath }) : Action$2.NextFrame({ state: {
2908
2908
  ...state,
2909
2909
  confirm: FileConfirm.Show()
2910
2910
  } });
2911
- return Action$1.NextFrame({ state: {
2911
+ return Action$2.NextFrame({ state: {
2912
2912
  cursor: 0,
2913
2913
  files,
2914
2914
  allFiles: files,
@@ -2917,25 +2917,25 @@ const processSelection = /*#__PURE__*/ fnUntraced$1(function* (state, options) {
2917
2917
  confirm: FileConfirm.Hide()
2918
2918
  } });
2919
2919
  }
2920
- return Action$1.Submit({ value: resolvedPath });
2920
+ return Action$2.Submit({ value: resolvedPath });
2921
2921
  });
2922
2922
  const handleFileProcess = (options) => {
2923
2923
  return fnUntraced$1(function* (input, state) {
2924
2924
  if (input.key.ctrl) switch (input.key.name) {
2925
2925
  case "u":
2926
- if (showConfirmation(state.confirm)) return Action$1.Beep();
2926
+ if (showConfirmation(state.confirm)) return Action$2.Beep();
2927
2927
  return yield* processFileClear(state);
2928
2928
  case "p":
2929
2929
  case "k": return yield* processFileCursorUp(state);
2930
2930
  case "n": return yield* processFileCursorDown(state);
2931
- default: return Action$1.Beep();
2931
+ default: return Action$2.Beep();
2932
2932
  }
2933
2933
  switch (input.key.name) {
2934
2934
  case "up": return yield* processFileCursorUp(state);
2935
2935
  case "down":
2936
2936
  case "tab": return yield* processFileCursorDown(state);
2937
2937
  case "backspace":
2938
- if (showConfirmation(state.confirm)) return Action$1.Beep();
2938
+ if (showConfirmation(state.confirm)) return Action$2.Beep();
2939
2939
  return yield* processFileBackspace(state);
2940
2940
  case "enter":
2941
2941
  case "return": return yield* processSelection(state, options);
@@ -2947,7 +2947,7 @@ const handleFileProcess = (options) => {
2947
2947
  const selectedPath = state.files[state.cursor];
2948
2948
  const resolvedPath = path.resolve(currentPath, selectedPath);
2949
2949
  const files = yield* getFileList(resolvedPath, options);
2950
- return Action$1.NextFrame({ state: {
2950
+ return Action$2.NextFrame({ state: {
2951
2951
  cursor: 0,
2952
2952
  files,
2953
2953
  allFiles: files,
@@ -2964,11 +2964,11 @@ const handleFileProcess = (options) => {
2964
2964
  const currentPath = yield* resolveCurrentPath(state.path, options);
2965
2965
  const selectedPath = state.files[state.cursor];
2966
2966
  const resolvedPath = path.resolve(currentPath, selectedPath);
2967
- return Action$1.Submit({ value: resolvedPath });
2967
+ return Action$2.Submit({ value: resolvedPath });
2968
2968
  }
2969
2969
  return yield* processFileInput(getOrElse(input.input, () => ""), state);
2970
2970
  default:
2971
- if (showConfirmation(state.confirm)) return Action$1.Beep();
2971
+ if (showConfirmation(state.confirm)) return Action$2.Beep();
2972
2972
  return yield* processFileInput(getOrElse(input.input, () => ""), state);
2973
2973
  }
2974
2974
  });
@@ -3045,14 +3045,14 @@ const renderMultiSelectSubmission = /*#__PURE__*/ fnUntraced$1(function* (state,
3045
3045
  });
3046
3046
  const processMultiSelectCursorUp = (state, totalChoices) => {
3047
3047
  const newIndex = state.index === 0 ? totalChoices - 1 : state.index - 1;
3048
- return succeed$1(Action$1.NextFrame({ state: {
3048
+ return succeed$1(Action$2.NextFrame({ state: {
3049
3049
  ...state,
3050
3050
  index: newIndex
3051
3051
  } }));
3052
3052
  };
3053
3053
  const processMultiSelectCursorDown = (state, totalChoices) => {
3054
3054
  const newIndex = (state.index + 1) % totalChoices;
3055
- return succeed$1(Action$1.NextFrame({ state: {
3055
+ return succeed$1(Action$2.NextFrame({ state: {
3056
3056
  ...state,
3057
3057
  index: newIndex
3058
3058
  } }));
@@ -3067,11 +3067,11 @@ const processSpace = (state, options) => {
3067
3067
  else selectedIndices.add(i);
3068
3068
  else {
3069
3069
  const choiceIndex = state.index - metaOptionsCount;
3070
- if (options.choices[choiceIndex].disabled) return succeed$1(Action$1.Beep());
3070
+ if (options.choices[choiceIndex].disabled) return succeed$1(Action$2.Beep());
3071
3071
  else if (selectedIndices.has(choiceIndex)) selectedIndices.delete(choiceIndex);
3072
3072
  else selectedIndices.add(choiceIndex);
3073
3073
  }
3074
- return succeed$1(Action$1.NextFrame({ state: {
3074
+ return succeed$1(Action$2.NextFrame({ state: {
3075
3075
  ...state,
3076
3076
  selectedIndices
3077
3077
  } }));
@@ -3105,24 +3105,24 @@ const handleMultiSelectProcess = (options) => {
3105
3105
  case "return": {
3106
3106
  const selectedIndices = Array.from(state.selectedIndices).filter((index) => !options.choices[index].disabled);
3107
3107
  const selectedCount = selectedIndices.length;
3108
- if (options.min !== void 0 && selectedCount < options.min) return succeed$1(Action$1.NextFrame({ state: {
3108
+ if (options.min !== void 0 && selectedCount < options.min) return succeed$1(Action$2.NextFrame({ state: {
3109
3109
  ...state,
3110
3110
  error: some(`At least ${options.min} are required`)
3111
3111
  } }));
3112
- if (options.max !== void 0 && selectedCount > options.max) return succeed$1(Action$1.NextFrame({ state: {
3112
+ if (options.max !== void 0 && selectedCount > options.max) return succeed$1(Action$2.NextFrame({ state: {
3113
3113
  ...state,
3114
3114
  error: some(`At most ${options.max} choices are allowed`)
3115
3115
  } }));
3116
3116
  const selectedValues = selectedIndices.sort(Order).map((index) => options.choices[index].value);
3117
- return succeed$1(Action$1.Submit({ value: selectedValues }));
3117
+ return succeed$1(Action$2.Submit({ value: selectedValues }));
3118
3118
  }
3119
- default: return succeed$1(Action$1.Beep());
3119
+ default: return succeed$1(Action$2.Beep());
3120
3120
  }
3121
3121
  };
3122
3122
  };
3123
3123
  const handleMultiSelectRender = (options) => {
3124
3124
  return (state, action) => {
3125
- return Action$1.$match(action, {
3125
+ return Action$2.$match(action, {
3126
3126
  Beep: () => succeed$1(renderBeep),
3127
3127
  NextFrame: ({ state }) => renderMultiSelectNextFrame(state, options),
3128
3128
  Submit: () => renderMultiSelectSubmission(state, options)
@@ -3175,44 +3175,44 @@ const renderNumberSubmission = /*#__PURE__*/ fnUntraced$1(function* (nextState,
3175
3175
  return renderNumberOutput(nextState, leadingSymbol, trailingSymbol, options, figures, void 0, true) + "\n";
3176
3176
  });
3177
3177
  const processNumberBackspace = (state) => {
3178
- if (state.value.length <= 0) return succeed$1(Action$1.Beep());
3178
+ if (state.value.length <= 0) return succeed$1(Action$2.Beep());
3179
3179
  const value = state.value.slice(0, state.value.length - 1);
3180
- return succeed$1(Action$1.NextFrame({ state: {
3180
+ return succeed$1(Action$2.NextFrame({ state: {
3181
3181
  ...state,
3182
3182
  value,
3183
3183
  error: none$1()
3184
3184
  } }));
3185
3185
  };
3186
- const processNumberClear = (state) => succeed$1(Action$1.NextFrame({ state: {
3186
+ const processNumberClear = (state) => succeed$1(Action$2.NextFrame({ state: {
3187
3187
  ...state,
3188
3188
  cursor: 0,
3189
3189
  value: "",
3190
3190
  error: none$1()
3191
3191
  } }));
3192
3192
  const defaultIntProcessor = (input, state) => {
3193
- if (state.value.length === 0 && input === "-") return succeed$1(Action$1.NextFrame({ state: {
3193
+ if (state.value.length === 0 && input === "-") return succeed$1(Action$2.NextFrame({ state: {
3194
3194
  ...state,
3195
3195
  value: "-",
3196
3196
  error: none$1()
3197
3197
  } }));
3198
3198
  const parsed = globalThis.Number.parseInt(state.value + input);
3199
- if (globalThis.Number.isNaN(parsed)) return succeed$1(Action$1.Beep());
3200
- else return succeed$1(Action$1.NextFrame({ state: {
3199
+ if (globalThis.Number.isNaN(parsed)) return succeed$1(Action$2.Beep());
3200
+ else return succeed$1(Action$2.NextFrame({ state: {
3201
3201
  ...state,
3202
3202
  value: `${parsed}`,
3203
3203
  error: none$1()
3204
3204
  } }));
3205
3205
  };
3206
3206
  const defaultFloatProcessor = (input, state) => {
3207
- if (input === "." && state.value.includes(".")) return succeed$1(Action$1.Beep());
3208
- if (state.value.length === 0 && input === "-") return succeed$1(Action$1.NextFrame({ state: {
3207
+ if (input === "." && state.value.includes(".")) return succeed$1(Action$2.Beep());
3208
+ if (state.value.length === 0 && input === "-") return succeed$1(Action$2.NextFrame({ state: {
3209
3209
  ...state,
3210
3210
  value: "-",
3211
3211
  error: none$1()
3212
3212
  } }));
3213
3213
  const parsed = globalThis.Number.parseFloat(state.value + input);
3214
- if (globalThis.Number.isNaN(parsed)) return succeed$1(Action$1.Beep());
3215
- else return succeed$1(Action$1.NextFrame({ state: {
3214
+ if (globalThis.Number.isNaN(parsed)) return succeed$1(Action$2.Beep());
3215
+ else return succeed$1(Action$2.NextFrame({ state: {
3216
3216
  ...state,
3217
3217
  value: input === "." ? `${parsed}.` : state.value.includes(".") && /^\d$/.test(input) ? state.value + input : `${parsed}`,
3218
3218
  error: none$1()
@@ -3220,7 +3220,7 @@ const defaultFloatProcessor = (input, state) => {
3220
3220
  };
3221
3221
  const handleRenderInteger = (options) => {
3222
3222
  return (state, action) => {
3223
- return Action$1.$match(action, {
3223
+ return Action$2.$match(action, {
3224
3224
  Beep: () => succeed$1(renderBeep),
3225
3225
  NextFrame: ({ state }) => renderNumberNextFrame(state, options),
3226
3226
  Submit: () => renderNumberSubmission(state, options)
@@ -3233,13 +3233,13 @@ const handleProcessInteger = (options) => {
3233
3233
  switch (input.key.name) {
3234
3234
  case "backspace": return processNumberBackspace(state);
3235
3235
  case "k":
3236
- case "up": return succeed$1(Action$1.NextFrame({ state: {
3236
+ case "up": return succeed$1(Action$2.NextFrame({ state: {
3237
3237
  ...state,
3238
3238
  value: state.value === "" || state.value === "-" ? `${options.incrementBy}` : `${globalThis.Number.parseInt(state.value) + options.incrementBy}`,
3239
3239
  error: none$1()
3240
3240
  } }));
3241
3241
  case "j":
3242
- case "down": return succeed$1(Action$1.NextFrame({ state: {
3242
+ case "down": return succeed$1(Action$2.NextFrame({ state: {
3243
3243
  ...state,
3244
3244
  value: state.value === "" || state.value === "-" ? `-${options.decrementBy}` : `${globalThis.Number.parseInt(state.value) - options.decrementBy}`,
3245
3245
  error: none$1()
@@ -3247,16 +3247,16 @@ const handleProcessInteger = (options) => {
3247
3247
  case "enter":
3248
3248
  case "return": {
3249
3249
  const parsed = globalThis.Number.parseInt(state.value);
3250
- if (globalThis.Number.isNaN(parsed)) return succeed$1(Action$1.NextFrame({ state: {
3250
+ if (globalThis.Number.isNaN(parsed)) return succeed$1(Action$2.NextFrame({ state: {
3251
3251
  ...state,
3252
3252
  error: some("Must provide an integer value")
3253
3253
  } }));
3254
3254
  else return match$2(options.validate(parsed), {
3255
- onFailure: (error) => Action$1.NextFrame({ state: {
3255
+ onFailure: (error) => Action$2.NextFrame({ state: {
3256
3256
  ...state,
3257
3257
  error: some(error)
3258
3258
  } }),
3259
- onSuccess: (value) => Action$1.Submit({ value })
3259
+ onSuccess: (value) => Action$2.Submit({ value })
3260
3260
  });
3261
3261
  }
3262
3262
  default: return defaultIntProcessor(getOrElse(input.input, () => ""), state);
@@ -3265,7 +3265,7 @@ const handleProcessInteger = (options) => {
3265
3265
  };
3266
3266
  const handleRenderFloat = (options) => {
3267
3267
  return (state, action) => {
3268
- return Action$1.$match(action, {
3268
+ return Action$2.$match(action, {
3269
3269
  Beep: () => succeed$1(renderBeep),
3270
3270
  NextFrame: ({ state }) => renderNumberNextFrame(state, options),
3271
3271
  Submit: () => renderNumberSubmission(state, options)
@@ -3278,13 +3278,13 @@ const handleProcessFloat = (options) => {
3278
3278
  switch (input.key.name) {
3279
3279
  case "backspace": return processNumberBackspace(state);
3280
3280
  case "k":
3281
- case "up": return succeed$1(Action$1.NextFrame({ state: {
3281
+ case "up": return succeed$1(Action$2.NextFrame({ state: {
3282
3282
  ...state,
3283
3283
  value: state.value === "" || state.value === "-" ? `${options.incrementBy}` : `${globalThis.Number.parseFloat(state.value) + options.incrementBy}`,
3284
3284
  error: none$1()
3285
3285
  } }));
3286
3286
  case "j":
3287
- case "down": return succeed$1(Action$1.NextFrame({ state: {
3287
+ case "down": return succeed$1(Action$2.NextFrame({ state: {
3288
3288
  ...state,
3289
3289
  value: state.value === "" || state.value === "-" ? `-${options.decrementBy}` : `${globalThis.Number.parseFloat(state.value) - options.decrementBy}`,
3290
3290
  error: none$1()
@@ -3292,16 +3292,16 @@ const handleProcessFloat = (options) => {
3292
3292
  case "enter":
3293
3293
  case "return": {
3294
3294
  const parsed = globalThis.Number.parseFloat(state.value);
3295
- if (globalThis.Number.isNaN(parsed)) return succeed$1(Action$1.NextFrame({ state: {
3295
+ if (globalThis.Number.isNaN(parsed)) return succeed$1(Action$2.NextFrame({ state: {
3296
3296
  ...state,
3297
3297
  error: some("Must provide a floating point value")
3298
3298
  } }));
3299
- else return flatMap$1(sync$1(() => round(parsed, options.precision)), (rounded) => match$2(options.validate(rounded), {
3300
- onFailure: (error) => Action$1.NextFrame({ state: {
3299
+ else return flatMap$1(sync$2(() => round(parsed, options.precision)), (rounded) => match$2(options.validate(rounded), {
3300
+ onFailure: (error) => Action$2.NextFrame({ state: {
3301
3301
  ...state,
3302
3302
  error: some(error)
3303
3303
  } }),
3304
- onSuccess: (value) => Action$1.Submit({ value })
3304
+ onSuccess: (value) => Action$2.Submit({ value })
3305
3305
  }));
3306
3306
  }
3307
3307
  default: return defaultFloatProcessor(getOrElse(input.input, () => ""), state);
@@ -3355,19 +3355,19 @@ const renderSelectSubmission = /*#__PURE__*/ fnUntraced$1(function* (state, opti
3355
3355
  return (renderSelectOutput(leadingSymbol, trailingSymbol, options, figures) ?? leadingSymbol) + " " + annotate(figures.colors, selected, figures.submittedColor) + "\n";
3356
3356
  });
3357
3357
  const processSelectCursorUp = (state, choices) => {
3358
- if (state === 0) return succeed$1(Action$1.NextFrame({ state: choices.length - 1 }));
3359
- return succeed$1(Action$1.NextFrame({ state: state - 1 }));
3358
+ if (state === 0) return succeed$1(Action$2.NextFrame({ state: choices.length - 1 }));
3359
+ return succeed$1(Action$2.NextFrame({ state: state - 1 }));
3360
3360
  };
3361
3361
  const processSelectCursorDown = (state, choices) => {
3362
- if (state === choices.length - 1) return succeed$1(Action$1.NextFrame({ state: 0 }));
3363
- return succeed$1(Action$1.NextFrame({ state: state + 1 }));
3362
+ if (state === choices.length - 1) return succeed$1(Action$2.NextFrame({ state: 0 }));
3363
+ return succeed$1(Action$2.NextFrame({ state: state + 1 }));
3364
3364
  };
3365
3365
  const processSelectNext = (state, choices) => {
3366
- return succeed$1(Action$1.NextFrame({ state: (state + 1) % choices.length }));
3366
+ return succeed$1(Action$2.NextFrame({ state: (state + 1) % choices.length }));
3367
3367
  };
3368
3368
  const handleSelectRender = (options) => {
3369
3369
  return (state, action) => {
3370
- return Action$1.$match(action, {
3370
+ return Action$2.$match(action, {
3371
3371
  Beep: () => succeed$1(renderBeep),
3372
3372
  NextFrame: ({ state }) => renderSelectNextFrame(state, options),
3373
3373
  Submit: () => renderSelectSubmission(state, options)
@@ -3393,10 +3393,10 @@ const handleSelectProcess = (options) => {
3393
3393
  case "enter":
3394
3394
  case "return": {
3395
3395
  const selected = options.choices[state];
3396
- if (selected.disabled) return succeed$1(Action$1.Beep());
3397
- return succeed$1(Action$1.Submit({ value: selected.value }));
3396
+ if (selected.disabled) return succeed$1(Action$2.Beep());
3397
+ return succeed$1(Action$2.Submit({ value: selected.value }));
3398
3398
  }
3399
- default: return succeed$1(Action$1.Beep());
3399
+ default: return succeed$1(Action$2.Beep());
3400
3400
  }
3401
3401
  };
3402
3402
  };
@@ -3455,56 +3455,56 @@ const renderTextSubmission = /*#__PURE__*/ fnUntraced$1(function* (state, option
3455
3455
  return renderTextOutput(state, leadingSymbol, trailingSymbol, options, figures, void 0, true) + "\n";
3456
3456
  });
3457
3457
  const processTextBackspace = (state) => {
3458
- if (state.cursor <= 0) return succeed$1(Action$1.Beep());
3458
+ if (state.cursor <= 0) return succeed$1(Action$2.Beep());
3459
3459
  const beforeCursor = state.value.slice(0, state.cursor - 1);
3460
3460
  const afterCursor = state.value.slice(state.cursor);
3461
3461
  const cursor = state.cursor - 1;
3462
3462
  const value = `${beforeCursor}${afterCursor}`;
3463
- return succeed$1(Action$1.NextFrame({ state: {
3463
+ return succeed$1(Action$2.NextFrame({ state: {
3464
3464
  ...state,
3465
3465
  cursor,
3466
3466
  value,
3467
3467
  error: none$1()
3468
3468
  } }));
3469
3469
  };
3470
- const processTextClear = (state) => succeed$1(Action$1.NextFrame({ state: {
3470
+ const processTextClear = (state) => succeed$1(Action$2.NextFrame({ state: {
3471
3471
  ...state,
3472
3472
  cursor: 0,
3473
3473
  value: "",
3474
3474
  error: none$1()
3475
3475
  } }));
3476
3476
  const processTextCursorLeft = (state) => {
3477
- if (state.cursor <= 0) return succeed$1(Action$1.Beep());
3477
+ if (state.cursor <= 0) return succeed$1(Action$2.Beep());
3478
3478
  const cursor = state.cursor - 1;
3479
- return succeed$1(Action$1.NextFrame({ state: {
3479
+ return succeed$1(Action$2.NextFrame({ state: {
3480
3480
  ...state,
3481
3481
  cursor,
3482
3482
  error: none$1()
3483
3483
  } }));
3484
3484
  };
3485
3485
  const processTextCursorRight = (state) => {
3486
- if (state.cursor >= state.value.length) return succeed$1(Action$1.Beep());
3486
+ if (state.cursor >= state.value.length) return succeed$1(Action$2.Beep());
3487
3487
  const cursor = Math.min(state.cursor + 1, state.value.length);
3488
- return succeed$1(Action$1.NextFrame({ state: {
3488
+ return succeed$1(Action$2.NextFrame({ state: {
3489
3489
  ...state,
3490
3490
  cursor,
3491
3491
  error: none$1()
3492
3492
  } }));
3493
3493
  };
3494
- const processTextCursorStart = (state) => succeed$1(Action$1.NextFrame({ state: {
3494
+ const processTextCursorStart = (state) => succeed$1(Action$2.NextFrame({ state: {
3495
3495
  ...state,
3496
3496
  cursor: 0,
3497
3497
  error: none$1()
3498
3498
  } }));
3499
- const processTextCursorEnd = (state) => succeed$1(Action$1.NextFrame({ state: {
3499
+ const processTextCursorEnd = (state) => succeed$1(Action$2.NextFrame({ state: {
3500
3500
  ...state,
3501
3501
  cursor: state.value.length,
3502
3502
  error: none$1()
3503
3503
  } }));
3504
3504
  const processTab = (state, options) => {
3505
- if (state.value === options.default) return succeed$1(Action$1.Beep());
3505
+ if (state.value === options.default) return succeed$1(Action$2.Beep());
3506
3506
  const value = state.value.length === 0 ? options.default : state.value;
3507
- return succeed$1(Action$1.NextFrame({ state: {
3507
+ return succeed$1(Action$2.NextFrame({ state: {
3508
3508
  ...state,
3509
3509
  value,
3510
3510
  cursor: value.length,
@@ -3514,7 +3514,7 @@ const processTab = (state, options) => {
3514
3514
  const defaultTextProcessor = (input, state) => {
3515
3515
  const value = `${state.value.slice(0, state.cursor)}${input}${state.value.slice(state.cursor)}`;
3516
3516
  const cursor = state.cursor + input.length;
3517
- return succeed$1(Action$1.NextFrame({ state: {
3517
+ return succeed$1(Action$2.NextFrame({ state: {
3518
3518
  ...state,
3519
3519
  cursor,
3520
3520
  value,
@@ -3523,7 +3523,7 @@ const defaultTextProcessor = (input, state) => {
3523
3523
  };
3524
3524
  const handleTextRender = (options) => {
3525
3525
  return (state, action) => {
3526
- return Action$1.$match(action, {
3526
+ return Action$2.$match(action, {
3527
3527
  Beep: () => succeed$1(renderBeep),
3528
3528
  NextFrame: ({ state }) => renderTextNextFrame(state, options),
3529
3529
  Submit: () => renderTextSubmission(state, options)
@@ -3536,7 +3536,7 @@ const handleTextProcess = (options) => {
3536
3536
  case "u": return processTextClear(state);
3537
3537
  case "a": return processTextCursorStart(state);
3538
3538
  case "e": return processTextCursorEnd(state);
3539
- default: return succeed$1(Action$1.Beep());
3539
+ default: return succeed$1(Action$2.Beep());
3540
3540
  }
3541
3541
  switch (input.key.name) {
3542
3542
  case "backspace": return processTextBackspace(state);
@@ -3548,12 +3548,12 @@ const handleTextProcess = (options) => {
3548
3548
  case "return": {
3549
3549
  const value = state.value;
3550
3550
  return match$2(options.validate(value), {
3551
- onFailure: (error) => Action$1.NextFrame({ state: {
3551
+ onFailure: (error) => Action$2.NextFrame({ state: {
3552
3552
  ...state,
3553
3553
  value,
3554
3554
  error: some(error)
3555
3555
  } }),
3556
- onSuccess: (value) => Action$1.Submit({ value })
3556
+ onSuccess: (value) => Action$2.Submit({ value })
3557
3557
  });
3558
3558
  }
3559
3559
  case "tab": return processTab(state, options);
@@ -3613,8 +3613,8 @@ const renderToggleSubmission = /*#__PURE__*/ fnUntraced$1(function* (value, opti
3613
3613
  const toggle = renderToggle(value, options, figures, true);
3614
3614
  return renderPrompt(toggle, options.message, leadingSymbol, trailingSymbol, figures) + "\n";
3615
3615
  });
3616
- const activate = /*#__PURE__*/ succeed$1(/*#__PURE__*/ Action$1.NextFrame({ state: true }));
3617
- const deactivate = /*#__PURE__*/ succeed$1(/*#__PURE__*/ Action$1.NextFrame({ state: false }));
3616
+ const activate = /*#__PURE__*/ succeed$1(/*#__PURE__*/ Action$2.NextFrame({ state: true }));
3617
+ const deactivate = /*#__PURE__*/ succeed$1(/*#__PURE__*/ Action$2.NextFrame({ state: false }));
3618
3618
  const handleToggleRender = (options) => {
3619
3619
  return (state, action) => {
3620
3620
  switch (action._tag) {
@@ -3638,8 +3638,8 @@ const handleToggleProcess = (input, state) => {
3638
3638
  case " ":
3639
3639
  case "tab": return state ? deactivate : activate;
3640
3640
  case "enter":
3641
- case "return": return succeed$1(Action$1.Submit({ value: state }));
3642
- default: return succeed$1(Action$1.Beep());
3641
+ case "return": return succeed$1(Action$2.Submit({ value: state }));
3642
+ default: return succeed$1(Action$2.Beep());
3643
3643
  }
3644
3644
  };
3645
3645
  const entriesToDisplay = (cursor, total, maxVisible) => {
@@ -6618,7 +6618,7 @@ const getHelpForCommandPath = (command, commandPath, builtIns) => gen$1(function
6618
6618
  * @category constructors
6619
6619
  * @since 4.0.0
6620
6620
  */
6621
- const Action = (options) => ({
6621
+ const Action$1 = (options) => ({
6622
6622
  _tag: "Action",
6623
6623
  flag: options.flag,
6624
6624
  run: options.run
@@ -6651,7 +6651,7 @@ let settingIdCounter = 0;
6651
6651
  * @category references
6652
6652
  * @since 4.0.0
6653
6653
  */
6654
- const Help = /*#__PURE__*/ Action({
6654
+ const Help = /*#__PURE__*/ Action$1({
6655
6655
  flag: /*#__PURE__*/ Boolean$1("help").pipe(/*#__PURE__*/ withAlias("h"), /*#__PURE__*/ withDescription$1("Show help information"), /*#__PURE__*/ withDefault(false)),
6656
6656
  run: /*#__PURE__*/ fnUntraced$1(function* (_, { builtIns, command, commandPath }) {
6657
6657
  const formatter = yield* Formatter;
@@ -6670,7 +6670,7 @@ const Help = /*#__PURE__*/ Action({
6670
6670
  * @category references
6671
6671
  * @since 4.0.0
6672
6672
  */
6673
- const Version = /*#__PURE__*/ Action({
6673
+ const Version = /*#__PURE__*/ Action$1({
6674
6674
  flag: /*#__PURE__*/ Boolean$1("version").pipe(/*#__PURE__*/ withAlias("v"), /*#__PURE__*/ withDescription$1("Show version information"), /*#__PURE__*/ withDefault(false)),
6675
6675
  run: /*#__PURE__*/ fnUntraced$1(function* (_, { command, version }) {
6676
6676
  const formatter = yield* Formatter;
@@ -6689,7 +6689,7 @@ const Version = /*#__PURE__*/ Action({
6689
6689
  * @category references
6690
6690
  * @since 4.0.0
6691
6691
  */
6692
- const Wizard = /*#__PURE__*/ Action({
6692
+ const Wizard = /*#__PURE__*/ Action$1({
6693
6693
  flag: /*#__PURE__*/ Boolean$1("wizard").pipe(/*#__PURE__*/ withDescription$1("Start wizard mode for a command"), /*#__PURE__*/ withDefault(false)),
6694
6694
  run: () => void_
6695
6695
  });
@@ -6706,7 +6706,7 @@ const Wizard = /*#__PURE__*/ Action({
6706
6706
  * @category references
6707
6707
  * @since 4.0.0
6708
6708
  */
6709
- const Completions = /*#__PURE__*/ Action({
6709
+ const Completions = /*#__PURE__*/ Action$1({
6710
6710
  flag: /*#__PURE__*/ ChoiceWithValue("completions", [
6711
6711
  ["bash", "bash"],
6712
6712
  ["zsh", "zsh"],
@@ -8649,7 +8649,7 @@ const make$60 = /*#__PURE__*/ fnUntraced$1(function* (options) {
8649
8649
  scope: metricsScope,
8650
8650
  metrics: metricData
8651
8651
  }]
8652
- }] }), isDelta ? sync$1(() => {
8652
+ }] }), isDelta ? sync$2(() => {
8653
8653
  if (currentSnapshotSequence < committedSnapshotSequence) return;
8654
8654
  previousCounterState = nextCounterState;
8655
8655
  previousHistogramState = nextHistogramState;
@@ -9869,7 +9869,7 @@ const readBootstrapEnvelope = fn("readBootstrapEnvelope")(function* (schema, fd,
9869
9869
  stream.once("error", handleError);
9870
9870
  input.once("line", handleLine);
9871
9871
  input.once("close", handleClose);
9872
- return sync$1(cleanup);
9872
+ return sync$2(cleanup);
9873
9873
  }).pipe(timeoutOption(timeoutMs), map$3(flatten));
9874
9874
  });
9875
9875
  const isUnavailableBootstrapFdError = compose(hasProperty("code"), (_) => _.code === "EBADF" || _.code === "ENOENT");
@@ -9964,7 +9964,7 @@ const fixPath = fn("fixPath")(function* (options) {
9964
9964
  const env = yield* Environment;
9965
9965
  if (platform === "win32") {
9966
9966
  if (options?.shellEnvironmentPrepared === true) return;
9967
- const repairedEnvironment = yield* resolveWindowsEnvironment(env).pipe(catchDefect((defect) => sync$1(() => {
9967
+ const repairedEnvironment = yield* resolveWindowsEnvironment(env).pipe(catchDefect((defect) => sync$2(() => {
9968
9968
  logPathHydrationWarning("Failed to hydrate PATH from the user environment.", defect);
9969
9969
  return {};
9970
9970
  })));
@@ -9976,11 +9976,11 @@ const fixPath = fn("fixPath")(function* (options) {
9976
9976
  return;
9977
9977
  }
9978
9978
  if (platform !== "darwin" && platform !== "linux") return;
9979
- yield* sync$1(() => hydratePosixHome(env)).pipe(catchDefect((defect) => sync$1(() => {
9979
+ yield* sync$2(() => hydratePosixHome(env)).pipe(catchDefect((defect) => sync$2(() => {
9980
9980
  logPathHydrationWarning("Failed to hydrate HOME from the user account.", defect);
9981
9981
  })));
9982
9982
  if (options?.shellEnvironmentPrepared === true) return;
9983
- yield* sync$1(() => hydratePosixPath(env, platform)).pipe(catchDefect((defect) => sync$1(() => {
9983
+ yield* sync$2(() => hydratePosixPath(env, platform)).pipe(catchDefect((defect) => sync$2(() => {
9984
9984
  logPathHydrationWarning("Failed to hydrate PATH from the user environment.", defect);
9985
9985
  })));
9986
9986
  });
@@ -24193,7 +24193,7 @@ const makeWebSocketWS = (url, options) => {
24193
24193
  * @category layers
24194
24194
  * @since 4.0.0
24195
24195
  */
24196
- const layerWebSocketConstructor = /*#__PURE__*/ sync$2(WebSocketConstructor)(() => {
24196
+ const layerWebSocketConstructor = /*#__PURE__*/ sync$3(WebSocketConstructor)(() => {
24197
24197
  if ("WebSocket" in globalThis) return (url, options) => {
24198
24198
  if (options === void 0 || typeof options === "string" || Array.isArray(options)) return new globalThis.WebSocket(url, options);
24199
24199
  return makeWebSocketWS(url, options);
@@ -24253,7 +24253,7 @@ const make$47 = /*#__PURE__*/ fnUntraced$1(function* (evaluate, options) {
24253
24253
  });
24254
24254
  const address = server.address();
24255
24255
  const boundAddress = yield* typeof address === "string" ? succeed$1(unixPathAddress(address)) : fromResult(inetAddressFromIpString(address.address, address.port)).pipe(mapError((cause) => new ServeError({ cause })));
24256
- const wss = yield* acquireRelease(sync$1(() => new import_websocket_server.default({
24256
+ const wss = yield* acquireRelease(sync$2(() => new import_websocket_server.default({
24257
24257
  ...options.websocket,
24258
24258
  noServer: true
24259
24259
  })), (wss) => callback((resume) => {
@@ -24272,7 +24272,7 @@ const make$47 = /*#__PURE__*/ fnUntraced$1(function* (evaluate, options) {
24272
24272
  middleware,
24273
24273
  scope: scope$1
24274
24274
  });
24275
- yield* addFinalizerExit(serveScope, () => ensuring(preemptiveShutdown, sync$1(() => {
24275
+ yield* addFinalizerExit(serveScope, () => ensuring(preemptiveShutdown, sync$2(() => {
24276
24276
  server.off("request", handler);
24277
24277
  server.off("upgrade", upgradeHandler);
24278
24278
  })));
@@ -24343,7 +24343,7 @@ const makeUpgradeHandler = (lazyWss, httpEffect, options) => {
24343
24343
  request.upgraded = true;
24344
24344
  resume(succeed$1(ws));
24345
24345
  });
24346
- }), (ws, exit) => sync$1(() => ws.close(closeCode(exit)))))));
24346
+ }), (ws, exit) => sync$2(() => ws.close(closeCode(exit)))))));
24347
24347
  const context = add$1(services, HttpServerRequest, request);
24348
24348
  const fiber = runIn(runForkWith(context)(handledApp), options.scope);
24349
24349
  socket.on("error", () => {});
@@ -24534,7 +24534,7 @@ const handleResponse = (request, response) => {
24534
24534
  drainLatch.closeUnsafe();
24535
24535
  return drainLatch.await;
24536
24536
  }), interruptible, matchCauseEffect({
24537
- onSuccess: () => sync$1(() => nodeResponse.end()),
24537
+ onSuccess: () => sync$2(() => nodeResponse.end()),
24538
24538
  onFailure: handleCause(nodeResponse, response)
24539
24539
  }));
24540
24540
  }
@@ -24542,7 +24542,7 @@ const handleResponse = (request, response) => {
24542
24542
  };
24543
24543
  const cancelResponseBody = (body) => {
24544
24544
  const stream = body._tag === "Raw" ? body.body : void 0;
24545
- if (stream instanceof Readable) return sync$1(() => stream.destroy());
24545
+ if (stream instanceof Readable) return sync$2(() => stream.destroy());
24546
24546
  return void_;
24547
24547
  };
24548
24548
  const handleCause = (nodeResponse, originalResponse) => (originalCause) => flatMap$1(causeResponse(originalCause), ([response, cause]) => {
@@ -26744,7 +26744,7 @@ const layer$77 = (api, options) => use(fnUntraced$1(function* (router) {
26744
26744
  yield* router.addAll(routes);
26745
26745
  if (options?.openapiPath) {
26746
26746
  const makeResponse = memoize((api) => jsonUnsafe(fromApi(api)));
26747
- yield* router.add("GET", options.openapiPath, sync$1(() => makeResponse(api)));
26747
+ yield* router.add("GET", options.openapiPath, sync$2(() => makeResponse(api)));
26748
26748
  }
26749
26749
  }));
26750
26750
  /**
@@ -27465,7 +27465,7 @@ const headlessPlugins = (entries = peerPlugins()) => entries.map((entry) => {
27465
27465
  return {
27466
27466
  ...entry,
27467
27467
  forcedOff: () => failed ? NEEDS_APP : entry.forcedOff?.(),
27468
- contributions: entry.contributions.pipe(catchCause((cause) => sync$1(() => {
27468
+ contributions: entry.contributions.pipe(catchCause((cause) => sync$2(() => {
27469
27469
  failed = true;
27470
27470
  }).pipe(andThen(logWarning(`Peer Core: plugin ${entry.id} ${NEEDS_APP}`, cause)), as({}))))
27471
27471
  };
@@ -27680,6 +27680,22 @@ const connectEditor = (id, stateDir, io) => gen$1(function* () {
27680
27680
  stateDir
27681
27681
  }, io);
27682
27682
  });
27683
+ /** The way out of `connectEditor`: Peer's hooks out of Claude Code or Codex, the MCP entry out of the rest. */
27684
+ const disconnectEditor = (id, io) => gen$1(function* () {
27685
+ if (id === "claude" || id === "codex") {
27686
+ const status = yield* (yield* PeerAdapters).setCoordination(id === "claude" ? { claudeHooks: false } : { codexHooks: false });
27687
+ return yield* sayHooks(status, {
27688
+ claude: id === "claude",
27689
+ codex: id === "codex",
27690
+ install: false
27691
+ }, io);
27692
+ }
27693
+ const answer = yield* (yield* McpClients).disconnect({
27694
+ client: id,
27695
+ scope: "user"
27696
+ });
27697
+ yield* io.say(answer.outcome === "manual" ? `${answer.path} is not plain JSON, so Peer left it alone. Remove this entry by hand:\n${answer.entry}` : answer.outcome === "unchanged" ? `${editorTitle(id)} had no Peer entry in ${answer.path}.` : `Disconnected ${editorTitle(id)}: removed Peer's entry from ${answer.path}.`);
27698
+ });
27683
27699
  //#endregion
27684
27700
  //#region src/cli/joinLink.ts
27685
27701
  /**
@@ -27903,6 +27919,223 @@ const editorChoices = (detected) => [
27903
27919
  }
27904
27920
  ];
27905
27921
  //#endregion
27922
+ //#region src/cli/peerCoreTree.ts
27923
+ /**
27924
+ * The terminal tree `Invite a teammate` picks a scope with: all areas and tasks, whole areas (which
27925
+ * cover their future tasks too), or single tasks, an area opening to show its tasks. Selecting is a
27926
+ * pure reducer over a small state, so the rules (an area's tasks are not assigned twice, a partly
27927
+ * chosen area shows `[-]`) are tested without a terminal; `treePrompt` draws it with Effect's
27928
+ * custom prompt.
27929
+ *
27930
+ * @module cli/peerCoreTree
27931
+ */
27932
+ const initialTree = (areas) => ({
27933
+ areas: areas.filter((area) => area.name !== null || area.tasks.length > 0),
27934
+ cursor: 0,
27935
+ open: [],
27936
+ all: false,
27937
+ whole: [],
27938
+ tasks: []
27939
+ });
27940
+ const rows = (state) => [
27941
+ { kind: "all" },
27942
+ ...state.areas.flatMap((area) => state.open.includes(area.name) ? [
27943
+ {
27944
+ kind: "area",
27945
+ area
27946
+ },
27947
+ ...area.name === null ? [] : [{
27948
+ kind: "areaAll",
27949
+ area
27950
+ }],
27951
+ ...area.tasks.map((task) => ({
27952
+ kind: "task",
27953
+ area,
27954
+ task
27955
+ }))
27956
+ ] : [{
27957
+ kind: "area",
27958
+ area
27959
+ }]),
27960
+ { kind: "continue" }
27961
+ ];
27962
+ const areaMark = (state, area) => {
27963
+ if (state.all || area.name !== null && state.whole.includes(area.name)) return "on";
27964
+ const chosen = area.tasks.filter((task) => state.tasks.includes(task.id)).length;
27965
+ if (chosen === 0) return "off";
27966
+ return area.name === null && chosen === area.tasks.length ? "on" : "some";
27967
+ };
27968
+ const mark = (state, row) => {
27969
+ switch (row.kind) {
27970
+ case "all": return state.all ? "on" : "off";
27971
+ case "area": return areaMark(state, row.area);
27972
+ case "areaAll": return state.all || state.whole.includes(row.area.name) ? "on" : "off";
27973
+ case "task": return state.all || row.area.name !== null && state.whole.includes(row.area.name) || state.tasks.includes(row.task.id) ? "on" : "off";
27974
+ case "continue": return "off";
27975
+ }
27976
+ };
27977
+ /** "All" as what it stands for, so one part of it can be taken away. */
27978
+ const spread = (state) => state.all ? {
27979
+ ...state,
27980
+ all: false,
27981
+ whole: state.areas.flatMap((a) => a.name === null ? [] : [a.name]),
27982
+ tasks: state.areas.filter((a) => a.name === null).flatMap((a) => a.tasks.map((t) => t.id))
27983
+ } : state;
27984
+ const without = (list, drop) => list.filter((item) => !drop.includes(item));
27985
+ /** Space on a row: what it selects or clears, never one task twice. */
27986
+ const toggle = (state, row) => {
27987
+ if (row.kind === "continue") return state;
27988
+ if (row.kind === "all") return {
27989
+ ...state,
27990
+ all: !state.all,
27991
+ whole: [],
27992
+ tasks: []
27993
+ };
27994
+ const next = spread(state);
27995
+ const ids = row.area.tasks.map((task) => task.id);
27996
+ if (row.kind === "area" || row.kind === "areaAll") {
27997
+ const on = areaMark(next, row.area) === "on";
27998
+ if (row.area.name === null) return {
27999
+ ...next,
28000
+ tasks: on ? without(next.tasks, ids) : [...without(next.tasks, ids), ...ids]
28001
+ };
28002
+ const name = row.area.name;
28003
+ return on ? {
28004
+ ...next,
28005
+ whole: without(next.whole, [name]),
28006
+ tasks: without(next.tasks, ids)
28007
+ } : {
28008
+ ...next,
28009
+ whole: [...next.whole, name],
28010
+ tasks: without(next.tasks, ids)
28011
+ };
28012
+ }
28013
+ const name = row.area.name;
28014
+ if (name !== null && next.whole.includes(name)) return {
28015
+ ...next,
28016
+ whole: without(next.whole, [name]),
28017
+ tasks: [...without(next.tasks, ids), ...without(ids, [row.task.id])]
28018
+ };
28019
+ return next.tasks.includes(row.task.id) ? {
28020
+ ...next,
28021
+ tasks: without(next.tasks, [row.task.id])
28022
+ } : {
28023
+ ...next,
28024
+ tasks: [...next.tasks, row.task.id]
28025
+ };
28026
+ };
28027
+ const selection = (state) => ({
28028
+ all: state.all,
28029
+ areas: state.all ? [] : state.whole,
28030
+ tasks: state.all ? [] : state.tasks
28031
+ });
28032
+ /** The chosen scope in lines, as the confirmation shows it. */
28033
+ const describe = (areas, chosen) => {
28034
+ if (chosen.all) return ["✓ All areas and tasks"];
28035
+ const lines = chosen.areas.map((name) => `✓ ${name} — all tasks, and new ones`);
28036
+ for (const area of areas) {
28037
+ const picked = area.tasks.filter((task) => chosen.tasks.includes(task.id));
28038
+ if (picked.length === 0) continue;
28039
+ lines.push(`✓ ${area.name ?? "No area"} — ${picked.length === 1 ? picked[0].title : `${picked.length} tasks`}`);
28040
+ }
28041
+ return lines;
28042
+ };
28043
+ const box = (state) => state === "on" ? "[x]" : state === "some" ? "[-]" : "[ ]";
28044
+ const clip = (text, width) => text.length <= width ? text : `${text.slice(0, Math.max(width - 1, 1))}…`;
28045
+ const label$1 = (state, row) => {
28046
+ switch (row.kind) {
28047
+ case "all": return `${box(mark(state, row))} All areas and tasks`;
28048
+ case "area": {
28049
+ const arrow = state.open.includes(row.area.name) ? "▾" : "▸";
28050
+ const owner = row.area.owner === void 0 ? "" : ` · ${row.area.owner}'s`;
28051
+ return `${arrow} ${box(mark(state, row))} ${row.area.name ?? "No area"} (${row.area.tasks.length})${owner}`;
28052
+ }
28053
+ case "areaAll": return ` ${box(mark(state, row))} All tasks in ${row.area.name}`;
28054
+ case "task": {
28055
+ const tags = [...row.task.openspec === true ? ["OpenSpec"] : [], ...row.task.owner === void 0 ? [] : [`${row.task.owner}'s`]];
28056
+ return ` ${box(mark(state, row))} ${row.task.title}${tags.length === 0 ? "" : ` · ${tags.join(" · ")}`}`;
28057
+ }
28058
+ case "continue": return "Continue";
28059
+ }
28060
+ };
28061
+ const VISIBLE = 16;
28062
+ const HINT = "↑↓ move · space select · → open · ← close · Enter on Continue";
28063
+ /** The frame: a window of rows around the cursor, each one line at most `width` wide. */
28064
+ const frame = (state, message, width = 80) => {
28065
+ const all = rows(state);
28066
+ const start = Math.max(0, Math.min(state.cursor - Math.floor(VISIBLE / 2), all.length - VISIBLE));
28067
+ const shown = all.slice(start, start + VISIBLE);
28068
+ return [
28069
+ `? ${message}`,
28070
+ ...start > 0 ? [" ↑ more"] : [],
28071
+ ...shown.map((row, index) => clip(`${start + index === state.cursor ? "❯ " : " "}${label$1(state, row)}`, width)),
28072
+ ...start + VISIBLE < all.length ? [" ↓ more"] : [],
28073
+ clip(HINT, width)
28074
+ ];
28075
+ };
28076
+ /** A key, as the prompt hands it: what becomes of the state, or the selection when done. */
28077
+ const press$1 = (state, key) => {
28078
+ const all = rows(state);
28079
+ const row = all[state.cursor];
28080
+ const move = (cursor) => ({ state: {
28081
+ ...state,
28082
+ cursor
28083
+ } });
28084
+ const area = row.kind === "area" || row.kind === "areaAll" || row.kind === "task" ? row.area : null;
28085
+ switch (key) {
28086
+ case "up": return move((state.cursor - 1 + all.length) % all.length);
28087
+ case "down":
28088
+ case "tab": return move((state.cursor + 1) % all.length);
28089
+ case "space": return { state: toggle(state, row) };
28090
+ case "right": return area === null || state.open.includes(area.name) ? { state } : { state: {
28091
+ ...state,
28092
+ open: [...state.open, area.name]
28093
+ } };
28094
+ case "left": {
28095
+ if (area === null || !state.open.includes(area.name)) return { state };
28096
+ const closed = {
28097
+ ...state,
28098
+ open: state.open.filter((name) => name !== area.name)
28099
+ };
28100
+ return { state: {
28101
+ ...closed,
28102
+ cursor: rows(closed).findIndex((r) => r.kind === "area" && r.area === area)
28103
+ } };
28104
+ }
28105
+ case "enter":
28106
+ case "return":
28107
+ if (row.kind === "continue") return { done: selection(state) };
28108
+ if (row.kind === "area") return press$1(state, state.open.includes(row.area.name) ? "left" : "right");
28109
+ return { state: toggle(state, row) };
28110
+ default: return { state };
28111
+ }
28112
+ };
28113
+ const Action = taggedEnum();
28114
+ /** The tree as a terminal prompt. */
28115
+ const treePrompt = (message, areas) => {
28116
+ let drawn = 0;
28117
+ const erase = () => {
28118
+ return drawn === 0 ? "" : `${"\x1B[2K\x1B[1A".repeat(drawn - 1)}\x1b[2K\x1b[G`;
28119
+ };
28120
+ return Custom(initialTree(areas), {
28121
+ render: (state, action) => sync$2(() => {
28122
+ if (action._tag === "Submit") {
28123
+ drawn = 1;
28124
+ return `✔ ${message}`;
28125
+ }
28126
+ const lines = frame(state, message, (process.stdout.columns ?? 0) > 20 ? process.stdout.columns - 1 : 80);
28127
+ drawn = lines.length;
28128
+ return `\x1b[?25l${lines.join("\n")}`;
28129
+ }),
28130
+ process: (input, state) => sync$2(() => {
28131
+ const name = input.key.name === "" ? getOrElse(input.input, () => "") : input.key.name;
28132
+ const next = press$1(state, name === " " ? "space" : name);
28133
+ return "done" in next ? Action.Submit({ value: next.done }) : Action.NextFrame({ state: next.state });
28134
+ }),
28135
+ clear: () => sync$2(erase)
28136
+ });
28137
+ };
28138
+ //#endregion
27906
28139
  //#region src/cli/peerCoreMenu.ts
27907
28140
  /**
27908
28141
  * `peer core create`, `peer core invite`, and the menu `peer core login` opens on a terminal: what
@@ -27942,7 +28175,9 @@ const invite = (input, status, io) => gen$1(function* () {
27942
28175
  workspace: slug,
27943
28176
  email,
27944
28177
  ...input.admin === true ? { role: "admin" } : {},
27945
- ...projects.length > 0 ? { projects } : {}
28178
+ ...projects.length > 0 ? { projects } : {},
28179
+ ...input.areas === void 0 || input.areas.length === 0 ? {} : { areas: input.areas },
28180
+ ...input.tasks === void 0 || input.tasks.length === 0 ? {} : { tasks: input.tasks }
27946
28181
  });
27947
28182
  const failed = result.delivery?.error;
27948
28183
  yield* io.say(`Invited: ${email} to ${slug}${projects.length > 0 ? ` (projects ${projects.join(", ")})` : ""}${input.admin === true ? " as admin" : ""}.`);
@@ -27999,11 +28234,13 @@ async function findRepositories(home, limit = 25) {
27999
28234
  const RECOMMENDED = "Recommended";
28000
28235
  /** `~/…` for a path under the home directory: the name matters, the full path is context. */
28001
28236
  const shortPath = (path, home) => path === home || path.startsWith(`${home}${NodePath.sep}`) ? `~${path.slice(home.length)}` : path;
28002
- /** The lines above the menu: who, which workspace, and the project here. */
28003
- const menuContext = (status, here, home) => {
28237
+ /** The lines above the menu: who, which workspace, the project here, and the editors connected. */
28238
+ const menuContext = (status, here, editors) => {
28004
28239
  const names = status.workspaces.map((w) => w.slug);
28005
28240
  const lines = [`Signed in as ${status.email ?? "nobody"}`, names.length === 0 ? "Workspace: none yet" : names.length === 1 ? `Workspace: ${names[0]}` : `Workspaces: ${names.join(", ")}`];
28006
- if (here !== null) lines.push(`Current project: ${NodePath.basename(here.root)} (${shortPath(here.root, home)}) · ${here.state === "connected" ? `connected to ${here.workspace}/${here.project}` : here.state === "clone" ? `a clone of ${here.project}, not connected` : "not connected"}`);
28241
+ if (here !== null) lines.push(`Project: ${NodePath.basename(here.root)} · ${here.state === "connected" ? `Connected${here.project === NodePath.basename(here.root) ? "" : ` as ${here.workspace}/${here.project}`}` : here.state === "clone" ? `Clone of ${here.project}, not connected` : "Not connected"}`);
28242
+ const connected = editors.filter((e) => e.connected);
28243
+ lines.push(connected.length === 0 ? "Editors: none connected yet" : ["Editors:", ...connected.map((e) => ` ✓ ${e.title}`)].join("\n"));
28007
28244
  return lines;
28008
28245
  };
28009
28246
  /**
@@ -28012,7 +28249,7 @@ const menuContext = (status, here, home) => {
28012
28249
  * the project here, else inviting a teammate to it. Inviting is offered where they own or
28013
28250
  * administer a workspace; joining or creating one stays reachable, Exit last.
28014
28251
  */
28015
- const menuItems = (status, here) => {
28252
+ const menuItems = (status, here, editors = []) => {
28016
28253
  const offers = [...(status.foundings ?? []).filter((f) => f.expired !== true).map((f) => ({
28017
28254
  title: `Accept ${f.name}, founded for you`,
28018
28255
  value: {
@@ -28054,11 +28291,27 @@ const menuItems = (status, here) => {
28054
28291
  description: "The app: tasks, agents and who works on what.",
28055
28292
  value: { kind: "open" }
28056
28293
  }];
28294
+ const launch = here?.state === "connected" ? editors.filter((e) => e.connected && e.launchable).map((e) => ({
28295
+ title: `Open ${e.title}`,
28296
+ description: `In ${NodePath.basename(here.root)}, with Peer coordinating its agents.`,
28297
+ value: {
28298
+ kind: "launch",
28299
+ editor: e.id,
28300
+ folder: here.root
28301
+ }
28302
+ })) : [];
28303
+ const openspec = here?.state === "connected" && here.openspec === true ? [{
28304
+ title: "Sync OpenSpec changes",
28305
+ description: "New changes become tasks; edits made in Peer stay.",
28306
+ value: { kind: "openspec" }
28307
+ }] : [];
28057
28308
  const items = inWorkspace ? [
28058
28309
  ...offers,
28059
28310
  ...here?.state === "connected" ? [
28311
+ ...launch,
28060
28312
  ...invite,
28061
28313
  ...work,
28314
+ ...openspec,
28062
28315
  ...connectHere
28063
28316
  ] : [
28064
28317
  ...connectHere,
@@ -28087,7 +28340,11 @@ const menuItems = (status, here) => {
28087
28340
  value: { kind: "join" }
28088
28341
  }
28089
28342
  ];
28090
- items.push({
28343
+ items.push(editors.some((e) => e.connected) ? {
28344
+ title: "Manage integrations",
28345
+ description: "Connect or disconnect editors and agents.",
28346
+ value: { kind: "editor" }
28347
+ } : {
28091
28348
  title: "Connect an editor",
28092
28349
  description: "So your agents (Claude Code, Codex, Cursor, …) coordinate through Peer.",
28093
28350
  value: { kind: "editor" }
@@ -28122,21 +28379,30 @@ const menu = (ask, steps, io) => gen$1(function* () {
28122
28379
  for (;;) {
28123
28380
  const status = yield* steps.status;
28124
28381
  const here = yield* steps.here;
28125
- const context = menuContext(status, here, steps.home).join("\n");
28382
+ const editors = yield* steps.editors;
28383
+ const editorsConnected = editors.some((e) => e.connected);
28384
+ const context = menuContext(status, here, editors).join("\n");
28126
28385
  if (context !== shown) {
28127
28386
  yield* io.say(context);
28128
28387
  shown = context;
28129
28388
  }
28130
- const item = yield* ask.choose("What would you like to do?", menuItems(status, here));
28131
- if (item === null || item.kind === "exit") return;
28389
+ const item = yield* ask.choose("What would you like to do?", menuItems(status, here, editors));
28390
+ if (item === null || item.kind === "exit") return { editorsConnected };
28391
+ if (item.kind === "launch") return {
28392
+ editorsConnected,
28393
+ launch: {
28394
+ editor: item.editor,
28395
+ folder: item.folder
28396
+ }
28397
+ };
28132
28398
  if (item.kind === "open") {
28133
- if (yield* steps.openPeer.pipe(as(true), catch_((error) => io.say(String(error.message).replace(/^peer core: /, "")).pipe(as(false))))) return;
28399
+ if (yield* steps.openPeer.pipe(as(true), catch_((error) => io.say(String(error.message).replace(/^peer core: /, "")).pipe(as(false))))) return { editorsConnected: false };
28134
28400
  continue;
28135
28401
  }
28136
28402
  const connect = (folder) => gen$1(function* () {
28137
28403
  const joined = yield* steps.share(folder);
28138
28404
  if (joined === null) return;
28139
- const ready = yield* steps.agentsReady;
28405
+ const ready = (yield* steps.editors).some((e) => e.connected);
28140
28406
  yield* io.say([
28141
28407
  "",
28142
28408
  `✓ Signed in as ${status.email ?? ""}`,
@@ -28145,6 +28411,10 @@ const menu = (ask, steps, io) => gen$1(function* () {
28145
28411
  "",
28146
28412
  "Your project is ready for collaboration."
28147
28413
  ].join("\n"));
28414
+ yield* steps.openspec({
28415
+ ...joined,
28416
+ root: folder
28417
+ });
28148
28418
  shown = "";
28149
28419
  });
28150
28420
  yield* gen$1(function* () {
@@ -28174,10 +28444,19 @@ const menu = (ask, steps, io) => gen$1(function* () {
28174
28444
  if (folder !== null && folder.trim() !== "") yield* connect(folder.trim());
28175
28445
  return;
28176
28446
  }
28177
- case "editor":
28178
- yield* steps.editor;
28447
+ case "editor": {
28448
+ const id = yield* ask.choose("Which editor or agent?", editors.map((e) => ({
28449
+ title: `${e.connected ? "✓ " : " "}${e.title}`,
28450
+ description: e.connected ? "Connected: choose it to disconnect" : "Connect it",
28451
+ value: e.id
28452
+ })));
28453
+ const chosen = editors.find((e) => e.id === id);
28454
+ if (chosen === void 0) return;
28455
+ if (!chosen.connected) yield* steps.connectEditor(chosen.id);
28456
+ else if (yield* ask.confirm(`Disconnect ${chosen.title} from Peer?`, false)) yield* steps.disconnectEditor(chosen.id);
28179
28457
  shown = "";
28180
28458
  return;
28459
+ }
28181
28460
  case "workspace": {
28182
28461
  const next = yield* ask.choose("Join or create", [{
28183
28462
  title: "Join a workspace",
@@ -28194,6 +28473,13 @@ const menu = (ask, steps, io) => gen$1(function* () {
28194
28473
  }
28195
28474
  case "create": return yield* createStep;
28196
28475
  case "join": return yield* joinStep;
28476
+ case "openspec":
28477
+ if (here?.state === "connected") yield* steps.openspec({
28478
+ workspace: here.workspace,
28479
+ project: here.project,
28480
+ root: here.root
28481
+ });
28482
+ return;
28197
28483
  case "task": {
28198
28484
  const projects = status.workspaces.flatMap((w) => w.projects.map((p) => ({
28199
28485
  workspace: w.slug,
@@ -28218,20 +28504,62 @@ const menu = (ask, steps, io) => gen$1(function* () {
28218
28504
  }
28219
28505
  case "invite": {
28220
28506
  const slugs = status.workspaces.filter((w) => inviter(w.role)).map((w) => w.slug);
28221
- const slug = slugs.length === 1 ? slugs[0] : yield* ask.choose("Invite to which workspace?", slugs.map((s) => ({
28507
+ const slug = here?.state === "connected" && slugs.includes(here.workspace) ? here.workspace : slugs.length === 1 ? slugs[0] : yield* ask.choose("Invite to which workspace?", slugs.map((s) => ({
28222
28508
  title: s,
28223
28509
  value: s
28224
28510
  })));
28225
28511
  if (slug === null) return;
28226
- const email = yield* ask.text(`Their email (invited to ${slug})`);
28512
+ const email = yield* ask.text("Teammate email");
28227
28513
  if (email === null || email.trim() === "") return;
28228
28514
  const projects = status.workspaces.find((w) => w.slug === slug)?.projects.map((p) => p.project.id) ?? [];
28229
- const chosen = projects.length === 0 ? [] : yield* ask.pick("Which projects (none chosen: all, now and later)", projects);
28515
+ const project = here?.state === "connected" && here.workspace === slug ? here.project : projects.length <= 1 ? projects[0] ?? null : yield* ask.choose("Which project?", projects.map((p) => ({
28516
+ title: p,
28517
+ value: p
28518
+ })));
28519
+ if (project === null) return yield* steps.invite({
28520
+ email,
28521
+ workspace: slug,
28522
+ projects: []
28523
+ });
28524
+ const areas = yield* steps.scope(slug, project);
28525
+ const how = yield* ask.choose("What would you like to assign?", [{
28526
+ title: "All areas and tasks",
28527
+ description: "Every area that has no owner yet, with its new tasks.",
28528
+ value: "all"
28529
+ }, {
28530
+ title: "Select areas or tasks",
28531
+ value: "pick"
28532
+ }]);
28533
+ if (how === null) return;
28534
+ const chosen = how === "all" ? {
28535
+ all: true,
28536
+ areas: [],
28537
+ tasks: []
28538
+ } : yield* ask.tree("Select areas or tasks", areas);
28230
28539
  if (chosen === null) return;
28540
+ const named = areas.flatMap((a) => a.name === null ? [] : [a.name]);
28541
+ yield* io.say([
28542
+ "",
28543
+ `Invite ${email.trim()}?`,
28544
+ "",
28545
+ `Workspace: ${slug}`,
28546
+ `Project: ${project}`,
28547
+ "",
28548
+ "Assignments:",
28549
+ ...chosen.all || chosen.areas.length > 0 || chosen.tasks.length > 0 ? describe(areas, chosen).map((line) => ` ${line}`) : [" none: they can take any task"],
28550
+ ...areas.filter((a) => a.name !== null && a.owner !== void 0 && (chosen.all || chosen.areas.includes(a.name))).map((a) => ` · ${a.name} stays ${a.owner}'s`),
28551
+ ""
28552
+ ].join("\n"));
28553
+ if (!(yield* ask.confirm("Send invitation?", true))) {
28554
+ yield* io.say("Nothing sent.");
28555
+ return;
28556
+ }
28231
28557
  return yield* steps.invite({
28232
28558
  email,
28233
28559
  workspace: slug,
28234
- projects: chosen
28560
+ projects: [project],
28561
+ areas: chosen.all ? named : chosen.areas,
28562
+ tasks: chosen.all ? [] : chosen.tasks
28235
28563
  });
28236
28564
  }
28237
28565
  }
@@ -28239,6 +28567,214 @@ const menu = (ask, steps, io) => gen$1(function* () {
28239
28567
  }
28240
28568
  });
28241
28569
  //#endregion
28570
+ //#region src/cli/peerCoreOpenSpec.ts
28571
+ /**
28572
+ * OpenSpec in a connected project: each active change (`openspec/changes/<id>/`, not `archive`)
28573
+ * becomes one Peer task whose key is the change's id, in the project area that one of its
28574
+ * capabilities (`specs/<capability>/`) names, when one does. Importing again creates only what is
28575
+ * new and updates a task only where the change moved and Peer did not: what the last import wrote
28576
+ * is kept in `<stateDir>/openspec-sync.json`, so an edit made in Peer is never written over, and an
28577
+ * edit on both sides is a conflict to show. Statuses, owners and everything else Peer holds are
28578
+ * never touched.
28579
+ *
28580
+ * @module cli/peerCoreOpenSpec
28581
+ */
28582
+ const GENERIC_TITLE = /^(proposal|change proposal|change)$/i;
28583
+ /** `add-draft-surveys` → `Add draft surveys`. */
28584
+ const titleOfId = (id) => {
28585
+ const words = id.replace(/[-_]+/g, " ").trim();
28586
+ return words === "" ? id : `${words[0].toUpperCase()}${words.slice(1)}`;
28587
+ };
28588
+ /** The proposal's first heading when it names the change (`# Change: X` → `X`), else the id's words. */
28589
+ const changeTitle = (id, proposal) => {
28590
+ const heading = proposal?.split("\n").find((line) => /^#\s+\S/.test(line))?.replace(/^#\s+/, "").replace(/^(change|proposal)\s*:\s*/i, "").trim();
28591
+ return heading === void 0 || heading === "" || GENERIC_TITLE.test(heading) ? titleOfId(id) : heading.slice(0, 200);
28592
+ };
28593
+ const readText = (path) => NodeFSP.readFile(path, "utf8").catch(() => null);
28594
+ const folders = async (path) => (await NodeFSP.readdir(path, { withFileTypes: true }).catch(() => [])).filter((entry) => entry.isDirectory() && !entry.name.startsWith(".")).map((entry) => entry.name).sort();
28595
+ /** The active changes under `root/openspec/changes`; null when the project has no OpenSpec. */
28596
+ async function readChanges(root) {
28597
+ const dir = NodePath.join(root, "openspec", "changes");
28598
+ const stat = await NodeFSP.stat(dir).catch(() => null);
28599
+ if (stat === null || !stat.isDirectory()) return null;
28600
+ const changes = [];
28601
+ for (const id of await folders(dir)) {
28602
+ if (id === "archive") continue;
28603
+ const tasks = await readText(NodePath.join(dir, id, "tasks.md")) ?? "";
28604
+ changes.push({
28605
+ id,
28606
+ title: changeTitle(id, await readText(NodePath.join(dir, id, "proposal.md"))),
28607
+ capabilities: await folders(NodePath.join(dir, id, "specs")),
28608
+ done: (tasks.match(/^\s*[-*] \[[xX]\]/gm) ?? []).length,
28609
+ total: (tasks.match(/^\s*[-*] \[[ xX]\]/gm) ?? []).length
28610
+ });
28611
+ }
28612
+ return changes;
28613
+ }
28614
+ const comparable = (name) => name.toLowerCase().replace(/[^a-z0-9]+/g, "");
28615
+ /** The project area one of the change's capabilities names, when exactly one area matches. */
28616
+ const areaOf = (change, areas) => {
28617
+ const matched = new Set(areas.filter((area) => change.capabilities.some((capability) => comparable(capability) === comparable(area))));
28618
+ return matched.size === 1 ? [...matched][0] : null;
28619
+ };
28620
+ /**
28621
+ * What importing `changes` into a project would do, given its tasks and areas now and what the
28622
+ * last import wrote. A field is updated only when the change moved and Peer still holds what the
28623
+ * import wrote; a field both sides changed differently is a conflict; a task with the change's key
28624
+ * that no import wrote is adopted only where it already agrees.
28625
+ */
28626
+ const plan = (changes, tasks, areas, record) => changes.map((change) => {
28627
+ const area = areaOf(change, areas);
28628
+ const last = record[change.id];
28629
+ const task = tasks.find((t) => last !== void 0 && t.id === last.task) ?? tasks.find((t) => t.key?.toLowerCase() === change.id.toLowerCase());
28630
+ if (task === void 0) return {
28631
+ kind: "create",
28632
+ change,
28633
+ area
28634
+ };
28635
+ const base = last ?? {
28636
+ task: task.id,
28637
+ title: task.title,
28638
+ area: task.area ?? null
28639
+ };
28640
+ const fields = [];
28641
+ let title;
28642
+ let nextArea;
28643
+ if (change.title !== task.title) {
28644
+ if (last !== void 0 && task.title === base.title) title = change.title;
28645
+ else if (last === void 0 || change.title !== base.title) fields.push("title");
28646
+ }
28647
+ const held = task.area ?? null;
28648
+ if (area !== held) {
28649
+ if (last !== void 0 && held === base.area) nextArea = area;
28650
+ else if (last === void 0 || area !== base.area) fields.push("area");
28651
+ }
28652
+ if (fields.length > 0) return {
28653
+ kind: "conflict",
28654
+ change,
28655
+ task,
28656
+ fields
28657
+ };
28658
+ if (title === void 0 && nextArea === void 0) return {
28659
+ kind: "same",
28660
+ change,
28661
+ task
28662
+ };
28663
+ return {
28664
+ kind: "update",
28665
+ change,
28666
+ task,
28667
+ ...title === void 0 ? {} : { title },
28668
+ ...nextArea === void 0 ? {} : { area: nextArea }
28669
+ };
28670
+ });
28671
+ /** The plan in a line: what is new, what moves, what conflicts. */
28672
+ const summary = (steps) => {
28673
+ const count = (kind) => steps.filter((s) => s.kind === kind).length;
28674
+ const parts = [
28675
+ `${count("create")} new`,
28676
+ `${count("update")} to update`,
28677
+ ...count("conflict") > 0 ? [`${count("conflict")} in conflict`] : [],
28678
+ `${count("same")} up to date`
28679
+ ];
28680
+ return `${steps.length} OpenSpec change${steps.length === 1 ? "" : "s"}: ${parts.join(", ")}`;
28681
+ };
28682
+ const recordPath = (stateDir) => NodePath.join(stateDir, "openspec-sync.json");
28683
+ const readRecord = (stateDir) => NodeFSP.readFile(recordPath(stateDir), "utf8").then((text) => JSON.parse(text)).catch(() => ({}));
28684
+ const writeRecord = async (stateDir, record) => {
28685
+ const path = recordPath(stateDir);
28686
+ await NodeFSP.writeFile(`${path}.tmp`, `${JSON.stringify(record, null, 2)}\n`, { mode: 384 });
28687
+ await NodeFSP.rename(`${path}.tmp`, path);
28688
+ };
28689
+ /** The project's tasks and areas as the Hub says now, the changes here, and the plan. */
28690
+ const prepare = (target) => gen$1(function* () {
28691
+ const changes = yield* promise(() => readChanges(target.root));
28692
+ if (changes === null) return null;
28693
+ const client = yield* PeerHubClient;
28694
+ const { hubUrl, session } = yield* client.session;
28695
+ const project = (yield* client.api.work(hubUrl, session, target.workspace)).projects[target.project];
28696
+ const areas = project?.areas ?? [];
28697
+ const record = yield* promise(() => readRecord(target.stateDir));
28698
+ const key = `${target.workspace}/${target.project}`;
28699
+ return {
28700
+ changes,
28701
+ areas,
28702
+ steps: plan(changes, project?.tasks ?? [], areas, record[key] ?? {})
28703
+ };
28704
+ });
28705
+ /**
28706
+ * Applies `steps`: creates and updates tasks through the Hub, and records what it wrote. A conflict
28707
+ * is said, never written; a failure stops with what was done recorded.
28708
+ */
28709
+ const apply = (target, steps, io) => gen$1(function* () {
28710
+ const work = yield* PeerWork;
28711
+ const key = `${target.workspace}/${target.project}`;
28712
+ const record = { ...yield* promise(() => readRecord(target.stateDir)) };
28713
+ const mine = { ...record[key] };
28714
+ const save = promise(() => writeRecord(target.stateDir, {
28715
+ ...record,
28716
+ [key]: mine
28717
+ }));
28718
+ for (const step of steps) if (step.kind === "create") {
28719
+ const { createdTask } = yield* work.createTask({
28720
+ workspace: target.workspace,
28721
+ projectId: target.project,
28722
+ title: step.change.title,
28723
+ key: step.change.id,
28724
+ ...step.area === null ? {} : { area: step.area }
28725
+ }).pipe(tapError(() => save));
28726
+ mine[step.change.id] = {
28727
+ task: createdTask.id,
28728
+ title: step.change.title,
28729
+ area: step.area
28730
+ };
28731
+ yield* io.say(`+ ${step.change.title}${step.area === null ? "" : ` (${step.area})`} · ${step.change.id}`);
28732
+ } else if (step.kind === "update") {
28733
+ yield* work.updateTask({
28734
+ workspace: target.workspace,
28735
+ projectId: target.project,
28736
+ taskId: step.task.id,
28737
+ ...step.title === void 0 ? {} : { title: step.title },
28738
+ ...step.area === void 0 ? {} : { area: step.area ?? "" }
28739
+ }).pipe(tapError(() => save));
28740
+ mine[step.change.id] = {
28741
+ task: step.task.id,
28742
+ title: step.title ?? step.task.title,
28743
+ area: step.area === void 0 ? step.task.area ?? null : step.area
28744
+ };
28745
+ yield* io.say(`~ ${step.title ?? step.task.title} · ${step.change.id}`);
28746
+ } else if (step.kind === "conflict") yield* io.say(`! ${step.task.title} · ${step.change.id}: the ${step.fields.join(" and ")} changed in OpenSpec and in Peer; Peer's stays. Change one of them to match.`);
28747
+ else if (mine[step.change.id] === void 0) mine[step.change.id] = {
28748
+ task: step.task.id,
28749
+ title: step.task.title,
28750
+ area: step.task.area ?? null
28751
+ };
28752
+ yield* save;
28753
+ });
28754
+ /**
28755
+ * Shows what importing would do and, when something would change and `confirm` agrees, does it.
28756
+ * Nothing to import says so; a project without `openspec/` says nothing and returns false.
28757
+ */
28758
+ const sync = (target, confirm, io) => gen$1(function* () {
28759
+ const prepared = yield* prepare(target);
28760
+ if (prepared === null) return false;
28761
+ const { steps } = prepared;
28762
+ yield* io.say(summary(steps));
28763
+ for (const step of steps) if (step.kind === "conflict") yield* io.say(`! ${step.change.id}: the ${step.fields.join(" and ")} differs in Peer (${step.task.title}); Peer's stays.`);
28764
+ const work = steps.filter((step) => step.kind === "create" || step.kind === "update");
28765
+ if (work.length === 0) {
28766
+ yield* apply(target, steps, io);
28767
+ return true;
28768
+ }
28769
+ if (!(yield* confirm(`Import ${work.length} as tasks of ${target.workspace}/${target.project}?`))) {
28770
+ yield* io.say("Nothing imported.");
28771
+ return true;
28772
+ }
28773
+ yield* apply(target, steps, io);
28774
+ yield* io.say("Imported. A task's key is its change's id, so a branch named after the change attaches to it.");
28775
+ return true;
28776
+ });
28777
+ //#endregion
28242
28778
  //#region src/cli/peerCoreShare.ts
28243
28779
  /**
28244
28780
  * `peer core share [folder]`: a folder on this computer becomes a project of a workspace, either a
@@ -28719,6 +29255,7 @@ const menuAsk = {
28719
29255
  }))
28720
29256
  })).pipe(orElseSucceed(() => null)),
28721
29257
  confirm: shareAsk.confirm,
29258
+ tree: (message, areas) => run$3(treePrompt(message, areas)).pipe(orElseSucceed(() => null)),
28722
29259
  folder: (message) => run$3(File({
28723
29260
  type: "directory",
28724
29261
  message,
@@ -28732,7 +29269,7 @@ const runMenu = (stateDir) => gen$1(function* () {
28732
29269
  const workspaces = yield* PeerWorkspaces;
28733
29270
  const state = yield* PeerState;
28734
29271
  const status = workspaces.sync.pipe(hubFailure);
28735
- yield* menu(menuAsk, {
29272
+ return yield* menu(menuAsk, {
28736
29273
  status,
28737
29274
  home: NodeOS.homedir(),
28738
29275
  here: gen$1(function* () {
@@ -28743,7 +29280,8 @@ const runMenu = (stateDir) => gen$1(function* () {
28743
29280
  root: checkout.root,
28744
29281
  state: "connected",
28745
29282
  workspace: place.workspace,
28746
- project: place.project
29283
+ project: place.project,
29284
+ openspec: NodeFS.existsSync(NodePath.join(checkout.root, "openspec", "changes"))
28747
29285
  };
28748
29286
  const remote = yield* promise(() => remoteOf(checkout.remoteRoot));
28749
29287
  const { persisted } = yield* state.read;
@@ -28757,11 +29295,17 @@ const runMenu = (stateDir) => gen$1(function* () {
28757
29295
  project: `${match.workspace}/${match.project}`
28758
29296
  };
28759
29297
  }),
28760
- agentsReady: gen$1(function* () {
29298
+ editors: gen$1(function* () {
28761
29299
  const coordination = (yield* status).coordination;
28762
29300
  const mcp = yield* (yield* McpClients).connected;
28763
- return coordination.claudeHooks || (coordination.codexHookHomes ?? []).some((home) => home.installed && home.trusted) || mcp.length > 0;
28764
- }).pipe(orElseSucceed(() => false)),
29301
+ const env = yield* Environment;
29302
+ return EDITORS.map((id) => ({
29303
+ id,
29304
+ title: editorTitle(id),
29305
+ connected: id === "claude" ? coordination.claudeHooks : id === "codex" ? (coordination.codexHookHomes ?? []).some((home) => home.installed) : mcp.includes(id),
29306
+ launchable: (id === "claude" || id === "codex") && onPath(id, env.PATH)
29307
+ }));
29308
+ }).pipe(orElseSucceed(() => [])),
28765
29309
  join: (slug) => join({ target: slug }, terminalIo).pipe(flatMap$1((joined) => sayNextStep(joined, terminalIo)), hubFailure),
28766
29310
  founding: (slug) => workspaces.acceptFounding({ slug }).pipe(andThen(log(`Accepted: ${slug}. You are its owner.`)), hubFailure),
28767
29311
  create: (name) => create({ name }, terminalIo).pipe(asVoid, hubFailure),
@@ -28798,11 +29342,45 @@ const runMenu = (stateDir) => gen$1(function* () {
28798
29342
  }, terminalIo);
28799
29343
  yield* log("Your agents in the project see it with peer tasks, and Peer tells them who works on what.");
28800
29344
  }).pipe(hubFailure),
29345
+ scope: (workspace, project) => gen$1(function* () {
29346
+ const client = yield* PeerHubClient;
29347
+ const { hubUrl, session } = yield* client.session;
29348
+ const work = (yield* client.api.work(hubUrl, session, workspace)).projects[project];
29349
+ const view = yield* client.api.taskOwners(hubUrl, session, workspace).pipe(option);
29350
+ const owners = isSome(view) ? view.value.projects[project] : void 0;
29351
+ const imported = new Set(Object.values((yield* promise(() => readRecord(stateDir)))[`${workspace}/${project}`] ?? {}).map((entry) => entry.task));
29352
+ const tasks = (work?.tasks ?? []).filter((task) => task.status !== "done");
29353
+ const treeTask = (task) => {
29354
+ const owner = owners?.tasks[task.id]?.owner;
29355
+ return {
29356
+ id: task.id,
29357
+ title: task.title,
29358
+ ...owner === void 0 ? {} : { owner },
29359
+ ...imported.has(task.id) ? { openspec: true } : {}
29360
+ };
29361
+ };
29362
+ const named = [...work?.areas ?? [], ...tasks.flatMap((task) => task.area === void 0 ? [] : [task.area])];
29363
+ return [...[...new Set(named)].map((name) => {
29364
+ const owner = owners?.map.areas[name];
29365
+ return {
29366
+ name,
29367
+ ...owner === void 0 ? {} : { owner },
29368
+ tasks: tasks.filter((task) => task.area === name).map(treeTask)
29369
+ };
29370
+ }), {
29371
+ name: null,
29372
+ tasks: tasks.filter((task) => task.area === void 0).map(treeTask)
29373
+ }];
29374
+ }).pipe(hubFailure),
29375
+ openspec: (target) => sync({
29376
+ ...target,
29377
+ stateDir
29378
+ }, (message) => shareAsk.confirm(message, true), terminalIo).pipe(hubFailure),
28801
29379
  openPeer: gen$1(function* () {
28802
29380
  const app = ["/Applications/Peer.app", NodePath.join(NodeOS.homedir(), "Applications", "Peer.app")].find((path) => NodeFS.existsSync(path));
28803
29381
  const platform = yield* Platform;
28804
29382
  const opener = platform === "darwin" ? "open" : platform === "win32" ? void 0 : "xdg-open";
28805
- const launch = (target) => sync$1(() => NodeChildProcess.spawn(opener, [target], {
29383
+ const launch = (target) => sync$2(() => NodeChildProcess.spawn(opener, [target], {
28806
29384
  detached: true,
28807
29385
  stdio: "ignore"
28808
29386
  }).unref());
@@ -28814,10 +29392,8 @@ const runMenu = (stateDir) => gen$1(function* () {
28814
29392
  if (opener !== void 0) yield* launch(PEER_DOWNLOAD);
28815
29393
  return yield* fail(`peer core: the Peer app is not installed here${opener === void 0 ? "" : "; its download page is open"}: ${PEER_DOWNLOAD}`);
28816
29394
  }),
28817
- editor: gen$1(function* () {
28818
- const editor = yield* shareAsk.choose("Connect which editor?", editorChoices(yield* detectedEditors));
28819
- if (editor !== null) yield* connectEditor(editor, stateDir, terminalIo);
28820
- }).pipe(hubFailure)
29395
+ connectEditor: (id) => connectEditor(id, stateDir, terminalIo).pipe(hubFailure),
29396
+ disconnectEditor: (id) => disconnectEditor(id, terminalIo).pipe(hubFailure)
28821
29397
  }, terminalIo);
28822
29398
  });
28823
29399
  const registerIn = (stateDir) => (path, name) => tryPromise({
@@ -28832,12 +29408,15 @@ const loginCommand = make$62("login", {
28832
29408
  }).pipe(withDescription("Sign this computer's Peer in to its Peer Hub; on a terminal, then a menu: create or join a workspace, share, invite."), withHandler((flags) => gen$1(function* () {
28833
29409
  const config = yield* resolveConfig(flags);
28834
29410
  yield* refuseWhileRunning(config.stateDir);
28835
- yield* gen$1(function* () {
29411
+ const end = yield* gen$1(function* () {
28836
29412
  const signedIn = (yield* (yield* PeerState).read).persisted.email;
28837
29413
  const email = getOrUndefined(flags.email)?.trim();
28838
29414
  if (email === void 0 || signedIn !== null && signedIn === email) {
28839
29415
  if (signedIn === null) return yield* fail("peer core: nobody is signed in; run peer core login <email>.");
28840
- if (!isTerminal()) return yield* log(`Signed in: ${signedIn}`);
29416
+ if (!isTerminal()) {
29417
+ yield* log(`Signed in: ${signedIn}`);
29418
+ return;
29419
+ }
28841
29420
  return yield* runMenu(config.stateDir);
28842
29421
  }
28843
29422
  yield* login({
@@ -28845,9 +29424,41 @@ const loginCommand = make$62("login", {
28845
29424
  ...isSome(flags.code) ? { code: flags.code.value } : {},
28846
29425
  ...isSome(flags.hub) ? { hub: flags.hub.value } : {}
28847
29426
  }, terminalIo);
28848
- if (isTerminal()) yield* runMenu(config.stateDir);
29427
+ return isTerminal() ? yield* runMenu(config.stateDir) : void 0;
28849
29428
  }).pipe(hubFailure, provide(layer$107.pipe(provideMerge(oneShotLayer(config)))));
29429
+ if (end !== void 0) yield* afterMenu(end, config, flags);
28850
29430
  })));
29431
+ /** Whether `command` is an executable in one of `path`'s folders. */
29432
+ const onPath = (command, path) => (path ?? "").split(NodePath.delimiter).some((dir) => {
29433
+ try {
29434
+ NodeFS.accessSync(NodePath.join(dir, command), NodeFS.constants.X_OK);
29435
+ return true;
29436
+ } catch {
29437
+ return false;
29438
+ }
29439
+ });
29440
+ /**
29441
+ * After the menu, with its state written and closed: Peer Core keeps coordinating when an editor
29442
+ * is connected and no Peer runs (the hooks only talk to a running Peer), and the editor the
29443
+ * person chose starts in the project, in this terminal.
29444
+ */
29445
+ const afterMenu = (end, config, flags) => gen$1(function* () {
29446
+ if ((end.editorsConnected || end.launch !== void 0) && (yield* ownerOf(config.stateDir)) === null) {
29447
+ yield* serveDetached(config, flags);
29448
+ yield* log("Peer Core coordinates your agents in the background; peer core stop ends it.");
29449
+ }
29450
+ const launch = end.launch;
29451
+ if (launch === void 0) return;
29452
+ yield* log(`Starting ${editorTitle(launch.editor)} in ${launch.folder}…`);
29453
+ if ((yield* callback((resume) => {
29454
+ const child = NodeChildProcess.spawn(launch.editor, [], {
29455
+ cwd: launch.folder,
29456
+ stdio: "inherit"
29457
+ });
29458
+ child.once("error", () => resume(succeed$1(127)));
29459
+ child.once("exit", (exit) => resume(succeed$1(exit ?? 0)));
29460
+ })) === 127) return yield* fail(`peer core: could not start ${launch.editor}; is it installed?`);
29461
+ });
28851
29462
  const createCommand = make$62("create", {
28852
29463
  ...authLocationFlags,
28853
29464
  name: String$2("name").pipe(withDescription$2("The workspace's name.")),
@@ -28865,7 +29476,9 @@ const inviteCommand = make$62("invite", {
28865
29476
  email: String$2("email").pipe(withDescription$2("Whom to invite.")),
28866
29477
  workspace: String$1("workspace").pipe(withDescription$1("The workspace (needed when you may invite to several)."), optional),
28867
29478
  project: String$1("project").pipe(withDescription$1("A project they will be on, and no other (repeat it for more)."), atLeast(0)),
28868
- admin: Boolean$1("admin").pipe(withDescription$1("Invite them as an admin."), withDefault(false))
29479
+ admin: Boolean$1("admin").pipe(withDescription$1("Invite them as an admin."), withDefault(false)),
29480
+ area: String$1("area").pipe(withDescription$1("With one --project: an area they will own when they join, its new tasks too (repeat it for more)."), atLeast(0)),
29481
+ task: String$1("task").pipe(withDescription$1("With one --project: a task they will own when they join (repeat it for more)."), atLeast(0))
28869
29482
  }).pipe(withDescription("Mail an invitation to a workspace you own or administer."), withHandler((flags) => gen$1(function* () {
28870
29483
  const config = yield* resolveConfig(flags);
28871
29484
  yield* refuseWhileRunning(config.stateDir);
@@ -28875,6 +29488,8 @@ const inviteCommand = make$62("invite", {
28875
29488
  email: flags.email,
28876
29489
  admin: flags.admin,
28877
29490
  projects: flags.project,
29491
+ areas: flags.area,
29492
+ tasks: flags.task,
28878
29493
  ...isSome(flags.workspace) ? { workspace: flags.workspace.value } : {}
28879
29494
  }, yield* workspaces.sync, terminalIo);
28880
29495
  }).pipe(hubFailure, provide(oneShotLayer(config)));
@@ -28961,6 +29576,25 @@ const logoutCommand = make$62("logout", { ...authLocationFlags }).pipe(withDescr
28961
29576
  yield* log("Signed out.");
28962
29577
  }).pipe(catchTags({ PeerHubError: (error) => fail$2(fail(`peer core: ${error.detail}`)) }), provide(oneShotLayer(config)));
28963
29578
  })));
29579
+ const openspecCommand = make$62("openspec", {
29580
+ ...authLocationFlags,
29581
+ yes: Boolean$1("yes").pipe(withAlias("y"), withDescription$1("Import without asking (without a terminal, nothing is imported without it)."), withDefault(false))
29582
+ }).pipe(withDescription("Import the OpenSpec changes of the connected project you are in as its tasks, or update them."), withHandler((flags) => gen$1(function* () {
29583
+ const config = yield* resolveConfig(flags);
29584
+ yield* refuseWhileRunning(config.stateDir);
29585
+ yield* gen$1(function* () {
29586
+ const state = yield* PeerState;
29587
+ const checkout = yield* repositoryRoot(process.cwd());
29588
+ const place = checkout === null ? null : yield* state.placeOf(checkout.root, { bindByRemote: false });
29589
+ if (checkout === null || place === null || place.workspace === "@local") return yield* outcome("refused", "this folder is no connected project", "connect it with peer core share, then repeat the command.");
29590
+ if (!(yield* sync({
29591
+ workspace: place.workspace,
29592
+ project: place.project,
29593
+ root: checkout.root,
29594
+ stateDir: config.stateDir
29595
+ }, (message) => flags.yes ? succeed$1(true) : isTerminal() ? shareAsk.confirm(message, true) : log(`${message} Add --yes to import.`).pipe(as(false)), terminalIo))) yield* log(`${checkout.root} has no openspec/changes folder.`);
29596
+ }).pipe(hubFailure, provide(oneShotLayer(config)));
29597
+ })));
28964
29598
  const shareCommand = make$62("share", {
28965
29599
  ...authLocationFlags,
28966
29600
  folder: String$2("folder").pipe(withDescription$2("The project's folder (default: the repository you are in, or this folder)."), optional$1),
@@ -29107,6 +29741,7 @@ const makePeerCommand = (name) => make$62(name).pipe(withDescription(name === "p
29107
29741
  joinCommand,
29108
29742
  createCommand,
29109
29743
  inviteCommand,
29744
+ openspecCommand,
29110
29745
  logoutCommand,
29111
29746
  shareCommand,
29112
29747
  bindCommand,
@@ -29201,7 +29836,7 @@ const acquireServerOwnership = fn("acquireServerOwnership")(function* (statePath
29201
29836
  stateDir,
29202
29837
  cause
29203
29838
  })
29204
- }), (db) => readPersistedServerRuntimeState(statePath).pipe(flatMap$1((state) => isSome(state) && state.value.ownerId === ownerId ? clearPersistedServerRuntimeState(statePath) : void_), ignore({ log: true }), ensuring(sync$1(() => db.close()))));
29839
+ }), (db) => readPersistedServerRuntimeState(statePath).pipe(flatMap$1((state) => isSome(state) && state.value.ownerId === ownerId ? clearPersistedServerRuntimeState(statePath) : void_), ignore({ log: true }), ensuring(sync$2(() => db.close()))));
29205
29840
  const previous = yield* readPersistedServerRuntimeState(statePath).pipe(orElseSucceed(() => none$1()));
29206
29841
  if (isSome(previous) && previous.value.ownerId === void 0 && (yield* legacyOwnerIsLive(previous.value))) return yield* new ServerAlreadyRunningError({ stateDir });
29207
29842
  return { publish: (state) => persistServerRuntimeState({
@@ -29693,7 +30328,7 @@ const makeProviderAuthService = gen$1(function* () {
29693
30328
  providerSessionId: session.id,
29694
30329
  reason: "manual_shutdown",
29695
30330
  detail: "Provider sign-in changed."
29696
- }).pipe(tap(() => sync$1(() => released.add(session.id))));
30331
+ }).pipe(tap(() => sync$2(() => released.add(session.id))));
29697
30332
  }), { discard: true })), mapError(() => failure("Could not stop all sessions for this provider. Try again."))), { discard: true });
29698
30333
  if (binding) yield* forEach((yield* registry.listInstances).filter((instance) => instance.instanceId !== instanceId && affectedIds.has(instance.instanceId) && instance.auth?.credentialBinding?.key === binding.key && instance.auth.credentialBinding.owner === binding.owner), (instance) => instance.auth?.invalidate ?? void_, { discard: true });
29699
30334
  });
@@ -32965,7 +33600,7 @@ const layer$62 = effect(ProviderTurnStartServiceV2, gen$1(function* () {
32965
33600
  const start = (input, compact = false) => suspend(() => {
32966
33601
  if (deliver !== void 0) return deliver(input, compact);
32967
33602
  return compact && session.compactThread !== void 0 ? session.compactThread(input) : session.startTurn(input);
32968
- }).pipe(ensuring(sync$1(() => {
33603
+ }).pipe(ensuring(sync$2(() => {
32969
33604
  deliver = void 0;
32970
33605
  })));
32971
33606
  return {
@@ -36272,7 +36907,7 @@ const make$36 = gen$1(function* () {
36272
36907
  return yield* _await(completion);
36273
36908
  });
36274
36909
  yield* fn("StorageCleanup.start")(function* () {
36275
- const unsubscribe = yield* terminals.subscribeMetadata((event) => sync$1(() => {
36910
+ const unsubscribe = yield* terminals.subscribeMetadata((event) => sync$2(() => {
36276
36911
  if (event.type === "snapshot") {
36277
36912
  liveTerminals.clear();
36278
36913
  for (const terminal of event.terminals) noteTerminal(terminal);
@@ -36283,7 +36918,7 @@ const make$36 = gen$1(function* () {
36283
36918
  if (threadTerminals?.size === 0) liveTerminals.delete(event.threadId);
36284
36919
  }
36285
36920
  }));
36286
- yield* addFinalizer$1(() => sync$1(unsubscribe));
36921
+ yield* addFinalizer$1(() => sync$2(unsubscribe));
36287
36922
  const changes = yield* settingsService.subscribeChanges;
36288
36923
  const events = engine.streamDomainEvents;
36289
36924
  let lastSettings = yield* settingsService.getSettings.pipe(orDie);
@@ -36455,7 +37090,7 @@ const make$35 = gen$1(function* () {
36455
37090
  const fetchedStack = !needsStack ? null : knownUnstacked ? { stack: null } : yield* pullRequests.stack(ref, { includeDetails: false }).pipe(map$3((stack) => ({ stack: stack === null ? null : {
36456
37091
  kind: "native",
36457
37092
  ...stack
36458
- } })), catchCauseIf((cause) => !hasInterruptsOnly(cause), (cause) => rateLimitRetryAt(cause) !== void 0 ? sync$1(() => retryStacks.add(key)).pipe(andThen(failCause(cause))) : logWarning("pull request stack lookup failed", { key }).pipe(as(null))));
37093
+ } })), catchCauseIf((cause) => !hasInterruptsOnly(cause), (cause) => rateLimitRetryAt(cause) !== void 0 ? sync$2(() => retryStacks.add(key)).pipe(andThen(failCause(cause))) : logWarning("pull request stack lookup failed", { key }).pipe(as(null))));
36459
37094
  if (needsStack) {
36460
37095
  if (fetchedStack === null) {
36461
37096
  retryStacks.add(key);
@@ -36749,7 +37384,7 @@ const make$34 = gen$1(function* () {
36749
37384
  lives.set(lifeKey(target), life);
36750
37385
  return life;
36751
37386
  };
36752
- const woke = (target) => sync$1(() => {
37387
+ const woke = (target) => sync$2(() => {
36753
37388
  const life = lifeOf(target);
36754
37389
  lives.set(lifeKey(target), {
36755
37390
  ...life,
@@ -38208,7 +38843,7 @@ const githubMediaResponse = fn("GitHubMediaFetch.githubMediaResponse")(function*
38208
38843
  //#region src/observability/BrowserTraceCollector.ts
38209
38844
  var BrowserTraceCollector = class extends Service()("t3/observability/BrowserTraceCollector") {};
38210
38845
  /** @public Service construction is part of the canonical Effect module API. */
38211
- const make$31 = (sink) => BrowserTraceCollector.of({ record: (records) => sync$1(() => {
38846
+ const make$31 = (sink) => BrowserTraceCollector.of({ record: (records) => sync$2(() => {
38212
38847
  for (const record of records) sink.push(record);
38213
38848
  }) });
38214
38849
  const layer$48 = (sink) => succeed$3(BrowserTraceCollector, make$31(sink));
@@ -38811,7 +39446,7 @@ function guardHttpResponseWriteErrors(server, onError) {
38811
39446
  //#region src/rpcInitialItems.ts
38812
39447
  function rpcInitialItems(items) {
38813
39448
  let pending = items;
38814
- return unwrap$1(sync$1(() => {
39449
+ return unwrap$1(sync$2(() => {
38815
39450
  const initial = pending;
38816
39451
  pending = void 0;
38817
39452
  return initial === void 0 ? empty$5 : fromIterable(initial);
@@ -38822,13 +39457,13 @@ function rpcInitialItems(items) {
38822
39457
  function subscribeChatGptHandoff(input, owner, endpoints = void 0) {
38823
39458
  return unwrap$1(gen$1(function* () {
38824
39459
  const bytes = /* @__PURE__ */ new Map();
38825
- yield* addFinalizer$1(() => sync$1(() => bytes.clear()));
39460
+ yield* addFinalizer$1(() => sync$2(() => bytes.clear()));
38826
39461
  const store = ServerSecretStore.of({
38827
- get: (key) => sync$1(() => fromUndefinedOr(bytes.get(key))),
38828
- set: (key, value) => sync$1(() => {
39462
+ get: (key) => sync$2(() => fromUndefinedOr(bytes.get(key))),
39463
+ set: (key, value) => sync$2(() => {
38829
39464
  bytes.set(key, value);
38830
39465
  }),
38831
- remove: (key) => sync$1(() => {
39466
+ remove: (key) => sync$2(() => {
38832
39467
  bytes.delete(key);
38833
39468
  }),
38834
39469
  create: () => die("Handoff does not create persistent secrets."),
@@ -39943,13 +40578,13 @@ const makeThreadLiveEventCoalescer = (options) => gen$1(function* () {
39943
40578
  pendingUpdates = [];
39944
40579
  yield* offerAll(output, items);
39945
40580
  }, uninterruptible);
39946
- const flushWindow = (generation) => sleep$1(coalesceWindow).pipe(andThen(mutex.withPermits(1)(suspend(() => generation === windowGeneration ? flushPending() : void_))), ensuring(sync$1(() => {
40581
+ const flushWindow = (generation) => sleep$1(coalesceWindow).pipe(andThen(mutex.withPermits(1)(suspend(() => generation === windowGeneration ? flushPending() : void_))), ensuring(sync$2(() => {
39947
40582
  if (generation === windowGeneration) windowFiber = null;
39948
40583
  })), catchTags({ LiveStreamBufferError: () => void_ }));
39949
40584
  const offerAll$1 = fn("ThreadLiveEventCoalescer.offerAll")(function* (inputs) {
39950
40585
  yield* mutex.withPermits(1)(forEach(inputs, (input) => gen$1(function* () {
39951
40586
  yield* budget.check;
39952
- if (input.kind === "event") yield* budget.retain(input).pipe(tap((item) => sync$1(() => pendingUpdates.push(item))), uninterruptible);
40587
+ if (input.kind === "event") yield* budget.retain(input).pipe(tap((item) => sync$2(() => pendingUpdates.push(item))), uninterruptible);
39953
40588
  if (input.kind === "event" && isToolUpdated(input)) {
39954
40589
  if (pendingUpdates.length === 1) {
39955
40590
  const generation = ++windowGeneration;
@@ -41032,7 +41667,7 @@ var IncomingMessage = class extends (/*#__PURE__*/ Service()("@effect/platform-n
41032
41667
  */
41033
41668
  const makeWebSocket = /*#__PURE__*/ fnUntraced$1(function* (options) {
41034
41669
  const pendingConnections = /* @__PURE__ */ new Map();
41035
- const server = yield* acquireRelease(sync$1(() => new import_websocket_server.default(options)), (server) => callback((resume) => {
41670
+ const server = yield* acquireRelease(sync$2(() => new import_websocket_server.default(options)), (server) => callback((resume) => {
41036
41671
  pendingConnections.forEach(([, remove], conn) => {
41037
41672
  remove();
41038
41673
  conn.terminate();
@@ -41069,7 +41704,7 @@ const makeWebSocket = /*#__PURE__*/ fnUntraced$1(function* (options) {
41069
41704
  let context = services;
41070
41705
  context = add$1(context, IncomingMessage, req);
41071
41706
  context = add$1(context, WebSocket$1, conn);
41072
- pipe(fromWebSocket(acquireRelease(succeed$1(conn), (conn) => sync$1(() => {
41707
+ pipe(fromWebSocket(acquireRelease(succeed$1(conn), (conn) => sync$2(() => {
41073
41708
  conn.close();
41074
41709
  }))), flatMap$1(handler), catchCause(reportUnhandledError), runForkWith(context), trackFiber);
41075
41710
  };
@@ -41078,7 +41713,7 @@ const makeWebSocket = /*#__PURE__*/ fnUntraced$1(function* (options) {
41078
41713
  onConnection(conn, req);
41079
41714
  });
41080
41715
  return yield* callback((_resume) => {
41081
- return sync$1(() => {
41716
+ return sync$2(() => {
41082
41717
  onConnection = prevOnConnection;
41083
41718
  });
41084
41719
  }).pipe(ensuring(close(scope, void_$1)));
@@ -41124,11 +41759,11 @@ const make$24 = gen$1(function* () {
41124
41759
  pointer: () => void_
41125
41760
  });
41126
41761
  const command = (message) => writeLock.withPermits(1)(encodeCommand$1(message).pipe(flatMap$1((line) => writeAllToFileDescriptor(controlFd, Buffer.from(`${line}\n`))), catchCause((cause) => logWarning("desktop browser command failed", { cause }))));
41127
- const readable = yield* acquireRelease(sync$1(() => new NodeNet.Socket({
41762
+ const readable = yield* acquireRelease(sync$2(() => new NodeNet.Socket({
41128
41763
  fd: inputFd,
41129
41764
  readable: true,
41130
41765
  writable: false
41131
- })), (stream) => sync$1(() => stream.destroy()));
41766
+ })), (stream) => sync$2(() => stream.destroy()));
41132
41767
  yield* fromReadable({
41133
41768
  evaluate: () => readable,
41134
41769
  closeOnDone: true,
@@ -41211,7 +41846,7 @@ const make$24 = gen$1(function* () {
41211
41846
  })),
41212
41847
  detached: fromPubSub(changes).pipe(filter$3((change) => !change.attached), map$8((change) => change.key)),
41213
41848
  attached: fromPubSub(changes).pipe(filter$3((change) => change.attached), map$8((change) => change.key)),
41214
- isAttached: (key) => sync$1(() => attachedTabs.has(keyOf(key))),
41849
+ isAttached: (key) => sync$2(() => attachedTabs.has(keyOf(key))),
41215
41850
  endpoint,
41216
41851
  pointer: (key, pointer) => command({
41217
41852
  type: "pointer",
@@ -42836,7 +43471,7 @@ const make$23 = gen$1(function* () {
42836
43471
  if (tab.fileChooser === open) closeFileChooser(tab);
42837
43472
  };
42838
43473
  const answerFileChooser = (input) => promise(() => setChooserFiles(input).catch(() => false));
42839
- const openDownload = (input) => sync$1(() => {
43474
+ const openDownload = (input) => sync$2(() => {
42840
43475
  const download = tabs.get(tabKey(input.threadId, input.tabId))?.downloads.find((candidate) => candidate.id === input.downloadId);
42841
43476
  return download === void 0 ? none$1() : some({
42842
43477
  path: download.path,
@@ -42968,7 +43603,7 @@ const make$23 = gen$1(function* () {
42968
43603
  };
42969
43604
  const tabOwner = (tab) => tab.control.controller !== null ? "human" : tab.control.agentId !== null ? "agent" : "unclaimed";
42970
43605
  let reportedProfiles = null;
42971
- const reportProfiles = (input) => sync$1(() => {
43606
+ const reportProfiles = (input) => sync$2(() => {
42972
43607
  const profiles = resolveBrowserProfiles(input.profiles);
42973
43608
  reportedProfiles = {
42974
43609
  profiles,
@@ -43654,7 +44289,7 @@ const make$23 = gen$1(function* () {
43654
44289
  scrolledAt: 0,
43655
44290
  requestedSize: null
43656
44291
  };
43657
- yield* acquireRelease(sync$1(() => {
44292
+ yield* acquireRelease(sync$2(() => {
43658
44293
  tab.viewers.add(viewer);
43659
44294
  reportLiveTabs();
43660
44295
  }), () => promise(async () => {
@@ -43679,7 +44314,7 @@ const make$23 = gen$1(function* () {
43679
44314
  });
43680
44315
  };
43681
44316
  let settleTimer = null;
43682
- yield* addFinalizer$1(() => sync$1(() => {
44317
+ yield* addFinalizer$1(() => sync$2(() => {
43683
44318
  if (settleTimer !== null) clearTimeout(settleTimer);
43684
44319
  }));
43685
44320
  let screencastStarted = false;
@@ -43751,7 +44386,7 @@ const make$23 = gen$1(function* () {
43751
44386
  });
43752
44387
  yield* manager.events.pipe(runForEach(mirrorManagerEvent), forkScoped);
43753
44388
  if (!sandboxDisabled(yield* Environment) && (yield* sandboxBlocked)) yield* logWarning(`This host blocks the sandbox T3's browser runs in, so browser tabs and HTML previews will not start. Run \`${setupCommand}\` once to allow it.`);
43754
- yield* desktopChannel.detached.pipe(runForEach((key) => sync$1(() => {
44389
+ yield* desktopChannel.detached.pipe(runForEach((key) => sync$2(() => {
43755
44390
  const tab = tabs.get(tabKey(key.threadId, key.tabId));
43756
44391
  if (tab?.desktop) dropTab(tab, false);
43757
44392
  })), forkScoped);
@@ -43761,7 +44396,7 @@ const make$23 = gen$1(function* () {
43761
44396
  const snapshot = sessions.find((session) => session.tabId === key.tabId && session.runtime === "server");
43762
44397
  if (snapshot) yield* promise(() => ensureTab(snapshot).catch(constVoid));
43763
44398
  }).pipe(ignore)), forkScoped);
43764
- yield* sync$1(closeIdleAgentTabs).pipe(repeat(spaced(IDLE_SWEEP_INTERVAL)), forkScoped);
44399
+ yield* sync$2(closeIdleAgentTabs).pipe(repeat(spaced(IDLE_SWEEP_INTERVAL)), forkScoped);
43765
44400
  const environmentId = yield* environment.getEnvironmentId;
43766
44401
  yield* broker.connect({
43767
44402
  clientId: SERVER_HOST_CLIENT_ID,
@@ -43770,7 +44405,7 @@ const make$23 = gen$1(function* () {
43770
44405
  }, { preferred: true }).pipe(flatMap$1((events) => events.pipe(runForEach((event) => {
43771
44406
  if (event.type === "connected") {
43772
44407
  hostConnectionId = event.connectionId;
43773
- return sync$1(reportLiveTabs);
44408
+ return sync$2(reportLiveTabs);
43774
44409
  }
43775
44410
  return handleRequest(event.connectionId, event.request).pipe(forkScoped, asVoid);
43776
44411
  })))).pipe(exit, andThen(sleep$1(HOST_RECONNECT_DELAY)), forever, forkScoped);
@@ -47260,7 +47895,7 @@ const make$11 = gen$1(function* () {
47260
47895
  const persistCaches = gen$1(function* () {
47261
47896
  if (cacheDirty) {
47262
47897
  cacheDirty = false;
47263
- yield* sync$1(() => writeScanCache(fileCache, { sources: Object.fromEntries(sourceCache) })).pipe(flatMap$1((contents) => writeCacheFile(scanCachePath, contents)), catchCause(() => sync$1(() => {
47898
+ yield* sync$2(() => writeScanCache(fileCache, { sources: Object.fromEntries(sourceCache) })).pipe(flatMap$1((contents) => writeCacheFile(scanCachePath, contents)), catchCause(() => sync$2(() => {
47264
47899
  cacheDirty = true;
47265
47900
  })));
47266
47901
  }
@@ -47506,7 +48141,7 @@ const make$11 = gen$1(function* () {
47506
48141
  if (existing !== void 0) return existing;
47507
48142
  const created = makeUnsafe$1();
47508
48143
  inflightScans.set(key, created);
47509
- yield* scanSummary(input, settings).pipe(onExit((exit) => sync$1(() => inflightScans.delete(key)).pipe(andThen(isSuccess(exit) ? schedulePersist : void_), andThen(done(created, exit)))), forkDetach);
48144
+ yield* scanSummary(input, settings).pipe(onExit((exit) => sync$2(() => inflightScans.delete(key)).pipe(andThen(isSuccess(exit) ? schedulePersist : void_), andThen(done(created, exit)))), forkDetach);
47510
48145
  return created;
47511
48146
  }));
47512
48147
  return yield* _await(deferred);
@@ -47745,7 +48380,7 @@ function makeTraceDiagnosticsAggregator(slowSpanThresholdMs = DEFAULT_SLOW_SPAN_
47745
48380
  * Succeeds with false when the file does not exist.
47746
48381
  */
47747
48382
  function streamTraceFileLines(fileSystem, path, onLine) {
47748
- return fileSystem.stream(path).pipe(decodeText, splitLines, runForEachArray((lines) => sync$1(() => lines.forEach(onLine))), as(true), catchTags({ PlatformError: (cause) => isNotFoundError(cause) ? succeed$1(false) : fail$2(new TraceFileReadError({
48383
+ return fileSystem.stream(path).pipe(decodeText, splitLines, runForEachArray((lines) => sync$2(() => lines.forEach(onLine))), as(true), catchTags({ PlatformError: (cause) => isNotFoundError(cause) ? succeed$1(false) : fail$2(new TraceFileReadError({
47749
48384
  traceFilePath: path,
47750
48385
  causeTag: cause.reason._tag,
47751
48386
  cause
@@ -47904,7 +48539,7 @@ const make$9 = gen$1(function* () {
47904
48539
  version: none$1(),
47905
48540
  installHint: input.installHint,
47906
48541
  detail: detailFromCause(cause)
47907
- })), onExit(() => input.kind === "jj" ? sync$1(() => invalidateJjAvailability(process)) : void_));
48542
+ })), onExit(() => input.kind === "jj" ? sync$2(() => invalidateJjAvailability(process)) : void_));
47908
48543
  };
47909
48544
  return SourceControlDiscovery.of({ discover: all({
47910
48545
  versionControlSystems: all(VCS_PROBES.map((entry) => probe(entry)), { concurrency: "unbounded" }),
@@ -49722,15 +50357,15 @@ const layerWsRpc = (currentSession, clientOrigin, clientAnalyticsProps, previewA
49722
50357
  [WS_METHODS.reviewGetDiffPreview]: (input) => review.getDiffPreview(input),
49723
50358
  [WS_METHODS.reviewGetDiffFileContents]: (input) => review.getDiffFileContents(input),
49724
50359
  [WS_METHODS.terminalOpen]: (input) => terminalManager.open(input),
49725
- [WS_METHODS.terminalAttach]: (input) => callback$1((queue) => acquireRelease(terminalManager.attachStream(input, (event) => offer(queue, event)), (unsubscribe) => sync$1(unsubscribe)).pipe(catchCause((cause) => failCause$2(queue, cause)))),
50360
+ [WS_METHODS.terminalAttach]: (input) => callback$1((queue) => acquireRelease(terminalManager.attachStream(input, (event) => offer(queue, event)), (unsubscribe) => sync$2(unsubscribe)).pipe(catchCause((cause) => failCause$2(queue, cause)))),
49726
50361
  [WS_METHODS.terminalWrite]: (input) => terminalManager.write(input),
49727
50362
  [WS_METHODS.terminalResize]: (input) => terminalManager.resize(input),
49728
50363
  [WS_METHODS.terminalClear]: (input) => terminalManager.clear(input),
49729
50364
  [WS_METHODS.terminalRestart]: (input) => terminalManager.restart(input),
49730
50365
  [WS_METHODS.terminalClose]: (input) => terminalManager.close(input),
49731
- [WS_METHODS.terminalObserve]: (input) => callback$1((queue) => acquireRelease(terminalManager.observeStream(input, (event) => offer(queue, event)), (unsubscribe) => sync$1(unsubscribe)).pipe(catchCause((cause) => failCause$2(queue, cause)))),
49732
- [WS_METHODS.subscribeTerminalEvents]: (_input) => callback$1((queue) => acquireRelease(terminalManager.subscribe((event) => offer(queue, event)), (unsubscribe) => sync$1(unsubscribe))),
49733
- [WS_METHODS.subscribeTerminalMetadata]: (_input) => callback$1((queue) => acquireRelease(terminalManager.subscribeMetadata((event) => offer(queue, event)), (unsubscribe) => sync$1(unsubscribe))),
50366
+ [WS_METHODS.terminalObserve]: (input) => callback$1((queue) => acquireRelease(terminalManager.observeStream(input, (event) => offer(queue, event)), (unsubscribe) => sync$2(unsubscribe)).pipe(catchCause((cause) => failCause$2(queue, cause)))),
50367
+ [WS_METHODS.subscribeTerminalEvents]: (_input) => callback$1((queue) => acquireRelease(terminalManager.subscribe((event) => offer(queue, event)), (unsubscribe) => sync$2(unsubscribe))),
50368
+ [WS_METHODS.subscribeTerminalMetadata]: (_input) => callback$1((queue) => acquireRelease(terminalManager.subscribeMetadata((event) => offer(queue, event)), (unsubscribe) => sync$2(unsubscribe))),
49734
50369
  [WS_METHODS.previewOpen]: (input) => previewManager.open(input),
49735
50370
  [WS_METHODS.previewNavigate]: (input) => previewManager.navigate(input),
49736
50371
  [WS_METHODS.previewResize]: (input) => previewManager.resize(input),
@@ -50221,7 +50856,7 @@ const waitForWindowsPid = (process, trackedProcess, shell) => callback((resume)
50221
50856
  socket.once("error", onError);
50222
50857
  socket.once("close", onClose);
50223
50858
  stopExit = trackedProcess.onExit(({ exitCode }) => onError(/* @__PURE__ */ new Error(`Windows PTY exited before its PID was available (exit code ${exitCode}).`)));
50224
- return sync$1(cleanup);
50859
+ return sync$2(cleanup);
50225
50860
  });
50226
50861
  /**
50227
50862
  * Cancels Windows startup without waiting for the first output, unlike public kill().
@@ -50328,7 +50963,7 @@ const make$5 = fn("NodePtyAdapter.make")(function* () {
50328
50963
  cause
50329
50964
  })
50330
50965
  });
50331
- if (platform === "win32") yield* waitForWindowsPid(ptyProcess.nativeProcess, ptyProcess.process, input.shell).pipe(onError(() => sync$1(() => ptyProcess.process.disposeExitSubscription()).pipe(andThen(killStartingWindowsPty(ptyProcess.nativeProcess)))));
50966
+ if (platform === "win32") yield* waitForWindowsPid(ptyProcess.nativeProcess, ptyProcess.process, input.shell).pipe(onError(() => sync$2(() => ptyProcess.process.disposeExitSubscription()).pipe(andThen(killStartingWindowsPty(ptyProcess.nativeProcess)))));
50332
50967
  return ptyProcess.process;
50333
50968
  }) });
50334
50969
  });
@@ -50545,7 +51180,7 @@ const makeHandler = (browser) => gen$1(function* () {
50545
51180
  }
50546
51181
  const viewer = attached.viewer;
50547
51182
  const unacknowledged = [];
50548
- const disconnectSlowViewer = sync$1(() => transport.destroy()).pipe(andThen(interrupt));
51183
+ const disconnectSlowViewer = sync$2(() => transport.destroy()).pipe(andThen(interrupt));
50549
51184
  const write = (data) => suspend(() => {
50550
51185
  const bytes = typeof data === "string" ? Buffer.byteLength(data) : data.byteLength;
50551
51186
  if (transport.writableLength + bytes + 14 > MAX_SOCKET_BUFFER_BYTES) return disconnectSlowViewer;
@@ -50555,7 +51190,7 @@ const makeHandler = (browser) => gen$1(function* () {
50555
51190
  switch (output._tag) {
50556
51191
  case "frame":
50557
51192
  if (unacknowledged.length >= MAX_UNACKNOWLEDGED_FRAMES) return disconnectSlowViewer;
50558
- return write(output.data).pipe(andThen(sync$1(() => unacknowledged.push(output.ack))));
51193
+ return write(output.data).pipe(andThen(sync$2(() => unacknowledged.push(output.ack))));
50559
51194
  case "viewport":
50560
51195
  case "control":
50561
51196
  case "clipboard":
@@ -50723,7 +51358,7 @@ const layer$12 = effectDiscard(gen$1(function* () {
50723
51358
  const { logsDir } = yield* ServerConfig;
50724
51359
  const runFork = runForkWith(yield* context());
50725
51360
  const onSignal = () => void runFork(writeHeapSnapshot(logsDir));
50726
- yield* acquireRelease(sync$1(() => process.on("SIGUSR2", onSignal)), () => sync$1(() => process.off("SIGUSR2", onSignal)));
51361
+ yield* acquireRelease(sync$2(() => process.on("SIGUSR2", onSignal)), () => sync$2(() => process.off("SIGUSR2", onSignal)));
50727
51362
  }));
50728
51363
  //#endregion
50729
51364
  //#region src/observability/EventLoopMonitor.ts
@@ -50732,14 +51367,14 @@ const STALL_THRESHOLD_MS = 2e3;
50732
51367
  const SAMPLE_INTERVAL = "30 seconds";
50733
51368
  const STALL_LOG_MAX_BYTES = 262144;
50734
51369
  const makeNodeSampler = gen$1(function* () {
50735
- const histogram = yield* acquireRelease(sync$1(() => {
51370
+ const histogram = yield* acquireRelease(sync$2(() => {
50736
51371
  const histogram = NodePerfHooks.monitorEventLoopDelay({ resolution: RESOLUTION_MS });
50737
51372
  histogram.enable();
50738
51373
  return histogram;
50739
- }), (histogram) => sync$1(() => histogram.disable()));
51374
+ }), (histogram) => sync$2(() => histogram.disable()));
50740
51375
  let elu = NodePerfHooks.performance.eventLoopUtilization();
50741
51376
  let usage = process.resourceUsage();
50742
- return sync$1(() => {
51377
+ return sync$2(() => {
50743
51378
  const nextElu = NodePerfHooks.performance.eventLoopUtilization();
50744
51379
  const nextUsage = process.resourceUsage();
50745
51380
  const loop = NodePerfHooks.performance.eventLoopUtilization(nextElu, elu);
@@ -52858,7 +53493,7 @@ const make = gen$1(function* () {
52858
53493
  }).pipe(catchCauseIf((cause) => !hasInterruptsOnly(cause), (cause) => logWarning("thread pull request discovery failed", {
52859
53494
  threadId: thread.id,
52860
53495
  cause: pretty(cause)
52861
- }).pipe(tap(() => sync$1(() => failBackfill([thread]))), as(null)))))).filter((plan) => plan !== null);
53496
+ }).pipe(tap(() => sync$2(() => failBackfill([thread]))), as(null)))))).filter((plan) => plan !== null);
52862
53497
  if (updates.length === 0) return;
52863
53498
  if (detected !== null && first.branch !== null) {
52864
53499
  const current = yield* git.branchPullRequest({
@@ -52894,11 +53529,11 @@ const make = gen$1(function* () {
52894
53529
  }).pipe(catchCause((cause) => hasInterruptsOnly(cause) ? failCause(cause) : logWarning("thread pull request update failed", {
52895
53530
  threadId: thread.id,
52896
53531
  cause: pretty(cause)
52897
- }).pipe(tap(() => sync$1(() => failBackfill([thread])))))), { discard: true });
53532
+ }).pipe(tap(() => sync$2(() => failBackfill([thread])))))), { discard: true });
52898
53533
  }).pipe(catchCauseIf((cause) => !hasInterruptsOnly(cause), (cause) => logWarning("thread branch pull request lookup failed", {
52899
53534
  threadIds: group.map((thread) => thread.id),
52900
53535
  cause: pretty(cause)
52901
- }).pipe(tap(() => sync$1(() => failBackfill(group)))))), {
53536
+ }).pipe(tap(() => sync$2(() => failBackfill(group)))))), {
52902
53537
  concurrency: 32,
52903
53538
  discard: true
52904
53539
  });
@@ -53572,7 +54207,7 @@ const runUpdate = fn("cli.update.run")(function* (input) {
53572
54207
  if (input.requestedVersion !== void 0 && !isExactServiceVersion(input.requestedVersion)) return yield* new CliUpdateError({ reason: `'${input.requestedVersion}' is not an exact t3 version.` });
53573
54208
  const progress = createUpdateProgress();
53574
54209
  progress.status("Checking for updates...");
53575
- const targetVersion = yield* (input.requestedVersion === void 0 ? resolveNewestVersion(channel) : succeed$1(input.requestedVersion)).pipe(ensuring(sync$1(progress.finish)));
54210
+ const targetVersion = yield* (input.requestedVersion === void 0 ? resolveNewestVersion(channel) : succeed$1(input.requestedVersion)).pipe(ensuring(sync$2(progress.finish)));
53576
54211
  const targetChannel = cliReleaseChannelOf(targetVersion);
53577
54212
  const currentChannel = cliReleaseChannelOf(currentVersion);
53578
54213
  if (targetChannel === "preview" && currentChannel !== "preview") {
@@ -53642,7 +54277,7 @@ const runUpdate = fn("cli.update.run")(function* (input) {
53642
54277
  step: "verifying the downloaded t3",
53643
54278
  exitCode: Number(result.code)
53644
54279
  }))))
53645
- }).pipe(ensuring(sync$1(progress.finish)), catchIf((error) => error._tag === "PinnedRuntimeInstallError" && error.step.startsWith("downloading the t3 release checksums") && String(error.cause).includes("404"), () => fail$2(new CliUpdateError({ reason: `No release archive was published for t3@${targetVersion}.` }))));
54280
+ }).pipe(ensuring(sync$2(progress.finish)), catchIf((error) => error._tag === "PinnedRuntimeInstallError" && error.step.startsWith("downloading the t3 release checksums") && String(error.cause).includes("404"), () => fail$2(new CliUpdateError({ reason: `No release archive was published for t3@${targetVersion}.` }))));
53646
54281
  const launchedAs = (yield* IsExecutable) ? yield* resolveLauncherPath : void 0;
53647
54282
  const repointed = yield* repointLauncher({
53648
54283
  launchedAs,
@@ -54464,7 +55099,7 @@ async function main() {
54464
55099
  * whose signal handler would interrupt the fiber and exit while the child is still being
54465
55100
  * terminated.
54466
55101
  */
54467
- const serviceLauncherCommand = make$62("__service-launcher").pipe(unlisted, withHandler(() => sync$1(() => {
55102
+ const serviceLauncherCommand = make$62("__service-launcher").pipe(unlisted, withHandler(() => sync$2(() => {
54468
55103
  main().catch((cause) => {
54469
55104
  const error = cause instanceof Error ? cause : new Error(String(cause));
54470
55105
  process.stderr.write(`[service-launcher] ${error.message}\n`);
@@ -54555,7 +55190,7 @@ const waitReady = make$62("wait-ready", {
54555
55190
  process.exitCode = 1;
54556
55191
  })));
54557
55192
  /** Prints `<pid> <port>` for a live default-home server, or exits 1. */
54558
- const runtimePort = make$62("runtime-port", { runtimeFile: String$2("runtime-file") }).pipe(withHandler(({ runtimeFile }) => sync$1(() => {
55193
+ const runtimePort = make$62("runtime-port", { runtimeFile: String$2("runtime-file") }).pipe(withHandler(({ runtimeFile }) => sync$2(() => {
54559
55194
  try {
54560
55195
  const runtime = JSON.parse(NodeFS.readFileSync(runtimeFile, "utf8"));
54561
55196
  const pid = Number(runtime.pid);
@@ -54833,7 +55468,7 @@ const publishThemeFile = fn(function* (input) {
54833
55468
  },
54834
55469
  catch: publishFailure
54835
55470
  });
54836
- const revert = sync$1(() => {
55471
+ const revert = sync$2(() => {
54837
55472
  try {
54838
55473
  NodeFS.unlinkSync(stagingPath);
54839
55474
  } catch {}
@@ -54851,7 +55486,7 @@ const publishThemeFile = fn(function* (input) {
54851
55486
  } else if (destinationIno === stagedIno) NodeFS.unlinkSync(destinationPath);
54852
55487
  } catch {}
54853
55488
  });
54854
- const cleanup = sync$1(() => {
55489
+ const cleanup = sync$2(() => {
54855
55490
  try {
54856
55491
  if (hadPrevious) NodeFS.unlinkSync(backupPath);
54857
55492
  } catch {}
@@ -55448,4 +56083,4 @@ function runCli(root = "t3") {
55448
56083
  //#endregion
55449
56084
  export { runCli };
55450
56085
 
55451
- //# sourceMappingURL=binCli-BD8xnLcs.mjs.map
56086
+ //# sourceMappingURL=binCli-Cmx7kMPy.mjs.map