@cmmd-center/forge 0.9.5 → 0.9.6
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 +261 -56
- package/dist/bin.mjs +284 -80
- package/dist/{open-FIgTDosf.mjs → open-D8mGyWmt.mjs} +3 -3
- package/package.json +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
require("./chunk-BhaIgcZK.cjs");
|
|
4
|
-
const require_Schema = require("./Schema-
|
|
5
|
-
const require_Path = require("./Path-
|
|
6
|
-
const require_Config = require("./Config-
|
|
7
|
-
const require_SqlError = require("./SqlError-
|
|
4
|
+
const require_Schema = require("./Schema-DaFukK_y.cjs");
|
|
5
|
+
const require_Path = require("./Path-qpublmG3.cjs");
|
|
6
|
+
const require_Config = require("./Config-BHRBB8XM.cjs");
|
|
7
|
+
const require_SqlError = require("./SqlError-CsWFS-OU.cjs");
|
|
8
8
|
let bun_sqlite = require("bun:sqlite");
|
|
9
9
|
//#region ../../node_modules/.bun/@effect+sql-sqlite-bun@4.0.0-beta.45+4dcb167d4624bd06/node_modules/@effect/sql-sqlite-bun/dist/SqliteClient.js
|
|
10
10
|
/**
|
|
@@ -124,4 +124,4 @@ exports.layer = layer;
|
|
|
124
124
|
exports.layerConfig = layerConfig;
|
|
125
125
|
exports.make = make;
|
|
126
126
|
|
|
127
|
-
//# sourceMappingURL=SqliteClient-
|
|
127
|
+
//# sourceMappingURL=SqliteClient-BpjZWL6O.cjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { Wt as getCurrent, bt as make$2, m as die } from "./Path-
|
|
5
|
-
import { h as unwrap } from "./Config-
|
|
6
|
-
import { S as layer$1, c as SqlError, f as classifySqliteError, h as make$3, m as SqlClient, p as SafeIntegers, v as defaultTransforms, x as makeCompilerSqlite } from "./SqlError-
|
|
3
|
+
import { Dn as as, Fc as get, Jn as fail, Mc as Service, Nc as add, Oa as Scope, Ql as identity, Rc as getUnsafe, Sa as provide, Ti as uninterruptibleMask, bi as try_, di as sync, dr as gen, er as flatMap, fi as tap, ha as effectContext, ji as withFiber, ka as addFinalizer$1, si as succeed, wr as map, xn as addFinalizer, zc as make$1 } from "./Schema-CKuz8TX8.mjs";
|
|
4
|
+
import { Wt as getCurrent, bt as make$2, m as die } from "./Path-DJTwK58E.mjs";
|
|
5
|
+
import { h as unwrap } from "./Config-To1VEqlB.mjs";
|
|
6
|
+
import { S as layer$1, c as SqlError, f as classifySqliteError, h as make$3, m as SqlClient, p as SafeIntegers, v as defaultTransforms, x as makeCompilerSqlite } from "./SqlError-DhK0hV8S.mjs";
|
|
7
7
|
import { Database } from "bun:sqlite";
|
|
8
8
|
//#region ../../node_modules/.bun/@effect+sql-sqlite-bun@4.0.0-beta.45+4dcb167d4624bd06/node_modules/@effect/sql-sqlite-bun/dist/SqliteClient.js
|
|
9
9
|
/**
|
|
@@ -118,4 +118,4 @@ const layer = (config) => effectContext(map(make(config), (client) => make$1(Sql
|
|
|
118
118
|
//#endregion
|
|
119
119
|
export { SqliteClient, TypeId, layer, layerConfig, make };
|
|
120
120
|
|
|
121
|
-
//# sourceMappingURL=SqliteClient-
|
|
121
|
+
//# sourceMappingURL=SqliteClient-CA7vjiUj.mjs.map
|
package/dist/bin.cjs
CHANGED
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
4
4
|
const require_chunk = require("./chunk-BhaIgcZK.cjs");
|
|
5
|
-
const require_Schema$1 = require("./Schema-
|
|
6
|
-
const require_Path = require("./Path-
|
|
7
|
-
const require_NodeTerminal = require("./NodeTerminal-
|
|
8
|
-
const require_NodeServices = require("./NodeServices-
|
|
9
|
-
const require_HttpServer = require("./HttpServer-
|
|
10
|
-
const require_Config = require("./Config-
|
|
11
|
-
const require_Cache = require("./Cache-
|
|
12
|
-
const require_SqlError = require("./SqlError-
|
|
5
|
+
const require_Schema$1 = require("./Schema-DaFukK_y.cjs");
|
|
6
|
+
const require_Path = require("./Path-qpublmG3.cjs");
|
|
7
|
+
const require_NodeTerminal = require("./NodeTerminal-D86oor5_.cjs");
|
|
8
|
+
const require_NodeServices = require("./NodeServices-BjmXNhpe.cjs");
|
|
9
|
+
const require_HttpServer = require("./HttpServer-BTcgkY38.cjs");
|
|
10
|
+
const require_Config = require("./Config-BHRBB8XM.cjs");
|
|
11
|
+
const require_Cache = require("./Cache-BRhFH80U.cjs");
|
|
12
|
+
const require_SqlError = require("./SqlError-CsWFS-OU.cjs");
|
|
13
13
|
const require_esm = require("./esm-Do7HVhLA.cjs");
|
|
14
14
|
const require_Mime = require("./Mime-CyHbecis.cjs");
|
|
15
15
|
const require_runtimeControlAuthority = require("./runtimeControlAuthority-SNBF5Mjy.cjs");
|
|
16
|
-
const require_PTY = require("./PTY-
|
|
16
|
+
const require_PTY = require("./PTY-BB84iC10.cjs");
|
|
17
17
|
let node_child_process = require("node:child_process");
|
|
18
18
|
node_child_process = require_chunk.__toESM(node_child_process);
|
|
19
19
|
let node_stream = require("node:stream");
|
|
@@ -17640,6 +17640,7 @@ const ExecutionEnvironmentCapabilities = require_Schema$1.Struct({
|
|
|
17640
17640
|
pullRequests: require_Schema$1.optionalKey(require_Schema$1.Boolean),
|
|
17641
17641
|
threadPullRequestLinking: require_Schema$1.optionalKey(require_Schema$1.Boolean),
|
|
17642
17642
|
cloudMode: require_Schema$1.Boolean.pipe(require_Schema$1.withDecodingDefault(require_Schema$1.succeed(false))),
|
|
17643
|
+
threadSettlement: require_Schema$1.optionalKey(require_Schema$1.Boolean),
|
|
17643
17644
|
posthogPublicKey: require_Schema$1.NullOr(require_Schema$1.String).pipe(require_Schema$1.withDecodingDefault(require_Schema$1.succeed(null))),
|
|
17644
17645
|
posthogHost: require_Schema$1.NullOr(require_Schema$1.String).pipe(require_Schema$1.withDecodingDefault(require_Schema$1.succeed(null))),
|
|
17645
17646
|
runtime: require_Schema$1.optionalKey(ExecutionEnvironmentRuntimeCapabilities),
|
|
@@ -68205,6 +68206,30 @@ const respondToAuthError = (error) => require_Schema$1.gen(function* () {
|
|
|
68205
68206
|
}));
|
|
68206
68207
|
return response;
|
|
68207
68208
|
});
|
|
68209
|
+
const OAUTH_ACCESS_TOKEN_TYPE = "urn:ietf:params:oauth:token-type:access_token";
|
|
68210
|
+
/**
|
|
68211
|
+
* The one exchange this endpoint performs, or the reason it will not.
|
|
68212
|
+
*
|
|
68213
|
+
* Returns a message rather than a boolean so the route can say which field was
|
|
68214
|
+
* wrong: an operator debugging a pairing failure otherwise cannot tell an
|
|
68215
|
+
* unsupported grant from an unsupported token type.
|
|
68216
|
+
*/
|
|
68217
|
+
function rejectUnsupportedTokenExchange(input) {
|
|
68218
|
+
if (input.grant_type !== "urn:ietf:params:oauth:grant-type:token-exchange") return "Unsupported grant_type.";
|
|
68219
|
+
if (input.subject_token_type !== "urn:t3:params:oauth:token-type:environment-bootstrap") return "Unsupported subject_token_type.";
|
|
68220
|
+
if (input.requested_token_type !== "urn:ietf:params:oauth:token-type:access_token") return "Unsupported requested_token_type.";
|
|
68221
|
+
return null;
|
|
68222
|
+
}
|
|
68223
|
+
/**
|
|
68224
|
+
* `expires_in` is a duration in seconds; a session carries an absolute instant.
|
|
68225
|
+
*
|
|
68226
|
+
* Clamped at zero so a session that expired between issuance and this call is
|
|
68227
|
+
* reported as already expired rather than as a negative lifetime, which a client
|
|
68228
|
+
* could read as a very large unsigned value.
|
|
68229
|
+
*/
|
|
68230
|
+
function accessTokenExpiresInSeconds(remainingMillis) {
|
|
68231
|
+
return Math.max(0, Math.floor(remainingMillis / 1e3));
|
|
68232
|
+
}
|
|
68208
68233
|
//#endregion
|
|
68209
68234
|
//#region ../../packages/shared/src/cmmdIdentity.ts
|
|
68210
68235
|
const MAX_CMMD_AVATAR_URL_LENGTH = 256 * 1024;
|
|
@@ -69404,6 +69429,16 @@ const CommandOAuthDeviceInput = require_Schema$1.Struct({
|
|
|
69404
69429
|
return_url: require_Schema$1.optionalKey(require_Schema$1.String),
|
|
69405
69430
|
scope: require_Schema$1.optionalKey(require_Schema$1.String)
|
|
69406
69431
|
});
|
|
69432
|
+
const OAuthTokenExchangeInput = require_Schema$1.Struct({
|
|
69433
|
+
grant_type: require_Schema$1.String,
|
|
69434
|
+
subject_token: require_Schema$1.String,
|
|
69435
|
+
subject_token_type: require_Schema$1.String,
|
|
69436
|
+
requested_token_type: require_Schema$1.String,
|
|
69437
|
+
scope: require_Schema$1.optional(require_Schema$1.String),
|
|
69438
|
+
client_label: require_Schema$1.optional(require_Schema$1.String),
|
|
69439
|
+
client_device_type: require_Schema$1.optional(require_Schema$1.String),
|
|
69440
|
+
client_os: require_Schema$1.optional(require_Schema$1.String)
|
|
69441
|
+
});
|
|
69407
69442
|
const CommandOAuthTokenInput = require_Schema$1.Struct({
|
|
69408
69443
|
grant_type: require_Schema$1.String,
|
|
69409
69444
|
device_code: require_Schema$1.String,
|
|
@@ -70246,6 +70281,51 @@ const authBearerBootstrapRouteLayer = add$1("POST", "/api/auth/bootstrap/bearer"
|
|
|
70246
70281
|
const result = yield* serverAuth.exchangeBootstrapCredentialForBearerSession(payload.credential, deriveAuthClientMetadata({ request }));
|
|
70247
70282
|
return require_HttpServer.jsonUnsafe(result, { status: 200 });
|
|
70248
70283
|
}).pipe(require_Schema$1.catchTag("AuthError", (error) => respondToAuthError(error))));
|
|
70284
|
+
/**
|
|
70285
|
+
* FORGE COMPAT. `POST /oauth/token` — the RFC 8693 token exchange the vendored
|
|
70286
|
+
* t3code client uses to turn a pairing credential into a bearer token.
|
|
70287
|
+
*
|
|
70288
|
+
* Forge's own clients call `/api/auth/bootstrap/bearer` with JSON. The mobile app
|
|
70289
|
+
* cannot: the endpoint is baked into the vendored contract
|
|
70290
|
+
* (packages/t3-contracts/src/environmentHttp.ts) as a form-urlencoded OAuth
|
|
70291
|
+
* exchange, and without it every attempt to add an environment fails with a 404 —
|
|
70292
|
+
* which leaves the whole app unusable, since no screen works before an
|
|
70293
|
+
* environment exists.
|
|
70294
|
+
*
|
|
70295
|
+
* This is a shape adapter, not a second way to authenticate. It performs no
|
|
70296
|
+
* validation of its own and mints nothing: it forwards the subject token to the
|
|
70297
|
+
* same `exchangeBootstrapCredentialForBearerSession` the JSON route uses, so the
|
|
70298
|
+
* credential rules, expiry and session issuance stay in one place. The only work
|
|
70299
|
+
* here is vocabulary — form encoding in, OAuth field names out.
|
|
70300
|
+
*
|
|
70301
|
+
* Same pattern as the vcs.* handlers in ws.ts: the Forge server speaks upstream's
|
|
70302
|
+
* dialect over Forge's own services, rather than the vendored client being patched
|
|
70303
|
+
* to speak Forge's.
|
|
70304
|
+
*/
|
|
70305
|
+
const authOAuthTokenExchangeRouteLayer = add$1("POST", "/oauth/token", require_Schema$1.gen(function* () {
|
|
70306
|
+
const request = yield* require_HttpServer.HttpServerRequest;
|
|
70307
|
+
const serverAuth = yield* ServerAuth;
|
|
70308
|
+
const payload = yield* require_HttpServer.schemaBodyUrlParams(OAuthTokenExchangeInput).pipe(require_Schema$1.mapError((cause) => new AuthError({
|
|
70309
|
+
message: "Invalid token exchange payload.",
|
|
70310
|
+
status: 400,
|
|
70311
|
+
cause
|
|
70312
|
+
})));
|
|
70313
|
+
const refusal = rejectUnsupportedTokenExchange(payload);
|
|
70314
|
+
if (refusal !== null) return yield* new AuthError({
|
|
70315
|
+
message: refusal,
|
|
70316
|
+
status: 400
|
|
70317
|
+
});
|
|
70318
|
+
const session = yield* serverAuth.exchangeBootstrapCredentialForBearerSession(payload.subject_token, deriveAuthClientMetadata({ request }));
|
|
70319
|
+
const now$6 = yield* require_Schema$1.now;
|
|
70320
|
+
const expiresInSeconds = accessTokenExpiresInSeconds(require_Schema$1.toMillis(require_Schema$1.distance(now$6, session.expiresAt)));
|
|
70321
|
+
return require_HttpServer.jsonUnsafe({
|
|
70322
|
+
access_token: session.sessionToken,
|
|
70323
|
+
issued_token_type: OAUTH_ACCESS_TOKEN_TYPE,
|
|
70324
|
+
token_type: "Bearer",
|
|
70325
|
+
expires_in: expiresInSeconds,
|
|
70326
|
+
scope: payload.scope ?? session.role
|
|
70327
|
+
}, { status: 200 });
|
|
70328
|
+
}).pipe(require_Schema$1.catchTag("AuthError", (error) => respondToAuthError(error))));
|
|
70249
70329
|
const authWebSocketTokenRouteLayer = add$1("POST", "/api/auth/ws-token", require_Schema$1.gen(function* () {
|
|
70250
70330
|
const request = yield* require_HttpServer.HttpServerRequest;
|
|
70251
70331
|
const serverAuth = yield* ServerAuth;
|
|
@@ -113693,8 +113773,8 @@ require_Schema$1.effectDiscard(runMigrations());
|
|
|
113693
113773
|
//#endregion
|
|
113694
113774
|
//#region src/persistence/Layers/Sqlite.ts
|
|
113695
113775
|
const defaultSqliteClientLoaders = {
|
|
113696
|
-
bun: () => Promise.resolve().then(() => require("./SqliteClient-
|
|
113697
|
-
node: () => Promise.resolve().then(() => require("./NodeSqliteClient-
|
|
113776
|
+
bun: () => Promise.resolve().then(() => require("./SqliteClient-BpjZWL6O.cjs")),
|
|
113777
|
+
node: () => Promise.resolve().then(() => require("./NodeSqliteClient-CG_mPdVp.cjs"))
|
|
113698
113778
|
};
|
|
113699
113779
|
const makeRuntimeSqliteLayer = require_Schema$1.fn("makeRuntimeSqliteLayer")(function* (config) {
|
|
113700
113780
|
const loader = defaultSqliteClientLoaders[process.versions.bun !== void 0 ? "bun" : "node"];
|
|
@@ -147042,22 +147122,58 @@ function runtimeAuthoritySessionId(input) {
|
|
|
147042
147122
|
if (input.authSessionId) return input.authSessionId;
|
|
147043
147123
|
return input.threadId ? readThreadSessionId(input.threadId) : null;
|
|
147044
147124
|
}
|
|
147125
|
+
/**
|
|
147126
|
+
* Pure mapping from the three preconditions to an outcome.
|
|
147127
|
+
*
|
|
147128
|
+
* Split out so the reason can be tested without an Effect runtime, env vars or
|
|
147129
|
+
* module mocking — the decision is the thing worth pinning, not the plumbing
|
|
147130
|
+
* around it.
|
|
147131
|
+
*/
|
|
147132
|
+
function resolveBrokerTicketOutcome(input) {
|
|
147133
|
+
if (input.identityMode === "legacy") return {
|
|
147134
|
+
kind: "ticket",
|
|
147135
|
+
token: input.legacyGrantToken
|
|
147136
|
+
};
|
|
147137
|
+
if (input.identityMode === "invalid") return {
|
|
147138
|
+
kind: "unavailable",
|
|
147139
|
+
reason: "runtime identity is incomplete or invalid"
|
|
147140
|
+
};
|
|
147141
|
+
if (!input.sessionId) return {
|
|
147142
|
+
kind: "unavailable",
|
|
147143
|
+
reason: "no owner session is bound to this request"
|
|
147144
|
+
};
|
|
147145
|
+
return input.brokerAuthority ? {
|
|
147146
|
+
kind: "ticket",
|
|
147147
|
+
token: input.brokerAuthority
|
|
147148
|
+
} : {
|
|
147149
|
+
kind: "unavailable",
|
|
147150
|
+
reason: "no live broker authority for this session"
|
|
147151
|
+
};
|
|
147152
|
+
}
|
|
147045
147153
|
function runtimeProviderBrokerToken(input) {
|
|
147046
147154
|
const identity = classifyRuntimeBrokerIdentity({
|
|
147047
147155
|
machineId: configuredRuntimeMachineId() ?? void 0,
|
|
147048
147156
|
credentialEpoch: configuredRuntimeCredentialEpoch(),
|
|
147049
147157
|
brokerAuthorityMode: process.env.FORGE_CMMD_RUNTIME_BROKER_AUTHORITY_MODE
|
|
147050
147158
|
});
|
|
147051
|
-
if (identity.mode
|
|
147052
|
-
|
|
147159
|
+
if (identity.mode !== "exact") return resolveBrokerTicketOutcome({
|
|
147160
|
+
identityMode: identity.mode,
|
|
147161
|
+
legacyGrantToken: identity.mode === "legacy" ? require_runtimeControlAuthority.runtimeGrantToken() : null,
|
|
147162
|
+
sessionId: null,
|
|
147163
|
+
brokerAuthority: null
|
|
147164
|
+
});
|
|
147053
147165
|
const sessionId = runtimeAuthoritySessionId(input);
|
|
147054
|
-
|
|
147055
|
-
|
|
147166
|
+
return resolveBrokerTicketOutcome({
|
|
147167
|
+
identityMode: "exact",
|
|
147168
|
+
legacyGrantToken: null,
|
|
147056
147169
|
sessionId,
|
|
147057
|
-
|
|
147058
|
-
|
|
147059
|
-
|
|
147060
|
-
|
|
147170
|
+
brokerAuthority: sessionId ? readRuntimeBrokerAuthority({
|
|
147171
|
+
sessionId,
|
|
147172
|
+
runtimeId: process.env.FORGE_CMMD_RUNTIME_ID,
|
|
147173
|
+
machineId: identity.machineId,
|
|
147174
|
+
credentialEpoch: identity.credentialEpoch,
|
|
147175
|
+
requiredScope: "provider"
|
|
147176
|
+
}) : null
|
|
147061
147177
|
});
|
|
147062
147178
|
}
|
|
147063
147179
|
async function fetchRuntimeProviderGrant(input) {
|
|
@@ -147102,8 +147218,9 @@ const issueProviderEgressCredential = (input) => require_Schema$1.tryPromise({
|
|
|
147102
147218
|
async function issueCmmdRuntimeProviderEgressCredential(input) {
|
|
147103
147219
|
const controlPlaneUrl = process.env.FORGE_COMMAND_APP_URL.replace(/\/+$/, "");
|
|
147104
147220
|
const runtimeId = encodeURIComponent(process.env.FORGE_CMMD_RUNTIME_ID);
|
|
147105
|
-
const
|
|
147106
|
-
if (
|
|
147221
|
+
const brokerTicket = runtimeProviderBrokerToken(input);
|
|
147222
|
+
if (brokerTicket.kind === "unavailable") throw new Error(`Provider token issuance requires a live exact-machine broker authority for this runtime epoch (${brokerTicket.reason}).`);
|
|
147223
|
+
const runtimeGrantToken = brokerTicket.token;
|
|
147107
147224
|
const response = await fetchRuntimeProviderGrant({
|
|
147108
147225
|
url: `${controlPlaneUrl}/api/forge/runtimes/${runtimeId}/provider/token`,
|
|
147109
147226
|
token: runtimeGrantToken,
|
|
@@ -205351,6 +205468,48 @@ function applyPluginSkillPermissionsToDynamicTools(tools, settings) {
|
|
|
205351
205468
|
});
|
|
205352
205469
|
}
|
|
205353
205470
|
//#endregion
|
|
205471
|
+
//#region src/github/forgeGitHubToolHandler.ts
|
|
205472
|
+
/**
|
|
205473
|
+
* Shared wiring for Forge's brokered GitHub tools.
|
|
205474
|
+
*
|
|
205475
|
+
* Both provider surfaces run the same handler: Codex exposes the tools
|
|
205476
|
+
* natively, Claude reaches them over in-process MCP (`GitHubMcpServer.ts`).
|
|
205477
|
+
* The auth binding, the write confirmation gate and the audit trail live here
|
|
205478
|
+
* so a new surface cannot accidentally omit one — the handler's own defaults
|
|
205479
|
+
* are deliberately inert (no audit, never confirmed), which is safe for tests
|
|
205480
|
+
* but wrong for a real turn.
|
|
205481
|
+
*/
|
|
205482
|
+
function createForgeGitHubToolHandlerOptions(deps) {
|
|
205483
|
+
const { runWithRuntimeContext } = deps;
|
|
205484
|
+
return {
|
|
205485
|
+
broker: new GitHubBroker({
|
|
205486
|
+
resolveJwt: (auth) => runWithRuntimeContext(resolveCmmdJwtForSession({
|
|
205487
|
+
sessionId: auth.sessionId,
|
|
205488
|
+
logPrefix: deps.logPrefix,
|
|
205489
|
+
...auth.subject !== void 0 ? { subject: auth.subject } : {},
|
|
205490
|
+
...auth.forceRefresh !== void 0 ? { forceRefresh: auth.forceRefresh } : {}
|
|
205491
|
+
})),
|
|
205492
|
+
githubWriteIdentity: deps.githubWriteIdentity
|
|
205493
|
+
}),
|
|
205494
|
+
resolveAuth: async (threadId) => {
|
|
205495
|
+
const binding = await runWithRuntimeContext(readThreadAuthSession(threadId));
|
|
205496
|
+
return binding ? {
|
|
205497
|
+
sessionId: binding.sessionId,
|
|
205498
|
+
...binding.subject ? { subject: binding.subject } : {}
|
|
205499
|
+
} : null;
|
|
205500
|
+
},
|
|
205501
|
+
recordAudit: (auditEvent) => runWithRuntimeContext(recordGitHubToolAuditEvent(auditEvent).pipe(require_Schema$1.asVoid)),
|
|
205502
|
+
createConfirmation: (confirmation) => runWithRuntimeContext(createGitHubToolConfirmation(confirmation)),
|
|
205503
|
+
isConfirmed: (confirmation) => runWithRuntimeContext(consumeApprovedOrLatestGitHubToolConfirmation({
|
|
205504
|
+
confirmationId: confirmation.confirmationId,
|
|
205505
|
+
threadId: confirmation.threadId,
|
|
205506
|
+
toolName: confirmation.toolName,
|
|
205507
|
+
request: confirmation.request
|
|
205508
|
+
})),
|
|
205509
|
+
bypassWriteConfirmation: deps.bypassWriteConfirmation
|
|
205510
|
+
};
|
|
205511
|
+
}
|
|
205512
|
+
//#endregion
|
|
205354
205513
|
//#region src/provider/shellSafety.ts
|
|
205355
205514
|
const SHELL_SAFE_COMMAND_PATH_PATTERN = /^[A-Za-z0-9_.\-/\\:]+$/;
|
|
205356
205515
|
function isShellSafeCommandPath(command) {
|
|
@@ -206641,33 +206800,12 @@ const makeCodexAdapter = require_Schema$1.fn("makeCodexAdapter")(function* (opti
|
|
|
206641
206800
|
}));
|
|
206642
206801
|
const browserToolEnvironmentId = yield* resolveBrowserToolEnvironmentId$1();
|
|
206643
206802
|
const computerManager = resolveComputerManager(serverConfig);
|
|
206644
|
-
const githubDynamicToolHandler = createCodexGitHubDynamicToolHandler({
|
|
206645
|
-
|
|
206646
|
-
|
|
206647
|
-
|
|
206648
|
-
logPrefix: "codex-github",
|
|
206649
|
-
...auth.subject !== void 0 ? { subject: auth.subject } : {},
|
|
206650
|
-
...auth.forceRefresh !== void 0 ? { forceRefresh: auth.forceRefresh } : {}
|
|
206651
|
-
})),
|
|
206652
|
-
githubWriteIdentity: settings.githubWriteIdentity
|
|
206653
|
-
}),
|
|
206654
|
-
resolveAuth: async (threadId) => {
|
|
206655
|
-
const binding = await runWithRuntimeContext(readThreadAuthSession(threadId));
|
|
206656
|
-
return binding ? {
|
|
206657
|
-
sessionId: binding.sessionId,
|
|
206658
|
-
...binding.subject ? { subject: binding.subject } : {}
|
|
206659
|
-
} : null;
|
|
206660
|
-
},
|
|
206661
|
-
recordAudit: (auditEvent) => runWithRuntimeContext(recordGitHubToolAuditEvent(auditEvent).pipe(require_Schema$1.asVoid)),
|
|
206662
|
-
createConfirmation: (confirmation) => runWithRuntimeContext(createGitHubToolConfirmation(confirmation)),
|
|
206663
|
-
isConfirmed: (confirmation) => runWithRuntimeContext(consumeApprovedOrLatestGitHubToolConfirmation({
|
|
206664
|
-
confirmationId: confirmation.confirmationId,
|
|
206665
|
-
threadId: confirmation.threadId,
|
|
206666
|
-
toolName: confirmation.toolName,
|
|
206667
|
-
request: confirmation.request
|
|
206668
|
-
})),
|
|
206803
|
+
const githubDynamicToolHandler = createCodexGitHubDynamicToolHandler(createForgeGitHubToolHandlerOptions({
|
|
206804
|
+
runWithRuntimeContext,
|
|
206805
|
+
githubWriteIdentity: settings.githubWriteIdentity,
|
|
206806
|
+
logPrefix: "codex-github",
|
|
206669
206807
|
bypassWriteConfirmation: input.runtimeMode === "full-access"
|
|
206670
|
-
});
|
|
206808
|
+
}));
|
|
206671
206809
|
const cmmdConnectorDynamicToolHandler = createCodexCmmdConnectorDynamicToolHandler({ resolveAuth: async (threadId) => {
|
|
206672
206810
|
const binding = await runWithRuntimeContext(readThreadAuthSession(threadId));
|
|
206673
206811
|
if (!binding) return null;
|
|
@@ -208214,6 +208352,62 @@ function createDevServerMcpServer(deps, threadId) {
|
|
|
208214
208352
|
});
|
|
208215
208353
|
}
|
|
208216
208354
|
//#endregion
|
|
208355
|
+
//#region src/github/GitHubMcpServer.ts
|
|
208356
|
+
/**
|
|
208357
|
+
* Brokered Forge GitHub tools, exposed to the Claude surface (in-process MCP).
|
|
208358
|
+
*
|
|
208359
|
+
* The Codex app-server consumes these tools as native dynamic tools; Claude
|
|
208360
|
+
* reaches them through MCP instead. Both surfaces dispatch the SAME handler
|
|
208361
|
+
* (`createCodexGitHubDynamicToolHandler`), so auth resolution, the write
|
|
208362
|
+
* confirmation gate and the audit trail are shared rather than reimplemented
|
|
208363
|
+
* per provider — this module only adapts descriptor + result shapes.
|
|
208364
|
+
*
|
|
208365
|
+
* Without it a Claude agent has no brokered push path at all and falls back to
|
|
208366
|
+
* raw `git`, which the runtime deliberately blocks via `GIT_ASKPASS=/bin/false`.
|
|
208367
|
+
*
|
|
208368
|
+
* Result envelopes are relayed verbatim as tool content: the web approval card
|
|
208369
|
+
* is built by scanning tool results for `userActionRequired`, so summarising or
|
|
208370
|
+
* reshaping the payload here would silently strip the user's ability to approve
|
|
208371
|
+
* a write.
|
|
208372
|
+
*/
|
|
208373
|
+
const GITHUB_MCP_SERVER_NAME = "forge-github";
|
|
208374
|
+
/** Joins the brokered result's content items back into a single text payload. */
|
|
208375
|
+
function readResultText(contentItems) {
|
|
208376
|
+
return contentItems.map((item) => item.text).filter((text) => typeof text === "string").join("\n");
|
|
208377
|
+
}
|
|
208378
|
+
/**
|
|
208379
|
+
* Factored out of `createGitHubMcpServer` (mirroring the Sidekick tools server)
|
|
208380
|
+
* so dispatch and envelope handling are testable without the SDK's `tool()` /
|
|
208381
|
+
* `createSdkMcpServer` machinery.
|
|
208382
|
+
*/
|
|
208383
|
+
function buildGitHubToolHandlers(runBrokeredTool, threadId) {
|
|
208384
|
+
return createCodexGitHubDynamicTools().map((descriptor) => ({
|
|
208385
|
+
name: descriptor.name,
|
|
208386
|
+
description: descriptor.description,
|
|
208387
|
+
inputSchema: jsonSchemaToZodShape(descriptor.inputSchema),
|
|
208388
|
+
handler: async (args) => {
|
|
208389
|
+
const result = await runBrokeredTool({
|
|
208390
|
+
threadId,
|
|
208391
|
+
tool: descriptor.name,
|
|
208392
|
+
arguments: args
|
|
208393
|
+
});
|
|
208394
|
+
return {
|
|
208395
|
+
content: [{
|
|
208396
|
+
type: "text",
|
|
208397
|
+
text: readResultText(result.contentItems)
|
|
208398
|
+
}],
|
|
208399
|
+
...result.success ? {} : { isError: true }
|
|
208400
|
+
};
|
|
208401
|
+
}
|
|
208402
|
+
}));
|
|
208403
|
+
}
|
|
208404
|
+
function createGitHubMcpServer(runBrokeredTool, threadId) {
|
|
208405
|
+
return z1e({
|
|
208406
|
+
name: GITHUB_MCP_SERVER_NAME,
|
|
208407
|
+
tools: buildGitHubToolHandlers(runBrokeredTool, threadId).map((entry) => U1e(entry.name, entry.description, entry.inputSchema, entry.handler))
|
|
208408
|
+
});
|
|
208409
|
+
}
|
|
208410
|
+
//#endregion
|
|
208217
208411
|
//#region src/provider/providerAuthFailureCopy.ts
|
|
208218
208412
|
/**
|
|
208219
208413
|
* Rewrite provider auth failures into an action the user can actually take.
|
|
@@ -208518,6 +208712,7 @@ function buildClaudeMcpServers(input) {
|
|
|
208518
208712
|
"forge-browser": createBrowserMcpServer(input.browserManager, input.threadId, browserToolScope(input.browserToolEnvironmentId)),
|
|
208519
208713
|
"forge-dev-server": createDevServerMcpServer(input.devServerToolDeps, input.threadId),
|
|
208520
208714
|
"cmmd-context": createCmmdContextMcpServer(input.threadId, input.resolveCmmdPat),
|
|
208715
|
+
[GITHUB_MCP_SERVER_NAME]: createGitHubMcpServer(input.runBrokeredGitHubTool, input.threadId),
|
|
208521
208716
|
...input.computerManager ? { [COMPUTER_MCP_SERVER_NAME]: createComputerMcpServer(input.computerManager, input.threadId) } : {},
|
|
208522
208717
|
...input.cmmdSidekickTools ? { "cmmd-sidekick-tools": createCmmdSidekickToolsMcpServer(input.cmmdSidekickTools.session, input.cmmdSidekickTools.tools) } : {}
|
|
208523
208718
|
};
|
|
@@ -210528,6 +210723,12 @@ const makeClaudeAdapter = require_Schema$1.fn("makeClaudeAdapter")(function* (op
|
|
|
210528
210723
|
const permissionMode = permissionModeForRuntimeMode(input.runtimeMode);
|
|
210529
210724
|
const settings = claudeQuerySettings(modelConfig.thinking, modelConfig.fastMode);
|
|
210530
210725
|
const systemPrompt = buildClaudeSystemPrompt(modelConfig.endpointProfile, serverSettings.coauthorIncludeForge);
|
|
210726
|
+
const runBrokeredGitHubTool = createCodexGitHubDynamicToolHandler(createForgeGitHubToolHandlerOptions({
|
|
210727
|
+
runWithRuntimeContext: runWithSqlRuntimeContext,
|
|
210728
|
+
githubWriteIdentity: serverSettings.githubWriteIdentity,
|
|
210729
|
+
logPrefix: "claude-github",
|
|
210730
|
+
bypassWriteConfirmation: input.runtimeMode === "full-access"
|
|
210731
|
+
}));
|
|
210531
210732
|
const queryRuntime = yield* createClaudeQueryRuntime(prompt, buildClaudeQueryOptions({
|
|
210532
210733
|
cwd: input.cwd,
|
|
210533
210734
|
effectiveApiModelId: modelConfig.effectiveApiModelId,
|
|
@@ -210547,7 +210748,8 @@ const makeClaudeAdapter = require_Schema$1.fn("makeClaudeAdapter")(function* (op
|
|
|
210547
210748
|
computerManager,
|
|
210548
210749
|
resolveCmmdPat,
|
|
210549
210750
|
devServerToolDeps,
|
|
210550
|
-
cmmdSidekickTools
|
|
210751
|
+
cmmdSidekickTools,
|
|
210752
|
+
runBrokeredGitHubTool
|
|
210551
210753
|
}), threadId);
|
|
210552
210754
|
const session = buildClaudeProviderSession({
|
|
210553
210755
|
threadId,
|
|
@@ -283548,7 +283750,9 @@ const make$8 = require_Schema$1.gen(function* () {
|
|
|
283548
283750
|
projects: readModel.projects
|
|
283549
283751
|
});
|
|
283550
283752
|
if (!cwd) return "Forge could not resolve the project folder for this thread.";
|
|
283551
|
-
|
|
283753
|
+
const isCloudExecutionRuntime = serverConfig.forgeCmmdRuntimeMode === true;
|
|
283754
|
+
const managedRoots = [serverConfig.cloudProjectsRoot, serverConfig.worktreesDir];
|
|
283755
|
+
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(", ")}.`;
|
|
283552
283756
|
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.";
|
|
283553
283757
|
return null;
|
|
283554
283758
|
});
|
|
@@ -288950,6 +289154,7 @@ function executionEnvironmentCapabilities(serverConfig) {
|
|
|
288950
289154
|
repositoryIdentity: true,
|
|
288951
289155
|
pullRequests: isExecutionPlane,
|
|
288952
289156
|
threadPullRequestLinking: isExecutionPlane,
|
|
289157
|
+
threadSettlement: isExecutionPlane,
|
|
288953
289158
|
cloudMode: serverConfig.forgeCmmdRuntimeMode === true || isCloudShell,
|
|
288954
289159
|
runtime: {
|
|
288955
289160
|
topology: runtimeTopology(serverConfig),
|
|
@@ -310903,16 +311108,16 @@ const gitUrlCloneRouteLayer = add$1("POST", "/api/cloud/git/clone-url", require_
|
|
|
310903
311108
|
//#endregion
|
|
310904
311109
|
//#region src/server.ts
|
|
310905
311110
|
const PtyAdapterLive = require_Schema$1.unwrap(require_Schema$1.gen(function* () {
|
|
310906
|
-
if (typeof Bun !== "undefined") return (yield* require_Schema$1.promise(() => Promise.resolve().then(() => require("./BunPTY-
|
|
310907
|
-
else return (yield* require_Schema$1.promise(() => Promise.resolve().then(() => require("./NodePTY-
|
|
311111
|
+
if (typeof Bun !== "undefined") return (yield* require_Schema$1.promise(() => Promise.resolve().then(() => require("./BunPTY-BjHFZATJ.cjs")))).layer;
|
|
311112
|
+
else return (yield* require_Schema$1.promise(() => Promise.resolve().then(() => require("./NodePTY-Bd9mvI6U.cjs")))).layer;
|
|
310908
311113
|
}));
|
|
310909
311114
|
const HttpServerLive = require_Schema$1.unwrap(require_Schema$1.gen(function* () {
|
|
310910
311115
|
const config = yield* ServerConfig;
|
|
310911
|
-
if (typeof Bun !== "undefined") return (yield* require_Schema$1.promise(() => Promise.resolve().then(() => require("./BunHttpServer-
|
|
311116
|
+
if (typeof Bun !== "undefined") return (yield* require_Schema$1.promise(() => Promise.resolve().then(() => require("./BunHttpServer-Dxx0kzQc.cjs")))).layer({
|
|
310912
311117
|
port: config.port,
|
|
310913
311118
|
...config.host ? { hostname: config.host } : {}
|
|
310914
311119
|
});
|
|
310915
|
-
const [NodeHttpServer, NodeHttp] = yield* require_Schema$1.all([require_Schema$1.promise(() => Promise.resolve().then(() => require("./NodeHttpServer-
|
|
311120
|
+
const [NodeHttpServer, NodeHttp] = yield* require_Schema$1.all([require_Schema$1.promise(() => Promise.resolve().then(() => require("./NodeHttpServer-D6YVHsL8.cjs"))), require_Schema$1.promise(() => import("node:http"))]);
|
|
310916
311121
|
return NodeHttpServer.layer(NodeHttp.createServer, {
|
|
310917
311122
|
host: config.host,
|
|
310918
311123
|
port: config.port
|
|
@@ -310920,10 +311125,10 @@ const HttpServerLive = require_Schema$1.unwrap(require_Schema$1.gen(function* ()
|
|
|
310920
311125
|
}));
|
|
310921
311126
|
const PlatformServicesLive = require_Schema$1.unwrap(require_Schema$1.gen(function* () {
|
|
310922
311127
|
if (typeof Bun !== "undefined") {
|
|
310923
|
-
const { layer } = yield* require_Schema$1.promise(() => Promise.resolve().then(() => require("./BunServices-
|
|
311128
|
+
const { layer } = yield* require_Schema$1.promise(() => Promise.resolve().then(() => require("./BunServices-U1VBnEJS.cjs")));
|
|
310924
311129
|
return layer;
|
|
310925
311130
|
} else {
|
|
310926
|
-
const { layer } = yield* require_Schema$1.promise(() => Promise.resolve().then(() => require("./NodeServices-
|
|
311131
|
+
const { layer } = yield* require_Schema$1.promise(() => Promise.resolve().then(() => require("./NodeServices-BcQL_53W.cjs")));
|
|
310927
311132
|
return layer;
|
|
310928
311133
|
}
|
|
310929
311134
|
}));
|
|
@@ -310991,7 +311196,7 @@ const MiscRuntimeLayerLive = require_Schema$1.mergeAll(AnalyticsServiceLayerLive
|
|
|
310991
311196
|
const RuntimeDependenciesWithoutPullRequestsLive = ReactorLayerLive.pipe(require_Schema$1.provideMerge(CheckpointingLayerLive), require_Schema$1.provideMerge(GitLayerLive), require_Schema$1.provideMerge(OrchestrationLayerLive), require_Schema$1.provideMerge(ProviderLayerLive), require_Schema$1.provideMerge(TerminalLayerLive), require_Schema$1.provideMerge(AgentBrowserManagerLive), require_Schema$1.provideMerge(require_Schema$1.mergeAll(ThreadDevRuntimeLive, DevTunnelLive.pipe(require_Schema$1.provide$1(ThreadDevRuntimeLive)))), require_Schema$1.provideMerge(PersistenceLayerLive), require_Schema$1.provideMerge(KeybindingsLive), require_Schema$1.provideMerge(ProviderRegistryLive), require_Schema$1.provideMerge(require_Schema$1.mergeAll(ServerSettingsLive, UsageServiceLive.pipe(require_Schema$1.provide$1(ServerSettingsLive)))), require_Schema$1.provideMerge(WorkspaceLayerLive), require_Schema$1.provideMerge(WorkspaceReadinessStateLive), require_Schema$1.provideMerge(ProjectFaviconResolverLive), require_Schema$1.provideMerge(RepositoryIdentityResolverLive), require_Schema$1.provideMerge(ServerEnvironmentLive), require_Schema$1.provideMerge(AuthLayerLive), require_Schema$1.provideMerge(ServerSecretStoreLayerLive), require_Schema$1.provideMerge(require_Schema$1.mergeAll(CloudRedisCoordinationLive, CloudStateSyncLive.pipe(require_Schema$1.provide$1(PersistenceLayerLive)))), require_Schema$1.provideMerge(MiscRuntimeLayerLive));
|
|
310992
311197
|
const RuntimeDependenciesLive = pullRequestServiceFactoryLayer.pipe(require_Schema$1.provideMerge(RuntimeDependenciesWithoutPullRequestsLive), require_Schema$1.provideMerge(cmmdProjectIdentityResolverLive.pipe(require_Schema$1.provide$1(RuntimeDependenciesWithoutPullRequestsLive))), require_Schema$1.provideMerge(pullRequestProviderRuntimeLive));
|
|
310993
311198
|
const RuntimeServicesLive = ServerRuntimeStartupLive.pipe(require_Schema$1.provideMerge(RuntimeDependenciesLive));
|
|
310994
|
-
const makeRoutesLayer = require_Schema$1.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(require_Schema$1.provide$1(browserApiCorsLayer));
|
|
311199
|
+
const makeRoutesLayer = require_Schema$1.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(require_Schema$1.provide$1(browserApiCorsLayer));
|
|
310995
311200
|
const makeServerLayer = require_Schema$1.unwrap(require_Schema$1.gen(function* () {
|
|
310996
311201
|
const config = yield* ServerConfig;
|
|
310997
311202
|
fixPath();
|