@cmmd-center/forge 0.9.5 → 0.9.7

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.
Files changed (36) hide show
  1. package/dist/{BunHttpServer-BgNCpQzV.mjs → BunHttpServer-C_855q3m.mjs} +6 -6
  2. package/dist/{BunHttpServer-DOAuw4Iq.cjs → BunHttpServer-Dxx0kzQc.cjs} +6 -6
  3. package/dist/{BunPTY-D-Klry5N.mjs → BunPTY-B7ThejfA.mjs} +3 -3
  4. package/dist/{BunPTY-2icf7sRj.cjs → BunPTY-BjHFZATJ.cjs} +3 -3
  5. package/dist/{BunServices-ChM4mYH9.mjs → BunServices-BFygTrvx.mjs} +3 -3
  6. package/dist/{BunServices-CiNXNzHD.cjs → BunServices-U1VBnEJS.cjs} +3 -3
  7. package/dist/{Cache-XSj5g7uG.cjs → Cache-BRhFH80U.cjs} +3 -3
  8. package/dist/{Cache-Cm78WiyU.mjs → Cache-CHvh_vWI.mjs} +3 -3
  9. package/dist/{Config-DMA9WqtC.cjs → Config-BHRBB8XM.cjs} +2 -2
  10. package/dist/{Config-DrOyN3WS.mjs → Config-To1VEqlB.mjs} +2 -2
  11. package/dist/{HttpServer-aJkhz6yu.cjs → HttpServer-BTcgkY38.cjs} +123 -4
  12. package/dist/{HttpServer-ByyNdEXm.mjs → HttpServer-DV-x5DVo.mjs} +118 -4
  13. package/dist/{NodeHttpServer-D_ismXpd.cjs → NodeHttpServer-D6YVHsL8.cjs} +7 -7
  14. package/dist/{NodeHttpServer-C_wePPV0.mjs → NodeHttpServer-DgD75IAg.mjs} +7 -7
  15. package/dist/{NodePTY-cb7HIasY.cjs → NodePTY-Bd9mvI6U.cjs} +4 -4
  16. package/dist/{NodePTY-BMUFdM93.mjs → NodePTY-RnitYPTs.mjs} +4 -4
  17. package/dist/{NodeServices-BAl07hlH.cjs → NodeServices-BcQL_53W.cjs} +1 -1
  18. package/dist/{NodeServices-BISZRY3e.cjs → NodeServices-BjmXNhpe.cjs} +3 -3
  19. package/dist/{NodeServices-Bqqy4DuH.mjs → NodeServices-Da5rUDDE.mjs} +3 -3
  20. package/dist/{NodeSqliteClient-SsUCk9mA.cjs → NodeSqliteClient-CG_mPdVp.cjs} +6 -6
  21. package/dist/{NodeSqliteClient-OdI1TawL.mjs → NodeSqliteClient-CcLD4Zvr.mjs} +6 -6
  22. package/dist/{NodeTerminal-B9u7fFYa.cjs → NodeTerminal-D86oor5_.cjs} +3 -3
  23. package/dist/{NodeTerminal-_XekCzf-.mjs → NodeTerminal-Ke6chk0A.mjs} +3 -3
  24. package/dist/{PTY-U3JQnLXS.cjs → PTY-BB84iC10.cjs} +2 -2
  25. package/dist/{PTY-CBkE5akF.mjs → PTY-X-4Tv31s.mjs} +2 -2
  26. package/dist/{Path-Bwl3ltR5.mjs → Path-DJTwK58E.mjs} +2 -2
  27. package/dist/{Path-CsbBuCFB.cjs → Path-qpublmG3.cjs} +2 -2
  28. package/dist/{Schema-CTXk8IgN.mjs → Schema-CKuz8TX8.mjs} +61 -6
  29. package/dist/{Schema-Bij_WAra.cjs → Schema-DaFukK_y.cjs} +72 -5
  30. package/dist/{SqlError-C2mi8_tp.cjs → SqlError-CsWFS-OU.cjs} +3 -3
  31. package/dist/{SqlError-1c-3v7GY.mjs → SqlError-DhK0hV8S.mjs} +3 -3
  32. package/dist/{SqliteClient-CdAhI4lb.cjs → SqliteClient-BpjZWL6O.cjs} +5 -5
  33. package/dist/{SqliteClient-aoOb51gB.mjs → SqliteClient-CA7vjiUj.mjs} +5 -5
  34. package/dist/bin.cjs +307 -57
  35. package/dist/bin.mjs +306 -57
  36. package/package.json +1 -1
package/dist/bin.mjs CHANGED
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM, r as __exportAll, t as __commonJSMin } from "./chunk-C5ckVeoz.mjs";
4
- import { $ as encodeSync, $a as interrupt$3, $c as none$4, $i as isDoneCause, $r as scope$1, $s as allocate, Aa as closeUnsafe, Ac as Service$1, An as catchCause, Ao as CurrentLoggers$1, Ar as never$1, As as ParentSpan, At as withDecodingDefault, B as brand, Ba as _await, Bi as update$3, Bn as currentSpan, Br as provideContext, Bs as fromInputUnsafe, Bt as isEmpty$2, C as Record, Ca as succeedContext, Ci as uninterruptibleMask$1, Cn as annotateLogs, Cs as uninterruptibleMask, Ct as suspend$2, D as TaggedStruct, Da as addFinalizer$1, Dn as asVoid, Do as squash, Dr as matchCauseEffect, Dt as toJsonSchemaDocument, E as TaggedErrorClass, Ea as Scope$1, Ec as isSuccess$1, Ei as void_$1, En as asSome, Eo as prettyErrors, Er as match$1, Et as toCodecStringTree, F as UndefinedOr, Fa as CurrentLogAnnotations, Fi as zipWith, Fl as isNotUndefined, Fn as catchTag, Fo as as$2, Fr as option, Ft as assign, G as decodeSync, Gc as fromUndefinedOr, Gi as forever$2, Gl as constUndefined, Gn as exit, Gr as result, Gs as millis, Ha as fail$3, Hc as flatMap$2, Hi as addDelay, Hl as compose, Hn as die$1, Hr as race, Ht as toArray, I as Union, Ia as CurrentLogSpans, Ic as getUnsafe$1, Ii as counter, Il as isNullish, In as catchTags, Ir as orDie, It as append$1, J as decodeUnknownExit, Jc as getOrUndefined, Ji as recurs, Jl as dual, Jo as fiberInterrupt, Jr as runForkWith, Js as seconds, K as decodeTo, Kc as getOrElse, Kl as constVoid, Kn as fail, Kr as retry, Ks as min, L as Unknown, La as MinimumLogLevel, Lc as make$33, Li as gauge, Ll as isObject$1, Ln as catch_, Lr as orElseSucceed, Ls as days, Lt as drop$1, M as URLFromString, Ma as make$35, Mc as empty$1, Mi as withSpan, Ml as hasProperty, Mn as catchFilter, Mr as onExit, Ms as externalSpan, Na as makeUnsafe$4, Nc as get$3, Ni as withTracerEnabled, Nl as isNotNull, Nn as catchIf, No as addFinalizer, Ns as make$40, O as TemplateLiteral, Oa as addFinalizerExit, Oc as succeed$1, Oi as whileLoop, On as cached$3, Os as MinimumTraceLevel, Ot as toType, P as Undefined, Pa as provide$2, Pi as yieldNow, Pl as isNotNullish, Pn as catchReason, Po as andThen$1, Pr as onInterrupt, Q as encodeEffect, Qa as failCause$2, Qc as match, Ql as pipeArguments, Qn as flatMap, Qs as zero, Qt as stringifyJson, R as UnknownFromJsonString$1, Rc as makeUnsafe$3, Ri as snapshotUnsafe, Rl as isTagged, Rn as context, Rr as promise, Rs as format$1, Rt as empty$2, S as Option, Sa as succeed$2, Sc as fail$1, Si as uninterruptible, Sn as annotateCurrentSpan, Sr as map$3, Ss as tracerLogger$1, St as optionalKey, T as Struct, Ta as unwrap, Tc as isFailure$1, Ti as useSpan, Tl as equals, Tn as as$3, To as pretty, Ts as void_$2, Tt as toCodecJson, U as decodeEffect, Ua as failCause$3, Uc as flatten$1, Ui as both, Ur as raceFirst, V as declare, Vc as firstSomeOf, Vi as withAttributes, Vl as cast, Vr as provideService, Vt as size$2, W as decodeExit, Wc as fromNullishOr, Wi as exponential, Wl as constTrue, Wn as ensuring, Wr as repeat, Ws as max, Wt as Transformation, X as decodeUnknownSync, Xa as die$2, Xc as isSome, Xi as catchDone, Xl as identity, Xn as filterMapOrFail, Xs as toMillis, Xt as parseJson$1, Y as decodeUnknownOption, Ya as succeed$3, Yc as isNone, Yi as spaced, Yn as filter$1, Yr as runPromise, Ys as times, Yt as onSome, Z as encode$4, Za as fail$2, Zc as map$5, Zl as pipe$1, Zn as filterOrFail, Zr as runPromiseWith, Zs as toSeconds, _ as NonEmptyArray, _a as launch$1, _i as tryPromise, _n as acquireRelease, _o as hasInterrupts, _r as logError, a as DateTimeUtc, aa as currentTimeMillis, ac as isArrayNonEmpty, ai as succeed, ar as forkChild, at as isFinite$1, b as NullOr, ba as provide$1, bi as txRetry, bl as toJson, bn as all, bo as interruptors, br as logWarning$1, bs as suspend, bt as mutable, c as Defect, ca as TaggedError, ci as suspend$1, cl as YieldableProto, cn as formatIso, cr as forkScoped, ct as isInt, d as Exit, da as buildWithMemoMap, di as tapCause, dn as makeUnsafe$5, do as done, dr as ignoreCause, dt as isMaxProperties, ec as empty$3, ei as scoped, el as some, en as InvalidValue$1, eo as isFailure, er as flatten$2, et as encodeUnknownEffect, fa as effect, fc as reverse, fi as tapError, fn as now, fo as fail$4, fr as interrupt$1, ft as isMinLength, g as Never, gi as timeoutOrElse, gl as withFiber, gn as Transaction$1, go as hasDies, gr as logDebug, gs as sleep$3, gt as isSchemaError, h as Literals, ha as empty$4, hi as timeoutOption, hl as isEffect$1, hn as toUtc, hr as log$4, hs as scopeAddFinalizerExit, ht as isSchema, i as Class, ia as Clock, ic as fromIterable, ii as sleep$4, in as value, io as void_$3, ir as forever$1, is as forkDetach, it as isBetween, ja as forkUnsafe, jc as add$2, ji as withParentSpan, jl as compose$1, jn as catchDefect, jr as onError$1, js as Tracer, k as Trim, ka as close, kc as Reference$1, ki as withFiber$1, kn as callback, ko as ConsoleRef, kr as matchEffect, ks as NativeSpan, kt as withConstructorDefault, l as Duration, la as CurrentMemoMap, li as sync$1, ln as isGreaterThanOrEqualTo$1, lr as gen, lt as isLessThanOrEqualTo, m as Literal, ma as effectDiscard, mi as timeout, mn as toEpochMillis, mr as isEffect, ms as scope, mt as isPattern, n as ArraySchema, na as clamp, nc as filter, ni as service, nl as make$39, nn as makeFormatterDefault, no as match$2, nr as fnUntraced, ns as fnUntraced$1, nt as fromJsonString, o as DateTimeUtcFromString, oa as Class$1, oc as isReadonlyArrayNonEmpty, oi as succeedNone, on as encodeBase64Url$2, oo as NoSuchElementError, or as forkDetach$1, ot as isGreaterThan, p as Int$1, pa as effectContext, pc as sort, pi as tapErrorTag, pn as toDate, pr as interruptible, ps as reportCauseUnsafe, pt as isNonEmpty, q as decodeUnknownEffect, qa as make$37, qc as getOrNull, qi as passthrough$1, ql as constant, qn as failCause$1, qr as runFork, qs as minutes, qt as transformOrFail, r as Boolean$1, ra as parse$6, rc as flatMapNullishOr, ri as serviceOption, rn as make$38, rr as forEach, rs as forever, rt as is$1, si as succeedSome, sl as PipeInspectableProto, sn as add$3, so as StackTrace, sr as forkIn, ss as loggerMake, st as isGreaterThanOrEqualTo, t as Any, ta as Random$1, tc as ensure, tl as Number$2, to as isSuccess, tr as fn$1, ts as flatMap$1, tt as encodeUnknownExit, u as ErrorClass, ua as build, uc as map$4, ui as tap, un as make$36, ur as ignore, ut as isMaxLength, v as NonEmptyString, va as merge$3, vi as try_, vn as acquireUseRelease, vo as hasInterruptsOnly, vr as logFatal, vt as make$34, w as String$1, wa as sync$2, wn as annotateSpans, wo as map$6, wr as mapError, wt as tag, x as Number$1, xa as provideMerge, xi as undefined_, xl as format, xn as andThen, xr as makeSpanScoped, xs as sync, xt as optional$4, y as Null, ya as mergeAll, yi as tx$1, yl as NodeInspectSymbol, yn as addFinalizer$2, yo as interrupt$2, yr as logInfo, yt as makeFilter, z as Void, za as TracerTimingEnabled, zc as merge$2, zi as timer, zn as contextWith, zo as consolePretty$1, zr as provide, zs as fromInput, zt as head } from "./Schema-CTXk8IgN.mjs";
5
- import { $ as toAsyncIterable, A as isStream, At as offerUnsafe, C as fromChannel, Ct as end, D as fromQueue, Dt as make$42, E as fromPubSub, F as merge$4, Ft as unbounded$2, G as runFold, Gt as interrupt$4, H as run$2, Ht as makeUnsafe$7, It as publish, K as runForEach, Lt as shutdown$2, M as map$7, Mt as sliding, N as mapEffect$1, Nt as take$1, Ot as offer$1, Pt as takeAll, Q as tick, R as onExit$1, Rt as subscribe$1, S as fromAsyncIterable, St as bounded, T as fromIterable$1, Tt as failCause$4, U as runCollect, Ut as await_, V as provideContext$1, W as runDrain, Wt as getCurrent, Y as succeed$4, Z as takeWhile, _ as ensuring$1, _t as fromTransform, at as make$44, b as filter$2, bt as make$41, d as concat$2, dt as drain, f as debounce$1, ft as forEach$1, g as encodeText, h as empty$5, ht as mapInput, i as FileSystem, it as get$4, j as make$43, jt as shutdown$1, k as fromSubscription, kt as offerAll, l as callback$1, p as decodeText$1, q as runForEachArray, qt as runIn, rt as unwrap$1, t as Path$2, u as catchCause$1, w as fromEffect, x as flatMap$3, xt as makeUnsafe$6, y as failCause$5, zt as unbounded$1 } from "./Path-Bwl3ltR5.mjs";
6
- import { _ as ChildProcessSpawner, a as Stdio, g as make$45, o as make$46, r as isQuitError } from "./NodeTerminal-_XekCzf-.mjs";
7
- import { n as layer$7 } from "./NodeServices-Bqqy4DuH.mjs";
8
- import { $ as raw, Dt as merge$5, Et as fromRecordUnsafe, F as HttpServerError, Ft as makeUnsafe$8, G as retryTransient, H as layer$8, It as modify$3, J as symbol$1, Lt as set$2, Mt as getAndSet, Nt as getUnsafe$2, Pt as make$47, Q as jsonUnsafe, R as RouteNotFound, Rt as update$4, St as jsonUnsafe$1, Tt as fromInput$1, U as HttpClient, W as filterStatusOk$1, X as file, Y as empty$6, Z as isHttpServerResponse, _ as schemaHeaders, _t as get$6, a as withLogAddress, at as stream, bt as HttpClientErrorSchema, ct as filterStatusOk, d as logger$1, et as redirect, f as withLoggerDisabled, g as schemaBodyJson, gt as bodyJson, ht as bearerToken, i as serve$1, it as setHeader, jt as get$5, k as SocketErrorReason, lt as matchStatus, m as ParsedSearchParams, mt as acceptJson, nt as setCookie, ot as text$1, p as HttpServerRequest, pt as schemaBodyJson$1, rt as setCookies, st as uint8Array, t as HttpServer, tt as schemaJson, u as cors, v as toURL, vt as post, wt as empty$7, xt as isHttpClientError, yt as setBody, zt as updateAndGet } from "./HttpServer-ByyNdEXm.mjs";
9
- import { _ as withDefault$3, a as all$1, c as logLevel, d as option$1, f as port, g as url$2, i as TrueValues, l as map$8, m as string$7, n as FalseValues, o as boolean$5, p as schema$2, r as Record$1, s as int$3, t as Boolean$2, u as number$2 } from "./Config-DrOyN3WS.mjs";
10
- import { a as make$48, i as keys, n as getOption, o as makeWith$1, r as invalidate, s as set$3, t as get$7 } from "./Cache-Cm78WiyU.mjs";
11
- import { S as layer$9, _ as defaultEscape, a as DeadlockError, b as makeCompiler$1, c as SqlError, d as UnknownError, g as custom, h as make$49, i as ConstraintError, l as SqlSyntaxError, m as SqlClient, n as AuthorizationError, o as LockTimeoutError, r as ConnectionError, s as SerializationError, t as AuthenticationError, u as StatementTimeoutError, v as defaultTransforms, y as fragment } from "./SqlError-1c-3v7GY.mjs";
4
+ import { $ as encodeEffect, $a as fail$2, $c as map$5, $l as pipe$1, $n as filterOrFail, $r as runPromiseWith, $s as toSeconds, $t as stringifyJson, Aa as addFinalizerExit, Ac as succeed$1, Ai as whileLoop, An as cached$3, As as MinimumTraceLevel, At as withConstructorDefault, Bc as makeUnsafe$3, Bi as snapshotUnsafe, Bl as isTagged, Bn as context, Br as promise, Bs as format$1, Bt as head, C as Record, Ca as provideMerge, Ci as undefined_, Cl as format, Cn as andThen, Cr as makeSpanScoped, Cs as sync, Ct as optionalKey, D as TaggedStruct, Da as unwrap, Dc as isFailure$1, Di as useSpan, Dl as equals, Dn as as$3, Do as pretty, Ds as void_$2, Dt as toCodecStringTree, E as TaggedErrorClass, Ea as sync$2, En as annotateSpans, Eo as map$6, Er as mapError, Et as toCodecJson, F as UndefinedOr, Fa as makeUnsafe$4, Fc as get$3, Fi as withTracerEnabled, Fl as isNotNull, Fn as catchIf, Fo as addFinalizer, Fs as make$40, G as decodeExit, Ga as failCause$3, Gc as flatten$1, Gi as both, Gr as raceFirst, Gt as Transformation, H as declare, Ha as _await, Hi as update$3, Hn as currentSpan, Hr as provideContext, Hs as fromInputUnsafe, Ht as size$2, I as Union, Ia as provide$2, Ii as yieldNow, Il as isNotNullish, In as catchReason, Io as andThen$1, Ir as onInterrupt, It as assign, J as decodeUnknownEffect, Jc as getOrElse, Jl as constVoid, Jn as fail, Jr as retry, Js as min, Jt as transformOrFail, K as decodeSync, Kc as fromNullishOr, Ki as exponential, Kl as constTrue, Kn as ensuring, Kr as repeat, Ks as max, L as Unknown, La as CurrentLogAnnotations, Li as zipWith, Ll as isNotUndefined, Ln as catchTag, Lo as as$2, Lr as option, Lt as append$1, M as URLFromString, Ma as closeUnsafe, Mc as Service$1, Mn as catchCause, Mo as CurrentLoggers$1, Mr as never$1, Ms as ParentSpan, Na as forkUnsafe, Nc as add$2, Ni as withParentSpan, Nl as compose$1, Nn as catchDefect, Nr as onError$1, Ns as Tracer, O as TemplateLiteral, Oa as Scope$1, Oc as isSuccess$1, Oi as void_$1, On as asSome, Oo as prettyErrors, Or as match$1, Ot as toJsonSchemaDocument, P as Undefined, Pa as make$35, Pc as empty$1, Pi as withSpan, Pl as hasProperty, Pn as catchFilter, Pr as onExit, Ps as externalSpan, Q as encode$4, Qa as die$2, Qc as isSome, Qi as catchDone, Ql as identity, Qn as filterMapOrFail, Qs as toMillis, R as UnknownFromJsonString$1, Ra as CurrentLogSpans, Rc as getUnsafe$1, Ri as counter, Rl as isNullish, Rn as catchTags, Rr as orDie, Rt as drop$1, S as Option, Sa as provide$1, Si as txRetry, Sl as toJson, Sn as all, So as interruptors, Sr as logWarning$1, Ss as suspend, St as optional$4, T as Struct, Ta as succeedContext, Ti as uninterruptibleMask$1, Tn as annotateLogs, Ts as uninterruptibleMask, Tt as tag, Uc as firstSomeOf, Ui as withAttributes, Ul as cast, Ur as provideService, Ut as toArray, V as brand, Va as TracerTimingEnabled, Vc as merge$2, Vi as timer, Vn as contextWith, Vo as consolePretty$1, Vr as provide, Vs as fromInput, Vt as isEmpty$2, W as decodeEffect, Wa as fail$3, Wc as flatMap$2, Wi as addDelay, Wl as compose, Wn as die$1, Wr as race, X as decodeUnknownOption, Xc as getOrUndefined, Xi as recurs, Xl as dual, Xo as fiberInterrupt, Xr as runForkWith, Xs as seconds, Xt as onSome, Y as decodeUnknownExit, Ya as make$37, Yc as getOrNull, Yi as passthrough$1, Yl as constant, Yn as failCause$1, Yr as runFork, Ys as minutes, Z as decodeUnknownSync, Za as succeed$3, Zc as isNone, Zi as spaced, Zn as filter$1, Zr as runPromise, Zs as times, Zt as parseJson$1, _ as NonEmptyArray, _a as empty$4, _i as timeoutOption, _l as isEffect$1, _n as toUtc, _r as log$4, _s as scopeAddFinalizerExit, _t as isSchemaError, a as DateTimeUtc, aa as parse$6, ac as flatMapNullishOr, ai as serviceOption, an as value, ar as forEach, as as forever, at as isBetween, b as NullOr, ba as merge$3, bi as try_, bn as acquireUseRelease, bo as hasInterruptsOnly, br as logFatal, bt as makeFilter, c as Defect, ca as Class$1, cc as isReadonlyArrayNonEmpty, ci as succeedNone, cn as add$3, co as NoSuchElementError, cr as forkDetach$1, ct as isGreaterThanOrEqualTo, d as Exit, da as CurrentMemoMap, di as sync$1, dn as isGreaterThanOrEqualTo$1, dr as gen, dt as isMaxLength, ec as zero, el as match, eo as failCause$2, er as flatMap, et as encodeSync, eu as pipeArguments, fa as build, fc as map$4, fi as tap, fn as make$36, fr as ignore, ft as isMaxProperties, g as Never, ga as effectDiscard, gi as timeout, gn as toEpochMillis, gr as isEffect, gs as scope, gt as isSchema, h as Literals, ha as effectContext, hc as sort, hi as tapErrorTag, hn as toDate, hr as interruptible, hs as reportCauseUnsafe, ht as isPattern, i as Class, ia as clamp, ic as filter, ii as service, il as make$39, in as make$38, io as match$2, ir as fnUntraced, is as fnUntraced$1, it as is$1, ja as close, jc as Reference$1, ji as withFiber$1, jn as callback, jo as ConsoleRef, jr as matchEffect, js as NativeSpan, jt as withDecodingDefault, k as Trim, ka as addFinalizer$1, kn as asVoid, ko as squash, kr as matchCauseEffect, kt as toType, l as Duration, li as succeedSome, ll as PipeInspectableProto, ln as distance, lo as StackTrace, lr as forkIn, ls as loggerMake, lt as isInt, m as Literal, ma as effect, mc as reverse, mi as tapError, mn as now, mo as fail$4, mr as interrupt$1, mt as isNonEmpty, n as ArraySchema, nc as empty$3, ni as scoped, nl as some, no as isFailure, nr as flatten$2, nt as encodeUnknownExit, o as DateTimeUtcFromString, oa as Clock, oc as fromIterable, oi as sleep$4, oo as void_$3, or as forever$1, os as forkDetach, ot as isFinite$1, p as Int$1, pa as buildWithMemoMap, pi as tapCause, pn as makeUnsafe$5, po as done, pr as ignoreCause, pt as isMinLength, q as decodeTo, qc as fromUndefinedOr, qi as forever$2, ql as constUndefined, qn as exit, qr as result, qs as millis, r as Boolean$1, ra as Random$1, rc as ensure, rl as Number$2, rn as makeFormatterDefault, ro as isSuccess, rr as fn$1, rs as flatMap$1, rt as fromJsonString, sa as currentTimeMillis, sc as isArrayNonEmpty, si as succeed, sn as encodeBase64Url$2, sr as forkChild, st as isGreaterThan, t as Any, ta as isDoneCause, tc as allocate, ti as scope$1, tl as none$4, tn as InvalidValue$1, to as interrupt$3, tt as encodeUnknownEffect, u as ErrorClass, ua as TaggedError, ui as suspend$1, ul as YieldableProto, un as formatIso, ur as forkScoped, ut as isLessThanOrEqualTo, v as NonEmptyString, vi as timeoutOrElse, vl as withFiber, vn as Transaction$1, vo as hasDies, vr as logDebug, vs as sleep$3, w as String$1, wa as succeed$2, wc as fail$1, wi as uninterruptible, wn as annotateCurrentSpan, wr as map$3, ws as tracerLogger$1, wt as suspend$2, x as Number$1, xa as mergeAll, xi as tx$1, xl as NodeInspectSymbol, xn as addFinalizer$2, xo as interrupt$2, xr as logInfo, xt as mutable, y as Null, ya as launch$1, yi as tryPromise, yn as acquireRelease, yo as hasInterrupts, yr as logError, yt as make$34, z as Void, za as MinimumLogLevel, zc as make$33, zi as gauge, zl as isObject$1, zn as catch_, zr as orElseSucceed, zs as days, zt as empty$2 } from "./Schema-CKuz8TX8.mjs";
5
+ import { $ as toAsyncIterable, A as isStream, At as offerUnsafe, C as fromChannel, Ct as end, D as fromQueue, Dt as make$42, E as fromPubSub, F as merge$4, Ft as unbounded$2, G as runFold, Gt as interrupt$4, H as run$2, Ht as makeUnsafe$7, It as publish, K as runForEach, Lt as shutdown$2, M as map$7, Mt as sliding, N as mapEffect$1, Nt as take$1, Ot as offer$1, Pt as takeAll, Q as tick, R as onExit$1, Rt as subscribe$1, S as fromAsyncIterable, St as bounded, T as fromIterable$1, Tt as failCause$4, U as runCollect, Ut as await_, V as provideContext$1, W as runDrain, Wt as getCurrent, Y as succeed$4, Z as takeWhile, _ as ensuring$1, _t as fromTransform, at as make$44, b as filter$2, bt as make$41, d as concat$2, dt as drain, f as debounce$1, ft as forEach$1, g as encodeText, h as empty$5, ht as mapInput, i as FileSystem, it as get$4, j as make$43, jt as shutdown$1, k as fromSubscription, kt as offerAll, l as callback$1, p as decodeText$1, q as runForEachArray, qt as runIn, rt as unwrap$1, t as Path$2, u as catchCause$1, w as fromEffect, x as flatMap$3, xt as makeUnsafe$6, y as failCause$5, zt as unbounded$1 } from "./Path-DJTwK58E.mjs";
6
+ import { _ as ChildProcessSpawner, a as Stdio, g as make$45, o as make$46, r as isQuitError } from "./NodeTerminal-Ke6chk0A.mjs";
7
+ import { n as layer$7 } from "./NodeServices-Da5rUDDE.mjs";
8
+ import { $ as jsonUnsafe, A as SocketErrorReason, Bt as updateAndGet, Ct as jsonUnsafe$1, Dt as fromRecordUnsafe, Et as fromInput$1, Ft as make$47, G as filterStatusOk$1, I as HttpServerError, It as makeUnsafe$8, K as retryTransient, Lt as modify$3, Mt as get$5, Nt as getAndSet, Ot as merge$5, Pt as getUnsafe$2, Q as isHttpServerResponse, Rt as set$2, St as isHttpClientError, Tt as empty$7, U as layer$8, W as HttpClient, X as empty$6, Y as symbol$1, Z as file, _ as schemaBodyUrlParams, _t as bodyJson, a as withLogAddress, at as setHeader, bt as setBody, ct as uint8Array, d as logger$1, et as raw, f as withLoggerDisabled, g as schemaBodyJson, gt as bearerToken, ht as acceptJson, i as serve$1, it as setCookies, lt as filterStatusOk, m as ParsedSearchParams, mt as schemaBodyJson$1, nt as schemaJson, ot as stream, p as HttpServerRequest, rt as setCookie, st as text$1, t as HttpServer, tt as redirect, u as cors, ut as matchStatus, v as schemaHeaders, vt as get$6, xt as HttpClientErrorSchema, y as toURL, yt as post, z as RouteNotFound, zt as update$4 } from "./HttpServer-DV-x5DVo.mjs";
9
+ import { _ as withDefault$3, a as all$1, c as logLevel, d as option$1, f as port, g as url$2, i as TrueValues, l as map$8, m as string$7, n as FalseValues, o as boolean$5, p as schema$2, r as Record$1, s as int$3, t as Boolean$2, u as number$2 } from "./Config-To1VEqlB.mjs";
10
+ import { a as make$48, i as keys, n as getOption, o as makeWith$1, r as invalidate, s as set$3, t as get$7 } from "./Cache-CHvh_vWI.mjs";
11
+ import { S as layer$9, _ as defaultEscape, a as DeadlockError, b as makeCompiler$1, c as SqlError, d as UnknownError, g as custom, h as make$49, i as ConstraintError, l as SqlSyntaxError, m as SqlClient, n as AuthorizationError, o as LockTimeoutError, r as ConnectionError, s as SerializationError, t as AuthenticationError, u as StatementTimeoutError, v as defaultTransforms, y as fragment } from "./SqlError-DhK0hV8S.mjs";
12
12
  import { a as diag, c as SpanKind$1, d as TraceFlags, f as ROOT_CONTEXT, i as propagation, l as isSpanContextValid, m as DiagLogLevel, n as init_esm$1, o as context$1, p as createContextKey, r as trace, s as SpanStatusCode, t as esm_exports$1 } from "./esm-Ce1GqbVk.mjs";
13
13
  import { t as Mime_default } from "./Mime-BITO-E1U.mjs";
14
14
  import { a as verifyCmmdAuthRuntimeTicket, c as verifyCmmdRuntimeTicketRefreshProof, d as createReadOnceFileTokenAccessor, i as sendRuntimeControlHeartbeat, l as runtimeGrantToken, n as bootstrapRuntimeControlAuthorityFromNarrowGrant, o as verifyCmmdClaudeReadinessTicket, r as readRuntimeControlAuthority, s as verifyCmmdRuntimeTicket, t as bootstrapRuntimeControlAuthority, u as setRuntimeGrantToken } from "./runtimeControlAuthority-L85w5RTn.mjs";
15
- import { n as PtySpawnError, t as PtyAdapter } from "./PTY-CBkE5akF.mjs";
15
+ import { n as PtySpawnError, t as PtyAdapter } from "./PTY-X-4Tv31s.mjs";
16
16
  import { createRequire } from "node:module";
17
17
  import * as HE from "node:child_process";
18
18
  import { execFile, execFileSync, spawn, spawnSync } from "node:child_process";
@@ -17588,6 +17588,7 @@ const ExecutionEnvironmentCapabilities = Struct({
17588
17588
  pullRequests: optionalKey(Boolean$1),
17589
17589
  threadPullRequestLinking: optionalKey(Boolean$1),
17590
17590
  cloudMode: Boolean$1.pipe(withDecodingDefault(succeed(false))),
17591
+ threadSettlement: optionalKey(Boolean$1),
17591
17592
  posthogPublicKey: NullOr(String$1).pipe(withDecodingDefault(succeed(null))),
17592
17593
  posthogHost: NullOr(String$1).pipe(withDecodingDefault(succeed(null))),
17593
17594
  runtime: optionalKey(ExecutionEnvironmentRuntimeCapabilities),
@@ -67972,6 +67973,30 @@ const respondToAuthError = (error) => gen(function* () {
67972
67973
  }));
67973
67974
  return response;
67974
67975
  });
67976
+ const OAUTH_ACCESS_TOKEN_TYPE = "urn:ietf:params:oauth:token-type:access_token";
67977
+ /**
67978
+ * The one exchange this endpoint performs, or the reason it will not.
67979
+ *
67980
+ * Returns a message rather than a boolean so the route can say which field was
67981
+ * wrong: an operator debugging a pairing failure otherwise cannot tell an
67982
+ * unsupported grant from an unsupported token type.
67983
+ */
67984
+ function rejectUnsupportedTokenExchange(input) {
67985
+ if (input.grant_type !== "urn:ietf:params:oauth:grant-type:token-exchange") return "Unsupported grant_type.";
67986
+ if (input.subject_token_type !== "urn:t3:params:oauth:token-type:environment-bootstrap") return "Unsupported subject_token_type.";
67987
+ if (input.requested_token_type !== "urn:ietf:params:oauth:token-type:access_token") return "Unsupported requested_token_type.";
67988
+ return null;
67989
+ }
67990
+ /**
67991
+ * `expires_in` is a duration in seconds; a session carries an absolute instant.
67992
+ *
67993
+ * Clamped at zero so a session that expired between issuance and this call is
67994
+ * reported as already expired rather than as a negative lifetime, which a client
67995
+ * could read as a very large unsigned value.
67996
+ */
67997
+ function accessTokenExpiresInSeconds(remainingMillis) {
67998
+ return Math.max(0, Math.floor(remainingMillis / 1e3));
67999
+ }
67975
68000
  //#endregion
67976
68001
  //#region ../../packages/shared/src/cmmdIdentity.ts
67977
68002
  const MAX_CMMD_AVATAR_URL_LENGTH = 256 * 1024;
@@ -69171,6 +69196,16 @@ const CommandOAuthDeviceInput = Struct({
69171
69196
  return_url: optionalKey(String$1),
69172
69197
  scope: optionalKey(String$1)
69173
69198
  });
69199
+ const OAuthTokenExchangeInput = Struct({
69200
+ grant_type: String$1,
69201
+ subject_token: String$1,
69202
+ subject_token_type: String$1,
69203
+ requested_token_type: String$1,
69204
+ scope: optional$4(String$1),
69205
+ client_label: optional$4(String$1),
69206
+ client_device_type: optional$4(String$1),
69207
+ client_os: optional$4(String$1)
69208
+ });
69174
69209
  const CommandOAuthTokenInput = Struct({
69175
69210
  grant_type: String$1,
69176
69211
  device_code: String$1,
@@ -70012,6 +70047,50 @@ const authBearerBootstrapRouteLayer = add$1("POST", "/api/auth/bootstrap/bearer"
70012
70047
  })));
70013
70048
  return jsonUnsafe(yield* serverAuth.exchangeBootstrapCredentialForBearerSession(payload.credential, deriveAuthClientMetadata({ request })), { status: 200 });
70014
70049
  }).pipe(catchTag("AuthError", (error) => respondToAuthError(error))));
70050
+ /**
70051
+ * FORGE COMPAT. `POST /oauth/token` — the RFC 8693 token exchange the vendored
70052
+ * t3code client uses to turn a pairing credential into a bearer token.
70053
+ *
70054
+ * Forge's own clients call `/api/auth/bootstrap/bearer` with JSON. The mobile app
70055
+ * cannot: the endpoint is baked into the vendored contract
70056
+ * (packages/t3-contracts/src/environmentHttp.ts) as a form-urlencoded OAuth
70057
+ * exchange, and without it every attempt to add an environment fails with a 404 —
70058
+ * which leaves the whole app unusable, since no screen works before an
70059
+ * environment exists.
70060
+ *
70061
+ * This is a shape adapter, not a second way to authenticate. It performs no
70062
+ * validation of its own and mints nothing: it forwards the subject token to the
70063
+ * same `exchangeBootstrapCredentialForBearerSession` the JSON route uses, so the
70064
+ * credential rules, expiry and session issuance stay in one place. The only work
70065
+ * here is vocabulary — form encoding in, OAuth field names out.
70066
+ *
70067
+ * Same pattern as the vcs.* handlers in ws.ts: the Forge server speaks upstream's
70068
+ * dialect over Forge's own services, rather than the vendored client being patched
70069
+ * to speak Forge's.
70070
+ */
70071
+ const authOAuthTokenExchangeRouteLayer = add$1("POST", "/oauth/token", gen(function* () {
70072
+ const request = yield* HttpServerRequest;
70073
+ const serverAuth = yield* ServerAuth;
70074
+ const payload = yield* schemaBodyUrlParams(OAuthTokenExchangeInput).pipe(mapError((cause) => new AuthError({
70075
+ message: "Invalid token exchange payload.",
70076
+ status: 400,
70077
+ cause
70078
+ })));
70079
+ const refusal = rejectUnsupportedTokenExchange(payload);
70080
+ if (refusal !== null) return yield* new AuthError({
70081
+ message: refusal,
70082
+ status: 400
70083
+ });
70084
+ const session = yield* serverAuth.exchangeBootstrapCredentialForBearerSession(payload.subject_token, deriveAuthClientMetadata({ request }));
70085
+ const expiresInSeconds = accessTokenExpiresInSeconds(toMillis(distance(yield* now, session.expiresAt)));
70086
+ return jsonUnsafe({
70087
+ access_token: session.sessionToken,
70088
+ issued_token_type: OAUTH_ACCESS_TOKEN_TYPE,
70089
+ token_type: "Bearer",
70090
+ expires_in: expiresInSeconds,
70091
+ scope: payload.scope ?? session.role
70092
+ }, { status: 200 });
70093
+ }).pipe(catchTag("AuthError", (error) => respondToAuthError(error))));
70015
70094
  const authWebSocketTokenRouteLayer = add$1("POST", "/api/auth/ws-token", gen(function* () {
70016
70095
  const request = yield* HttpServerRequest;
70017
70096
  const serverAuth = yield* ServerAuth;
@@ -113371,8 +113450,8 @@ effectDiscard(runMigrations());
113371
113450
  //#endregion
113372
113451
  //#region src/persistence/Layers/Sqlite.ts
113373
113452
  const defaultSqliteClientLoaders = {
113374
- bun: () => import("./SqliteClient-aoOb51gB.mjs"),
113375
- node: () => import("./NodeSqliteClient-OdI1TawL.mjs")
113453
+ bun: () => import("./SqliteClient-CA7vjiUj.mjs"),
113454
+ node: () => import("./NodeSqliteClient-CcLD4Zvr.mjs")
113376
113455
  };
113377
113456
  const makeRuntimeSqliteLayer = fn$1("makeRuntimeSqliteLayer")(function* (config) {
113378
113457
  const loader = defaultSqliteClientLoaders[process.versions.bun !== void 0 ? "bun" : "node"];
@@ -146712,22 +146791,58 @@ function runtimeAuthoritySessionId(input) {
146712
146791
  if (input.authSessionId) return input.authSessionId;
146713
146792
  return input.threadId ? readThreadSessionId(input.threadId) : null;
146714
146793
  }
146794
+ /**
146795
+ * Pure mapping from the three preconditions to an outcome.
146796
+ *
146797
+ * Split out so the reason can be tested without an Effect runtime, env vars or
146798
+ * module mocking — the decision is the thing worth pinning, not the plumbing
146799
+ * around it.
146800
+ */
146801
+ function resolveBrokerTicketOutcome(input) {
146802
+ if (input.identityMode === "legacy") return {
146803
+ kind: "ticket",
146804
+ token: input.legacyGrantToken
146805
+ };
146806
+ if (input.identityMode === "invalid") return {
146807
+ kind: "unavailable",
146808
+ reason: "runtime identity is incomplete or invalid"
146809
+ };
146810
+ if (!input.sessionId) return {
146811
+ kind: "unavailable",
146812
+ reason: "no owner session is bound to this request"
146813
+ };
146814
+ return input.brokerAuthority ? {
146815
+ kind: "ticket",
146816
+ token: input.brokerAuthority
146817
+ } : {
146818
+ kind: "unavailable",
146819
+ reason: "no live broker authority for this session"
146820
+ };
146821
+ }
146715
146822
  function runtimeProviderBrokerToken(input) {
146716
146823
  const identity = classifyRuntimeBrokerIdentity({
146717
146824
  machineId: configuredRuntimeMachineId() ?? void 0,
146718
146825
  credentialEpoch: configuredRuntimeCredentialEpoch(),
146719
146826
  brokerAuthorityMode: process.env.FORGE_CMMD_RUNTIME_BROKER_AUTHORITY_MODE
146720
146827
  });
146721
- if (identity.mode === "legacy") return runtimeGrantToken();
146722
- if (identity.mode === "invalid") return null;
146828
+ if (identity.mode !== "exact") return resolveBrokerTicketOutcome({
146829
+ identityMode: identity.mode,
146830
+ legacyGrantToken: identity.mode === "legacy" ? runtimeGrantToken() : null,
146831
+ sessionId: null,
146832
+ brokerAuthority: null
146833
+ });
146723
146834
  const sessionId = runtimeAuthoritySessionId(input);
146724
- if (!sessionId) return null;
146725
- return readRuntimeBrokerAuthority({
146835
+ return resolveBrokerTicketOutcome({
146836
+ identityMode: "exact",
146837
+ legacyGrantToken: null,
146726
146838
  sessionId,
146727
- runtimeId: process.env.FORGE_CMMD_RUNTIME_ID,
146728
- machineId: identity.machineId,
146729
- credentialEpoch: identity.credentialEpoch,
146730
- requiredScope: "provider"
146839
+ brokerAuthority: sessionId ? readRuntimeBrokerAuthority({
146840
+ sessionId,
146841
+ runtimeId: process.env.FORGE_CMMD_RUNTIME_ID,
146842
+ machineId: identity.machineId,
146843
+ credentialEpoch: identity.credentialEpoch,
146844
+ requiredScope: "provider"
146845
+ }) : null
146731
146846
  });
146732
146847
  }
146733
146848
  async function fetchRuntimeProviderGrant(input) {
@@ -146772,8 +146887,9 @@ const issueProviderEgressCredential = (input) => tryPromise({
146772
146887
  async function issueCmmdRuntimeProviderEgressCredential(input) {
146773
146888
  const controlPlaneUrl = process.env.FORGE_COMMAND_APP_URL.replace(/\/+$/, "");
146774
146889
  const runtimeId = encodeURIComponent(process.env.FORGE_CMMD_RUNTIME_ID);
146775
- const runtimeGrantToken = runtimeProviderBrokerToken(input);
146776
- if (!runtimeGrantToken) throw new Error("Provider token issuance requires a live exact-machine broker authority for this runtime epoch.");
146890
+ const brokerTicket = runtimeProviderBrokerToken(input);
146891
+ if (brokerTicket.kind === "unavailable") throw new Error(`Provider token issuance requires a live exact-machine broker authority for this runtime epoch (${brokerTicket.reason}).`);
146892
+ const runtimeGrantToken = brokerTicket.token;
146777
146893
  const response = await fetchRuntimeProviderGrant({
146778
146894
  url: `${controlPlaneUrl}/api/forge/runtimes/${runtimeId}/provider/token`,
146779
146895
  token: runtimeGrantToken,
@@ -205021,6 +205137,48 @@ function applyPluginSkillPermissionsToDynamicTools(tools, settings) {
205021
205137
  });
205022
205138
  }
205023
205139
  //#endregion
205140
+ //#region src/github/forgeGitHubToolHandler.ts
205141
+ /**
205142
+ * Shared wiring for Forge's brokered GitHub tools.
205143
+ *
205144
+ * Both provider surfaces run the same handler: Codex exposes the tools
205145
+ * natively, Claude reaches them over in-process MCP (`GitHubMcpServer.ts`).
205146
+ * The auth binding, the write confirmation gate and the audit trail live here
205147
+ * so a new surface cannot accidentally omit one — the handler's own defaults
205148
+ * are deliberately inert (no audit, never confirmed), which is safe for tests
205149
+ * but wrong for a real turn.
205150
+ */
205151
+ function createForgeGitHubToolHandlerOptions(deps) {
205152
+ const { runWithRuntimeContext } = deps;
205153
+ return {
205154
+ broker: new GitHubBroker({
205155
+ resolveJwt: (auth) => runWithRuntimeContext(resolveCmmdJwtForSession({
205156
+ sessionId: auth.sessionId,
205157
+ logPrefix: deps.logPrefix,
205158
+ ...auth.subject !== void 0 ? { subject: auth.subject } : {},
205159
+ ...auth.forceRefresh !== void 0 ? { forceRefresh: auth.forceRefresh } : {}
205160
+ })),
205161
+ githubWriteIdentity: deps.githubWriteIdentity
205162
+ }),
205163
+ resolveAuth: async (threadId) => {
205164
+ const binding = await runWithRuntimeContext(readThreadAuthSession(threadId));
205165
+ return binding ? {
205166
+ sessionId: binding.sessionId,
205167
+ ...binding.subject ? { subject: binding.subject } : {}
205168
+ } : null;
205169
+ },
205170
+ recordAudit: (auditEvent) => runWithRuntimeContext(recordGitHubToolAuditEvent(auditEvent).pipe(asVoid)),
205171
+ createConfirmation: (confirmation) => runWithRuntimeContext(createGitHubToolConfirmation(confirmation)),
205172
+ isConfirmed: (confirmation) => runWithRuntimeContext(consumeApprovedOrLatestGitHubToolConfirmation({
205173
+ confirmationId: confirmation.confirmationId,
205174
+ threadId: confirmation.threadId,
205175
+ toolName: confirmation.toolName,
205176
+ request: confirmation.request
205177
+ })),
205178
+ bypassWriteConfirmation: deps.bypassWriteConfirmation
205179
+ };
205180
+ }
205181
+ //#endregion
205024
205182
  //#region src/provider/shellSafety.ts
205025
205183
  const SHELL_SAFE_COMMAND_PATH_PATTERN = /^[A-Za-z0-9_.\-/\\:]+$/;
205026
205184
  function isShellSafeCommandPath(command) {
@@ -206309,33 +206467,12 @@ const makeCodexAdapter = fn$1("makeCodexAdapter")(function* (options) {
206309
206467
  }));
206310
206468
  const browserToolEnvironmentId = yield* resolveBrowserToolEnvironmentId$1();
206311
206469
  const computerManager = resolveComputerManager(serverConfig);
206312
- const githubDynamicToolHandler = createCodexGitHubDynamicToolHandler({
206313
- broker: new GitHubBroker({
206314
- resolveJwt: (auth) => runWithRuntimeContext(resolveCmmdJwtForSession({
206315
- sessionId: auth.sessionId,
206316
- logPrefix: "codex-github",
206317
- ...auth.subject !== void 0 ? { subject: auth.subject } : {},
206318
- ...auth.forceRefresh !== void 0 ? { forceRefresh: auth.forceRefresh } : {}
206319
- })),
206320
- githubWriteIdentity: settings.githubWriteIdentity
206321
- }),
206322
- resolveAuth: async (threadId) => {
206323
- const binding = await runWithRuntimeContext(readThreadAuthSession(threadId));
206324
- return binding ? {
206325
- sessionId: binding.sessionId,
206326
- ...binding.subject ? { subject: binding.subject } : {}
206327
- } : null;
206328
- },
206329
- recordAudit: (auditEvent) => runWithRuntimeContext(recordGitHubToolAuditEvent(auditEvent).pipe(asVoid)),
206330
- createConfirmation: (confirmation) => runWithRuntimeContext(createGitHubToolConfirmation(confirmation)),
206331
- isConfirmed: (confirmation) => runWithRuntimeContext(consumeApprovedOrLatestGitHubToolConfirmation({
206332
- confirmationId: confirmation.confirmationId,
206333
- threadId: confirmation.threadId,
206334
- toolName: confirmation.toolName,
206335
- request: confirmation.request
206336
- })),
206470
+ const githubDynamicToolHandler = createCodexGitHubDynamicToolHandler(createForgeGitHubToolHandlerOptions({
206471
+ runWithRuntimeContext,
206472
+ githubWriteIdentity: settings.githubWriteIdentity,
206473
+ logPrefix: "codex-github",
206337
206474
  bypassWriteConfirmation: input.runtimeMode === "full-access"
206338
- });
206475
+ }));
206339
206476
  const cmmdConnectorDynamicToolHandler = createCodexCmmdConnectorDynamicToolHandler({ resolveAuth: async (threadId) => {
206340
206477
  const binding = await runWithRuntimeContext(readThreadAuthSession(threadId));
206341
206478
  if (!binding) return null;
@@ -207879,6 +208016,62 @@ function createDevServerMcpServer(deps, threadId) {
207879
208016
  });
207880
208017
  }
207881
208018
  //#endregion
208019
+ //#region src/github/GitHubMcpServer.ts
208020
+ /**
208021
+ * Brokered Forge GitHub tools, exposed to the Claude surface (in-process MCP).
208022
+ *
208023
+ * The Codex app-server consumes these tools as native dynamic tools; Claude
208024
+ * reaches them through MCP instead. Both surfaces dispatch the SAME handler
208025
+ * (`createCodexGitHubDynamicToolHandler`), so auth resolution, the write
208026
+ * confirmation gate and the audit trail are shared rather than reimplemented
208027
+ * per provider — this module only adapts descriptor + result shapes.
208028
+ *
208029
+ * Without it a Claude agent has no brokered push path at all and falls back to
208030
+ * raw `git`, which the runtime deliberately blocks via `GIT_ASKPASS=/bin/false`.
208031
+ *
208032
+ * Result envelopes are relayed verbatim as tool content: the web approval card
208033
+ * is built by scanning tool results for `userActionRequired`, so summarising or
208034
+ * reshaping the payload here would silently strip the user's ability to approve
208035
+ * a write.
208036
+ */
208037
+ const GITHUB_MCP_SERVER_NAME = "forge-github";
208038
+ /** Joins the brokered result's content items back into a single text payload. */
208039
+ function readResultText(contentItems) {
208040
+ return contentItems.map((item) => item.text).filter((text) => typeof text === "string").join("\n");
208041
+ }
208042
+ /**
208043
+ * Factored out of `createGitHubMcpServer` (mirroring the Sidekick tools server)
208044
+ * so dispatch and envelope handling are testable without the SDK's `tool()` /
208045
+ * `createSdkMcpServer` machinery.
208046
+ */
208047
+ function buildGitHubToolHandlers(runBrokeredTool, threadId) {
208048
+ return createCodexGitHubDynamicTools().map((descriptor) => ({
208049
+ name: descriptor.name,
208050
+ description: descriptor.description,
208051
+ inputSchema: jsonSchemaToZodShape(descriptor.inputSchema),
208052
+ handler: async (args) => {
208053
+ const result = await runBrokeredTool({
208054
+ threadId,
208055
+ tool: descriptor.name,
208056
+ arguments: args
208057
+ });
208058
+ return {
208059
+ content: [{
208060
+ type: "text",
208061
+ text: readResultText(result.contentItems)
208062
+ }],
208063
+ ...result.success ? {} : { isError: true }
208064
+ };
208065
+ }
208066
+ }));
208067
+ }
208068
+ function createGitHubMcpServer(runBrokeredTool, threadId) {
208069
+ return z1e({
208070
+ name: GITHUB_MCP_SERVER_NAME,
208071
+ tools: buildGitHubToolHandlers(runBrokeredTool, threadId).map((entry) => U1e(entry.name, entry.description, entry.inputSchema, entry.handler))
208072
+ });
208073
+ }
208074
+ //#endregion
207882
208075
  //#region src/provider/providerAuthFailureCopy.ts
207883
208076
  /**
207884
208077
  * Rewrite provider auth failures into an action the user can actually take.
@@ -208183,6 +208376,7 @@ function buildClaudeMcpServers(input) {
208183
208376
  "forge-browser": createBrowserMcpServer(input.browserManager, input.threadId, browserToolScope(input.browserToolEnvironmentId)),
208184
208377
  "forge-dev-server": createDevServerMcpServer(input.devServerToolDeps, input.threadId),
208185
208378
  "cmmd-context": createCmmdContextMcpServer(input.threadId, input.resolveCmmdPat),
208379
+ [GITHUB_MCP_SERVER_NAME]: createGitHubMcpServer(input.runBrokeredGitHubTool, input.threadId),
208186
208380
  ...input.computerManager ? { [COMPUTER_MCP_SERVER_NAME]: createComputerMcpServer(input.computerManager, input.threadId) } : {},
208187
208381
  ...input.cmmdSidekickTools ? { "cmmd-sidekick-tools": createCmmdSidekickToolsMcpServer(input.cmmdSidekickTools.session, input.cmmdSidekickTools.tools) } : {}
208188
208382
  };
@@ -210192,6 +210386,12 @@ const makeClaudeAdapter = fn$1("makeClaudeAdapter")(function* (options) {
210192
210386
  const permissionMode = permissionModeForRuntimeMode(input.runtimeMode);
210193
210387
  const settings = claudeQuerySettings(modelConfig.thinking, modelConfig.fastMode);
210194
210388
  const systemPrompt = buildClaudeSystemPrompt(modelConfig.endpointProfile, serverSettings.coauthorIncludeForge);
210389
+ const runBrokeredGitHubTool = createCodexGitHubDynamicToolHandler(createForgeGitHubToolHandlerOptions({
210390
+ runWithRuntimeContext: runWithSqlRuntimeContext,
210391
+ githubWriteIdentity: serverSettings.githubWriteIdentity,
210392
+ logPrefix: "claude-github",
210393
+ bypassWriteConfirmation: input.runtimeMode === "full-access"
210394
+ }));
210195
210395
  const queryRuntime = yield* createClaudeQueryRuntime(prompt, buildClaudeQueryOptions({
210196
210396
  cwd: input.cwd,
210197
210397
  effectiveApiModelId: modelConfig.effectiveApiModelId,
@@ -210211,7 +210411,8 @@ const makeClaudeAdapter = fn$1("makeClaudeAdapter")(function* (options) {
210211
210411
  computerManager,
210212
210412
  resolveCmmdPat,
210213
210413
  devServerToolDeps,
210214
- cmmdSidekickTools
210414
+ cmmdSidekickTools,
210415
+ runBrokeredGitHubTool
210215
210416
  }), threadId);
210216
210417
  const session = buildClaudeProviderSession({
210217
210418
  threadId,
@@ -283125,7 +283326,9 @@ const ProviderCommandReactorLive = effect(ProviderCommandReactor, gen(function*
283125
283326
  projects: readModel.projects
283126
283327
  });
283127
283328
  if (!cwd) return "Forge could not resolve the project folder for this thread.";
283128
- if (serverConfig.forgeCmmdRuntimeMode === true && !isPathInsideAnyRoot(cwd, [serverConfig.cloudProjectsRoot, serverConfig.worktreesDir])) return "Forge blocked this agent turn because the project folder is outside the managed runtime workspace.";
283329
+ const isCloudExecutionRuntime = serverConfig.forgeCmmdRuntimeMode === true;
283330
+ const managedRoots = [serverConfig.cloudProjectsRoot, serverConfig.worktreesDir];
283331
+ if (isCloudExecutionRuntime && !isPathInsideAnyRoot(cwd, managedRoots)) return `Forge blocked this agent turn because the project folder is outside the managed runtime workspace. Folder: ${cwd}. Managed roots: ${managedRoots.join(", ")}.`;
283129
283332
  if (thread.anchorKind === "task" && project?.repositoryIdentity == null && !isGitWorkspace(cwd)) return "Forge created this task thread, but the project folder is not a Git repository yet. Import or link the repository before starting an agent turn.";
283130
283333
  return null;
283131
283334
  });
@@ -288483,6 +288686,7 @@ function executionEnvironmentCapabilities(serverConfig) {
288483
288686
  repositoryIdentity: true,
288484
288687
  pullRequests: isExecutionPlane,
288485
288688
  threadPullRequestLinking: isExecutionPlane,
288689
+ threadSettlement: isExecutionPlane,
288486
288690
  cloudMode: serverConfig.forgeCmmdRuntimeMode === true || isCloudShell,
288487
288691
  runtime: {
288488
288692
  topology: runtimeTopology(serverConfig),
@@ -301208,8 +301412,52 @@ function serializeNativeToolActivity(activity) {
301208
301412
  }
301209
301413
  };
301210
301414
  }
301415
+ /** The failure activities `appendProviderFailureActivity` emits, all `provider.*.failed`. */
301416
+ function isProviderFailureActivity(activity) {
301417
+ return activity.kind.startsWith("provider.") && activity.kind.endsWith(".failed");
301418
+ }
301419
+ function failureDetail(activity) {
301420
+ const payload = activity.payload;
301421
+ if (!payload || typeof payload !== "object" || !("detail" in payload)) return null;
301422
+ const detail = payload.detail;
301423
+ return typeof detail === "string" && detail.trim() ? detail.trim() : null;
301424
+ }
301425
+ /**
301426
+ * Replicates why a turn failed.
301427
+ *
301428
+ * Without this a failure never crossed the replication boundary — only `tool.`
301429
+ * activities were serialized — so durable history could not show one and every
301430
+ * failure reached the user as an endless "Working" spinner. Measured in
301431
+ * production on 2026-08-30: zero failure events had EVER been recorded against
301432
+ * 652 tool_call rows, which is how a workspace-path block, a broker-token
301433
+ * refusal and a dispatch into a deleted directory all looked identical.
301434
+ *
301435
+ * `error_summary` is used rather than a new kind because both the Forge
301436
+ * protocol and CMMD's ingest schema already accept it; nothing here needed a
301437
+ * contract change. The detail carries the actionable sentence, so it is joined
301438
+ * onto the summary — the event has no separate detail field.
301439
+ */
301440
+ function serializeProviderFailureActivity(activity) {
301441
+ if (!isProviderFailureActivity(activity)) return null;
301442
+ const summary = text(activity.summary, 4e3);
301443
+ if (summary === null) return null;
301444
+ const detail = failureDetail(activity);
301445
+ return {
301446
+ sourceSequence: null,
301447
+ event: {
301448
+ eventId: `activity:${activity.id}`,
301449
+ occurredAt: canonicalRuntimeEventTimestamp(activity.createdAt),
301450
+ kind: "error_summary",
301451
+ summary: text(detail === null ? summary : `${summary}: ${detail}`, 4e3) ?? summary
301452
+ }
301453
+ };
301454
+ }
301211
301455
  function serializeRuntimeThreadEvents(thread) {
301212
301456
  const messages = thread.messages.flatMap(serializeThreadMessage);
301457
+ const failureActivities = thread.activities.flatMap((activity) => {
301458
+ const event = serializeProviderFailureActivity(activity);
301459
+ return event === null ? [] : [event];
301460
+ });
301213
301461
  const replicaActivities = thread.activities.flatMap((activity) => {
301214
301462
  const event = serializeReplicaActivity(activity);
301215
301463
  return event === null ? [] : [event];
@@ -301221,7 +301469,8 @@ function serializeRuntimeThreadEvents(thread) {
301221
301469
  return [
301222
301470
  ...messages,
301223
301471
  ...replicaActivities,
301224
- ...toolActivities
301472
+ ...toolActivities,
301473
+ ...failureActivities
301225
301474
  ].toSorted((left, right) => {
301226
301475
  if (left.sourceSequence !== null && right.sourceSequence !== null) return left.sourceSequence - right.sourceSequence;
301227
301476
  if (left.sourceSequence !== null) return -1;
@@ -310312,16 +310561,16 @@ const gitUrlCloneRouteLayer = add$1("POST", "/api/cloud/git/clone-url", gen(func
310312
310561
  //#endregion
310313
310562
  //#region src/server.ts
310314
310563
  const PtyAdapterLive = unwrap(gen(function* () {
310315
- if (typeof Bun !== "undefined") return (yield* promise(() => import("./BunPTY-D-Klry5N.mjs"))).layer;
310316
- else return (yield* promise(() => import("./NodePTY-BMUFdM93.mjs"))).layer;
310564
+ if (typeof Bun !== "undefined") return (yield* promise(() => import("./BunPTY-B7ThejfA.mjs"))).layer;
310565
+ else return (yield* promise(() => import("./NodePTY-RnitYPTs.mjs"))).layer;
310317
310566
  }));
310318
310567
  const HttpServerLive = unwrap(gen(function* () {
310319
310568
  const config = yield* ServerConfig;
310320
- if (typeof Bun !== "undefined") return (yield* promise(() => import("./BunHttpServer-BgNCpQzV.mjs"))).layer({
310569
+ if (typeof Bun !== "undefined") return (yield* promise(() => import("./BunHttpServer-C_855q3m.mjs"))).layer({
310321
310570
  port: config.port,
310322
310571
  ...config.host ? { hostname: config.host } : {}
310323
310572
  });
310324
- const [NodeHttpServer, NodeHttp] = yield* all([promise(() => import("./NodeHttpServer-C_wePPV0.mjs")), promise(() => import("node:http"))]);
310573
+ const [NodeHttpServer, NodeHttp] = yield* all([promise(() => import("./NodeHttpServer-DgD75IAg.mjs")), promise(() => import("node:http"))]);
310325
310574
  return NodeHttpServer.layer(NodeHttp.createServer, {
310326
310575
  host: config.host,
310327
310576
  port: config.port
@@ -310329,10 +310578,10 @@ const HttpServerLive = unwrap(gen(function* () {
310329
310578
  }));
310330
310579
  const PlatformServicesLive = unwrap(gen(function* () {
310331
310580
  if (typeof Bun !== "undefined") {
310332
- const { layer } = yield* promise(() => import("./BunServices-ChM4mYH9.mjs"));
310581
+ const { layer } = yield* promise(() => import("./BunServices-BFygTrvx.mjs"));
310333
310582
  return layer;
310334
310583
  } else {
310335
- const { layer } = yield* promise(() => import("./NodeServices-Bqqy4DuH.mjs").then((n) => n.t));
310584
+ const { layer } = yield* promise(() => import("./NodeServices-Da5rUDDE.mjs").then((n) => n.t));
310336
310585
  return layer;
310337
310586
  }
310338
310587
  }));
@@ -310398,7 +310647,7 @@ const MiscRuntimeLayerLive = mergeAll(AnalyticsServiceLayerLive, OpenLive, Serve
310398
310647
  const RuntimeDependenciesWithoutPullRequestsLive = ReactorLayerLive.pipe(provideMerge(CheckpointingLayerLive), provideMerge(GitLayerLive), provideMerge(OrchestrationLayerLive), provideMerge(ProviderLayerLive), provideMerge(TerminalLayerLive), provideMerge(AgentBrowserManagerLive), provideMerge(mergeAll(ThreadDevRuntimeLive, DevTunnelLive.pipe(provide$1(ThreadDevRuntimeLive)))), provideMerge(PersistenceLayerLive), provideMerge(KeybindingsLive), provideMerge(ProviderRegistryLive), provideMerge(mergeAll(ServerSettingsLive, UsageServiceLive.pipe(provide$1(ServerSettingsLive)))), provideMerge(WorkspaceLayerLive), provideMerge(WorkspaceReadinessStateLive), provideMerge(ProjectFaviconResolverLive), provideMerge(RepositoryIdentityResolverLive), provideMerge(ServerEnvironmentLive), provideMerge(AuthLayerLive), provideMerge(ServerSecretStoreLayerLive), provideMerge(mergeAll(CloudRedisCoordinationLive, CloudStateSyncLive.pipe(provide$1(PersistenceLayerLive)))), provideMerge(MiscRuntimeLayerLive));
310399
310648
  const RuntimeDependenciesLive = pullRequestServiceFactoryLayer.pipe(provideMerge(RuntimeDependenciesWithoutPullRequestsLive), provideMerge(cmmdProjectIdentityResolverLive.pipe(provide$1(RuntimeDependenciesWithoutPullRequestsLive))), provideMerge(pullRequestProviderRuntimeLive));
310400
310649
  const RuntimeServicesLive = ServerRuntimeStartupLive.pipe(provideMerge(RuntimeDependenciesLive));
310401
- const makeRoutesLayer = mergeAll(authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authCmmdOAuthDeviceRouteLayer, authCmmdOAuthTokenRouteLayer, authCmmdPasswordTokenRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authLogoutRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer, authWebLoginRouteLayer, authWebCallbackRouteLayer, desktopLocalWebBridgePublishRouteLayer, desktopLocalWebBridgeBootstrapRouteLayer, desktopRelayControlPlaneRouteLayer, apiDocsHtmlRouteLayer, apiDocsOpenApiRouteLayer, pulseSignalStateListRouteLayer, pulseSignalStateUpsertRouteLayer, cmmdProfileRouteLayer, cmmdCreateBrainDocRouteLayer, cmmdUpdateTaskRouteLayer, cmmdUpsertTaskPullRequestRouteLayer, ...cmmdPullRequestRouteLayers, cmmdAddTaskCommentRouteLayer, cmmdWorkIntakeRouteLayer, cmmdWsTokenRouteLayer, cmmdSearchTasksRouteLayer, cmmdGetTaskCommentsRouteLayer, cmmdGetProjectCommentsRouteLayer, cmmdAddProjectCommentRouteLayer, cmmdUpdateProjectRouteLayer, cmmdGetOrgMembersRouteLayer, cmmdSimHostsRouteLayer, cmmdSimLeaseReadRouteLayer, cmmdSimLeaseClaimRouteLayer, cmmdSimLeaseReleaseRouteLayer, cmmdSimLeaseRenewRouteLayer, cmmdUploadTaskAttachmentRouteLayer, cmmdGetTaskAttachmentsRouteLayer, cmmdUpdateTaskCommentRouteLayer, cmmdDeleteTaskCommentRouteLayer, cmmdGetProjectRepositoryRouteLayer, cmmdListProjectRepositoriesRouteLayer, cmmdArchiveTaskRouteLayer, cmmdUnarchiveTaskRouteLayer, cmmdListTasksRouteLayer, cmmdCreateTaskRouteLayer, cmmdListCampaignsRouteLayer, cmmdGetCampaignRouteLayer, cmmdCreateCampaignRouteLayer, cmmdUpdateCampaignRouteLayer, cmmdDeleteCampaignRouteLayer, cmmdListSavedViewsRouteLayer, cmmdCreateSavedViewRouteLayer, cmmdImportSavedViewRouteLayer, cmmdUpdateSavedViewRouteLayer, cmmdDeleteSavedViewRouteLayer, cmmdListProjectsRouteLayer, cmmdGetProjectRouteLayer, cmmdCreateProjectRouteLayer, cmmdDeleteProjectRouteLayer, cmmdMoveProjectRouteLayer, cmmdGetProjectMembersRouteLayer, cmmdListWorkspaceMembersRouteLayer, cmmdAddProjectMemberRouteLayer, cmmdGetProjectMilestonesRouteLayer, cmmdCreateProjectMilestoneRouteLayer, cmmdUpdateProjectMilestoneRouteLayer, cmmdDeleteProjectMilestoneRouteLayer, cmmdGetProjectUpdatesRouteLayer, cmmdCreateProjectUpdateRouteLayer, cmmdUpdateProjectUpdateRouteLayer, cmmdDeleteProjectUpdateRouteLayer, cmmdImproveProjectContentRouteLayer, cmmdCreateProjectTaskDraftRouteLayer, cmmdGetProjectTaskDraftRouteLayer, cmmdUpdateProjectTaskDraftRouteLayer, cmmdPreviewProjectTaskDraftRouteLayer, cmmdCommitProjectTaskDraftRouteLayer, cmmdDiscardProjectTaskDraftRouteLayer, cmmdGetProjectLeadPlanRouteLayer, cmmdActivateProjectLeadAuthorityRouteLayer, cmmdGetProjectLeadReadinessRouteLayer, cmmdGetProjectLeadCapabilitiesRouteLayer, cmmdGetProjectLeadSummaryRouteLayer, cmmdGetProjectLeadDetailRouteLayer, cmmdGetProjectLeadBriefingRouteLayer, cmmdListProjectLeadEventsRouteLayer, cmmdExplainProjectLeadRouteLayer, cmmdPauseProjectLeadRouteLayer, cmmdResumeProjectLeadRouteLayer, cmmdReserveProjectLeadTaskRouteLayer, cmmdReleaseProjectLeadReservationRouteLayer, cmmdReconcileProjectLeadRouteLayer, cmmdResolveProjectLeadAttentionRouteLayer, cmmdClaimProjectLeadControllerRouteLayer, cmmdRenewProjectLeadControllerClaimRouteLayer, cmmdYieldProjectLeadControllerClaimRouteLayer, cmmdAcknowledgeProjectLeadControllerEventRouteLayer, cmmdRecordProjectLeadControllerDecisionRouteLayer, cmmdListForgeAutomationPresetsRouteLayer, cmmdListUserForgeAutomationRulesRouteLayer, cmmdCreateUserForgeAutomationRuleRouteLayer, cmmdUpdateUserForgeAutomationRuleRouteLayer, cmmdListUserForgeAutomationRunsRouteLayer, cmmdStartUserForgeAutomationRunRouteLayer, cmmdListForgeAutomationRulesRouteLayer, cmmdCreateForgeAutomationRuleRouteLayer, cmmdUpdateForgeAutomationRuleRouteLayer, cmmdListForgeAutomationRunsRouteLayer, cmmdStartForgeAutomationRunRouteLayer, cmmdGetForgeAutomationRunRouteLayer, cmmdRetryForgeAutomationRunRouteLayer, cmmdCancelForgeAutomationRunRouteLayer, cmmdApproveForgeAutomationEscalationRouteLayer, cmmdRejectForgeAutomationEscalationRouteLayer, cmmdListProjectAgentMembersRouteLayer, cmmdCreateProjectAgentMemberRouteLayer, cmmdGetProjectAgentMemberRouteLayer, cmmdRenameProjectAgentMemberRouteLayer, cmmdRetireProjectAgentMemberRouteLayer, cmmdUpdateProjectAgentMemberAvatarRouteLayer, cmmdListProjectAgentMemberInstancesRouteLayer, cmmdPreviewProjectAgentMemberConsolidationRouteLayer, cmmdApplyProjectAgentMemberConsolidationRouteLayer, cmmdPutProjectTaskAssignmentRouteLayer, cmmdListProjectBoardRouteLayer, cmmdGetProjectTaskWorkflowRouteLayer, cmmdUpdateProjectTaskWorkflowRouteLayer, cmmdCreateProjectBoardTaskRouteLayer, cmmdUpdateProjectBoardTaskRouteLayer, cmmdUpdateProjectBoardTaskStatusRouteLayer, cmmdListTaskExecutionOptionsRouteLayer, cmmdCreateTaskWorkSessionRouteLayer, cmmdListProjectWorkSessionsRouteLayer, cmmdGetWorkSessionRouteLayer, cmmdUpdateWorkSessionRouteLayer, cmmdAttachWorkSessionThreadRouteLayer, cmmdListTaskConversationsRouteLayer, cmmdLinkTaskConversationRouteLayer, cmmdGetTaskHistoryRouteLayer, cmmdGetTaskConversationRouteLayer, cmmdSpawnForgeThreadFromBoardTaskRouteLayer, cmmdListCenterBoardRouteLayer, cmmdCreateCenterBoardTaskRouteLayer, cmmdCreateFeedbackRouteLayer, cmmdUpdateCenterBoardTaskRouteLayer, cmmdMoveCenterBoardTaskRouteLayer, cmmdMoveProjectBoardTaskRouteLayer, cmmdArchiveProjectBoardTaskRouteLayer, cmmdUnarchiveProjectBoardTaskRouteLayer, cmmdArchiveCenterBoardTaskRouteLayer, cmmdUnarchiveCenterBoardTaskRouteLayer, cmmdBootstrapRouteLayer, cmmdGetAccountPreferencesRouteLayer, cmmdUpdateAccountPreferencesRouteLayer, cmmdGetOrgProviderPolicyRouteLayer, cmmdListChatsRouteLayer, cmmdGetChatRouteLayer, cmmdListDevicesRouteLayer, runtimeReplicationStatusRouteLayer, cmmdRegisterDeviceRouteLayer, cmmdHeartbeatRuntimeRouteLayer, cmmdGrantRuntimeAccessRouteLayer, cmmdRevokeRuntimeAccessRouteLayer, cmmdCreateRelayControlRouteLayer, cmmdCreateRelayActionGrantRouteLayer, cmmdReplaceRuntimeInventoryRouteLayer, cmmdListRuntimeInventoryRouteLayer, cmmdGetRuntimeDiagnosticsRouteLayer, cmmdProvisionAuthRuntimeRouteLayer, cmmdGetAuthRuntimeRouteLayer, cmmdDestroyAuthRuntimeRouteLayer, cmmdConnectAuthRuntimeRouteLayer, cmmdGetProviderAccountsRouteLayer, cmmdDeleteProviderAccountRouteLayer, cmmdSetProviderAccountDefaultRouteLayer, cmmdGetProviderUsageRouteLayer, cmmdRefreshProviderUsageRouteLayer, cmmdGetUserCodexCredentialRouteLayer, cmmdDeleteUserCodexCredentialRouteLayer, cmmdGetUserClaudeCredentialRouteLayer, cmmdDeleteUserClaudeCredentialRouteLayer, cmmdGetClaudeRuntimeReadinessRouteLayer, cmmdAppendRuntimeThreadEventsRouteLayer, cmmdGetRuntimeThreadReplicaRouteLayer, cmmdRenameDeviceRouteLayer, cmmdRevokeDeviceRouteLayer, cmmdInstallConnectorRouteLayer, cmmdListConnectorsRouteLayer, cmmdForgeCloudProjectsListRouteLayer, cmmdForgeCloudProjectsEventsRouteLayer, cmmdForgeCloudProjectRegisterRouteLayer, cmmdForgeCloudProjectUnregisterRouteLayer, cmmdForgeCloudProjectLifecyclePreflightRouteLayer, cmmdForgeCloudProjectRemovalRouteLayer, cmmdForgeCloudProjectRemovalReceiptRouteLayer, cmmdForgeRuntimesEnsureRouteLayer, cmmdForgeRuntimesConnectRouteLayer, ownerRuntimeCodexReadinessRouteLayer, cmmdForgeRuntimesStatusRouteLayer, cmmdForgeRuntimesStartRouteLayer, cmmdForgeRuntimesStopRouteLayer, cmmdForgeRuntimesRecycleRouteLayer, cmmdForgeRuntimesUpdateCommitRouteLayer, cmmdForgeRuntimesDestroyRouteLayer, cmmdGetTaskRouteLayer, commandUpdateTaskRouteLayer, mobileProviderCatalogRouteLayer, cmmdUsageSummaryRouteLayer, cmmdBillingRouteLayer, cmmdBillingSeriesRouteLayer, attachmentsRouteLayer, orchestrationDispatchRouteLayer, orchestrationCmmdWorkRunEventRouteLayer, orchestrationAutomationStartThreadRouteLayer, orchestrationAutomationRebindRouteLayer, orchestrationAutomationTerminalReconcileRouteLayer, mobileGitRunStackedActionRouteLayer, pullRequestDiffRouteLayer, orchestrationSnapshotRouteLayer, localAutomationListRouteLayer, localAutomationCreateRouteLayer, localAutomationUpdateRouteLayer, localAutomationDeleteRouteLayer, localAutomationRunRouteLayer, otlpTracesProxyRouteLayer, devTunnelProxyRouteLayer, devTunnelLocalPortProxyRouteLayer, projectFaviconRouteLayer, serverEnvironmentRouteLayer, browserWebRtcReadinessRouteLayer, staticAndDevRouteLayer, githubStatusRouteLayer, githubAuthorizeUrlRouteLayer, githubDisconnectRouteLayer, githubReposRouteLayer, githubCloneRouteLayer, githubCloneJobStartRouteLayer, githubCloneJobStatusRouteLayer, githubRefreshCredentialsRouteLayer, githubToolConfirmationApproveRouteLayer, projectLinkGetRouteLayer, projectLinkListRouteLayer, projectLinkSetRouteLayer, projectLinkDeleteRouteLayer, cmmdWorkspacesRouteLayer, cmmdCampaignsRouteLayer, cmmdProjectLinksRouteLayer, cmmdEnsureGitHubProjectContextRouteLayer, cmmdProjectRepositoryEnsureRouteLayer, cmmdProjectsGetRouteLayer, cmmdProjectsCreateRouteLayer, workspaceReadinessRouteLayer, runtimeLivenessRouteLayer, claudeNativeGenerationProofRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(provide$1(browserApiCorsLayer));
310650
+ const makeRoutesLayer = mergeAll(authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authOAuthTokenExchangeRouteLayer, authCmmdOAuthDeviceRouteLayer, authCmmdOAuthTokenRouteLayer, authCmmdPasswordTokenRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authLogoutRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer, authWebLoginRouteLayer, authWebCallbackRouteLayer, desktopLocalWebBridgePublishRouteLayer, desktopLocalWebBridgeBootstrapRouteLayer, desktopRelayControlPlaneRouteLayer, apiDocsHtmlRouteLayer, apiDocsOpenApiRouteLayer, pulseSignalStateListRouteLayer, pulseSignalStateUpsertRouteLayer, cmmdProfileRouteLayer, cmmdCreateBrainDocRouteLayer, cmmdUpdateTaskRouteLayer, cmmdUpsertTaskPullRequestRouteLayer, ...cmmdPullRequestRouteLayers, cmmdAddTaskCommentRouteLayer, cmmdWorkIntakeRouteLayer, cmmdWsTokenRouteLayer, cmmdSearchTasksRouteLayer, cmmdGetTaskCommentsRouteLayer, cmmdGetProjectCommentsRouteLayer, cmmdAddProjectCommentRouteLayer, cmmdUpdateProjectRouteLayer, cmmdGetOrgMembersRouteLayer, cmmdSimHostsRouteLayer, cmmdSimLeaseReadRouteLayer, cmmdSimLeaseClaimRouteLayer, cmmdSimLeaseReleaseRouteLayer, cmmdSimLeaseRenewRouteLayer, cmmdUploadTaskAttachmentRouteLayer, cmmdGetTaskAttachmentsRouteLayer, cmmdUpdateTaskCommentRouteLayer, cmmdDeleteTaskCommentRouteLayer, cmmdGetProjectRepositoryRouteLayer, cmmdListProjectRepositoriesRouteLayer, cmmdArchiveTaskRouteLayer, cmmdUnarchiveTaskRouteLayer, cmmdListTasksRouteLayer, cmmdCreateTaskRouteLayer, cmmdListCampaignsRouteLayer, cmmdGetCampaignRouteLayer, cmmdCreateCampaignRouteLayer, cmmdUpdateCampaignRouteLayer, cmmdDeleteCampaignRouteLayer, cmmdListSavedViewsRouteLayer, cmmdCreateSavedViewRouteLayer, cmmdImportSavedViewRouteLayer, cmmdUpdateSavedViewRouteLayer, cmmdDeleteSavedViewRouteLayer, cmmdListProjectsRouteLayer, cmmdGetProjectRouteLayer, cmmdCreateProjectRouteLayer, cmmdDeleteProjectRouteLayer, cmmdMoveProjectRouteLayer, cmmdGetProjectMembersRouteLayer, cmmdListWorkspaceMembersRouteLayer, cmmdAddProjectMemberRouteLayer, cmmdGetProjectMilestonesRouteLayer, cmmdCreateProjectMilestoneRouteLayer, cmmdUpdateProjectMilestoneRouteLayer, cmmdDeleteProjectMilestoneRouteLayer, cmmdGetProjectUpdatesRouteLayer, cmmdCreateProjectUpdateRouteLayer, cmmdUpdateProjectUpdateRouteLayer, cmmdDeleteProjectUpdateRouteLayer, cmmdImproveProjectContentRouteLayer, cmmdCreateProjectTaskDraftRouteLayer, cmmdGetProjectTaskDraftRouteLayer, cmmdUpdateProjectTaskDraftRouteLayer, cmmdPreviewProjectTaskDraftRouteLayer, cmmdCommitProjectTaskDraftRouteLayer, cmmdDiscardProjectTaskDraftRouteLayer, cmmdGetProjectLeadPlanRouteLayer, cmmdActivateProjectLeadAuthorityRouteLayer, cmmdGetProjectLeadReadinessRouteLayer, cmmdGetProjectLeadCapabilitiesRouteLayer, cmmdGetProjectLeadSummaryRouteLayer, cmmdGetProjectLeadDetailRouteLayer, cmmdGetProjectLeadBriefingRouteLayer, cmmdListProjectLeadEventsRouteLayer, cmmdExplainProjectLeadRouteLayer, cmmdPauseProjectLeadRouteLayer, cmmdResumeProjectLeadRouteLayer, cmmdReserveProjectLeadTaskRouteLayer, cmmdReleaseProjectLeadReservationRouteLayer, cmmdReconcileProjectLeadRouteLayer, cmmdResolveProjectLeadAttentionRouteLayer, cmmdClaimProjectLeadControllerRouteLayer, cmmdRenewProjectLeadControllerClaimRouteLayer, cmmdYieldProjectLeadControllerClaimRouteLayer, cmmdAcknowledgeProjectLeadControllerEventRouteLayer, cmmdRecordProjectLeadControllerDecisionRouteLayer, cmmdListForgeAutomationPresetsRouteLayer, cmmdListUserForgeAutomationRulesRouteLayer, cmmdCreateUserForgeAutomationRuleRouteLayer, cmmdUpdateUserForgeAutomationRuleRouteLayer, cmmdListUserForgeAutomationRunsRouteLayer, cmmdStartUserForgeAutomationRunRouteLayer, cmmdListForgeAutomationRulesRouteLayer, cmmdCreateForgeAutomationRuleRouteLayer, cmmdUpdateForgeAutomationRuleRouteLayer, cmmdListForgeAutomationRunsRouteLayer, cmmdStartForgeAutomationRunRouteLayer, cmmdGetForgeAutomationRunRouteLayer, cmmdRetryForgeAutomationRunRouteLayer, cmmdCancelForgeAutomationRunRouteLayer, cmmdApproveForgeAutomationEscalationRouteLayer, cmmdRejectForgeAutomationEscalationRouteLayer, cmmdListProjectAgentMembersRouteLayer, cmmdCreateProjectAgentMemberRouteLayer, cmmdGetProjectAgentMemberRouteLayer, cmmdRenameProjectAgentMemberRouteLayer, cmmdRetireProjectAgentMemberRouteLayer, cmmdUpdateProjectAgentMemberAvatarRouteLayer, cmmdListProjectAgentMemberInstancesRouteLayer, cmmdPreviewProjectAgentMemberConsolidationRouteLayer, cmmdApplyProjectAgentMemberConsolidationRouteLayer, cmmdPutProjectTaskAssignmentRouteLayer, cmmdListProjectBoardRouteLayer, cmmdGetProjectTaskWorkflowRouteLayer, cmmdUpdateProjectTaskWorkflowRouteLayer, cmmdCreateProjectBoardTaskRouteLayer, cmmdUpdateProjectBoardTaskRouteLayer, cmmdUpdateProjectBoardTaskStatusRouteLayer, cmmdListTaskExecutionOptionsRouteLayer, cmmdCreateTaskWorkSessionRouteLayer, cmmdListProjectWorkSessionsRouteLayer, cmmdGetWorkSessionRouteLayer, cmmdUpdateWorkSessionRouteLayer, cmmdAttachWorkSessionThreadRouteLayer, cmmdListTaskConversationsRouteLayer, cmmdLinkTaskConversationRouteLayer, cmmdGetTaskHistoryRouteLayer, cmmdGetTaskConversationRouteLayer, cmmdSpawnForgeThreadFromBoardTaskRouteLayer, cmmdListCenterBoardRouteLayer, cmmdCreateCenterBoardTaskRouteLayer, cmmdCreateFeedbackRouteLayer, cmmdUpdateCenterBoardTaskRouteLayer, cmmdMoveCenterBoardTaskRouteLayer, cmmdMoveProjectBoardTaskRouteLayer, cmmdArchiveProjectBoardTaskRouteLayer, cmmdUnarchiveProjectBoardTaskRouteLayer, cmmdArchiveCenterBoardTaskRouteLayer, cmmdUnarchiveCenterBoardTaskRouteLayer, cmmdBootstrapRouteLayer, cmmdGetAccountPreferencesRouteLayer, cmmdUpdateAccountPreferencesRouteLayer, cmmdGetOrgProviderPolicyRouteLayer, cmmdListChatsRouteLayer, cmmdGetChatRouteLayer, cmmdListDevicesRouteLayer, runtimeReplicationStatusRouteLayer, cmmdRegisterDeviceRouteLayer, cmmdHeartbeatRuntimeRouteLayer, cmmdGrantRuntimeAccessRouteLayer, cmmdRevokeRuntimeAccessRouteLayer, cmmdCreateRelayControlRouteLayer, cmmdCreateRelayActionGrantRouteLayer, cmmdReplaceRuntimeInventoryRouteLayer, cmmdListRuntimeInventoryRouteLayer, cmmdGetRuntimeDiagnosticsRouteLayer, cmmdProvisionAuthRuntimeRouteLayer, cmmdGetAuthRuntimeRouteLayer, cmmdDestroyAuthRuntimeRouteLayer, cmmdConnectAuthRuntimeRouteLayer, cmmdGetProviderAccountsRouteLayer, cmmdDeleteProviderAccountRouteLayer, cmmdSetProviderAccountDefaultRouteLayer, cmmdGetProviderUsageRouteLayer, cmmdRefreshProviderUsageRouteLayer, cmmdGetUserCodexCredentialRouteLayer, cmmdDeleteUserCodexCredentialRouteLayer, cmmdGetUserClaudeCredentialRouteLayer, cmmdDeleteUserClaudeCredentialRouteLayer, cmmdGetClaudeRuntimeReadinessRouteLayer, cmmdAppendRuntimeThreadEventsRouteLayer, cmmdGetRuntimeThreadReplicaRouteLayer, cmmdRenameDeviceRouteLayer, cmmdRevokeDeviceRouteLayer, cmmdInstallConnectorRouteLayer, cmmdListConnectorsRouteLayer, cmmdForgeCloudProjectsListRouteLayer, cmmdForgeCloudProjectsEventsRouteLayer, cmmdForgeCloudProjectRegisterRouteLayer, cmmdForgeCloudProjectUnregisterRouteLayer, cmmdForgeCloudProjectLifecyclePreflightRouteLayer, cmmdForgeCloudProjectRemovalRouteLayer, cmmdForgeCloudProjectRemovalReceiptRouteLayer, cmmdForgeRuntimesEnsureRouteLayer, cmmdForgeRuntimesConnectRouteLayer, ownerRuntimeCodexReadinessRouteLayer, cmmdForgeRuntimesStatusRouteLayer, cmmdForgeRuntimesStartRouteLayer, cmmdForgeRuntimesStopRouteLayer, cmmdForgeRuntimesRecycleRouteLayer, cmmdForgeRuntimesUpdateCommitRouteLayer, cmmdForgeRuntimesDestroyRouteLayer, cmmdGetTaskRouteLayer, commandUpdateTaskRouteLayer, mobileProviderCatalogRouteLayer, cmmdUsageSummaryRouteLayer, cmmdBillingRouteLayer, cmmdBillingSeriesRouteLayer, attachmentsRouteLayer, orchestrationDispatchRouteLayer, orchestrationCmmdWorkRunEventRouteLayer, orchestrationAutomationStartThreadRouteLayer, orchestrationAutomationRebindRouteLayer, orchestrationAutomationTerminalReconcileRouteLayer, mobileGitRunStackedActionRouteLayer, pullRequestDiffRouteLayer, orchestrationSnapshotRouteLayer, localAutomationListRouteLayer, localAutomationCreateRouteLayer, localAutomationUpdateRouteLayer, localAutomationDeleteRouteLayer, localAutomationRunRouteLayer, otlpTracesProxyRouteLayer, devTunnelProxyRouteLayer, devTunnelLocalPortProxyRouteLayer, projectFaviconRouteLayer, serverEnvironmentRouteLayer, browserWebRtcReadinessRouteLayer, staticAndDevRouteLayer, githubStatusRouteLayer, githubAuthorizeUrlRouteLayer, githubDisconnectRouteLayer, githubReposRouteLayer, githubCloneRouteLayer, githubCloneJobStartRouteLayer, githubCloneJobStatusRouteLayer, githubRefreshCredentialsRouteLayer, githubToolConfirmationApproveRouteLayer, projectLinkGetRouteLayer, projectLinkListRouteLayer, projectLinkSetRouteLayer, projectLinkDeleteRouteLayer, cmmdWorkspacesRouteLayer, cmmdCampaignsRouteLayer, cmmdProjectLinksRouteLayer, cmmdEnsureGitHubProjectContextRouteLayer, cmmdProjectRepositoryEnsureRouteLayer, cmmdProjectsGetRouteLayer, cmmdProjectsCreateRouteLayer, workspaceReadinessRouteLayer, runtimeLivenessRouteLayer, claudeNativeGenerationProofRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(provide$1(browserApiCorsLayer));
310402
310651
  const runServer = launch$1(unwrap(gen(function* () {
310403
310652
  const config = yield* ServerConfig;
310404
310653
  fixPath();