@superblocksteam/gateway 2.0.177 → 2.0.178-next.0
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/README.md +52 -19
- package/dist/agents/hosted-boundary.d.ts +36 -0
- package/dist/agents/hosted-boundary.d.ts.map +1 -0
- package/dist/agents/hosted-boundary.js +66 -0
- package/dist/agents/hosted-boundary.js.map +1 -0
- package/dist/agents/resolve-orchestrator-url.d.ts +8 -0
- package/dist/agents/resolve-orchestrator-url.d.ts.map +1 -1
- package/dist/agents/resolve-orchestrator-url.js +5 -0
- package/dist/agents/resolve-orchestrator-url.js.map +1 -1
- package/dist/capabilities/integration-metadata.d.ts.map +1 -1
- package/dist/capabilities/integration-metadata.js +12 -1
- package/dist/capabilities/integration-metadata.js.map +1 -1
- package/dist/capabilities/lifecycle.d.ts +1 -6
- package/dist/capabilities/lifecycle.d.ts.map +1 -1
- package/dist/capabilities/lifecycle.js +339 -21
- package/dist/capabilities/lifecycle.js.map +1 -1
- package/dist/capabilities/live-state-attaches.d.ts +28 -0
- package/dist/capabilities/live-state-attaches.d.ts.map +1 -1
- package/dist/capabilities/live-state-attaches.js +33 -0
- package/dist/capabilities/live-state-attaches.js.map +1 -1
- package/dist/capabilities/query-integration.d.ts.map +1 -1
- package/dist/capabilities/query-integration.js +12 -1
- package/dist/capabilities/query-integration.js.map +1 -1
- package/dist/capabilities/tool-permission-reply.d.ts.map +1 -1
- package/dist/capabilities/tool-permission-reply.js.map +1 -1
- package/dist/capabilities/types.d.ts +3 -4
- package/dist/capabilities/types.d.ts.map +1 -1
- package/dist/capabilities/types.js.map +1 -1
- package/dist/capture/browser-contract.d.ts +1 -18
- package/dist/capture/browser-contract.d.ts.map +1 -1
- package/dist/capture/browser-contract.js +1 -13
- package/dist/capture/browser-contract.js.map +1 -1
- package/dist/capture/browser-instructions.d.ts +3 -3
- package/dist/capture/browser-instructions.d.ts.map +1 -1
- package/dist/capture/browser-instructions.js +4 -5
- package/dist/capture/browser-instructions.js.map +1 -1
- package/dist/capture/capture-library-probe.d.ts +0 -1
- package/dist/capture/capture-library-probe.d.ts.map +1 -1
- package/dist/capture/capture-library-probe.js +1 -1
- package/dist/capture/capture-library-probe.js.map +1 -1
- package/dist/capture/capture-library.d.ts +2 -1
- package/dist/capture/capture-library.d.ts.map +1 -1
- package/dist/capture/classify-library-paint.d.ts +2 -1
- package/dist/capture/classify-library-paint.d.ts.map +1 -1
- package/dist/capture/library-parent-script.d.ts +3 -2
- package/dist/capture/library-parent-script.d.ts.map +1 -1
- package/dist/capture/mode.d.ts +2 -3
- package/dist/capture/mode.d.ts.map +1 -1
- package/dist/capture/mode.js +2 -3
- package/dist/capture/mode.js.map +1 -1
- package/dist/config.d.ts +21 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/debug.js.map +1 -1
- package/dist/deps.d.ts +3 -3
- package/dist/health/readiness.d.ts +2 -1
- package/dist/health/readiness.d.ts.map +1 -1
- package/dist/http/main.d.ts +3 -0
- package/dist/http/main.d.ts.map +1 -0
- package/dist/http/main.js +11 -0
- package/dist/http/main.js.map +1 -0
- package/dist/http/serve.d.ts +26 -0
- package/dist/http/serve.d.ts.map +1 -0
- package/dist/http/serve.js +298 -0
- package/dist/http/serve.js.map +1 -0
- package/dist/integrations/filters.d.ts.map +1 -1
- package/dist/integrations/filters.js +1 -16
- package/dist/integrations/filters.js.map +1 -1
- package/dist/integrations/map.d.ts +0 -5
- package/dist/integrations/map.d.ts.map +1 -1
- package/dist/integrations/map.js +1 -1
- package/dist/integrations/map.js.map +1 -1
- package/dist/internal-ingress.d.ts +47 -0
- package/dist/internal-ingress.d.ts.map +1 -0
- package/dist/internal-ingress.js +90 -0
- package/dist/internal-ingress.js.map +1 -0
- package/dist/orchestrator/client.d.ts +11 -5
- package/dist/orchestrator/client.d.ts.map +1 -1
- package/dist/orchestrator/client.js +14 -3
- package/dist/orchestrator/client.js.map +1 -1
- package/dist/playwright/ensure-chromium.js.map +1 -1
- package/dist/preview/capture-screenshot.d.ts +2 -2
- package/dist/preview/capture-screenshot.d.ts.map +1 -1
- package/dist/preview/capture-screenshot.js +2 -2
- package/dist/preview/capture-screenshot.js.map +1 -1
- package/dist/process/fault-barrier.d.ts +4 -3
- package/dist/process/fault-barrier.d.ts.map +1 -1
- package/dist/sabs/app-state.d.ts +2 -13
- package/dist/sabs/app-state.d.ts.map +1 -1
- package/dist/sabs/app-state.js +7 -2
- package/dist/sabs/app-state.js.map +1 -1
- package/dist/sabs/awaited-decision.d.ts.map +1 -1
- package/dist/sabs/browser-context.d.ts +4 -1
- package/dist/sabs/browser-context.d.ts.map +1 -1
- package/dist/sabs/browser-context.js +1 -0
- package/dist/sabs/browser-context.js.map +1 -1
- package/dist/sabs/editor-client-methods.d.ts.map +1 -1
- package/dist/sabs/editor-client-methods.js +1 -1
- package/dist/sabs/editor-client-methods.js.map +1 -1
- package/dist/sabs/editor-socket.d.ts.map +1 -1
- package/dist/sabs/editor-socket.js.map +1 -1
- package/dist/sabs/session-peer.d.ts +13 -1
- package/dist/sabs/session-peer.d.ts.map +1 -1
- package/dist/sabs/session-peer.js.map +1 -1
- package/dist/sabs/streamed-reply.d.ts.map +1 -1
- package/dist/sabs/streamed-reply.js.map +1 -1
- package/dist/sabs/turn-collector.d.ts.map +1 -1
- package/dist/sabs/turn-collector.js.map +1 -1
- package/dist/sabs/websocket-session-peer.d.ts +17 -1
- package/dist/sabs/websocket-session-peer.d.ts.map +1 -1
- package/dist/sabs/websocket-session-peer.js +89 -15
- package/dist/sabs/websocket-session-peer.js.map +1 -1
- package/dist/server/client.d.ts +48 -0
- package/dist/server/client.d.ts.map +1 -1
- package/dist/server/client.js +91 -173
- package/dist/server/client.js.map +1 -1
- package/dist/server/identity-reads.d.ts +5 -3
- package/dist/server/identity-reads.d.ts.map +1 -1
- package/dist/server/identity-reads.js +31 -4
- package/dist/server/identity-reads.js.map +1 -1
- package/dist/start.d.ts +5 -1
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +23 -9
- package/dist/start.js.map +1 -1
- package/dist/stores/memory.d.ts.map +1 -1
- package/dist/stores/types.d.ts +2 -1
- package/dist/stores/types.d.ts.map +1 -1
- package/dist/telemetry/mcp-client.d.ts +2 -1
- package/dist/telemetry/mcp-client.d.ts.map +1 -1
- package/dist/telemetry/mcp-client.js.map +1 -1
- package/dist/telemetry/mcp-usage.d.ts +22 -0
- package/dist/telemetry/mcp-usage.d.ts.map +1 -0
- package/dist/telemetry/mcp-usage.js +102 -0
- package/dist/telemetry/mcp-usage.js.map +1 -0
- package/dist/telemetry/metrics.d.ts +9 -0
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +21 -0
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/telemetry/runtime.d.ts +2 -1
- package/dist/telemetry/runtime.d.ts.map +1 -1
- package/dist/telemetry/runtime.js +18 -5
- package/dist/telemetry/runtime.js.map +1 -1
- package/dist/transports/mcp/admin-tools.d.ts +3 -7
- package/dist/transports/mcp/admin-tools.d.ts.map +1 -1
- package/dist/transports/mcp/admin-tools.js +9 -82
- package/dist/transports/mcp/admin-tools.js.map +1 -1
- package/dist/transports/mcp/app-status-html.d.ts +2 -2
- package/dist/transports/mcp/app-status-html.d.ts.map +1 -1
- package/dist/transports/mcp/app-status-html.js +1 -27
- package/dist/transports/mcp/app-status-html.js.map +1 -1
- package/dist/transports/mcp/client-presentation.d.ts +10 -13
- package/dist/transports/mcp/client-presentation.d.ts.map +1 -1
- package/dist/transports/mcp/client-presentation.js +2 -14
- package/dist/transports/mcp/client-presentation.js.map +1 -1
- package/dist/transports/mcp/decision-elicitation.js +23 -1
- package/dist/transports/mcp/decision-elicitation.js.map +1 -1
- package/dist/transports/mcp/dispatch-probe.js.map +1 -1
- package/dist/transports/mcp/editor-document-probe.js.map +1 -1
- package/dist/transports/mcp/editor-integration-setup-url.d.ts +0 -1
- package/dist/transports/mcp/editor-integration-setup-url.d.ts.map +1 -1
- package/dist/transports/mcp/editor-integration-setup-url.js +0 -3
- package/dist/transports/mcp/editor-integration-setup-url.js.map +1 -1
- package/dist/transports/mcp/format-tool-content.js +1 -1
- package/dist/transports/mcp/format-tool-content.js.map +1 -1
- package/dist/transports/mcp/instructions/tools/build-app.d.ts +2 -3
- package/dist/transports/mcp/instructions/tools/build-app.d.ts.map +1 -1
- package/dist/transports/mcp/instructions/tools/build-app.js +5 -11
- package/dist/transports/mcp/instructions/tools/build-app.js.map +1 -1
- package/dist/transports/mcp/instructions/tools/check-app-progress.d.ts.map +1 -1
- package/dist/transports/mcp/instructions/tools/check-app-progress.js +1 -25
- package/dist/transports/mcp/instructions/tools/check-app-progress.js.map +1 -1
- package/dist/transports/mcp/instructions/tools/check-publish-progress.d.ts +1 -2
- package/dist/transports/mcp/instructions/tools/check-publish-progress.d.ts.map +1 -1
- package/dist/transports/mcp/instructions/tools/check-publish-progress.js +2 -11
- package/dist/transports/mcp/instructions/tools/check-publish-progress.js.map +1 -1
- package/dist/transports/mcp/instructions/tools/copy.d.ts +1 -8
- package/dist/transports/mcp/instructions/tools/copy.d.ts.map +1 -1
- package/dist/transports/mcp/instructions/tools/copy.js +4 -28
- package/dist/transports/mcp/instructions/tools/copy.js.map +1 -1
- package/dist/transports/mcp/instructions/tools/create-integration.d.ts +1 -2
- package/dist/transports/mcp/instructions/tools/create-integration.d.ts.map +1 -1
- package/dist/transports/mcp/instructions/tools/create-integration.js +4 -8
- package/dist/transports/mcp/instructions/tools/create-integration.js.map +1 -1
- package/dist/transports/mcp/instructions/tools/edit-app.js +2 -2
- package/dist/transports/mcp/instructions/tools/edit-app.js.map +1 -1
- package/dist/transports/mcp/instructions/tools/get-app.d.ts.map +1 -1
- package/dist/transports/mcp/instructions/tools/get-app.js +1 -23
- package/dist/transports/mcp/instructions/tools/get-app.js.map +1 -1
- package/dist/transports/mcp/instructions/tools/index.d.ts.map +1 -1
- package/dist/transports/mcp/instructions/tools/index.js +0 -4
- package/dist/transports/mcp/instructions/tools/index.js.map +1 -1
- package/dist/transports/mcp/instructions/tools/publish-app.d.ts +1 -2
- package/dist/transports/mcp/instructions/tools/publish-app.d.ts.map +1 -1
- package/dist/transports/mcp/instructions/tools/publish-app.js +1 -10
- package/dist/transports/mcp/instructions/tools/publish-app.js.map +1 -1
- package/dist/transports/mcp/instructions/tools/start-app.d.ts +1 -2
- package/dist/transports/mcp/instructions/tools/start-app.d.ts.map +1 -1
- package/dist/transports/mcp/instructions/tools/start-app.js +3 -3
- package/dist/transports/mcp/instructions/tools/start-app.js.map +1 -1
- package/dist/transports/mcp/mount.d.ts +8 -15
- package/dist/transports/mcp/mount.d.ts.map +1 -1
- package/dist/transports/mcp/mount.js +233 -206
- package/dist/transports/mcp/mount.js.map +1 -1
- package/dist/transports/mcp/plan-approval.d.ts.map +1 -1
- package/dist/transports/mcp/plan-approval.js.map +1 -1
- package/dist/transports/mcp/tool-permissions.d.ts +30 -0
- package/dist/transports/mcp/tool-permissions.d.ts.map +1 -0
- package/dist/transports/mcp/tool-permissions.js +39 -0
- package/dist/transports/mcp/tool-permissions.js.map +1 -0
- package/package.json +28 -22
- package/skills/superblocks-import/SKILL.md +5 -3
- package/dist/capture/cowork-editor-url.d.ts +0 -7
- package/dist/capture/cowork-editor-url.d.ts.map +0 -1
- package/dist/capture/cowork-editor-url.js +0 -12
- package/dist/capture/cowork-editor-url.js.map +0 -1
- package/dist/transports/mcp/native-browser-presence.d.ts +0 -46
- package/dist/transports/mcp/native-browser-presence.d.ts.map +0 -1
- package/dist/transports/mcp/native-browser-presence.js +0 -158
- package/dist/transports/mcp/native-browser-presence.js.map +0 -1
- package/skills/superblocks-build/SKILL.md +0 -59
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { WebSocket } from "ws";
|
|
3
3
|
import { AiMode as SharedAiMode, llmConfigFromFlags, } from "@superblocksteam/library-shared/types";
|
|
4
|
-
import { createISocketClient, ISocket, SocketHeartbeat, } from "@superblocksteam/shared";
|
|
4
|
+
import { createISocketClient, DEFAULT_NON_GIT_BRANCH, ISocket, SocketHeartbeat, } from "@superblocksteam/shared";
|
|
5
|
+
import { HostedOrchestratorRefusedError, refusingOrchestratorClient, } from "../agents/hosted-boundary.js";
|
|
5
6
|
import { canonicalizeOrchestratorBaseUrl, orchestratorUrlDependsOnProfile, pickOrchestratorBaseUrl, } from "../agents/resolve-orchestrator-url.js";
|
|
6
7
|
import { gatewayDebug } from "../debug.js";
|
|
7
8
|
import { resolveAppEditorProfileKey, } from "../integrations/profile-key.js";
|
|
8
9
|
import { resolveProfileForApplication } from "../integrations/resolve-profile.js";
|
|
10
|
+
import { internalIngress } from "../internal-ingress.js";
|
|
9
11
|
import { HttpOrchestratorClient, } from "../orchestrator/client.js";
|
|
10
12
|
import { recordCheckpointOutcome, recordIntegrationProfileResolution, } from "../telemetry/metrics.js";
|
|
11
13
|
import { sanitizeAgentFacingText } from "./agent-facing-text.js";
|
|
@@ -17,6 +19,18 @@ import { appendRecentToolRun, buildRecentToolRun } from "./recent-tool-runs.js";
|
|
|
17
19
|
import { PromptNotSentError, } from "./session-peer.js";
|
|
18
20
|
import { DEFAULT_SETTLE_MS, TurnCollector } from "./turn-collector.js";
|
|
19
21
|
const RELEASE_TURN_LOCK_METHOD = "editor.releaseTurnLock";
|
|
22
|
+
/**
|
|
23
|
+
* The branch an edit-mode SDK API run fetches its code from. The server only
|
|
24
|
+
* lets the session's edit token read code on a named branch, so this always
|
|
25
|
+
* names one: the branch the server opened the live edit on, sent as the server
|
|
26
|
+
* named it, else the branch that was picked. The server's branch wins because
|
|
27
|
+
* connect can open a different branch than the one picked (for example main,
|
|
28
|
+
* when another user holds the picked branch), and the runs must test the code
|
|
29
|
+
* being edited.
|
|
30
|
+
*/
|
|
31
|
+
function sdkApiRunBranch(held) {
|
|
32
|
+
return held.liveEditBranch || held.branchName || DEFAULT_NON_GIT_BRANCH;
|
|
33
|
+
}
|
|
20
34
|
function editorStructureScopeKey(applicationId, branch) {
|
|
21
35
|
return `${applicationId}\u0000${branch?.trim() ?? ""}`;
|
|
22
36
|
}
|
|
@@ -590,7 +604,9 @@ function decisionFields(decision) {
|
|
|
590
604
|
return decision ? { decision } : {};
|
|
591
605
|
}
|
|
592
606
|
async function attempt(url, timeoutMs, onSocketError) {
|
|
593
|
-
const socket = new WebSocket(url, GATEWAY_PROTOCOL
|
|
607
|
+
const socket = new WebSocket(url, GATEWAY_PROTOCOL, {
|
|
608
|
+
createConnection: internalIngress.createConnection(url),
|
|
609
|
+
});
|
|
594
610
|
return await new Promise((resolve, reject) => {
|
|
595
611
|
const timer = setTimeout(() => {
|
|
596
612
|
socket.terminate();
|
|
@@ -777,7 +793,7 @@ export class WebSocketSessionPeer {
|
|
|
777
793
|
editorStructureByScope = new Map();
|
|
778
794
|
/** Facts about an application that outlive any one turn. */
|
|
779
795
|
appState;
|
|
780
|
-
constructor(options
|
|
796
|
+
constructor(options) {
|
|
781
797
|
this.options = options;
|
|
782
798
|
this.appState =
|
|
783
799
|
options.appState ??
|
|
@@ -959,6 +975,10 @@ export class WebSocketSessionPeer {
|
|
|
959
975
|
: {}),
|
|
960
976
|
};
|
|
961
977
|
}
|
|
978
|
+
anyTurnRunning() {
|
|
979
|
+
return (this.appState.hasPendingStart() ||
|
|
980
|
+
[...this.turns.values()].some((turn) => !turn.finished));
|
|
981
|
+
}
|
|
962
982
|
clearPendingPlan(applicationId) {
|
|
963
983
|
this.appState.clearPending(applicationId);
|
|
964
984
|
}
|
|
@@ -1009,6 +1029,7 @@ export class WebSocketSessionPeer {
|
|
|
1009
1029
|
held.organizationId = input.organizationId;
|
|
1010
1030
|
}
|
|
1011
1031
|
held.sessionToken = input.sessionToken;
|
|
1032
|
+
held.liveEditBranch = input.liveEditBranch;
|
|
1012
1033
|
try {
|
|
1013
1034
|
await this.synchronizeChatState(held, input.sessionToken);
|
|
1014
1035
|
await this.resolveHeldProfileKey(held);
|
|
@@ -1257,6 +1278,7 @@ export class WebSocketSessionPeer {
|
|
|
1257
1278
|
held.organizationId = input.organizationId;
|
|
1258
1279
|
}
|
|
1259
1280
|
held.sessionToken = input.sessionToken;
|
|
1281
|
+
held.liveEditBranch = input.liveEditBranch;
|
|
1260
1282
|
await beforePromptDeadline(this.resolveHeldProfileKey(held), deadline, input.signal);
|
|
1261
1283
|
await beforePromptDeadline(this.resolveHeldOrchestrator(held), deadline, input.signal);
|
|
1262
1284
|
}
|
|
@@ -1452,6 +1474,7 @@ export class WebSocketSessionPeer {
|
|
|
1452
1474
|
mode: input.mode === "BUILD" ? SharedAiMode.BUILD : SharedAiMode.PLAN,
|
|
1453
1475
|
}),
|
|
1454
1476
|
prompt: input.prompt,
|
|
1477
|
+
mcpClientName: input.mcpClientName,
|
|
1455
1478
|
promptContext: {
|
|
1456
1479
|
attachments: input.attachments ?? [],
|
|
1457
1480
|
entities: [],
|
|
@@ -2452,6 +2475,7 @@ export class WebSocketSessionPeer {
|
|
|
2452
2475
|
carryOver(fresh, previous) {
|
|
2453
2476
|
fresh.apiKey = previous.apiKey;
|
|
2454
2477
|
fresh.branchName = previous.branchName;
|
|
2478
|
+
fresh.liveEditBranch = previous.liveEditBranch;
|
|
2455
2479
|
fresh.isFactsEnabled = previous.isFactsEnabled;
|
|
2456
2480
|
fresh.llmConfig = previous.llmConfig;
|
|
2457
2481
|
fresh.orchestrator = previous.orchestrator;
|
|
@@ -2619,7 +2643,20 @@ export class WebSocketSessionPeer {
|
|
|
2619
2643
|
? normalizeCheckpointWarning(result?.warning)
|
|
2620
2644
|
: undefined;
|
|
2621
2645
|
const captureCheckpointScreenshot = this.options.captureCheckpointScreenshot;
|
|
2622
|
-
|
|
2646
|
+
const previewBlocked = commitId !== undefined &&
|
|
2647
|
+
captureCheckpointScreenshot !== undefined &&
|
|
2648
|
+
this.hostedPreviewBlocked(input.held);
|
|
2649
|
+
if (previewBlocked) {
|
|
2650
|
+
// The preview picks the org's agents itself, so loading it here would
|
|
2651
|
+
// run the app's on-load APIs against the customer's agent from our
|
|
2652
|
+
// control plane.
|
|
2653
|
+
console.warn("gateway checkpoint screenshot skipped", {
|
|
2654
|
+
applicationId: input.held.applicationId,
|
|
2655
|
+
commitId,
|
|
2656
|
+
reason: "hosted_customer_agent",
|
|
2657
|
+
});
|
|
2658
|
+
}
|
|
2659
|
+
if (commitId && captureCheckpointScreenshot && !previewBlocked) {
|
|
2623
2660
|
const screenshotTask = (async () => {
|
|
2624
2661
|
const budgetMs = this.options.checkpointScreenshotTimeoutMs ??
|
|
2625
2662
|
DEFAULT_CHECKPOINT_SCREENSHOT_TIMEOUT_MS;
|
|
@@ -3666,7 +3703,7 @@ export class WebSocketSessionPeer {
|
|
|
3666
3703
|
return {
|
|
3667
3704
|
apiKey: held.apiKey,
|
|
3668
3705
|
applicationId: held.applicationId,
|
|
3669
|
-
branchName: held
|
|
3706
|
+
branchName: sdkApiRunBranch(held),
|
|
3670
3707
|
organizationId: held.organizationId,
|
|
3671
3708
|
orchestrator: held.orchestrator,
|
|
3672
3709
|
profileKey: held.profileKey,
|
|
@@ -3696,6 +3733,16 @@ export class WebSocketSessionPeer {
|
|
|
3696
3733
|
}
|
|
3697
3734
|
return this.buildHeldBrowserContext(held);
|
|
3698
3735
|
}
|
|
3736
|
+
/**
|
|
3737
|
+
* Whether the hosted Platform MCP must keep this session's app out of any
|
|
3738
|
+
* browser it runs. A hosted session has an agent URL only when the org's
|
|
3739
|
+
* agent is one Superblocks runs, so a session without one (refused, or not
|
|
3740
|
+
* discovered) fails closed. The CLI runs on the person's own machine and is
|
|
3741
|
+
* never blocked here.
|
|
3742
|
+
*/
|
|
3743
|
+
hostedPreviewBlocked(held) {
|
|
3744
|
+
return this.options.hosted && !held.orchestratorUrl;
|
|
3745
|
+
}
|
|
3699
3746
|
/**
|
|
3700
3747
|
* Library iframe bootstrap from a held session. Used for Gateway's own
|
|
3701
3748
|
* live-canvas screenshot even when Clark's in-sandbox Playwright is off.
|
|
@@ -3719,12 +3766,18 @@ export class WebSocketSessionPeer {
|
|
|
3719
3766
|
});
|
|
3720
3767
|
return undefined;
|
|
3721
3768
|
}
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3769
|
+
// Hosted, both of these are the /mcp tools token, which the server refuses
|
|
3770
|
+
// when the orchestrator forwards it. Leaving the key out makes the preview
|
|
3771
|
+
// send the session token instead, which may read this app's code.
|
|
3772
|
+
const apiKey = this.options.hosted
|
|
3773
|
+
? undefined
|
|
3774
|
+
: this.options.getAccessToken
|
|
3775
|
+
? await this.options.getAccessToken()
|
|
3776
|
+
: held.apiKey;
|
|
3725
3777
|
return buildBrowserContext({
|
|
3726
3778
|
...(apiKey ? { apiKey } : {}),
|
|
3727
3779
|
applicationId: held.applicationId,
|
|
3780
|
+
branchName: sdkApiRunBranch(held),
|
|
3728
3781
|
liveEditUrl: held.liveEdit.url,
|
|
3729
3782
|
orchestratorUrl: held.orchestratorUrl,
|
|
3730
3783
|
organizationId: held.organizationId,
|
|
@@ -3896,14 +3949,35 @@ export class WebSocketSessionPeer {
|
|
|
3896
3949
|
});
|
|
3897
3950
|
return;
|
|
3898
3951
|
}
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
|
|
3952
|
+
let orchestratorUrl;
|
|
3953
|
+
try {
|
|
3954
|
+
orchestratorUrl = pickOrchestratorBaseUrl({
|
|
3955
|
+
agentType: inventory.agentType,
|
|
3956
|
+
agents: inventory.agents,
|
|
3957
|
+
controlPlaneUrl: inventory.controlPlaneUrl,
|
|
3958
|
+
hosted: this.options.hosted,
|
|
3959
|
+
profileKey,
|
|
3960
|
+
});
|
|
3961
|
+
}
|
|
3962
|
+
catch (error) {
|
|
3963
|
+
if (!(error instanceof HostedOrchestratorRefusedError)) {
|
|
3964
|
+
throw error;
|
|
3965
|
+
}
|
|
3966
|
+
// The turn still runs, so Clark can build and hear why its API runs
|
|
3967
|
+
// fail. No agent URL is kept, so none reaches the sandbox browser.
|
|
3968
|
+
held.orchestrator = refusingOrchestratorClient(error);
|
|
3969
|
+
delete held.orchestratorUrl;
|
|
3970
|
+
held.orchestratorAgentType = inventory.agentType;
|
|
3971
|
+
delete held.orchestratorStale;
|
|
3972
|
+
console.warn("gateway refused orchestrator for hosted session", {
|
|
3973
|
+
applicationId: held.applicationId,
|
|
3974
|
+
organizationId: held.organizationId,
|
|
3975
|
+
reason: error.reason,
|
|
3976
|
+
});
|
|
3977
|
+
return;
|
|
3978
|
+
}
|
|
3905
3979
|
held.orchestratorUrl = orchestratorUrl;
|
|
3906
|
-
held.orchestrator = new HttpOrchestratorClient(orchestratorUrl, undefined, this.options.getAccessToken);
|
|
3980
|
+
held.orchestrator = new HttpOrchestratorClient(orchestratorUrl, this.options.hosted, undefined, this.options.getAccessToken);
|
|
3907
3981
|
held.orchestratorAgentType = inventory.agentType;
|
|
3908
3982
|
delete held.orchestratorStale;
|
|
3909
3983
|
console.error("gateway resolved orchestrator url", {
|