@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.cjs CHANGED
@@ -12,7 +12,7 @@ const require_Cache = require("./Cache-U1fkdGvV.cjs");
12
12
  const require_SqlError = require("./SqlError-CSsHBaKF.cjs");
13
13
  const require_Mime = require("./Mime-Bilnh8zE.cjs");
14
14
  const require_esm = require("./esm-BZhXwX5p.cjs");
15
- const require_runtimeControlAuthority = require("./runtimeControlAuthority-45DPznyK.cjs");
15
+ const require_runtimeControlAuthority = require("./runtimeControlAuthority-BdIovv-r.cjs");
16
16
  const require_PTY = require("./PTY-CNa0j0w2.cjs");
17
17
  let node_child_process = require("node:child_process");
18
18
  node_child_process = require_chunk.__toESM(node_child_process);
@@ -32319,7 +32319,7 @@ function requiredString(value, minimumLength = 1) {
32319
32319
  if (typeof value !== "string" || value.length < minimumLength) return identityCorrupt();
32320
32320
  return value;
32321
32321
  }
32322
- function positiveInteger$1(value) {
32322
+ function positiveInteger$2(value) {
32323
32323
  if (!Number.isInteger(value) || Number(value) <= 0) return identityCorrupt();
32324
32324
  return Number(value);
32325
32325
  }
@@ -32339,7 +32339,7 @@ function parseChallenge(value) {
32339
32339
  if (!value || typeof value !== "object") return identityCorrupt();
32340
32340
  const record = value;
32341
32341
  return {
32342
- deviceId: positiveInteger$1(record.deviceId),
32342
+ deviceId: positiveInteger$2(record.deviceId),
32343
32343
  challengeId: requiredString(record.challengeId, 8),
32344
32344
  signingPayload: requiredString(record.signingPayload),
32345
32345
  currentKeyId: requiredString(record.currentKeyId),
@@ -65123,7 +65123,7 @@ function normalizeNumberish(value) {
65123
65123
  }
65124
65124
  //#endregion
65125
65125
  //#region package.json
65126
- var version$1 = "0.9.13";
65126
+ var version$1 = "0.9.14";
65127
65127
  //#endregion
65128
65128
  //#region src/sentry.ts
65129
65129
  const SERVER_APP_NAME = "forge-server";
@@ -65596,7 +65596,7 @@ function readCmmdAvatarUrl(raw) {
65596
65596
  function readTrimmedString$2(value) {
65597
65597
  return typeof value === "string" ? value.trim() || null : null;
65598
65598
  }
65599
- function asRecord$11(value) {
65599
+ function asRecord$12(value) {
65600
65600
  return value && typeof value === "object" ? value : null;
65601
65601
  }
65602
65602
  function readDirectPlanLabelFromRecord(obj) {
@@ -65608,26 +65608,26 @@ function readNestedPlanLabelFromRecord(obj) {
65608
65608
  function readCmmdPlanLabel(obj) {
65609
65609
  const direct = readDirectPlanLabelFromRecord(obj);
65610
65610
  if (direct) return direct;
65611
- const plan = asRecord$11(obj["plan"]);
65611
+ const plan = asRecord$12(obj["plan"]);
65612
65612
  if (plan) {
65613
65613
  const label = readNestedPlanLabelFromRecord(plan);
65614
65614
  if (label) return label;
65615
65615
  }
65616
- const subscription = asRecord$11(obj["subscription"]);
65616
+ const subscription = asRecord$12(obj["subscription"]);
65617
65617
  if (subscription) {
65618
65618
  const label = readNestedPlanLabelFromRecord(subscription);
65619
65619
  if (label) return label;
65620
- const subscriptionPlan = asRecord$11(subscription["plan"]);
65620
+ const subscriptionPlan = asRecord$12(subscription["plan"]);
65621
65621
  if (subscriptionPlan) {
65622
65622
  const nestedLabel = readNestedPlanLabelFromRecord(subscriptionPlan);
65623
65623
  if (nestedLabel) return nestedLabel;
65624
65624
  }
65625
65625
  }
65626
- const billing = asRecord$11(obj["billing"]);
65626
+ const billing = asRecord$12(obj["billing"]);
65627
65627
  if (billing) {
65628
65628
  const label = readNestedPlanLabelFromRecord(billing);
65629
65629
  if (label) return label;
65630
- const billingPlan = asRecord$11(billing["plan"]);
65630
+ const billingPlan = asRecord$12(billing["plan"]);
65631
65631
  if (billingPlan) return readNestedPlanLabelFromRecord(billingPlan);
65632
65632
  }
65633
65633
  return null;
@@ -65764,7 +65764,7 @@ function constantTimeEqual(left, right) {
65764
65764
  function integerSeconds(value) {
65765
65765
  return Number.isSafeInteger(value) && value >= 0 ? value : null;
65766
65766
  }
65767
- function positiveInteger(value) {
65767
+ function positiveInteger$1(value) {
65768
65768
  return Number.isSafeInteger(value) && value > 0 ? value : null;
65769
65769
  }
65770
65770
  function parseAssertion(token) {
@@ -65791,7 +65791,7 @@ function hasExpectedPayloadContext(payload) {
65791
65791
  function readRequiredClaims(payload) {
65792
65792
  const subject = nonEmptyString$1(payload["sub"]);
65793
65793
  if (!subject) return null;
65794
- const userId = positiveInteger(payload["user_id"]);
65794
+ const userId = positiveInteger$1(payload["user_id"]);
65795
65795
  if (!userId) return null;
65796
65796
  const jti = nonEmptyString$1(payload["jti"]);
65797
65797
  if (!jti) return null;
@@ -69408,22 +69408,22 @@ const EMPTY_PARSED_ERROR = {
69408
69408
  message: null,
69409
69409
  raw: null
69410
69410
  };
69411
- function asRecord$10(value) {
69411
+ function asRecord$11(value) {
69412
69412
  return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
69413
69413
  }
69414
69414
  function readTrimmedString$1(value) {
69415
69415
  return (typeof value === "string" ? value.trim() : "") || null;
69416
69416
  }
69417
69417
  function readErrorEnvelope(record) {
69418
- return asRecord$10(record["error"]);
69418
+ return asRecord$11(record["error"]);
69419
69419
  }
69420
69420
  function readUpstreamErrorCode(body) {
69421
- const record = asRecord$10(body);
69421
+ const record = asRecord$11(body);
69422
69422
  if (record === null) return null;
69423
69423
  return readTrimmedString$1(record["code"]) ?? readTrimmedString$1(readErrorEnvelope(record)?.["code"]);
69424
69424
  }
69425
69425
  function readErrorMessage$2(raw) {
69426
- const record = asRecord$10(raw);
69426
+ const record = asRecord$11(raw);
69427
69427
  if (record === null) return null;
69428
69428
  const error = record["error"];
69429
69429
  const nestedMessage = readErrorEnvelope(record)?.["message"];
@@ -70055,7 +70055,7 @@ function buildProxyErrorResponse(error) {
70055
70055
  code: error.code
70056
70056
  }, { status: 403 });
70057
70057
  if (error instanceof CmmdProxyRequestError) {
70058
- const status = error.status >= 500 ? 502 : error.status;
70058
+ const status = error.status === 503 ? 503 : error.status >= 500 ? 502 : error.status;
70059
70059
  return require_HttpServer.jsonUnsafe({
70060
70060
  error: error.detail ?? "CMMD REST request failed.",
70061
70061
  code: error.code,
@@ -96807,7 +96807,7 @@ const EMPTY_PLAN_VALUES = new Set([
96807
96807
  "none",
96808
96808
  "null"
96809
96809
  ]);
96810
- function asRecord$9(value) {
96810
+ function asRecord$10(value) {
96811
96811
  if (!value || typeof value !== "object" || Array.isArray(value)) return void 0;
96812
96812
  return value;
96813
96813
  }
@@ -96824,7 +96824,7 @@ function decodeJwtClaims(token) {
96824
96824
  try {
96825
96825
  const decoded = Buffer.from(payload, "base64url");
96826
96826
  if (decoded.byteLength > MAX_CLAIMS_BYTES) return void 0;
96827
- return asRecord$9(JSON.parse(decoded.toString("utf8")));
96827
+ return asRecord$10(JSON.parse(decoded.toString("utf8")));
96828
96828
  } catch {
96829
96829
  return;
96830
96830
  }
@@ -96846,7 +96846,7 @@ function findPlanType(claims) {
96846
96846
  const direct = fromRecord(claims);
96847
96847
  if (direct) return direct;
96848
96848
  for (const value of Object.values(claims)) {
96849
- const nested = asRecord$9(value);
96849
+ const nested = asRecord$10(value);
96850
96850
  if (!nested) continue;
96851
96851
  const found = fromRecord(nested);
96852
96852
  if (found) return found;
@@ -96863,7 +96863,7 @@ function readCodexAuthIdentity(authJson) {
96863
96863
  } catch {
96864
96864
  return {};
96865
96865
  }
96866
- const claims = decodeJwtClaims(asRecord$9(asRecord$9(parsed)?.tokens)?.id_token);
96866
+ const claims = decodeJwtClaims(asRecord$10(asRecord$10(parsed)?.tokens)?.id_token);
96867
96867
  if (!claims) return {};
96868
96868
  const email = findEmail(claims);
96869
96869
  const planType = findPlanType(claims);
@@ -97060,11 +97060,6 @@ function recordClaudeRateLimitTelemetry(info, generationHash = currentClaudeUsag
97060
97060
  observedAt: [fiveHourObservedAt, sevenDayObservedAt].filter((value) => value !== null).toSorted()[0]
97061
97061
  });
97062
97062
  }
97063
- function getLatestClaudeRateLimitTelemetry(generationHash = currentClaudeUsageGenerationHash(), providerAccountId) {
97064
- if (generationHash === null) return null;
97065
- const cacheKey = providerAccountId ? `${providerAccountId}:${generationHash}` : generationHash;
97066
- return cachedSnapshots.get(cacheKey) ?? null;
97067
- }
97068
97063
  //#endregion
97069
97064
  //#region src/providerAuth/ClaudeDeviceAuth.ts
97070
97065
  const AUTHORIZE_URL_PATTERN = /https:\/\/[^\s]*\/oauth\/authorize\?[^\s]+/u;
@@ -97443,17 +97438,23 @@ async function loadClaudeAccountMetadataFromCli(homePath) {
97443
97438
  function extractClaudeCredentialGenerationId(response) {
97444
97439
  if (typeof response !== "object" || response === null || !("data" in response)) return null;
97445
97440
  const data = response.data;
97446
- if (typeof data !== "object" || data === null || !("connected" in data) || !data.connected) return null;
97447
- if (!("generationId" in data) || typeof data.generationId !== "string") return null;
97448
- const generationId = data.generationId.trim();
97441
+ if (typeof data !== "object" || data === null) return null;
97442
+ if ("connected" in data && data.connected === true && "generationId" in data && typeof data.generationId === "string") {
97443
+ const generationId = data.generationId.trim();
97444
+ return generationId.length > 0 ? generationId : null;
97445
+ }
97446
+ if (!("account" in data) || typeof data.account !== "object" || data.account === null) return null;
97447
+ const account = data.account;
97448
+ if (!("credentialGenerationId" in account) || typeof account.credentialGenerationId !== "string") return null;
97449
+ const generationId = account.credentialGenerationId.trim();
97449
97450
  return generationId.length > 0 ? generationId : null;
97450
97451
  }
97451
97452
  function extractClaudeProviderAccountId(response) {
97452
- const generationId = extractClaudeCredentialGenerationId(response);
97453
- if (generationId !== null) return generationId;
97454
97453
  if (typeof response !== "object" || response === null || !("data" in response)) return null;
97455
97454
  const data = response.data;
97456
- if (typeof data !== "object" || data === null || !("account" in data)) return null;
97455
+ if (typeof data !== "object" || data === null) return null;
97456
+ if ("connected" in data && data.connected === true) return extractClaudeCredentialGenerationId(response);
97457
+ if (!("account" in data)) return null;
97457
97458
  const account = data.account;
97458
97459
  if (typeof account !== "object" || account === null || !("providerAccountId" in account) || typeof account.providerAccountId !== "string") return null;
97459
97460
  const providerAccountId = account.providerAccountId.trim();
@@ -97481,7 +97482,7 @@ async function publishClaudeUsageAfterSync(input) {
97481
97482
  path: input.auth.path === AUTH_RUNTIME_CLAUDE_CREDENTIAL_PATH ? AUTH_RUNTIME_CLAUDE_USAGE_PATH : USER_CLAUDE_USAGE_PATH,
97482
97483
  body: {
97483
97484
  providerAccountId: input.providerAccountId,
97484
- credentialGenerationId: input.providerAccountId,
97485
+ credentialGenerationId: input.credentialGenerationId,
97485
97486
  accountEmail: input.accountEmail,
97486
97487
  accountDisplayName: input.accountDisplayName,
97487
97488
  planType: input.planType,
@@ -97498,11 +97499,13 @@ async function publishClaudeUsageAfterSync(input) {
97498
97499
  }
97499
97500
  async function finalizeClaudeCredentialSync(input) {
97500
97501
  const providerAccountId = extractClaudeProviderAccountId(input.response);
97501
- if (providerAccountId === null) return null;
97502
- if (input.auth.path === USER_CLAUDE_CREDENTIAL_PATH) setLocalClaudeUsageGeneration(providerAccountId);
97502
+ const credentialGenerationId = extractClaudeCredentialGenerationId(input.response);
97503
+ if (providerAccountId === null || credentialGenerationId === null) return null;
97504
+ if (input.auth.path === USER_CLAUDE_CREDENTIAL_PATH) setLocalClaudeUsageGeneration(credentialGenerationId);
97503
97505
  return publishClaudeUsageAfterSync({
97504
97506
  auth: input.auth,
97505
97507
  providerAccountId,
97508
+ credentialGenerationId,
97506
97509
  accountEmail: input.accountEmail,
97507
97510
  accountDisplayName: input.accountDisplayName,
97508
97511
  planType: input.planType,
@@ -172080,7 +172083,7 @@ function em(e) {
172080
172083
  BO ??= new Int32Array(new SharedArrayBuffer(4)), Atomics.wait(BO, 0, 0, SY);
172081
172084
  }
172082
172085
  }
172083
- function rm$4(e, t) {
172086
+ function rm$5(e, t) {
172084
172087
  let n = (0, path.resolve)(t).toLowerCase(), r = (0, path.dirname)((0, path.resolve)(e)).toLowerCase();
172085
172088
  if (r === n || KO(r, n) || qO(r, n, "lexical")) return !0;
172086
172089
  let o = em(t)?.toLowerCase();
@@ -184930,7 +184933,7 @@ function Wo() {
184930
184933
  }
184931
184934
  function sle(e) {
184932
184935
  let t = process.cwd();
184933
- return e.filter((n) => !rm$4(n, t));
184936
+ return e.filter((n) => !rm$5(n, t));
184934
184937
  }
184935
184938
  function ZU(e) {
184936
184939
  let t = Bun.which(e);
@@ -203870,7 +203873,7 @@ const collectStreamAsString = (stream) => stream.pipe(require_Path.decodeText(),
203870
203873
  //#region src/orchestration/WorkerPlanCodexTools.ts
203871
203874
  const FORGE_PROPOSE_WORKER_TASKS_TOOL = "forge_propose_worker_tasks";
203872
203875
  const MAX_WORKER_PLAN_ITEMS = 5;
203873
- function asRecord$8(value) {
203876
+ function asRecord$9(value) {
203874
203877
  return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
203875
203878
  }
203876
203879
  function readTrimmedString(value) {
@@ -203886,7 +203889,7 @@ function isValidWorkerSummary(value) {
203886
203889
  return value !== void 0 && value.length > 0 && value.length <= 4e3;
203887
203890
  }
203888
203891
  function decodeWorkerPlanItem(value) {
203889
- const item = asRecord$8(value);
203892
+ const item = asRecord$9(value);
203890
203893
  const slug = readTrimmedString(item?.slug);
203891
203894
  const title = readTrimmedString(item?.title);
203892
203895
  const summary = readTrimmedString(item?.summary);
@@ -203950,7 +203953,7 @@ function createWorkerPlanDynamicTools() {
203950
203953
  function createWorkerPlanDynamicToolHandler() {
203951
203954
  return async (input) => {
203952
203955
  if (input.tool !== "forge_propose_worker_tasks") throw new Error(`Unsupported worker-plan tool: ${input.tool}`);
203953
- if (!decodeWorkerPlanItems(asRecord$8(input.arguments)?.items)) throw new Error("Worker plans require one to five unique, fully described items.");
203956
+ if (!decodeWorkerPlanItems(asRecord$9(input.arguments)?.items)) throw new Error("Worker plans require one to five unique, fully described items.");
203954
203957
  return {
203955
203958
  success: true,
203956
203959
  contentItems: [{
@@ -205673,25 +205676,25 @@ const AUTH_METHOD_CONTAINER_KEYS = [
205673
205676
  /** Lift an unknown value into `Option<string>` if it is a non-empty string. */
205674
205677
  const asNonEmptyString = (v) => typeof v === "string" && v.length > 0 ? require_Schema$1.some(v) : require_Schema$1.none();
205675
205678
  /** Lift an unknown value into `Option<Record>` if it is a plain object. */
205676
- const asRecord$7 = (v) => typeof v === "object" && v !== null && !globalThis.Array.isArray(v) ? require_Schema$1.some(v) : require_Schema$1.none();
205679
+ const asRecord$8 = (v) => typeof v === "object" && v !== null && !globalThis.Array.isArray(v) ? require_Schema$1.some(v) : require_Schema$1.none();
205677
205680
  /**
205678
205681
  * Walk an unknown parsed JSON value looking for a subscription/plan
205679
205682
  * identifier, returning the first match as an `Option`.
205680
205683
  */
205681
205684
  function findSubscriptionType(value) {
205682
205685
  if (globalThis.Array.isArray(value)) return require_Schema$1.firstSomeOf(value.map(findSubscriptionType));
205683
- return asRecord$7(value).pipe(require_Schema$1.flatMap$2((record) => {
205686
+ return asRecord$8(value).pipe(require_Schema$1.flatMap$2((record) => {
205684
205687
  const direct = require_Schema$1.firstSomeOf(SUBSCRIPTION_TYPE_KEYS.map((key) => asNonEmptyString(record[key])));
205685
205688
  if (require_Schema$1.isSome(direct)) return direct;
205686
- return require_Schema$1.firstSomeOf(SUBSCRIPTION_CONTAINER_KEYS.map((key) => asRecord$7(record[key]).pipe(require_Schema$1.flatMap$2(findSubscriptionType))));
205689
+ return require_Schema$1.firstSomeOf(SUBSCRIPTION_CONTAINER_KEYS.map((key) => asRecord$8(record[key]).pipe(require_Schema$1.flatMap$2(findSubscriptionType))));
205687
205690
  }));
205688
205691
  }
205689
205692
  function findAuthMethod(value) {
205690
205693
  if (globalThis.Array.isArray(value)) return require_Schema$1.firstSomeOf(value.map(findAuthMethod));
205691
- return asRecord$7(value).pipe(require_Schema$1.flatMap$2((record) => {
205694
+ return asRecord$8(value).pipe(require_Schema$1.flatMap$2((record) => {
205692
205695
  const direct = require_Schema$1.firstSomeOf(AUTH_METHOD_KEYS.map((key) => asNonEmptyString(record[key])));
205693
205696
  if (require_Schema$1.isSome(direct)) return direct;
205694
- return require_Schema$1.firstSomeOf(AUTH_METHOD_CONTAINER_KEYS.map((key) => asRecord$7(record[key]).pipe(require_Schema$1.flatMap$2(findAuthMethod))));
205697
+ return require_Schema$1.firstSomeOf(AUTH_METHOD_CONTAINER_KEYS.map((key) => asRecord$8(record[key]).pipe(require_Schema$1.flatMap$2(findAuthMethod))));
205695
205698
  }));
205696
205699
  }
205697
205700
  /**
@@ -206839,7 +206842,7 @@ function userInputQuestionsFromToolInput(toolInput) {
206839
206842
  return (Array.isArray(toolInput.questions) ? toolInput.questions : []).map((question, idx) => userInputQuestionFromUnknown(question, idx));
206840
206843
  }
206841
206844
  function userInputQuestionFromUnknown(question, idx) {
206842
- const value = asRecord$6(question) ?? {};
206845
+ const value = asRecord$7(question) ?? {};
206843
206846
  return {
206844
206847
  id: typeof value.header === "string" ? value.header : `q-${idx}`,
206845
206848
  header: typeof value.header === "string" ? value.header : `Question ${idx + 1}`,
@@ -206849,13 +206852,13 @@ function userInputQuestionFromUnknown(question, idx) {
206849
206852
  };
206850
206853
  }
206851
206854
  function userInputOptionFromUnknown(option) {
206852
- const value = asRecord$6(option) ?? {};
206855
+ const value = asRecord$7(option) ?? {};
206853
206856
  return {
206854
206857
  label: typeof value.label === "string" ? value.label : "",
206855
206858
  description: typeof value.description === "string" ? value.description : ""
206856
206859
  };
206857
206860
  }
206858
- function asRecord$6(value) {
206861
+ function asRecord$7(value) {
206859
206862
  return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
206860
206863
  }
206861
206864
  function permissionResultFromDecision(decision, toolInput, suggestions) {
@@ -207663,7 +207666,7 @@ const makeClaudeAdapter = require_Schema$1.fn("makeClaudeAdapter")(function* (op
207663
207666
  const updateResumeCursor = require_Schema$1.fn("updateResumeCursor")(function* (context) {
207664
207667
  const threadId = context.session.threadId;
207665
207668
  if (!threadId) return;
207666
- const providerDeliveryBinding = readProviderDeliveryBinding(asRecord$6(context.session.resumeCursor)?.providerDeliveryBinding);
207669
+ const providerDeliveryBinding = readProviderDeliveryBinding(asRecord$7(context.session.resumeCursor)?.providerDeliveryBinding);
207667
207670
  const resumeCursor = {
207668
207671
  threadId,
207669
207672
  ...context.resumeSessionId ? { resume: context.resumeSessionId } : {},
@@ -212732,7 +212735,7 @@ function makeAcpContentDeltaEvent(input) {
212732
212735
  }
212733
212736
  //#endregion
212734
212737
  //#region ../../packages/shared/src/toolActivity.ts
212735
- function asRecord$5(value) {
212738
+ function asRecord$6(value) {
212736
212739
  return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
212737
212740
  }
212738
212741
  function asTrimmedString(value) {
@@ -212758,10 +212761,10 @@ function extractCommandFromTitle$1(title) {
212758
212761
  return /`([^`]+)`/u.exec(title)?.[1]?.trim() || void 0;
212759
212762
  }
212760
212763
  function extractToolCommand(data, title) {
212761
- const item = asRecord$5(data?.item);
212762
- const itemInput = asRecord$5(item?.input);
212763
- const itemResult = asRecord$5(item?.result);
212764
- const rawInput = asRecord$5(data?.rawInput);
212764
+ const item = asRecord$6(data?.item);
212765
+ const itemInput = asRecord$6(item?.input);
212766
+ const itemResult = asRecord$6(item?.result);
212767
+ const rawInput = asRecord$6(data?.rawInput);
212765
212768
  const direct = [
212766
212769
  normalizeCommandValue$1(item?.command),
212767
212770
  normalizeCommandValue$1(itemInput?.command),
@@ -212789,7 +212792,7 @@ function collectPaths(value, paths, seen, depth) {
212789
212792
  }
212790
212793
  return;
212791
212794
  }
212792
- const record = asRecord$5(value);
212795
+ const record = asRecord$6(value);
212793
212796
  if (!record) return;
212794
212797
  for (const key of [
212795
212798
  "path",
@@ -212848,7 +212851,7 @@ function deriveToolActivityPresentation(input) {
212848
212851
  const title = asTrimmedString(input.title);
212849
212852
  const detail = stripTrailingExitCode(asTrimmedString(input.detail));
212850
212853
  const fallbackSummary = asTrimmedString(input.fallbackSummary) ?? "Tool";
212851
- const data = asRecord$5(input.data);
212854
+ const data = asRecord$6(input.data);
212852
212855
  const command = extractToolCommand(data, title);
212853
212856
  const primaryPath = extractPrimaryPath(data);
212854
212857
  const action = classifyToolAction({
@@ -212872,7 +212875,7 @@ function deriveToolActivityPresentation(input) {
212872
212875
  ...primaryPath ? { detail: primaryPath } : {}
212873
212876
  };
212874
212877
  if (action === "search") {
212875
- const query = asTrimmedString(asRecord$5(data?.rawInput)?.query) ?? asTrimmedString(asRecord$5(data?.rawInput)?.pattern) ?? asTrimmedString(asRecord$5(data?.rawInput)?.searchTerm);
212878
+ const query = asTrimmedString(asRecord$6(data?.rawInput)?.query) ?? asTrimmedString(asRecord$6(data?.rawInput)?.pattern) ?? asTrimmedString(asRecord$6(data?.rawInput)?.searchTerm);
212876
212879
  return {
212877
212880
  summary: "Searched files",
212878
212881
  ...query ? { detail: query } : {}
@@ -279320,7 +279323,7 @@ function makeApprovedWorkerPlanEventState() {
279320
279323
  function promptKey(masterThreadId, promptId) {
279321
279324
  return `${masterThreadId}\n${promptId}`;
279322
279325
  }
279323
- function asRecord$4(value) {
279326
+ function asRecord$5(value) {
279324
279327
  return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
279325
279328
  }
279326
279329
  function exactMaterializedTaskIds(value, expectedCount) {
@@ -279330,7 +279333,7 @@ function exactMaterializedTaskIds(value, expectedCount) {
279330
279333
  }
279331
279334
  function readyBatchFromActivity(state, event) {
279332
279335
  if (event.payload.activity.kind !== "plan.task-creation.batch-succeeded") return null;
279333
- const payload = asRecord$4(event.payload.activity.payload);
279336
+ const payload = asRecord$5(event.payload.activity.payload);
279334
279337
  const promptId = payload?.["promptId"];
279335
279338
  if (typeof promptId !== "string") return null;
279336
279339
  const key = promptKey(event.payload.threadId, promptId);
@@ -280492,7 +280495,7 @@ function runtimeGrantNeedsRefresh(token, identity, nowSeconds = Math.floor(Date.
280492
280495
  return claims.expiresAtSeconds - nowSeconds <= RUNTIME_GRANT_REFRESH_SKEW_SECONDS;
280493
280496
  }
280494
280497
  /** Narrow an unknown to a plain object, or null. */
280495
- function asRecord$3(value) {
280498
+ function asRecord$4(value) {
280496
280499
  return value !== null && typeof value === "object" ? value : null;
280497
280500
  }
280498
280501
  /** The raw (untrimmed) string when it is present and not blank, else null. */
@@ -280504,7 +280507,7 @@ function asTimestamp(value) {
280504
280507
  return typeof value === "string" && Number.isFinite(Date.parse(value)) ? value : null;
280505
280508
  }
280506
280509
  function parseRuntimeGrantRefreshResponse(runtimeId, value) {
280507
- const data = asRecord$3(asRecord$3(value)?.data);
280510
+ const data = asRecord$4(asRecord$4(value)?.data);
280508
280511
  if (!data || data.runtimeId !== runtimeId) return null;
280509
280512
  const grantToken = asNonBlankString(data.grantToken);
280510
280513
  const expiresAt = asTimestamp(data.expiresAt);
@@ -296724,6 +296727,74 @@ const LocalAutomationSchedulerLive = require_Schema$1.effectDiscard(require_Sche
296724
296727
  yield* require_Schema$1.forkScoped(startup.awaitCommandReady.pipe(require_Schema$1.andThen(require_Schema$1.forever(tick.pipe(require_Schema$1.andThen(require_Schema$1.sleep("60 seconds")))))));
296725
296728
  }));
296726
296729
  //#endregion
296730
+ //#region src/command/providerUsageEnvironment.ts
296731
+ function asRecord$3(value) {
296732
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
296733
+ }
296734
+ function positiveInteger(value) {
296735
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
296736
+ }
296737
+ function readEnvironmentId(value) {
296738
+ return typeof value === "string" && value.trim() !== "" ? value : null;
296739
+ }
296740
+ function readEligibleStatus(value) {
296741
+ return value === "running" || value === "suspended" ? value : null;
296742
+ }
296743
+ function isOwnedRuntime(row, ownerUserId) {
296744
+ return positiveInteger(row["userId"]) === ownerUserId;
296745
+ }
296746
+ function readRuntimeId(row) {
296747
+ const runtimeId = row["runtimeId"];
296748
+ return typeof runtimeId === "string" && runtimeId.trim() !== "" ? runtimeId : null;
296749
+ }
296750
+ function readCandidate(runtime, ownerUserId) {
296751
+ const row = asRecord$3(runtime);
296752
+ if (row === null || !isOwnedRuntime(row, ownerUserId) || row["desiredState"] !== "running") return null;
296753
+ const organizationId = positiveInteger(row["organizationId"]);
296754
+ const environmentId = readEnvironmentId(row["environmentId"]);
296755
+ const runtimeId = readRuntimeId(row);
296756
+ const status = readEligibleStatus(row["status"]);
296757
+ if (organizationId === null || environmentId === null || runtimeId === null || status === null) return null;
296758
+ return {
296759
+ organizationId,
296760
+ environmentId,
296761
+ runtimeId,
296762
+ status
296763
+ };
296764
+ }
296765
+ function candidateKey(candidate) {
296766
+ return `${candidate.organizationId}:${candidate.environmentId ?? ""}`;
296767
+ }
296768
+ function statusRank(status) {
296769
+ return status === "running" ? 0 : 1;
296770
+ }
296771
+ function deduplicateCandidates(candidates) {
296772
+ const byEnvironment = /* @__PURE__ */ new Map();
296773
+ for (const candidate of candidates) {
296774
+ const key = candidateKey(candidate);
296775
+ const existing = byEnvironment.get(key);
296776
+ if (existing === void 0 || statusRank(candidate.status) < statusRank(existing.status)) byEnvironment.set(key, candidate);
296777
+ }
296778
+ return [...byEnvironment.values()];
296779
+ }
296780
+ /**
296781
+ * Selects one authenticated owner's Environment from CMMD's projectless runtime
296782
+ * catalog. A tied best candidate fails closed, so Forge never chooses an
296783
+ * organization from browser input.
296784
+ */
296785
+ function selectProviderUsageEnvironment(rawCatalog, ownerUserId) {
296786
+ const runtimes = asRecord$3(asRecord$3(rawCatalog)?.["data"])?.["runtimes"];
296787
+ if (!Array.isArray(runtimes)) return { kind: "unavailable" };
296788
+ const candidates = deduplicateCandidates(runtimes.map((runtime) => readCandidate(runtime, ownerUserId)).filter((candidate) => candidate !== null));
296789
+ const bestRank = Math.min(...candidates.map((candidate) => statusRank(candidate.status)));
296790
+ const bestCandidates = candidates.filter((candidate) => statusRank(candidate.status) === bestRank);
296791
+ if (bestCandidates.length !== 1) return { kind: "unavailable" };
296792
+ return {
296793
+ kind: "ready",
296794
+ organizationId: bestCandidates[0].organizationId
296795
+ };
296796
+ }
296797
+ //#endregion
296727
296798
  //#region src/command/wsToken.ts
296728
296799
  /**
296729
296800
  * Build the WS token response given an optional PAT and the configured CMMD
@@ -296760,13 +296831,13 @@ function resolveWsUrl(baseUrl) {
296760
296831
  const callCmmdTool = legacyCmmdToolBridge.callTool;
296761
296832
  const extractMcpToolText = legacyCmmdToolBridge.extractText;
296762
296833
  const isCmmdMcpAuthError = legacyCmmdToolBridge.isAuthError;
296763
- var ClaudeUsageReadError = class extends require_Schema$1.TaggedError("ClaudeUsageReadError") {};
296764
296834
  /**
296765
296835
  * CMMD-side path for the PROJECT-keyed Forge Cloud catalog. Shared by the list
296766
296836
  * proxy, the SSE poll-and-emit proxy, and the register/unregister proxies so the
296767
296837
  * upstream contract lives in exactly one place.
296768
296838
  */
296769
296839
  const CMMD_CLOUD_PROJECTS_PATH = "/api/forge/context/cloud-projects";
296840
+ const CMMD_RUNTIMES_PATH = "/api/forge/context/runtimes";
296770
296841
  /**
296771
296842
  * Authenticate the browser session and resolve the CMMD JWT to forward
296772
296843
  * upstream. Returns null when no token could be resolved, which every caller
@@ -296890,6 +296961,10 @@ const cmmdBillingSeriesRouteLayer = registerProxyRoute({
296890
296961
  const cmmdRestUnavailable = () => new CmmdProxyAuthenticationRequiredError("CMMD connection required. Reconnect CMMD to continue.");
296891
296962
  function runCmmdRestProxy(session, proxy, dependencies = {}) {
296892
296963
  return require_Schema$1.gen(function* () {
296964
+ if (dependencies.jwt !== void 0) {
296965
+ const explicitJwt = dependencies.jwt;
296966
+ return yield* require_Schema$1.promise(() => (dependencies.runProxy ?? runProxy)(() => proxy(explicitJwt)));
296967
+ }
296893
296968
  const resolveJwt = dependencies.resolveJwt ?? resolveCmmdJwtForSession;
296894
296969
  const jwt = yield* resolveJwt({
296895
296970
  sessionId: session.sessionId,
@@ -298433,59 +298508,6 @@ const cmmdSetProviderAccountDefaultRouteLayer = registerProxyRoute({
298433
298508
  orgIdSource: "none",
298434
298509
  responseShape: "unwrapData"
298435
298510
  });
298436
- const resolveConnectedClaudeGeneration = (session) => require_Schema$1.gen(function* () {
298437
- const outcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
298438
- method: "GET",
298439
- jwt,
298440
- path: "/api/forge/context/providers/claude/credential"
298441
- }));
298442
- if (!outcome.ok) return outcome;
298443
- const state = unwrapForgeEnvelope(outcome.value);
298444
- if (state === null || typeof state !== "object" || !("connected" in state) || state.connected !== true || !("generationId" in state) || typeof state.generationId !== "string") return {
298445
- ok: true,
298446
- value: null
298447
- };
298448
- return {
298449
- ok: true,
298450
- value: {
298451
- generationId: state.generationId,
298452
- generationHash: (0, node_crypto.createHash)("sha256").update(state.generationId).digest("hex")
298453
- }
298454
- };
298455
- });
298456
- /**
298457
- * The GET path is read-only. The explicit per-account POST refresh invokes
298458
- * this helper and propagates any CMMD forward failure to the caller.
298459
- */
298460
- const forwardClaudeUsageTelemetry = (session, requestedProviderAccountId, activelyPoll = false, fetchClaudeUsage = fetchClaudeUsageViaOfficialClient) => require_Schema$1.gen(function* () {
298461
- const credentialOutcome = yield* resolveConnectedClaudeGeneration(session);
298462
- if (!credentialOutcome.ok) return credentialOutcome;
298463
- if (credentialOutcome.value === null) return null;
298464
- const { generationId, generationHash } = credentialOutcome.value;
298465
- const providerAccountId = requestedProviderAccountId ?? generationId;
298466
- const activeSnapshot = activelyPoll && providerAccountId === generationId ? yield* require_Schema$1.tryPromise({
298467
- try: () => fetchClaudeUsage({ binaryPath: resolveClaudeBinaryPath("claude") }),
298468
- catch: (cause) => new ClaudeUsageReadError({ cause })
298469
- }).pipe(require_Schema$1.orElseSucceed(() => null)) : null;
298470
- const snapshot = activeSnapshot ? {
298471
- ...activeSnapshot,
298472
- observedAt: (/* @__PURE__ */ new Date()).toISOString()
298473
- } : getLatestClaudeRateLimitTelemetry(generationHash, providerAccountId);
298474
- if (!snapshot) return null;
298475
- return yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
298476
- method: "POST",
298477
- jwt,
298478
- path: "/api/forge/context/providers/usage/claude/telemetry",
298479
- body: {
298480
- providerAccountId,
298481
- credentialGenerationId: generationId,
298482
- source: activeSnapshot ? "active_poll" : "passive_sdk_telemetry",
298483
- fiveHour: snapshot.fiveHour,
298484
- sevenDay: snapshot.sevenDay,
298485
- observedAt: snapshot.observedAt
298486
- }
298487
- }));
298488
- });
298489
298511
  const cmmdGetProviderUsageRouteLayer = add$1("GET", "/api/cmmd/providers/usage", require_Schema$1.gen(function* () {
298490
298512
  const request = yield* require_HttpServer.HttpServerRequest;
298491
298513
  const outcome = yield* runCmmdRestProxy(yield* (yield* ServerAuth).authenticateHttpRequest(request), (jwt) => cmmdGateway.request({
@@ -298506,15 +298528,63 @@ function parseProviderUsageRefreshInput(rawBody) {
298506
298528
  providerAccountId: body.providerAccountId
298507
298529
  };
298508
298530
  }
298509
- const cmmdRefreshProviderUsageRouteLayer = add$1("POST", "/api/cmmd/providers/usage/refresh", require_Schema$1.gen(function* () {
298510
- const request = yield* require_HttpServer.HttpServerRequest;
298511
- const session = yield* (yield* ServerAuth).authenticateHttpRequest(request);
298512
- const input = parseProviderUsageRefreshInput(yield* request.json);
298513
- if (input === null) return require_HttpServer.jsonUnsafe({ error: "provider and providerAccountId must identify a connected provider account" }, { status: 400 });
298514
- const claudeOutcome = input.provider === "claude" ? yield* forwardClaudeUsageTelemetry(session, input.providerAccountId, true) : null;
298515
- if (input.provider === "claude" && claudeOutcome !== null && !claudeOutcome.ok) return buildProxyErrorResponse(claudeOutcome.error);
298516
- if (input.provider === "claude" && claudeOutcome === null) return require_HttpServer.jsonUnsafe({ error: "No exact-account Claude usage observation is available in this runtime." }, { status: 503 });
298517
- if (input.provider === "codex") {
298531
+ function resolveProviderUsageOwnerUserId(session) {
298532
+ const identity = readCmmdUserIdentityForSession(session.sessionId);
298533
+ const userId = identity === null ? NaN : Number(identity.id);
298534
+ return Number.isSafeInteger(userId) && userId > 0 ? userId : null;
298535
+ }
298536
+ function buildClaudeUsageRefreshErrorResponse(error) {
298537
+ const status = error instanceof CmmdProxyRequestError && error.status === 503 ? 503 : 502;
298538
+ return require_HttpServer.jsonUnsafe({
298539
+ error: "Claude usage refresh is unavailable.",
298540
+ code: "CLAUDE_USAGE_REFRESH_UNAVAILABLE"
298541
+ }, { status });
298542
+ }
298543
+ function makeRefreshProviderUsageHandler(dependencies = {}) {
298544
+ return require_Schema$1.gen(function* () {
298545
+ const request = yield* require_HttpServer.HttpServerRequest;
298546
+ const session = yield* (yield* ServerAuth).authenticateHttpRequest(request);
298547
+ const input = parseProviderUsageRefreshInput(yield* request.json);
298548
+ if (input === null) return require_HttpServer.jsonUnsafe({ error: "provider and providerAccountId must identify a connected provider account" }, { status: 400 });
298549
+ if (input.provider === "claude") {
298550
+ const requestJwt = yield* (dependencies.resolveJwt ?? resolveCmmdJwtForSession)({
298551
+ sessionId: session.sessionId,
298552
+ subject: session.subject,
298553
+ logPrefix: "claude-usage-refresh"
298554
+ });
298555
+ if (!requestJwt) return buildClaudeUsageRefreshErrorResponse(/* @__PURE__ */ new Error("CMMD authentication required."));
298556
+ const ownerUserId = resolveProviderUsageOwnerUserId(session);
298557
+ if (ownerUserId === null) return require_HttpServer.jsonUnsafe({
298558
+ error: "CMMD owner identity is unavailable for Claude usage refresh.",
298559
+ code: "CLAUDE_USAGE_ENVIRONMENT_UNAVAILABLE"
298560
+ }, { status: 503 });
298561
+ const catalogOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
298562
+ method: "GET",
298563
+ jwt,
298564
+ path: CMMD_RUNTIMES_PATH
298565
+ }), { jwt: requestJwt });
298566
+ if (!catalogOutcome.ok) return buildClaudeUsageRefreshErrorResponse(catalogOutcome.error);
298567
+ const target = selectProviderUsageEnvironment(catalogOutcome.value, ownerUserId);
298568
+ if (target.kind === "unavailable") return require_HttpServer.jsonUnsafe({
298569
+ error: "No owned Environment with running intent is available for Claude usage refresh.",
298570
+ code: "CLAUDE_USAGE_ENVIRONMENT_UNAVAILABLE"
298571
+ }, { status: 503 });
298572
+ const refreshOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
298573
+ method: "POST",
298574
+ jwt,
298575
+ path: "/api/forge/context/providers/usage/claude/refresh",
298576
+ body: { providerAccountId: input.providerAccountId },
298577
+ orgId: String(target.organizationId)
298578
+ }), { jwt: requestJwt });
298579
+ if (!refreshOutcome.ok) return buildClaudeUsageRefreshErrorResponse(refreshOutcome.error);
298580
+ const snapshotOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
298581
+ method: "GET",
298582
+ jwt,
298583
+ path: "/api/forge/context/providers/usage"
298584
+ }), { jwt: requestJwt });
298585
+ if (!snapshotOutcome.ok) return buildClaudeUsageRefreshErrorResponse(snapshotOutcome.error);
298586
+ return require_HttpServer.jsonUnsafe(unwrapForgeEnvelope(snapshotOutcome.value), { status: 200 });
298587
+ }
298518
298588
  const refreshOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
298519
298589
  method: "POST",
298520
298590
  jwt,
@@ -298522,16 +298592,16 @@ const cmmdRefreshProviderUsageRouteLayer = add$1("POST", "/api/cmmd/providers/us
298522
298592
  body: { providerAccountId: input.providerAccountId }
298523
298593
  }));
298524
298594
  if (!refreshOutcome.ok) return buildProxyErrorResponse(refreshOutcome.error);
298525
- if (claudeOutcome !== null && !claudeOutcome.ok) return buildProxyErrorResponse(claudeOutcome.error);
298526
- }
298527
- const outcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
298528
- method: "GET",
298529
- jwt,
298530
- path: "/api/forge/context/providers/usage"
298531
- }));
298532
- if (!outcome.ok) return buildProxyErrorResponse(outcome.error);
298533
- return require_HttpServer.jsonUnsafe(unwrapForgeEnvelope(outcome.value), { status: 200 });
298534
- }).pipe(require_Schema$1.catchTag("AuthError", (error) => respondToAuthError(error))));
298595
+ const snapshotOutcome = yield* runCmmdRestProxy(session, (jwt) => cmmdGateway.request({
298596
+ method: "GET",
298597
+ jwt,
298598
+ path: "/api/forge/context/providers/usage"
298599
+ }));
298600
+ if (!snapshotOutcome.ok) return buildProxyErrorResponse(snapshotOutcome.error);
298601
+ return require_HttpServer.jsonUnsafe(unwrapForgeEnvelope(snapshotOutcome.value), { status: 200 });
298602
+ }).pipe(require_Schema$1.catchTag("AuthError", (error) => respondToAuthError(error)));
298603
+ }
298604
+ const cmmdRefreshProviderUsageRouteLayer = add$1("POST", "/api/cmmd/providers/usage/refresh", makeRefreshProviderUsageHandler());
298535
298605
  const cmmdGetUserCodexCredentialRouteLayer = registerProxyRoute({
298536
298606
  forgePath: "/api/cmmd/providers/codex/credential",
298537
298607
  method: "GET",
@@ -309609,6 +309679,82 @@ const claudeNativeGenerationProofRouteLayer = add$1("GET", "/api/runtime/provide
309609
309679
  generationHash
309610
309680
  });
309611
309681
  }));
309682
+ const defaultClaudeUsageRouteDependencies = {
309683
+ readCredential: async (token) => {
309684
+ const base = process.env.FORGE_CMMD_RUNTIME_CONTROL_PLANE_URL?.trim() ?? "";
309685
+ if (!base) return null;
309686
+ const response = await fetch(`${base.replace(/\/+$/u, "")}/api/forge/context/auth-runtime-claude-credential`, {
309687
+ headers: {
309688
+ authorization: `Bearer ${token}`,
309689
+ accept: "application/json"
309690
+ },
309691
+ signal: AbortSignal.timeout(2e4)
309692
+ });
309693
+ return response.ok ? response.text() : null;
309694
+ },
309695
+ createDirectory: () => (0, node_fs_promises.mkdtemp)((0, node_path.join)((0, node_os.tmpdir)(), "forge-claude-usage-")),
309696
+ writeCredential: (directory, credential) => (0, node_fs_promises.writeFile)((0, node_path.join)(directory, ".credentials.json"), credential, { mode: 384 }),
309697
+ loadUsage: (directory) => fetchClaudeUsageViaOfficialClient({
309698
+ binaryPath: resolveClaudeBinaryPath("claude"),
309699
+ claudeConfigDir: directory
309700
+ }),
309701
+ removeDirectory: (directory) => (0, node_fs_promises.rm)(directory, {
309702
+ recursive: true,
309703
+ force: false
309704
+ }),
309705
+ now: () => /* @__PURE__ */ new Date()
309706
+ };
309707
+ const claudeUsageHandler = (dependencies) => require_Schema$1.gen(function* () {
309708
+ const request = yield* require_HttpServer.HttpServerRequest;
309709
+ const config = yield* ServerConfig;
309710
+ const token = claudeReadinessToken(request.headers.authorization);
309711
+ const required = completeClaudeReadinessExpectations(config);
309712
+ if (!token || !required) return unauthorizedClaudeReadinessResponse();
309713
+ const claims = require_runtimeControlAuthority.verifyCmmdClaudeUsageTicket(token, required);
309714
+ if (!claims) return unauthorizedClaudeReadinessResponse();
309715
+ const claimed = claimClaudeReadinessJti({
309716
+ jti: claims.jti,
309717
+ expiresAtSeconds: claims.expiresAtSeconds,
309718
+ nowSeconds: Math.floor(Date.now() / 1e3)
309719
+ });
309720
+ if (claimed === "replayed") return unauthorizedClaudeReadinessResponse();
309721
+ if (claimed === "capacity_exhausted") return require_HttpServer.jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
309722
+ return yield* require_Schema$1.promise(async () => {
309723
+ let directory = null;
309724
+ let response = require_HttpServer.jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
309725
+ try {
309726
+ directory = await dependencies.createDirectory();
309727
+ const credentialJson = await dependencies.readCredential(token);
309728
+ if (credentialJson !== null && isClaudeSubscriptionCredential(credentialJson)) {
309729
+ await dependencies.writeCredential(directory, credentialJson);
309730
+ const usage = await dependencies.loadUsage(directory);
309731
+ response = require_HttpServer.jsonUnsafe({
309732
+ fiveHour: usage.fiveHour,
309733
+ sevenDay: usage.sevenDay,
309734
+ observedAt: dependencies.now().toISOString(),
309735
+ receipt: {
309736
+ orgId: claims.orgId,
309737
+ userId: claims.userId,
309738
+ runtimeId: claims.runtimeId,
309739
+ machineId: claims.machineId,
309740
+ credentialEpoch: claims.credentialEpoch,
309741
+ providerAccountId: claims.providerAccountId,
309742
+ credentialGenerationId: claims.generationId
309743
+ }
309744
+ }, { headers: { "cache-control": "no-store" } });
309745
+ }
309746
+ } catch {}
309747
+ if (directory === null) return response;
309748
+ try {
309749
+ await dependencies.removeDirectory(directory);
309750
+ } catch {
309751
+ return require_HttpServer.jsonUnsafe({ error: "temporarily_unavailable" }, { status: 503 });
309752
+ }
309753
+ return response;
309754
+ });
309755
+ });
309756
+ const createClaudeUsageRouteLayer = (dependencies = defaultClaudeUsageRouteDependencies) => add$1("POST", "/api/runtime/provider-usage/claude", claudeUsageHandler(dependencies));
309757
+ const claudeUsageRouteLayer = createClaudeUsageRouteLayer();
309612
309758
  /**
309613
309759
  * FINDING-CB1 — workspace readiness SSE endpoint.
309614
309760
  *
@@ -309956,7 +310102,7 @@ const MiscRuntimeLayerLive = require_Schema$1.mergeAll(AnalyticsServiceLayerLive
309956
310102
  const RuntimeDependenciesWithoutPullRequestsLive = ReactorLayerLive.pipe(require_Schema$1.provideMerge(CheckpointingLayerLive), require_Schema$1.provideMerge(GitLayerLive), require_Schema$1.provideMerge(OrchestrationLayerLive), require_Schema$1.provideMerge(ProviderLayerLive), require_Schema$1.provideMerge(TerminalLayerLive), require_Schema$1.provideMerge(AgentBrowserManagerLive), require_Schema$1.provideMerge(require_Schema$1.mergeAll(ThreadDevRuntimeLive, DevTunnelLive.pipe(require_Schema$1.provide$1(ThreadDevRuntimeLive)))), require_Schema$1.provideMerge(PersistenceLayerLive), require_Schema$1.provideMerge(KeybindingsLive), require_Schema$1.provideMerge(ProviderRegistryLive), require_Schema$1.provideMerge(require_Schema$1.mergeAll(ServerSettingsLive, UsageServiceLive.pipe(require_Schema$1.provide$1(ServerSettingsLive)))), require_Schema$1.provideMerge(WorkspaceLayerLive), require_Schema$1.provideMerge(WorkspaceReadinessStateLive), require_Schema$1.provideMerge(ProjectFaviconResolverLive), require_Schema$1.provideMerge(RepositoryIdentityResolverLive), require_Schema$1.provideMerge(ServerEnvironmentLive), require_Schema$1.provideMerge(AuthLayerLive), require_Schema$1.provideMerge(ServerSecretStoreLayerLive), require_Schema$1.provideMerge(require_Schema$1.mergeAll(CloudRedisCoordinationLive, CloudStateSyncLive.pipe(require_Schema$1.provide$1(PersistenceLayerLive)))), require_Schema$1.provideMerge(MiscRuntimeLayerLive));
309957
310103
  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));
309958
310104
  const RuntimeServicesLive = ServerRuntimeStartupLive.pipe(require_Schema$1.provideMerge(RuntimeDependenciesLive));
309959
- const makeRoutesLayer = require_Schema$1.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(require_Schema$1.provide$1(browserApiCorsLayer));
310105
+ const makeRoutesLayer = require_Schema$1.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(require_Schema$1.provide$1(browserApiCorsLayer));
309960
310106
  const makeServerLayer = require_Schema$1.unwrap(require_Schema$1.gen(function* () {
309961
310107
  const config = yield* ServerConfig;
309962
310108
  fixPath();