semantic-release-bot
c6baf6018d
chore(release): 2.1.0 [skip ci]
...
# [2.1.0](https://github.com/snapotter-hq/snapotter/compare/v2.0.0...v2.1.0 ) (2026-07-10)
### Bug Fixes
* **demo:** boot to dashboard, sample-data notice, robust mobile editor icon ([#464 ](https://github.com/snapotter-hq/snapotter/issues/464 )) ([a94b69b ](https://github.com/snapotter-hq/snapotter/commit/a94b69b14f783c07abfe757e21314f580fbda556 ))
* **demo:** point banner "Self-host SnapOtter" link at the docs guide ([#466 ](https://github.com/snapotter-hq/snapotter/issues/466 )) ([463ccff ](https://github.com/snapotter-hq/snapotter/commit/463ccff5cb91c4b2d0f2c7309ea77789544ad2c3 ))
* **demo:** populate admin data, fix settings crash and mobile editor icon ([#463 ](https://github.com/snapotter-hq/snapotter/issues/463 )) ([7329bc6 ](https://github.com/snapotter-hq/snapotter/commit/7329bc6a1334b925cf95384d6ddc172f04a86610 ))
* error-only Sentry telemetry, storm-proof capture, and crash fixes ([#476 ](https://github.com/snapotter-hq/snapotter/issues/476 )) ([ae6a4c8 ](https://github.com/snapotter-hq/snapotter/commit/ae6a4c8b7c9275ccd8930251d429181568f83453 ))
* **landing:** clarify OIDC is free, SAML is enterprise on pricing ([#461 ](https://github.com/snapotter-hq/snapotter/issues/461 )) ([c2c9a9e ](https://github.com/snapotter-hq/snapotter/commit/c2c9a9ed9bea9c66efec84b9e0b9b2ebbf863073 ))
* **landing:** fix top nav overflow and text overlap ([#473 ](https://github.com/snapotter-hq/snapotter/issues/473 )) ([ffeacd4 ](https://github.com/snapotter-hq/snapotter/commit/ffeacd4b3c7b5858d9048c2521569256e3569490 ))
* **landing:** green the landing e2e suite ([#470 ](https://github.com/snapotter-hq/snapotter/issues/470 )) ([10ae6d1 ](https://github.com/snapotter-hq/snapotter/commit/10ae6d1d3d6ce8a527937bfa31e76ba392bc09e0 ))
* **landing:** highlight Open Source as Most Popular tier ([#462 ](https://github.com/snapotter-hq/snapotter/issues/462 )) ([e468cef ](https://github.com/snapotter-hq/snapotter/commit/e468cef6c0e28b4736dee32d2cf8c2ab1968a59c ))
* **landing:** reposition residual meta framing and demote homepage tool count ([#471 ](https://github.com/snapotter-hq/snapotter/issues/471 )) ([958c3e8 ](https://github.com/snapotter-hq/snapotter/commit/958c3e8513eb3a4c3be7488894981fc8794b1c5f ))
* reliable, self-healing AI feature-bundle installs ([#472 ](https://github.com/snapotter-hq/snapotter/issues/472 )) ([a731c3d ](https://github.com/snapotter-hq/snapotter/commit/a731c3d1fe8303296e90cd138a01e903df871bb7 ))
* restyle sponsor button ([37a3cfc ](https://github.com/snapotter-hq/snapotter/commit/37a3cfc84477c10831f9ae61f183f4ab4ef45d50 ))
* reword sponsor button to "Support us" ([#468 ](https://github.com/snapotter-hq/snapotter/issues/468 )) ([331e3bf ](https://github.com/snapotter-hq/snapotter/commit/331e3bfde04035151612275d9ae269909fed87a8 ))
* update python protobuf dependency ([780624e ](https://github.com/snapotter-hq/snapotter/commit/780624e168cfda5abf3b2501455fe62674550fcf ))
### Features
* **demo:** populate the Files library with sample files ([#465 ](https://github.com/snapotter-hq/snapotter/issues/465 )) ([a6e8f75 ](https://github.com/snapotter-hq/snapotter/commit/a6e8f75074e38b8e5d856311d4423e8a936ae690 ))
* **landing:** add dismissible 2.0 launch banner ([ea7a671 ](https://github.com/snapotter-hq/snapotter/commit/ea7a671ccf29bcbab7a94c28efcbf6e1b9506b34 ))
* **landing:** add Product dropdown to nav ([#475 ](https://github.com/snapotter-hq/snapotter/issues/475 )) ([3d1744a ](https://github.com/snapotter-hq/snapotter/commit/3d1744aec84049f1f296f1cce8f6fb726cf7f835 ))
* **landing:** restore Developers nav link, swap out Features anchor ([#474 ](https://github.com/snapotter-hq/snapotter/issues/474 )) ([a08afbc ](https://github.com/snapotter-hq/snapotter/commit/a08afbc80afefb11cbc13e629d31225a6dceda2f ))
* reposition to self-hosted file-processing infrastructure ([#469 ](https://github.com/snapotter-hq/snapotter/issues/469 )) ([af011d5 ](https://github.com/snapotter-hq/snapotter/commit/af011d55381f8b57797984b1c5b2ca974a033d1c ))
2026-07-10 13:55:46 +00:00
SnapOtter
d019217969
chore(deps): bump the production-deps group
2026-07-06 18:39:27 +08:00
SnapOtter and GitHub
b4375e558d
fix: harden install queue/dispatcher lifecycle and repair review-sweep regressions ( #395 )
...
Fixes 15 defects found by a max-effort multi-agent review of the last 6
merged PRs (#388 , #390 , #391 , #392 , #393 , #394 ), all adversarially
verified before fixing.
Install queue + dispatcher (the serious cluster):
- features.ts: finalize the installer child exactly once. A failed spawn
fires both "error" and "close", and the second event released the file
lock and active slot that pump() had just handed to the next queued
bundle, letting two pip processes write the same venv concurrently.
Outcome recording now happens before pump() so the next bundle's first
progress frame cannot race the previous install's bookkeeping.
- feature-status.ts: keep failed-install errors in a per-bundle map
instead of the single progress slot. With the queue auto-starting the
next install, the slot was overwritten within seconds and a failed
install vanished without ever surfacing to GET /features.
- bridge.ts: scope child lifecycle per process (stopped-children set +
request generation tags) instead of an instance-wide shuttingDown flag
that the next spawn reset. A stale SIGTERMed child's late close event
could record a phantom crash (5 of which permanently disable the
dispatcher), null out the freshly spawned child, and reject the new
child's pending requests. The request-timeout kill path still counts
as a real crash.
- install_feature.py: the pre-write disk re-check measured ai_dir's
filesystem even when budgeting the cross-filesystem copy that lands on
the venv's disk; now each budget is checked against the filesystem the
bytes actually land on, so ENOSPC cannot strike mid-write and leave
site-packages half overwritten.
Behavior regressions:
- embed-subtitles: preserve pre-existing subtitle tracks (0:s?) and MKV
attachments (0:t?) that the -map 0:v:0/0:a? rewrite silently dropped;
data streams stay unmapped on purpose (the actual MPEG remux fix). The
new subtitle maps first so the language tag hits the right stream.
- usage-survey-overlay: fail closed when the settings fetch fails; the
fail-open path rendered the blocking survey against an unhealthy API
and soft-locked admins, the lock-out class #392 fixed.
- features-store: queued bundles poll instead of each holding an SSE
connection (Install All could pin 7 EventSources and exhaust the
browser's 6-per-origin HTTP/1.1 limit, hanging the whole app);
listenToProgress closes any prior stream and stops any poll before
subscribing; installAll skips bundles already installing or queued.
Contracts, tests, i18n:
- openapi.yaml: add "queued" to the features status enum and document
downloadBytes/installedBytes (Schemathesis conformance).
- feature-lifecycle e2e: queue transcription (~0.5 GB) instead of ocr
(~6 GB) and give the test a budget that covers both install drains
(the stacked waits exceeded the old 900s timeout).
- docker-compose.qa.yml: parameterize the host port (QA_APP_PORT) so
QA_PROJECT_NAME concurrent stacks can actually bind.
- compare + watermark-image: restore per-input error attribution
("Invalid first/second image", "Invalid watermark image") lost in the
shared-handler migration.
- ai-features-section: the "{size} on disk" suffix now goes through
i18n; key added to all 21 locales.
- watermark-image + content-aware-resize: migrate to the shared
inputHandlerFor("image") chain like compare/vectorize/compose, fixing
drift in the inline copies (no SVG sanitize, no RAW extension hint,
no AVIF probe).
Verified: typecheck across 9 workspaces, Biome clean on all changed
files, 584 targeted unit tests and 249 integration tests green
(including real-ffmpeg embed-subtitles runs). One unit test updated to
the new poll-while-queued contract with a single-EventSource assertion.
Claude-Session: https://claude.ai/code/session_017mR1HiHaf3a1BmUtrHX4j3
2026-07-03 13:47:15 +08:00
SnapOtter and GitHub
bd1838e40b
fix: repair docker validation QA tooling, dispatcher crash-accounting, and image-enhancement RAW hang ( #391 )
...
Found and fixed during a full local Docker build validation (amd64/arm64, all
four fleet targets, AI bundle installs, QA harness) and the follow-up bug
sweep requested afterward. None of the affected scripts run in CI, so these
had been silently broken indefinitely.
- docker/feature-manifest.json: pythonVersion was a flat "3.11", but the
amd64 base (Ubuntu 24.04) ships Python 3.12 while arm64 (Debian bookworm)
ships 3.11. Changed to a per-arch object matching the file's existing
convention.
- tests/qa/api-sweep.mts and verify-ai.mts: bare "@snapotter/shared" import
can't resolve since tests/ is not a pnpm workspace member, making both
silently unrunnable via their own documented command on any fresh
checkout. Switched to a relative import.
- tests/qa/generate-ledger.mts: wrote to docs/qa/ without creating the
directory first; docs/ is gitignored except COMMUNITY_GUIDE.md, so a fresh
checkout threw ENOENT.
- Seven QA Playwright spec files (input-preview, settings,
settings-extended, multifile, output-preview, pipeline-ui, smoke) had
~115 fixture() calls using directory names that don't exist. Resolved
every call programmatically against the real fixture tree.
- packages/ai/src/bridge.ts: AI dispatcher restart (happens on every bundle
install) was falsely counted as a crash, risking permanent dispatcher
disable after enough legitimate restarts within the crash window. Added a
shuttingDown flag checked at all three recordCrash() call sites.
- packages/image-engine/src/operations/auto-enhance.ts: image-enhancement
hung 40+ seconds on large RAW photos (confirmed on a real 20.2MP file) in
Sharp's .clahe() step, whose cost scales with total pixel count regardless
of tile size. Added a 16-megapixel cap above which CLAHE is skipped;
verified against the real file (40+s -> 2.0s) with no regression to other
RAW formats or normal-sized images. Fixing this surfaced a second,
smaller bug where the saturation step's CLAHE compensation boost was
keyed off the raw toggle instead of whether CLAHE actually ran.
- Two QA-harness robustness gaps closed per "fix everything, even the small
bugs": the passport-photo/erase-object input-preview tests now skip
cleanly with a clear reason on a container without their AI bundle
installed, and docker-compose.qa.yml's hardcoded project/container name
(the actual root cause of a mid-validation container swap between two
concurrent sessions) is now parameterized via QA_PROJECT_NAME.
Full validation report is local-only per repo convention.
2026-07-02 14:21:13 +08:00
Matt Van Horn and GitHub
9052da27f3
fix: adopt sharp 0.35.2+ by centralizing the FormatEnum key type ( #362 )
...
Centralizes the sharp format key type into a single `SharpFormat` alias derived from `toFormat()`'s signature (exported from @snapotter/image-engine, imported by the API consumers), replacing the duplicated `keyof FormatEnum` definitions. Adds convert/compress format round-trip tests covering webp/avif/png/jpeg. Part of #325 .
2026-07-01 21:50:29 +08:00
SnapOtter
2137be479e
fix(image-engine): support sharp 0.35 types
2026-06-29 16:04:17 +08:00
dependabot[bot] and GitHub
af7cd77e84
chore(deps): bump the production-deps group with 16 updates
...
Bumps the production-deps group with 16 updates:
| Package | From | To |
| --- | --- | --- |
| [@scalar/fastify-api-reference](https://github.com/scalar/scalar/tree/HEAD/integrations/fastify ) | `1.60.0` | `1.62.0` |
| [@sentry/node](https://github.com/getsentry/sentry-javascript ) | `10.59.0` | `10.62.0` |
| [bullmq](https://github.com/taskforcesh/bullmq ) | `5.79.1` | `5.79.2` |
| [fastify](https://github.com/fastify/fastify ) | `5.8.5` | `5.9.0` |
| [js-yaml](https://github.com/nodeca/js-yaml ) | `4.2.0` | `4.3.0` |
| [playwright](https://github.com/microsoft/playwright ) | `1.61.0` | `1.61.1` |
| [posthog-node](https://github.com/PostHog/posthog-js/tree/HEAD/packages/node ) | `5.38.2` | `5.38.6` |
| [sharp](https://github.com/lovell/sharp ) | `0.35.1` | `0.35.2` |
| [tar](https://github.com/isaacs/node-tar ) | `7.5.16` | `7.5.19` |
| [lucide](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide ) | `1.21.0` | `1.22.0` |
| [@sentry/react](https://github.com/getsentry/sentry-javascript ) | `10.59.0` | `10.62.0` |
| [pdfjs-dist](https://github.com/mozilla/pdf.js ) | `6.0.227` | `6.1.200` |
| [posthog-js](https://github.com/PostHog/posthog-js ) | `1.391.9` | `1.395.0` |
| [react-hotkeys-hook](https://github.com/JohannesKlauss/react-keymap-hook ) | `5.3.2` | `5.3.3` |
| [@aws-sdk/client-s3](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3 ) | `3.1073.0` | `3.1075.0` |
| [@aws-sdk/lib-storage](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/lib/lib-storage ) | `3.1073.0` | `3.1075.0` |
Updates `@scalar/fastify-api-reference` from 1.60.0 to 1.62.0
- [Release notes](https://github.com/scalar/scalar/releases )
- [Changelog](https://github.com/scalar/scalar/blob/main/integrations/fastify/CHANGELOG.md )
- [Commits](https://github.com/scalar/scalar/commits/HEAD/integrations/fastify )
Updates `@sentry/node` from 10.59.0 to 10.62.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases )
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md )
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.59.0...10.62.0 )
Updates `bullmq` from 5.79.1 to 5.79.2
- [Release notes](https://github.com/taskforcesh/bullmq/releases )
- [Commits](https://github.com/taskforcesh/bullmq/compare/v5.79.1...v5.79.2 )
Updates `fastify` from 5.8.5 to 5.9.0
- [Release notes](https://github.com/fastify/fastify/releases )
- [Commits](https://github.com/fastify/fastify/compare/v5.8.5...v5.9.0 )
Updates `js-yaml` from 4.2.0 to 4.3.0
- [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.0/CHANGELOG.md )
- [Commits](https://github.com/nodeca/js-yaml/compare/4.2.0...4.3.0 )
Updates `playwright` from 1.61.0 to 1.61.1
- [Release notes](https://github.com/microsoft/playwright/releases )
- [Commits](https://github.com/microsoft/playwright/compare/v1.61.0...v1.61.1 )
Updates `posthog-node` from 5.38.2 to 5.38.6
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/packages/node/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/commits/posthog-node@5.38.6/packages/node )
Updates `sharp` from 0.35.1 to 0.35.2
- [Release notes](https://github.com/lovell/sharp/releases )
- [Commits](https://github.com/lovell/sharp/compare/v0.35.1...v0.35.2 )
Updates `tar` from 7.5.16 to 7.5.19
- [Release notes](https://github.com/isaacs/node-tar/releases )
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md )
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.16...v7.5.19 )
Updates `lucide` from 1.21.0 to 1.22.0
- [Release notes](https://github.com/lucide-icons/lucide/releases )
- [Commits](https://github.com/lucide-icons/lucide/commits/1.22.0/packages/lucide )
Updates `@sentry/react` from 10.59.0 to 10.62.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases )
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md )
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.59.0...10.62.0 )
Updates `pdfjs-dist` from 6.0.227 to 6.1.200
- [Release notes](https://github.com/mozilla/pdf.js/releases )
- [Commits](https://github.com/mozilla/pdf.js/compare/v6.0.227...v6.1.200 )
Updates `posthog-js` from 1.391.9 to 1.395.0
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.391.9...posthog-js@1.395.0 )
Updates `react-hotkeys-hook` from 5.3.2 to 5.3.3
- [Release notes](https://github.com/JohannesKlauss/react-keymap-hook/releases )
- [Changelog](https://github.com/JohannesKlauss/react-hotkeys-hook/blob/main/CHANGELOG.md )
- [Commits](https://github.com/JohannesKlauss/react-keymap-hook/compare/v.5.3.2...v5.3.3 )
Updates `@aws-sdk/client-s3` from 3.1073.0 to 3.1075.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases )
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-s3/CHANGELOG.md )
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1075.0/clients/client-s3 )
Updates `@aws-sdk/lib-storage` from 3.1073.0 to 3.1075.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases )
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/lib/lib-storage/CHANGELOG.md )
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1075.0/lib/lib-storage )
---
updated-dependencies:
- dependency-name: "@scalar/fastify-api-reference"
dependency-version: 1.62.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@sentry/node"
dependency-version: 10.62.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: bullmq
dependency-version: 5.79.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: fastify
dependency-version: 5.9.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: js-yaml
dependency-version: 4.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: playwright
dependency-version: 1.61.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: posthog-node
dependency-version: 5.38.6
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: sharp
dependency-version: 0.35.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: tar
dependency-version: 7.5.19
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: lucide
dependency-version: 1.22.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@sentry/react"
dependency-version: 10.62.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: pdfjs-dist
dependency-version: 6.1.200
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: posthog-js
dependency-version: 1.395.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: react-hotkeys-hook
dependency-version: 5.3.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: "@aws-sdk/client-s3"
dependency-version: 3.1075.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@aws-sdk/lib-storage"
dependency-version: 3.1075.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-06-29 05:44:44 +00:00
SnapOtter
bdadb843d8
fix(security): close remaining high-severity CodeQL alerts
...
- svg-sanitize.ts: strip each dangerous element repeatedly until stable with
whitespace-tolerant end tags, defeating nested/overlapping tags (closes 5
incomplete-multi-character-sanitization + 1 bad-tag-filter; the prior
single-pass regex could leave a residual <script>/<iframe>).
- file-preview.ts: add a resolve()+containment barrier (the path-traversal
guard CodeQL recognizes) on top of the id charset check (closes 9
path-injection).
- metadata.ts: bound the XMP namespace:name key segments so parseXmp cannot
backtrack polynomially (closes js/polynomial-redos).
- analytics-disabled.spec.ts: match analytics by URL host, not substring
(closes 4 incomplete-url-substring-sanitization).
typecheck + lint green; svg (119), preview (22), metadata (164) tests pass.
2026-06-21 13:47:22 +08:00
SnapOtter
620552569e
feat!: SnapOtter 2.0.0
...
Bump all workspace package versions and APP_VERSION to 2.0.0, marking the
official 2.0 release. Removes the stale 1.x .release-notes.md artifact
(semantic-release regenerates release notes). The 2.0/multimodality docs
and rebrand already landed on main via #254 and #261 , so this carries only
the version designation forward from the rebrand branch.
BREAKING CHANGE: SnapOtter 2.0 - the platform re-architecture (Postgres 17 +
Redis 8 + BullMQ durable jobs, 157 tools across five modalities) is the 2.0
release line, replacing the 1.x SQLite single-container architecture.
2026-06-17 14:33:09 +08:00
SnapOtter
b76dc68682
fix: resolve Sharp 0.35.1 and BullMQ type incompatibilities after dep bumps
...
Sharp 0.35.1 moved FormatEnum to a namespace export and removed "avif"
from FormatEnum (now a separate literal in toFormat). BullMQ 5.78.1
bundles ioredis 5.10.1 while we have 5.11.1, causing structural type
mismatch. Also fixes new Biome 1.9 lint rules.
2026-06-15 15:20:16 +08:00
784f7a28cd
chore(deps): bump the production-deps group with 15 updates ( #237 )
...
Bumps the production-deps group with 15 updates:
| Package | From | To |
| --- | --- | --- |
| [@scalar/fastify-api-reference](https://github.com/scalar/scalar/tree/HEAD/integrations/fastify ) | `1.58.0` | `1.59.3` |
| [@sentry/node](https://github.com/getsentry/sentry-javascript ) | `10.56.0` | `10.57.0` |
| [bullmq](https://github.com/taskforcesh/bullmq ) | `5.78.0` | `5.78.1` |
| [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser ) | `5.8.0` | `5.9.0` |
| [ioredis](https://github.com/luin/ioredis ) | `5.10.1` | `5.11.1` |
| [pdfkit](https://github.com/foliojs/pdfkit ) | `0.18.0` | `0.19.1` |
| [posthog-node](https://github.com/PostHog/posthog-js/tree/HEAD/packages/node ) | `5.35.14` | `5.37.0` |
| [sharp](https://github.com/lovell/sharp ) | `0.34.5` | `0.35.1` |
| [@sentry/react](https://github.com/getsentry/sentry-javascript ) | `10.56.0` | `10.57.0` |
| [posthog-js](https://github.com/PostHog/posthog-js ) | `1.379.2` | `1.386.6` |
| [react-colorful](https://github.com/omgovich/react-colorful ) | `5.6.1` | `5.7.0` |
| [react-konva](https://github.com/konvajs/react-konva ) | `19.2.3` | `19.2.5` |
| [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom ) | `7.16.0` | `7.17.0` |
| [@aws-sdk/client-s3](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3 ) | `3.1066.0` | `3.1068.0` |
| [@aws-sdk/lib-storage](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/lib/lib-storage ) | `3.1066.0` | `3.1068.0` |
Updates `@scalar/fastify-api-reference` from 1.58.0 to 1.59.3
- [Release notes](https://github.com/scalar/scalar/releases )
- [Changelog](https://github.com/scalar/scalar/blob/main/integrations/fastify/CHANGELOG.md )
- [Commits](https://github.com/scalar/scalar/commits/HEAD/integrations/fastify )
Updates `@sentry/node` from 10.56.0 to 10.57.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases )
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md )
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.56.0...10.57.0 )
Updates `bullmq` from 5.78.0 to 5.78.1
- [Release notes](https://github.com/taskforcesh/bullmq/releases )
- [Commits](https://github.com/taskforcesh/bullmq/compare/v5.78.0...v5.78.1 )
Updates `fast-xml-parser` from 5.8.0 to 5.9.0
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases )
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md )
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.8.0...v5.9.0 )
Updates `ioredis` from 5.10.1 to 5.11.1
- [Release notes](https://github.com/luin/ioredis/releases )
- [Changelog](https://github.com/redis/ioredis/blob/main/CHANGELOG.md )
- [Commits](https://github.com/luin/ioredis/compare/v5.10.1...v5.11.1 )
Updates `pdfkit` from 0.18.0 to 0.19.1
- [Release notes](https://github.com/foliojs/pdfkit/releases )
- [Changelog](https://github.com/foliojs/pdfkit/blob/master/CHANGELOG.md )
- [Commits](https://github.com/foliojs/pdfkit/compare/v0.18.0...v0.19.1 )
Updates `posthog-node` from 5.35.14 to 5.37.0
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/packages/node/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/commits/posthog-node@5.37.0/packages/node )
Updates `sharp` from 0.34.5 to 0.35.1
- [Release notes](https://github.com/lovell/sharp/releases )
- [Commits](https://github.com/lovell/sharp/compare/v0.34.5...v0.35.1 )
Updates `@sentry/react` from 10.56.0 to 10.57.0
- [Release notes](https://github.com/getsentry/sentry-javascript/releases )
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md )
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.56.0...10.57.0 )
Updates `posthog-js` from 1.379.2 to 1.386.6
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.379.2...posthog-js@1.386.6 )
Updates `react-colorful` from 5.6.1 to 5.7.0
- [Release notes](https://github.com/omgovich/react-colorful/releases )
- [Changelog](https://github.com/omgovich/react-colorful/blob/master/CHANGELOG.md )
- [Commits](https://github.com/omgovich/react-colorful/commits/5.7.0 )
Updates `react-konva` from 19.2.3 to 19.2.5
- [Release notes](https://github.com/konvajs/react-konva/releases )
- [Commits](https://github.com/konvajs/react-konva/commits )
Updates `react-router-dom` from 7.16.0 to 7.17.0
- [Release notes](https://github.com/remix-run/react-router/releases )
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md )
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.17.0/packages/react-router-dom )
Updates `@aws-sdk/client-s3` from 3.1066.0 to 3.1068.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases )
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-s3/CHANGELOG.md )
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1068.0/clients/client-s3 )
Updates `@aws-sdk/lib-storage` from 3.1066.0 to 3.1068.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases )
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/lib/lib-storage/CHANGELOG.md )
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1068.0/lib/lib-storage )
---
updated-dependencies:
- dependency-name: "@scalar/fastify-api-reference"
dependency-version: 1.59.3
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@sentry/node"
dependency-version: 10.57.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: bullmq
dependency-version: 5.78.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: fast-xml-parser
dependency-version: 5.9.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: ioredis
dependency-version: 5.11.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: pdfkit
dependency-version: 0.19.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: posthog-node
dependency-version: 5.37.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: sharp
dependency-version: 0.35.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@sentry/react"
dependency-version: 10.57.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: posthog-js
dependency-version: 1.386.6
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: react-colorful
dependency-version: 5.7.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: react-konva
dependency-version: 19.2.5
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: react-router-dom
dependency-version: 7.17.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@aws-sdk/client-s3"
dependency-version: 3.1068.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@aws-sdk/lib-storage"
dependency-version: 3.1068.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-15 15:02:25 +08:00
SnapOtter and GitHub
4ec39c556f
test: testing overhaul -- CI e2e gates, parallel suites, generated matrices, mutation testing ( #215 )
...
Closes the "e2e never runs in CI" hole. Adds per-PR e2e smoke gate,
nightly full-suite workflows, parallel vitest forks (per-fork DBs),
Playwright parallel/serial/visual projects against production builds,
metadata-generated test suites (drift guards, hostile inputs, format
matrix, pairwise settings, property-based fuzz), Stryker mutation
testing, Schemathesis API fuzz, coverage ratchet, and fixes for three
session-poisoning bugs that caused 200+ serial-bucket failures.
Bug fix included: favicon/split/bulk-rename could hang clients forever
when ZIP streaming failed after reply.hijack().
2026-06-10 22:01:13 +08:00
SnapOtter and GitHub
73b259462a
fix: resolve 7 bugs from QA sweep ( #208 )
...
- Fix selective metadata stripping (P1): use Sharp's keepExif()/keepIccProfile()
instead of broken withMetadata({}) that preserved everything
- Fix meme font mapping (P1): add ArchivoBlack and ComicNeue fonts, map
arial-black and comic-sans to correct TTF files instead of Anton
- Fix meme contentType (P2): detect actual output format from Sharp metadata
instead of hardcoding image/png
- Fix info/text-overlay/color-palette i18n (P2): wire up existing translation
keys that were imported but never used
- Fix info and color-palette displayMode (P2): change from before-after to
no-comparison since neither tool produces a processed image
- Add missing i18n keys across all 21 locales
- Update displayMode test assertions
2026-06-07 18:27:09 +08:00
1616ad1a5a
chore(deps-dev): bump dev-deps group + fix vitest 3.2.6 mock resolution ( #197 )
...
* chore(deps-dev): bump the dev-deps group across 1 directory with 7 updates
Bumps the dev-deps group with 7 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome ) | `2.4.15` | `2.4.16` |
| [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8 ) | `3.2.4` | `3.2.6` |
| [turbo](https://github.com/vercel/turborepo ) | `2.9.14` | `2.9.16` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest ) | `3.2.4` | `3.2.6` |
| [@types/opentype.js](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/opentype.js ) | `1.3.9` | `1.3.10` |
| [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite ) | `6.4.2` | `6.4.3` |
| [vitepress-plugin-llms](https://github.com/okineadev/vitepress-plugin-llms ) | `1.12.2` | `1.13.1` |
Updates `@biomejs/biome` from 2.4.15 to 2.4.16
- [Release notes](https://github.com/biomejs/biome/releases )
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md )
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.4.16/packages/@biomejs/biome )
Updates `@vitest/coverage-v8` from 3.2.4 to 3.2.6
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.2.6/packages/coverage-v8 )
Updates `turbo` from 2.9.14 to 2.9.16
- [Release notes](https://github.com/vercel/turborepo/releases )
- [Changelog](https://github.com/vercel/turborepo/blob/main/RELEASE.md )
- [Commits](https://github.com/vercel/turborepo/compare/v2.9.14...v2.9.16 )
Updates `vitest` from 3.2.4 to 3.2.6
- [Release notes](https://github.com/vitest-dev/vitest/releases )
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md )
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.2.6/packages/vitest )
Updates `@types/opentype.js` from 1.3.9 to 1.3.10
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases )
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/opentype.js )
Updates `vite` from 6.4.2 to 6.4.3
- [Release notes](https://github.com/vitejs/vite/releases )
- [Changelog](https://github.com/vitejs/vite/blob/v6.4.3/packages/vite/CHANGELOG.md )
- [Commits](https://github.com/vitejs/vite/commits/v6.4.3/packages/vite )
Updates `vitepress-plugin-llms` from 1.12.2 to 1.13.1
- [Release notes](https://github.com/okineadev/vitepress-plugin-llms/releases )
- [Commits](https://github.com/okineadev/vitepress-plugin-llms/compare/v1.12.2...v1.13.1 )
---
updated-dependencies:
- dependency-name: "@biomejs/biome"
dependency-version: 2.4.16
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: "@vitest/coverage-v8"
dependency-version: 3.2.6
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: turbo
dependency-version: 2.9.16
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: vitest
dependency-version: 3.2.6
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: "@types/opentype.js"
dependency-version: 1.3.10
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: vite
dependency-version: 6.4.3
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: dev-deps
- dependency-name: vitepress-plugin-llms
dependency-version: 1.13.1
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: dev-deps
...
Signed-off-by: dependabot[bot] <support@github.com >
* fix(test): resolve vitest 3.2.6 mock path breakage for posthog-node and @sentry/node
Add posthog-node and @sentry/node to vitest resolve aliases (matching
the existing pattern for all other api-workspace packages) and switch
the analytics test mocks from fragile relative node_modules paths to
bare specifiers. Vitest 3.2.6 changed how it matches mock paths through
pnpm symlinks after vi.resetModules(), causing 9 analytics test failures.
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-04 22:22:40 +08:00
SnapOtter
dfbc4cfd59
chore(release): 1.17.1
...
Bump version across all workspaces, update changelog, release notes,
OpenAPI spec, bug report template, and OpenSSF badge answers.
2026-05-18 19:10:56 +08:00
0dadca3b99
chore(deps): bump the production-deps group across 1 directory with 17 updates ( #144 )
...
Bumps the production-deps group with 17 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [@scalar/fastify-api-reference](https://github.com/scalar/scalar/tree/HEAD/integrations/fastify ) | `1.49.5` | `1.57.2` |
| [@sentry/node](https://github.com/getsentry/sentry-javascript ) | `10.49.0` | `10.53.1` |
| [fflate](https://github.com/101arrowz/fflate ) | `0.8.2` | `0.8.3` |
| [p-queue](https://github.com/sindresorhus/p-queue ) | `9.1.0` | `9.3.0` |
| [posthog-node](https://github.com/PostHog/posthog-js/tree/HEAD/packages/node ) | `5.29.5` | `5.34.2` |
| [sharp](https://github.com/lovell/sharp ) | `0.33.5` | `0.34.5` |
| [tsx](https://github.com/privatenumber/tsx ) | `4.21.0` | `4.22.1` |
| [zxing-wasm](https://github.com/Sec-ant/zxing-wasm ) | `3.0.2` | `3.0.3` |
| [react](https://github.com/facebook/react/tree/HEAD/packages/react ) | `19.2.4` | `19.2.6` |
| [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom ) | `19.2.4` | `19.2.6` |
| [lucide-react](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react ) | `0.469.0` | `0.577.0` |
| [@sentry/react](https://github.com/getsentry/sentry-javascript ) | `10.49.0` | `10.53.1` |
| [posthog-js](https://github.com/PostHog/posthog-js ) | `1.370.0` | `1.373.5` |
| [react-colorful](https://github.com/omgovich/react-colorful ) | `5.6.1` | `5.7.0` |
| [react-konva](https://github.com/konvajs/react-konva ) | `19.2.3` | `19.2.4` |
| [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom ) | `7.13.1` | `7.15.1` |
| [zustand](https://github.com/pmndrs/zustand ) | `5.0.12` | `5.0.13` |
Updates `@scalar/fastify-api-reference` from 1.49.5 to 1.57.2
- [Release notes](https://github.com/scalar/scalar/releases )
- [Changelog](https://github.com/scalar/scalar/blob/main/integrations/fastify/CHANGELOG.md )
- [Commits](https://github.com/scalar/scalar/commits/HEAD/integrations/fastify )
Updates `@sentry/node` from 10.49.0 to 10.53.1
- [Release notes](https://github.com/getsentry/sentry-javascript/releases )
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md )
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.49.0...10.53.1 )
Updates `fflate` from 0.8.2 to 0.8.3
- [Release notes](https://github.com/101arrowz/fflate/releases )
- [Changelog](https://github.com/101arrowz/fflate/blob/master/CHANGELOG.md )
- [Commits](https://github.com/101arrowz/fflate/compare/v0.8.2...v0.8.3 )
Updates `p-queue` from 9.1.0 to 9.3.0
- [Release notes](https://github.com/sindresorhus/p-queue/releases )
- [Commits](https://github.com/sindresorhus/p-queue/compare/v9.1.0...v9.3.0 )
Updates `posthog-node` from 5.29.5 to 5.34.2
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/packages/node/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/commits/posthog-node@5.34.2/packages/node )
Updates `sharp` from 0.33.5 to 0.34.5
- [Release notes](https://github.com/lovell/sharp/releases )
- [Commits](https://github.com/lovell/sharp/compare/v0.33.5...v0.34.5 )
Updates `tsx` from 4.21.0 to 4.22.1
- [Release notes](https://github.com/privatenumber/tsx/releases )
- [Changelog](https://github.com/privatenumber/tsx/blob/master/release.config.cjs )
- [Commits](https://github.com/privatenumber/tsx/compare/v4.21.0...v4.22.1 )
Updates `zxing-wasm` from 3.0.2 to 3.0.3
- [Release notes](https://github.com/Sec-ant/zxing-wasm/releases )
- [Changelog](https://github.com/Sec-ant/zxing-wasm/blob/main/CHANGELOG.md )
- [Commits](https://github.com/Sec-ant/zxing-wasm/compare/v3.0.2...v3.0.3 )
Updates `react` from 19.2.4 to 19.2.6
- [Release notes](https://github.com/facebook/react/releases )
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md )
- [Commits](https://github.com/facebook/react/commits/v19.2.6/packages/react )
Updates `react-dom` from 19.2.4 to 19.2.6
- [Release notes](https://github.com/facebook/react/releases )
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md )
- [Commits](https://github.com/facebook/react/commits/v19.2.6/packages/react-dom )
Updates `lucide-react` from 0.469.0 to 0.577.0
- [Release notes](https://github.com/lucide-icons/lucide/releases )
- [Commits](https://github.com/lucide-icons/lucide/commits/0.577.0/packages/lucide-react )
Updates `@sentry/react` from 10.49.0 to 10.53.1
- [Release notes](https://github.com/getsentry/sentry-javascript/releases )
- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md )
- [Commits](https://github.com/getsentry/sentry-javascript/compare/10.49.0...10.53.1 )
Updates `posthog-js` from 1.370.0 to 1.373.5
- [Release notes](https://github.com/PostHog/posthog-js/releases )
- [Changelog](https://github.com/PostHog/posthog-js/blob/main/CHANGELOG.md )
- [Commits](https://github.com/PostHog/posthog-js/compare/posthog-js@1.370.0...posthog-js@1.373.5 )
Updates `react-colorful` from 5.6.1 to 5.7.0
- [Release notes](https://github.com/omgovich/react-colorful/releases )
- [Changelog](https://github.com/omgovich/react-colorful/blob/master/CHANGELOG.md )
- [Commits](https://github.com/omgovich/react-colorful/commits/5.7.0 )
Updates `react-konva` from 19.2.3 to 19.2.4
- [Release notes](https://github.com/konvajs/react-konva/releases )
- [Commits](https://github.com/konvajs/react-konva/compare/v19.2.3...v19.2.4 )
Updates `react-router-dom` from 7.13.1 to 7.15.1
- [Release notes](https://github.com/remix-run/react-router/releases )
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md )
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.15.1/packages/react-router-dom )
Updates `zustand` from 5.0.12 to 5.0.13
- [Release notes](https://github.com/pmndrs/zustand/releases )
- [Commits](https://github.com/pmndrs/zustand/compare/v5.0.12...v5.0.13 )
---
updated-dependencies:
- dependency-name: "@scalar/fastify-api-reference"
dependency-version: 1.57.2
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@sentry/node"
dependency-version: 10.53.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: "@sentry/react"
dependency-version: 10.53.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: fflate
dependency-version: 0.8.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: lucide-react
dependency-version: 0.577.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: p-queue
dependency-version: 9.3.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: posthog-js
dependency-version: 1.373.5
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: posthog-node
dependency-version: 5.34.2
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: react
dependency-version: 19.2.6
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: react-colorful
dependency-version: 5.7.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: react-dom
dependency-version: 19.2.6
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: react-konva
dependency-version: 19.2.4
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: react-router-dom
dependency-version: 7.15.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: sharp
dependency-version: 0.34.5
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: tsx
dependency-version: 4.22.1
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-deps
- dependency-name: zustand
dependency-version: 5.0.13
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
- dependency-name: zxing-wasm
dependency-version: 3.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-deps
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-18 16:39:47 +08:00
SnapOtter
3e06d68f4f
chore: bump version to 1.17.0 and update docs for release
...
- Bump all workspace package versions to 1.17.0
- Update APP_VERSION constant and OpenAPI spec
- Update AI tool count from 15 to 16 across docs and i18n
- Update tool table with AI Canvas Expand, Meme Generator, Beautify
- Add image editor, OIDC, and 20 languages to README features
- Add release notes for v1.17.0
- Add JSON-LD structured data and SEO improvements to landing/docs
2026-05-16 12:48:02 +08:00
SnapOtter
5b5767990b
fix: tighten target-size compression tolerance from 5% to 1%
...
The binary search exited early at 5% tolerance, producing output like
48.3KB for a 50KB target. Reducing to 1% with 12 iterations makes the
output much closer to the requested target.
2026-05-11 16:29:14 +08:00
SnapOtter
e6a35265ef
fix: target-size compression now respects the target
...
The binary search found the right quality but sharp(buffer).toBuffer()
re-encoded at default quality 80, inflating the output (e.g. 50KB target
producing 90KB). Replaced buffer-wrapping with proper Sharp pipelines
that include .toFormat() with the proven quality. Also added progressive
dimension reduction when quality alone cannot reach the target, and
tightened tolerance to only accept at-or-below-target results.
2026-05-11 16:19:40 +08:00
SnapOtter
78ca9720e7
fix: sync all workspace package versions to 1.16.0
2026-05-10 20:19:02 +08:00
SnapOtter
7b1f09f5d0
fix: CLAHE tile size and alpha channel corruption in image enhancement
...
CLAHE width/height is tile size in pixels, not tile count. A 3px tile on
a 992x1088 image created ~330x360 independent histogram regions, producing
crosshatch/etching artifacts. Now uses image_dimension/8 (clamped 8-256)
for ~8 tiles per axis. Also strips alpha before enhancement and re-joins
after to prevent CLAHE/normalise/linear from corrupting transparency.
2026-05-09 15:20:55 +08:00
SnapOtter
bdcfb6647c
fix: sync frontend preset multipliers and fix sharpen type error
...
Add clahe and normalise entries to frontend PRESET_MULTIPLIERS to match
backend. Fix SharpenOptions to use m1 (not flat) per Sharp 0.34 types.
2026-05-09 11:26:49 +08:00
SnapOtter
b61be9e438
fix: replace enhancement pipeline with CLAHE + normalise + gamma
...
CLAHE provides adaptive local contrast, normalise stretches the
histogram, and gamma adjusts exposure perceptually. Replaces the old
modulate/linear pipeline that compounded errors and darkened images.
Preset multipliers now include clahe and normalise entries.
Key fixes beyond the spec:
- maxSlope rounded to integer (Sharp requirement)
- White balance uses linear() instead of recomb() to avoid float-cast
that breaks CLAHE in the libvips pipeline
- CLAHE tile size adapts to image dimensions (1x1 for tiny images)
- Gamma clamped to Sharp's valid range (1.0-3.0)
- Normalise lower/upper correctly mapped to percentile cutoffs
2026-05-09 11:24:00 +08:00
SnapOtter
5434762acc
fix: recalibrate enhancement scoring with dead zones
...
Contrast score now uses linear stdevLum/1.2 centered at 50 (was
miscalibrated 25-75 range centered at 75). Corrections use dead zones
(score 40-60 = zero) so well-exposed images get near-zero adjustments
instead of being darkened.
2026-05-09 11:07:36 +08:00
SnapOtter
136a4a0752
Merge branch 'feat/format-support-expansion'
...
# Conflicts:
# README.md
# apps/web/src/components/layout/app-layout.tsx
2026-05-08 16:21:11 +08:00
SnapOtter
c4c9852afc
refactor: use named ColorBlindnessOptions interface in operation signature
2026-05-08 15:14:42 +08:00
SnapOtter
0b6a970912
feat: add color blindness simulation image-engine operation
...
Add colorBlindness() operation with 8 simulation matrices (Vienot/Machado)
for protanopia, deuteranopia, tritanopia, protanomaly, deuteranomaly,
tritanomaly, achromatopsia, and blue cone monochromacy.
2026-05-08 15:11:36 +08:00
SnapOtter
80961c0187
feat: add JXL to all tool format selectors, expand convert with BMP/ICO/JP2/QOI, add server-side editor export
2026-05-08 00:19:19 +08:00
SnapOtter
390b5adb8c
feat: add QOI codec, format encoders (BMP/ICO/JP2/QOI), fix JXL output bug
2026-05-08 00:09:55 +08:00
SnapOtter
5c9fa2de49
feat: add decode pipelines for JP2, EPS, QOI, DDS, CUR, DPX, FITS, PPM, SVGZ, APNG
...
Add input decode support for 10 new image format families:
- JPEG 2000 (JP2/J2K): opj_decompress with ImageMagick fallback
- EPS: ImageMagick + Ghostscript delegate with 50MB size guard
- DDS: ImageMagick decode, first frame extraction
- CUR: reuses ICO decoder (structurally identical)
- DPX/Cineon: ImageMagick with sRGB colorspace conversion
- FITS: ImageMagick with normalize + sRGB conversion
- QOI: stub decoder (real codec deferred to Task 4)
- PPM/PGM/PBM/PFM: Sharp-native via libvips (no CLI decoder needed)
- SVGZ: gzip decompression with bomb protection before SVG sanitization
- APNG: accepted via extension, decoded as PNG first frame by Sharp
Updates magic bytes, MIME mappings, and frontend accept lists across
all file picker entry points (dropzone, tool page, file upload, editor).
2026-05-08 00:05:50 +08:00
SnapOtter
c0fb5896bb
feat: add RAW magic bytes to image-engine detect.ts and MIME entries for 17 new RAW formats
2026-05-08 00:00:39 +08:00
SnapOtter
979a833978
fix: resolve analytics data gaps and resize validation failures
...
- Fix resize 20% failure rate: add Zod refine requiring at least one
dimension, enforce integer/max constraints, clamp percentage scaling
to minimum 1px, and guard against missing metadata in withoutEnlargement
- Fix PostHog init race condition: move consent check before async import
so frontend events (search, pageview) are no longer silently dropped
- Fix identify() passing nested $set/$set_once wrappers instead of flat
properties, so version person property now appears on PostHog profiles
- Add error_code and error_message to failed tool_used analytics events
for debugging tool failures from PostHog
2026-05-06 23:21:45 +08:00
SnapOtter
ff8dcf63c7
fix: resolve 14 security, correctness, and robustness issues found during QA sweep
...
Security fixes:
- Add auth + ownership check to thumbnail endpoint (was unauthenticated)
- Validate ExifTool fieldsToRemove against safe tag name pattern
- Add SVG sanitization to pipeline execute and batch endpoints
- Replace basename() with sanitizeFilename() in 16 tool routes
- Escape SQL LIKE wildcards in file search to prevent pattern injection
- Improve settings HTML tag validation pattern
Bug fixes:
- Skip autoOrient for SVG inputs in pipeline (prevents misinterpretation)
- Remove double-encode in compress targetSize (was degrading quality)
- Fix bg-effects alpha value from 255 to 1.0 (Sharp expects float)
- Guard download stream error handler against headers-already-sent race
- Use O_EXCL atomic file creation for install lock (fixes TOCTOU race)
- Truncate collage file array to template image count
UX fixes:
- Accept empty JSON bodies on POST endpoints (install/uninstall)
- Custom JSON content type parser that treats empty body as {}
2026-05-01 18:11:49 +08:00
SnapOtter
bd84728588
docs: comprehensive API sync and documentation audit
...
- Rewrite OpenAPI spec to match actual code (988 lines changed):
- Fix ToolResponse schema (add previewUrl, savedFileId)
- Fix Error schema shape ({error, details} not {statusCode, error, message})
- Fix POST /api/auth/register URL (was /api/auth/users)
- Fix login/session responses (7 missing user fields + expiresAt)
- Fix 8 endpoints returning 204 → 200 with {ok: true}
- Fix pipeline execute field name (steps → pipeline)
- Fix API keys response key (keys → apiKeys)
- Fix settings response wrapper, teams UUID type
- Rewrite 7 major tool response schemas (info, barcode-read,
find-duplicates, compare, remove-background, upscale, ocr, blur-faces)
- Fix files/save-result (JSON → multipart), files/upload (201 + array)
- Fix SSE progress schema (integers not arrays)
- Add 422/501 error responses to AI and processing tools
- Fix settings required → optional on 29 tool endpoints
- Add 5 missing color adjustment fields to alias endpoints
- Rewrite rest.md tool parameter descriptions (12 tools fixed)
- Add Tool Sub-Routes section to rest.md (11 endpoints)
- Fix file library, settings, pipeline, auth docs in rest.md
- Fix API key hashing description (SHA-256 → scrypt)
- Fix "GitHub Pages" → "Cloudflare Pages" in architecture + deployment docs
- Fix tool count "45+" → "47" across all doc surfaces
- Fix branding endpoint paths in rest.md (/branding/logo → /settings/logo)
2026-04-25 07:17:45 +08:00
SnapOtter
7f62bc32db
test: expand coverage to 3,382 tests across all layers
...
- Unit: 1,353 tests (42 files) — +256 new tests covering AI bridge
modules, image-engine sharpen/optimize-for-web, Zustand stores, and
icon-map validation
- Integration: 1,640 tests (57 files) — +826 new tests across all
tool routes, pipeline/progress/batch infrastructure, user-files,
edit-metadata, and a 321-test cross-format matrix
- E2E-Docker: 389 passing (20 spec files) — 6 new spec files for
batch processing, format conversion, layout, optimization,
watermark/overlay, and pipeline chains. Tests verified against fresh
Docker container with all 6 AI bundles installed.
Bug fixes discovered during testing:
- fix(compress): SVG/BMP/exotic formats crashed Sharp encoder — added
format-safety fallback to PNG
- fix(rate-limit): increase default login attempt limit from 10 to 500
per minute — previous value caused false test failures and is too
restrictive for a self-hosted app
- fix(auth.setup): wait for consent button visibility before clicking
to prevent flaky E2E-Docker auth setup
2026-04-24 22:43:14 +08:00
SnapOtter
0309e0f680
chore: deploy to Cloudflare Pages and update branding
...
- Add Cloudflare Pages deployment for landing page (snapotter.com) and
docs (docs.snapotter.com)
- Create deploy-landing.yml and update deploy-docs.yml workflows
- Update CI to ignore apps/landing/** paths
- Fix logo transparency (remove white background) across all apps
- Recreate social-preview.png with SnapOtter branding
- Update all docs URLs from GitHub Pages to docs.snapotter.com
- Update VitePress config: light theme default, fix llms.txt paths
- Add .vitepress/cache/ and .env.* to gitignore
2026-04-24 18:06:29 +08:00
ashim-hq
7920fbfd20
chore: fix pre-existing biome formatting issues
2026-04-21 23:25:41 +08:00
ashim-hq
966d7abaf0
fix: AVIF compress fails because Sharp metadata reports heif not avif
...
Sharp's metadata() returns format:"heif" for AVIF files. The compress
function was using this raw value without normalizing through FORMAT_MAP,
so toFormat("heif",...) was called which requires a compression option.
Now both explicit and detected formats go through FORMAT_MAP, mapping
heif→avif correctly.
2026-04-21 10:27:02 +08:00
ashim-hq
dc9160746e
fix: ICO needs CLI decode, AVIF compress missing options, remove JXL output
...
- ICO: Sharp cannot decode ICO files. Added ImageMagick-based ICO decoder
that extracts the largest embedded image. Added ICO to CLI_DECODED_FORMATS
and SERVER_PREVIEW_EXTENSIONS. Removed from BROWSER_PREVIEWABLE sets.
- AVIF compress: Sharp's AVIF encoder requires effort option. Added
formatOpts() helper that supplies effort:4 for AVIF format.
- JXL output: Docker's bundled libvips lacks the JXL encoder plugin.
Removed JXL as a convert output target to avoid guaranteed failures.
JXL remains fully supported as an input format.
2026-04-21 10:20:08 +08:00
ashim-hq
2aadb66031
feat: add support for JXL, Camera RAW, ICO, TGA, PSD, EXR, HDR image formats
...
Extends the platform to handle 7 new image format families alongside
the existing AVIF support gap-fill. Uses the established HEIC decoder
pattern (CLI decode → PNG → Sharp) for formats Sharp can't handle
natively: Camera RAW via dcraw_emu/LibRaw, PSD/TGA/EXR/HDR via
ImageMagick. JXL and ICO are Sharp-native. Adds server-side preview
for non-browser-displayable formats and JXL as a new convert output
target. All 27 validateImageBuffer callers updated with filename for
extension-based format detection.
2026-04-21 09:59:57 +08:00
ashim-hq
c738f16107
fix: support AVIF compress and fix hardcoded content type
2026-04-20 22:13:53 +08:00
ashim-hq
ae411f2d72
chore(release): 1.15.9 [skip ci]
2026-04-17 23:26:26 +08:00
semantic-release-bot
95af281584
chore(release): 1.15.8 [skip ci]
...
## [1.15.8](https://github.com/ashim-hq/ashim/compare/v1.15.7...v1.15.8 ) (2026-04-17)
### Bug Fixes
* copy Node.js from official image instead of apt-get install ([536125e ](https://github.com/ashim-hq/ashim/commit/536125ec9fbc5758bdd3e8f0f4c44253de2231c7 ))
2026-04-17 07:36:40 +00:00
semantic-release-bot
caa2160ef8
chore(release): 1.15.7 [skip ci]
...
## [1.15.7](https://github.com/ashim-hq/ashim/compare/v1.15.6...v1.15.7 ) (2026-04-17)
### Bug Fixes
* add retry with backoff for apt-get update on CUDA base image ([3d6db5a ](https://github.com/ashim-hq/ashim/commit/3d6db5a32d3f9292d5476e9bd80c1f06624fa316 ))
2026-04-17 07:04:40 +00:00
semantic-release-bot
23dae8d152
chore(release): 1.15.6 [skip ci]
...
## [1.15.6](https://github.com/ashim-hq/ashim/compare/v1.15.5...v1.15.6 ) (2026-04-17)
### Performance Improvements
* parallelize model downloads and switch to registry cache ([79c4ed6 ](https://github.com/ashim-hq/ashim/commit/79c4ed6a359b008dedeb154a55e2764ee0e3d9fa ))
2026-04-17 06:55:08 +00:00
semantic-release-bot
2fd0c00564
chore(release): 1.15.5 [skip ci]
...
## [1.15.5](https://github.com/ashim-hq/ashim/compare/v1.15.4...v1.15.5 ) (2026-04-17)
### Bug Fixes
* exclude e2e-docker tests from Vitest runner ([8df18c5 ](https://github.com/ashim-hq/ashim/commit/8df18c56a6c69e2a188cf0e7c97e692cd4c0e7ec ))
2026-04-17 06:41:05 +00:00
semantic-release-bot
3dc98374e2
chore(release): 1.15.4 [skip ci]
...
## [1.15.4](https://github.com/ashim-hq/ashim/compare/v1.15.3...v1.15.4 ) (2026-04-17)
### Bug Fixes
* verbose error handling, batch processing, and multi-file support ([3223960 ](https://github.com/ashim-hq/ashim/commit/32239600ae6ce30628e77e61a805ca0a167b5068 ))
* verbose errors, batch processing, multi-file support ([#1 ](https://github.com/ashim-hq/ashim/issues/1 )) ([8b87cf8 ](https://github.com/ashim-hq/ashim/commit/8b87cf888c6194e2af427a180607d7c53a1d15b9 ))
2026-04-17 06:21:10 +00:00
semantic-release-bot
b76b9a1878
chore(release): 1.15.3 [skip ci]
...
## [1.15.3](https://github.com/ashim-hq/ashim/compare/v1.15.2...v1.15.3 ) (2026-04-16)
### Bug Fixes
* retry apt-get update on transient mirror sync errors (Acquire::Retries=3) ([cec7163 ](https://github.com/ashim-hq/ashim/commit/cec71632d0c868c3a413b813ff15baccc8fa8cdd ))
2026-04-16 19:46:27 +00:00
semantic-release-bot
59e6f2f28c
chore(release): 1.15.2 [skip ci]
...
## [1.15.2](https://github.com/ashim-hq/ashim/compare/v1.15.1...v1.15.2 ) (2026-04-16)
### Bug Fixes
* use GHCR_TOKEN with write:packages scope for GHCR login ([e14414f ](https://github.com/ashim-hq/ashim/commit/e14414f3061981b1454dc7d4504c64ec01db945e ))
2026-04-16 18:13:08 +00:00
semantic-release-bot
fd1eb9c781
chore(release): 1.15.1 [skip ci]
...
## [1.15.1](https://github.com/ashim-hq/ashim/compare/v1.15.0...v1.15.1 ) (2026-04-16)
### Bug Fixes
* **docker:** create /opt/models unconditionally so chown works in CI ([93ce289 ](https://github.com/ashim-hq/ashim/commit/93ce2891cc26afc93f01168d008927d3d356c1a9 ))
* **docker:** run frontend builder on BUILDPLATFORM to fix esbuild crash under QEMU ([6a3ad0d ](https://github.com/ashim-hq/ashim/commit/6a3ad0d496e291b30a3f719ca079c43ce7aab705 ))
* resolve runtime model path mismatch for non-root Docker user ([f28792a ](https://github.com/ashim-hq/ashim/commit/f28792a5ed78221f38cf2f3c80cae9f24cd7f5e3 ))
2026-04-16 15:46:06 +00:00