| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(cli): ship occ as an installable command npm run build:cli bundles cli/main.ts into cli-dist/occ.mjs (esbuild, node ESM, node_modules external — the same reasoning as the desktop main build: Remotion, the MCP SDK and ffmpeg-static carry binaries and resolved paths that must stay real files on disk), and package.json declares it as the occ bin so npm link (or an install) puts the CLI on PATH instead of requiring npm run occ --. Also fixes a terminal-hygiene bug the bundle smoke exposed: occ tools ls | head died with an unhandled EPIPE stack trace. stdout now exits quietly when the reader goes away first, like any shell tool. Shared paths touched: package.json gains a script and a bin entry, .gitignore gains cli-dist/, and cli/output.ts adds the EPIPE handler. No app module changes. Verification: the bundled CLI was exercised end to end against a throwaway profile — project new, tools ls, list_templates (235 templates), render --dry-run (h264 / 30 frames / mp4), where — and occ tools ls | head now exits 0; tsc -b, lint (0 warnings), registration and gate coverage pass; cli/cli.verify.ts green. | 1 个月前 | |
Merge pull request #117 from drbelt27/feat/italian-locale-settings # Conflicts: # package.json # server/mobile-upload-service.ts # server/mobile-upload-service.verify.ts # server/plugins/mobile-upload.ts # server/plugins/mobile-upload.verify.ts # src/agent/agent-session.ts # src/agent/systemPrompt.ts # src/agent/systemPromptOrder.verify.ts # src/components/TopBar.tsx # src/components/chat/ChatComposer.tsx # src/components/chat/WorkflowPickerContent.tsx # src/i18n/locale.ts # src/library/SkillsTabPanel.tsx # src/media/mobileUploadApi.ts # src/shortcuts/ShortcutsDialog.tsx | 1 个月前 | |
Clean up old work directories and check the build | 2 个月前 | |
fix(agent): isolate one-click workflow safeguards Use AI SDK per-tool timeout overrides so transcription can run long without weakening unrelated tool deadlines. Resolve only the Remotion-approved local browser cache and verify news rough-cut audio provenance against the initial project sources. | 2 个月前 | |
docs(issue-templates): list v0.2.10–v0.2.14 and pin the newest option to package.json The bug-report version dropdowns stopped at v0.2.9 while releases went on to v0.2.14. Anyone reporting against a current build had to pick an older version or "Not sure", and several recent reports carry a version that cannot be right. #144, for example, says v0.2.9 about a provider that first shipped in v0.2.14, and the #167 reporter called the gap out directly. Both forms now offer v0.2.14 as the latest release. The new scripts/issue-template-version.verify.mjs, wired next to verify-registration in npm test, fails when package.json's version is not the first option of both forms. The next release bump then has to update them in the same change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> | 23 天前 | |
fix: integrate PR 137 with retryable storage and safe exports Merge the current main refactors while preserving the contributor commits. Reset failed IndexedDB connection promises and release cached connections on version change or forced close. Use the project reducer to stage tracks and assets before overwrite planning so placement preserves ordering and one-step undo. Keep export duration based on timeline fps: FFmpeg fps retiming drops or duplicates frames without changing playback duration. Return explicit 400/413 responses for malformed or oversized normalization requests without destroying the response socket. Retain deferred download revocation and portable verify paths from the original PR. Shared-path regression evidence: - TypeScript build with --force and oxlint pass. - Connection recovery, normal/overwrite placement, export parameters, normalization HTTP, shared KV fallback/migration, media persistence, export geometry, and affected-runner verifications pass. - Native Chrome tests cover all three IndexedDB stores: actual VersionError, recovery without reload, and connection release for native version upgrade. - Actual FFmpeg 30-to-24 fps retiming yields the planned 4-second duration. - Real DeepSeek v4-flash runAgent calls submit_export for existing audio and downloads a valid 1132-byte FCPXML document with a successful final reply. - Real /export rendering and submitMediaExport download produce a 192078-byte, 1-second WAV. The Chrome response and downloaded file SHA-256 are identical. Initial renderer startup failed during local resource pressure; two warm attempts succeeded. No paid media generation or user project was involved. Full test and production build gates remain with the aggregate integration. | 1 个月前 | |
fix: preserve offline edits and optimize editor workflows Recover conflicting offline project documents into verified, retry-safe copies without replacing the original project. Harden skill installation and media stream handling, deduplicate loudness work, reuse transcript projections, and load sequence options only when needed. Split oversized source modules while preserving their public exports. Expand affected verification coverage, add a macOS frame-sync CI job, and update vulnerable media dependency overrides. Shared-path impact: - Persistence recovery runs only for pending conflicting documents. Normal saves keep their existing format, media URLs, and ownership rules. Recovery confirms document and index writes before clearing pending state. - Agent and UI loudness paths retain existing volume limits and undo behavior; repeated sources share bounded analysis and stale sources are rejected. - Transcript, caption, preview, export, server, and desktop module moves keep existing call contracts. Differential checks cover projections and stored job reports; media transport checks cover ranges, empty files, and aborts. Validation: - Full TypeScript project build, zero-warning lint, and production build passed. - npm test preflight passed; all 172 test segments passed after registering the new verification files (TEST_CONCURRENCY=2 npm run test --ignore-scripts). - Final persistence changes passed project-store transport and recovery checks, lint, build, and the 561-verification gate coverage check. - npm audit --omit=dev reported zero vulnerabilities. - Real DeepSeek Agent invoked add_audio and normalize_loudness successfully. Browser checks covered import, save/reopen, undo/redo, and offline recovery with the original project and recovered media preserved. - Native macOS frame-sync checks and real FFmpeg media checks passed. The new remote macOS CI job has not yet run. | 1 个月前 | |
fix(scripts): repair run-check bundling; drop dead migration files run-check.mjs exists for a real reason — verify files whose import chain contains Vite-only ?raw / .frag imports cannot run under bare tsx — but it bundled node_modules into a single ESM file, which breaks any package doing a CJS dynamic require at import time. ai → @ai-sdk/gateway → @vercel/oidc does exactly that, so every verify whose graph reached the AI SDK died with 'Dynamic require of "path" is not supported' before running a single assertion. That is not hypothetical: package.json's verify:agent-tools invokes run-check for effect-tools.verify and library-edit-item.verify, and both have been failing in npm test. They cannot run under tsx either (ERR_UNKNOWN_FILE_EXTENSION on the ?raw import), so they were dead either way. With packages: 'external' only our source is bundled and node resolves dependencies itself; the output moved inside the project so bare imports resolve against node_modules. Both verifies now pass. This also explains — and closes — the earlier "pre-existing failures" confusion in this series: sweeping with run-check made healthy verifies look broken. Also: - Deleted src/persist/migrations/v3-to-v4.ts, v4-to-v5.ts, v5-to-v6.ts. They are not registered in the chain (dev versions collapsed back to v3) and nothing in the repo references them — grepped across ts/tsx/ mjs/json/md. They only misled readers into adding steps to a chain that is not wired up. Git retains them if a future v3→v4 needs a starting point. No user data is affected: no shipped document is at version 4-6. - .gitignore covers the run-check temp dir in case a run is interrupted. - trackCreateBatching.verify uses the project's own isHistoryControlAction guard so it type-checks under the full solution build. (The AGENTS.md CURRENT_PROJECT_VERSION path correction — shared/project-version.ts, not src/editor/types.ts — was applied locally; AGENTS.md is gitignored by design.) Verification: tsc -b --force clean; oxlint 0 warnings; both previously broken verifies pass through the repaired runner; migrations.verify and unreadablePreservation.verify still pass after the file removals. | 1 个月前 | |
fix: preserve offline edits and optimize editor workflows Recover conflicting offline project documents into verified, retry-safe copies without replacing the original project. Harden skill installation and media stream handling, deduplicate loudness work, reuse transcript projections, and load sequence options only when needed. Split oversized source modules while preserving their public exports. Expand affected verification coverage, add a macOS frame-sync CI job, and update vulnerable media dependency overrides. Shared-path impact: - Persistence recovery runs only for pending conflicting documents. Normal saves keep their existing format, media URLs, and ownership rules. Recovery confirms document and index writes before clearing pending state. - Agent and UI loudness paths retain existing volume limits and undo behavior; repeated sources share bounded analysis and stale sources are rejected. - Transcript, caption, preview, export, server, and desktop module moves keep existing call contracts. Differential checks cover projections and stored job reports; media transport checks cover ranges, empty files, and aborts. Validation: - Full TypeScript project build, zero-warning lint, and production build passed. - npm test preflight passed; all 172 test segments passed after registering the new verification files (TEST_CONCURRENCY=2 npm run test --ignore-scripts). - Final persistence changes passed project-store transport and recovery checks, lint, build, and the 561-verification gate coverage check. - npm audit --omit=dev reported zero vulnerabilities. - Real DeepSeek Agent invoked add_audio and normalize_loudness successfully. Browser checks covered import, save/reopen, undo/redo, and offline recovery with the original project and recovered media preserved. - Native macOS frame-sync checks and real FFmpeg media checks passed. The new remote macOS CI job has not yet run. | 1 个月前 | |
fix(desktop): let the Windows build pass the shader-twin check The desktop workflow's Windows package job failed in prebuild: node scripts/sync-shader-sources.mjs --check called all 67 generated .frag.ts twins stale. On the Windows runner, relative() writes each twin's header path with backslashes, and Git for Windows' default core.autocrlf checks every shader and twin out with CRLF. The check compared bytes, so nothing matched the LF, "/"-joined twins committed from macOS. It joined prebuild on 2026-09-17 (ad388154), after the last desktop build, so no Windows installer has built since. The script now generates and compares the LF, "/"-joined form, as the server tool catalog check already does (3c2d33a8). On macOS and Linux it produces the same twins as before (0 of 67 rewritten). Tests: - scripts/shader-sources.verify.mjs rebuilds a CRLF checkout in a temp tree: current twins must pass, and an edited shader must still read as stale. It fails with the old script and passes now. - A real core.autocrlf=true clone fails the check with the old script and passes with the new one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> | 21 天前 | |
fix: harden visual geometry integration | 2 个月前 | |
fix(desktop): let the Windows build pass the shader-twin check The desktop workflow's Windows package job failed in prebuild: node scripts/sync-shader-sources.mjs --check called all 67 generated .frag.ts twins stale. On the Windows runner, relative() writes each twin's header path with backslashes, and Git for Windows' default core.autocrlf checks every shader and twin out with CRLF. The check compared bytes, so nothing matched the LF, "/"-joined twins committed from macOS. It joined prebuild on 2026-09-17 (ad388154), after the last desktop build, so no Windows installer has built since. The script now generates and compares the LF, "/"-joined form, as the server tool catalog check already does (3c2d33a8). On macOS and Linux it produces the same twins as before (0 of 67 rewritten). Tests: - scripts/shader-sources.verify.mjs rebuilds a CRLF checkout in a temp tree: current twins must pass, and an edited shader must still read as stale. It fails with the old script and passes now. - A real core.autocrlf=true clone fails the check with the old script and passes with the new one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> | 21 天前 | |
fix(whisper): extract the Windows release zip without unzip npm run dev and npm run build on Windows stop in predev/prebuild with [whisper-cli] spawn unzip ENOENT extractArchive handed every .zip to unzip, which Windows does not ship. CI never saw it: the windows-latest job runs the script from Git Bash, whose /usr/bin carries an unzip. A contributor in PowerShell or cmd has none. On win32, extract with System32's tar.exe (bsdtar, which reads zip archives and is in-box since Windows 10 1803). It is named by absolute path so a GNU tar earlier on PATH, such as Git Bash's, cannot shadow it — GNU tar cannot read zip. Where tar.exe is absent, fall back to PowerShell's Expand-Archive. macOS and Linux keep unzip / tar -xzf unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> | 2 天前 | |
fix(whisper): verify the provisioned CLI instead of trusting existsSync Provisioning had no integrity gate at all, despite the file header claiming release assets were "verified by size + sha256 recorded at first fetch": - The download was skipped whenever any file existed at the target path, so a 17-byte placeholder, a truncated download, or a replaced binary counted as "already provisioned" forever. - The <binary>.sha256 sidecar was computed from whatever bytes were on disk, so bad bytes certified themselves. - Nothing in the repository ever read that sidecar. - The release path never chmod'd the extracted binary. Changes: - Pin size and sha256 for the three official release assets, taken from the GitHub release API digest field for the tag, with the regeneration command recorded next to them. fetchArchive now returns bytes and archiveProblem rejects them before anything is written to disk. - Replace the <binary>.sha256 sidecar with <binary>.provenance.json holding the upstream version, the pinned archive digest the binary came from, and the binary's own digest. The provisioning path is its reader. - Reuse an existing binary only when the record still matches the pinned version and archive digest, the file clears a 64KB floor, carries the executable bit, still hashes to the recorded digest, and --help actually runs (exit 0, output containing a usage banner). A missing shared library exits non-zero and a placeholder that merely exits 0 prints nothing, so both are rejected. - Adopt a working but unrecorded binary on the source-build platforms rather than forcing a whisper.cpp compile on every machine that already has one; adoption is still gated on size, the executable bit and the probe. - Delete the binary and its record when post-provisioning verification fails, so the next run sees an empty slot instead of certified-bad bytes. - chmod 0o755 the extracted release binary on POSIX, and drop the unused platformKey parameter of buildFromSource. Shared paths touched and evidence they stay intact: - predev / prebuild / the Windows and Linux whisper CI workflows all invoke this script. On this machine, which had a real binary and only the legacy sidecar, the script adopted it ("it runs; no provenance existed") and the recorded digest matches shasum -a 256 of the bytes; the next run reports "verified". No developer is pushed into a recompile. - npm run build exercises the prebuild hook: it logged "darwin-arm64 verified" and the build exited 0. - The pinned values were each re-validated by downloading the real asset: whisper-bin-x64.zip 8194445 / 49dcc16d...674a, whisper-bin-ubuntu-x64.tar.gz 9497583 / 46811a3e...53b1, whisper-bin-ubuntu-arm64.tar.gz 4572842 / 7e26fa6a...2719. archiveProblem accepts the real archive and rejects it one byte short, and the real tarball still flattens to whisper-cli with its 26 shared objects beside it. - The historical failure mode now fails loudly: provisioning from a 17-byte "#!/bin/sh; exit 0" placeholder exits 1 with "binary is only 17 bytes (minimum 65536)" and removes both the binary and the record; re-provisioning from the real binary recovers. Verification: the extended verify covers the archive gate, the probe semantics, every trust decision, the adoption rules, and that a VERSION bump cannot leave a release platform without pins. npm test passes 178/179 segments; the single failure is pre-existing on main and untouched here (verify-gate-coverage flags server/keystore.ts at 502 lines). Also removed the local 17-byte public/whisper-cli/linux-x64 placeholder: it is gitignored, but public/** is copied into packages, so a cross-platform build could have shipped it. | 1 个月前 | |
feat(agent): add Requesty to the model capabilities catalog Map requesty to the models.dev requesty provider in update-llm-model-capabilities.mjs and add its 159 entries to models-dev.json, the same way the openrouter catalog is wired. The entries are the Requesty managed model ids, so context window, output limit, tool and image support resolve from the catalog instead of the unknown-model fallback (which disables tools). The JSON change is additive only: the requesty block is produced with the script's own normalizeModel and appended after xai, no other provider was regenerated. | 25 天前 | |
fix(scripts): make the two verify gates run on Windows Both gates were dead on Windows, in a way that looked like a pass or an avalanche of false positives rather than a broken check. verify-registration used new URL('..', import.meta.url).pathname, which on Windows is "/D:/repo" — not a usable cwd. spawnSync died with ENOENT before the check asserted anything. verify-gate-coverage compared walked paths against the names in package.json, but relative() returns "server\plugins\x.verify.ts" on Windows while package.json says "server/plugins/x.verify.ts". Every one of the 480+ files on disk looked like an orphan. Normalized with split(sep).join('/') rather than a "\\" replace, since a backslash is a legal character in a POSIX filename. Both now run: registration reports all 576 tracked verifies registered, and gate-coverage gets past the orphan scan to its later assertions. | 1 个月前 | |
fix(scripts): make the two verify gates run on Windows Both gates were dead on Windows, in a way that looked like a pass or an avalanche of false positives rather than a broken check. verify-registration used new URL('..', import.meta.url).pathname, which on Windows is "/D:/repo" — not a usable cwd. spawnSync died with ENOENT before the check asserted anything. verify-gate-coverage compared walked paths against the names in package.json, but relative() returns "server\plugins\x.verify.ts" on Windows while package.json says "server/plugins/x.verify.ts". Every one of the 480+ files on disk looked like an orphan. Normalized with split(sep).join('/') rather than a "\\" replace, since a backslash is a legal character in a POSIX filename. Both now run: registration reports all 576 tracked verifies registered, and gate-coverage gets past the orphan scan to its later assertions. | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 23 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 21 天前 | ||
| 2 个月前 | ||
| 21 天前 | ||
| 2 天前 | ||
| 1 个月前 | ||
| 25 天前 | ||
| 1 个月前 | ||
| 1 个月前 |