mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 04:38:33 +00:00
* feat(sdk): scaffold @hyperframes/sdk — engine layer (model, RFC 6902 patches, mutate, apply-patches) * fix(sdk): make engine-layer PR self-contained — trim index.ts, guard indexed access - index.ts no longer exports document/session/history/persist-queue (those modules land in the next stacked PR); branch now typechecks standalone - setOwnText: optional-chain children[i] access (TS2532 under noUncheckedIndexedAccess) - fallow suppressions for buildPatchEvent + adapters/types.ts — consumers arrive in #1325 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(sdk): fail loudly on Phase 3b ops; add sdk to root build pipeline - applyOp throws UnsupportedOpError (code E_UNSUPPORTED_OP) for the 9 parser-backed ops instead of silently no-opping — callers must never believe an animation edit succeeded when nothing was mutated - validateOp returns false for Phase 3b ops so can() feature-detects - root package.json build filter now includes @hyperframes/sdk (package is dist-only; top-level build previously produced no SDK artifacts). publish.yml intentionally NOT updated — sdk stays unpublished until Phase 3 completes. Adversarial-review findings F3 + F4. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(sdk): cross-realm origin sentinel, dual width/height channel, contract docs Round-2 review (Rames/Miguel) on the engine layer: - ORIGIN_APPLY_PATCHES: unique symbol → namespaced string ('@hyperframes/sdk:applyPatches'). Symbols are realm-local — they don't survive postMessage/structured-clone, which T3 embedded hosts may forward patch events across. Namespaced string keeps collision risk negligible. - setCompositionMetadata width/height: runtime treats data-width/data-height as a forced override of inline style (init.ts applyCompositionSizing). Style is always written; the data-* attr is updated when already present so the edit isn't clobbered on load. Absent attrs stay absent — inverses stay exact. Mirrored in the patch applier; 3 new tests. - JsonPatchOp documented as the emit-only RFC 6902 subset (add/remove/replace); applier header notes move/copy/test are ignored. - SdkDocument.html documented as a build-time snapshot (serialize() is the live state). - patches.ts path-grammar comment fixed: timing/{start|end|trackIndex}. NOT changed (with reasons, see PR reply): moveElement left/top matches Studio's own inline-style commit convention (sourcePatcher); package version follows the repo-wide single-version policy. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(sdk): moveElement writes data-x/data-y, not left/top CSS HF elements use data-x/data-y for positioning (read by htmlParser.ts, emitted by hyperframes generator). CSS left/top is not the runtime convention. Adds inverse round-trip test for prior position restore. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: update bun.lock after sdk package registration Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
183 lines
7.6 KiB
JSON
183 lines
7.6 KiB
JSON
{
|
|
"$schema": "https://raw.githubusercontent.com/fallow-rs/fallow/main/config-schema.json",
|
|
"entry": [
|
|
"packages/producer/src/**/*.test.ts",
|
|
"packages/aws-lambda/src/**/*.test.ts",
|
|
"packages/gcp-cloud-run/src/**/*.test.ts",
|
|
"packages/producer/src/regression-harness.ts",
|
|
"packages/producer/src/regression-harness-distributed.test.ts",
|
|
"packages/producer/src/regression-harness-lambda-local.ts",
|
|
"packages/producer/src/transparency-test.ts",
|
|
"packages/producer/src/parity-harness.ts",
|
|
"packages/producer/src/parity-fixtures.ts",
|
|
"packages/producer/src/perf-gate.ts",
|
|
"packages/producer/src/runtime-conformance.ts",
|
|
"packages/producer/src/benchmark.ts",
|
|
"packages/producer/scripts/generate-font-data.ts",
|
|
"packages/cli/scripts/generate-font-data.ts",
|
|
"packages/engine/scripts/test-fitTextFontSize-browser.ts",
|
|
"packages/aws-lambda/scripts/*.ts",
|
|
// Built as standalone IIFE for the browser-side sandbox runtime;
|
|
// referenced by file path (not import) in build-hyperframes-runtime-artifact.ts.
|
|
"packages/core/src/runtime/entry.ts",
|
|
// Worker entry points loaded dynamically by their *Pool.ts companions.
|
|
"packages/producer/src/services/pngDecodeBlitWorker.ts",
|
|
"packages/producer/src/services/shaderTransitionWorker.ts",
|
|
// Test fixture worker, spawned by path via the pools' workerEntryPath
|
|
// option from the crash-recovery tests; has no import-graph referrer.
|
|
"packages/producer/src/services/__fixtures__/crashOnMessageWorker.mjs",
|
|
"scripts/*.{ts,mjs,js}",
|
|
"scripts/*/run.mjs",
|
|
// Keyframe UI components — wired dynamically via EaseCurveSection/MotionPanel.
|
|
"packages/studio/src/components/editor/KeyframeDiamond.tsx",
|
|
"packages/studio/src/components/editor/SpringEaseEditor.tsx",
|
|
// NLE notice — rendered conditionally via NLELayout when timeline is first shown.
|
|
"packages/studio/src/components/nle/TimelineEditorNotice.tsx",
|
|
// Zoom hook extracted for downstream razor-blade PRs (#1330, #1331).
|
|
"packages/studio/src/player/components/useTimelineZoom.ts",
|
|
],
|
|
"ignorePatterns": [
|
|
"docs/**",
|
|
"packages/producer/tests/**",
|
|
"packages/player/tests/**",
|
|
"packages/engine/tests/**",
|
|
"skills/**/test-corpus/**",
|
|
"skills/**/scripts/**",
|
|
// Golden snapshot files: data consumed by toMatchFileSnapshot, not importable modules.
|
|
"packages/**/__goldens__/**",
|
|
"registry/**",
|
|
"examples/**",
|
|
"packages/sdk/examples/**",
|
|
".github/workflows/fixtures/**",
|
|
// Auto-generated TS client for the HeyGen cloud API. Regenerated by
|
|
// experiment-framework/scripts/generate_hyperframes_cli_client.py via
|
|
// the sync-hyperframes-codegen.yml workflow; complexity/dead-code
|
|
// findings on this file are not actionable from this repo.
|
|
"packages/cli/src/cloud/_gen/**",
|
|
],
|
|
"ignoreExports": [
|
|
// CLI command files: every command exports a const `examples` per the
|
|
// convention documented in CLAUDE.md. This is a namespace barrel, not a
|
|
// collision.
|
|
{ "file": "packages/cli/src/commands/*.ts", "exports": ["examples"] },
|
|
// Independent ML model managers each declare their own DEFAULT_MODEL /
|
|
// MODELS_DIR / ensureModel for their model namespace.
|
|
{
|
|
"file": "packages/cli/src/{background-removal,tts,whisper}/manager.ts",
|
|
"exports": ["DEFAULT_MODEL", "MODELS_DIR", "ensureModel"],
|
|
},
|
|
// `isPathInside` is documented as exported-for-tests only in fileServer.ts;
|
|
// it has different semantics (symlink resolution) from utils/paths.ts.
|
|
{
|
|
"file": "packages/producer/src/services/fileServer.ts",
|
|
"exports": ["isPathInside"],
|
|
},
|
|
// Studio telemetry: consumed by useRenderQueue.ts / StudioFeedbackBar.tsx
|
|
// (deep relative imports) but fallow's static analyzer doesn't trace
|
|
// them. Same path-resolution quirk — trackStudioSessionStart from the
|
|
// same file resolves fine.
|
|
{
|
|
"file": "packages/studio/src/telemetry/events.ts",
|
|
"exports": ["trackStudioRenderStart", "trackStudioFeedback"],
|
|
},
|
|
// domEditingLayers: these exports are consumed via the browser iframe
|
|
// runtime context (not traceable by static import analysis from the
|
|
// studio entry point) or re-exported through the domEditing barrel but
|
|
// have no downstream consumers yet.
|
|
{
|
|
"file": "packages/studio/src/components/editor/domEditingLayers.ts",
|
|
"exports": [
|
|
"isEditableTextLeaf",
|
|
"collectDomEditTextFields",
|
|
"buildElementLabel",
|
|
"refreshDomEditSelection",
|
|
],
|
|
},
|
|
// domEditing barrel: re-exports consumed throughout the studio but
|
|
// fallow's static analyzer can't trace re-exports through barrel files.
|
|
{
|
|
"file": "packages/studio/src/components/editor/domEditing.ts",
|
|
"exports": ["*"],
|
|
},
|
|
// Exported for render.test.ts (exported-for-tests pattern).
|
|
{
|
|
"file": "packages/cli/src/commands/render.ts",
|
|
"exports": ["resolveBrowserGpuForCli", "renderLocal"],
|
|
},
|
|
// captureCost.ts: constants and helpers consumed by the runCaptureCalibration
|
|
// orchestration function and tests, but the entry-point graph doesn't
|
|
// reach them because the orchestrator's caller resolves them dynamically.
|
|
{
|
|
"file": "packages/producer/src/services/render/captureCost.ts",
|
|
"exports": [
|
|
"CAPTURE_CALIBRATION_TARGET_MS",
|
|
"MAX_MEASURED_CAPTURE_COST_MULTIPLIER",
|
|
"CAPTURE_CALIBRATION_PROTOCOL_TIMEOUT_MS",
|
|
"measureCaptureCostFromSession",
|
|
"logCaptureCalibrationResult",
|
|
"createFailedCaptureCalibrationEstimate",
|
|
],
|
|
},
|
|
// Shared test helpers consumed by gsapParser.test.ts (same file,
|
|
// fallow doesn't trace intra-file test consumption).
|
|
{
|
|
"file": "packages/core/src/parsers/gsapParser.test-helpers.ts",
|
|
"exports": [
|
|
"expectKeyframe",
|
|
"expectKeyframesFormat",
|
|
"convertAndReparse",
|
|
"parseSplitAndAssert",
|
|
],
|
|
},
|
|
// Shared timeline components extracted for downstream PRs in the
|
|
// razor-blade stack (#1330, #1331). Consumers live on those branches.
|
|
{
|
|
"file": "packages/studio/src/player/components/timelineCallbacks.ts",
|
|
"exports": ["*"],
|
|
},
|
|
{
|
|
"file": "packages/studio/src/utils/timelineElementSplit.ts",
|
|
"exports": ["buildPatchTarget", "readFileContent"],
|
|
},
|
|
],
|
|
"ignoreDependencies": [
|
|
// Runtime/dynamic deps not visible to static analysis: tsup `external`,
|
|
// dynamic require() resolution, peer/static-file consumption in tests,
|
|
// and bun-hoisted workspace devDeps (e.g. happy-dom in root package.json
|
|
// resolves for every workspace, so workspaces don't redeclare it).
|
|
// Required by @puppeteer/browsers and puppeteer-core at runtime; listed
|
|
// as a direct dep to guarantee installation even when transitive
|
|
// resolution fails (corrupted cache, dedup edge cases).
|
|
"debug",
|
|
"puppeteer",
|
|
"puppeteer-core",
|
|
"esbuild",
|
|
"giget",
|
|
"gsap",
|
|
"happy-dom",
|
|
"ffmpeg-static",
|
|
"ffprobe-static",
|
|
"@hyperframes/core",
|
|
"@hyperframes/studio",
|
|
"@hyperframes/producer",
|
|
"@fontsource/archivo-black",
|
|
"@fontsource/eb-garamond",
|
|
"@fontsource/ibm-plex-mono",
|
|
"@fontsource/inter",
|
|
"@fontsource/jetbrains-mono",
|
|
"@fontsource/league-gothic",
|
|
"@fontsource/montserrat",
|
|
"@fontsource/nunito",
|
|
"@fontsource/oswald",
|
|
"@fontsource/outfit",
|
|
"@fontsource/space-mono",
|
|
"@fontsource/lato",
|
|
"@fontsource/noto-sans-jp",
|
|
"@fontsource/open-sans",
|
|
"@fontsource/playfair-display",
|
|
"@fontsource/poppins",
|
|
"@fontsource/roboto",
|
|
"@fontsource/source-code-pro",
|
|
],
|
|
}
|