@cmmd-center/forge 0.13.76 → 0.13.78
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/bin.cjs +72 -39
- package/dist/bin.mjs +95 -62
- package/dist/client/assets/{DiffPanel-CS3rgBQX.js → DiffPanel-C80lhyXx.js} +3 -3
- package/dist/client/assets/{DiffPanel.logic-CcZFjEl6.js → DiffPanel.logic-BQw9ohrt.js} +2 -2
- package/dist/client/assets/DiffPanelShell-wMcTKDB5.js +2537 -0
- package/dist/client/assets/{DiffWorkerPoolProvider-DECyVeAm.js → DiffWorkerPoolProvider-CkMMmFMN.js} +8 -8
- package/dist/client/assets/{PullRequestCodePanel-D2dKktan.js → PullRequestCodePanel-BOpDrshE.js} +3 -3
- package/dist/client/assets/{Virtualizer-DGRd2dku.js → Virtualizer-Bo8cQ1Vc.js} +2 -2
- package/dist/client/assets/index-BLyGGSCl.js +154 -0
- package/dist/client/assets/index-C-3BZaMd.css +1 -0
- package/dist/client/index.html +5 -5
- package/dist/forge-build.json +1 -1
- package/dist/{open-yHTUkd2Y.mjs → open-2-reBrpv.mjs} +3 -3
- package/package.json +1 -1
- package/dist/client/assets/DiffPanelShell-BhFrbxca.js +0 -2534
- package/dist/client/assets/index-DRk0tCYH.js +0 -153
- package/dist/client/assets/index-DVdpYn3H.css +0 -1
package/dist/bin.cjs
CHANGED
|
@@ -66275,7 +66275,7 @@ function normalizeNumberish(value) {
|
|
|
66275
66275
|
}
|
|
66276
66276
|
//#endregion
|
|
66277
66277
|
//#region package.json
|
|
66278
|
-
var version$1 = "0.13.
|
|
66278
|
+
var version$1 = "0.13.78";
|
|
66279
66279
|
//#endregion
|
|
66280
66280
|
//#region src/sentry.ts
|
|
66281
66281
|
const SERVER_APP_NAME = "forge-server";
|
|
@@ -298914,7 +298914,7 @@ function resolveBuildCommitFromEnv(env) {
|
|
|
298914
298914
|
* environment descriptor down instead of reporting an honest "unknown".
|
|
298915
298915
|
*/
|
|
298916
298916
|
function readBakedBuildCommit() {
|
|
298917
|
-
return "
|
|
298917
|
+
return "703f97e0013867e0b5a3ebff1cd0d623fc868c16";
|
|
298918
298918
|
}
|
|
298919
298919
|
async function resolveServerBuildCommit(input) {
|
|
298920
298920
|
if (isFullCommitSha(input.baked)) return input.baked;
|
|
@@ -308981,6 +308981,7 @@ const __cmmdProxyRouteLayersStartIndex = registeredProxyRouteLayers().length;
|
|
|
308981
308981
|
*/
|
|
308982
308982
|
const CMMD_CLOUD_PROJECTS_PATH = "/api/forge/context/cloud-projects";
|
|
308983
308983
|
const CMMD_RUNTIMES_PATH = "/api/forge/context/runtimes";
|
|
308984
|
+
const CMMD_ENVIRONMENTS_PATH = "/api/forge/context/environments";
|
|
308984
308985
|
/**
|
|
308985
308986
|
* Authenticate the browser session and resolve the CMMD JWT to forward
|
|
308986
308987
|
* upstream. `jwt` is null when none could be resolved, which every caller
|
|
@@ -311108,12 +311109,8 @@ registerProxyRoute({
|
|
|
311108
311109
|
});
|
|
311109
311110
|
const FORGE_RUNTIMES_POLL_INTERVAL = require_Schema$1.seconds(5);
|
|
311110
311111
|
const FORGE_RUNTIMES_KEEPALIVE_INTERVAL = require_Schema$1.seconds(25);
|
|
311111
|
-
function
|
|
311112
|
-
return new TextEncoder().encode(`event:
|
|
311113
|
-
projects,
|
|
311114
|
-
environments,
|
|
311115
|
-
capacity
|
|
311116
|
-
})}\n\n`);
|
|
311112
|
+
function encodeForgeCatalogFrame(eventName, payload) {
|
|
311113
|
+
return new TextEncoder().encode(`event: ${eventName}\ndata: ${JSON.stringify(payload)}\n\n`);
|
|
311117
311114
|
}
|
|
311118
311115
|
/**
|
|
311119
311116
|
* Emitted when the upstream CMMD returns HTTP 401 or 403.
|
|
@@ -311124,13 +311121,14 @@ const FORGE_RUNTIMES_AUTH_REQUIRED_FRAME = new TextEncoder().encode("event: auth
|
|
|
311124
311121
|
const FORGE_RUNTIMES_KEEPALIVE_FRAME = new TextEncoder().encode(": ping\n\n");
|
|
311125
311122
|
const FORGE_RUNTIMES_KICKOFF_FRAME = new TextEncoder().encode(": ok\n\n");
|
|
311126
311123
|
/**
|
|
311127
|
-
* Fetches
|
|
311124
|
+
* Fetches an upstream CMMD catalog for one poll tick of a catalog SSE proxy.
|
|
311128
311125
|
*
|
|
311129
311126
|
* Returns:
|
|
311130
|
-
* - `Uint8Array` (
|
|
311127
|
+
* - `Uint8Array` (catalog frame) — successful response
|
|
311131
311128
|
* - `FORGE_RUNTIMES_AUTH_REQUIRED_FRAME` — upstream returned 401 or 403
|
|
311132
|
-
* - `null` — any other non-ok status (5xx,
|
|
311133
|
-
* tick so the client cache is never
|
|
311129
|
+
* - `null` — any other non-ok status (5xx, a body without this proxy's
|
|
311130
|
+
* collections); the caller must skip the tick so the client cache is never
|
|
311131
|
+
* poisoned by an error frame
|
|
311134
311132
|
*
|
|
311135
311133
|
* Network errors also return `null` (skip-tick, never blank the client cache).
|
|
311136
311134
|
*
|
|
@@ -311139,47 +311137,82 @@ const FORGE_RUNTIMES_KICKOFF_FRAME = new TextEncoder().encode(": ok\n\n");
|
|
|
311139
311137
|
* is the designed failure mode. Retrying here would stack a second backoff
|
|
311140
311138
|
* inside the first and delay the frame the client is waiting on.
|
|
311141
311139
|
*/
|
|
311142
|
-
function
|
|
311140
|
+
function makeFetchForgeCatalogFrameEffect(proxy, upstreamUrl, accessToken) {
|
|
311143
311141
|
return require_Schema$1.tryPromise(() => fetch(upstreamUrl, { headers: {
|
|
311144
311142
|
Authorization: `Bearer ${accessToken}`,
|
|
311145
311143
|
Accept: "application/json"
|
|
311146
311144
|
} }).then(async (res) => {
|
|
311147
311145
|
if (res.status === 401 || res.status === 403) {
|
|
311148
|
-
console.warn(`[
|
|
311146
|
+
console.warn(`[${proxy.logTag}] upstream auth failure: ${res.status}`);
|
|
311149
311147
|
return FORGE_RUNTIMES_AUTH_REQUIRED_FRAME;
|
|
311150
311148
|
}
|
|
311151
311149
|
if (!res.ok) {
|
|
311152
311150
|
const errBody = await res.text().catch(() => "");
|
|
311153
|
-
console.warn(`[
|
|
311151
|
+
console.warn(`[${proxy.logTag}] upstream ${res.status}:`, errBody.slice(0, 200));
|
|
311154
311152
|
return null;
|
|
311155
311153
|
}
|
|
311156
311154
|
const json = await res.json();
|
|
311157
311155
|
const unwrapped = json && typeof json === "object" && "data" in json && json["data"] ? json["data"] : json;
|
|
311158
|
-
const
|
|
311159
|
-
|
|
311160
|
-
if (!Array.isArray(projects) || !Array.isArray(environments)) return null;
|
|
311161
|
-
return encodeForgeCloudProjectsFrame(projects, environments, unwrapped?.["capacity"] ?? null);
|
|
311156
|
+
const payload = unwrapped ? proxy.extractPayload(unwrapped) : null;
|
|
311157
|
+
return payload === null ? null : encodeForgeCatalogFrame(proxy.eventName, payload);
|
|
311162
311158
|
})).pipe(require_Schema$1.catch_(() => require_Schema$1.succeed(null)));
|
|
311163
311159
|
}
|
|
311164
|
-
|
|
311165
|
-
|
|
311166
|
-
|
|
311167
|
-
|
|
311168
|
-
|
|
311169
|
-
|
|
311170
|
-
|
|
311171
|
-
|
|
311172
|
-
|
|
311173
|
-
|
|
311174
|
-
|
|
311175
|
-
|
|
311176
|
-
|
|
311177
|
-
|
|
311178
|
-
|
|
311179
|
-
|
|
311180
|
-
|
|
311181
|
-
|
|
311182
|
-
|
|
311160
|
+
/**
|
|
311161
|
+
* The poll-and-emit SSE handler shared by every CMMD catalog proxy: emits a
|
|
311162
|
+
* kickoff comment, an immediate snapshot, a frame per 5 s poll tick, and a
|
|
311163
|
+
* keepalive comment every ~25 s, until the client disconnects (Effect stream
|
|
311164
|
+
* interruption; `Stream.ensuring` logs the shutdown observably).
|
|
311165
|
+
*/
|
|
311166
|
+
function makeForgeCatalogEventsHandler(proxy, upstreamUrl) {
|
|
311167
|
+
return require_Schema$1.gen(function* () {
|
|
311168
|
+
const { session, jwt: accessToken } = yield* makeCmmdProxyAccessTokenEffect(proxy.logTag);
|
|
311169
|
+
if (!accessToken) return yield* respondCmmdConnectionRequired(session.sessionId);
|
|
311170
|
+
const fetchFrame = makeFetchForgeCatalogFrameEffect(proxy, upstreamUrl, accessToken);
|
|
311171
|
+
const dataStream = require_Path.concat(require_Path.fromEffect(fetchFrame), require_Path.tick(FORGE_RUNTIMES_POLL_INTERVAL).pipe(require_Path.mapEffect(() => fetchFrame))).pipe(require_Path.filter((frame) => frame !== null));
|
|
311172
|
+
const keepaliveStream = require_Path.tick(FORGE_RUNTIMES_KEEPALIVE_INTERVAL).pipe(require_Path.map(() => FORGE_RUNTIMES_KEEPALIVE_FRAME));
|
|
311173
|
+
const frames = require_Path.concat(require_Path.succeed(FORGE_RUNTIMES_KICKOFF_FRAME), require_Path.merge(dataStream, keepaliveStream)).pipe(require_Path.ensuring(require_Schema$1.sync(() => {
|
|
311174
|
+
console.debug(`[${proxy.logTag}] SSE stream finalizer: connection closed or fiber interrupted`);
|
|
311175
|
+
})));
|
|
311176
|
+
return require_HttpServer.stream(frames, {
|
|
311177
|
+
status: 200,
|
|
311178
|
+
headers: {
|
|
311179
|
+
"content-type": "text/event-stream",
|
|
311180
|
+
"cache-control": "no-cache",
|
|
311181
|
+
connection: "keep-alive",
|
|
311182
|
+
"x-accel-buffering": "no"
|
|
311183
|
+
}
|
|
311184
|
+
});
|
|
311185
|
+
}).pipe(require_Schema$1.catchTag("AuthError", (error) => respondToAuthError(error)));
|
|
311186
|
+
}
|
|
311187
|
+
const cmmdForgeCloudProjectsEventsRouteLayer = add$1("GET", "/api/cmmd/forge-cloud-projects/events", makeForgeCatalogEventsHandler({
|
|
311188
|
+
logTag: "forge-cloud-projects/events",
|
|
311189
|
+
eventName: "cloud-projects",
|
|
311190
|
+
extractPayload: (unwrapped) => {
|
|
311191
|
+
const projects = unwrapped["projects"];
|
|
311192
|
+
const environments = unwrapped["environments"];
|
|
311193
|
+
if (!Array.isArray(projects) || !Array.isArray(environments)) return null;
|
|
311194
|
+
return {
|
|
311195
|
+
projects,
|
|
311196
|
+
environments,
|
|
311197
|
+
capacity: unwrapped["capacity"] ?? null
|
|
311198
|
+
};
|
|
311199
|
+
}
|
|
311200
|
+
}, `${resolveCommandAppUrl()}${CMMD_CLOUD_PROJECTS_PATH}`));
|
|
311201
|
+
registerProxyRoute({
|
|
311202
|
+
forgePath: "/api/cmmd/environments",
|
|
311203
|
+
method: "GET",
|
|
311204
|
+
cmmdPath: CMMD_ENVIRONMENTS_PATH,
|
|
311205
|
+
orgIdSource: "none",
|
|
311206
|
+
responseShape: "unwrapData"
|
|
311207
|
+
});
|
|
311208
|
+
const cmmdForgeEnvironmentsEventsRouteLayer = add$1("GET", "/api/cmmd/environments/events", makeForgeCatalogEventsHandler({
|
|
311209
|
+
logTag: "forge-environments/events",
|
|
311210
|
+
eventName: "environments",
|
|
311211
|
+
extractPayload: (unwrapped) => {
|
|
311212
|
+
const environments = unwrapped["environments"];
|
|
311213
|
+
return Array.isArray(environments) ? { environments } : null;
|
|
311214
|
+
}
|
|
311215
|
+
}, `${resolveCommandAppUrl()}${CMMD_ENVIRONMENTS_PATH}`));
|
|
311183
311216
|
function splitCmmdRuntimeOrganizationScope(raw) {
|
|
311184
311217
|
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
311185
311218
|
const body = { ...raw };
|
|
@@ -322704,7 +322737,7 @@ const MiscRuntimeLayerLive = require_Schema$1.mergeAll(AnalyticsServiceLayerLive
|
|
|
322704
322737
|
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.provide$1(UsageSessionLookupLive), require_Schema$1.provide$1(UsageRecordedSourceLive.pipe(require_Schema$1.provide$1(OrchestrationLayerLive), require_Schema$1.provide$1(RuntimeReplicationOutboxLive), require_Schema$1.provide$1(ProviderSessionRuntimeRepositoryLive), require_Schema$1.provide$1(TextGenerationSessionRepositoryLive)))))), 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));
|
|
322705
322738
|
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));
|
|
322706
322739
|
const RuntimeServicesLive = ServerRuntimeStartupLive.pipe(require_Schema$1.provideMerge(RuntimeDependenciesLive));
|
|
322707
|
-
const makeRoutesLayer = require_Schema$1.mergeAll(attachmentUploadRouteLayer, authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authOAuthTokenExchangeRouteLayer, authWebSocketTicketRouteLayer, authCmmdOAuthDeviceRouteLayer, authCmmdOAuthTokenRouteLayer, authCmmdPasswordTokenRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authLogoutRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRenewRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer, authWebLoginRouteLayer, authWebCallbackRouteLayer, cloudOwnerSessionRedeemRouteLayer, cloudOwnerSessionRevokeRouteLayer, desktopLocalWebBridgePublishRouteLayer, desktopLocalWebBridgeBootstrapRouteLayer, desktopRelayControlPlaneRouteLayer, apiDocsHtmlRouteLayer, apiDocsOpenApiRouteLayer, pulseSignalStateListRouteLayer, pulseSignalStateUpsertRouteLayer, cmmdProfileRouteLayer, ...cmmdProxyRouteLayers, cmmdWorkIntakeRouteLayer, cmmdWsTokenRouteLayer, cmmdGetProjectCommentsRouteLayer, cmmdAddProjectCommentRouteLayer, cmmdUpdateProjectRouteLayer, cmmdUploadTaskAttachmentRouteLayer, cmmdUpdateTaskCommentRouteLayer, cmmdListWorkspaceMembersRouteLayer, cmmdAddProjectMemberRouteLayer, cmmdUpdateProjectAgentMemberAvatarRouteLayer, runtimeReplicationStatusRouteLayer, cmmdRefreshProviderUsageRouteLayer, cmmdForgeCloudProjectsListRouteLayer, cmmdForgeCloudProjectsEventsRouteLayer, cmmdForgeRuntimesEnsureRouteLayer, cmmdForgeRuntimesConnectRouteLayer, ownerRuntimeCodexReadinessRouteLayer, cmmdForgeRuntimesStatusRouteLayer, cmmdForgeRuntimesStartRouteLayer, cmmdForgeRuntimesStopRouteLayer, cmmdForgeRuntimesRecycleRouteLayer, cmmdForgeRuntimesUpdateCommitRouteLayer, cmmdForgeRuntimesDestroyRouteLayer, mobileProviderCatalogRouteLayer, attachmentsRouteLayer, orchestrationDispatchRouteLayer, orchestrationCmmdWorkRunEventRouteLayer, orchestrationAutomationStartThreadRouteLayer, orchestrationAutomationRebindRouteLayer, orchestrationAutomationTerminalReconcileRouteLayer, mobileGitRunStackedActionRouteLayer, pullRequestDiffRouteLayer, orchestrationSnapshotRouteLayer, orchestrationThreadSnapshotRouteLayer, 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, runtimeFilesystemHealthRouteLayer, claudeNativeGenerationProofRouteLayer, claudeUsageRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(require_Schema$1.provide$1(browserApiCorsLayer));
|
|
322740
|
+
const makeRoutesLayer = require_Schema$1.mergeAll(attachmentUploadRouteLayer, authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authOAuthTokenExchangeRouteLayer, authWebSocketTicketRouteLayer, authCmmdOAuthDeviceRouteLayer, authCmmdOAuthTokenRouteLayer, authCmmdPasswordTokenRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authLogoutRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRenewRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer, authWebLoginRouteLayer, authWebCallbackRouteLayer, cloudOwnerSessionRedeemRouteLayer, cloudOwnerSessionRevokeRouteLayer, desktopLocalWebBridgePublishRouteLayer, desktopLocalWebBridgeBootstrapRouteLayer, desktopRelayControlPlaneRouteLayer, apiDocsHtmlRouteLayer, apiDocsOpenApiRouteLayer, pulseSignalStateListRouteLayer, pulseSignalStateUpsertRouteLayer, cmmdProfileRouteLayer, ...cmmdProxyRouteLayers, cmmdWorkIntakeRouteLayer, cmmdWsTokenRouteLayer, cmmdGetProjectCommentsRouteLayer, cmmdAddProjectCommentRouteLayer, cmmdUpdateProjectRouteLayer, cmmdUploadTaskAttachmentRouteLayer, cmmdUpdateTaskCommentRouteLayer, cmmdListWorkspaceMembersRouteLayer, cmmdAddProjectMemberRouteLayer, cmmdUpdateProjectAgentMemberAvatarRouteLayer, runtimeReplicationStatusRouteLayer, cmmdRefreshProviderUsageRouteLayer, cmmdForgeCloudProjectsListRouteLayer, cmmdForgeCloudProjectsEventsRouteLayer, cmmdForgeEnvironmentsEventsRouteLayer, cmmdForgeRuntimesEnsureRouteLayer, cmmdForgeRuntimesConnectRouteLayer, ownerRuntimeCodexReadinessRouteLayer, cmmdForgeRuntimesStatusRouteLayer, cmmdForgeRuntimesStartRouteLayer, cmmdForgeRuntimesStopRouteLayer, cmmdForgeRuntimesRecycleRouteLayer, cmmdForgeRuntimesUpdateCommitRouteLayer, cmmdForgeRuntimesDestroyRouteLayer, mobileProviderCatalogRouteLayer, attachmentsRouteLayer, orchestrationDispatchRouteLayer, orchestrationCmmdWorkRunEventRouteLayer, orchestrationAutomationStartThreadRouteLayer, orchestrationAutomationRebindRouteLayer, orchestrationAutomationTerminalReconcileRouteLayer, mobileGitRunStackedActionRouteLayer, pullRequestDiffRouteLayer, orchestrationSnapshotRouteLayer, orchestrationThreadSnapshotRouteLayer, 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, runtimeFilesystemHealthRouteLayer, claudeNativeGenerationProofRouteLayer, claudeUsageRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(require_Schema$1.provide$1(browserApiCorsLayer));
|
|
322708
322741
|
const makeServerLayer = require_Schema$1.unwrap(require_Schema$1.gen(function* () {
|
|
322709
322742
|
const config = yield* ServerConfig;
|
|
322710
322743
|
fixPath({ preferProcessPath: config.forgeCmmdRuntimeMode === true });
|
package/dist/bin.mjs
CHANGED
|
@@ -23,7 +23,7 @@ import { createCipheriv, createDecipheriv, createHash, createHmac, createPublicK
|
|
|
23
23
|
import * as FS$1 from "node:fs";
|
|
24
24
|
import fs, { accessSync, chmodSync, constants, createReadStream, existsSync, mkdirSync, mkdtempSync, promises, readFile, readFileSync, readdir, readdirSync, realpathSync, rmSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
25
25
|
import * as NodeOS from "node:os";
|
|
26
|
-
import
|
|
26
|
+
import $U, { homedir, networkInterfaces, tmpdir } from "node:os";
|
|
27
27
|
import * as Path$1 from "node:path";
|
|
28
28
|
import path, { basename, delimiter, dirname, extname, isAbsolute, join, posix, relative, resolve, sep } from "node:path";
|
|
29
29
|
import { pathToFileURL } from "node:url";
|
|
@@ -50591,7 +50591,7 @@ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
|
|
|
50591
50591
|
const min = forceColor || 0;
|
|
50592
50592
|
if (env.TERM === "dumb") return min;
|
|
50593
50593
|
if (process$1.platform === "win32") {
|
|
50594
|
-
const osRelease =
|
|
50594
|
+
const osRelease = $U.release().split(".");
|
|
50595
50595
|
if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
|
|
50596
50596
|
return 1;
|
|
50597
50597
|
}
|
|
@@ -53034,7 +53034,7 @@ var require_ProcessDetector = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
53034
53034
|
exports.processDetector = void 0;
|
|
53035
53035
|
const api_1 = (init_esm$1(), __toCommonJS(esm_exports$1));
|
|
53036
53036
|
const semconv_1 = require_semconv$1();
|
|
53037
|
-
const os$
|
|
53037
|
+
const os$3 = __require("os");
|
|
53038
53038
|
/**
|
|
53039
53039
|
* ProcessDetector will be used to detect the resources related current process running
|
|
53040
53040
|
* and being instrumented from the NodeJS Process module.
|
|
@@ -53056,7 +53056,7 @@ var require_ProcessDetector = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
53056
53056
|
};
|
|
53057
53057
|
if (process.argv.length > 1) attributes[semconv_1.ATTR_PROCESS_COMMAND] = process.argv[1];
|
|
53058
53058
|
try {
|
|
53059
|
-
const userInfo = os$
|
|
53059
|
+
const userInfo = os$3.userInfo();
|
|
53060
53060
|
attributes[semconv_1.ATTR_PROCESS_OWNER] = userInfo.username;
|
|
53061
53061
|
} catch (e) {
|
|
53062
53062
|
api_1.diag.debug(`error obtaining process owner: ${e}`);
|
|
@@ -65979,7 +65979,7 @@ function normalizeNumberish(value) {
|
|
|
65979
65979
|
}
|
|
65980
65980
|
//#endregion
|
|
65981
65981
|
//#region package.json
|
|
65982
|
-
var version$1 = "0.13.
|
|
65982
|
+
var version$1 = "0.13.78";
|
|
65983
65983
|
//#endregion
|
|
65984
65984
|
//#region src/sentry.ts
|
|
65985
65985
|
const SERVER_APP_NAME = "forge-server";
|
|
@@ -76022,7 +76022,7 @@ var require_node_gyp_build = /* @__PURE__ */ __commonJSMin(((exports, module) =>
|
|
|
76022
76022
|
var fs$6 = __require("fs");
|
|
76023
76023
|
var path$5 = __require("path");
|
|
76024
76024
|
var url$1 = __require("url");
|
|
76025
|
-
var os$
|
|
76025
|
+
var os$2 = __require("os");
|
|
76026
76026
|
var runtimeRequire = typeof __webpack_require__ === "function" ? __non_webpack_require__ : __require;
|
|
76027
76027
|
var vars = process.config && process.config.variables || {};
|
|
76028
76028
|
var prebuildsOnly = !!process.env.PREBUILDS_ONLY;
|
|
@@ -76030,8 +76030,8 @@ var require_node_gyp_build = /* @__PURE__ */ __commonJSMin(((exports, module) =>
|
|
|
76030
76030
|
var abi = versions.modules;
|
|
76031
76031
|
if (versions.deno || process.isBun) abi = "unsupported";
|
|
76032
76032
|
var runtime = isElectron() ? "electron" : isNwjs() ? "node-webkit" : "node";
|
|
76033
|
-
var arch = process.env.npm_config_arch || os$
|
|
76034
|
-
var platform = process.env.npm_config_platform || os$
|
|
76033
|
+
var arch = process.env.npm_config_arch || os$2.arch();
|
|
76034
|
+
var platform = process.env.npm_config_platform || os$2.platform();
|
|
76035
76035
|
var libc = process.env.LIBC || (isMusl(platform) ? "musl" : "glibc");
|
|
76036
76036
|
var armv = process.env.ARM_VERSION || (arch === "arm64" ? "8" : vars.arm_version) || "";
|
|
76037
76037
|
var uv = (versions.uv || "").split(".")[0];
|
|
@@ -93872,7 +93872,7 @@ const launchDetached = (launch) => gen(function* () {
|
|
|
93872
93872
|
});
|
|
93873
93873
|
const OpenLive = effect(Open, gen(function* () {
|
|
93874
93874
|
const open = yield* tryPromise({
|
|
93875
|
-
try: () => import("./open-
|
|
93875
|
+
try: () => import("./open-2-reBrpv.mjs"),
|
|
93876
93876
|
catch: (cause) => new OpenError$1({
|
|
93877
93877
|
message: "failed to load browser opener",
|
|
93878
93878
|
cause
|
|
@@ -191811,7 +191811,7 @@ var Vce = {
|
|
|
191811
191811
|
function Ve() {
|
|
191812
191812
|
return Vce;
|
|
191813
191813
|
}
|
|
191814
|
-
var Us =
|
|
191814
|
+
var Us = $U.homedir(), lk = $U.tmpdir(), { env: Vc } = process$1, Yce = (e) => {
|
|
191815
191815
|
let t = path.join(Us, "Library");
|
|
191816
191816
|
return {
|
|
191817
191817
|
data: path.join(t, "Application Support", e),
|
|
@@ -202011,12 +202011,12 @@ function qZ(e, t) {
|
|
|
202011
202011
|
}
|
|
202012
202012
|
return n;
|
|
202013
202013
|
}
|
|
202014
|
-
var os$
|
|
202014
|
+
var os$1 = "https://code.claude.com/docs/en", kKe = [
|
|
202015
202015
|
{
|
|
202016
202016
|
matches: (e) => e.path === "permissions.defaultMode" && e.code === "invalid_value",
|
|
202017
202017
|
tip: {
|
|
202018
202018
|
suggestion: "Valid modes: \"acceptEdits\" (ask before file changes), \"plan\" (analysis only), \"bypassPermissions\" (auto-accept all), or \"default\" (standard behavior)",
|
|
202019
|
-
docLink: `${os$
|
|
202019
|
+
docLink: `${os$1}/iam#permission-modes`
|
|
202020
202020
|
}
|
|
202021
202021
|
},
|
|
202022
202022
|
{
|
|
@@ -202031,7 +202031,7 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
|
|
|
202031
202031
|
matches: (e) => e.path.startsWith("env.") && e.code === "invalid_type",
|
|
202032
202032
|
tip: {
|
|
202033
202033
|
suggestion: "Environment variables must be strings. Wrap numbers and booleans in quotes. Example: \"DEBUG\": \"true\", \"PORT\": \"3000\"",
|
|
202034
|
-
docLink: `${os$
|
|
202034
|
+
docLink: `${os$1}/settings#environment-variables`
|
|
202035
202035
|
}
|
|
202036
202036
|
},
|
|
202037
202037
|
{
|
|
@@ -202042,14 +202042,14 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
|
|
|
202042
202042
|
matches: (e) => e.path.startsWith("hooks.") && e.code === "invalid_key",
|
|
202043
202043
|
tip: {
|
|
202044
202044
|
suggestion: "Not a recognized hook event. Common events: PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, SessionEnd, Stop. Check spelling and capitalization.",
|
|
202045
|
-
docLink: `${os$
|
|
202045
|
+
docLink: `${os$1}/hooks`
|
|
202046
202046
|
}
|
|
202047
202047
|
},
|
|
202048
202048
|
{
|
|
202049
202049
|
matches: (e) => /\.hooks\.\d+\.command$/.test(e.path) && e.code === "invalid_type" && e.received === "undefined",
|
|
202050
202050
|
tip: {
|
|
202051
202051
|
suggestion: "Command hooks require `command`. For exec form (no shell), set `command` to the executable and `args` to its arguments: {\"type\": \"command\", \"command\": \"echo\", \"args\": [\"hi\"]}. For shell form, set `command` to the full shell string: {\"type\": \"command\", \"command\": \"echo hi\"}.",
|
|
202052
|
-
docLink: `${os$
|
|
202052
|
+
docLink: `${os$1}/hooks#exec-form-and-shell-form`
|
|
202053
202053
|
}
|
|
202054
202054
|
},
|
|
202055
202055
|
{
|
|
@@ -202064,7 +202064,7 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
|
|
|
202064
202064
|
matches: (e) => e.code === "unrecognized_keys",
|
|
202065
202065
|
tip: {
|
|
202066
202066
|
suggestion: "Check for typos or refer to the documentation for valid fields",
|
|
202067
|
-
docLink: `${os$
|
|
202067
|
+
docLink: `${os$1}/settings`
|
|
202068
202068
|
}
|
|
202069
202069
|
},
|
|
202070
202070
|
{
|
|
@@ -202079,13 +202079,13 @@ var os$2 = "https://code.claude.com/docs/en", kKe = [
|
|
|
202079
202079
|
matches: (e) => e.path === "permissions.additionalDirectories" && e.code === "invalid_type",
|
|
202080
202080
|
tip: {
|
|
202081
202081
|
suggestion: "Must be an array of directory paths. Example: [\"~/projects\", \"/tmp/workspace\"]. You can also use --add-dir flag or /add-dir command",
|
|
202082
|
-
docLink: `${os$
|
|
202082
|
+
docLink: `${os$1}/iam#working-directories`
|
|
202083
202083
|
}
|
|
202084
202084
|
}
|
|
202085
202085
|
], AKe = {
|
|
202086
|
-
permissions: `${os$
|
|
202087
|
-
env: `${os$
|
|
202088
|
-
hooks: `${os$
|
|
202086
|
+
permissions: `${os$1}/iam#configuring-permissions`,
|
|
202087
|
+
env: `${os$1}/settings#environment-variables`,
|
|
202088
|
+
hooks: `${os$1}/hooks`
|
|
202089
202089
|
};
|
|
202090
202090
|
function GZ(e) {
|
|
202091
202091
|
let t = kKe.find((r) => r.matches(e));
|
|
@@ -270287,7 +270287,7 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
|
|
|
270287
270287
|
var dgram = __require("dgram");
|
|
270288
270288
|
var thunky = require_thunky();
|
|
270289
270289
|
var events = __require("events");
|
|
270290
|
-
var os
|
|
270290
|
+
var os = __require("os");
|
|
270291
270291
|
var noop = function() {};
|
|
270292
270292
|
module.exports = function(opts) {
|
|
270293
270293
|
if (!opts) opts = {};
|
|
@@ -270418,14 +270418,14 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
|
|
|
270418
270418
|
return that;
|
|
270419
270419
|
};
|
|
270420
270420
|
function defaultInterface() {
|
|
270421
|
-
var networks = os
|
|
270421
|
+
var networks = os.networkInterfaces();
|
|
270422
270422
|
var names = Object.keys(networks);
|
|
270423
270423
|
for (var i = 0; i < names.length; i++) {
|
|
270424
270424
|
var net = networks[names[i]];
|
|
270425
270425
|
for (var j = 0; j < net.length; j++) {
|
|
270426
270426
|
var iface = net[j];
|
|
270427
270427
|
if (isIPv4(iface.family) && !iface.internal) {
|
|
270428
|
-
if (os
|
|
270428
|
+
if (os.platform() === "darwin" && names[i] === "en0") return iface.address;
|
|
270429
270429
|
return "0.0.0.0";
|
|
270430
270430
|
}
|
|
270431
270431
|
}
|
|
@@ -270433,7 +270433,7 @@ var import_multicast_dns = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMi
|
|
|
270433
270433
|
return "127.0.0.1";
|
|
270434
270434
|
}
|
|
270435
270435
|
function allInterfaces() {
|
|
270436
|
-
var networks = os
|
|
270436
|
+
var networks = os.networkInterfaces();
|
|
270437
270437
|
var names = Object.keys(networks);
|
|
270438
270438
|
var res = [];
|
|
270439
270439
|
for (var i = 0; i < names.length; i++) {
|
|
@@ -298359,7 +298359,7 @@ function resolveBuildCommitFromEnv(env) {
|
|
|
298359
298359
|
* environment descriptor down instead of reporting an honest "unknown".
|
|
298360
298360
|
*/
|
|
298361
298361
|
function readBakedBuildCommit() {
|
|
298362
|
-
return "
|
|
298362
|
+
return "703f97e0013867e0b5a3ebff1cd0d623fc868c16";
|
|
298363
298363
|
}
|
|
298364
298364
|
async function resolveServerBuildCommit(input) {
|
|
298365
298365
|
if (isFullCommitSha(input.baked)) return input.baked;
|
|
@@ -308356,6 +308356,7 @@ const __cmmdProxyRouteLayersStartIndex = registeredProxyRouteLayers().length;
|
|
|
308356
308356
|
*/
|
|
308357
308357
|
const CMMD_CLOUD_PROJECTS_PATH = "/api/forge/context/cloud-projects";
|
|
308358
308358
|
const CMMD_RUNTIMES_PATH = "/api/forge/context/runtimes";
|
|
308359
|
+
const CMMD_ENVIRONMENTS_PATH = "/api/forge/context/environments";
|
|
308359
308360
|
/**
|
|
308360
308361
|
* Authenticate the browser session and resolve the CMMD JWT to forward
|
|
308361
308362
|
* upstream. `jwt` is null when none could be resolved, which every caller
|
|
@@ -310482,12 +310483,8 @@ registerProxyRoute({
|
|
|
310482
310483
|
});
|
|
310483
310484
|
const FORGE_RUNTIMES_POLL_INTERVAL = seconds(5);
|
|
310484
310485
|
const FORGE_RUNTIMES_KEEPALIVE_INTERVAL = seconds(25);
|
|
310485
|
-
function
|
|
310486
|
-
return new TextEncoder().encode(`event:
|
|
310487
|
-
projects,
|
|
310488
|
-
environments,
|
|
310489
|
-
capacity
|
|
310490
|
-
})}\n\n`);
|
|
310486
|
+
function encodeForgeCatalogFrame(eventName, payload) {
|
|
310487
|
+
return new TextEncoder().encode(`event: ${eventName}\ndata: ${JSON.stringify(payload)}\n\n`);
|
|
310491
310488
|
}
|
|
310492
310489
|
/**
|
|
310493
310490
|
* Emitted when the upstream CMMD returns HTTP 401 or 403.
|
|
@@ -310498,13 +310495,14 @@ const FORGE_RUNTIMES_AUTH_REQUIRED_FRAME = new TextEncoder().encode("event: auth
|
|
|
310498
310495
|
const FORGE_RUNTIMES_KEEPALIVE_FRAME = new TextEncoder().encode(": ping\n\n");
|
|
310499
310496
|
const FORGE_RUNTIMES_KICKOFF_FRAME = new TextEncoder().encode(": ok\n\n");
|
|
310500
310497
|
/**
|
|
310501
|
-
* Fetches
|
|
310498
|
+
* Fetches an upstream CMMD catalog for one poll tick of a catalog SSE proxy.
|
|
310502
310499
|
*
|
|
310503
310500
|
* Returns:
|
|
310504
|
-
* - `Uint8Array` (
|
|
310501
|
+
* - `Uint8Array` (catalog frame) — successful response
|
|
310505
310502
|
* - `FORGE_RUNTIMES_AUTH_REQUIRED_FRAME` — upstream returned 401 or 403
|
|
310506
|
-
* - `null` — any other non-ok status (5xx,
|
|
310507
|
-
* tick so the client cache is never
|
|
310503
|
+
* - `null` — any other non-ok status (5xx, a body without this proxy's
|
|
310504
|
+
* collections); the caller must skip the tick so the client cache is never
|
|
310505
|
+
* poisoned by an error frame
|
|
310508
310506
|
*
|
|
310509
310507
|
* Network errors also return `null` (skip-tick, never blank the client cache).
|
|
310510
310508
|
*
|
|
@@ -310513,46 +310511,81 @@ const FORGE_RUNTIMES_KICKOFF_FRAME = new TextEncoder().encode(": ok\n\n");
|
|
|
310513
310511
|
* is the designed failure mode. Retrying here would stack a second backoff
|
|
310514
310512
|
* inside the first and delay the frame the client is waiting on.
|
|
310515
310513
|
*/
|
|
310516
|
-
function
|
|
310514
|
+
function makeFetchForgeCatalogFrameEffect(proxy, upstreamUrl, accessToken) {
|
|
310517
310515
|
return tryPromise(() => fetch(upstreamUrl, { headers: {
|
|
310518
310516
|
Authorization: `Bearer ${accessToken}`,
|
|
310519
310517
|
Accept: "application/json"
|
|
310520
310518
|
} }).then(async (res) => {
|
|
310521
310519
|
if (res.status === 401 || res.status === 403) {
|
|
310522
|
-
console.warn(`[
|
|
310520
|
+
console.warn(`[${proxy.logTag}] upstream auth failure: ${res.status}`);
|
|
310523
310521
|
return FORGE_RUNTIMES_AUTH_REQUIRED_FRAME;
|
|
310524
310522
|
}
|
|
310525
310523
|
if (!res.ok) {
|
|
310526
310524
|
const errBody = await res.text().catch(() => "");
|
|
310527
|
-
console.warn(`[
|
|
310525
|
+
console.warn(`[${proxy.logTag}] upstream ${res.status}:`, errBody.slice(0, 200));
|
|
310528
310526
|
return null;
|
|
310529
310527
|
}
|
|
310530
310528
|
const json = await res.json();
|
|
310531
310529
|
const unwrapped = json && typeof json === "object" && "data" in json && json["data"] ? json["data"] : json;
|
|
310532
|
-
const
|
|
310533
|
-
|
|
310534
|
-
if (!Array.isArray(projects) || !Array.isArray(environments)) return null;
|
|
310535
|
-
return encodeForgeCloudProjectsFrame(projects, environments, unwrapped?.["capacity"] ?? null);
|
|
310530
|
+
const payload = unwrapped ? proxy.extractPayload(unwrapped) : null;
|
|
310531
|
+
return payload === null ? null : encodeForgeCatalogFrame(proxy.eventName, payload);
|
|
310536
310532
|
})).pipe(catch_(() => succeed(null)));
|
|
310537
310533
|
}
|
|
310538
|
-
|
|
310539
|
-
|
|
310540
|
-
|
|
310541
|
-
|
|
310542
|
-
|
|
310543
|
-
|
|
310544
|
-
|
|
310545
|
-
|
|
310546
|
-
|
|
310547
|
-
|
|
310548
|
-
|
|
310549
|
-
|
|
310550
|
-
|
|
310551
|
-
|
|
310552
|
-
|
|
310553
|
-
}
|
|
310554
|
-
|
|
310555
|
-
|
|
310534
|
+
/**
|
|
310535
|
+
* The poll-and-emit SSE handler shared by every CMMD catalog proxy: emits a
|
|
310536
|
+
* kickoff comment, an immediate snapshot, a frame per 5 s poll tick, and a
|
|
310537
|
+
* keepalive comment every ~25 s, until the client disconnects (Effect stream
|
|
310538
|
+
* interruption; `Stream.ensuring` logs the shutdown observably).
|
|
310539
|
+
*/
|
|
310540
|
+
function makeForgeCatalogEventsHandler(proxy, upstreamUrl) {
|
|
310541
|
+
return gen(function* () {
|
|
310542
|
+
const { session, jwt: accessToken } = yield* makeCmmdProxyAccessTokenEffect(proxy.logTag);
|
|
310543
|
+
if (!accessToken) return yield* respondCmmdConnectionRequired(session.sessionId);
|
|
310544
|
+
const fetchFrame = makeFetchForgeCatalogFrameEffect(proxy, upstreamUrl, accessToken);
|
|
310545
|
+
const dataStream = concat$2(fromEffect(fetchFrame), tick(FORGE_RUNTIMES_POLL_INTERVAL).pipe(mapEffect$1(() => fetchFrame))).pipe(filter$2((frame) => frame !== null));
|
|
310546
|
+
const keepaliveStream = tick(FORGE_RUNTIMES_KEEPALIVE_INTERVAL).pipe(map$7(() => FORGE_RUNTIMES_KEEPALIVE_FRAME));
|
|
310547
|
+
return stream(concat$2(succeed$4(FORGE_RUNTIMES_KICKOFF_FRAME), merge$4(dataStream, keepaliveStream)).pipe(ensuring$1(sync$1(() => {
|
|
310548
|
+
console.debug(`[${proxy.logTag}] SSE stream finalizer: connection closed or fiber interrupted`);
|
|
310549
|
+
}))), {
|
|
310550
|
+
status: 200,
|
|
310551
|
+
headers: {
|
|
310552
|
+
"content-type": "text/event-stream",
|
|
310553
|
+
"cache-control": "no-cache",
|
|
310554
|
+
connection: "keep-alive",
|
|
310555
|
+
"x-accel-buffering": "no"
|
|
310556
|
+
}
|
|
310557
|
+
});
|
|
310558
|
+
}).pipe(catchTag("AuthError", (error) => respondToAuthError(error)));
|
|
310559
|
+
}
|
|
310560
|
+
const cmmdForgeCloudProjectsEventsRouteLayer = add$1("GET", "/api/cmmd/forge-cloud-projects/events", makeForgeCatalogEventsHandler({
|
|
310561
|
+
logTag: "forge-cloud-projects/events",
|
|
310562
|
+
eventName: "cloud-projects",
|
|
310563
|
+
extractPayload: (unwrapped) => {
|
|
310564
|
+
const projects = unwrapped["projects"];
|
|
310565
|
+
const environments = unwrapped["environments"];
|
|
310566
|
+
if (!Array.isArray(projects) || !Array.isArray(environments)) return null;
|
|
310567
|
+
return {
|
|
310568
|
+
projects,
|
|
310569
|
+
environments,
|
|
310570
|
+
capacity: unwrapped["capacity"] ?? null
|
|
310571
|
+
};
|
|
310572
|
+
}
|
|
310573
|
+
}, `${resolveCommandAppUrl()}${CMMD_CLOUD_PROJECTS_PATH}`));
|
|
310574
|
+
registerProxyRoute({
|
|
310575
|
+
forgePath: "/api/cmmd/environments",
|
|
310576
|
+
method: "GET",
|
|
310577
|
+
cmmdPath: CMMD_ENVIRONMENTS_PATH,
|
|
310578
|
+
orgIdSource: "none",
|
|
310579
|
+
responseShape: "unwrapData"
|
|
310580
|
+
});
|
|
310581
|
+
const cmmdForgeEnvironmentsEventsRouteLayer = add$1("GET", "/api/cmmd/environments/events", makeForgeCatalogEventsHandler({
|
|
310582
|
+
logTag: "forge-environments/events",
|
|
310583
|
+
eventName: "environments",
|
|
310584
|
+
extractPayload: (unwrapped) => {
|
|
310585
|
+
const environments = unwrapped["environments"];
|
|
310586
|
+
return Array.isArray(environments) ? { environments } : null;
|
|
310587
|
+
}
|
|
310588
|
+
}, `${resolveCommandAppUrl()}${CMMD_ENVIRONMENTS_PATH}`));
|
|
310556
310589
|
function splitCmmdRuntimeOrganizationScope(raw) {
|
|
310557
310590
|
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
310558
310591
|
const body = { ...raw };
|
|
@@ -322025,7 +322058,7 @@ const MiscRuntimeLayerLive = mergeAll(AnalyticsServiceLayerLive, OpenLive, Serve
|
|
|
322025
322058
|
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), provide$1(UsageSessionLookupLive), provide$1(UsageRecordedSourceLive.pipe(provide$1(OrchestrationLayerLive), provide$1(RuntimeReplicationOutboxLive), provide$1(ProviderSessionRuntimeRepositoryLive), provide$1(TextGenerationSessionRepositoryLive)))))), provideMerge(WorkspaceLayerLive), provideMerge(WorkspaceReadinessStateLive), provideMerge(ProjectFaviconResolverLive), provideMerge(RepositoryIdentityResolverLive), provideMerge(ServerEnvironmentLive), provideMerge(AuthLayerLive), provideMerge(ServerSecretStoreLayerLive), provideMerge(mergeAll(CloudRedisCoordinationLive, CloudStateSyncLive.pipe(provide$1(PersistenceLayerLive)))), provideMerge(MiscRuntimeLayerLive));
|
|
322026
322059
|
const RuntimeDependenciesLive = pullRequestServiceFactoryLayer.pipe(provideMerge(RuntimeDependenciesWithoutPullRequestsLive), provideMerge(cmmdProjectIdentityResolverLive.pipe(provide$1(RuntimeDependenciesWithoutPullRequestsLive))), provideMerge(pullRequestProviderRuntimeLive));
|
|
322027
322060
|
const RuntimeServicesLive = ServerRuntimeStartupLive.pipe(provideMerge(RuntimeDependenciesLive));
|
|
322028
|
-
const makeRoutesLayer = mergeAll(attachmentUploadRouteLayer, authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authOAuthTokenExchangeRouteLayer, authWebSocketTicketRouteLayer, authCmmdOAuthDeviceRouteLayer, authCmmdOAuthTokenRouteLayer, authCmmdPasswordTokenRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authLogoutRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRenewRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer, authWebLoginRouteLayer, authWebCallbackRouteLayer, cloudOwnerSessionRedeemRouteLayer, cloudOwnerSessionRevokeRouteLayer, desktopLocalWebBridgePublishRouteLayer, desktopLocalWebBridgeBootstrapRouteLayer, desktopRelayControlPlaneRouteLayer, apiDocsHtmlRouteLayer, apiDocsOpenApiRouteLayer, pulseSignalStateListRouteLayer, pulseSignalStateUpsertRouteLayer, cmmdProfileRouteLayer, ...cmmdProxyRouteLayers, cmmdWorkIntakeRouteLayer, cmmdWsTokenRouteLayer, cmmdGetProjectCommentsRouteLayer, cmmdAddProjectCommentRouteLayer, cmmdUpdateProjectRouteLayer, cmmdUploadTaskAttachmentRouteLayer, cmmdUpdateTaskCommentRouteLayer, cmmdListWorkspaceMembersRouteLayer, cmmdAddProjectMemberRouteLayer, cmmdUpdateProjectAgentMemberAvatarRouteLayer, runtimeReplicationStatusRouteLayer, cmmdRefreshProviderUsageRouteLayer, cmmdForgeCloudProjectsListRouteLayer, cmmdForgeCloudProjectsEventsRouteLayer, cmmdForgeRuntimesEnsureRouteLayer, cmmdForgeRuntimesConnectRouteLayer, ownerRuntimeCodexReadinessRouteLayer, cmmdForgeRuntimesStatusRouteLayer, cmmdForgeRuntimesStartRouteLayer, cmmdForgeRuntimesStopRouteLayer, cmmdForgeRuntimesRecycleRouteLayer, cmmdForgeRuntimesUpdateCommitRouteLayer, cmmdForgeRuntimesDestroyRouteLayer, mobileProviderCatalogRouteLayer, attachmentsRouteLayer, orchestrationDispatchRouteLayer, orchestrationCmmdWorkRunEventRouteLayer, orchestrationAutomationStartThreadRouteLayer, orchestrationAutomationRebindRouteLayer, orchestrationAutomationTerminalReconcileRouteLayer, mobileGitRunStackedActionRouteLayer, pullRequestDiffRouteLayer, orchestrationSnapshotRouteLayer, orchestrationThreadSnapshotRouteLayer, 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, runtimeFilesystemHealthRouteLayer, claudeNativeGenerationProofRouteLayer, claudeUsageRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(provide$1(browserApiCorsLayer));
|
|
322061
|
+
const makeRoutesLayer = mergeAll(attachmentUploadRouteLayer, authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authOAuthTokenExchangeRouteLayer, authWebSocketTicketRouteLayer, authCmmdOAuthDeviceRouteLayer, authCmmdOAuthTokenRouteLayer, authCmmdPasswordTokenRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authLogoutRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRenewRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer, authWebLoginRouteLayer, authWebCallbackRouteLayer, cloudOwnerSessionRedeemRouteLayer, cloudOwnerSessionRevokeRouteLayer, desktopLocalWebBridgePublishRouteLayer, desktopLocalWebBridgeBootstrapRouteLayer, desktopRelayControlPlaneRouteLayer, apiDocsHtmlRouteLayer, apiDocsOpenApiRouteLayer, pulseSignalStateListRouteLayer, pulseSignalStateUpsertRouteLayer, cmmdProfileRouteLayer, ...cmmdProxyRouteLayers, cmmdWorkIntakeRouteLayer, cmmdWsTokenRouteLayer, cmmdGetProjectCommentsRouteLayer, cmmdAddProjectCommentRouteLayer, cmmdUpdateProjectRouteLayer, cmmdUploadTaskAttachmentRouteLayer, cmmdUpdateTaskCommentRouteLayer, cmmdListWorkspaceMembersRouteLayer, cmmdAddProjectMemberRouteLayer, cmmdUpdateProjectAgentMemberAvatarRouteLayer, runtimeReplicationStatusRouteLayer, cmmdRefreshProviderUsageRouteLayer, cmmdForgeCloudProjectsListRouteLayer, cmmdForgeCloudProjectsEventsRouteLayer, cmmdForgeEnvironmentsEventsRouteLayer, cmmdForgeRuntimesEnsureRouteLayer, cmmdForgeRuntimesConnectRouteLayer, ownerRuntimeCodexReadinessRouteLayer, cmmdForgeRuntimesStatusRouteLayer, cmmdForgeRuntimesStartRouteLayer, cmmdForgeRuntimesStopRouteLayer, cmmdForgeRuntimesRecycleRouteLayer, cmmdForgeRuntimesUpdateCommitRouteLayer, cmmdForgeRuntimesDestroyRouteLayer, mobileProviderCatalogRouteLayer, attachmentsRouteLayer, orchestrationDispatchRouteLayer, orchestrationCmmdWorkRunEventRouteLayer, orchestrationAutomationStartThreadRouteLayer, orchestrationAutomationRebindRouteLayer, orchestrationAutomationTerminalReconcileRouteLayer, mobileGitRunStackedActionRouteLayer, pullRequestDiffRouteLayer, orchestrationSnapshotRouteLayer, orchestrationThreadSnapshotRouteLayer, 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, runtimeFilesystemHealthRouteLayer, claudeNativeGenerationProofRouteLayer, claudeUsageRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(provide$1(browserApiCorsLayer));
|
|
322029
322062
|
const runServer = launch$1(unwrap(gen(function* () {
|
|
322030
322063
|
const config = yield* ServerConfig;
|
|
322031
322064
|
fixPath({ preferProcessPath: config.forgeCmmdRuntimeMode === true });
|
|
@@ -322957,7 +322990,7 @@ const connectLoginCommand = make$34("login", {
|
|
|
322957
322990
|
})).json();
|
|
322958
322991
|
},
|
|
322959
322992
|
openBrowser: async (url) => {
|
|
322960
|
-
const open = (await import("./open-
|
|
322993
|
+
const open = (await import("./open-2-reBrpv.mjs")).default;
|
|
322961
322994
|
await open(url);
|
|
322962
322995
|
return true;
|
|
322963
322996
|
},
|