Suppress -Wincompatible-pointer-types when needed - #397
Conversation
|
Hey! I added macOS 26 (both on arm and x86) to the CI matrix: #398. It seems to compile just fine, even without your change… 🤔 The images use clang 17, according to https://github.com/actions/runner-images/blob/main/images/macos/macos-15-arm64-Readme.md. Maybe there is another cause for the compilation issues? EDIT: The referenced issues mention this problem also happening on older macOS versions, not only macOS 26. |
LLVM Clang 22+ treats -Wincompatible-pointer-types as an error by default, which breaks compilation of mini_racer_extension.c due to the unsigned long vs uint64_t mismatch in the bigint serialization code. Add -Wno-incompatible-pointer-types to CFLAGS when the compiler rejects an unsigned long to uint64_t pointer conversion, as a workaround until the type mismatch is properly fixed in the extension source. Ref: rubyjs#359 Ref: rubyjs#361
|
@tisba Sorry, the build process picked Clang 22 installed via Homebrew, which was the cause. I've updated the fix. |
|
Thank you. This greatly exceeds my level of expertise though 😅 Maybe @SamSaffron @bnoordhuis can take a look? |
|
The added conditional basically checks if the compiler accepts |
|
Wouldn't this also solve the issue? diff --git a/ext/mini_racer_extension/serde.c b/ext/mini_racer_extension/serde.c
index 7d5d51f..3a3d8eb 100644
--- a/ext/mini_racer_extension/serde.c
+++ b/ext/mini_racer_extension/serde.c
@@ -244,7 +244,7 @@ static void ser_num(Ser *s, double v)
}
// ser_bigint: |n| is in bytes, not quadwords
-static void ser_bigint(Ser *s, const uint64_t *p, size_t n, int sign)
+static void ser_bigint(Ser *s, const unsigned long *p, size_t n, int sign)
{
if (*s->err)
return; |
|
@bnoordhuis It doesn't. % clang++ --version
Homebrew clang version 22.1.2
Target: arm64-apple-darwin25.4.0
Thread model: posix
InstalledDir: /opt/homebrew/Cellar/llvm/22.1.2/bin
Configuration file: /opt/homebrew/Cellar/llvm/22.1.2/etc/clang/arm64-apple-darwin25.cfg |
|
Does this work? I think it resolves it without hacking compile - cc @bnoordhuis |
|
merged my pr I think we compile fine now |
|
Has a new version to address this already released? |
as far as I can tell, not yet. Might be an oversight /cc @SamSaffron |
|
yes I think so. it should released. |
|
554923f is not in the v0.22.0 tag ( v0.22.0...main) |
|
oh ... let me do a release.
…On Thu, Aug 27, 2026 at 4:49 PM Sebastian Cohnen ***@***.***> wrote:
*tisba* left a comment (rubyjs/mini_racer#397)
<#397 (comment)>
554923f
<554923f>
is not in the v0.22.0 tag ( v0.22.0...main
<v0.22.0...main>)
—
Reply to this email directly, view it on GitHub
<#397?email_source=notifications&email_token=AAABIXLAH7NRCSAFIW52MN35L7KV5A5CNFSNUABFM5UWIORPF5TWS5BNNB2WEL2JONZXKZKDN5WW2ZLOOQXTKNBTGUZTSNRWGY32M4TFMFZW63VHNVSW45DJN5XKKZLWMVXHJLDGN5XXIZLSL5RWY2LDNM#issuecomment-5435396667>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAABIXLLUWJJ6KTOBIUONSL5L7KV5AVCNFSNUABEKJSXA33TNF2G64TZHM2TQMBSHE3TKNJ3JFZXG5LFHM2DAMZYGIZDOMJQGOQXMAQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
|
Thank you for releasing 0.22.1! |
0.22.1 includes the Clang 22+ build fix (rubyjs/mini_racer#397).
* Replace Unicorn with single-threaded Puma - Switch runtime and deployment entrypoints from Unicorn to single-threaded Puma - Keep clustered Puma available via WEB_CONCURRENCY while defaulting threads to 1 - Update Docker, Heroku, OpenShift, nginx, Capistrano, and manual deployment assets * Document Puma fork worker tuning [ci skip] * Update patch updated gems (huginn#3574) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency devise to v5.0.3 [SECURITY] (huginn#3575) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Stabilize Chrome startup in tests * Modernize Docker test environment - Replace the old PhantomJS-based test image with Google Chrome and matching ChromeDriver on the official Huginn base image - Refresh docker/test compose usage and document the current amd64-based Chrome test setup - Keep schema dumps and browser cache files out of the worktree, and separate Docker Bundler installs under vendor/bundle * Fix SMTP TLS configuration for net-smtp 0.5+ * Add multi-arch (amd64 + arm64) Docker build & push - Build amd64 and arm64 images in parallel on native runners (ubuntu-latest / ubuntu-24.04-arm), then merge per-arch digests into multi-arch manifests via docker buildx imagetools create - Keep test image amd64-only (Chrome lacks arm64 Linux support) - Add GHA layer cache with per-job scopes for faster rebuilds - Optimize DockerHub push by adding OUTDATED_DOCKER_REGISTRY=true as a thin ENV layer on top of the GHCR image, avoiding a full rebuild - Remove build_docker_image.sh, replaced by docker/build-push-action and inline workflow steps - Use architecture-appropriate MySQL in multi-process image: MySQL 5.7 (Oracle repo) on amd64 for existing install compatibility, MySQL 8.0 (Ubuntu) on arm64 where 5.7 is unavailable - Fix jq binary download for multi-arch (jqlang/jq, arch-aware URL) * Minimize permissions * Fix flaky select2 automation in tests * Upgrade Font Awesome 6 to 7 font-awesome-sass gem does not support FA7, so switch to directly installing the @fortawesome/fontawesome-free npm package with pre-compiled CSS served through Sprockets. - Configure Sprockets asset paths for FA7 CSS and webfonts - Add @font-face overrides to fix Sprockets font path resolution - Replace FA SCSS mixin usage in tables.scss with inline CSS * Match glyphicon width to Font Awesome 7 icons FA7 sets width: 1.25em on all icons by default, unlike FA6. Apply the same width to .glyphicon so they align consistently when displayed alongside FA7 icons. * Replace deprecated google-api-client with google-apis-calendar_v3 * Fix Docker artifact names * Fix MySQL socket config * Add OpenaiConcern for shared OpenAI-compatible API integration logic Provides a reusable concern for agents that interact with OpenAI-compatible APIs. Includes configurable base_url (works with OpenAI, Ollama, Groq, Azure OpenAI, vLLM, etc.), Bearer token auth, organization header support, JSON and multipart HTTP request helpers, and common error handling. Built on top of WebRequestConcern (Faraday) and FormConfigurable. * Add OpenAI LLM Agent for chat completions via any OpenAI-compatible API Supports configurable model, system/user messages with Liquid templating, temperature, max_tokens, top_p, frequency/presence penalties, and JSON response format. Works with OpenAI, Ollama, Groq, and any provider exposing a /v1/chat/completions endpoint. Includes RSpec tests with WebMock stubs and JSON fixture data. * Add OpenAI Speech Agent for Whisper transcription/translation and TTS Three modes in one agent: transcribe (Whisper STT), translate (Whisper to English), and speak (TTS). Accepts audio via URL or file_pointer events. TTS supports voice selection (alloy, echo, fable, onyx, nova, shimmer) and multiple output formats. Returns base64-encoded audio for TTS and transcribed text for STT. Includes RSpec tests with WebMock stubs and JSON fixture data. * Add OpenAI Image Generation Agent for DALL-E and compatible APIs Supports DALL-E 2, DALL-E 3, and any compatible image generation endpoint. Configurable size, quality (standard/hd), style (vivid/natural), and response format (URL or base64). Emits one event per generated image, supporting batch generation via the n parameter. Includes RSpec tests with WebMock stubs and JSON fixture data. * Add OpenAI Video Generation Agent with async submit/poll for Sora-compatible APIs Supports three modes: submit (fire-and-forget), poll (check status by ID), and submit_and_poll (submit then track in agent memory for automatic polling on subsequent scheduled runs). Handles various API response shapes for provider compatibility. Configurable endpoint path for non-standard providers. Includes RSpec tests with WebMock stubs and JSON fixture data. * Refactor OpenAI agents: consolidate Faraday builders, fix global parse_body override, and harden video agent - Consolidate three duplicate Faraday connection builders into a single build_openai_connection(parse_json:, multipart:) private method - Remove global parse_body? override that broke binary audio fetching; JSON parsing is now per-connection via parse_json parameter - Add MAX_PENDING_GENERATIONS (50) and PENDING_GENERATION_TTL (24h) to video agent to prevent unbounded memory growth - Fix check_pending_generations to preserve original event payload when output_mode is merge - Extract duplicated working? method from all four agents into OpenaiConcern - Add expected_receive_period_in_days validation to OpenaiConcern * Fix OpenAI agent test expectations - Fix OpenaiLlmAgent merge mode test: 'message' field is always present as the LLM response content, not only when merging from incoming events - Fix OpenaiVideoGenerationAgent test: move input event creation outside the expect block so only agent output events are counted * Address PR huginn#3560 review comments - Use Faraday :json middleware in openai_multipart_request instead of manual JSON.parse; expose parse_json: kwarg so callers can opt out for plain-text response formats (text, srt, vtt) - Handle non-JSON transcription/translation response formats: pass parse_json: false and emit { response_format => raw_string } payload - Validate response_format against allowed values per mode in OpenaiSpeechAgent#validate_options - Use File.basename when building the multipart filename from a file_pointer to avoid leaking the full path to the API server - Fix submit_and_poll description: scheduled check() only polls pending generations, it does not re-submit * Properly apply knu's review: always enable Faraday :json middleware The :json middleware is safe to enable unconditionally because Faraday only decodes the body when Content-Type contains 'json'. This means plain-text/binary responses (text, srt, vtt, audio) pass through unchanged with no extra branching needed. - Remove parse_json: kwarg from build_openai_connection and all callers - openai_multipart_request no longer needs a parse_json: option - perform_transcription/perform_translation branch on response.is_a?(Hash) rather than tracking the format string explicitly * Centralize OpenAI error handling in request helpers and fix JSON.parse on decoded body * Upgrade Liquid to 5.12 and update the monkey patch * Introduce rspec-retry for flaky feature specs * Add aarch64-linux-gnu platform and update nokogiri to 1.19.2 * Update dependency json to v2.19.2 [SECURITY] (huginn#3581) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Use Faraday::Request::Json middleware for JSON serialization * Use URI for OpenAI endpoint URL construction Resolve endpoint URLs with URI#+ instead of string interpolation, and validate that resolved URLs stay within the base URL. * Use targeted ENV stubs instead of stub_const in OpenAI agent specs * Make coffee-script gem optional Replace coffee-rails with coffee-script and move it to the optional gems section. JavaScriptAgent now dynamically enables CoffeeScript support only when the gem is available. * Update CHANGES.md [ci skip] * Update docker/build-push-action action to v7 (huginn#3587) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update docker/login-action action to v4 (huginn#3588) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update docker/setup-buildx-action action to v4 (huginn#3589) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update GitHub Artifact Actions (huginn#3590) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update patch updated gems (huginn#3585) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update minor updated gems (huginn#3586) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Upgrade amd64 MySQL to 8.0 in multi-process image MySQL 5.7 on amd64 has reached EOL. We should move the multi-process image to MySQL 8.0. MySQL 8.0 can upgrade existing 5.7 data automatically once it has been shut down cleanly, so add a startup upgrade path that fixes old dirty shutdowns first. Also stop mysqld with SIGTERM and a longer wait so future upgrades remain smooth. * Update patch updated gems (huginn#3592) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Refresh Dropbox and Weibo integrations - Update OmniAuth-related dependencies, including the move to oauth2 2.x, so the authentication stack can move forward without the older dependency constraints. - Replace unmaintained Dropbox and Weibo libraries with maintained or in-repo integrations that match the APIs Huginn actually uses. - Tighten the Dropbox OAuth setup and agent documentation, including the scopes required by each agent. - Stop using Kernel#open for Weibo uploads, reject non-HTTP image URLs, and derive upload content types from the fetched response instead of the filename. * Fix PostAgent spec query assertion * Remove CoffeeScript support from JavaScriptAgents - Automatically transpile legacy CoffeeScript agent code and credential-backed code with npx coffeescript in the database migration * Remove language selection from JavaScriptAgent form The language option is no longer user-facing since CoffeeScript was removed. It is now automatically set to "JavaScript" via before_validation instead of being a form field. - Set ace editor mode to javascript explicitly - Remove JS-side language selector and mode switching code - Add feature spec for creating and editing JavaScriptAgents * Relax gem version constraints * Remove unused development workflow gems - Remove better_errors, binding_of_caller, web-console, guard, guard-livereload, guard-rspec, and rack-livereload - Delete Guardfile and the Rack::LiveReload middleware config - I do not use these tools in my development workflow * Add vendored dotenv update task * Upgrade dotenv to 3.2.0 * Preserve dotenv parsing in cap sync * Adjust Renovate gem update rules * Update development and test gems to v3.20.0 (huginn#3599) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency faraday-typhoeus to v2 * Update dependency sprockets to v4.2.2 (huginn#3600) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Remove shoulda-matchers * Update dependency rubocop-rspec to v3 (huginn#3602) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update minor updated gems to v1.23.0 (huginn#3604) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Replace the deprecated on_worker_boot with before_worker_boot * Add Threads service and agents - Add a Threads OmniAuth provider with long-lived token exchange and refresh - Add ThreadsPublishAgent and ThreadsUserAgent * Add service reauthorization flow Users can now reauthorize their services with updated credentials or scopes without having to recreate them and reconfigure agents. * Improve Services UI - Add an icon to each provider name in the table - Turn "Global?" into a confirm-backed toggle switch - Add a "List Agents" action and agent filtering by service - Group service actions in a dropdown * Skip duplicate CI runs on PR branches [ci skip] * Center table rows * Turn off the deprecated reconnect option of the MySQL connector * Replace our JSON editor with vanilla-jsoneditor * Support typed JSON option values * Update CHANGES.md [ci skip] * Switch omniauth-dropbox2 from GitHub HEAD to the latest release * Replace twitter-stream with twitter - Switch TwitterStreamAgent to Twitter::Streaming::Client - Stop relying on EventMachine and the twitter-stream gem - Use the released twitter gem instead of a GitHub source - Avoid the simple_oauth lockfile conflict * Switch httparty back from GitHub HEAD to the latest release * Rework Tumblr agents by replacing obsolete gems - Stop depending on unmaintained tumblr_client and its Faraday 2 fork - Drop omniauth-tumblr, which still depends on old omniauth-oauth - Replace them with an in-tree Faraday client and OAuth middleware - Add a local Tumblr OmniAuth strategy that works on Rack 3 * Update dependency aws-sdk-s3 to '~> 1', '>= 1.218.0' (huginn#3614) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency execjs to v2.10.1 (huginn#3613) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Lock file maintenance * Stop sourcing capybara-select-2 from GitHub - Use the rubygems 0.5.1 release instead - The only code difference is a minor README change - The packaged gem is slimmer because it omits extra repository files * Update status badges [ci skip] * Update huginn_agent to 0.6.4 * Support JSON-serialized fields on all backends - Switch Service options from YAML serialization to JSON serialization - Keep indifferent-access behavior for text and native JSON columns - Cover reload behavior for agent, event, and service serialized fields * Stabilize JSON duplicate detection - Compare JSON objects independent of key order - Use stable JSON when deduplicating whole-event payloads - Cover reordered payloads in agent and utility specs * Add staged JSON column rollout migrations - Add a data migration that converts Service options to JSON serialization - Add a native JSON column migration guarded by NATIVE_JSON_COLUMNS - Add migration path and specs for flagged native JSON rollout * Test native JSON rollout in CI - Add enabled and disabled NATIVE_JSON_COLUMNS matrix lanes - Run MySQL and PostgreSQL test jobs in both rollout modes * Describe NATIVE_JSON_COLUMNS in .env.example * Apply suggestion from @dsander Co-authored-by: Dominik Sander <git@dsander.de> * Update development and test gems to v1.86.1 (huginn#3620) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency puma to v8 (huginn#3619) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency aws-sdk-s3 to '~> 1', '>= 1.219.0' (huginn#3621) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Lock file maintenance (huginn#3618) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Add fetch and fetchAll APIs to JavaScriptAgent Expose a synchronous subset of the Web fetch API inside the JavaScriptAgent sandbox as global `fetch(url, options)` and `fetchAll(requests, options)` functions, backed by Faraday with the Typhoeus adapter. - `fetch` performs a single request and returns a Response-like object with `ok`, `status`, `statusText`, `url`, `redirected`, `headers` (with `get`/`has`), `text()`, and `json()` - `fetchAll` runs multiple requests concurrently via Typhoeus' parallel manager and returns results in input order; each element may be a URL string or a `[url, options]` pair mirroring the arguments of `fetch` - Supports `method`, `headers`, `body`, `timeout`, and `redirect` options - Matches `fetch` semantics: HTTP error statuses set `ok=false` but do not throw, while any network-level failure raises a `TypeError` (for the whole batch in `fetchAll`) * Update patch updated gems (huginn#3624) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Add whatwg-url-without-unicode and esbuild as npm dependencies * Add build task for the whatwg-url polyfill * Expose URL and URLSearchParams to JavaScriptAgent Load the whatwg-url polyfill into MiniRacer on first reference so that sandboxes that never touch URL do not pay the parse cost. * Make sure fetch and fetchAll accept URL objects * Update CHANGES.md [ci skip] * Update patch updated gems to v2.19.4 (huginn#3627) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update minor updated gems (huginn#3628) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Lock file maintenance (huginn#3623) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update patch updated gems (huginn#3631) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency spring to v4.5.0 (huginn#3632) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Lock file maintenance (huginn#3630) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Track Ruby in CI, docs, and Dockerfiles - Add regex managers for Ruby versions in CI, manual install docs, and Docker base images - Keep Ruby source archive URLs aligned across minor and major updates - Pin current Ruby references to 3.4.9 * Fix renovate configuration with the compatiblity part * Update dependency ruby to v4 * bundle update --ruby * Use .tool-versions for Ruby version * Add bundle install workflow for Ruby bumps * Revert "Upgrade Ruby to 4" * Use .tool-versions for Ruby version * Add bundle install workflow for Ruby bumps * Fix the renovate settings for grouping ruby version bumps * Update dependency ruby to v4 (huginn#3638) * Update dependency ruby to v4 * Update bundle for Ruby version --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Update documentation: add NPM for Font Awesome, remove --deployment flag * Update dependency devise to v5.0.4 [SECURITY] (huginn#3644) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Bump fast-uri from 3.1.0 to 3.1.2 Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.0 to 3.1.2. - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](fastify/fast-uri@v3.1.0...v3.1.2) --- updated-dependencies: - dependency-name: fast-uri dependency-version: 3.1.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * Update patch updated gems (huginn#3646) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update minor updated gems (huginn#3647) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Lock file maintenance (huginn#3652) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Suppress MySQL 9 updates * Update patch updated gems (huginn#3654) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency ruby to v4.0.4 (huginn#3653) * Update dependency ruby to v4.0.4 * Update bundle for Ruby version --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Update Docker Compose MySQL to 8.0 [ci skip] * Update dependency esbuild to ^0.28.0 (huginn#3655) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Avoid upgrading MySQL to >8.0.x for now [ci skip] * Update dependency ruby to v4.0.5 (huginn#3660) * Update dependency ruby to v4.0.5 * Update bundle for Ruby version --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Lock file maintenance (huginn#3657) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update patch updated gems (huginn#3658) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Remove obsolete data fixtures * Remove AdiosoAgent The Adioso flight-search service has shut down: api.adioso.com no longer resolves, so the agent cannot work any more. Drop the agent, its spec, fixtures, and the README mention. * Improve JSON editor UX - Add a drag handle for vertical resizing - Add a fullscreen toggle (ESC or backdrop click to close) - Fit initial height to existing content (capped at 80% of viewport) - Stop clipping the context menu by dropping `overflow: hidden` - Rewrite without jQuery using plain DOM APIs - Rename json-editor.js.erb to json-editor.js (no ERB tags remain) Addresses huginn#3641. * Update development and test gems to v1.87.0 (huginn#3659) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update minor updated gems (huginn#3661) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update patch updated gems to v1.24.6 (huginn#3665) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Handle native JSON values in JSON serializer During native JSON column migration or mixed boot paths, Active Record can still route a serialized attribute through JsonWithIndifferentAccess even though the database adapter has already decoded the JSON column value into a Hash. That inconsistent state makes the legacy serializer call JSON.parse on the Hash and fail with "no implicit conversion of Hash into String". Only parse String input as JSON so already-decoded Hash values are wrapped with indifferent access. Keep parser error handling scoped to JSON.parse and cover string, hash, and nil inputs. * Add Raindrop service and agents - Add Raindrop service authentication with OAuth token refresh. - Add RaindropBookmarksAgent for polling bookmarks. - Add RaindropPublishAgent for saving incoming links. * Refresh Threads tokens before expiry Threads long-lived access tokens must be refreshed before they expire. Once Meta considers the session expired, the refresh endpoint returns an OAuth error and the user has to reauthorize the service. Refresh Threads services during request preparation when the token is within seven days of expiry, while leaving other providers on the existing expired token path. Also raise provider refresh errors instead of silently ignoring a failed token update. Require the initial Threads token exchange to succeed as well, so a short-lived OAuth token is not saved as if it were refreshable long-lived credentials. * Lock file maintenance (huginn#3664) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Add signed file pointer validation Sign all file pointers emitted by FileHandling agents and add `require_signed_file_pointer` for consumers that need to reject forged pointers. New default options require signed file pointers for `ReadFileAgent`, `CsvAgent`, `PostAgent`, and `OpenaiSpeechAgent`. Existing agents without the option keep accepting legacy unsigned pointers, avoiding breakage for queued or retained events from older workflows. This preserves compatibility while allowing file-consuming workflows to treat file pointers not signed by a file-handling agent as invalid. * Lock file maintenance (huginn#3670) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update patch updated gems (huginn#3671) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * clear sf weather reference in seeds * Lock file maintenance (huginn#3672) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update patch updated gems to '~> 1', '>= 1.226.0' (huginn#3673) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Sync ACE editor into its form field on change The editor's value was only copied into its backing form field by the form submit handler (updateFromEditors). Clicking Save could race that handler and submit the original code, so an edit was occasionally lost. Mirror the editor session into the source field on every change so the field is always current regardless of submit timing. * Fix flaky JavaScriptAgent feature spec Add a set_ace_editor_value helper that waits for the editor to finish initializing before entering a value, so the value is no longer clobbered by buildAce seeding the editor on load. * Sort optional agent gems alphabetically by agent name - Reorder the optional libraries section so each gem is grouped under an agent-name comment and the groups are sorted alphabetically * Drop redundant tzinfo dependency - activesupport already requires tzinfo (~> 2.0, >= 2.0.5), so listing it explicitly in the Gemfile is unnecessary * Drop redundant ffi dependency - ffi is already pulled in transitively (typhoeus via ethon, among others), and the explicit `>= 1.17.4` floor is well below what those dependents resolve to, so the pin no longer serves a purpose * Remove uglifier and execjs leftovers from the terser switch - The asset JS compressor is terser (config.assets.js_compressor = :terser in production.rb); uglifier is no longer referenced anywhere and is dropped - execjs was only an explicit pin with no direct use; terser still pulls it in transitively, so it stays resolved in Gemfile.lock * Update actions/checkout action to v7 (huginn#3674) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Lock file maintenance (huginn#3676) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency @fortawesome/fontawesome-free to v7.3.0 (huginn#3678) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update patch updated gems (huginn#3681) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency rubocop to v1.88.2 (huginn#3682) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update minor updated gems (huginn#3683) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency @fortawesome/fontawesome-free to v7.3.1 (huginn#3688) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update minor updated gems (huginn#3691) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update patch updated gems (huginn#3690) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency selenium-webdriver to v4.46.0 (huginn#3686) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency ruby to v4.0.6 (huginn#3689) * Update dependency ruby to v4.0.6 * Update bundle for Ruby version --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Pin Erector revision to avoid stale cache * Lock file maintenance (huginn#3680) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency aws-sdk-s3 to '~> 1', '>= 1.228.1' (huginn#3695) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency vanilla-jsoneditor to v3.13.0 (huginn#3696) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Bump fast-uri from 3.1.3 to 3.1.4 Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](fastify/fast-uri@v3.1.3...v3.1.4) --- updated-dependencies: - dependency-name: fast-uri dependency-version: 3.1.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> * Improve Agent type picker search - Rank name matches ahead of description matches, then by match position. - Open the type picker automatically on new Agent forms. - Cover ranking and initial-open behavior with a feature spec. * Fix pre-opened Agent picker feature specs - Select Agent types through the shared helper so it closes the picker before capybara-select-2 reopens it. - Allow the helper to wait for the ACE editor on JavaScriptAgent forms. * Lock file maintenance (huginn#3693) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Fix duplicate events in RaindropBookmarksAgent The agent re-emitted the same raindrops on every check due to two bugs in the dedup memory: - `memory["since"]` was saved with `Time#iso8601`, which drops sub-second precision. Raindrop's `created` timestamps carry milliseconds, so on the next check the latest raindrop compared as strictly newer than `since` and was emitted again, forever. Save with `iso8601(3)` to keep millisecond precision. - When a new raindrop shared the exact `created` timestamp of an already-seen one, `memory["since_ids"]` was rebuilt from the newly emitted items only, dropping the seen ids and re-emitting them on the next check. Seed the latest-timestamp tracking from the stored `since`/`since_ids` instead so seen ids are carried over. The seen check now tests id membership before timestamps, so agents whose memory already holds a truncated `since` self-heal on the next check without emitting one more duplicate. Also drop the `@since_ids` memoization, which could go stale across runs on a reused instance. Add regression specs for both scenarios. * Raise MySQL sort_buffer_size for JSON columns With NATIVE_JSON_COLUMNS enabled, ORDER BY queries on events include the JSON payload column in filesort rows, and MySQL 8 fails with "Out of sort memory" (ER 1038) at the default sort_buffer_size of 256K. Observed with AgentReceiveJob on a DataOutputAgent under MySQL 8.4. - Set sort_buffer_size = 4M for the MySQL server bundled in the multi-process Docker image. - Recommend the same in .env.example and the installation manual for self-managed MySQL servers. * Clarify that NATIVE_JSON_COLUMNS is only consulted by migrations [ci skip] * Improve agent search with type matching * Update CHANGES.md [ci skip] * Lock file maintenance (huginn#3706) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency rubocop to v1.89.0 (huginn#3707) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update patch updated gems (huginn#3708) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Lock file maintenance (huginn#3712) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Deduplicate queued periodic runs Add a delayed_job uniqueness key backed by a database unique index so concurrent enqueue attempts for the same schedule are skipped. Restrict the enqueue transaction to keyed jobs so failures in unrelated inline jobs do not roll back their side effects. Release keys on permanent failure and let the scheduler report skipped runs. * Update minor updated gems to v1.25.0 (huginn#3714) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency esbuild to v0.28.2 (huginn#3717) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update development and test gems to v4.47.0 (huginn#3718) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency aws-sdk-s3 to '~> 1', '>= 1.229.0' (huginn#3716) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Serialize concurrent Agent execution Use database advisory locks to prevent an Agent's check, receive, web request, reemit, scheduler, and runner callbacks from overlapping. Reload Agent state after acquiring the lock and test contention across separate database connections. * Update development and test gems to v1.90.0 (huginn#3722) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update minor updated gems to v4.4.0 (huginn#3721) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Lock file maintenance (huginn#3720) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Limit manual event propagation to current user Run manual propagation only for the signed-in user's Agents by invoking propagation through the association scope. Make Agent.receive! honor Active Record scopes so immediate and scheduled propagation can use the same relation-based API and empty scopes do no work. * Serialize event propagation scans Concurrent propagation scans can select the same pending events before either updates receiver cursors, enqueueing duplicate receive jobs. Use a database advisory lock around event selection, cursor updates, and enqueueing so subsequent scans observe committed progress. * Propagate events after commit Defer immediate propagation until the event transaction commits so the propagation lock protects committed cursor updates. Skip propagation when there are no immediate receivers. * Update CHANGES.md [ci skip] * Extract HumanTaskAgent from core AWS closed Mechanical Turk to new customers on July 30, 2026 and does not plan to add new features, putting the service on a maintenance-only path. HumanTaskAgent depends on rturk 2.12.1, released in August 2013 from a branch that has not changed since October 2013. It also needs a pinned Erector fork for current Rails compatibility. Move the agent and its legacy dependencies to the extracted gem: https://github.com/huginn/huginn_human_task_agent Existing users can opt in without keeping these dependencies in Huginn core. Retain the historical database migration for existing HumanTaskAgent records. * Update CHANGES.md [ci skip] * Restore the direct mime-types dependency Removing rturk also removed mime-types through its rest-client dependency, but OpenaiSpeechAgent and FileHandling use MIME::Types directly. Declare the dependency explicitly instead of relying on an unrelated transitive dependency. * Switch mini_racer back to the released gem 0.22.1 includes the Clang 22+ build fix (rubyjs/mini_racer#397). * Prevent cross-user Service bindings Require Agent services to be owned by the same user or explicitly global, preventing GHSA-73v6-mq4f-33gw cross-tenant OAuth credential abuse. Disconnect and disable existing Agents with unauthorized private Service bindings during migration. * Keep Service fixtures within user boundaries Give Jane a private Service fixture and use it for Jane-owned Agents so the ownership validation does not make unrelated specs invalid. * Update development and test gems to v4.48.0 (huginn#3730) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update patch updated gems (huginn#3729) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Lock file maintenance (huginn#3728) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Akinori Musha <knu@idaemons.org> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: abc@pompel.me <abc@pompel.me> Co-authored-by: Dominik Sander <git@dsander.de> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Peter Upfold <pgithub@upfold.org.uk> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: tania paiva <taniadaniela1803@gmail.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: martadinata666 <2433562+martadinata666@users.noreply.github.com>
LLVM Clang 22+ treats -Wincompatible-pointer-types as an error by default, which breaks compilation of mini_racer_extension.c due to the unsigned long vs uint64_t mismatch in the bigint serialization code.
Add -Wno-incompatible-pointer-types to CFLAGS when the compiler rejects an unsigned long to uint64_t pointer conversion, as a workaround until the type mismatch is properly fixed in the extension source.
Ref: #359
Ref: #361