Help
Changelog
Widget and API release notes.
The hosted line /embed/v1/ receives compatible updates in place; entries below describe what changed. Breaking changes would ship as /embed/v2/ and be announced here at least one release ahead.
1.1 (planned) — Known gaps scheduled for the next widget release
TBD
- Widget auto-recovery after a terminal setup error: today a widget that failed
GET /configor the session mint (403EMBED_ORIGIN_DENIED, 401EMBED_KEY_DISABLED, network) stays in its offline state until the page is reloaded, even after the key or allowlist is fixed. v1.1 retries on the next open / send. - Public npm packages for
@hive/embedand@hive/sdk(today: hosted bundle at/embed/v1/*and tarball / private registry).
1.21.0 — Approvals need a person for forced gates, tool grants document their capability policy, deployed versions in the header
2026-10-24
- Approvals (
/backend-approvals): in an organization workspace an item withrequested_action.forced_gate(payments, code execution, browser actions, connector or HTTP API writes, untrusted external agents, high-risk agents, grant obligations) is approved only by someone signed in to the console — an API key gets 403HUMAN_REQUIRED, though it may still reject it. A key decides as its owner, so it never approves its owner’s own runs while someone else can (403APPROVAL_SELF_DECISION). Live since the roll of 24 October 2026. - Tool grants (
POST /v1/tool-grants, REST reference): the body now documents the capability policy a grant carries —identity_mode(shared_connection|user|agent, withagent_federation_idforagent),max_access(read|write|destructive),approval(inherit|on_write|always) andexpires_at— and themasar/browser_skill/http_apisources with their ids. Omitted policy fields keep today’s behaviour (shared_connection,destructive,inherit, no expiry). A shared-connection grant that allows writes needstools:write; a grant that acts as the agent needstools:writeoridentity:manage— a key acts as admin and holds both. - Header badge: next to the docs release and the widget bundle, the portal shows the deployed platform API version (read server-side from the API’s public
GET /v1/meta/version, “—” when unknown). - Documentation only — the widget bundle,
/embed/v1/and every identifier are unchanged. Re-runsetup-hive(no--rotate) after deploy so the docs assistant picks up the change.
1.20.0 — Voice: keep talking while it works — queued input, pause-not-cancel barge-in, hesitation-aware turns
2026-10-24
- Voice WebSocket (
/v1/embed/voice,/v1/voice/session; see the Voice section of the REST reference): new server framessentence {run_id, index, chars}— sent before each sentence’s binary audio,chars= cumulative reply characters at its end —resumed {run_id}andinterrupted {run_id, heard_chars?}; the client’sbarge_ingainsheard_chars?(thecharsof the last sentence that fully played; absent on older clients, the server falls back to the lastsentenceit sent);turn.heard_charssays how much of a silenced reply was heard. Additive — a client that ignores the new frames keeps working. - Rule 1 — input while the agent THINKS is queued, never an interruption: each utterance (or typed
text) is transcribed at once (utterance.committed+transcript), up to four wait (oldest dropped) and everything queued runs as ONE merged follow-up turn after the current reply. A spoken "cancel" there cancels the run in flight. - Rule 2 — talking over the agent PAUSES its voice, never its work: on
barge_inthe server holds the audio, transcribes the interruption and answersresumedfor a short acknowledgment ("mm-hmm", "okay", "yes" and their Arabic equivalents) or "continue" — also after ~2.5 s of nothing — orinterrupted {heard_chars}when the speech stops for good: "enough" / "stop" ⇒ the run finishes silently, no new turn; "cancel" / "never mind" ⇒ the run is cancelled; anything else ⇒ the run finishes silently and the words become the next turn.mutenever cancels a run. The spoken commands match in English and Arabic. - Rule 3 — hesitation-aware turn ending: an utterance that trails off on a filler or connector ("and", "um", "focusing on", "such as" and their Arabic equivalents) is held up to 1.5 s (twice at most) for the rest before it is sent; typed text is never held.
- Widget: inherits the model through
@hive/voice-uiwith no host change — the orb pauses on speech, shows "Paused — go on" while held and "Got it — I’ll answer that next" when a remark is queued (the kit’s own EN/AR captions, notconfig.strings). - Threads: an agent message whose spoken reply was silenced carries the
voice_interrupted {heard_chars, at}message part (also written byPOST /v1/runs/:id/voice/interruptedfor the console’s live voice), so a transcript reader knows how much of it was actually heard. - Supersedes the "one running + one pending (latest wins)" model and its "still working — say that again in a moment" caption: nothing a person says is dropped in favour of a later remark any more.
- Documentation and protocol frames only — the widget bundle path
/embed/v1/is unchanged. Re-runsetup-hive(no--rotate) after deploy so the docs assistant picks up the change.
1.19.0 — People-only routes, reference drift fixes, 25 MB avatar models
2026-10-23
- API keys & authentication (
/backend-auth): some routes are for people only — changing a member’s role (making or demoting an owner included), custom roles, org-node roles and MFA answer 403HUMAN_REQUIREDto an API key (and to support sessions); removing an owner answers 403OWNER_REQUIRED(only an owner signed in to the console may); on a member’s private agent a key keeps admin governance reads and actions (manual runs and triggers included) but cannot open or post to its conversations (403AGENT_PRIVATE). Live since the access-control roll of 23 October 2026. - Run events:
tool.progress { idx, tool, data }— progress from a long-running built-in tool (today the prototype page builder: estimate, streamed page text, phase), flushed before the call’stool.result, and listed among the events the widget never relays. - Error reference:
VOICE_GLASSES_DISABLEDandVOICE_PROTOTYPE_DISABLED(403, a fatal frame, then close 1008) answer a widget voicehellothat asks for the glasses or prototype surface — only the console voice session grants those. - Talking avatars: a 3D model upload takes up to 25 MB (raised from 15 MB on 20 October 2026); a portrait photo stays at 5 MB.
- MCP (
/backend-mcp, error reference): a tenant may register astdioserver only when it is one bundled with the deployment — any other command answers 403MCP_STDIO_NOT_ALLOWED; servers your backend hosts usehttp. - Channels: an agent can carry its own voice (manifest
voice.tts, schema 2.17) for its spoken channel replies — honoured when its provider (defaultVOICE_PROVIDER) is the deployment’s configured speech provider and a model is known (its own orVOICE_TTS_MODEL); otherwise the platform voice speaks. - Documentation only — the widget bundle,
/embed/v1/and every identifier are unchanged. Re-runsetup-hive(no--rotate) after deploy so the docs assistant picks up the change.
1.18.1 — Memory graph — typed entities, document graphs switch off cleanly
2026-10-23
- Graph extraction (conversations and knowledge-base documents) types every entity from one vocabulary:
person,contact,organization,team,role,product,service,system,policy,procedure,document,place,event,time,amount,topic,other— a fact’s subject or object the model did not list takes the model’ssubject_type/object_type, else a type read from its name, instead ofunknown; a guessed type yields to a type the model states later.GET /v1/memory/graph/statsby_typereads accordingly. GET /v1/memory/graph/statswithview=agent:episodesandlast_extracted_atinclude the extractions of the agent’s knowledge bases.- Knowledge bases: turning
graph_extractionoff (PATCH /v1/knowledge-bases/:id) also removes the entities and facts extracted from that knowledge base (auditedkb.graph.updatewith the counts); documents and search are unaffected.
1.18.0 — Talking avatars, skill drafts, hyphenated workflow placeholders
2026-10-16
- New page "Talking avatars" (
/avatars). An agent’s face is a presentation attribute of the agent row (agents.avatar), never a manifest field, so saving it does not publish a new version. Three modes:2d(parametric look),3d(uploaded.glb/.vrm, ≤ 15 MB) andphoto(a stored portrait animated from five face points, consent required).PATCH /v1/agents/:idsetsmode,look,framingand photopoints;nullremoves the face and both files.POST /v1/agents/:id/avatar/from-photoreturns a look to preview and stores nothing (422 AVATAR_NO_FACE, usageavatar_vision_call).POST /v1/agents/:id/avatar/modelandPOST …/avatar/photostore the bytes (201); memberGETs serve them; adminDELETEs remove them. - On the widget the face is off until the embed key’s
config.avatar.enabledis true (size:compactin the header, orstagein::part(avatar-stage)).GET /v1/embed/configreturnsagent.avataronly then. REST reference gainsGET /v1/embed/avatar/modelandGET /v1/embed/avatar/photo(publishable key + origin, 6/min per IP shared,private, max-age=86400). The widget lazy-loadshive-embed-avatar.js, andhive-embed-avatar3d.jsfor a 3D face. This is separate from the 0.2.2 statictheme.avatarimage. The mouth follows voice audio while a voice session is live, and the streamed text otherwise. - Skills (6 October 2026):
PATCH /v1/skills/:idedits a row in place;kindandbodyare accepted only while that row is a draft (409 VERSION_IMMUTABLEon a published body).PUT /v1/skills/:idstill mints the next version —status: "draft"parks it,status: "active"publishes it and archives the slug’s current active version, andexpected_versionanswers409 VERSION_CONFLICTwhen a newer version landed first.GET /v1/skills?slug=lists one skill’s versions;?status=activeis one row per slug. - Workflow templates expand
{{outputs.<node-id>.text}}when the node id contains a hyphen (the designer’sagent-1ids). A missing path still expands to an empty string. - Memory graph (23 October 2026):
GET /v1/memory/graph/neighborhoodand/entitiestakeview=agent(withagent_id: what that agent can recall, plus the graphs of the knowledge bases its manifest uses),include_contactsandtypes(comma-separated entity types); a read naming a private agent is 404 for members other than its creator. NewGET /v1/memory/graph/stats(counts by type and scope, last extraction, the agent’s published learning switches withinclude_learning=true, and the backfill job’s state) and adminPOST /v1/memory/graph/backfill(build an agent’s graph from up to 50 recent live conversations;409 NOT_PUBLISHED | GRAPH_DISABLED | BACKFILL_IN_PROGRESS). Graph rows gain scopekbwithkb_id(mentions:document_id): facts extracted from knowledge-base documents when the organization’sallow_kb_graphand the KB’sgraph_extractionare both on — shown in the console, never recalled into an agent’s prompt;POST /v1/knowledge-bases/:id/graph/rebuild(admin) re-extracts up to 200 ready documents. - Documentation only for the widget bundle line:
/embed/v1/is unchanged. Re-runsetup-hive(no--rotate) after deploy so the docs assistant picks up/avatars.
1.17.0 — Console follow-ups — the detailed Observability Overview, one door per list, Workspace paging
2026-10-04
- Console (both variants, EN + AR): the Observability Overview is now the detailed operational dashboard — six sections top to bottom (Health & attention · Trends for the bar's window · Breakdowns by agent and channel · Ledgers all-time · Platform trends · Quality signals), charts and stats only, no hidden "System" disclosure; the Improve group overview is the lighter summary (runs · success · cost · tokens, two charts) that points at it. Every hub view gained the columns its job needs (Runs: Duration and the workflow sub-line; Approvals: "raised … / decided by …"; Audit: actor and target chips; Usage: Cost by kind and By model; Quality: a 2 × 2 chart row; Channels: Failed and Last message; Agents: Last run, In flight, Avg cost / run) and wide tables drop low-priority columns on narrower frames instead of scrolling sideways. Explanatory strips render above the lists they explain, every list has exactly one create door (empty states are text-only), Knowledge reads header → Documents → Knowledge sources → Test search ‖ Used by agents, and the Skills search placeholder is just "Search skills".
- Workspace: the chat rail pages with a keyset cursor — "Load older chats" at the end of the list, an end marker when there are no more; the header search button is gone (⌘K / Ctrl-K still opens the palette).
- API (additive, member-safe, same transaction and cache):
GET /v1/observability/overviewgainskpis.runs.failed_series,kpis.latency_series,kpis.approvals { raised, by_status, series },by_agent[].last_run_at,by_channel[].failed/last_message_atand aqualityblock (eval runs per bucket with pass rate; guardrail facets for admins only).GET /v1/usage/summarygainsby_kindandby_model.
1.16.0 — Console UX pass — group overviews, charts-first Observability, tidier hubs
2026-10-03
- Console (both variants, EN + AR): the navigation groups now read Home · Build · Operate · Improve · Quality · Governance · Admin, and every group lands on an Overview — KPI tiles, charts and links, no lists. Observability's Overview is charts-only; "Needs attention" and "Activity" are their own views (the health pill opens Attention). The Integration Hub keeps its expert tabs inside an "Advanced" view (
?advanced=<tab>still lands), the Knowledge view moved to/knowledge(?tab=knowledgeredirects), grids are aligned, and templates live inside the create flows (Evals "New suite" step 1); Contacts, Organization and Memory open their add forms as dialogs. Skills and Knowledge gained list toolbars. - API:
GET /v1/console/overview?group=build|operate|improve|quality|governance|admin— one member-safe read per group (admin-only sections answernull); cost and tokens follow the house usage rule (kind = runcost,tokens_in/tokens_outquantities) so Improve, Observability and Usage agree. Approvals: multi-approver rows now carrydecided_by_me(list, single read and the decision response) so a four-eyes card can state "1 of 2 approvals — awaiting a second approver" and hide the buttons from an approver who already decided. - Browser Skills follow-ups from the first production day: Recorder typing is delivered in order at any latency (keys queued behind an in-flight request go as one text insert — passwords stay masked), and the reject card localises the "no reason given" fallback in Arabic.
1.15.0 — Browser Skills — taught web actions under human approval
2026-10-03
- Browser Skills (console release of 3 October 2026, admin only): "Teach a browser action" on an agent's page (or Build → Integrations → Automation → "Browser action — taught") opens the Recorder in Action mode on a web system you own — sign in (the username and password are detected as a step and stored encrypted), do the action once, bind the values that change into typed parameters, mark the step that submits, add checks, pick the result fields, save with the ownership attestation and a per-skill approval policy (
always_before_run·at_commit_point·dry_run_only·none_for_idempotent_reads, with risk level, approver role, SLA andrequired_approvalsup to 3 — four-eyes at 2), then grant it to an agent. Agents callbrowser_skill:<slug>.run/.dry_run; replay is deterministic on the sandboxed browser, the model never sees a credential, and the approval card shows the pre-commit screenshot, the bound values and the landed URL before anything is submitted. New page:/backend-browser-skills. - API:
/v1/browser-skills/*(list · create · get · patch · delete ·:id/dry-run· runs incl.?agent_run_id=· grants · artifact proxy);POST /v1/approvals/:id/decisionrefuseseditwith422 APPROVAL_EDIT_FORBIDDENunless the skill allows edited parameters; the skill's policy terms tighten the approval row (risk, approver role, SLA, required approvals). Problem codesBROWSER_SKILL_NOT_FOUND | INVALID | ATTESTATION_REQUIRED | UNAVAILABLE | RUN_FAILED; auditbrowser_skill.*; usage kindbrowser_skill_run. Schema:browser_skills,browser_skill_runs(migrations 0161 + 0162, RLS). Console: JSON responses through the console's/v1proxy are now gzip/brotli-compressed; streams are untouched.
1.14.0 — The Observability Hub
2026-10-03
- Observability Hub (console release of 3 October 2026): Improve → Observability becomes one entry point for every signal — a shared filter bar (24h / 7d / 30d or custom dates · agent · workflow · channel · status · "Find by id" for a run, thread, approval, conversation or case id) that persists across eight views: Overview (KPI tiles with sparklines, "Needs attention" ranked worst first, one merged Activity timeline), Runs, Approvals, Audit, Usage, Quality, Channels and Agents. The former counters, trends, notifications and ledgers live under "System counters, trends & ledgers". Run pages open with a summary strip (status · agent · origin · duration · tokens · cost · error · who approved what · Evidence links). Every existing route keeps working and the pages now honour their deep links (
/runs?status=failed,/approvals?status=&run_id=,/usage?from=&to=,/audit?from=&to=). - API:
GET /v1/observability/overview(windowed KPIs, attention, activity, per-agent and per-channel health — observability:read, member visibility applied, 20 s cache) andGET /v1/observability/find?id=;GET /v1/runsacceptsfrom/to;GET /v1/approvalsitems carrydecided_by_name. No schema change.
1.13.0 — Masar Recorder — teach by example; grounded citations; sorted queries
2026-10-02
- Masar Recorder (console release of 2 October 2026, admin only): "Teach by example" on the Masar wizard opens a sandboxed browser in the console — browse (and sign in to) a system you own, switch to Select, pick fields, select all similar rows, mark the pager, test the draft live on another page and save it as an ordinary Masar source. The routes are
/v1/masar/recorder/sessions/*on the/backend-masarpage (start · SSE stream of frames · input · inspect · highlight · pick · similar · test-extract · save · stop); saving requires the terms attestation and an ownership attestation; a stored session or sign-in credentials are AES-256-GCM at rest and never returned by any route. Replay happens only inside the governed refresh crawl (bounded steps, same SSRF and scope checks per page). Caps: 2 sessions per tenant, 4 per process, 10 minutes idle, 45 minutes maximum;503 MASAR_RECORDER_UNAVAILABLEwhen no browser sandbox is configured. - Grounded citations: an agent turn that cites
masar:<slug>#<version>/<row>is checked against the Masar tool results actually received in that turn. Verified answers carry the "Masar citations verified n/n" marker in the Workspace; an ungrounded cite is annotated in the answer and audited asmasar.cite.ungrounded. masar:<slug>.queryacceptssort: { field, dir }(nulls last) over the latest snapshot and says so in its description; a truncated result states how many of the total rows were returned so the agent does not report an aggregate over a partial page as the whole.
1.12.0 — The Integration Hub
2026-10-02
- Integration Hub (console release of 2 October 2026): the Integrations page gains an "All integrations" landing list across every type — type badge, one status vocabulary (Connected · Not checked yet · Needs credentials · Credentials rejected · Broken · Disabled · Awaiting first event), last activity, Check now / Test where the type has a probe, Open — and ONE "Add integration" door: a chooser grouped by purpose (Tools & data · Agents elsewhere · Channels · Automation · Knowledge) whose cards say what you will need and launch each type's existing setup (Connect a system, Masar, Foundry, external agent, channel wizard, or the trigger / webhook / knowledge form opened on arrival via
?new=1). Six views replace the seven tabs; every old?tab=deep link still resolves (connectors/masar→ Tools & data,external-agents/foundry→ Agents elsewhere). External agents gain a standard-console surface./tools?add=<type>deep-links a type's setup. No API change.
1.11.0 — Masar: any website as a structured source
2026-10-01
- New page under Backend integration: "Masar: any website as a structured source" (
/backend-masar). Masar turns any website into a structured, queryable source for your agents without an API: a source definition (entry URLs and scope, ordered extractors —dom,network,readability,pdf,vlm,ocr— a JSON Schema you own, key fields, a cron schedule at least 15 minutes apart, politeness and vision caps, a terms attestation),POST /v1/masar/discoverandPOST /v1/masar/test-extractto see what a page really loads and preview records with per-field provenance before saving, sources CRUD under/v1/masar/sources,POST …/refresh(202 with the queued run; 409MASAR_RUN_IN_PROGRESS), runs, versioned snapshots with provenance and a diff between any two versions, screenshot artifacts and the domain-neutral starter templates. TheMASAR_*error codes, themasar.*audit actions and themasar_page/masar_vlm_callusage kinds are listed. Documentation only — the widget bundle,/embed/v1/and every identifier are unchanged; re-runsetup-hive(no--rotate) after deploy so the knowledge base picks up the new document. - Agents consume a source through three generated tools —
masar:<slug>.query(typed filters over the latest snapshot, every record cited asmasar:<slug>#<version>/<row>,stalepast the source’s max age),masar:<slug>.latest(what changed, how old) andmasar:<slug>.refresh(enqueues a crawl; always requires a human approval, not relaxable) — declared as manifesttools.masar[]and granted byPOST /v1/integrations/attachwithconnector.kind = "masar"orPOST /v1/tool-grantswithsource: masar+masar_source_id. Posture stated on the page: robots.txt honoured and not switchable, identified crawler, politeness limits, every URL through the SSRF policy, no challenge or paywall bypass,nullwith a reason instead of a guess. The page closes with six shapes served by one engine — a central-bank exchange-rate table, a JavaScript search page read from its own JSON request, a news list, a publication page with its PDF, a photographed notice read by OCR / a vision model, and a public procurement board — to make "any website" concrete. Honest status: implemented and verified locally on 1 October 2026; authenticated sites, navigation actions, change webhooks and a knowledge-base feed are roadmap (Next).
1.10.0 — Azure AI Foundry project connection
2026-09-29
- New page under Backend integration: "Connect your Azure AI Foundry project" (
/backend-foundry) — the project-level/v1/foundry/*surface that complements registering one Foundry agent as an external agent. Connections CRUD (POST /v1/foundry/connections, write-only Entra client credentials,project_endpointpinned tohttps://*.services.ai.azure.com/api/projects/*,…/test), inventory and inspect (GET …/agents,GET …/agents/:name, classic…/threads/…/runs), native…/invokeon both Foundry API generations,…/linkinto the external-agents registry,…/importand offlinePOST /v1/foundry/import-definitionto a draft agent with a fidelity report, andPOST …/:id/publishwithdry_run. Request / response shapes from the API’s Zod schemas, theFOUNDRY_*error codes, the required Entra role (Foundry User, not the invoke-only Foundry Agent Consumer) and a "connect your Foundry project" quickstart. - Status is stated on the page and in the docs assistant’s knowledge base: the surface was verified live once on 29 Sep 2026 against a Foundry project — inventory, inspect, invoke, import-to-draft and publish (prompt agents only; hosted/container agents not supported); vector stores, Toolboxes and evals are referenced, not copied, and
kb.searchis omitted on publish until a vector store is bound. Two first-contact facts are documented: the agent-endpoint Responses route needs noFoundry-Featuresheader, and re-publishing an existing name is a Foundry409thatPOST /agents/{name}/versionsdeduplicates (the existing version comes back for an identical definition). The page closes with the cheapest Foundry configuration to demo against (Microsoft list prices, 29 Sep 2026). Documentation only — the widget bundle,/embed/v1/and every identifier are unchanged; re-runsetup-hive(no--rotate) after deploy so the knowledge base picks up the new document.
1.9.0 — Docs assistant covers the whole portal
2026-09-26
- The playground docs assistant ("Ask me") now answers from every portal area, not only the embed SDK: its knowledge base grows from 11 to 19 documents — backend integration (API keys and
X-Tenant-Id, runs and SSE, triggers and workflows incl. BPMN import, MCP servers your backend hosts, outbound webhooks andHive-Signature, approvals, provisioning as code), the reference implementation, external agents in both directions (registering Foundry / Copilot Studio / Claude / watsonx / OpenAI / Bedrock / any A2A agent; exposing platform agents over A2A and as MCP tools atPOST /v1/mcp), the platform API and SDKs, and the examples / support pages. A coverage guard (test/kb-coverage.test.ts) pins every nav page to a document that names its route. - The assistant persona (
content/assistant.ts) is one module shared byscripts/setup-hive.tsand the playground: a wider scope statement, a greeting that names the new areas, and six starter questions — one per portal area — published as the agent manifest'sidentity.starter_questions(≤ 6 items of ≤ 200 chars). The grounding rules now cover runs, workflows, external agents, A2A, memory, connectors, channels and provisioning, tell the widget-vs-backend readings of "webhooks" and "MCP" apart, and call anything the docs label "Next" / "roadmap" out as not available today. - Playground: the starter questions render as suggestion chips in the widget's
suggestionsslot (light-DOM children of<hive-chat>, styled by the page; a tap sends the question) — the same pattern a host page uses. Documentation and playground only: the hosted bundle line,/embed/v1/, every identifier and the publishable key are unchanged. Re-runsetup-hive(no--rotate) after deploy so the knowledge base and the agent version pick this up.
1.7.0 — BPMN 2.0 import
2026-09-17
- REST reference gains
POST /v1/workflows/import/bpmn(Triggers & workflows): import a BPMN 2.0 diagram exported from Camunda Modeler / bpmn.io, Camunda 7, Signavio, Bizagi or Visio into a NEW draft workflow. JSON (xml) ormultipart/form-data(file+ optionalbody), 2 MiB cap,<!DOCTYPErefused before parsing.dry_run: truereturns{ draft, report, preview }without persisting anything; commit returns201 { workflow, version, report }and never publishes. - The import report lists every BPMN element with its mapping (
mapped/approximated/placeholder/dropped/unsupported), a confidence and{ code, params }notes + fix-it hints, the bindings required (agent-like tasks andparallelbranches → your published agents;callActivity→ a published workflow), every translated guard (FEEL / JUEL / JavaScript single comparisons; anything else becomes an obviously named never-true placeholder), trigger suggestions (message start → webhook, timer cycle → cron; created DISABLED only withcreate_triggers: true), lanes and layout. Commit without bindings answers422 INVALID_GRAPH { unbound[] }. - Optional
enrich: true(default off) makes one model call over element names, documentation, engine hints and lanes — never the XML — and attaches binding / department suggestions post-filtered to the tenant’s published agents and org nodes; nothing is applied without a client action and a model failure leavesreport.enrichment.status = "unavailable"with the request still succeeding. - Workflow graphs gain an optional, additive
metaon nodes (bpmn_id,name,description,lane,position,hints) and edges (bpmn_id). The runtime ignores it; the designer now persists node positions inmeta.positionfor every workflow. Existing graphs validate unchanged. Error table gains 422BPMN_PARSE_ERROR, 422BPMN_NO_PROCESS, 413/422BPMN_TOO_LARGEand documentsINVALID_GRAPH. - Widget bundle
0.5.0: the hands-free voice composer (1.6.0) had shipped under the unchanged package version0.4.1, so browsers holding the hour-long cachedhive-embed.jskept the pre-voice widget.HiveChat.versionnow reports0.5.0; host pages that pin the loader URL should move their cache-buster tohive-embed.js?v=0.5.0. The hosted path/embed/v1/and every identifier are unchanged.
1.6.0 — Hands-free voice on the widget and in the console
2026-09-17
- Voice on the widget:
voice: { handsfree, ptt }on the embed key (config.voice, both default false) and as a host option (tighten-only).GET /v1/embed/configreturns the EFFECTIVE flags (deployment ∧ tenantallow_voice_handsfree∧ agent manifestvoice∧ key); the mic renders only when one is true. - REST reference gains
POST /v1/embed/voice/ticket(single-use 60 s ticket, bearer session) and theGET /v1/embed/voice?ticket=WebSocket (JSON control frames + 20 ms PCM16 16 kHz binary frames up;ready/state/utterance.committed/transcript/turn.started/agent.delta/audio_start+ audio /replace/interrupted/turn/errordown). Runs execute on the worker like every embed message; deltas are withheld under output guardrails exactly like the SSE relay. New error codes: 403VOICE_DISABLED, 403VOICE_HANDSFREE_DISABLED, 401VOICE_TICKET_USED, 429VOICE_BUSY, 429VOICE_RATE(non-fatal per-utterance budget / fatal uplink flood), 400VOICE_SESSION_PROTOCOL. - Hosted bundle line gains
hive-embed-voice.js— the orb, captions and controls, loaded lazily on the first mic tap so the core widget stays under its 30 KB budget. Host events:hive:voice { state, transcript? };hive:statusgainslistening/thinking/speaking. - Agent manifest 2.11: the
voiceblock (handsfree.enableddefault false,handsfree.barge_in,handsfree.eagernesspatient|normal|eager,handsfree.max_session_sec,pttdefault true). Spoken turns metervoice_stt(ms) andvoice_tts(characters) on usage events.
1.5.0 — Memory graph, attachments, voice replies, identity and memory
2026-09-16
- New page "Memory & the memory graph" (Backend integration): scope-explicit long-term memory (
tenant/agent/end_user; a run never sees another contact’s rows,memory.savedefaults to the served contact’s scope,long_term.user_modelingis a no-op), the temporal knowledge graph (typed entities, dated facts withvalid_from/valid_to, episodes with a digest and never a transcript), contradiction ⇒ invalidate-never-delete and same-triple supersession, the run-time prompt block and the read-only builtinsmemory.graph_search/memory.graph_explain, thememory.graphmanifest block (schema 2.10, tighten-only, every field), human authoring and the DSAR / retention coverage (GET /v1/tenants/current/exportcarriesmemory_graph,POST /v1/end-users/:id/eraseremoves the contact’s graph). - REST reference gains the twelve
/v1/memory/graph/*endpoints (entities, entity detail with timeline and possible duplicates, neighborhood, search returning the exact prompt block, edge with provenance, episode, assert fact, patch edge, patch entity, merge, forget edge / entity) with request, response, audit action and errors; the error table gains 409SCOPE_MISMATCH, 409ENTITY_NAME_TAKENand 503UNAVAILABLE(embedding gateway not configured). Drift guards pin every route, body and query field to the platform’s Zod schemas and the manifest fields tographMemorySchema. - Runs:
POST /v1/threads/:id/attachmentsis documented — PNG, JPEG, WebP, PDF ≤ 20 MB, metadata-only response with the PDF’s totalpage_count(415UNSUPPORTED_TYPE, 413FILE_TOO_LARGE) — together with the vision caption contract: every image the model receives is preceded byAttachment <n>: <filename> (<mime>, page <p> of <total>), recorded on thellmstep underinput.vision. - Approvals:
requested_action.reasoning_summaryis never empty — the model’s words when it wrote any, otherwise a deterministic sentence naming the tool and its argument names (never values). - Channels: WhatsApp media in (voice notes transcribed, images and PDFs as vision attachments — on the linked-device path too) and opt-in spoken replies out (
voice_replies: truein the channel config; push-to-talk notes when the output is Opus, text fallback recorded asvoice_fallback), plus the platform voice settings (VOICE_PROVIDERopenai_compatible|elevenlabs, models, voice id,VOICE_LANGUAGE_CODE,VOICE_TTS_OUTPUT_FORMAT). - Authentication & security: "What identity buys you" — a signed identity JWT maps the visitor to one contact, so long-term memory and the memory graph are per person and never shared; the same contact is what an erase request wipes. Documentation-only release for the widget: the hosted bundle line stays
/embed/v1/. Re-run the docs assistantsetup-hive.tsafter deploy so the knowledge base picks up the new pages.
1.4.0 — Widget 0.4: native charts and synchronized results
2026-09-14
- The chat plugin now renders schema-validated bar, line, pie and KPI results directly inside the transcript with fixed safe markup. Chart-shaped
jsonfences and full-message chart JSON are accepted as model-tolerance fallbacks, while malformed specifications remain escaped code. blocks.rendernow acceptsinline,host, orboth;bothkeeps the inline chart and emitshive:blockso a host dashboard can render the same validated result. Streaming source is suppressed and history restores the visual without replaying host side effects.- Bundle version
0.5.0; the hosted URL remains/embed/v1/.
1.3.2 — Widget 0.2.2: phone sheet ergonomics, slots, avatar
2026-09-06
- On a phone (≤ 480 px, launcher mode) the open panel is now a real bottom sheet: it is sized from
window.visualViewportso the composer stays above the on-screen keyboard on iOS Safari and Android Chrome (resizes-visual), the page behind it is locked (no rubber-band, no URL-bar jump; scroll position restored on close),aria-modal="true"while full-screen, the dialog — not the textarea — takes focus on open (no surprise keyboard), a grab handle (::part(handle)) with swipe-down-to-close, 44 px tap targets andsafe-area-inset-bottompadding. Desktop, tablet and inline mode are unchanged. - Named slots
noticeandsuggestions: light-DOM children of<hive-chat>with a matchingslotattribute render between the transcript and the composer, styled by the host page. Empty by default. - New theme field
avatar(server-side on the key or localtheme.avatar): anhttps://URL or same-origin path drawn as the header avatar image instead of the letter/emoji chip.data:and protocol-relative values are dropped. Bundle version0.5.0; the hosted line stays/embed/v1/.
1.3.1 — Widget 0.2.1: styleable error/status rows, copy overrides, retry_after
2026-09-06
- The widget’s failed-turn row (and the offline notice) is now
part="error"with the problem code indata-code, and the in-flight row ispart="status"(data-status:sending|working|waiting) — a host page that renders its own error copy can hide or restyle the widget’s (hive-chat::part(error) { display: none }). Before 0.2.1 the shadow DOM exposed no part for either row. - Visitor-facing copy no longer includes the raw problem code: 0.2 appended "(RATE_LIMITED)" to the generic error text; 0.2.1 shows only the copy and keeps the code in
data-code/hive:error. - New
stringsoption ({ en?, ar? }, programmatic only; Reactstringsprop): per-locale overrides forerror,retry,offline,waiting,sending,workingand the widget labels. Unset keys keep the built-in text — hosts that pass nothing see exactly the 0.2 copy (tested). hive:errordetail gainsretry_after(seconds) when the API problem carried it — today429 RATE_LIMITED— so a host can show a real countdown;undefinedfor every other failure. ReactonErrorreceives the same object. ESM build exportsresolveStrings. Bundle version0.5.0; the hosted line stays/embed/v1/, no server changes.
1.3.0 — Widget 0.2: host-rendered blocks and conversation status
2026-09-06
- New
blocksoption ({ languages, render: 'host', placeholder? }, programmatic only): a fenced code block in an agent reply whose language is listed is removed from the bubble — a "Shown on the page ↗" chip (::part(block-chip)) takes its place — and reaches your page as ahive:blockevent ({ lang, source, index, message_id }, one per fence, in document order) once the message is final. Listed fences are suppressed while the reply streams; a restored thread lifts the fence but fires no event; unlisted languages still render as code.sourceis untrusted model text — parse and validate it, never inject it as HTML. - New
hive:statusevent ({ status: idle | sending | streaming | waiting | error }) on every conversation-state transition,idleright afterhive:ready, so a host composer can disable itself while a turn is in flight instead of hitting409 EMBED_RUN_IN_FLIGHT. - Behaviour change for 0.1 hosts: a
run.failedstream event now also fireshive:errorwith the run’s problem code (MODEL_ERROR,BUDGET_EXCEEDED,RETRIES_EXHAUSTED,TOOL_ERROR, …) — previously such failures only showed in the bubble. ExistingonError/hive:errorhandlers therefore see more events; the bubble copy is unchanged andBUDGET_EXCEEDEDstill puts the widget in the resting state. - React wrapper:
blocksprop plusonBlockandonStatuscallbacks. ESM build exportsliftFences(the widget’s fence parser) andresolveBlocks. Bundle version0.2.0; the hosted line stays/embed/v1/, no server changes.
1.2.3 — Bearer mode documented: basePath, authToken, binding, setAuthToken()
2026-09-04
- Configuration reference gains the three
HiveChatOptionsthe widget accepted without documentation:basePath(attributebase-path; the API path underapiUrl, default/v1/embed),authToken(auth-token; a pre-issued bearer — no session mint,Authorization: Beareron every request,keyoptional, a 401 pauses the widget withhive:auth-expireduntil the host supplies a new token) andbinding(binding; names the declared agent, sent as?binding=on the config read and in every message). None has a loaderdata-*form. A new "Bearer mode" section states plainly that these exist for platform surfaces mounting the embed protocol elsewhere (today the prototype agent bridge) and that embedding on your own site keepskey+user.token. - JavaScript API reference:
setAuthToken(token)on the handle and on<hive-chat>(swap the bearer in place, resume a paused widget,hive:auth-resumed);update()listsbasePath/bindingamong the options that re-mint and a newauthTokenas a token swap;init()reuse keyed bybasePath+bindingwhen there is no key. - Events reference gains the two bearer-mode DOM events
hive:auth-expired({ code }— the pre-issued token was refused with a 401; sends pause untilsetAuthToken()) andhive:auth-resumed(a replacement token resumed the paused widget, same thread). The React wrapper@hive/embed/reactmaps them to the newonAuthExpired/onAuthResumedcallback props (listed on the React page next toonError); the events drift guard now enforces hyphenatedhive:*names, so every event the element emits must carry a documented React prop. - Error reference: the drift guard now reads every
apps/api/src/routes/embed*.tsandapps/api/src/lib/embed-*.tsfile —EMBED_RUN_IN_FLIGHT,EMBED_THREAD_FULL,EMBED_TOO_MANY_STREAMSandAGENT_NOT_PUBLISHEDmoved into the sharedembed-threads.tshelper — and follows the relay’s caller-supplied problem code, so a helper extracted from a route cannot leave the guard. Codes, statuses and remedies are unchanged. Documentation-only release for the widget: the hosted bundle line stays/embed/v1/.
1.2.2 — Console workstream in production; catalog = connection kinds
2026-09-04
- The console behaviour documented in the Integration types section — Integrations hub, "Connect a system" wizard, health badges and background sweep, per-agent Connected systems, the five
/v1/integrations/*and connected-systems routes — is in production since the 2026-09-04 console release (W1 Now-A + Now-B). Every "shipping in the next console release" / "coming soon" note now reads available; the "New in this release" rows read Available. - Catalog wording corrected to the product decision of 2026-09-04:
GET /v1/integrations/catalogand wizard step 1 list connection kinds for real systems only — MCP server (API key, bearer or no auth), PostgreSQL / SQL Server / Oracle, remote agent (A2A). No demo, sandbox or mock-data card ships; vendor templates are Next. Demo tenants register their own servers through their setup scripts, and the two government MCP templates are platform rows registered by operations, not catalog cards. - Documentation-only release for the widget: the hosted bundle line stays
/embed/v1/. Re-run the docs assistantsetup-hive.tsafter deploy so the knowledge base picks up the new wording.
1.2.1 — English-only documentation
2026-09-04
- The portal is English-only documentation: the Arabic canonical sentence, definitions, table columns and labels added in 1.2.0 are removed, and a new guard (
english-only.test.ts) fails the build if Arabic-script prose reappears on a page, in a content module, in the docs assistant knowledge base or in search. The platform itself remains bilingual — the widget, console and docs assistant still support Arabic, and the docs say so in English. Documentation-only release.
1.2.0 — Integration types section
2026-09-04
- New "Integration types" documentation group: the overview (
/integrations) with the canonical sentence, the four types, the four-layer diagram, definitions, the governance triad, MCP in both directions, what is true today vs. what is Next, and the "New in this release" box; plus one page each for connectors, tools & grants (kinds, connections and health states, grant resolution, approval policies vs. manifest rules, the five-step "Connect a system" path, API mapping), channels (kinds with availability status, widget vs. web chat endpoint, WhatsApp policy), knowledge sources (kinds, sync,kb.search, document permissions) and automation (triggers in, outbound webhooks out). - Vocabulary is the integrations glossary, verbatim; a new drift guard (
drift-vocabulary.test.ts) pins every definition and the canonical sentence to the committed glossary, rejects retired words across the portal prose, and requires every roadmap item to carry the visible label "Next" (MySQL only as Next; Teams, Slack, SMS and Voice "with your provider credentials"). - Existing pages reworded around the four types: "Choose your integration" names the type each answer maps to, the home page links the new section, the REST reference group for
/v1/mcp-serversis titled "Connectors (MCP servers), connections and tool grants". Search indexes the types, definitions, connector kinds, health states and channel kinds. The docs assistant knowledge base gains an integration-types document (re-runsetup-hive.tsafter deploy). - Console behaviour that ships with the next console release (Integrations hub, "Connect a system" wizard, health badges, starter catalog, per-agent Connected systems,
/v1/integrations/*) is described as "shipping in the next console release" / "coming soon" — not as available. Documentation-only release for the widget: the hosted bundle line stays/embed/v1/.
1.1.0 — Backend integration section
2026-09-03
- New "Backend integration" documentation group: choose your integration, overview and reference architecture, API keys and authentication, starting runs (threads, one-off runs, SSE), triggers and workflows, exposing your systems with MCP, webhooks, human-in-the-loop approvals from your own UI, how the demo portals do it, and provisioning as code.
- Runnable example
examples/backend-integration-node: an Express "orders" backend with a signed trigger, an MCP server, a signed-webhook receiver, an approvals proxy and an idempotent provisioning script (setup-hive.mjs,--teardown). - Drift guards pin the documentation to the platform source: registered routes, error codes, signature schemes (the example’s signing helpers and the Python samples are executed against the platform signer), webhook retry policy, SSE and status vocabularies, SDK method tables, workflow/approval semantics, rotation semantics, and lifecycle-webhook emission.
- Documentation-only release for the widget: the hosted bundle line stays
/embed/v1/.
1.0.1 — Portal rebranded to Agentic Workforce ME
2026-09-03
- The portal is now the Agentic Workforce ME Developer Portal (header shows the product mark and name; metadata, home page, playground greeting and example titles updated). Documentation-only release.
- Shipped identifiers are unchanged:
@hive/embed,HiveChat,<hive-chat>,hive:*events,hive_pk_…keys, theX-Hive-Embed-Keyheader,/embed/v1/hive-embed.jsand theEMBED_*error codes. The FAQ explains the codename they carry. - The playground assistant is now named "Agentic Workforce ME docs assistant".
1.0.0 — Initial release of the embed surface
2026-09-03
- Hosted bundle line
/embed/v1/(hive-embed.js,hive-embed.mjs,react.mjs); the bundle reports build0.5.0viaHiveChat.version. <hive-chat>Web Component with Shadow DOM isolation, launcher and inline modes, English + Arabic (RTL), Markdown rendering, streaming replies, thread persistence, keyboard and screen-reader support, mobile full-screen below 480 px.- Script-tag loader:
data-*auto-init,window.HiveChat.initcommand queue,apiUrlinferred from the script origin. - React wrapper
@hive/embed/react(<HiveChat embedKey=… />) withonReady/onSession/onOpen/onClose/onMessage/onError. - Public API
/v1/embed/*: config (key in theX-Hive-Embed-Keyheader, fetched on page load), session (15-minute HMAC tokens scoped to tenant + key + agent + origin + visitor, minted lazily on first open or first send), messages, thread history, redacted SSE relay (text deltas and anonymoustool.called/tool.resultwith stepidx), cancel. Per-key CORS allowlists, fail-closed. - Publishable embed keys
hive_pk_…(hashed at rest) with origin allowlists, server-side theme/config (includingbranding_url), per-key rate limits, enable/disable, rotate and revoke — console Embed tab and admin/v1/embed-keysAPI,@hive/sdkembedKeysresource. - Identified end users through backend-signed HS256 identity JWTs (
sub,name,email,meta,exp≤ 24 h, optionaliat/nbfwith clock-skew checks); contacts upserted with PII tags. - Rate limits: 60 config reads/min and 30 session mints/min per IP, session mints per key at 10 ×
rate_limit_per_min, keyrate_limit_per_min(default 60) for messages, 20 messages/min and 60 reads/min per visitor, 2 concurrent event streams per visitor, 200 messages per thread, one in-flight reply per thread (409 EMBED_RUN_IN_FLIGHT). - Constructed-stylesheet CSS so strict host CSPs need only
script-srcandconnect-srcadditions.