veryfront 0.1.1125 → 0.1.1127
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/esm/deno.js +1 -1
- package/esm/src/agent/hosted/child-fork-execution-runner.d.ts +2 -0
- package/esm/src/agent/hosted/child-fork-execution-runner.d.ts.map +1 -1
- package/esm/src/agent/hosted/child-fork-execution-runner.js +11 -2
- package/esm/src/agent/hosted/child-fork-instructions.js +1 -1
- package/esm/src/agent/hosted/child-steering-tools.js +3 -3
- package/esm/src/agent/hosted/child-tool-input.d.ts +2 -2
- package/esm/src/agent/hosted/child-tool-input.js +1 -1
- package/esm/src/agent/hosted/default-invoke-agent-tool.d.ts +4 -2
- package/esm/src/agent/hosted/default-invoke-agent-tool.d.ts.map +1 -1
- package/esm/src/agent/hosted/default-invoke-agent-tool.js +21 -3
- package/esm/src/agent/hosted/durable-child-fork-execution.d.ts +2 -0
- package/esm/src/agent/hosted/durable-child-fork-execution.d.ts.map +1 -1
- package/esm/src/agent/hosted/durable-child-fork-execution.js +19 -3
- package/esm/src/agent/hosted/project-reference-resolver.d.ts +21 -0
- package/esm/src/agent/hosted/project-reference-resolver.d.ts.map +1 -0
- package/esm/src/agent/hosted/project-reference-resolver.js +18 -0
- package/esm/src/agent/hosted/project-remote-tool-source.js +3 -3
- package/esm/src/agent/project/context.d.ts +1 -1
- package/esm/src/agent/project/context.d.ts.map +1 -1
- package/esm/src/agent/project/context.js +8 -2
- package/esm/src/config/environment-config.d.ts +5 -0
- package/esm/src/config/environment-config.d.ts.map +1 -1
- package/esm/src/config/environment-config.js +5 -2
- package/esm/src/middleware/builtin/timeout.d.ts +1 -1
- package/esm/src/middleware/builtin/timeout.d.ts.map +1 -1
- package/esm/src/middleware/builtin/timeout.js +3 -4
- package/esm/src/rendering/orchestrator/module-collection.d.ts +2 -2
- package/esm/src/rendering/orchestrator/module-collection.js +2 -2
- package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/pipeline.js +7 -1
- package/esm/src/rendering/orchestrator/types.d.ts +2 -0
- package/esm/src/rendering/orchestrator/types.d.ts.map +1 -1
- package/esm/src/rendering/renderer.d.ts.map +1 -1
- package/esm/src/rendering/renderer.js +18 -8
- package/esm/src/rendering/utils/stream-utils.d.ts +19 -7
- package/esm/src/rendering/utils/stream-utils.d.ts.map +1 -1
- package/esm/src/rendering/utils/stream-utils.js +77 -12
- package/esm/src/routing/api/module-loader/loader.js +23 -0
- package/esm/src/server/handlers/request/module/page-data-endpoint-handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/module/page-data-endpoint-handler.js +16 -3
- package/esm/src/transforms/esm/transform-cache.d.ts.map +1 -1
- package/esm/src/transforms/esm/transform-cache.js +2 -16
- package/esm/src/utils/singleflight.d.ts +5 -0
- package/esm/src/utils/singleflight.d.ts.map +1 -1
- package/esm/src/utils/singleflight.js +29 -0
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +5 -5
package/esm/deno.js
CHANGED
|
@@ -14,6 +14,7 @@ import type { HostedChildForkStreamLogger, HostedChildForkStreamTraceInput } fro
|
|
|
14
14
|
import type { HostedChildRunIdentifiers } from "./child-status.js";
|
|
15
15
|
import { type HostedChildForkRuntimeConfig, type HostedChildForkToolInput, type HostedChildInvocationContext, type ResolveHostedChildForkRuntimeConfigInput } from "./child-tool-input.js";
|
|
16
16
|
import type { SourceIntegrationPolicyManifest } from "../../integrations/source-policy.js";
|
|
17
|
+
import { type HostedProjectReferenceResolver } from "./project-reference-resolver.js";
|
|
17
18
|
/** Default value for hosted child fork stream idle timeout ms. */
|
|
18
19
|
export declare const DEFAULT_HOSTED_CHILD_FORK_STREAM_IDLE_TIMEOUT_MS = 45000;
|
|
19
20
|
/** Default value for hosted child fork stream active tool timeout ms. */
|
|
@@ -104,6 +105,7 @@ export type ExecuteHostedChildForkToolInputOptions<TAttributes extends HostToolT
|
|
|
104
105
|
defaultMaxSteps: number;
|
|
105
106
|
contextModel?: string;
|
|
106
107
|
onRequestedProjectId?: (projectId: string) => void | Promise<void>;
|
|
108
|
+
resolveProjectReference?: HostedProjectReferenceResolver;
|
|
107
109
|
prepareToolAssembly: (input: {
|
|
108
110
|
runtimeConfig: HostedChildForkRuntimeConfig;
|
|
109
111
|
requestedTools?: HostedChildForkToolInput["tools"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-fork-execution-runner.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/child-fork-execution-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAKL,KAAK,gCAAgC,EACtC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,wCAAwC,EAAE,MAAM,4BAA4B,CAAC;AAK3F,OAAO,EAEL,KAAK,kCAAkC,EACxC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,KAAK,wCAAwC,EAE9C,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,KAAK,6BAA6B,EAElC,KAAK,6CAA6C,EACnD,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,0BAA0B,EAEhC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAEV,+CAA+C,EAChD,MAAM,qCAAqC,CAAC;AAC7C,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,KAAK,EACV,2BAA2B,EAC3B,+BAA+B,EAChC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EAEjC,KAAK,wCAAwC,EAE9C,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"child-fork-execution-runner.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/child-fork-execution-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import { startHostedChildForkRuntimeWithHostTools, } from "./child-fork-runtime-
|
|
|
7
7
|
import { runAgentRuntimeForkStep, } from "../streaming/fork-runtime-stream.js";
|
|
8
8
|
import { throwIfChildRunAborted } from "../child-run/execution-support.js";
|
|
9
9
|
import { resolveHostedChildForkRuntimeConfig, withHostedChildInvocationContext, } from "./child-tool-input.js";
|
|
10
|
+
import { resolveHostedProjectReference, } from "./project-reference-resolver.js";
|
|
10
11
|
/** Default value for hosted child fork stream idle timeout ms. */
|
|
11
12
|
export const DEFAULT_HOSTED_CHILD_FORK_STREAM_IDLE_TIMEOUT_MS = 45_000;
|
|
12
13
|
/** Default value for hosted child fork stream active tool timeout ms. */
|
|
@@ -53,8 +54,16 @@ function defaultResolveSystem(input) {
|
|
|
53
54
|
}
|
|
54
55
|
/** Input payload for execute hosted child fork tool. */
|
|
55
56
|
export async function executeHostedChildForkToolInput(input) {
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
const requestedProjectReference = input.forkInput.project_reference;
|
|
58
|
+
if (requestedProjectReference) {
|
|
59
|
+
const resolver = input.resolveProjectReference ?? resolveHostedProjectReference;
|
|
60
|
+
const resolvedProject = await resolver({
|
|
61
|
+
projectReference: requestedProjectReference,
|
|
62
|
+
authToken: input.authToken,
|
|
63
|
+
apiUrl: input.apiUrl,
|
|
64
|
+
abortSignal: input.abortSignal,
|
|
65
|
+
});
|
|
66
|
+
await input.onRequestedProjectId?.(resolvedProject.projectId);
|
|
58
67
|
}
|
|
59
68
|
const forkInput = input.inputAlreadyHasInvocationContext
|
|
60
69
|
? input.forkInput
|
|
@@ -65,7 +65,7 @@ export function buildHostedChildForkInstructions(context = {}) {
|
|
|
65
65
|
project_reference: "${projectId}"
|
|
66
66
|
${branchLine}
|
|
67
67
|
|
|
68
|
-
Use project_reference only for tools whose schema requires project_reference. Some MCP tools use different identifiers; for example sandbox command tools use the sandbox session id returned by create_sandbox_session, and create_sandbox_session uses
|
|
68
|
+
Use project_reference only for tools whose schema requires project_reference. Some MCP tools use different identifiers; for example sandbox command tools use the sandbox session id returned by create_sandbox_session, and create_sandbox_session uses project_reference when billing/project scope is needed.
|
|
69
69
|
IMPORTANT: Also pass branch_id to file tools to ensure edits go to the correct branch.
|
|
70
70
|
Do NOT guess or invent project references, always use the values above.
|
|
71
71
|
</project_context>`);
|
|
@@ -42,9 +42,9 @@ export function wrapHostedChildProjectSwitchTool(input) {
|
|
|
42
42
|
execute: async (toolInput, execOptions) => {
|
|
43
43
|
const normalizedToolInput = toChildRunToolInputRecord(toolInput);
|
|
44
44
|
const result = await originalExecute(toolInput, execOptions);
|
|
45
|
-
const
|
|
46
|
-
const confirmedProjectId = typeof
|
|
47
|
-
? getConfirmedProjectContextSwitchId(result,
|
|
45
|
+
const projectReference = normalizedToolInput.project_reference;
|
|
46
|
+
const confirmedProjectId = typeof projectReference === "string"
|
|
47
|
+
? getConfirmedProjectContextSwitchId(result, projectReference)
|
|
48
48
|
: null;
|
|
49
49
|
if (confirmedProjectId) {
|
|
50
50
|
await input.onConfirmedProjectSwitch(confirmedProjectId);
|
|
@@ -10,7 +10,7 @@ export declare const getHostedChildForkToolInputSchema: () => import("../../inte
|
|
|
10
10
|
description: import("../../internal-agents/schema.js").Schema<string>;
|
|
11
11
|
prompt: import("../../internal-agents/schema.js").Schema<string>;
|
|
12
12
|
context: import("../../internal-agents/schema.js").Schema<Record<string, import("../../schemas/primitives.js").JsonValue>>;
|
|
13
|
-
|
|
13
|
+
project_reference: import("../../internal-agents/schema.js").Schema<string | undefined>;
|
|
14
14
|
tools: import("../../internal-agents/schema.js").Schema<string[] | undefined>;
|
|
15
15
|
model: import("../../internal-agents/schema.js").Schema<string | undefined>;
|
|
16
16
|
temperature: import("../../internal-agents/schema.js").Schema<number | undefined>;
|
|
@@ -25,7 +25,7 @@ export declare const hostedChildForkToolInputSchema: import("../../internal-agen
|
|
|
25
25
|
description: import("../../internal-agents/schema.js").Schema<string>;
|
|
26
26
|
prompt: import("../../internal-agents/schema.js").Schema<string>;
|
|
27
27
|
context: import("../../internal-agents/schema.js").Schema<Record<string, import("../../schemas/primitives.js").JsonValue>>;
|
|
28
|
-
|
|
28
|
+
project_reference: import("../../internal-agents/schema.js").Schema<string | undefined>;
|
|
29
29
|
tools: import("../../internal-agents/schema.js").Schema<string[] | undefined>;
|
|
30
30
|
model: import("../../internal-agents/schema.js").Schema<string | undefined>;
|
|
31
31
|
temperature: import("../../internal-agents/schema.js").Schema<number | undefined>;
|
|
@@ -8,7 +8,7 @@ export const getHostedChildForkToolInputSchema = defineSchema((v) => v.object({
|
|
|
8
8
|
description: v.string().describe("3-5 word task summary"),
|
|
9
9
|
prompt: v.string().describe("Detailed instructions for the task"),
|
|
10
10
|
context: v.record(v.string(), getJsonValueSchema()).default({}).describe("Structured data payload for the child task. Use this for critical facts, records, ids, decisions, and values the child must act on. Defaults to {} when the delegation has no record or evidence payload."),
|
|
11
|
-
|
|
11
|
+
project_reference: v.string().optional().describe("Override project context by UUID or slug. Use after studio_open_project."),
|
|
12
12
|
tools: v.array(v.string()).optional().describe("Tool subset for this fork. Omit = inherit all parent tools."),
|
|
13
13
|
model: v.string().optional().describe('Model override (e.g. "sonnet" for cheaper work).'),
|
|
14
14
|
temperature: v.number().min(0).max(2).optional().describe("Sampling temperature override. Omit for the hosted child default."),
|
|
@@ -13,6 +13,7 @@ import { type HostedChildForkRuntimeConfig, type HostedChildForkToolInput, type
|
|
|
13
13
|
import type { RuntimeClientProfile } from "../runtime/client-profile.js";
|
|
14
14
|
import type { RuntimeLoadSkillToolContext } from "../runtime/load-skill-tool.js";
|
|
15
15
|
import type { RuntimeReasoningOption } from "../types.js";
|
|
16
|
+
import { type HostedProjectReferenceResolver } from "./project-reference-resolver.js";
|
|
16
17
|
/** Context for default hosted invoke agent. */
|
|
17
18
|
export type DefaultHostedInvokeAgentContext = MutableAgentProjectContext & {
|
|
18
19
|
authToken: string;
|
|
@@ -80,6 +81,7 @@ export type DefaultHostedInvokeAgentToolOptions<TContext extends DefaultHostedIn
|
|
|
80
81
|
shouldRethrowError?: (error: unknown) => boolean;
|
|
81
82
|
buildGlobalTools?: (context: TContext, childAgentId: string, childConfig?: DefaultHostedChildAgentExecutionConfig, durableChildRun?: HostedChildRunIdentifiers) => HostToolSet;
|
|
82
83
|
resolveChildAgentExecutionConfig?: (childAgentId: string, projectId: string) => Promise<DefaultHostedChildAgentExecutionConfig | undefined>;
|
|
84
|
+
resolveProjectReference?: HostedProjectReferenceResolver;
|
|
83
85
|
refreshProjectSkillIds?: DefaultHostedInvokeAgentProjectRefresh<TContext>;
|
|
84
86
|
/** Require durable child lifecycle even when legacy generic delegation is disabled. */
|
|
85
87
|
requireDurableInvokeAgent?: boolean;
|
|
@@ -106,7 +108,7 @@ export declare const getDefaultHostedInvokeAgentInputSchema: () => import("../..
|
|
|
106
108
|
prompt: string;
|
|
107
109
|
context: Record<string, import("../../schemas/primitives.js").JsonValue>;
|
|
108
110
|
} & {
|
|
109
|
-
|
|
111
|
+
project_reference?: string | undefined;
|
|
110
112
|
tools?: string[] | undefined;
|
|
111
113
|
model?: string | undefined;
|
|
112
114
|
temperature?: number | undefined;
|
|
@@ -124,7 +126,7 @@ export declare const defaultHostedInvokeAgentInputSchema: import("../../internal
|
|
|
124
126
|
prompt: string;
|
|
125
127
|
context: Record<string, import("../../schemas/primitives.js").JsonValue>;
|
|
126
128
|
} & {
|
|
127
|
-
|
|
129
|
+
project_reference?: string | undefined;
|
|
128
130
|
tools?: string[] | undefined;
|
|
129
131
|
model?: string | undefined;
|
|
130
132
|
temperature?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-invoke-agent-tool.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/default-invoke-agent-tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAEL,gCAAgC,EAChC,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EAErB,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,kCAAkC,CAAC;AAErF,OAAO,KAAK,EACV,uBAAuB,EAExB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAI1E,OAAO,EACL,KAAK,6BAA6B,EAElC,KAAK,6CAA6C,EACnD,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,+CAA+C,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAQnF,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAML,KAAK,8BAA8B,EACpC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAEL,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EAElC,MAAM,uBAAuB,CAAC;AAM/B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"default-invoke-agent-tool.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/default-invoke-agent-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@ import { prepareDefaultHostedChildForkToolAssembly } from "./child-requested-too
|
|
|
20
20
|
import { withRootOwnedChildResultHint } from "../conversation/delegation-policy.js";
|
|
21
21
|
import { getRuntimeSourceIntegrationPolicyFromContext } from "../runtime/runtime-tool-config.js";
|
|
22
22
|
import { buildHostedChildForkInstructions } from "./child-fork-instructions.js";
|
|
23
|
+
import { resolveHostedProjectReference, } from "./project-reference-resolver.js";
|
|
23
24
|
const defaultHostedInvokeAgentSelectionFields = (v) => ({
|
|
24
25
|
agent_id: v.string()
|
|
25
26
|
.min(1, "agent_id is required")
|
|
@@ -265,12 +266,29 @@ export const defaultHostedInvokeAgentToolInternals = {
|
|
|
265
266
|
export async function executeDefaultHostedInvokeAgentTool(options, input, childAgentId, executionContext) {
|
|
266
267
|
let executionSnapshot = null;
|
|
267
268
|
const config = options.getConfig();
|
|
268
|
-
const targetProjectId = input.project_id ?? options.context.projectId;
|
|
269
|
-
const childConfig = await options.resolveChildAgentExecutionConfig?.(childAgentId, targetProjectId);
|
|
270
269
|
const toolCallId = getToolCallId(executionContext);
|
|
271
270
|
const abortSignal = getAbortSignal(executionContext);
|
|
271
|
+
const requestedProjectReference = input.project_reference;
|
|
272
|
+
let targetProjectId = options.context.projectId;
|
|
273
|
+
let resolvedInput = input;
|
|
274
|
+
if (requestedProjectReference) {
|
|
275
|
+
const resolver = options.resolveProjectReference ?? resolveHostedProjectReference;
|
|
276
|
+
const resolvedProject = await resolver({
|
|
277
|
+
projectReference: requestedProjectReference,
|
|
278
|
+
authToken: options.context.authToken,
|
|
279
|
+
apiUrl: config.apiUrl,
|
|
280
|
+
abortSignal,
|
|
281
|
+
});
|
|
282
|
+
targetProjectId = resolvedProject.projectId;
|
|
283
|
+
await applyRequestedProjectId(options, targetProjectId);
|
|
284
|
+
resolvedInput = {
|
|
285
|
+
...input,
|
|
286
|
+
project_reference: undefined,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
const childConfig = await options.resolveChildAgentExecutionConfig?.(childAgentId, targetProjectId);
|
|
272
290
|
const sourceIntegrationPolicy = getRuntimeSourceIntegrationPolicyFromContext(executionContext);
|
|
273
|
-
const configuredInput = applyChildAgentExecutionConfig(
|
|
291
|
+
const configuredInput = applyChildAgentExecutionConfig(resolvedInput, childConfig);
|
|
274
292
|
const forkInput = configuredInput;
|
|
275
293
|
const durableInvokeRecorder = createHostedDurableChildInvokeTraceRecorder({
|
|
276
294
|
traceBase: {
|
|
@@ -8,6 +8,7 @@ import { bootstrapHostedChildRun } from "./child-bootstrap.js";
|
|
|
8
8
|
import { runHostedChildExecutionLifecycle, shouldSkipHostedChildTerminalPersistence } from "./child-lifecycle.js";
|
|
9
9
|
import { type HostedChildRunIdentifiers, type HostedChildTerminalStatus } from "./child-status.js";
|
|
10
10
|
import { type HostedChildForkToolInput, type HostedChildInvocationContext } from "./child-tool-input.js";
|
|
11
|
+
import { type HostedProjectReferenceResolver } from "./project-reference-resolver.js";
|
|
11
12
|
/** Options accepted by hosted durable child execution. */
|
|
12
13
|
export type HostedDurableChildExecutionOptions = {
|
|
13
14
|
durableChildRun?: HostedChildRunIdentifiers;
|
|
@@ -162,6 +163,7 @@ export type ExecuteHostedDurableChildForkInput<TResult, TLocalResult extends Chi
|
|
|
162
163
|
getRuntimeTargetEnvironmentId?: () => string | null | undefined;
|
|
163
164
|
getBranchId?: () => string | null | undefined;
|
|
164
165
|
getContextModel?: () => string | undefined;
|
|
166
|
+
resolveProjectReference?: HostedProjectReferenceResolver;
|
|
165
167
|
defaultModel: string;
|
|
166
168
|
resolveModelId: (model: string) => string;
|
|
167
169
|
resolveProvider: (modelId: string) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable-child-fork-execution.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/durable-child-fork-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC3B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,uCAAuC,EAAE,MAAM,qCAAqC,CAAC;AAC9F,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EACL,gCAAgC,EAChC,wCAAwC,EACzC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,yBAAyB,EAE9B,KAAK,yBAAyB,EAC/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EAElC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"durable-child-fork-execution.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/durable-child-fork-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { runHostedChildExecutionLifecycle, shouldSkipHostedChildTerminalPersiste
|
|
|
8
8
|
import { HostedChildTerminalStateError, } from "./child-status.js";
|
|
9
9
|
import { buildHostedChildForkEffectivePrompt, withHostedChildInvocationContext, } from "./child-tool-input.js";
|
|
10
10
|
import { isChildRunAbortError, throwIfChildRunAborted } from "../child-run/execution-support.js";
|
|
11
|
+
import { resolveHostedProjectReference, } from "./project-reference-resolver.js";
|
|
11
12
|
function buildHostedChildResultSummaryForMode(input) {
|
|
12
13
|
if (input.snapshot?.fullResultText !== null && input.snapshot?.fullResultText !== undefined) {
|
|
13
14
|
return buildChildRunResultSummary(input.snapshot.fullResultText, {
|
|
@@ -217,9 +218,20 @@ function resolveContextModel(input) {
|
|
|
217
218
|
async function defaultRunBootstrap(operation) {
|
|
218
219
|
return operation();
|
|
219
220
|
}
|
|
221
|
+
function getRequestedProjectReference(forkInput) {
|
|
222
|
+
return forkInput.project_reference ?? null;
|
|
223
|
+
}
|
|
220
224
|
async function prepareHostedDurableChildBootstrapContext(input) {
|
|
221
|
-
|
|
222
|
-
|
|
225
|
+
const requestedProjectReference = getRequestedProjectReference(input.forkInput);
|
|
226
|
+
if (requestedProjectReference) {
|
|
227
|
+
const resolver = input.resolveProjectReference ?? resolveHostedProjectReference;
|
|
228
|
+
const resolvedProject = await resolver({
|
|
229
|
+
projectReference: requestedProjectReference,
|
|
230
|
+
authToken: input.authToken,
|
|
231
|
+
apiUrl: input.apiUrl,
|
|
232
|
+
abortSignal: input.executionOptions.abortSignal,
|
|
233
|
+
});
|
|
234
|
+
await input.onRequestedProjectId?.(resolvedProject.projectId);
|
|
223
235
|
}
|
|
224
236
|
const targets = resolveConversationRunTargets({
|
|
225
237
|
projectId: input.getProjectId() ?? null,
|
|
@@ -254,7 +266,11 @@ async function bootstrapHostedDurableChildFork(input) {
|
|
|
254
266
|
authToken: input.authToken,
|
|
255
267
|
apiUrl: input.apiUrl,
|
|
256
268
|
ensureProjectId: input.getProjectId() ?? undefined,
|
|
257
|
-
runProjectId: input.
|
|
269
|
+
runProjectId: getRequestedProjectReference(input.forkInput)
|
|
270
|
+
? input.getProjectId() ?? undefined
|
|
271
|
+
: input.runProjectId !== undefined
|
|
272
|
+
? input.runProjectId
|
|
273
|
+
: input.getProjectId() ?? undefined,
|
|
258
274
|
parentConversationId: input.bootstrapContext.parentConversationId,
|
|
259
275
|
parentRunId: input.bootstrapContext.parentRunId,
|
|
260
276
|
parentMessageId: input.bootstrapContext.parentMessageId,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Resolver for public project references used by hosted agent tools. */
|
|
2
|
+
export type HostedProjectReferenceResolver = (input: {
|
|
3
|
+
projectReference: string;
|
|
4
|
+
authToken: string;
|
|
5
|
+
apiUrl: string;
|
|
6
|
+
abortSignal?: AbortSignal;
|
|
7
|
+
}) => Promise<{
|
|
8
|
+
projectId: string;
|
|
9
|
+
slug?: string | null;
|
|
10
|
+
}>;
|
|
11
|
+
/** Resolve a public project UUID or slug through the API boundary. */
|
|
12
|
+
export declare function resolveHostedProjectReference(input: {
|
|
13
|
+
projectReference: string;
|
|
14
|
+
authToken: string;
|
|
15
|
+
apiUrl: string;
|
|
16
|
+
abortSignal?: AbortSignal;
|
|
17
|
+
}): Promise<{
|
|
18
|
+
projectId: string;
|
|
19
|
+
slug?: string | null;
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=project-reference-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-reference-resolver.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/project-reference-resolver.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,MAAM,MAAM,8BAA8B,GAAG,CAAC,KAAK,EAAE;IACnD,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,KAAK,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAE3D,sEAAsE;AACtE,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAqBvD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Resolve a public project UUID or slug through the API boundary. */
|
|
2
|
+
export async function resolveHostedProjectReference(input) {
|
|
3
|
+
const response = await fetch(new URL(`/projects/${encodeURIComponent(input.projectReference)}`, input.apiUrl), {
|
|
4
|
+
headers: { Authorization: `Bearer ${input.authToken}` },
|
|
5
|
+
signal: input.abortSignal,
|
|
6
|
+
});
|
|
7
|
+
if (!response.ok) {
|
|
8
|
+
throw new Error(`Project lookup failed (${response.status})`);
|
|
9
|
+
}
|
|
10
|
+
const data = await response.json();
|
|
11
|
+
if (typeof data.id !== "string" || data.id.length === 0) {
|
|
12
|
+
throw new Error("Project lookup response did not include project id");
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
projectId: data.id,
|
|
16
|
+
slug: typeof data.slug === "string" ? data.slug : null,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
@@ -96,9 +96,9 @@ export function createHostedProjectRemoteToolSource(input) {
|
|
|
96
96
|
return result;
|
|
97
97
|
}
|
|
98
98
|
if (isProjectNavigationRemoteTool(toolName, input.projectScopedRemoteToolOptions)) {
|
|
99
|
-
const
|
|
100
|
-
const confirmedProjectId = typeof
|
|
101
|
-
? getConfirmedProjectContextSwitchId(result,
|
|
99
|
+
const requestedProjectReference = trustedToolInput.project_reference;
|
|
100
|
+
const confirmedProjectId = typeof requestedProjectReference === "string"
|
|
101
|
+
? getConfirmedProjectContextSwitchId(result, requestedProjectReference)
|
|
102
102
|
: null;
|
|
103
103
|
if (confirmedProjectId) {
|
|
104
104
|
await input.onProjectSwitch?.(confirmedProjectId);
|
|
@@ -11,5 +11,5 @@ export interface MutableAgentProjectContext {
|
|
|
11
11
|
/** Apply agent project context change helper. */
|
|
12
12
|
export declare function applyAgentProjectContextChange(context: MutableAgentProjectContext, projectId: string): boolean;
|
|
13
13
|
/** Return confirmed project context switch ID. */
|
|
14
|
-
export declare function getConfirmedProjectContextSwitchId(result: unknown,
|
|
14
|
+
export declare function getConfirmedProjectContextSwitchId(result: unknown, requestedProjectReference?: string): string | null;
|
|
15
15
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/project/context.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,aAAa,GAAG,aAAa,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAC5E,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED,iDAAiD;AACjD,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,0BAA0B,EACnC,SAAS,EAAE,MAAM,GAChB,OAAO,CAYT;AA6BD,kDAAkD;AAClD,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,OAAO,EACf,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/project/context.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,aAAa,GAAG,aAAa,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAC5E,0BAA0B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED,iDAAiD;AACjD,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,0BAA0B,EACnC,SAAS,EAAE,MAAM,GAChB,OAAO,CAYT;AA6BD,kDAAkD;AAClD,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,OAAO,EACf,yBAAyB,CAAC,EAAE,MAAM,GACjC,MAAM,GAAG,IAAI,CAqBf"}
|
|
@@ -32,7 +32,7 @@ function getProjectContextSwitchContent(result) {
|
|
|
32
32
|
return null;
|
|
33
33
|
}
|
|
34
34
|
/** Return confirmed project context switch ID. */
|
|
35
|
-
export function getConfirmedProjectContextSwitchId(result,
|
|
35
|
+
export function getConfirmedProjectContextSwitchId(result, requestedProjectReference) {
|
|
36
36
|
const content = getProjectContextSwitchContent(result);
|
|
37
37
|
if (!content || Reflect.get(content, "success") !== true) {
|
|
38
38
|
return null;
|
|
@@ -41,5 +41,11 @@ export function getConfirmedProjectContextSwitchId(result, requestedProjectId) {
|
|
|
41
41
|
if (typeof projectId !== "string") {
|
|
42
42
|
return null;
|
|
43
43
|
}
|
|
44
|
-
|
|
44
|
+
const slug = Reflect.get(content, "slug");
|
|
45
|
+
if (requestedProjectReference &&
|
|
46
|
+
requestedProjectReference !== projectId &&
|
|
47
|
+
requestedProjectReference !== slug) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
return projectId;
|
|
45
51
|
}
|
|
@@ -57,6 +57,11 @@ export interface EnvironmentConfig {
|
|
|
57
57
|
v8MaxOldSpaceSize: number | undefined;
|
|
58
58
|
veryfrontVersion: string | undefined;
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Default incoming request deadline. This must remain above the renderer's
|
|
62
|
+
* 60-second pipeline deadline and below the proxy's 90-second upstream one.
|
|
63
|
+
*/
|
|
64
|
+
export declare const DEFAULT_REQUEST_TIMEOUT_MS = 75000;
|
|
60
65
|
export declare function initEnvironmentConfig(): EnvironmentConfig;
|
|
61
66
|
export declare function refreshEnvironmentConfig(): EnvironmentConfig;
|
|
62
67
|
export declare function getEnvironmentConfig(): EnvironmentConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-config.d.ts","sourceRoot":"","sources":["../../../src/src/config/environment-config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,GAAG,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IAEnB,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IAErB,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAExB,eAAe,EAAE,OAAO,CAAC;IAEzB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,kBAAkB,EAAE,OAAO,CAAC;IAE5B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,uBAAuB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,0BAA0B,EAAE,MAAM,CAAC;IAEnC,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAE5B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAE9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IAEpB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IAEtC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;
|
|
1
|
+
{"version":3,"file":"environment-config.d.ts","sourceRoot":"","sources":["../../../src/src/config/environment-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,11 @@ import { getHostTelemetryEnv } from "../observability/tracing/telemetry-env.js";
|
|
|
3
3
|
import { isTruthyEnvValue } from "../utils/constants/env.js";
|
|
4
4
|
import { logger } from "../utils/logger/logger.js";
|
|
5
5
|
import { hasEnvLoaded } from "../utils/env-loader.js";
|
|
6
|
-
/**
|
|
7
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Default incoming request deadline. This must remain above the renderer's
|
|
8
|
+
* 60-second pipeline deadline and below the proxy's 90-second upstream one.
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_REQUEST_TIMEOUT_MS = 75_000;
|
|
8
11
|
/** Default timeout for outgoing HTTP fetch calls (used when VF_HTTP_FETCH_TIMEOUT is set but unparseable) */
|
|
9
12
|
const DEFAULT_HTTP_FETCH_TIMEOUT_MS = 30_000;
|
|
10
13
|
const DEFAULTS = {
|
|
@@ -2,7 +2,7 @@ import type { Middleware } from "./types.js";
|
|
|
2
2
|
import { type EnvironmentConfig } from "../../config/environment-config.js";
|
|
3
3
|
/** Options accepted by timeout. */
|
|
4
4
|
export interface TimeoutOptions {
|
|
5
|
-
/** Timeout in milliseconds (default:
|
|
5
|
+
/** Timeout in milliseconds (default: 75000) */
|
|
6
6
|
timeoutMs?: number;
|
|
7
7
|
/** Custom message for timeout response */
|
|
8
8
|
message?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../../src/src/middleware/builtin/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,
|
|
1
|
+
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../../src/src/middleware/builtin/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,oCAAoC,CAAC;AAQ5C,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAoBD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,CAmC5D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,iBAA0C,GAAG,MAAM,CAGzF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,UAAU,CAEtF"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { getRequest } from "./types.js";
|
|
2
2
|
import { serverLogger } from "../../utils/index.js";
|
|
3
|
-
import { getEnvironmentConfig, } from "../../config/environment-config.js";
|
|
3
|
+
import { DEFAULT_REQUEST_TIMEOUT_MS, getEnvironmentConfig, } from "../../config/environment-config.js";
|
|
4
4
|
import { HTTP_GATEWAY_TIMEOUT } from "../../utils/constants/http.js";
|
|
5
5
|
const logger = serverLogger.component("timeout");
|
|
6
|
-
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
7
6
|
const TIMEOUT_SENTINEL = Symbol("timeout");
|
|
8
7
|
const DEFAULT_EXCLUDE_PATHS = ["/healthz", "/readyz", "/_health"];
|
|
9
8
|
function isExcludedPath(pathname, exclude) {
|
|
@@ -26,7 +25,7 @@ function timeoutResponse(pathname, timeoutMs, message) {
|
|
|
26
25
|
* returns a 504 Gateway Timeout response.
|
|
27
26
|
*/
|
|
28
27
|
export function timeout(options) {
|
|
29
|
-
const timeoutMs = options?.timeoutMs ??
|
|
28
|
+
const timeoutMs = options?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
|
|
30
29
|
const message = options?.message ?? "Request timeout";
|
|
31
30
|
const exclude = options?.exclude ?? DEFAULT_EXCLUDE_PATHS;
|
|
32
31
|
return async (ctx, next) => {
|
|
@@ -65,7 +64,7 @@ export function timeout(options) {
|
|
|
65
64
|
*/
|
|
66
65
|
export function getTimeoutFromEnv(env = getEnvironmentConfig()) {
|
|
67
66
|
const timeoutMs = env.requestTimeoutMs;
|
|
68
|
-
return timeoutMs && timeoutMs > 0 ? timeoutMs :
|
|
67
|
+
return timeoutMs && timeoutMs > 0 ? timeoutMs : DEFAULT_REQUEST_TIMEOUT_MS;
|
|
69
68
|
}
|
|
70
69
|
/**
|
|
71
70
|
* Creates a timeout middleware with configuration from environment
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
/** Idle timeout for the module-loading stage. Any concrete module/transform progress resets it. */
|
|
10
10
|
export declare const MODULE_LOAD_TIMEOUT_MS = 10000;
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* Fallback cap when module loading is called without an owner signal.
|
|
13
|
+
* Request and renderer entrypoints supply their own total deadline signal.
|
|
14
14
|
*/
|
|
15
15
|
export declare const MODULE_LOAD_HARD_TIMEOUT_MS = 45000;
|
|
16
16
|
/** Timeout for data fetching (getStaticData, getServerData) */
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
/** Idle timeout for the module-loading stage. Any concrete module/transform progress resets it. */
|
|
10
10
|
export const MODULE_LOAD_TIMEOUT_MS = 10_000;
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* Fallback cap when module loading is called without an owner signal.
|
|
13
|
+
* Request and renderer entrypoints supply their own total deadline signal.
|
|
14
14
|
*/
|
|
15
15
|
export const MODULE_LOAD_HARD_TIMEOUT_MS = 45_000;
|
|
16
16
|
/** Timeout for data fetching (getStaticData, getServerData) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AASzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4DhF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,qBAAqB,EAAE,sBAAsB,CAAC;CAC1E;AAqCD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,mBAAmB,CAAgC;gBAE/C,MAAM,EAAE,oBAAoB;IAcxC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,oBAAoB;IA0B5B;;;;OAIG;YACW,yBAAyB;IAWvC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;YAOJ,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AASzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4DhF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,qBAAqB,EAAE,sBAAsB,CAAC;CAC1E;AAqCD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,mBAAmB,CAAgC;gBAE/C,MAAM,EAAE,oBAAoB;IAcxC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,oBAAoB;IA0B5B;;;;OAIG;YACW,yBAAyB;IAWvC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;YAOJ,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IAiFnC;;;OAGG;YACW,mBAAmB;IAqHjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAqU9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAsHzE,kBAAkB;YA2ClB,cAAc;IAW5B,OAAO,CAAC,uBAAuB;YAYjB,kBAAkB;IA6FhC,OAAO,CAAC,kBAAkB;YAQZ,uBAAuB;IAmBrC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAStB"}
|
|
@@ -147,8 +147,13 @@ export class RenderPipeline {
|
|
|
147
147
|
async loadModulesInParallel(modules, options, timeoutControl) {
|
|
148
148
|
const moduleLoaderConfig = await this.resolveModuleLoaderConfig(options);
|
|
149
149
|
if (timeoutControl) {
|
|
150
|
+
const completedMilestones = new Set();
|
|
150
151
|
moduleLoaderConfig.signal = timeoutControl.signal;
|
|
151
152
|
moduleLoaderConfig.onProgress = ({ phase, filePath }) => {
|
|
153
|
+
const milestone = `${phase}:${filePath ?? ""}`;
|
|
154
|
+
if (completedMilestones.has(milestone))
|
|
155
|
+
return;
|
|
156
|
+
completedMilestones.add(milestone);
|
|
152
157
|
const fileName = filePath?.split("/").pop();
|
|
153
158
|
timeoutControl.mark(fileName ? `${phase}:${fileName}` : phase);
|
|
154
159
|
};
|
|
@@ -245,8 +250,9 @@ export class RenderPipeline {
|
|
|
245
250
|
}
|
|
246
251
|
const loadedModules = await profilePhase("render.load_modules", () => withSpan(SpanNames.RENDER_LOAD_MODULES, () => withProgressTimeoutThrow((control) => this.loadModulesInParallel(modulesToLoad, options, control), {
|
|
247
252
|
idleTimeoutMs: MODULE_LOAD_TIMEOUT_MS,
|
|
248
|
-
hardTimeoutMs: MODULE_LOAD_HARD_TIMEOUT_MS,
|
|
253
|
+
hardTimeoutMs: options.abortSignal ? undefined : MODULE_LOAD_HARD_TIMEOUT_MS,
|
|
249
254
|
label: `Module loading for ${slug}`,
|
|
255
|
+
signal: options.abortSignal,
|
|
250
256
|
}), { "render.module_count": modulesToLoad.length }));
|
|
251
257
|
const dataJobs = loadedModules.filter((m) => options?.staticDataOnly
|
|
252
258
|
? typeof m.mod.getStaticData === "function"
|
|
@@ -30,6 +30,8 @@ export interface RenderOptions {
|
|
|
30
30
|
props?: Record<string, unknown>;
|
|
31
31
|
delivery?: "string" | "stream";
|
|
32
32
|
request?: Request;
|
|
33
|
+
/** Internal signal for the render owner's total deadline. */
|
|
34
|
+
abortSignal?: AbortSignal;
|
|
33
35
|
url?: URL;
|
|
34
36
|
/** Restrict data fetching to static hooks, even when a request context exists. */
|
|
35
37
|
staticDataOnly?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/renderer.ts"],"names":[],"mappings":"AA8CA,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAKL,KAAK,qBAAqB,EAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAgBzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA4CxD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,oBAAoB;IACpB,KAAK,CAAC,EAAE,wBAAwB,CAAC;CAClC;AA4FD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,oBAAoB,CAAgC;IAC5D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,qBAAqB,CAA8B;IAE3D;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,yBAAyB,CAAoC;gBAEzD,OAAO,GAAE,eAAoB;IAInC,UAAU,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,7 +49,7 @@ import { SSROrchestrator } from "./orchestrator/ssr-orchestrator.js";
|
|
|
49
49
|
import { RenderPipeline } from "./orchestrator/pipeline.js";
|
|
50
50
|
import { createLayoutComponentCache } from "./layouts/utils/component-loader.js";
|
|
51
51
|
import { TimeoutError, withTimeoutThrow } from "./utils/stream-utils.js";
|
|
52
|
-
import { Singleflight } from "../utils/singleflight.js";
|
|
52
|
+
import { Singleflight, waitForSharedPromise } from "../utils/singleflight.js";
|
|
53
53
|
import { acquireProjectSlot, projectRenderCounts, releaseProjectSlot, RENDER_ACQUIRE_TIMEOUT_MS, RENDER_PER_PROJECT_LIMIT, renderSemaphore, } from "./renderer-concurrency.js";
|
|
54
54
|
const logger = rendererLogger.component("renderer");
|
|
55
55
|
/**
|
|
@@ -219,7 +219,7 @@ export class Renderer {
|
|
|
219
219
|
}
|
|
220
220
|
return cacheResult.cachedResult;
|
|
221
221
|
}
|
|
222
|
-
const result = await this.doRenderPage(slug, effectiveCtx, effectiveOptions, startTime, cacheKey);
|
|
222
|
+
const result = await this.doRenderPage(slug, effectiveCtx, effectiveOptions, startTime, cacheKey, effectiveOptions.abortSignal ?? effectiveOptions.request?.signal);
|
|
223
223
|
this.scheduleProductionRenderPrewarm(slug, effectiveCtx, effectiveOptions, cacheKey);
|
|
224
224
|
return result;
|
|
225
225
|
}, {
|
|
@@ -369,7 +369,7 @@ export class Renderer {
|
|
|
369
369
|
});
|
|
370
370
|
this.rememberProductionPrewarm(refreshKey, promise);
|
|
371
371
|
setTimeout(() => {
|
|
372
|
-
void this.doRenderPage(slug, ctx, refreshOptions, performance.now(), cacheKey)
|
|
372
|
+
void this.doRenderPage(slug, ctx, refreshOptions, performance.now(), cacheKey, undefined)
|
|
373
373
|
.then(() => {
|
|
374
374
|
this.scheduleProductionRenderPrewarm(slug, ctx, refreshOptions, cacheKey);
|
|
375
375
|
resolvePromise();
|
|
@@ -429,13 +429,13 @@ export class Renderer {
|
|
|
429
429
|
routeCount: slugs.length,
|
|
430
430
|
});
|
|
431
431
|
}
|
|
432
|
-
async doRenderPage(slug, ctx, options, startTime, cacheKey) {
|
|
432
|
+
async doRenderPage(slug, ctx, options, startTime, cacheKey, callerSignal) {
|
|
433
433
|
const effectiveKey = cacheKey ?? dntShim.crypto.randomUUID();
|
|
434
434
|
const flightKey = this.getSingleflightKey(effectiveKey, ctx, options?.colorScheme);
|
|
435
435
|
const isFollower = cacheKey !== null ? this.renderFlight.has(flightKey) : false;
|
|
436
436
|
const runRender = async () => {
|
|
437
437
|
try {
|
|
438
|
-
return await this.runRenderWithCapacity(slug, ctx, options, startTime, cacheKey);
|
|
438
|
+
return await this.runRenderWithCapacity(slug, ctx, options, startTime, cacheKey, callerSignal);
|
|
439
439
|
}
|
|
440
440
|
catch (error) {
|
|
441
441
|
if (error instanceof TimeoutError) {
|
|
@@ -449,7 +449,7 @@ export class Renderer {
|
|
|
449
449
|
}
|
|
450
450
|
};
|
|
451
451
|
const cachedData = cacheKey !== null
|
|
452
|
-
? await this.renderFlight.do(flightKey, runRender)
|
|
452
|
+
? await waitForSharedPromise(this.renderFlight.do(flightKey, runRender), callerSignal)
|
|
453
453
|
: await runRender();
|
|
454
454
|
if (isFollower) {
|
|
455
455
|
logger.debug("Render deduplicated (follower)", {
|
|
@@ -468,7 +468,7 @@ export class Renderer {
|
|
|
468
468
|
stream: null,
|
|
469
469
|
};
|
|
470
470
|
}
|
|
471
|
-
async runRenderWithCapacity(slug, ctx, options, startTime, cacheKey) {
|
|
471
|
+
async runRenderWithCapacity(slug, ctx, options, startTime, cacheKey, callerSignal) {
|
|
472
472
|
if (!(await acquireProjectSlot(ctx.projectId))) {
|
|
473
473
|
const activeCount = projectRenderCounts.get(ctx.projectId) ?? 0;
|
|
474
474
|
logger.error("Per-project render limit reached", {
|
|
@@ -503,8 +503,14 @@ export class Renderer {
|
|
|
503
503
|
}
|
|
504
504
|
try {
|
|
505
505
|
const services = this.createServicesForContext(ctx, options?.colorScheme);
|
|
506
|
+
const renderAbortController = new AbortController();
|
|
507
|
+
const request = cacheKey !== null && options?.request
|
|
508
|
+
? new Request(options.request, { signal: renderAbortController.signal })
|
|
509
|
+
: options?.request;
|
|
506
510
|
const result = await withTimeoutThrow(services.pipeline.renderPage(slug, {
|
|
507
511
|
...options,
|
|
512
|
+
request,
|
|
513
|
+
abortSignal: renderAbortController.signal,
|
|
508
514
|
delivery: "string",
|
|
509
515
|
projectId: ctx.projectId,
|
|
510
516
|
projectSlug: ctx.projectSlug,
|
|
@@ -512,7 +518,11 @@ export class Renderer {
|
|
|
512
518
|
contentSourceId: ctx.contentSourceId,
|
|
513
519
|
skipCacheCheck: true,
|
|
514
520
|
skipCachePersist: true,
|
|
515
|
-
}), RENDER_PIPELINE_TIMEOUT_MS, `Render pipeline for ${ctx.projectId}:${slug}
|
|
521
|
+
}), RENDER_PIPELINE_TIMEOUT_MS, `Render pipeline for ${ctx.projectId}:${slug}`, {
|
|
522
|
+
signal: cacheKey === null ? callerSignal : undefined,
|
|
523
|
+
onAbort: (reason) => renderAbortController.abort(reason),
|
|
524
|
+
onTimeout: (error) => renderAbortController.abort(error),
|
|
525
|
+
});
|
|
516
526
|
if (cacheKey !== null) {
|
|
517
527
|
await this.cache.persistResult(result, slug, ctx, options?.colorScheme, cacheKey);
|
|
518
528
|
}
|
|
@@ -7,7 +7,7 @@ export declare class TimeoutError extends Error {
|
|
|
7
7
|
});
|
|
8
8
|
}
|
|
9
9
|
export interface ProgressTimeoutControl {
|
|
10
|
-
/** Aborted when
|
|
10
|
+
/** Aborted when a local deadline or the caller-owned signal is reached. */
|
|
11
11
|
signal: AbortSignal;
|
|
12
12
|
/** Reset the idle deadline after a concrete unit of work completes. */
|
|
13
13
|
mark(label: string): void;
|
|
@@ -15,16 +15,28 @@ export interface ProgressTimeoutControl {
|
|
|
15
15
|
export interface ProgressTimeoutOptions {
|
|
16
16
|
label: string;
|
|
17
17
|
idleTimeoutMs: number;
|
|
18
|
-
|
|
18
|
+
/** Optional local hard cap. Omit when the caller already owns the total deadline. */
|
|
19
|
+
hardTimeoutMs?: number;
|
|
20
|
+
/** Optional deadline owned by the operation's caller. */
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
}
|
|
23
|
+
export interface TimeoutOptions {
|
|
24
|
+
/** Optional caller-owned abort signal that should reject the waiter immediately. */
|
|
25
|
+
signal?: AbortSignal;
|
|
26
|
+
/** Called when the caller-owned signal aborts; failures do not replace the abort reason. */
|
|
27
|
+
onAbort?: (reason: unknown) => void;
|
|
28
|
+
/** Called when the local timeout fires; failures do not replace the timeout error. */
|
|
29
|
+
onTimeout?: (error: TimeoutError) => void;
|
|
19
30
|
}
|
|
20
31
|
export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, label: string): Promise<T | undefined>;
|
|
21
|
-
export declare function withTimeoutThrow<T>(promise: Promise<T>, timeoutMs: number, label: string): Promise<T>;
|
|
32
|
+
export declare function withTimeoutThrow<T>(promise: Promise<T>, timeoutMs: number, label: string, options?: TimeoutOptions): Promise<T>;
|
|
22
33
|
/**
|
|
23
|
-
* Run an operation with a resettable idle deadline and
|
|
34
|
+
* Run an operation with a resettable idle deadline and an optional hard cap.
|
|
24
35
|
*
|
|
25
|
-
* Callers must only call `mark` after meaningful progress.
|
|
26
|
-
*
|
|
27
|
-
*
|
|
36
|
+
* Callers must only call `mark` after meaningful progress. Use `hardTimeoutMs`
|
|
37
|
+
* when this helper owns the total deadline. Omit it when an outer operation
|
|
38
|
+
* already enforces that deadline. The supplied signal lets cooperative work
|
|
39
|
+
* stop after either configured deadline.
|
|
28
40
|
*/
|
|
29
41
|
export declare function withProgressTimeoutThrow<T>(operation: (control: ProgressTimeoutControl) => Promise<T>, options: ProgressTimeoutOptions): Promise<T>;
|
|
30
42
|
export declare class StreamTimeoutError extends Error {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-utils.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/utils/stream-utils.ts"],"names":[],"mappings":"AAGA,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBAG7B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;CAO9D;AAED,MAAM,WAAW,sBAAsB;IACrC,
|
|
1
|
+
{"version":3,"file":"stream-utils.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/utils/stream-utils.ts"],"names":[],"mappings":"AAGA,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBAG7B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;CAO9D;AAED,MAAM,WAAW,sBAAsB;IACrC,2EAA2E;IAC3E,MAAM,EAAE,WAAW,CAAC;IACpB,uEAAuE;IACvE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,oFAAoF;IACpF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4FAA4F;IAC5F,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,sFAAsF;IACtF,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAkBxB;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,CAAC,CAAC,CAuDZ;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,SAAS,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1D,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,CAAC,CAAC,CAoFZ;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;gBAEpB,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAKtD;AAcD,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,SAAS,GAAE,MAAuB,GACjC,OAAO,CAAC,MAAM,CAAC,CA+CjB"}
|
|
@@ -29,33 +29,77 @@ export async function withTimeout(promise, timeoutMs, label) {
|
|
|
29
29
|
clearTimeout(timeoutId);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
export async function withTimeoutThrow(promise, timeoutMs, label) {
|
|
32
|
+
export async function withTimeoutThrow(promise, timeoutMs, label, options) {
|
|
33
33
|
let timeoutId;
|
|
34
|
+
let removeAbortListener;
|
|
34
35
|
const timeoutPromise = new Promise((_, reject) => {
|
|
35
36
|
timeoutId = setTimeout(() => {
|
|
36
37
|
logger.error("TIMEOUT_HARD operation timed out (throwing)", { label, timeoutMs });
|
|
37
|
-
|
|
38
|
+
const error = new TimeoutError(label, timeoutMs);
|
|
39
|
+
try {
|
|
40
|
+
options?.onTimeout?.(error);
|
|
41
|
+
}
|
|
42
|
+
catch (callbackError) {
|
|
43
|
+
logger.error("TIMEOUT_HARD onTimeout callback failed", {
|
|
44
|
+
label,
|
|
45
|
+
error: callbackError instanceof Error ? callbackError.message : String(callbackError),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
reject(error);
|
|
50
|
+
}
|
|
38
51
|
}, timeoutMs);
|
|
39
52
|
});
|
|
53
|
+
const abortSignal = options?.signal;
|
|
54
|
+
const abortPromise = abortSignal
|
|
55
|
+
? new Promise((_, reject) => {
|
|
56
|
+
const abort = () => {
|
|
57
|
+
const reason = abortSignal.reason ??
|
|
58
|
+
new DOMException("The operation was aborted", "AbortError");
|
|
59
|
+
try {
|
|
60
|
+
options?.onAbort?.(reason);
|
|
61
|
+
}
|
|
62
|
+
catch (callbackError) {
|
|
63
|
+
logger.error("TIMEOUT_HARD onAbort callback failed", {
|
|
64
|
+
label,
|
|
65
|
+
error: callbackError instanceof Error ? callbackError.message : String(callbackError),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
reject(reason);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
if (abortSignal.aborted) {
|
|
73
|
+
abort();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
abortSignal.addEventListener("abort", abort, { once: true });
|
|
77
|
+
removeAbortListener = () => abortSignal.removeEventListener("abort", abort);
|
|
78
|
+
})
|
|
79
|
+
: undefined;
|
|
40
80
|
try {
|
|
41
|
-
return await Promise.race([promise, timeoutPromise]);
|
|
81
|
+
return await Promise.race(abortPromise ? [promise, timeoutPromise, abortPromise] : [promise, timeoutPromise]);
|
|
42
82
|
}
|
|
43
83
|
finally {
|
|
44
84
|
if (timeoutId)
|
|
45
85
|
clearTimeout(timeoutId);
|
|
86
|
+
removeAbortListener?.();
|
|
46
87
|
}
|
|
47
88
|
}
|
|
48
89
|
/**
|
|
49
|
-
* Run an operation with a resettable idle deadline and
|
|
90
|
+
* Run an operation with a resettable idle deadline and an optional hard cap.
|
|
50
91
|
*
|
|
51
|
-
* Callers must only call `mark` after meaningful progress.
|
|
52
|
-
*
|
|
53
|
-
*
|
|
92
|
+
* Callers must only call `mark` after meaningful progress. Use `hardTimeoutMs`
|
|
93
|
+
* when this helper owns the total deadline. Omit it when an outer operation
|
|
94
|
+
* already enforces that deadline. The supplied signal lets cooperative work
|
|
95
|
+
* stop after either configured deadline.
|
|
54
96
|
*/
|
|
55
97
|
export async function withProgressTimeoutThrow(operation, options) {
|
|
56
|
-
const { label, idleTimeoutMs, hardTimeoutMs } = options;
|
|
57
|
-
if (idleTimeoutMs <= 0 ||
|
|
58
|
-
|
|
98
|
+
const { label, idleTimeoutMs, hardTimeoutMs, signal: parentSignal } = options;
|
|
99
|
+
if (idleTimeoutMs <= 0 ||
|
|
100
|
+
(hardTimeoutMs !== undefined &&
|
|
101
|
+
(hardTimeoutMs <= 0 || hardTimeoutMs < idleTimeoutMs))) {
|
|
102
|
+
throw new RangeError("Progress timeout requires idleTimeoutMs > 0 and, when set, hardTimeoutMs >= idleTimeoutMs");
|
|
59
103
|
}
|
|
60
104
|
const controller = new AbortController();
|
|
61
105
|
let idleTimeoutId;
|
|
@@ -95,9 +139,29 @@ export async function withProgressTimeoutThrow(operation, options) {
|
|
|
95
139
|
scheduleIdleTimeout();
|
|
96
140
|
},
|
|
97
141
|
};
|
|
98
|
-
|
|
99
|
-
|
|
142
|
+
const abortFromParent = () => {
|
|
143
|
+
if (!active || !parentSignal)
|
|
144
|
+
return;
|
|
145
|
+
active = false;
|
|
146
|
+
const reason = parentSignal.reason ??
|
|
147
|
+
new DOMException("The operation was aborted", "AbortError");
|
|
148
|
+
controller.abort(reason);
|
|
149
|
+
rejectTimeout(reason);
|
|
150
|
+
};
|
|
151
|
+
if (parentSignal?.aborted) {
|
|
152
|
+
abortFromParent();
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
parentSignal?.addEventListener("abort", abortFromParent, { once: true });
|
|
156
|
+
}
|
|
157
|
+
if (active)
|
|
158
|
+
scheduleIdleTimeout();
|
|
159
|
+
const hardTimeoutId = !active || hardTimeoutMs === undefined
|
|
160
|
+
? undefined
|
|
161
|
+
: setTimeout(() => fail("hard", hardTimeoutMs), hardTimeoutMs);
|
|
100
162
|
try {
|
|
163
|
+
if (!active)
|
|
164
|
+
return await timeoutPromise;
|
|
101
165
|
return await Promise.race([
|
|
102
166
|
Promise.resolve().then(() => operation(control)),
|
|
103
167
|
timeoutPromise,
|
|
@@ -109,6 +173,7 @@ export async function withProgressTimeoutThrow(operation, options) {
|
|
|
109
173
|
clearTimeout(idleTimeoutId);
|
|
110
174
|
if (hardTimeoutId)
|
|
111
175
|
clearTimeout(hardTimeoutId);
|
|
176
|
+
parentSignal?.removeEventListener("abort", abortFromParent);
|
|
112
177
|
}
|
|
113
178
|
}
|
|
114
179
|
export class StreamTimeoutError extends Error {
|
|
@@ -177,6 +177,28 @@ function createNamespaceOnLoadHandler(options) {
|
|
|
177
177
|
}
|
|
178
178
|
});
|
|
179
179
|
}
|
|
180
|
+
/** Resolves the framework's built-in @/ project alias through the runtime adapter. */
|
|
181
|
+
function createProjectAliasPlugin(adapter, projectDir) {
|
|
182
|
+
const projectRoot = pathHelper.resolve(projectDir);
|
|
183
|
+
return {
|
|
184
|
+
name: "vf-project-alias",
|
|
185
|
+
setup(build) {
|
|
186
|
+
build.onResolve({ filter: /^@\// }, (args) => {
|
|
187
|
+
const absolutePath = pathHelper.resolve(projectRoot, args.path.slice(2));
|
|
188
|
+
if (!isWithinDirectory(projectRoot, absolutePath)) {
|
|
189
|
+
logger.error(`[API] Project alias escapes project: ${args.path} -> ${absolutePath}`);
|
|
190
|
+
return { errors: [{ text: `Project alias escapes project: ${args.path}` }] };
|
|
191
|
+
}
|
|
192
|
+
return { path: absolutePath, namespace: "vf-project-alias" };
|
|
193
|
+
});
|
|
194
|
+
build.onLoad({ filter: /.*/, namespace: "vf-project-alias" }, createNamespaceOnLoadHandler({
|
|
195
|
+
adapter,
|
|
196
|
+
projectDir,
|
|
197
|
+
errorLabel: "via project alias",
|
|
198
|
+
}));
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
}
|
|
180
202
|
/** Resolves relative imports through the adapter's virtual FS for remote projects. */
|
|
181
203
|
function createAdapterResolvePlugin(adapter, projectDir) {
|
|
182
204
|
return {
|
|
@@ -342,6 +364,7 @@ function loadAndTranspileModule(modulePath, projectDir, adapter, fs, config) {
|
|
|
342
364
|
},
|
|
343
365
|
plugins: [
|
|
344
366
|
createImportMapPlugin(projectDir, adapter, config),
|
|
367
|
+
createProjectAliasPlugin(adapter, projectDir),
|
|
345
368
|
createAdapterResolvePlugin(adapter, projectDir),
|
|
346
369
|
createHTTPPlugin({ allowedHosts, projectDir }),
|
|
347
370
|
createProjectBoundaryPlugin(await resolveProjectRoots(projectDir)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-data-endpoint-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/module/page-data-endpoint-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"page-data-endpoint-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/module/page-data-endpoint-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAwGhE,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,cAAc,EACnB,qBAAqB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,eAAe,EAC/D,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,aAAa,EAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAC1C,OAAO,CAAC,aAAa,CAAC,CAkIxB"}
|
|
@@ -6,7 +6,7 @@ import { withSpan } from "../../../../observability/tracing/otlp-setup.js";
|
|
|
6
6
|
import { markRequestProfilePhase } from "../../../../observability/index.js";
|
|
7
7
|
import { HTTP_GATEWAY_TIMEOUT } from "../../../../utils/constants/http.js";
|
|
8
8
|
import { serverLogger } from "../../../../utils/index.js";
|
|
9
|
-
import { Singleflight } from "../../../../utils/singleflight.js";
|
|
9
|
+
import { Singleflight, waitForSharedPromise } from "../../../../utils/singleflight.js";
|
|
10
10
|
import { requestHasCacheSensitiveState } from "../../../../cache/request-cacheability.js";
|
|
11
11
|
import { sanitizeQueryParamsForCacheKey, } from "../../../../cache/keys.js";
|
|
12
12
|
import { getEnv } from "../../../../platform/compat/process.js";
|
|
@@ -47,6 +47,19 @@ function getPageDataCachePolicy(ctx) {
|
|
|
47
47
|
function isPageDataCacheEnabled() {
|
|
48
48
|
return PAGE_DATA_CACHE_MAX_ENTRIES > 0;
|
|
49
49
|
}
|
|
50
|
+
async function resolvePageDataWithinDeadline(renderer, slug, request, url, callerSignal) {
|
|
51
|
+
const controller = new AbortController();
|
|
52
|
+
const workRequest = callerSignal ? request : new Request(request, { signal: controller.signal });
|
|
53
|
+
return await withTimeoutThrow(renderer.resolvePageData(slug, {
|
|
54
|
+
request: workRequest,
|
|
55
|
+
url,
|
|
56
|
+
abortSignal: controller.signal,
|
|
57
|
+
}), PAGE_DATA_TIMEOUT_MS, `resolvePageData for ${slug}`, {
|
|
58
|
+
signal: callerSignal,
|
|
59
|
+
onAbort: (reason) => controller.abort(reason),
|
|
60
|
+
onTimeout: (error) => controller.abort(error),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
50
63
|
export function __clearPageDataEndpointCacheForTests() {
|
|
51
64
|
pageDataCache.clear();
|
|
52
65
|
}
|
|
@@ -66,8 +79,8 @@ export function handlePageDataEndpoint(req, pathname, ctx, createResponseBuilder
|
|
|
66
79
|
const cacheKey = canUsePageDataCache ? buildPageDataCacheKey(ctx, slug, url) : null;
|
|
67
80
|
const cachePolicy = cacheKey ? getPageDataCachePolicy(ctx) : null;
|
|
68
81
|
const payload = cacheKey
|
|
69
|
-
? await resolveCachedPageData(cacheKey, () =>
|
|
70
|
-
: await resolveUncachedPageData(() =>
|
|
82
|
+
? await waitForSharedPromise(resolveCachedPageData(cacheKey, () => resolvePageDataWithinDeadline(renderer, slug, req, url, undefined), cachePolicy), req.signal)
|
|
83
|
+
: await resolveUncachedPageData(() => resolvePageDataWithinDeadline(renderer, slug, req, url, req.signal));
|
|
71
84
|
const cacheStrategy = cacheKey
|
|
72
85
|
? {
|
|
73
86
|
maxAge: cachePolicy.maxAgeSeconds,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-cache.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/transform-cache.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"transform-cache.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/transform-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { registerCache } from "../../utils/memory/index.js";
|
|
2
2
|
import { logger as baseLogger } from "../../utils/index.js";
|
|
3
3
|
import { buildTransformCacheKey } from "../../cache/keys.js";
|
|
4
|
-
import { Singleflight } from "../../utils/singleflight.js";
|
|
4
|
+
import { Singleflight, waitForSharedPromise } from "../../utils/singleflight.js";
|
|
5
5
|
import { CacheBackends, MemoryCacheBackend, } from "../../cache/backend.js";
|
|
6
6
|
import { hashCodeHex } from "../../utils/hash-utils.js";
|
|
7
7
|
import { detokenizeAllCachePaths, tokenizeAllVeryFrontPaths } from "../../cache/paths.js";
|
|
@@ -369,24 +369,10 @@ export async function getOrComputeTransform(key, computeFn, ttlSeconds = DEFAULT
|
|
|
369
369
|
});
|
|
370
370
|
},
|
|
371
371
|
});
|
|
372
|
-
if (!signal)
|
|
373
|
-
return await flight;
|
|
374
372
|
// A caller timeout must detach that request without cancelling the shared
|
|
375
373
|
// singleflight leader: another concurrent render may still depend on the
|
|
376
374
|
// same cold transform, and completing it warms the cache for later work.
|
|
377
|
-
return await
|
|
378
|
-
const onAbort = () => reject(signal.reason);
|
|
379
|
-
if (signal.aborted) {
|
|
380
|
-
// The shared flight can still fail after this caller detaches. Attach a
|
|
381
|
-
// rejection observer so an already-aborted sole caller does not leave
|
|
382
|
-
// the coordinating promise unhandled.
|
|
383
|
-
void flight.catch(() => { });
|
|
384
|
-
onAbort();
|
|
385
|
-
return;
|
|
386
|
-
}
|
|
387
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
388
|
-
flight.then(resolve, reject).finally(() => signal.removeEventListener("abort", onAbort));
|
|
389
|
-
});
|
|
375
|
+
return await waitForSharedPromise(flight, signal);
|
|
390
376
|
}
|
|
391
377
|
finally {
|
|
392
378
|
unsubscribe();
|
|
@@ -8,6 +8,11 @@ export interface SingleflightControl {
|
|
|
8
8
|
/** Whether this operation is still the exact leader registered for its key. */
|
|
9
9
|
isCurrent(): boolean;
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Wait for shared work while allowing this caller to detach independently.
|
|
13
|
+
* Aborting `signal` rejects only this waiter; it never cancels `shared`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function waitForSharedPromise<T>(shared: Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
11
16
|
export declare class Singleflight<T> {
|
|
12
17
|
private inflight;
|
|
13
18
|
do(key: string, operation: (control: SingleflightControl) => Promise<T>, options?: SingleflightOptions): Promise<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleflight.d.ts","sourceRoot":"","sources":["../../../src/src/utils/singleflight.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,SAAS,IAAI,OAAO,CAAC;CACtB;AAOD,qBAAa,YAAY,CAAC,CAAC;IACzB,OAAO,CAAC,QAAQ,CAA2C;IAErD,EAAE,CACN,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,CAAC,CAAC,EACvD,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,CAAC,CAAC;IAgDb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
1
|
+
{"version":3,"file":"singleflight.d.ts","sourceRoot":"","sources":["../../../src/src/utils/singleflight.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,SAAS,IAAI,OAAO,CAAC;CACtB;AAOD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC,CA+BZ;AAED,qBAAa,YAAY,CAAC,CAAC;IACzB,OAAO,CAAC,QAAQ,CAA2C;IAErD,EAAE,CACN,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,CAAC,CAAC,EACvD,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,CAAC,CAAC;IAgDb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -1,4 +1,33 @@
|
|
|
1
1
|
import { unrefTimer } from "../platform/compat/process.js";
|
|
2
|
+
/**
|
|
3
|
+
* Wait for shared work while allowing this caller to detach independently.
|
|
4
|
+
* Aborting `signal` rejects only this waiter; it never cancels `shared`.
|
|
5
|
+
*/
|
|
6
|
+
export async function waitForSharedPromise(shared, signal) {
|
|
7
|
+
if (!signal)
|
|
8
|
+
return await shared;
|
|
9
|
+
const abortReason = () => signal.reason ?? new DOMException("The operation was aborted", "AbortError");
|
|
10
|
+
if (signal.aborted) {
|
|
11
|
+
// The shared operation can still fail after this caller detaches.
|
|
12
|
+
// Observe that rejection so a sole detached caller cannot leave it unhandled.
|
|
13
|
+
void shared.catch(() => { });
|
|
14
|
+
throw abortReason();
|
|
15
|
+
}
|
|
16
|
+
return await new Promise((resolve, reject) => {
|
|
17
|
+
const onAbort = () => {
|
|
18
|
+
signal.removeEventListener("abort", onAbort);
|
|
19
|
+
reject(abortReason());
|
|
20
|
+
};
|
|
21
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
22
|
+
shared.then((value) => {
|
|
23
|
+
signal.removeEventListener("abort", onAbort);
|
|
24
|
+
resolve(value);
|
|
25
|
+
}, (error) => {
|
|
26
|
+
signal.removeEventListener("abort", onAbort);
|
|
27
|
+
reject(error);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
2
31
|
export class Singleflight {
|
|
3
32
|
inflight = new Map();
|
|
4
33
|
async do(key, operation, options = {}) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "veryfront",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1127",
|
|
4
4
|
"description": "The simplest way to build AI-powered apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -332,10 +332,10 @@
|
|
|
332
332
|
"@types/react": "19.2.14",
|
|
333
333
|
"@types/react-dom": "19.2.3",
|
|
334
334
|
"ws": "8.21.0",
|
|
335
|
-
"@veryfront/ext-bundler-esbuild": "0.1.
|
|
336
|
-
"@veryfront/ext-content-mdx": "0.1.
|
|
337
|
-
"@veryfront/ext-css-tailwind": "0.1.
|
|
338
|
-
"@veryfront/ext-parser-babel": "0.1.
|
|
335
|
+
"@veryfront/ext-bundler-esbuild": "0.1.1127",
|
|
336
|
+
"@veryfront/ext-content-mdx": "0.1.1127",
|
|
337
|
+
"@veryfront/ext-css-tailwind": "0.1.1127",
|
|
338
|
+
"@veryfront/ext-parser-babel": "0.1.1127"
|
|
339
339
|
},
|
|
340
340
|
"devDependencies": {
|
|
341
341
|
"@types/node": "20.9.0"
|