@cmmd-center/forge 0.9.13 → 0.9.14

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.mjs CHANGED
@@ -11,7 +11,7 @@ import { a as make$48, i as keys, n as getOption, o as makeWith$1, r as invalida
11
11
  import { S as layer$9, _ as defaultEscape, a as DeadlockError, b as makeCompiler$1, c as SqlError, d as UnknownError, g as custom, h as make$49, i as ConstraintError, l as SqlSyntaxError, m as SqlClient, n as AuthorizationError, o as LockTimeoutError, r as ConnectionError, s as SerializationError, t as AuthenticationError, u as StatementTimeoutError, v as defaultTransforms, y as fragment } from "./SqlError-B2g5pJux.mjs";
12
12
  import { r as wrapper_default, t as Mime_default } from "./Mime-Dq9IoNiV.mjs";
13
13
  import { a as diag, c as SpanKind$1, d as TraceFlags, f as ROOT_CONTEXT, i as propagation, l as isSpanContextValid, m as DiagLogLevel, n as init_esm$1, o as context$1, p as createContextKey, r as trace, s as SpanStatusCode, t as esm_exports$1 } from "./esm-wLIF-u3N.mjs";
14
- import { a as verifyCmmdAuthRuntimeTicket, c as verifyCmmdRuntimeTicketRefreshProof, d as createReadOnceFileTokenAccessor, i as sendRuntimeControlHeartbeat, l as runtimeGrantToken, n as bootstrapRuntimeControlAuthorityFromNarrowGrant, o as verifyCmmdClaudeReadinessTicket, r as readRuntimeControlAuthority, s as verifyCmmdRuntimeTicket, t as bootstrapRuntimeControlAuthority, u as setRuntimeGrantToken } from "./runtimeControlAuthority-akIBTI-S.mjs";
14
+ import { a as verifyCmmdAuthRuntimeTicket, c as verifyCmmdRuntimeTicket, d as setRuntimeGrantToken, f as createReadOnceFileTokenAccessor, i as sendRuntimeControlHeartbeat, l as verifyCmmdRuntimeTicketRefreshProof, n as bootstrapRuntimeControlAuthorityFromNarrowGrant, o as verifyCmmdClaudeReadinessTicket, r as readRuntimeControlAuthority, s as verifyCmmdClaudeUsageTicket, t as bootstrapRuntimeControlAuthority, u as runtimeGrantToken } from "./runtimeControlAuthority-COHmz_WT.mjs";
15
15
  import { n as PtySpawnError, t as PtyAdapter } from "./PTY-Cx_YKiEO.mjs";
16
16
  import { createRequire } from "node:module";
17
17
  import * as HE from "node:child_process";
@@ -32066,7 +32066,7 @@ function requiredString(value, minimumLength = 1) {
32066
32066
  if (typeof value !== "string" || value.length < minimumLength) return identityCorrupt();
32067
32067
  return value;
32068
32068
  }
32069
- function positiveInteger$1(value) {
32069
+ function positiveInteger$2(value) {
32070
32070
  if (!Number.isInteger(value) || Number(value) <= 0) return identityCorrupt();
32071
32071
  return Number(value);
32072
32072
  }
@@ -32086,7 +32086,7 @@ function parseChallenge(value) {
32086
32086
  if (!value || typeof value !== "object") return identityCorrupt();
32087
32087
  const record = value;
32088
32088
  return {
32089
- deviceId: positiveInteger$1(record.deviceId),
32089
+ deviceId: positiveInteger$2(record.deviceId),
32090
32090
  challengeId: requiredString(record.challengeId, 8),
32091
32091
  signingPayload: requiredString(record.signingPayload),
32092
32092
  currentKeyId: requiredString(record.currentKeyId),
@@ -64870,7 +64870,7 @@ function normalizeNumberish(value) {
64870
64870
  }
64871
64871
  //#endregion
64872
64872
  //#region package.json
64873
- var version$1 = "0.9.13";
64873
+ var version$1 = "0.9.14";
64874
64874
  //#endregion
64875
64875
  //#region src/sentry.ts
64876
64876
  const SERVER_APP_NAME = "forge-server";
@@ -65343,7 +65343,7 @@ function readCmmdAvatarUrl(raw) {
65343
65343
  function readTrimmedString$2(value) {
65344
65344
  return typeof value === "string" ? value.trim() || null : null;
65345
65345
  }
65346
- function asRecord$11(value) {
65346
+ function asRecord$12(value) {
65347
65347
  return value && typeof value === "object" ? value : null;
65348
65348
  }
65349
65349
  function readDirectPlanLabelFromRecord(obj) {
@@ -65355,26 +65355,26 @@ function readNestedPlanLabelFromRecord(obj) {
65355
65355
  function readCmmdPlanLabel(obj) {
65356
65356
  const direct = readDirectPlanLabelFromRecord(obj);
65357
65357
  if (direct) return direct;
65358
- const plan = asRecord$11(obj["plan"]);
65358
+ const plan = asRecord$12(obj["plan"]);
65359
65359
  if (plan) {
65360
65360
  const label = readNestedPlanLabelFromRecord(plan);
65361
65361
  if (label) return label;
65362
65362
  }
65363
- const subscription = asRecord$11(obj["subscription"]);
65363
+ const subscription = asRecord$12(obj["subscription"]);
65364
65364
  if (subscription) {
65365
65365
  const label = readNestedPlanLabelFromRecord(subscription);
65366
65366
  if (label) return label;
65367
- const subscriptionPlan = asRecord$11(subscription["plan"]);
65367
+ const subscriptionPlan = asRecord$12(subscription["plan"]);
65368
65368
  if (subscriptionPlan) {
65369
65369
  const nestedLabel = readNestedPlanLabelFromRecord(subscriptionPlan);
65370
65370
  if (nestedLabel) return nestedLabel;
65371
65371
  }
65372
65372
  }
65373
- const billing = asRecord$11(obj["billing"]);
65373
+ const billing = asRecord$12(obj["billing"]);
65374
65374
  if (billing) {
65375
65375
  const label = readNestedPlanLabelFromRecord(billing);
65376
65376
  if (label) return label;
65377
- const billingPlan = asRecord$11(billing["plan"]);
65377
+ const billingPlan = asRecord$12(billing["plan"]);
65378
65378
  if (billingPlan) return readNestedPlanLabelFromRecord(billingPlan);
65379
65379
  }
65380
65380
  return null;
@@ -65511,7 +65511,7 @@ function constantTimeEqual(left, right) {
65511
65511
  function integerSeconds(value) {
65512
65512
  return Number.isSafeInteger(value) && value >= 0 ? value : null;
65513
65513
  }
65514
- function positiveInteger(value) {
65514
+ function positiveInteger$1(value) {
65515
65515
  return Number.isSafeInteger(value) && value > 0 ? value : null;
65516
65516
  }
65517
65517
  function parseAssertion(token) {
@@ -65538,7 +65538,7 @@ function hasExpectedPayloadContext(payload) {
65538
65538
  function readRequiredClaims(payload) {
65539
65539
  const subject = nonEmptyString$1(payload["sub"]);
65540
65540
  if (!subject) return null;
65541
- const userId = positiveInteger(payload["user_id"]);
65541
+ const userId = positiveInteger$1(payload["user_id"]);
65542
65542
  if (!userId) return null;
65543
65543
  const jti = nonEmptyString$1(payload["jti"]);
65544
65544
  if (!jti) return null;
@@ -69135,22 +69135,22 @@ const EMPTY_PARSED_ERROR = {
69135
69135
  message: null,
69136
69136
  raw: null
69137
69137
  };
69138
- function asRecord$10(value) {
69138
+ function asRecord$11(value) {
69139
69139
  return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
69140
69140
  }
69141
69141
  function readTrimmedString$1(value) {
69142
69142
  return (typeof value === "string" ? value.trim() : "") || null;
69143
69143
  }
69144
69144
  function readErrorEnvelope(record) {
69145
- return asRecord$10(record["error"]);
69145
+ return asRecord$11(record["error"]);
69146
69146
  }
69147
69147
  function readUpstreamErrorCode(body) {
69148
- const record = asRecord$10(body);
69148
+ const record = asRecord$11(body);
69149
69149
  if (record === null) return null;
69150
69150
  return readTrimmedString$1(record["code"]) ?? readTrimmedString$1(readErrorEnvelope(record)?.["code"]);
69151
69151
  }
69152
69152
  function readErrorMessage$2(raw) {
69153
- const record = asRecord$10(raw);
69153
+ const record = asRecord$11(raw);
69154
69154
  if (record === null) return null;
69155
69155
  const error = record["error"];
69156
69156
  const nestedMessage = readErrorEnvelope(record)?.["message"];
@@ -69782,7 +69782,7 @@ function buildProxyErrorResponse(error) {
69782
69782
  code: error.code
69783
69783
  }, { status: 403 });
69784
69784
  if (error instanceof CmmdProxyRequestError) {
69785
- const status = error.status >= 500 ? 502 : error.status;
69785
+ const status = error.status === 503 ? 503 : error.status >= 500 ? 502 : error.status;
69786
69786
  return jsonUnsafe({
69787
69787
  error: error.detail ?? "CMMD REST request failed.",
69788
69788
  code: error.code,
@@ -96479,7 +96479,7 @@ const EMPTY_PLAN_VALUES = new Set([
96479
96479
  "none",
96480
96480
  "null"
96481
96481
  ]);
96482
- function asRecord$9(value) {
96482
+ function asRecord$10(value) {
96483
96483
  if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
96484
96484
  return value;
96485
96485
  }
@@ -96496,7 +96496,7 @@ function decodeJwtClaims(token) {
96496
96496
  try {
96497
96497
  const decoded = Buffer.from(payload, "base64url");
96498
96498
  if (decoded.byteLength > MAX_CLAIMS_BYTES) return void 0;
96499
- return asRecord$9(JSON.parse(decoded.toString("utf8")));
96499
+ return asRecord$10(JSON.parse(decoded.toString("utf8")));
96500
96500
  } catch {
96501
96501
  return;
96502
96502
  }
@@ -96518,7 +96518,7 @@ function findPlanType(claims) {
96518
96518
  const direct = fromRecord(claims);
96519
96519
  if (direct) return direct;
96520
96520
  for (const value of Object.values(claims)) {
96521
- const nested = asRecord$9(value);
96521
+ const nested = asRecord$10(value);
96522
96522
  if (!nested) continue;
96523
96523
  const found = fromRecord(nested);
96524
96524
  if (found) return found;
@@ -96535,7 +96535,7 @@ function readCodexAuthIdentity(authJson) {
96535
96535
  } catch {
96536
96536
  return {};
96537
96537
  }
96538
- const claims = decodeJwtClaims(asRecord$9(asRecord$9(parsed)?.tokens)?.id_token);
96538
+ const claims = decodeJwtClaims(asRecord$10(asRecord$10(parsed)?.tokens)?.id_token);
96539
96539
  if (!claims) return {};
96540
96540
  const email = findEmail(claims);
96541
96541
  const planType = findPlanType(claims);
@@ -96732,11 +96732,6 @@ function recordClaudeRateLimitTelemetry(info, generationHash = currentClaudeUsag
96732
96732
  observedAt: [fiveHourObservedAt, sevenDayObservedAt].filter((value) => value !== null).toSorted()[0]
96733
96733
  });
96734
96734
  }
96735
- function getLatestClaudeRateLimitTelemetry(generationHash = currentClaudeUsageGenerationHash(), providerAccountId) {
96736
- if (generationHash === null) return null;
96737
- const cacheKey = providerAccountId ? `${providerAccountId}:${generationHash}` : generationHash;
96738
- return cachedSnapshots.get(cacheKey) ?? null;
96739
- }
96740
96735
  //#endregion
96741
96736
  //#region src/providerAuth/ClaudeDeviceAuth.ts
96742
96737
  const AUTHORIZE_URL_PATTERN = /https:\/\/[^\s]*\/oauth\/authorize\?[^\s]+/u;
@@ -97115,17 +97110,23 @@ async function loadClaudeAccountMetadataFromCli(homePath) {
97115
97110
  function extractClaudeCredentialGenerationId(response) {
97116
97111
  if (typeof response !== "object" || response === null || !("data" in response)) return null;
97117
97112
  const data = response.data;
97118
- if (typeof data !== "object" || data === null || !("connected" in data) || !data.connected) return null;
97119
- if (!("generationId" in data) || typeof data.generationId !== "string") return null;
97120
- const generationId = data.generationId.trim();
97113
+ if (typeof data !== "object" || data === null) return null;
97114
+ if ("connected" in data && data.connected === true && "generationId" in data && typeof data.generationId === "string") {
97115
+ const generationId = data.generationId.trim();
97116
+ return generationId.length > 0 ? generationId : null;
97117
+ }
97118
+ if (!("account" in data) || typeof data.account !== "object" || data.account === null) return null;
97119
+ const account = data.account;
97120
+ if (!("credentialGenerationId" in account) || typeof account.credentialGenerationId !== "string") return null;
97121
+ const generationId = account.credentialGenerationId.trim();
97121
97122
  return generationId.length > 0 ? generationId : null;
97122
97123
  }
97123
97124
  function extractClaudeProviderAccountId(response) {
97124
- const generationId = extractClaudeCredentialGenerationId(response);
97125
- if (generationId !== null) return generationId;
97126
97125
  if (typeof response !== "object" || response === null || !("data" in response)) return null;
97127
97126
  const data = response.data;
97128
- if (typeof data !== "object" || data === null || !("account" in data)) return null;
97127
+ if (typeof data !== "object" || data === null) return null;
97128
+ if ("connected" in data && data.connected === true) return extractClaudeCredentialGenerationId(response);
97129
+ if (!("account" in data)) return null;
97129
97130
  const account = data.account;
97130
97131
  if (typeof account !== "object" || account === null || !("providerAccountId" in account) || typeof account.providerAccountId !== "string") return null;
97131
97132
  const providerAccountId = account.providerAccountId.trim();
@@ -97153,7 +97154,7 @@ async function publishClaudeUsageAfterSync(input) {
97153
97154
  path: input.auth.path === AUTH_RUNTIME_CLAUDE_CREDENTIAL_PATH ? AUTH_RUNTIME_CLAUDE_USAGE_PATH : USER_CLAUDE_USAGE_PATH,
97154
97155
  body: {
97155
97156
  providerAccountId: input.providerAccountId,
97156
- credentialGenerationId: input.providerAccountId,
97157
+ credentialGenerationId: input.credentialGenerationId,
97157
97158
  accountEmail: input.accountEmail,
97158
97159
  accountDisplayName: input.accountDisplayName,
97159
97160
  planType: input.planType,
@@ -97170,11 +97171,13 @@ async function publishClaudeUsageAfterSync(input) {
97170
97171
  }
97171
97172
  async function finalizeClaudeCredentialSync(input) {
97172
97173
  const providerAccountId = extractClaudeProviderAccountId(input.response);
97173
- if (providerAccountId === null) return null;
97174
- if (input.auth.path === USER_CLAUDE_CREDENTIAL_PATH) setLocalClaudeUsageGeneration(providerAccountId);
97174
+ const credentialGenerationId = extractClaudeCredentialGenerationId(input.response);
97175
+ if (providerAccountId === null || credentialGenerationId === null) return null;
97176
+ if (input.auth.path === USER_CLAUDE_CREDENTIAL_PATH) setLocalClaudeUsageGeneration(credentialGenerationId);
97175
97177
  return publishClaudeUsageAfterSync({
97176
97178
  auth: input.auth,
97177
97179
  providerAccountId,
97180
+ credentialGenerationId,
97178
97181
  accountEmail: input.accountEmail,
97179
97182
  accountDisplayName: input.accountDisplayName,
97180
97183
  planType: input.planType,
@@ -203517,7 +203520,7 @@ const collectStreamAsString = (stream) => stream.pipe(decodeText$1(), runFold(()
203517
203520
  //#region src/orchestration/WorkerPlanCodexTools.ts
203518
203521
  const FORGE_PROPOSE_WORKER_TASKS_TOOL = "forge_propose_worker_tasks";
203519
203522
  const MAX_WORKER_PLAN_ITEMS = 5;
203520
- function asRecord$8(value) {
203523
+ function asRecord$9(value) {
203521
203524
  return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
203522
203525
  }
203523
203526
  function readTrimmedString(value) {
@@ -203533,7 +203536,7 @@ function isValidWorkerSummary(value) {
203533
203536
  return value !== void 0 && value.length > 0 && value.length <= 4e3;
203534
203537
  }
203535
203538
  function decodeWorkerPlanItem(value) {
203536
- const item = asRecord$8(value);
203539
+ const item = asRecord$9(value);
203537
203540
  const slug = readTrimmedString(item?.slug);
203538
203541
  const title = readTrimmedString(item?.title);
203539
203542
  const summary = readTrimmedString(item?.summary);
@@ -203597,7 +203600,7 @@ function createWorkerPlanDynamicTools() {
203597
203600
  function createWorkerPlanDynamicToolHandler() {
203598
203601
  return async (input) => {
203599
203602
  if (input.tool !== "forge_propose_worker_tasks") throw new Error(`Unsupported worker-plan tool: ${input.tool}`);
203600
- if (!decodeWorkerPlanItems(asRecord$8(input.arguments)?.items)) throw new Error("Worker plans require one to five unique, fully described items.");
203603
+ if (!decodeWorkerPlanItems(asRecord$9(input.arguments)?.items)) throw new Error("Worker plans require one to five unique, fully described items.");
203601
203604
  return {
203602
203605
  success: true,
203603
203606
  contentItems: [{
@@ -205315,25 +205318,25 @@ const AUTH_METHOD_CONTAINER_KEYS = [
205315
205318
  /** Lift an unknown value into `Option<string>` if it is a non-empty string. */
205316
205319
  const asNonEmptyString = (v) => typeof v === "string" && v.length > 0 ? some(v) : none$4();
205317
205320
  /** Lift an unknown value into `Option<Record>` if it is a plain object. */
205318
- const asRecord$7 = (v) => typeof v === "object" && v !== null && !globalThis.Array.isArray(v) ? some(v) : none$4();
205321
+ const asRecord$8 = (v) => typeof v === "object" && v !== null && !globalThis.Array.isArray(v) ? some(v) : none$4();
205319
205322
  /**
205320
205323
  * Walk an unknown parsed JSON value looking for a subscription/plan
205321
205324
  * identifier, returning the first match as an `Option`.
205322
205325
  */
205323
205326
  function findSubscriptionType(value) {
205324
205327
  if (globalThis.Array.isArray(value)) return firstSomeOf(value.map(findSubscriptionType));
205325
- return asRecord$7(value).pipe(flatMap$2((record) => {
205328
+ return asRecord$8(value).pipe(flatMap$2((record) => {
205326
205329
  const direct = firstSomeOf(SUBSCRIPTION_TYPE_KEYS.map((key) => asNonEmptyString(record[key])));
205327
205330
  if (isSome(direct)) return direct;
205328
- return firstSomeOf(SUBSCRIPTION_CONTAINER_KEYS.map((key) => asRecord$7(record[key]).pipe(flatMap$2(findSubscriptionType))));
205331
+ return firstSomeOf(SUBSCRIPTION_CONTAINER_KEYS.map((key) => asRecord$8(record[key]).pipe(flatMap$2(findSubscriptionType))));
205329
205332
  }));
205330
205333
  }
205331
205334
  function findAuthMethod(value) {
205332
205335
  if (globalThis.Array.isArray(value)) return firstSomeOf(value.map(findAuthMethod));
205333
- return asRecord$7(value).pipe(flatMap$2((record) => {
205336
+ return asRecord$8(value).pipe(flatMap$2((record) => {
205334
205337
  const direct = firstSomeOf(AUTH_METHOD_KEYS.map((key) => asNonEmptyString(record[key])));
205335
205338
  if (isSome(direct)) return direct;
205336
- return firstSomeOf(AUTH_METHOD_CONTAINER_KEYS.map((key) => asRecord$7(record[key]).pipe(flatMap$2(findAuthMethod))));
205339
+ return firstSomeOf(AUTH_METHOD_CONTAINER_KEYS.map((key) => asRecord$8(record[key]).pipe(flatMap$2(findAuthMethod))));
205337
205340
  }));
205338
205341
  }
205339
205342
  /**
@@ -206481,7 +206484,7 @@ function userInputQuestionsFromToolInput(toolInput) {
206481
206484
  return (Array.isArray(toolInput.questions) ? toolInput.questions : []).map((question, idx) => userInputQuestionFromUnknown(question, idx));
206482
206485
  }
206483
206486
  function userInputQuestionFromUnknown(question, idx) {
206484
- const value = asRecord$6(question) ?? {};
206487
+ const value = asRecord$7(question) ?? {};
206485
206488
  return {
206486
206489
  id: typeof value.header === "string" ? value.header : `q-${idx}`,
206487
206490
  header: typeof value.header === "string" ? value.header : `Question ${idx + 1}`,
@@ -206491,13 +206494,13 @@ function userInputQuestionFromUnknown(question, idx) {
206491
206494
  };
206492
206495
  }
206493
206496
  function userInputOptionFromUnknown(option) {
206494
- const value = asRecord$6(option) ?? {};
206497
+ const value = asRecord$7(option) ?? {};
206495
206498
  return {
206496
206499
  label: typeof value.label === "string" ? value.label : "",
206497
206500
  description: typeof value.description === "string" ? value.description : ""
206498
206501
  };
206499
206502
  }
206500
- function asRecord$6(value) {
206503
+ function asRecord$7(value) {
206501
206504
  return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
206502
206505
  }
206503
206506
  function permissionResultFromDecision(decision, toolInput, suggestions) {
@@ -207304,7 +207307,7 @@ const makeClaudeAdapter = fn$1("makeClaudeAdapter")(function* (options) {
207304
207307
  const updateResumeCursor = fn$1("updateResumeCursor")(function* (context) {
207305
207308
  const threadId = context.session.threadId;
207306
207309
  if (!threadId) return;
207307
- const providerDeliveryBinding = readProviderDeliveryBinding(asRecord$6(context.session.resumeCursor)?.providerDeliveryBinding);
207310
+ const providerDeliveryBinding = readProviderDeliveryBinding(asRecord$7(context.session.resumeCursor)?.providerDeliveryBinding);
207308
207311
  const resumeCursor = {
207309
207312
  threadId,
207310
207313
  ...context.resumeSessionId ? { resume: context.resumeSessionId } : {},
@@ -212370,7 +212373,7 @@ function makeAcpContentDeltaEvent(input) {
212370
212373
  }
212371
212374
  //#endregion
212372
212375
  //#region ../../packages/shared/src/toolActivity.ts
212373
- function asRecord$5(value) {
212376
+ function asRecord$6(value) {
212374
212377
  return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
212375
212378
  }
212376
212379
  function asTrimmedString(value) {
@@ -212396,10 +212399,10 @@ function extractCommandFromTitle$1(title) {
212396
212399
  return /`([^`]+)`/u.exec(title)?.[1]?.trim() || void 0;
212397
212400
  }
212398
212401
  function extractToolCommand(data, title) {
212399
- const item = asRecord$5(data?.item);
212400
- const itemInput = asRecord$5(item?.input);
212401
- const itemResult = asRecord$5(item?.result);
212402
- const rawInput = asRecord$5(data?.rawInput);
212402
+ const item = asRecord$6(data?.item);
212403
+ const itemInput = asRecord$6(item?.input);
212404
+ const itemResult = asRecord$6(item?.result);
212405
+ const rawInput = asRecord$6(data?.rawInput);
212403
212406
  const direct = [
212404
212407
  normalizeCommandValue$1(item?.command),
212405
212408
  normalizeCommandValue$1(itemInput?.command),
@@ -212427,7 +212430,7 @@ function collectPaths(value, paths, seen, depth) {
212427
212430
  }
212428
212431
  return;
212429
212432
  }
212430
- const record = asRecord$5(value);
212433
+ const record = asRecord$6(value);
212431
212434
  if (!record) return;
212432
212435
  for (const key of [
212433
212436
  "path",
@@ -212486,7 +212489,7 @@ function deriveToolActivityPresentation(input) {
212486
212489
  const title = asTrimmedString(input.title);
212487
212490
  const detail = stripTrailingExitCode(asTrimmedString(input.detail));
212488
212491
  const fallbackSummary = asTrimmedString(input.fallbackSummary) ?? "Tool";
212489
- const data = asRecord$5(input.data);
212492
+ const data = asRecord$6(input.data);
212490
212493
  const command = extractToolCommand(data, title);
212491
212494
  const primaryPath = extractPrimaryPath(data);
212492
212495
  const action = classifyToolAction({
@@ -212510,7 +212513,7 @@ function deriveToolActivityPresentation(input) {
212510
212513
  ...primaryPath ? { detail: primaryPath } : {}
212511
212514
  };
212512
212515
  if (action === "search") {
212513
- const query = asTrimmedString(asRecord$5(data?.rawInput)?.query) ?? asTrimmedString(asRecord$5(data?.rawInput)?.pattern) ?? asTrimmedString(asRecord$5(data?.rawInput)?.searchTerm);
212516
+ const query = asTrimmedString(asRecord$6(data?.rawInput)?.query) ?? asTrimmedString(asRecord$6(data?.rawInput)?.pattern) ?? asTrimmedString(asRecord$6(data?.rawInput)?.searchTerm);
212514
212517
  return {
212515
212518
  summary: "Searched files",
212516
212519
  ...query ? { detail: query } : {}
@@ -278901,7 +278904,7 @@ function makeApprovedWorkerPlanEventState() {
278901
278904
  function promptKey(masterThreadId, promptId) {
278902
278905
  return `${masterThreadId}\n${promptId}`;
278903
278906
  }
278904
- function asRecord$4(value) {
278907
+ function asRecord$5(value) {
278905
278908
  return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
278906
278909
  }
278907
278910
  function exactMaterializedTaskIds(value, expectedCount) {
@@ -278911,7 +278914,7 @@ function exactMaterializedTaskIds(value, expectedCount) {
278911
278914
  }
278912
278915
  function readyBatchFromActivity(state, event) {
278913
278916
  if (event.payload.activity.kind !== "plan.task-creation.batch-succeeded") return null;
278914
- const payload = asRecord$4(event.payload.activity.payload);
278917
+ const payload = asRecord$5(event.payload.activity.payload);
278915
278918
  const promptId = payload?.["promptId"];
278916
278919
  if (typeof promptId !== "string") return null;
278917
278920
  const key = promptKey(event.payload.threadId, promptId);
@@ -280049,7 +280052,7 @@ function runtimeGrantNeedsRefresh(token, identity, nowSeconds = Math.floor(Date.
280049
280052
  return claims.expiresAtSeconds - nowSeconds <= RUNTIME_GRANT_REFRESH_SKEW_SECONDS;
280050
280053
  }
280051
280054
  /** Narrow an unknown to a plain object, or null. */
280052
- function asRecord$3(value) {
280055
+ function asRecord$4(value) {
280053
280056
  return value !== null && typeof value === "object" ? value : null;
280054
280057
  }
280055
280058
  /** The raw (untrimmed) string when it is present and not blank, else null. */
@@ -280061,7 +280064,7 @@ function asTimestamp(value) {
280061
280064
  return typeof value === "string" && Number.isFinite(Date.parse(value)) ? value : null;
280062
280065
  }
280063
280066
  function parseRuntimeGrantRefreshResponse(runtimeId, value) {
280064
- const data = asRecord$3(asRecord$3(value)?.data);
280067
+ const data = asRecord$4(asRecord$4(value)?.data);
280065
280068
  if (!data || data.runtimeId !== runtimeId) return null;
280066
280069
  const grantToken = asNonBlankString(data.grantToken);
280067
280070
  const expiresAt = asTimestamp(data.expiresAt);
@@ -296157,6 +296160,74 @@ const LocalAutomationSchedulerLive = effectDiscard(gen(function* () {
296157
296160
  yield* forkScoped(startup.awaitCommandReady.pipe(andThen(forever$1(tick.pipe(andThen(sleep$4("60 seconds")))))));
296158
296161
  }));
296159
296162
  //#endregion
296163
+ //#region src/command/providerUsageEnvironment.ts
296164
+ function asRecord$3(value) {
296165
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
296166
+ }
296167
+ function positiveInteger(value) {
296168
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
296169
+ }
296170
+ function readEnvironmentId(value) {
296171
+ return typeof value === "string" && value.trim() !== "" ? value : null;
296172
+ }
296173
+ function readEligibleStatus(value) {
296174
+ return value === "running" || value === "suspended" ? value : null;
296175
+ }
296176
+ function isOwnedRuntime(row, ownerUserId) {
296177
+ return positiveInteger(row["userId"]) === ownerUserId;
296178
+ }
296179
+ function readRuntimeId(row) {
296180
+ const runtimeId = row["runtimeId"];
296181
+ return typeof runtimeId === "string" && runtimeId.trim() !== "" ? runtimeId : null;
296182
+ }
296183
+ function readCandidate(runtime, ownerUserId) {
296184
+ const row = asRecord$3(runtime);
296185
+ if (row === null || !isOwnedRuntime(row, ownerUserId) || row["desiredState"] !== "running") return null;
296186
+ const organizationId = positiveInteger(row["organizationId"]);
296187
+ const environmentId = readEnvironmentId(row["environmentId"]);
296188
+ const runtimeId = readRuntimeId(row);
296189
+ const status = readEligibleStatus(row["status"]);
296190
+ if (organizationId === null || environmentId === null || runtimeId === null || status === null) return null;
296191
+ return {
296192
+ organizationId,
296193
+ environmentId,
296194
+ runtimeId,
296195
+ status
296196
+ };
296197
+ }
296198
+ function candidateKey(candidate) {
296199
+ return `${candidate.organizationId}:${candidate.environmentId ?? ""}`;
296200
+ }
296201
+ function statusRank(status) {
296202
+ return status === "running" ? 0 : 1;
296203
+ }
296204
+ function deduplicateCandidates(candidates) {
296205
+ const byEnvironment = /* @__PURE__ */ new Map();
296206
+ for (const candidate of candidates) {
296207
+ const key = candidateKey(candidate);
296208
+ const existing = byEnvironment.get(key);
296209
+ if (existing === void 0 || statusRank(candidate.status) < statusRank(existing.status)) byEnvironment.set(key, candidate);
296210
+ }
296211
+ return [...byEnvironment.values()];
296212
+ }
296213
+ /**
296214
+ * Selects one authenticated owner's Environment from CMMD's projectless runtime
296215
+ * catalog. A tied best candidate fails closed, so Forge never chooses an
296216
+ * organization from browser input.
296217
+ */
296218
+ function selectProviderUsageEnvironment(rawCatalog, ownerUserId) {
296219
+ const runtimes = asRecord$3(asRecord$3(rawCatalog)?.["data"])?.["runtimes"];
296220
+ if (!Array.isArray(runtimes)) return { kind: "unavailable" };
296221
+ const candidates = deduplicateCandidates(runtimes.map((runtime) => readCandidate(runtime, ownerUserId)).filter((candidate) => candidate !== null));
296222
+ const bestRank = Math.min(...candidates.map((candidate) => statusRank(candidate.status)));
296223
+ const bestCandidates = candidates.filter((candidate) => statusRank(candidate.status) === bestRank);
296224
+ if (bestCandidates.length !== 1) return { kind: "unavailable" };
296225
+ return {
296226
+ kind: "ready",
296227
+ organizationId: bestCandidates[0].organizationId
296228
+ };
296229
+ }
296230
+ //#endregion
296160
296231
  //#region src/command/wsToken.ts
296161
296232
  /**
296162
296233
  * Build the WS token response given an optional PAT and the configured CMMD
@@ -296193,13 +296264,13 @@ function resolveWsUrl(baseUrl) {
296193
296264
  const callCmmdTool = legacyCmmdToolBridge.callTool;
296194
296265
  const extractMcpToolText = legacyCmmdToolBridge.extractText;
296195
296266
  const isCmmdMcpAuthError = legacyCmmdToolBridge.isAuthError;
296196
- var ClaudeUsageReadError = class extends TaggedError("ClaudeUsageReadError") {};
296197
296267
  /**
296198
296268
  * CMMD-side path for the PROJECT-keyed Forge Cloud catalog. Shared by the list
296199
296269
  * proxy, the SSE poll-and-emit proxy, and the register/unregister proxies so the
296200
296270
  * upstream contract lives in exactly one place.
296201
296271
  */
296202
296272
  const CMMD_CLOUD_PROJECTS_PATH = "/api/forge/context/cloud-projects";
296273
+ const CMMD_RUNTIMES_PATH = "/api/forge/context/runtimes";
296203
296274
  /**
296204
296275
  * Authenticate the browser session and resolve the CMMD JWT to forward
296205
296276
  * upstream. Returns null when no token could be resolved, which every caller
@@ -296323,6 +296394,10 @@ const cmmdBillingSeriesRouteLayer = registerProxyRoute({
296323
296394
  const cmmdRestUnavailable = () => new CmmdProxyAuthenticationRequiredError("CMMD connection required. Reconnect CMMD to continue.");
296324
296395
  function runCmmdRestProxy(session, proxy, dependencies = {}) {
296325
296396
  return gen(function* () {
296397
+ if (dependencies.jwt !== void 0) {
296398
+ const explicitJwt = dependencies.jwt;
296399
+ return yield* promise(() => (dependencies.runProxy ?? runProxy)(() => proxy(explicitJwt)));
296400
+ }
296326
296401
  const resolveJwt = dependencies.resolveJwt ?? resolveCmmdJwtForSession;
296327
296402
  const jwt = yield* resolveJwt({
296328
296403
  sessionId: session.sessionId,
@@ -297863,59 +297938,6 @@ const cmmdSetProviderAccountDefaultRouteLayer = registerProxyRoute({
297863
297938
  orgIdSource: "none",
297864
297939
  responseShape: "unwrapData"
297865
297940
  });
297866
- const resolveConnectedClaudeGeneration = (session) => gen(function* () {
297867
- const outcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
297868
- method: "GET",
297869
- jwt,
297870
- path: "/api/forge/context/providers/claude/credential"
297871
- }));
297872
- if (!outcome.ok) return outcome;
297873
- const state = unwrapForgeEnvelope(outcome.value);
297874
- if (state === null || typeof state !== "object" || !("connected" in state) || state.connected !== true || !("generationId" in state) || typeof state.generationId !== "string") return {
297875
- ok: true,
297876
- value: null
297877
- };
297878
- return {
297879
- ok: true,
297880
- value: {
297881
- generationId: state.generationId,
297882
- generationHash: createHash("sha256").update(state.generationId).digest("hex")
297883
- }
297884
- };
297885
- });
297886
- /**
297887
- * The GET path is read-only. The explicit per-account POST refresh invokes
297888
- * this helper and propagates any CMMD forward failure to the caller.
297889
- */
297890
- const forwardClaudeUsageTelemetry = (session, requestedProviderAccountId, activelyPoll = false, fetchClaudeUsage = fetchClaudeUsageViaOfficialClient) => gen(function* () {
297891
- const credentialOutcome = yield* resolveConnectedClaudeGeneration(session);
297892
- if (!credentialOutcome.ok) return credentialOutcome;
297893
- if (credentialOutcome.value === null) return null;
297894
- const { generationId, generationHash } = credentialOutcome.value;
297895
- const providerAccountId = requestedProviderAccountId ?? generationId;
297896
- const activeSnapshot = activelyPoll && providerAccountId === generationId ? yield* tryPromise({
297897
- try: () => fetchClaudeUsage({ binaryPath: resolveClaudeBinaryPath("claude") }),
297898
- catch: (cause) => new ClaudeUsageReadError({ cause })
297899
- }).pipe(orElseSucceed(() => null)) : null;
297900
- const snapshot = activeSnapshot ? {
297901
- ...activeSnapshot,
297902
- observedAt: (/* @__PURE__ */ new Date()).toISOString()
297903
- } : getLatestClaudeRateLimitTelemetry(generationHash, providerAccountId);
297904
- if (!snapshot) return null;
297905
- return yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
297906
- method: "POST",
297907
- jwt,
297908
- path: "/api/forge/context/providers/usage/claude/telemetry",
297909
- body: {
297910
- providerAccountId,
297911
- credentialGenerationId: generationId,
297912
- source: activeSnapshot ? "active_poll" : "passive_sdk_telemetry",
297913
- fiveHour: snapshot.fiveHour,
297914
- sevenDay: snapshot.sevenDay,
297915
- observedAt: snapshot.observedAt
297916
- }
297917
- }));
297918
- });
297919
297941
  const cmmdGetProviderUsageRouteLayer = add$1("GET", "/api/cmmd/providers/usage", gen(function* () {
297920
297942
  const request = yield* HttpServerRequest;
297921
297943
  const outcome = yield* runCmmdRestProxy(yield* (yield* ServerAuth).authenticateHttpRequest(request), (jwt) => cmmdGateway.request({
@@ -297936,15 +297958,62 @@ function parseProviderUsageRefreshInput(rawBody) {
297936
297958
  providerAccountId: body.providerAccountId
297937
297959
  };
297938
297960
  }
297939
- const cmmdRefreshProviderUsageRouteLayer = add$1("POST", "/api/cmmd/providers/usage/refresh", gen(function* () {
297940
- const request = yield* HttpServerRequest;
297941
- const session = yield* (yield* ServerAuth).authenticateHttpRequest(request);
297942
- const input = parseProviderUsageRefreshInput(yield* request.json);
297943
- if (input === null) return jsonUnsafe({ error: "provider and providerAccountId must identify a connected provider account" }, { status: 400 });
297944
- const claudeOutcome = input.provider === "claude" ? yield* forwardClaudeUsageTelemetry(session, input.providerAccountId, true) : null;
297945
- if (input.provider === "claude" && claudeOutcome !== null && !claudeOutcome.ok) return buildProxyErrorResponse(claudeOutcome.error);
297946
- if (input.provider === "claude" && claudeOutcome === null) return jsonUnsafe({ error: "No exact-account Claude usage observation is available in this runtime." }, { status: 503 });
297947
- if (input.provider === "codex") {
297961
+ function resolveProviderUsageOwnerUserId(session) {
297962
+ const identity = readCmmdUserIdentityForSession(session.sessionId);
297963
+ const userId = identity === null ? NaN : Number(identity.id);
297964
+ return Number.isSafeInteger(userId) && userId > 0 ? userId : null;
297965
+ }
297966
+ function buildClaudeUsageRefreshErrorResponse(error) {
297967
+ return jsonUnsafe({
297968
+ error: "Claude usage refresh is unavailable.",
297969
+ code: "CLAUDE_USAGE_REFRESH_UNAVAILABLE"
297970
+ }, { status: error instanceof CmmdProxyRequestError && error.status === 503 ? 503 : 502 });
297971
+ }
297972
+ function makeRefreshProviderUsageHandler(dependencies = {}) {
297973
+ return gen(function* () {
297974
+ const request = yield* HttpServerRequest;
297975
+ const session = yield* (yield* ServerAuth).authenticateHttpRequest(request);
297976
+ const input = parseProviderUsageRefreshInput(yield* request.json);
297977
+ if (input === null) return jsonUnsafe({ error: "provider and providerAccountId must identify a connected provider account" }, { status: 400 });
297978
+ if (input.provider === "claude") {
297979
+ const requestJwt = yield* (dependencies.resolveJwt ?? resolveCmmdJwtForSession)({
297980
+ sessionId: session.sessionId,
297981
+ subject: session.subject,
297982
+ logPrefix: "claude-usage-refresh"
297983
+ });
297984
+ if (!requestJwt) return buildClaudeUsageRefreshErrorResponse(/* @__PURE__ */ new Error("CMMD authentication required."));
297985
+ const ownerUserId = resolveProviderUsageOwnerUserId(session);
297986
+ if (ownerUserId === null) return jsonUnsafe({
297987
+ error: "CMMD owner identity is unavailable for Claude usage refresh.",
297988
+ code: "CLAUDE_USAGE_ENVIRONMENT_UNAVAILABLE"
297989
+ }, { status: 503 });
297990
+ const catalogOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
297991
+ method: "GET",
297992
+ jwt,
297993
+ path: CMMD_RUNTIMES_PATH
297994
+ }), { jwt: requestJwt });
297995
+ if (!catalogOutcome.ok) return buildClaudeUsageRefreshErrorResponse(catalogOutcome.error);
297996
+ const target = selectProviderUsageEnvironment(catalogOutcome.value, ownerUserId);
297997
+ if (target.kind === "unavailable") return jsonUnsafe({
297998
+ error: "No owned Environment with running intent is available for Claude usage refresh.",
297999
+ code: "CLAUDE_USAGE_ENVIRONMENT_UNAVAILABLE"
298000
+ }, { status: 503 });
298001
+ const refreshOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
298002
+ method: "POST",
298003
+ jwt,
298004
+ path: "/api/forge/context/providers/usage/claude/refresh",
298005
+ body: { providerAccountId: input.providerAccountId },
298006
+ orgId: String(target.organizationId)
298007
+ }), { jwt: requestJwt });
298008
+ if (!refreshOutcome.ok) return buildClaudeUsageRefreshErrorResponse(refreshOutcome.error);
298009
+ const snapshotOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
298010
+ method: "GET",
298011
+ jwt,
298012
+ path: "/api/forge/context/providers/usage"
298013
+ }), { jwt: requestJwt });
298014
+ if (!snapshotOutcome.ok) return buildClaudeUsageRefreshErrorResponse(snapshotOutcome.error);
298015
+ return jsonUnsafe(unwrapForgeEnvelope(snapshotOutcome.value), { status: 200 });
298016
+ }
297948
298017
  const refreshOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
297949
298018
  method: "POST",
297950
298019
  jwt,
@@ -297952,16 +298021,16 @@ const cmmdRefreshProviderUsageRouteLayer = add$1("POST", "/api/cmmd/providers/us
297952
298021
  body: { providerAccountId: input.providerAccountId }
297953
298022
  }));
297954
298023
  if (!refreshOutcome.ok) return buildProxyErrorResponse(refreshOutcome.error);
297955
- if (claudeOutcome !== null && !claudeOutcome.ok) return buildProxyErrorResponse(claudeOutcome.error);
297956
- }
297957
- const outcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
297958
- method: "GET",
297959
- jwt,
297960
- path: "/api/forge/context/providers/usage"
297961
- }));
297962
- if (!outcome.ok) return buildProxyErrorResponse(outcome.error);
297963
- return jsonUnsafe(unwrapForgeEnvelope(outcome.value), { status: 200 });
297964
- }).pipe(catchTag("AuthError", (error) => respondToAuthError(error))));
298024
+ const snapshotOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
298025
+ method: "GET",
298026
+ jwt,
298027
+ path: "/api/forge/context/providers/usage"
298028
+ }));
298029
+ if (!snapshotOutcome.ok) return buildProxyErrorResponse(snapshotOutcome.error);
298030
+ return jsonUnsafe(unwrapForgeEnvelope(snapshotOutcome.value), { status: 200 });
298031
+ }).pipe(catchTag("AuthError", (error) => respondToAuthError(error)));
298032
+ }
298033
+ const cmmdRefreshProviderUsageRouteLayer = add$1("POST", "/api/cmmd/providers/usage/refresh", makeRefreshProviderUsageHandler());
297965
298034
  const cmmdGetUserCodexCredentialRouteLayer = registerProxyRoute({
297966
298035
  forgePath: "/api/cmmd/providers/codex/credential",
297967
298036
  method: "GET",
@@ -308993,6 +309062,82 @@ const claudeNativeGenerationProofRouteLayer = add$1("GET", "/api/runtime/provide
308993
309062
  generationHash: yield* readUsableClaudeGenerationHash(config)
308994
309063
  });
308995
309064
  }));
309065
+ const defaultClaudeUsageRouteDependencies = {
309066
+ readCredential: async (token) => {
309067
+ const base = process.env.FORGE_CMMD_RUNTIME_CONTROL_PLANE_URL?.trim() ?? "";
309068
+ if (!base) return null;
309069
+ const response = await fetch(`${base.replace(/\/+$/u, "")}/api/forge/context/auth-runtime-claude-credential`, {
309070
+ headers: {
309071
+ authorization: `Bearer ${token}`,
309072
+ accept: "application/json"
309073
+ },
309074
+ signal: AbortSignal.timeout(2e4)
309075
+ });
309076
+ return response.ok ? response.text() : null;
309077
+ },
309078
+ createDirectory: () => mkdtemp(join(tmpdir(), "forge-claude-usage-")),
309079
+ writeCredential: (directory, credential) => writeFile(join(directory, ".credentials.json"), credential, { mode: 384 }),
309080
+ loadUsage: (directory) => fetchClaudeUsageViaOfficialClient({
309081
+ binaryPath: resolveClaudeBinaryPath("claude"),
309082
+ claudeConfigDir: directory
309083
+ }),
309084
+ removeDirectory: (directory) => rm(directory, {
309085
+ recursive: true,
309086
+ force: false
309087
+ }),
309088
+ now: () => /* @__PURE__ */ new Date()
309089
+ };
309090
+ const claudeUsageHandler = (dependencies) => gen(function* () {
309091
+ const request = yield* HttpServerRequest;
309092
+ const config = yield* ServerConfig;
309093
+ const token = claudeReadinessToken(request.headers.authorization);
309094
+ const required = completeClaudeReadinessExpectations(config);
309095
+ if (!token || !required) return unauthorizedClaudeReadinessResponse();
309096
+ const claims = verifyCmmdClaudeUsageTicket(token, required);
309097
+ if (!claims) return unauthorizedClaudeReadinessResponse();
309098
+ const claimed = claimClaudeReadinessJti({
309099
+ jti: claims.jti,
309100
+ expiresAtSeconds: claims.expiresAtSeconds,
309101
+ nowSeconds: Math.floor(Date.now() / 1e3)
309102
+ });
309103
+ if (claimed === "replayed") return unauthorizedClaudeReadinessResponse();
309104
+ if (claimed === "capacity_exhausted") return jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
309105
+ return yield* promise(async () => {
309106
+ let directory = null;
309107
+ let response = jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
309108
+ try {
309109
+ directory = await dependencies.createDirectory();
309110
+ const credentialJson = await dependencies.readCredential(token);
309111
+ if (credentialJson !== null && isClaudeSubscriptionCredential(credentialJson)) {
309112
+ await dependencies.writeCredential(directory, credentialJson);
309113
+ const usage = await dependencies.loadUsage(directory);
309114
+ response = jsonUnsafe({
309115
+ fiveHour: usage.fiveHour,
309116
+ sevenDay: usage.sevenDay,
309117
+ observedAt: dependencies.now().toISOString(),
309118
+ receipt: {
309119
+ orgId: claims.orgId,
309120
+ userId: claims.userId,
309121
+ runtimeId: claims.runtimeId,
309122
+ machineId: claims.machineId,
309123
+ credentialEpoch: claims.credentialEpoch,
309124
+ providerAccountId: claims.providerAccountId,
309125
+ credentialGenerationId: claims.generationId
309126
+ }
309127
+ }, { headers: { "cache-control": "no-store" } });
309128
+ }
309129
+ } catch {}
309130
+ if (directory === null) return response;
309131
+ try {
309132
+ await dependencies.removeDirectory(directory);
309133
+ } catch {
309134
+ return jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
309135
+ }
309136
+ return response;
309137
+ });
309138
+ });
309139
+ const createClaudeUsageRouteLayer = (dependencies = defaultClaudeUsageRouteDependencies) => add$1("POST", "/api/runtime/provider-usage/claude", claudeUsageHandler(dependencies));
309140
+ const claudeUsageRouteLayer = createClaudeUsageRouteLayer();
308996
309141
  /**
308997
309142
  * FINDING-CB1 — workspace readiness SSE endpoint.
308998
309143
  *
@@ -309336,7 +309481,7 @@ const MiscRuntimeLayerLive = mergeAll(AnalyticsServiceLayerLive, OpenLive, Serve
309336
309481
  const RuntimeDependenciesWithoutPullRequestsLive = ReactorLayerLive.pipe(provideMerge(CheckpointingLayerLive), provideMerge(GitLayerLive), provideMerge(OrchestrationLayerLive), provideMerge(ProviderLayerLive), provideMerge(TerminalLayerLive), provideMerge(AgentBrowserManagerLive), provideMerge(mergeAll(ThreadDevRuntimeLive, DevTunnelLive.pipe(provide$1(ThreadDevRuntimeLive)))), provideMerge(PersistenceLayerLive), provideMerge(KeybindingsLive), provideMerge(ProviderRegistryLive), provideMerge(mergeAll(ServerSettingsLive, UsageServiceLive.pipe(provide$1(ServerSettingsLive)))), provideMerge(WorkspaceLayerLive), provideMerge(WorkspaceReadinessStateLive), provideMerge(ProjectFaviconResolverLive), provideMerge(RepositoryIdentityResolverLive), provideMerge(ServerEnvironmentLive), provideMerge(AuthLayerLive), provideMerge(ServerSecretStoreLayerLive), provideMerge(mergeAll(CloudRedisCoordinationLive, CloudStateSyncLive.pipe(provide$1(PersistenceLayerLive)))), provideMerge(MiscRuntimeLayerLive));
309337
309482
  const RuntimeDependenciesLive = pullRequestServiceFactoryLayer.pipe(provideMerge(RuntimeDependenciesWithoutPullRequestsLive), provideMerge(cmmdProjectIdentityResolverLive.pipe(provide$1(RuntimeDependenciesWithoutPullRequestsLive))), provideMerge(pullRequestProviderRuntimeLive));
309338
309483
  const RuntimeServicesLive = ServerRuntimeStartupLive.pipe(provideMerge(RuntimeDependenciesLive));
309339
- const makeRoutesLayer = mergeAll(authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authOAuthTokenExchangeRouteLayer, authWebSocketTicketRouteLayer, 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, cmmdForgeCloudProjectRemovalPreviewRouteLayer, cmmdForgeCloudProjectRemovalReceiptRouteLayer, cmmdForgeRuntimesEnsureRouteLayer, cmmdForgeRuntimesConnectRouteLayer, ownerRuntimeCodexReadinessRouteLayer, cmmdForgeRuntimesStatusRouteLayer, cmmdForgeRuntimesStartRouteLayer, cmmdForgeRuntimesStopRouteLayer, cmmdForgeRuntimesRecycleRouteLayer, cmmdForgeRuntimesUpdateCommitRouteLayer, cmmdForgeRuntimesDestroyRouteLayer, cmmdGetTaskRouteLayer, commandUpdateTaskRouteLayer, mobileProviderCatalogRouteLayer, cmmdUsageSummaryRouteLayer, cmmdBillingRouteLayer, cmmdBillingSeriesRouteLayer, attachmentsRouteLayer, orchestrationDispatchRouteLayer, orchestrationCmmdWorkRunEventRouteLayer, orchestrationAutomationStartThreadRouteLayer, orchestrationAutomationRebindRouteLayer, orchestrationAutomationTerminalReconcileRouteLayer, mobileGitRunStackedActionRouteLayer, pullRequestDiffRouteLayer, orchestrationSnapshotRouteLayer, localAutomationListRouteLayer, localAutomationCreateRouteLayer, localAutomationUpdateRouteLayer, localAutomationDeleteRouteLayer, localAutomationRunRouteLayer, otlpTracesProxyRouteLayer, devTunnelProxyRouteLayer, devTunnelLocalPortProxyRouteLayer, projectFaviconRouteLayer, serverEnvironmentRouteLayer, browserWebRtcReadinessRouteLayer, staticAndDevRouteLayer, githubStatusRouteLayer, githubAuthorizeUrlRouteLayer, githubDisconnectRouteLayer, githubReposRouteLayer, githubCloneRouteLayer, githubCloneJobStartRouteLayer, githubCloneJobStatusRouteLayer, githubRefreshCredentialsRouteLayer, githubToolConfirmationApproveRouteLayer, projectLinkGetRouteLayer, projectLinkListRouteLayer, projectLinkSetRouteLayer, projectLinkDeleteRouteLayer, cmmdWorkspacesRouteLayer, cmmdCampaignsRouteLayer, cmmdProjectLinksRouteLayer, cmmdEnsureGitHubProjectContextRouteLayer, cmmdProjectRepositoryEnsureRouteLayer, cmmdProjectsGetRouteLayer, cmmdProjectsCreateRouteLayer, workspaceReadinessRouteLayer, runtimeLivenessRouteLayer, claudeNativeGenerationProofRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(provide$1(browserApiCorsLayer));
309484
+ const makeRoutesLayer = mergeAll(authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authCommandBearerBootstrapRouteLayer, authCommandBootstrapRouteLayer, authOAuthTokenExchangeRouteLayer, authWebSocketTicketRouteLayer, 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, cmmdForgeCloudProjectRemovalPreviewRouteLayer, 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, claudeUsageRouteLayer, codexRuntimeProviderReadinessRouteLayer, runtimeDiagnosticsRouteLayer, cloudFoldersRouteLayer, cloudProjectCreateRouteLayer, gitUrlCloneRouteLayer, websocketRpcRouteLayer).pipe(provide$1(browserApiCorsLayer));
309340
309485
  const runServer = launch$1(unwrap(gen(function* () {
309341
309486
  const config = yield* ServerConfig;
309342
309487
  fixPath();