ugly-app 0.1.819 → 0.1.821
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/inspect/agent/perfAgent.d.ts +15 -0
- package/dist/inspect/agent/perfAgent.d.ts.map +1 -1
- package/dist/inspect/agent/perfAgent.js +112 -11
- package/dist/inspect/agent/perfAgent.js.map +1 -1
- package/dist/inspect/agent/profile.js +15 -1
- package/dist/inspect/agent/profile.js.map +1 -1
- package/dist/inspect/agent-bundle.js +4 -3
- package/dist/inspect/host-bundle.js +8 -8
- package/dist/server/adapter/workers/index.d.ts +1 -1
- package/dist/server/adapter/workers/index.d.ts.map +1 -1
- package/dist/server/adapter/workers/index.js +1 -1
- package/dist/server/adapter/workers/index.js.map +1 -1
- package/dist/server/adapter/workers/wrapWithAssets.d.ts +6 -0
- package/dist/server/adapter/workers/wrapWithAssets.d.ts.map +1 -1
- package/dist/server/adapter/workers/wrapWithAssets.js +14 -0
- package/dist/server/adapter/workers/wrapWithAssets.js.map +1 -1
- package/package.json +2 -2
- package/src/cli/version.ts +1 -1
- package/src/inspect/agent/perfAgent.ts +115 -11
- package/src/inspect/agent/perfAgentThrottle.test.ts +148 -0
- package/src/inspect/agent/profile.ts +16 -1
- package/src/server/adapter/workers/index.ts +1 -1
- package/src/server/adapter/workers/wrapWithAssets.ts +15 -0
|
@@ -17,7 +17,7 @@ export { SessionDO } from './createWorkersApp.js';
|
|
|
17
17
|
export { CollabDO } from './do-collab.js';
|
|
18
18
|
export { createWorkersApp, getAppContext, } from './createWorkersApp.js';
|
|
19
19
|
export type { WorkersCollabConfig, CollabRole, WorkersSSRContext, WorkersSSRRender, } from './createWorkersApp.js';
|
|
20
|
-
export { wrapWithAssets, type AssetsConfig } from './wrapWithAssets.js';
|
|
20
|
+
export { wrapWithAssets, NO_SPA_FALLBACK_HEADER, type AssetsConfig } from './wrapWithAssets.js';
|
|
21
21
|
export { uglyBotRequest } from '../../uglyBotProxy.js';
|
|
22
22
|
export { createTextGen } from '../../AiText.js';
|
|
23
23
|
export { createImageGen } from '../../AiImage.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKhG,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAM3D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAOzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,EACL,YAAY,EACZ,SAAS,EACT,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAK7D,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,uBAAuB,EACvB,UAAU,EACV,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,CAyBnE"}
|
|
@@ -18,7 +18,7 @@ export { CollectionDO } from './do-collection.js';
|
|
|
18
18
|
export { SessionDO } from './createWorkersApp.js';
|
|
19
19
|
export { CollabDO } from './do-collab.js';
|
|
20
20
|
export { createWorkersApp, getAppContext, } from './createWorkersApp.js';
|
|
21
|
-
export { wrapWithAssets } from './wrapWithAssets.js';
|
|
21
|
+
export { wrapWithAssets, NO_SPA_FALLBACK_HEADER } from './wrapWithAssets.js';
|
|
22
22
|
// Runtime-neutral proxy clients (HTTPS fetch to ugly.bot — no Node-only deps).
|
|
23
23
|
// Re-exported here so `server/workers.ts` handlers can call AI / email / push /
|
|
24
24
|
// embeddings / the generic proxy WITHOUT importing the heavy `ugly-app/server`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,cAAc,EAAqB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAqB,MAAM,qBAAqB,CAAC;AAChG,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,mFAAmF;AACnF,+EAA+E;AAC/E,4EAA4E;AAC5E,+EAA+E;AAC/E,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,oEAAoE;AACpE,sEAAsE;AACtE,kEAAkE;AAClE,sEAAsE;AACtE,wEAAwE;AACxE,uEAAuE;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,8EAA8E;AAC9E,0EAA0E;AAC1E,kEAAkE;AAClE,OAAO,EACL,YAAY,EACZ,SAAS,EACT,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,4DAA4D;AAC5D,iEAAiE;AACjE,mEAAmE;AACnE,uEAAuE;AACvE,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AASzB,MAAM,UAAU,oBAAoB,CAAC,GAAe;IAClD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,eAAe,CACjB,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,cAAc,KAAK,SAAS;YAC9B,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,cAAc,EAAE;YACvC,CAAC,CAAC,EAAE,CACP;QACD,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC;QAC5D,OAAO,EAAE,oBAAoB,CAC3B,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAC7B;QACD,QAAQ,EAAE,qBAAqB,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAiB,EAAE;gBAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,kFAAkF,CAC3H,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACpD,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -28,6 +28,12 @@
|
|
|
28
28
|
* GET that the base would 404).
|
|
29
29
|
*/
|
|
30
30
|
import type { WorkersApp } from './createWorkersApp.js';
|
|
31
|
+
/**
|
|
32
|
+
* Set `<NO_SPA_FALLBACK_HEADER>: '1'` on a raw route's 404 to keep it a 404 instead
|
|
33
|
+
* of letting the SPA fallback answer with an HTML 200. Use it on paths served to
|
|
34
|
+
* non-browser clients (installers, auto-updaters, package managers).
|
|
35
|
+
*/
|
|
36
|
+
export declare const NO_SPA_FALLBACK_HEADER = "x-ugly-no-spa-fallback";
|
|
31
37
|
export interface AssetsConfig {
|
|
32
38
|
/**
|
|
33
39
|
* The post-rewrite HTML — `/assets/foo.js` → `/{buildId}/assets/foo.js`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapWithAssets.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAQH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAUxD,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmSD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,YAAY,GACnB,UAAU,
|
|
1
|
+
{"version":3,"file":"wrapWithAssets.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAQH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAUxD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmSD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,YAAY,GACnB,UAAU,CA8OZ"}
|
|
@@ -31,6 +31,12 @@ import { getUglyBotUrl } from '../../../shared/uglyBotUrl.js';
|
|
|
31
31
|
import { setBuildInfo } from '../../BuildInfo.js';
|
|
32
32
|
import { getAppContext } from './createWorkersApp.js';
|
|
33
33
|
import { CACHE_STATUS_HEADER, edgeCacheDecision, finalizeCachedResponse, getEdgeCache, ssrCacheControl, } from './edgeCache.js';
|
|
34
|
+
/**
|
|
35
|
+
* Set `<NO_SPA_FALLBACK_HEADER>: '1'` on a raw route's 404 to keep it a 404 instead
|
|
36
|
+
* of letting the SPA fallback answer with an HTML 200. Use it on paths served to
|
|
37
|
+
* non-browser clients (installers, auto-updaters, package managers).
|
|
38
|
+
*/
|
|
39
|
+
export const NO_SPA_FALLBACK_HEADER = 'x-ugly-no-spa-fallback';
|
|
34
40
|
const ASSET_CACHE_CONTROL = 'public, max-age=31536000, immutable';
|
|
35
41
|
// Stable-named public files (icon.png, favicon.ico, manifest.json, …) keep the
|
|
36
42
|
// SAME url across deploys but their CONTENT changes, so they must NOT be
|
|
@@ -408,6 +414,14 @@ export function wrapWithAssets(base, config) {
|
|
|
408
414
|
if (baseRes.status !== 404) {
|
|
409
415
|
return baseRes;
|
|
410
416
|
}
|
|
417
|
+
// A raw route that OWNS its path can opt out of the SPA fallback, so a miss
|
|
418
|
+
// stays a real 404 instead of becoming an HTML 200. Non-browser clients
|
|
419
|
+
// (installers, auto-updaters, package fetchers) rely on the status code:
|
|
420
|
+
// ugly-studio's `/releases/*` serves an auto-updater that treats an HTML 200
|
|
421
|
+
// blockmap as a corrupt one rather than "absent".
|
|
422
|
+
if (baseRes.headers.get(NO_SPA_FALLBACK_HEADER) === '1') {
|
|
423
|
+
return baseRes;
|
|
424
|
+
}
|
|
411
425
|
// ── 2b. Public user storage: /public/* → R2 object ───────────
|
|
412
426
|
// `createStorageClient().put('public', key, …)` writes R2 objects under
|
|
413
427
|
// the `public/<key>` prefix and (absent STORAGE_PUBLIC_URL) hands clients
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapWithAssets.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wrapWithAssets.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ugly-app",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.821",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
|
|
6
6
|
"files": [
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
},
|
|
65
65
|
"scripts": {
|
|
66
66
|
"prebuild": "node -e \"const p=JSON.parse(require('fs').readFileSync('package.json','utf8'));require('fs').writeFileSync('src/cli/version.ts','// Auto-generated by prebuild — do not edit manually\\nexport const CLI_VERSION = '+JSON.stringify(p.version)+';\\n');\" && rm -rf dist",
|
|
67
|
-
"build": "tsc && chmod +x dist/cli/index.js && cp src/markdown/client/*.css dist/markdown/client/ && mkdir -p dist/cli/publish/recipes && cp -R src/cli/publish/recipes/. dist/cli/publish/recipes/ && esbuild src/inspect/agent/bundle-entry.ts --bundle --format=iife --platform=browser --minify --outfile=dist/inspect/agent-bundle.js && esbuild src/inspect/host-bundle-entry.ts --bundle --format=iife --platform=browser --minify --outfile=dist/inspect/host-bundle.js",
|
|
67
|
+
"build": "tsc && chmod +x dist/cli/index.js && cp src/markdown/client/*.css dist/markdown/client/ && mkdir -p dist/cli/publish/recipes && cp -R src/cli/publish/recipes/. dist/cli/publish/recipes/ && esbuild src/inspect/agent/bundle-entry.ts --bundle --format=iife --platform=browser --minify --outfile=dist/inspect/agent-bundle.js --footer:js='//# sourceURL=ugly-inspect-agent.js' && esbuild src/inspect/host-bundle-entry.ts --bundle --format=iife --platform=browser --minify --outfile=dist/inspect/host-bundle.js",
|
|
68
68
|
"test": "vitest run",
|
|
69
69
|
"test:e2e": "E2E=1 vitest run tests/cli/e2e-integration.test.ts",
|
|
70
70
|
"test:e2e:full": "pnpm exec tsx tests/e2e/full-e2e.ts",
|
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.821";
|
|
@@ -28,6 +28,26 @@ const LONG_TASK_WINDOW_COUNT = 5;
|
|
|
28
28
|
const DROPPED_FRAME_THRESHOLD = 3;
|
|
29
29
|
const MAX_PENDING_ANOMALIES = 10;
|
|
30
30
|
const PROFILE_DURATION_MS = 1000;
|
|
31
|
+
// The 1s self-profile costs ~250 stack captures. Anomalies can arrive back-to-back
|
|
32
|
+
// (every long task fires one), so profiling every anomaly makes the agent a
|
|
33
|
+
// meaningful share of the very load it is measuring. Snapshots are still captured
|
|
34
|
+
// each time; only the call tree is rate-limited.
|
|
35
|
+
const PROFILE_COOLDOWN_MS = 30_000;
|
|
36
|
+
// Above this, a heartbeat gap is a discontinuity (suspension / sleep / throttled tick
|
|
37
|
+
// racing `visibilitychange`), not event-loop lag. Comfortably above the largest block
|
|
38
|
+
// we still want to report as a spike.
|
|
39
|
+
const SUSPEND_GAP_MS = 10_000;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* A hidden page's timers are throttled by the browser — Chromium clamps them to 1s
|
|
43
|
+
* and, after ~5 minutes, to once per MINUTE. The heartbeat measures `now - expected`,
|
|
44
|
+
* so an idle backgrounded tab reports tens of seconds of "event-loop lag" and a
|
|
45
|
+
* saturated cpuPressure. That is a property of not being on screen, not of the page.
|
|
46
|
+
* Observed in production: a backgrounded tab converging on exactly ~60000ms of lag.
|
|
47
|
+
*/
|
|
48
|
+
function isHidden(): boolean {
|
|
49
|
+
return typeof document !== 'undefined' && document.hidden === true;
|
|
50
|
+
}
|
|
31
51
|
|
|
32
52
|
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
33
53
|
|
|
@@ -83,10 +103,37 @@ class HeartbeatDetector {
|
|
|
83
103
|
return this.lagSamples.reduce((a, b) => a + b, 0) / this.lagSamples.length;
|
|
84
104
|
}
|
|
85
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Drop the accumulated window and re-baseline. Called when the page is hidden (its
|
|
108
|
+
* timers are about to be throttled) and when it becomes visible again (the first
|
|
109
|
+
* tick after a throttled gap would otherwise register as a huge stall).
|
|
110
|
+
*/
|
|
111
|
+
reset(now: number): void {
|
|
112
|
+
this.lastTick = now;
|
|
113
|
+
this.lagSamples.length = 0;
|
|
114
|
+
this.delayedSamples.length = 0;
|
|
115
|
+
this.blipCount = 0;
|
|
116
|
+
}
|
|
117
|
+
|
|
86
118
|
/** Returns true when a fresh anomaly is detected (pressure just crossed threshold). */
|
|
87
119
|
tick(now: number): boolean {
|
|
120
|
+
// A throttled tick measures the browser's scheduling policy, not the page's
|
|
121
|
+
// event loop. Re-baseline and record nothing.
|
|
122
|
+
if (isHidden()) {
|
|
123
|
+
this.reset(now);
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
88
126
|
const expected = this.lastTick + HEARTBEAT_INTERVAL_MS;
|
|
89
127
|
const lag = Math.max(0, now - expected);
|
|
128
|
+
// A gap this large is a discontinuity — process suspension, machine sleep, or a
|
|
129
|
+
// throttled tick that beat `visibilitychange` back to the queue. It is not a
|
|
130
|
+
// stall we could act on, and recording it poisons the trailing average for the
|
|
131
|
+
// next ~10s. Re-baseline instead. (A genuine multi-second block below this
|
|
132
|
+
// threshold is still reported as a spike.)
|
|
133
|
+
if (lag > SUSPEND_GAP_MS) {
|
|
134
|
+
this.reset(now);
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
90
137
|
this.lagSamples.push(lag);
|
|
91
138
|
if (this.lagSamples.length > HEARTBEAT_WINDOW_SAMPLES) this.lagSamples.shift();
|
|
92
139
|
|
|
@@ -135,7 +182,19 @@ class FrameBudgetMonitor {
|
|
|
135
182
|
private rafId = 0;
|
|
136
183
|
onJank: (() => void) | null = null;
|
|
137
184
|
|
|
185
|
+
/** Forget the last frame time so a hidden→visible gap isn't counted as jank. */
|
|
186
|
+
reset(): void {
|
|
187
|
+
this.lastFrame = 0;
|
|
188
|
+
this.dropCount = 0;
|
|
189
|
+
}
|
|
190
|
+
|
|
138
191
|
private tick = (now: number): void => {
|
|
192
|
+
// rAF is suspended while hidden; the first frame back carries the whole gap.
|
|
193
|
+
if (isHidden()) {
|
|
194
|
+
this.reset();
|
|
195
|
+
this.rafId = raf(this.tick);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
139
198
|
const delta = now - this.lastFrame;
|
|
140
199
|
if (this.lastFrame > 0 && delta > 32) {
|
|
141
200
|
this.dropCount++;
|
|
@@ -185,6 +244,7 @@ export class PerfAgent {
|
|
|
185
244
|
private pendingAnomalies: PerfSnapshot['trigger'][] = [];
|
|
186
245
|
private snapshots: PerfSnapshot[] = [];
|
|
187
246
|
private profiling = false;
|
|
247
|
+
private lastProfileAt = 0;
|
|
188
248
|
private lcpMs: number | undefined;
|
|
189
249
|
private fcpMs: number | undefined;
|
|
190
250
|
private _startup: {
|
|
@@ -240,9 +300,7 @@ export class PerfAgent {
|
|
|
240
300
|
this.lcpMs = e.startTime;
|
|
241
301
|
}
|
|
242
302
|
}
|
|
243
|
-
|
|
244
|
-
const ltCount = vitals.longTasks?.length ?? 0;
|
|
245
|
-
if (ltCount + this.longTasks.count >= LONG_TASK_WINDOW_COUNT * 2) {
|
|
303
|
+
if (this.longTaskAnomalyDue(vitals)) {
|
|
246
304
|
void this.captureAnomaly('long-task');
|
|
247
305
|
}
|
|
248
306
|
});
|
|
@@ -262,10 +320,39 @@ export class PerfAgent {
|
|
|
262
320
|
}
|
|
263
321
|
} catch { /* unsupported */ }
|
|
264
322
|
|
|
323
|
+
// Re-baseline across visibility changes. Going hidden, the next tick may be a
|
|
324
|
+
// minute late; coming back, that gap must not be charged to the page.
|
|
325
|
+
try {
|
|
326
|
+
if (typeof document !== 'undefined' && typeof document.addEventListener === 'function') {
|
|
327
|
+
document.addEventListener('visibilitychange', () => {
|
|
328
|
+
this.heartbeat.reset(Date.now());
|
|
329
|
+
this.frameBudget.reset();
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
} catch { /* no document (worker/test) */ }
|
|
333
|
+
|
|
265
334
|
// Track startup milestones
|
|
266
335
|
this._startup.milestones.push({ label: 'agent:install', deltaMs: Math.round(this.now() - this._startup.t0) });
|
|
267
336
|
}
|
|
268
337
|
|
|
338
|
+
/**
|
|
339
|
+
* Whether the long tasks seen *recently* warrant an anomaly.
|
|
340
|
+
*
|
|
341
|
+
* The old test also added `vitals.longTasks.length` — a cumulative buffer that is
|
|
342
|
+
* capped at 200 but never decays. Once a page had emitted 10 long tasks in its
|
|
343
|
+
* lifetime (trivial for any real app) the threshold was permanently satisfied, so
|
|
344
|
+
* EVERY subsequent long task captured an anomaly and ran a 1s self-profile. That
|
|
345
|
+
* is a runaway loop: profiling generates long tasks, which schedule more profiling.
|
|
346
|
+
*
|
|
347
|
+
* Only `this.longTasks` is consulted — it prunes to a trailing 10s window. `vitals`
|
|
348
|
+
* stays in the signature because its entries are stamped with a different clock
|
|
349
|
+
* (`deps.now()`), so they cannot be windowed against this one.
|
|
350
|
+
*/
|
|
351
|
+
private longTaskAnomalyDue(_vitals: import('../protocol.js').WebVitals): boolean {
|
|
352
|
+
if (isHidden()) return false;
|
|
353
|
+
return this.longTasks.count >= LONG_TASK_WINDOW_COUNT;
|
|
354
|
+
}
|
|
355
|
+
|
|
269
356
|
/** Mark a startup milestone (call from outside). */
|
|
270
357
|
mark(label: string): void {
|
|
271
358
|
this._startup.milestones.push({
|
|
@@ -300,13 +387,23 @@ export class PerfAgent {
|
|
|
300
387
|
async captureAnomaly(trigger: PerfSnapshot['trigger']): Promise<void> {
|
|
301
388
|
if (this.pendingAnomalies.length >= MAX_PENDING_ANOMALIES) return;
|
|
302
389
|
if (this.profiling && trigger !== 'page-unload') return;
|
|
390
|
+
// A hidden page's detectors measure browser throttling, not the page. `page-unload`
|
|
391
|
+
// is exempt: a tab is often hidden at the moment it is torn down.
|
|
392
|
+
if (trigger !== 'page-unload' && isHidden()) return;
|
|
303
393
|
|
|
304
394
|
this.profiling = true;
|
|
305
395
|
const heap = heapMb();
|
|
306
396
|
const vitals = this.vitalsReader();
|
|
307
397
|
|
|
398
|
+
// The profile is the expensive part (~250 stack captures over 1s). Snapshot every
|
|
399
|
+
// anomaly, but sample at most once per cooldown so the agent can't become the
|
|
400
|
+
// dominant cost on a page that is emitting anomalies continuously.
|
|
401
|
+
const nowMs = Date.now();
|
|
402
|
+
const mayProfile = trigger !== 'page-unload' && nowMs - this.lastProfileAt >= PROFILE_COOLDOWN_MS;
|
|
403
|
+
|
|
308
404
|
let callTree: PerfSnapshot['callTree'] = null;
|
|
309
|
-
if (
|
|
405
|
+
if (mayProfile) {
|
|
406
|
+
this.lastProfileAt = nowMs;
|
|
310
407
|
try {
|
|
311
408
|
const profile = await selfProfile(PROFILE_DURATION_MS, this.now);
|
|
312
409
|
// Flatten the top 10 self-time frames
|
|
@@ -326,13 +423,20 @@ export class PerfAgent {
|
|
|
326
423
|
walk(profile.root);
|
|
327
424
|
frames.sort((a, b) => b.selfMs - a.selfMs);
|
|
328
425
|
const totalSelf = frames.reduce((s, f) => s + f.selfMs, 0);
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
426
|
+
// No page frames sampled. This is the common case for a single synchronous
|
|
427
|
+
// block: the sampler runs on a timer, and timers do not run *during* the
|
|
428
|
+
// block, so by the time it profiles, the page is idle again. Report `null`
|
|
429
|
+
// rather than an empty tree — an empty array reads as "profiled, nothing hot",
|
|
430
|
+
// which is a different (and misleading) claim.
|
|
431
|
+
callTree = frames.length === 0
|
|
432
|
+
? null
|
|
433
|
+
: frames.slice(0, 10).map((f) => ({
|
|
434
|
+
functionName: f.fn,
|
|
435
|
+
url: f.url,
|
|
436
|
+
line: f.line,
|
|
437
|
+
col: f.col,
|
|
438
|
+
selfPercent: totalSelf > 0 ? Math.round((f.selfMs / totalSelf) * 100) : 0,
|
|
439
|
+
}));
|
|
336
440
|
} catch {
|
|
337
441
|
callTree = null;
|
|
338
442
|
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { PerfAgent } from './perfAgent.js';
|
|
3
|
+
import type { WebVitals } from '../protocol.js';
|
|
4
|
+
|
|
5
|
+
const NO_VITALS: WebVitals = { longTasks: [] } as unknown as WebVitals;
|
|
6
|
+
|
|
7
|
+
function makeAgent(vitals: () => WebVitals = () => NO_VITALS): PerfAgent {
|
|
8
|
+
let t = 0;
|
|
9
|
+
return new PerfAgent(() => (t += 1), vitals);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Present a `document` with the given visibility to the agent's `isHidden()`. */
|
|
13
|
+
function setHidden(hidden: boolean): void {
|
|
14
|
+
vi.stubGlobal('document', {
|
|
15
|
+
hidden,
|
|
16
|
+
getElementsByTagName: () => [],
|
|
17
|
+
addEventListener: () => {},
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function heartbeatOf(agent: PerfAgent): { tick(now: number): boolean; reset(now: number): void } {
|
|
22
|
+
return (agent as unknown as { heartbeat: { tick(now: number): boolean; reset(now: number): void } }).heartbeat;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Drive the heartbeat with ticks `gapMs` apart. */
|
|
26
|
+
function drive(agent: PerfAgent, gapMs: number, ticks: number): void {
|
|
27
|
+
const hb = heartbeatOf(agent);
|
|
28
|
+
let now = 0;
|
|
29
|
+
for (let i = 0; i < ticks; i++) {
|
|
30
|
+
now += gapMs;
|
|
31
|
+
hb.tick(now);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
afterEach(() => vi.unstubAllGlobals());
|
|
36
|
+
|
|
37
|
+
describe('hidden-tab timer throttling must not read as CPU pressure', () => {
|
|
38
|
+
it('a hidden page clamped to 1 tick/min is not "under pressure"', () => {
|
|
39
|
+
setHidden(true);
|
|
40
|
+
const agent = makeAgent();
|
|
41
|
+
// Chromium intensive throttling. The page is IDLE — it just is not on screen.
|
|
42
|
+
// Production showed this converging on ~60000ms of reported "lag".
|
|
43
|
+
drive(agent, 60_000, 60);
|
|
44
|
+
const v = agent.vitals();
|
|
45
|
+
expect(v.eventLoopLagMs).toBeLessThan(1000);
|
|
46
|
+
expect(v.cpuPressure).toBeLessThan(0.5);
|
|
47
|
+
expect(v.pendingAnomalies).toEqual([]);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('a hidden page clamped to 1s is not "under pressure" either', () => {
|
|
51
|
+
setHidden(true);
|
|
52
|
+
const agent = makeAgent();
|
|
53
|
+
drive(agent, 1000, 60);
|
|
54
|
+
expect(agent.vitals().cpuPressure).toBeLessThan(0.5);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('does not charge the page for the hidden→visible gap', () => {
|
|
58
|
+
setHidden(true);
|
|
59
|
+
const agent = makeAgent();
|
|
60
|
+
drive(agent, 60_000, 5);
|
|
61
|
+
// Becomes visible; the next tick lands a minute after the last throttled one.
|
|
62
|
+
setHidden(false);
|
|
63
|
+
const hb = heartbeatOf(agent);
|
|
64
|
+
const anomaly = hb.tick(300_000 + 60_000);
|
|
65
|
+
expect(anomaly).toBe(false);
|
|
66
|
+
expect(agent.vitals().cpuPressure).toBeLessThan(0.5);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('still detects a REAL stall on a visible page', () => {
|
|
70
|
+
setHidden(false);
|
|
71
|
+
const agent = makeAgent();
|
|
72
|
+
const hb = heartbeatOf(agent);
|
|
73
|
+
let now = 0;
|
|
74
|
+
for (let i = 0; i < 20; i++) { now += 200; hb.tick(now); }
|
|
75
|
+
now += 3000; // a genuine 3s synchronous block
|
|
76
|
+
expect(hb.tick(now)).toBe(true);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
describe('long-task anomaly uses a decaying window', () => {
|
|
81
|
+
function longTaskDue(agent: PerfAgent, vitals: WebVitals): boolean {
|
|
82
|
+
return (agent as unknown as { longTaskAnomalyDue(v: WebVitals): boolean })
|
|
83
|
+
.longTaskAnomalyDue.call(agent, vitals);
|
|
84
|
+
}
|
|
85
|
+
function addLongTasks(agent: PerfAgent, n: number): void {
|
|
86
|
+
const c = (agent as unknown as { longTasks: { add(ts: number, dur: number): void } }).longTasks;
|
|
87
|
+
for (let i = 0; i < n; i++) c.add(Date.now(), 60);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
it('ignores the never-decaying cumulative vitals buffer', () => {
|
|
91
|
+
setHidden(false);
|
|
92
|
+
// 12 long tasks emitted long ago. Previously `vitals.longTasks.length >= 10` made
|
|
93
|
+
// the threshold permanently true, so every later long task ran a 1s self-profile.
|
|
94
|
+
const stale: WebVitals = {
|
|
95
|
+
longTasks: Array.from({ length: 12 }, () => ({ ts: 0, durationMs: 60 })),
|
|
96
|
+
} as unknown as WebVitals;
|
|
97
|
+
const agent = makeAgent(() => stale);
|
|
98
|
+
expect(longTaskDue(agent, stale)).toBe(false);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('fires on a real burst inside the trailing window', () => {
|
|
102
|
+
setHidden(false);
|
|
103
|
+
const agent = makeAgent();
|
|
104
|
+
addLongTasks(agent, 5);
|
|
105
|
+
expect(longTaskDue(agent, NO_VITALS)).toBe(true);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it('never fires while hidden', () => {
|
|
109
|
+
setHidden(true);
|
|
110
|
+
const agent = makeAgent();
|
|
111
|
+
addLongTasks(agent, 20);
|
|
112
|
+
expect(longTaskDue(agent, NO_VITALS)).toBe(false);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
describe('self-profile is rate limited', () => {
|
|
117
|
+
it('captures every anomaly but only profiles once per cooldown', async () => {
|
|
118
|
+
setHidden(false);
|
|
119
|
+
const agent = makeAgent();
|
|
120
|
+
|
|
121
|
+
await agent.captureAnomaly('cpu-pressure');
|
|
122
|
+
await agent.captureAnomaly('cpu-pressure');
|
|
123
|
+
await agent.captureAnomaly('cpu-pressure');
|
|
124
|
+
|
|
125
|
+
const trees: (unknown | null)[] = [];
|
|
126
|
+
for (;;) {
|
|
127
|
+
const s = agent.takeSnapshot();
|
|
128
|
+
if (!s) break;
|
|
129
|
+
trees.push(s.callTree);
|
|
130
|
+
}
|
|
131
|
+
expect(trees.length).toBe(3); // every anomaly is still recorded
|
|
132
|
+
expect(trees.filter((t) => t !== null).length).toBe(1); // only one profile
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it('does not capture an anomaly at all while hidden', async () => {
|
|
136
|
+
setHidden(true);
|
|
137
|
+
const agent = makeAgent();
|
|
138
|
+
await agent.captureAnomaly('cpu-pressure');
|
|
139
|
+
expect(agent.takeSnapshot()).toBeNull();
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('always captures page-unload, even hidden', async () => {
|
|
143
|
+
setHidden(true);
|
|
144
|
+
const agent = makeAgent();
|
|
145
|
+
await agent.captureAnomaly('page-unload');
|
|
146
|
+
expect(agent.takeSnapshot()).not.toBeNull();
|
|
147
|
+
});
|
|
148
|
+
});
|
|
@@ -37,11 +37,26 @@ function schedule(fn: () => void): void {
|
|
|
37
37
|
else fn();
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Frames belonging to the inspect agent itself. The `profile.(js|ts)` test only ever
|
|
42
|
+
* matched an unbundled dev build: in the shipped IIFE every module collapses into one
|
|
43
|
+
* file, so the sampler's own frames survived the filter and it profiled ITSELF —
|
|
44
|
+
* production call trees were a single minified frame with 100% self time, useless for
|
|
45
|
+
* finding the real hot path. The bundle now carries a `sourceURL` footer so its frames
|
|
46
|
+
* are attributable.
|
|
47
|
+
*
|
|
48
|
+
* Bare `<anonymous>` is deliberately NOT filtered: page code run through `eval` /
|
|
49
|
+
* `executeJavaScript` reports that way and is exactly what we want to surface.
|
|
50
|
+
*/
|
|
51
|
+
function isAgentFrame(url: string): boolean {
|
|
52
|
+
return /profile\.(js|ts)/.test(url) || /ugly-inspect-agent/.test(url);
|
|
53
|
+
}
|
|
54
|
+
|
|
40
55
|
function captureFrames(): SourceLoc[] {
|
|
41
56
|
// Frames are leaf→root; reverse to root→leaf and drop our own profiler frames.
|
|
42
57
|
const frames = parseStack(new Error().stack, 1);
|
|
43
58
|
return frames
|
|
44
|
-
.filter((f) =>
|
|
59
|
+
.filter((f) => !isAgentFrame(f.url))
|
|
45
60
|
.map((f) => ({ url: f.url, line: f.line, col: f.col, functionName: f.functionName }))
|
|
46
61
|
.reverse();
|
|
47
62
|
}
|
|
@@ -31,7 +31,7 @@ export type {
|
|
|
31
31
|
WorkersSSRContext,
|
|
32
32
|
WorkersSSRRender,
|
|
33
33
|
} from './createWorkersApp.js';
|
|
34
|
-
export { wrapWithAssets, type AssetsConfig } from './wrapWithAssets.js';
|
|
34
|
+
export { wrapWithAssets, NO_SPA_FALLBACK_HEADER, type AssetsConfig } from './wrapWithAssets.js';
|
|
35
35
|
// Runtime-neutral proxy clients (HTTPS fetch to ugly.bot — no Node-only deps).
|
|
36
36
|
// Re-exported here so `server/workers.ts` handlers can call AI / email / push /
|
|
37
37
|
// embeddings / the generic proxy WITHOUT importing the heavy `ugly-app/server`
|
|
@@ -44,6 +44,13 @@ import {
|
|
|
44
44
|
ssrCacheControl,
|
|
45
45
|
} from './edgeCache.js';
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Set `<NO_SPA_FALLBACK_HEADER>: '1'` on a raw route's 404 to keep it a 404 instead
|
|
49
|
+
* of letting the SPA fallback answer with an HTML 200. Use it on paths served to
|
|
50
|
+
* non-browser clients (installers, auto-updaters, package managers).
|
|
51
|
+
*/
|
|
52
|
+
export const NO_SPA_FALLBACK_HEADER = 'x-ugly-no-spa-fallback';
|
|
53
|
+
|
|
47
54
|
export interface AssetsConfig {
|
|
48
55
|
/**
|
|
49
56
|
* The post-rewrite HTML — `/assets/foo.js` → `/{buildId}/assets/foo.js`
|
|
@@ -463,6 +470,14 @@ export function wrapWithAssets(
|
|
|
463
470
|
if (baseRes.status !== 404) {
|
|
464
471
|
return baseRes;
|
|
465
472
|
}
|
|
473
|
+
// A raw route that OWNS its path can opt out of the SPA fallback, so a miss
|
|
474
|
+
// stays a real 404 instead of becoming an HTML 200. Non-browser clients
|
|
475
|
+
// (installers, auto-updaters, package fetchers) rely on the status code:
|
|
476
|
+
// ugly-studio's `/releases/*` serves an auto-updater that treats an HTML 200
|
|
477
|
+
// blockmap as a corrupt one rather than "absent".
|
|
478
|
+
if (baseRes.headers.get(NO_SPA_FALLBACK_HEADER) === '1') {
|
|
479
|
+
return baseRes;
|
|
480
|
+
}
|
|
466
481
|
|
|
467
482
|
// ── 2b. Public user storage: /public/* → R2 object ───────────
|
|
468
483
|
// `createStorageClient().put('public', key, …)` writes R2 objects under
|