veryfront 0.1.849 → 0.1.851
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/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +17 -4
- package/esm/src/agent/runtime/skill-policy-enforcement.d.ts +1 -1
- package/esm/src/agent/runtime/skill-policy-enforcement.d.ts.map +1 -1
- package/esm/src/agent/runtime/skill-policy-enforcement.js +6 -3
- package/esm/src/html/hydration-script-builder/templates/router.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/templates/router.js +146 -2
- package/esm/src/rendering/cache/stores/api-store.d.ts.map +1 -1
- package/esm/src/rendering/cache/stores/api-store.js +7 -9
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
package/esm/deno.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -327,6 +327,8 @@ export class AgentRuntime {
|
|
|
327
327
|
let activeSkillId = hydratedSkillState.activeSkillId;
|
|
328
328
|
let activeSkillPolicy = hydratedSkillState.activeSkillPolicy;
|
|
329
329
|
let activeSkillDelegationOverrides = hydratedSkillState.activeSkillDelegationOverrides;
|
|
330
|
+
const hasSubmittedFormInputInLoop = hasSubmittedFormInputResult(currentMessages) ||
|
|
331
|
+
runtimeContext?.[SUBMITTED_FORM_INPUT_CONTEXT_KEY] === true;
|
|
330
332
|
const allowedRemoteToolNames = getRuntimeAllowedRemoteTools(this.config);
|
|
331
333
|
const providerTools = getRuntimeProviderTools(this.config);
|
|
332
334
|
const forwardedRemoteToolDefinitions = getRuntimeForwardedIntegrationToolDefs(this.config);
|
|
@@ -336,6 +338,9 @@ export class AgentRuntime {
|
|
|
336
338
|
for (let step = 0; step < maxSteps; step++) {
|
|
337
339
|
this.status = "thinking";
|
|
338
340
|
addSpanEvent(loopSpan, "step_start", { step });
|
|
341
|
+
const stepRuntimeContext = hasSubmittedFormInputInLoop
|
|
342
|
+
? markSubmittedFormInputRuntimeContext(currentRuntimeContext)
|
|
343
|
+
: currentRuntimeContext;
|
|
339
344
|
const preparedStep = await prepareAgentRuntimeStep({
|
|
340
345
|
agentId: this.id,
|
|
341
346
|
activeSkillPolicy,
|
|
@@ -348,7 +353,7 @@ export class AgentRuntime {
|
|
|
348
353
|
mode: "generate",
|
|
349
354
|
remoteToolSources,
|
|
350
355
|
resolveRuntimeState: this.resolveRuntimeState.bind(this),
|
|
351
|
-
runtimeContext:
|
|
356
|
+
runtimeContext: stepRuntimeContext,
|
|
352
357
|
step,
|
|
353
358
|
systemPrompt: currentSystemPrompt,
|
|
354
359
|
toolContextBase,
|
|
@@ -460,7 +465,7 @@ export class AgentRuntime {
|
|
|
460
465
|
return;
|
|
461
466
|
}
|
|
462
467
|
const policyCheck = enforceSkillPolicy(tc.toolName, activeSkillPolicy, mustLoadSkillFirst, {
|
|
463
|
-
|
|
468
|
+
hasSubmittedFormInput: hasSubmittedFormInputInLoop,
|
|
464
469
|
});
|
|
465
470
|
if (!policyCheck.allowed) {
|
|
466
471
|
toolCall.status = "error";
|
|
@@ -566,6 +571,8 @@ export class AgentRuntime {
|
|
|
566
571
|
let activeSkillId = hydratedSkillState.activeSkillId;
|
|
567
572
|
let activeSkillPolicy = hydratedSkillState.activeSkillPolicy;
|
|
568
573
|
let activeSkillDelegationOverrides = hydratedSkillState.activeSkillDelegationOverrides;
|
|
574
|
+
let hasSubmittedFormInputInLoop = hasSubmittedFormInputResult(currentMessages) ||
|
|
575
|
+
runtimeContext?.[SUBMITTED_FORM_INPUT_CONTEXT_KEY] === true;
|
|
569
576
|
let finalFinishReason;
|
|
570
577
|
let latestAssistantText = "";
|
|
571
578
|
const allowedRemoteToolNames = getRuntimeAllowedRemoteTools(this.config);
|
|
@@ -579,6 +586,9 @@ export class AgentRuntime {
|
|
|
579
586
|
throwIfAborted(abortSignal);
|
|
580
587
|
sendSSE(controller, encoder, { type: "step-start" });
|
|
581
588
|
const currentStepToolResults = new Map();
|
|
589
|
+
const stepRuntimeContext = hasSubmittedFormInputInLoop
|
|
590
|
+
? markSubmittedFormInputRuntimeContext(currentRuntimeContext)
|
|
591
|
+
: currentRuntimeContext;
|
|
582
592
|
const preparedStep = await prepareAgentRuntimeStep({
|
|
583
593
|
agentId: this.id,
|
|
584
594
|
activeSkillPolicy,
|
|
@@ -591,7 +601,7 @@ export class AgentRuntime {
|
|
|
591
601
|
mode: "stream",
|
|
592
602
|
remoteToolSources,
|
|
593
603
|
resolveRuntimeState: this.resolveRuntimeState.bind(this),
|
|
594
|
-
runtimeContext:
|
|
604
|
+
runtimeContext: stepRuntimeContext,
|
|
595
605
|
step,
|
|
596
606
|
systemPrompt: currentSystemPrompt,
|
|
597
607
|
toolContextBase,
|
|
@@ -764,6 +774,7 @@ export class AgentRuntime {
|
|
|
764
774
|
}
|
|
765
775
|
activeSkillPolicy = removeFormInputAfterSubmission(tc.name, matchingResult.output, activeSkillId, activeSkillPolicy);
|
|
766
776
|
if (isSubmittedFormInputExecutionResult(tc.name, matchingResult.output)) {
|
|
777
|
+
hasSubmittedFormInputInLoop = true;
|
|
767
778
|
currentRuntimeContext = markSubmittedFormInputRuntimeContext(currentRuntimeContext);
|
|
768
779
|
}
|
|
769
780
|
if (tc.name === "create_agent") {
|
|
@@ -787,6 +798,7 @@ export class AgentRuntime {
|
|
|
787
798
|
}
|
|
788
799
|
activeSkillPolicy = removeFormInputAfterSubmission(tc.name, persistedResult.result, activeSkillId, activeSkillPolicy);
|
|
789
800
|
if (isSubmittedFormInputExecutionResult(tc.name, persistedResult.result)) {
|
|
801
|
+
hasSubmittedFormInputInLoop = true;
|
|
790
802
|
currentRuntimeContext = markSubmittedFormInputRuntimeContext(currentRuntimeContext);
|
|
791
803
|
}
|
|
792
804
|
if (tc.name === "create_agent") {
|
|
@@ -816,7 +828,7 @@ export class AgentRuntime {
|
|
|
816
828
|
continue;
|
|
817
829
|
}
|
|
818
830
|
const policyCheck = enforceSkillPolicy(tc.name, activeSkillPolicy, mustLoadSkillFirst, {
|
|
819
|
-
|
|
831
|
+
hasSubmittedFormInput: hasSubmittedFormInputInLoop,
|
|
820
832
|
});
|
|
821
833
|
if (!policyCheck.allowed) {
|
|
822
834
|
await this.recordToolError(toolCall, policyCheck.error, controller, encoder, currentMessages, toolCalls);
|
|
@@ -857,6 +869,7 @@ export class AgentRuntime {
|
|
|
857
869
|
}
|
|
858
870
|
activeSkillPolicy = removeFormInputAfterSubmission(tc.name, result, activeSkillId, activeSkillPolicy);
|
|
859
871
|
if (isSubmittedFormInputExecutionResult(tc.name, result)) {
|
|
872
|
+
hasSubmittedFormInputInLoop = true;
|
|
860
873
|
currentRuntimeContext = markSubmittedFormInputRuntimeContext(currentRuntimeContext);
|
|
861
874
|
}
|
|
862
875
|
if (tc.name === "create_agent") {
|
|
@@ -23,7 +23,7 @@ export type SkillPolicyResult = {
|
|
|
23
23
|
error: string;
|
|
24
24
|
};
|
|
25
25
|
export type SkillPolicyOptions = {
|
|
26
|
-
|
|
26
|
+
hasSubmittedFormInput?: boolean;
|
|
27
27
|
};
|
|
28
28
|
export declare function enforceSkillPolicy(toolName: string, activeSkillPolicy: string[] | undefined, mustLoadSkillFirst: boolean, options?: SkillPolicyOptions): SkillPolicyResult;
|
|
29
29
|
//# sourceMappingURL=skill-policy-enforcement.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-policy-enforcement.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/skill-policy-enforcement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAO1D,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAC/C,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAC/C,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AACnD,eAAO,MAAM,gCAAgC,gCAAgC,CAAC;AAa9E,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC3B;IACD,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,8BAA8B,EAAE,wBAAwB,GAAG,SAAS,CAAC;CACtE,CAeA;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAIlE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAyBxE;AA2BD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAQjF;AAED,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,cAAc,EAAE,CAQlB;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,GACtC,MAAM,EAAE,GAAG,SAAS,CAStB;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,GACtC,MAAM,EAAE,GAAG,SAAS,CAoCtB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GACjB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,
|
|
1
|
+
{"version":3,"file":"skill-policy-enforcement.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/skill-policy-enforcement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAO1D,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAC/C,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAC/C,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AACnD,eAAO,MAAM,gCAAgC,gCAAgC,CAAC;AAa9E,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC3B;IACD,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,8BAA8B,EAAE,wBAAwB,GAAG,SAAS,CAAC;CACtE,CAeA;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAIlE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAyBxE;AA2BD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAQjF;AAED,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,cAAc,EAAE,CAQlB;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,GACtC,MAAM,EAAE,GAAG,SAAS,CAStB;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,GACtC,MAAM,EAAE,GAAG,SAAS,CAoCtB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GACjB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,EACvC,kBAAkB,EAAE,OAAO,EAC3B,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CA0BnB"}
|
|
@@ -130,9 +130,12 @@ export function enforceSkillPolicy(toolName, activeSkillPolicy, mustLoadSkillFir
|
|
|
130
130
|
if (mustLoadSkillFirst && toolName !== LOAD_SKILL_TOOL_ID) {
|
|
131
131
|
return { allowed: false, error: getSkillActivationRequiredError(toolName) };
|
|
132
132
|
}
|
|
133
|
-
if (
|
|
134
|
-
|
|
135
|
-
return {
|
|
133
|
+
if (options.hasSubmittedFormInput === true &&
|
|
134
|
+
POST_SUBMITTED_FORM_INPUT_BLOCKED_TOOL_IDS.has(toolName)) {
|
|
135
|
+
return {
|
|
136
|
+
allowed: false,
|
|
137
|
+
error: `Tool "${toolName}" cannot run after a submitted form_input result exists. Continue with the submitted values.`,
|
|
138
|
+
};
|
|
136
139
|
}
|
|
137
140
|
if (activeSkillPolicy && !isToolAllowedBySkill(toolName, activeSkillPolicy)) {
|
|
138
141
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../../src/src/html/hydration-script-builder/templates/router.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,cA+
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../../src/src/html/hydration-script-builder/templates/router.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,cA+9B3B,CAAC"}
|
|
@@ -37,6 +37,7 @@ export const getRouterScript = () => `
|
|
|
37
37
|
const PREFETCH_DELAY_MS = 100;
|
|
38
38
|
const MAX_PREFETCH_PATHS = 100;
|
|
39
39
|
const MAX_ROUTE_TIMINGS = 100;
|
|
40
|
+
const MAX_SERVER_TIMING_LENGTH = 1024;
|
|
40
41
|
|
|
41
42
|
// ============================================
|
|
42
43
|
// Debug logging (production-safe)
|
|
@@ -159,6 +160,139 @@ export const getRouterScript = () => `
|
|
|
159
160
|
return entry;
|
|
160
161
|
}
|
|
161
162
|
|
|
163
|
+
function sanitizeServerTimingHeader(value) {
|
|
164
|
+
if (!value) return null;
|
|
165
|
+
|
|
166
|
+
const metrics = [];
|
|
167
|
+
const printable = String(value).replace(/[^\\x20-\\x7E]/g, ' ').trim();
|
|
168
|
+
if (!printable) return null;
|
|
169
|
+
|
|
170
|
+
for (const item of printable.split(',')) {
|
|
171
|
+
const segments = item.split(';').map((segment) => segment.trim()).filter(Boolean);
|
|
172
|
+
const name = sanitizeServerTimingMetricName(segments[0]);
|
|
173
|
+
if (!name) continue;
|
|
174
|
+
|
|
175
|
+
for (const segment of segments.slice(1)) {
|
|
176
|
+
const [key, rawValue = ''] = segment.split('=');
|
|
177
|
+
if (key.trim().toLowerCase() !== 'dur') continue;
|
|
178
|
+
|
|
179
|
+
const duration = Number(rawValue.trim().replace(/^"|"$/g, ''));
|
|
180
|
+
if (!Number.isFinite(duration) || duration < 0) continue;
|
|
181
|
+
|
|
182
|
+
metrics.push(name + ';dur=' + (Math.round(duration * 100) / 100).toFixed(2));
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const sanitized = metrics.join(', ');
|
|
188
|
+
return sanitized ? sanitized.slice(0, MAX_SERVER_TIMING_LENGTH) : null;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function sanitizeServerTimingMetricName(name) {
|
|
192
|
+
return String(name || '').trim().replace(/[^A-Za-z0-9_.-]/g, '_').slice(0, 128);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
function parseServerTimingMetrics(value) {
|
|
196
|
+
const header = sanitizeServerTimingHeader(value);
|
|
197
|
+
if (!header) return null;
|
|
198
|
+
|
|
199
|
+
const metrics = {};
|
|
200
|
+
for (const item of header.split(',')) {
|
|
201
|
+
const segments = item.split(';').map((segment) => segment.trim()).filter(Boolean);
|
|
202
|
+
const name = sanitizeServerTimingMetricName(segments[0]);
|
|
203
|
+
if (!name) continue;
|
|
204
|
+
|
|
205
|
+
for (const segment of segments.slice(1)) {
|
|
206
|
+
const [key, rawValue = ''] = segment.split('=');
|
|
207
|
+
if (key.trim().toLowerCase() !== 'dur') continue;
|
|
208
|
+
|
|
209
|
+
const duration = Number(rawValue.trim().replace(/^"|"$/g, ''));
|
|
210
|
+
if (Number.isFinite(duration) && duration >= 0) {
|
|
211
|
+
metrics[name] = Math.round(duration * 100) / 100;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return Object.keys(metrics).length ? metrics : null;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
function readResponseServerTiming(response) {
|
|
220
|
+
try {
|
|
221
|
+
return sanitizeServerTimingHeader(response.headers?.get('server-timing'));
|
|
222
|
+
} catch (_) {
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function roundRouteTimingValue(value) {
|
|
228
|
+
return Math.round(value * 100) / 100;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
function extractResourceTiming(entry) {
|
|
232
|
+
const fields = [
|
|
233
|
+
'startTime',
|
|
234
|
+
'requestStart',
|
|
235
|
+
'responseStart',
|
|
236
|
+
'responseEnd',
|
|
237
|
+
'duration',
|
|
238
|
+
'transferSize',
|
|
239
|
+
'encodedBodySize',
|
|
240
|
+
'decodedBodySize'
|
|
241
|
+
];
|
|
242
|
+
const timing = {};
|
|
243
|
+
|
|
244
|
+
for (const field of fields) {
|
|
245
|
+
const value = entry?.[field];
|
|
246
|
+
if (typeof value === 'number' && Number.isFinite(value) && value >= 0) {
|
|
247
|
+
timing[field] = roundRouteTimingValue(value);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return Object.keys(timing).length ? timing : null;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function getPageDataResourceTiming(endpoint, fetchStartedAt) {
|
|
255
|
+
try {
|
|
256
|
+
if (typeof performance === 'undefined' || typeof performance.getEntriesByName !== 'function') {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const href = new URL(endpoint, window.location.href).href;
|
|
261
|
+
const entries = performance.getEntriesByName(href, 'resource');
|
|
262
|
+
if (!entries.length) return null;
|
|
263
|
+
|
|
264
|
+
for (let index = entries.length - 1; index >= 0; index--) {
|
|
265
|
+
const entry = entries[index];
|
|
266
|
+
if (
|
|
267
|
+
typeof entry?.responseEnd === 'number' &&
|
|
268
|
+
Number.isFinite(entry.responseEnd) &&
|
|
269
|
+
entry.responseEnd + 1 >= fetchStartedAt
|
|
270
|
+
) {
|
|
271
|
+
return extractResourceTiming(entry);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return null;
|
|
276
|
+
} catch (_) {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function buildPageDataTimingDetail(response, endpoint, fetchStartedAt, source) {
|
|
282
|
+
const detail = { source, status: response.status };
|
|
283
|
+
const serverTiming = readResponseServerTiming(response);
|
|
284
|
+
if (serverTiming) {
|
|
285
|
+
detail.serverTiming = serverTiming;
|
|
286
|
+
const serverTimingMetrics = parseServerTimingMetrics(serverTiming);
|
|
287
|
+
if (serverTimingMetrics) detail.serverTimingMetrics = serverTimingMetrics;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const resourceTiming = getPageDataResourceTiming(response.url || endpoint, fetchStartedAt);
|
|
291
|
+
if (resourceTiming) detail.resourceTiming = resourceTiming;
|
|
292
|
+
|
|
293
|
+
return detail;
|
|
294
|
+
}
|
|
295
|
+
|
|
162
296
|
// ============================================
|
|
163
297
|
// LRU Cache with TTL (single Map to prevent sync issues)
|
|
164
298
|
// ============================================
|
|
@@ -320,7 +454,12 @@ export const getRouterScript = () => `
|
|
|
320
454
|
if (!response.ok) {
|
|
321
455
|
perfEnd('fetch:' + path);
|
|
322
456
|
if (recordRouteTiming) {
|
|
323
|
-
emitRouteTiming(
|
|
457
|
+
emitRouteTiming(
|
|
458
|
+
'page-data',
|
|
459
|
+
path,
|
|
460
|
+
startedAt,
|
|
461
|
+
buildPageDataTimingDetail(response, endpoint, startedAt, timingSource)
|
|
462
|
+
);
|
|
324
463
|
}
|
|
325
464
|
const error = new Error('Failed to fetch page data: ' + response.status);
|
|
326
465
|
error.status = response.status;
|
|
@@ -332,7 +471,12 @@ export const getRouterScript = () => `
|
|
|
332
471
|
perfEnd('parse:' + path);
|
|
333
472
|
perfEnd('fetch:' + path);
|
|
334
473
|
if (recordRouteTiming) {
|
|
335
|
-
emitRouteTiming(
|
|
474
|
+
emitRouteTiming(
|
|
475
|
+
'page-data',
|
|
476
|
+
path,
|
|
477
|
+
startedAt,
|
|
478
|
+
buildPageDataTimingDetail(response, endpoint, startedAt, timingSource)
|
|
479
|
+
);
|
|
336
480
|
}
|
|
337
481
|
|
|
338
482
|
if (triggerReloadOnVersionMismatch) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-store.d.ts","sourceRoot":"","sources":["../../../../../src/src/rendering/cache/stores/api-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAY7E,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAwBD,qBAAa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,kBAAkB,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,GAAE,oBAAyB;IAa9C,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,WAAW;IAqBb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAsBnD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"api-store.d.ts","sourceRoot":"","sources":["../../../../../src/src/rendering/cache/stores/api-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAY7E,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAwBD,qBAAa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,kBAAkB,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,GAAE,oBAAyB;IAa9C,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,WAAW;IAqBb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAsBnD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBpD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,QAAQ,IAAI,eAAe;CAG5B"}
|
|
@@ -111,15 +111,13 @@ export class APICacheStore {
|
|
|
111
111
|
if (value.result.stream)
|
|
112
112
|
return;
|
|
113
113
|
await this.localCache?.set(key, value);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
})();
|
|
114
|
+
try {
|
|
115
|
+
const backend = await this.getBackend();
|
|
116
|
+
await backend.set(key, this.serialize(value), this.ttlSeconds);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
logger.debug("[APICacheStore] Failed to store in distributed cache (no fallback)", { key, error });
|
|
120
|
+
}
|
|
123
121
|
}
|
|
124
122
|
async delete(key) {
|
|
125
123
|
await this.localCache?.delete(key);
|