Changelog
View Source0.6.2 — 2026-05-11
Changed
- Widened the
maculadep from~> 4.0.0(which only allowed 4.0.x) to~> 4.3(≥ 4.3.0, < 5.0.0). macula 4.3.0 adds thestationMRI type + themacula_z32z-base-32 codec. This lets consumers (notablyhecate-daemon) drop the{overrides, [{override, hecate_sdk, …}]}block they were using to force the transitive macula pin up to 4.3.x. - Bumped the event-sourcing stack into lockstep with
hecate-daemon—reckon_db1.6.0→2.0.0,reckon_gater1.3.0→2.0.1,evoq1.9.1→1.14.4,reckon_evoq1.5.0→2.0.0. The pins were stale by a full major line (reckon_db/reckon_gater/reckon_evoq2.x carries thereckon_gater_types/reckon_gater_apirenames); the daemon was already resolving these to the 2.x line via conflict resolution, so this just makes the SDK's declared deps match reality. Compiles clean against the new set. app.srcsource link → Codeberg (hecate-social/hecate-sdk), the canonical home since the 2026-04-30 migration.
0.5.0 — 2026-03-15
Added
hecate_plugin_codegen— code generation for plugin scaffoldingplugin/1— full plugin skeleton (callback, supervisor, app.src, rebar.config, manifest.json)division/1— aggregate + state + state/status headers + CMD/PRJ/QRY department appsdesk/1— CMD desk (command, event, handler, API, tests), PRJ desk (projection, tests), QRY desk (page/by_id endpoint, tests)integration/1— emitter, listener, process manager, requester, responder (each with supervisor)- All functions idempotent (skip existing files), return
{ok, [FilePath]} - Templates split across 5 focused sub-modules for maintainability:
hecate_plugin_codegen_plugin— plugin + division templateshecate_plugin_codegen_cmd— CMD desk templateshecate_plugin_codegen_prj— PRJ desk templateshecate_plugin_codegen_qry— QRY desk templateshecate_plugin_codegen_integration— integration templates
- Designed for Martha's coder agent roles to call programmatically from BEAM
0.4.2 — 2026-03-15
Added
hecate_plugin_routes— route discovery from OTP app metadatadiscover_routes/1— scans app modules forroutes/0exports, collects route tuplesstrip_api_prefix/1— removes "/api" prefix to avoid double-nesting under plugin mount- Plugins no longer need to copy-paste route discovery logic
hecate_plugin_store:start_extra_stores/2— create additional ReckonDB stores- Takes base data dir + list of
{StoreId, SubDir, Label}specs - Handles directory creation, store startup, already_started, and error logging
- Takes base data dir + list of
hecate_plugin_store:start_subscriptions/1— start evoq event delivery for stores- Wires up
evoq_store_subscriptionfor each store ID
- Wires up
0.4.1 — 2026-03-15
Added
hecate_plugin_api— JSON API utilities for plugin Cowboy handlersjson_response/3,json_ok/2,3,json_error/3— consistent JSON responsesread_json_body/1— decode JSON request bodiesget_field/2,3— extract fields from maps with atom/binary key supportformat_error/1— convert error terms to binarysanitize_for_json/1— recursively convertundefinedtonullmethod_not_allowed/1,not_found/1,bad_request/2— standard HTTP errors- Built-in metric counting: api_requests on every response, api_errors on error responses
- Plugins no longer need to copy-paste api_utils modules
0.4.0 — 2026-03-15
Added
hecate_plugin_metrics— lightweight metrics facade using OTPcounters+ ETScounter/3for monotonically increasing valuesgauge/3for point-in-time valuesget_all/0andget_plugin/1for reading metrics?METRIC_INC,?METRIC_ADD,?METRIC_SETmacros inhecate_plugin.hrl
hecate_plugin_telemetry— auto-attaches to evoq and reckon-db telemetry events- 8 handlers: dispatch, projection, aggregate execute, stream write/read, subscription delivery
- Filters by
store_idfor per-plugin metric isolation
hecate_plugin_logger— OTP logger JSON formatter- One JSON line per log event with timestamp, level, message, plugin name
- Enriches output with logger metadata (plugin_name, mfa, pid, domain)
- Truncates messages at 4096 characters
- Optional
health/0callback onhecate_pluginbehaviour- Return
ok,degraded, or{unhealthy, Reason} - Plugins that don't implement it are assumed healthy
- Return
telemetryas explicit dependency (was transitive via evoq)- Observability guide (
guides/observability.md)
0.3.0 — 2026-03-14
- Add
hecate_plugin_llm— capability-based LLM model selection for pluginsselect_model/1— pick a model by capability tier (fast/balanced/smart)list_models/0— list all daemon-managed modelschat/2,3andchat_stream/3— delegate to daemon's serve_llm domain- Classifies models by name patterns (Claude, GPT, Gemini, etc.) and parameter size
- Optional provider filtering via
#{provider => <<"openai">>}
- Bump evoq dependency to 1.9.1
0.2.0 — 2026-03-09
- Add
flag_maps/0callback tohecate_pluginbehaviour- Every plugin with CMD aggregates exposes its bit flag maps
- Daemon auto-mounts at
GET /plugin/{name}/api/flag-maps - Frontends decode raw status integers into labels
- Add guide extras to ex_doc configuration
0.1.0 — 2026-03-09
Initial release.
hecate_pluginbehaviour with callbacks:init/1,routes/0,store_config/0,static_dir/0,manifest/0hecate_plugin_paths— standard directory layout for plugin datahecate_plugin_store— ReckonDB store creation and command dispatchhecate_plugin_cowboy— route prefixing and static file servinghecate_plugin_ws— WebSocket upgrade and JSON message framinghecate_plugin_validate— input validation with type checkinghecate_plugin_scheduler— periodic task schedulinghecate_plugin_ratelimit— token bucket rate limiterhecate_plugin_files— file upload/download helpers- Platform dependencies pinned: evoq, reckon_db, reckon_gater, reckon_evoq, cowboy, esqlite, macula, hackney, qdate, faber_tweann, faber_neuroevolution, gpb