@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.
- package/dist/{BunHttpServer-BgNCpQzV.mjs → BunHttpServer-C_855q3m.mjs} +6 -6
- package/dist/{BunHttpServer-DOAuw4Iq.cjs → BunHttpServer-Dxx0kzQc.cjs} +6 -6
- package/dist/{BunPTY-D-Klry5N.mjs → BunPTY-B7ThejfA.mjs} +3 -3
- package/dist/{BunPTY-2icf7sRj.cjs → BunPTY-BjHFZATJ.cjs} +3 -3
- package/dist/{BunServices-ChM4mYH9.mjs → BunServices-BFygTrvx.mjs} +3 -3
- package/dist/{BunServices-CiNXNzHD.cjs → BunServices-U1VBnEJS.cjs} +3 -3
- package/dist/{Cache-XSj5g7uG.cjs → Cache-BRhFH80U.cjs} +3 -3
- package/dist/{Cache-Cm78WiyU.mjs → Cache-CHvh_vWI.mjs} +3 -3
- package/dist/{Config-DMA9WqtC.cjs → Config-BHRBB8XM.cjs} +2 -2
- package/dist/{Config-DrOyN3WS.mjs → Config-To1VEqlB.mjs} +2 -2
- package/dist/{HttpServer-aJkhz6yu.cjs → HttpServer-BTcgkY38.cjs} +123 -4
- package/dist/{HttpServer-ByyNdEXm.mjs → HttpServer-DV-x5DVo.mjs} +118 -4
- package/dist/{NodeHttpServer-D_ismXpd.cjs → NodeHttpServer-D6YVHsL8.cjs} +7 -7
- package/dist/{NodeHttpServer-C_wePPV0.mjs → NodeHttpServer-DgD75IAg.mjs} +7 -7
- package/dist/{NodePTY-cb7HIasY.cjs → NodePTY-Bd9mvI6U.cjs} +4 -4
- package/dist/{NodePTY-BMUFdM93.mjs → NodePTY-RnitYPTs.mjs} +4 -4
- package/dist/{NodeServices-BAl07hlH.cjs → NodeServices-BcQL_53W.cjs} +1 -1
- package/dist/{NodeServices-BISZRY3e.cjs → NodeServices-BjmXNhpe.cjs} +3 -3
- package/dist/{NodeServices-Bqqy4DuH.mjs → NodeServices-Da5rUDDE.mjs} +3 -3
- package/dist/{NodeSqliteClient-SsUCk9mA.cjs → NodeSqliteClient-CG_mPdVp.cjs} +6 -6
- package/dist/{NodeSqliteClient-OdI1TawL.mjs → NodeSqliteClient-CcLD4Zvr.mjs} +6 -6
- package/dist/{NodeTerminal-B9u7fFYa.cjs → NodeTerminal-D86oor5_.cjs} +3 -3
- package/dist/{NodeTerminal-_XekCzf-.mjs → NodeTerminal-Ke6chk0A.mjs} +3 -3
- package/dist/{PTY-U3JQnLXS.cjs → PTY-BB84iC10.cjs} +2 -2
- package/dist/{PTY-CBkE5akF.mjs → PTY-X-4Tv31s.mjs} +2 -2
- package/dist/{Path-Bwl3ltR5.mjs → Path-DJTwK58E.mjs} +2 -2
- package/dist/{Path-CsbBuCFB.cjs → Path-qpublmG3.cjs} +2 -2
- package/dist/{Schema-CTXk8IgN.mjs → Schema-CKuz8TX8.mjs} +61 -6
- package/dist/{Schema-Bij_WAra.cjs → Schema-DaFukK_y.cjs} +72 -5
- package/dist/{SqlError-C2mi8_tp.cjs → SqlError-CsWFS-OU.cjs} +3 -3
- package/dist/{SqlError-1c-3v7GY.mjs → SqlError-DhK0hV8S.mjs} +3 -3
- package/dist/{SqliteClient-CdAhI4lb.cjs → SqliteClient-BpjZWL6O.cjs} +5 -5
- package/dist/{SqliteClient-aoOb51gB.mjs → SqliteClient-CA7vjiUj.mjs} +5 -5
- package/dist/bin.cjs +307 -57
- package/dist/bin.mjs +306 -57
- 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
|
|
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-
|
|
6
|
-
import { _ as ChildProcessSpawner, a as Stdio, g as make$45, o as make$46, r as isQuitError } from "./NodeTerminal-
|
|
7
|
-
import { n as layer$7 } from "./NodeServices-
|
|
8
|
-
import { $ as
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
113375
|
-
node: () => import("./NodeSqliteClient-
|
|
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
|
|
146722
|
-
|
|
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
|
-
|
|
146725
|
-
|
|
146835
|
+
return resolveBrokerTicketOutcome({
|
|
146836
|
+
identityMode: "exact",
|
|
146837
|
+
legacyGrantToken: null,
|
|
146726
146838
|
sessionId,
|
|
146727
|
-
|
|
146728
|
-
|
|
146729
|
-
|
|
146730
|
-
|
|
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
|
|
146776
|
-
if (
|
|
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
|
-
|
|
206314
|
-
|
|
206315
|
-
|
|
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
|
-
|
|
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-
|
|
310316
|
-
else return (yield* promise(() => import("./NodePTY-
|
|
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-
|
|
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-
|
|
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-
|
|
310581
|
+
const { layer } = yield* promise(() => import("./BunServices-BFygTrvx.mjs"));
|
|
310333
310582
|
return layer;
|
|
310334
310583
|
} else {
|
|
310335
|
-
const { layer } = yield* promise(() => import("./NodeServices-
|
|
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();
|