Skip to content

Releases: inspr-at/aithema

v261022020419.0.0

Choose a tag to compare

@github-actions github-actions released this 22 Oct 05:50
Immutable release. Only release title and notes can be modified.

Aithema 2026.10

Version 261022020419.0.0. Licensed under AGPL-3.0-only.

Nineteenth October release: the email dialog stays put while you edit your address.

What START and visitors notice

  • Email address editing (AIT-454): Your address edit stays open and the dialog
    no longer jumps when a reply finishes.

For hosts

Visitor behaviour (AIT-454). Repeated verified-identity refreshes keep an
address edit open; a host that overrides the verification copy sees no change
to that copy.

Test-only (AIT-455). The consent cross-tab suite releases a headerless socket
and gives browser and HTTP teardown named 10-second deadlines so teardown cannot
hang a browser shard.

CI-only (AIT-456). Unit tests run in three shards balanced by measured duration
under the single required test check, with unchanged caps and support for new
test files and partial re-runs.

RC14's host requirements
still apply, including its breaking changes; Aithema recommends checking those
requirements before upgrading from an earlier release.

Breaking for hosts

None relative to RC18 (v261021222022.0.0). The #408 diff changes visitor
behaviour only, with no new public export, configuration key, HTTP status code
or host integration requirement; #407 is test-only and #409 is CI-only.
START integrates and pins this release separately.

Availability and verification

The sixteen-module release closure is unchanged. Voxtral (AIT-342) remains
parked, private and outside this release. Provider-side closure of a live call
(AIT-446's second part) remains parked until ElevenLabs monitoring is enabled.
Grok Voice is not yet qualified in live use. No provider credentials are
bundled.

Release assets include module tarballs, the workspace archive, dependency locks,
an SPDX SBOM and release-set.json. Verify the published attestations and
SHA256SUMS before installation, following
RC14's verification and installation instructions
with tag v261022020419.0.0 in every download and installation URL. Retain the
verified assets, manifest and deployment pin for rollback to those exact bytes.
See the embedding guide
for host integration.

v261021222022.0.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 23:13
Immutable release. Only release title and notes can be modified.

Aithema 2026.10

Version 261021222022.0.0. Licensed under AGPL-3.0-only.

Eighteenth October release: voice minute limits hold across reconnects, and call lengths between whole minutes work.

What START and visitors notice

  • Minute limits across reconnects (AIT-450): voice calls keep to the site's
    minute limit when they reconnect.
  • More call lengths work (AIT-451): calls whose maximum length is between
    whole minutes can now start.

For hosts

Voice minute caps (AIT-450). “The total and UTC-day minute caps likewise
reserve maxDurationSeconds for every credential, initial and recovery,
including rolling bindings.” Admission refuses before provisioning when either
cap cannot hold the full credential, even when less time remains in the call;
settlement and reconciliation use actual provider seconds, including paused
provider time.

Per-minute rounding (AIT-451). Per-minute voice amounts now use one integer
ceiling formula, ceil(seconds * microPerMinute / 60): “These amounts use the
shared integer ceiling helper, including non-whole-minute durations.” Call
lengths between whole minutes can now boot without “Invalid duration binding”.

RC14's host requirements
still apply, including its breaking changes; Aithema recommends checking those
requirements before upgrading from an earlier release.

Breaking for hosts

None relative to RC17 (v261021194038.0.0). The #405 diff adds one public
export, perMinuteCostMicro, to @inspr/aithema-core (also at
@inspr/aithema-core/cost); it is additive. It changes no configuration keys or
HTTP status codes and adds no host integration requirement. Minute admission is
stricter: a call or recovery may now be refused when either minute cap cannot
reserve the full maximum call.
START integrates and pins this release separately.

Availability and verification

The sixteen-module release closure is unchanged. Voxtral (AIT-342) remains
parked, private and outside this release. Provider-side closure of a live call
(AIT-446's second part) remains parked until ElevenLabs monitoring is enabled.
Grok Voice is not yet qualified in live use. No provider credentials are
bundled.

Release assets include module tarballs, the workspace archive, dependency locks,
an SPDX SBOM and release-set.json. Verify the published attestations and
SHA256SUMS before installation, following
RC14's verification and installation instructions
with tag v261021222022.0.0 in every download and installation URL. Retain the
verified assets, manifest and deployment pin for rollback to those exact bytes.
See the embedding guide
for host integration.

v261021194038.0.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 20:14
Immutable release. Only release title and notes can be modified.

Aithema 2026.10

Version 261021194038.0.0. Licensed under AGPL-3.0-only.

Seventeenth October release: enough credit before a voice call starts, clearer address-limit messages, and more space for phone exports.

What START and visitors notice

  • Credit checked before a call (AIT-447): a voice call starts only when
    enough credit can be set aside for its maximum length.
  • Clearer drafts status (AIT-445): while an email address has used up its
    daily limit, the drafts status says so, using the same words as the daily-limit
    message. German “E‑Mail” stays together on one line; the phone layout keeps
    its existing positions.
  • More room to export on phones (AIT-448): when credits are used up, the
    export action has its own row with a 12 px gap. Desktop spacing stays the same.

For hosts

Voice admission (AIT-447). “A call starts only when the full maximum call can
be reserved.” Every voice segment, initial and recovery, including rolling
bindings, reserves the full credential liability before facade provisioning or
credential issuance; admission fails closed when any ledger or owner limit
cannot fund that liability, or when the logical deadline is exhausted, and a
refused renewal still ends the call at the current funded segment's end.

Credit-copy overrides (AIT-445). The drafts status now uses
hostSurface.credits.dailyCap while the address day cap holds, in place of the
usual drafts status: “This email address has reached today's limit.” in English
and “Für heute ist das Tageslimit dieser E‑Mail-Adresse erreicht.” in German.
Hosts that override this copy should check the same text in both locations.

RC14's host requirements
still apply, including its breaking changes; Aithema recommends checking those
requirements before upgrading from an earlier release.

Breaking for hosts

None relative to RC16 (v261021073740.0.0). AIT-447 makes admission stricter:
previously admitted calls may now be refused when the full liability cannot be
reserved. The #402 diff changes no public exports, configuration keys or HTTP
status codes and adds no host integration requirement. START integrates and pins
this release separately.

Availability and verification

The sixteen-module release closure is unchanged. Voxtral (AIT-342) remains
parked, private and outside this release. Provider-side closure of a live call
(AIT-446's second part) remains parked until ElevenLabs monitoring is enabled.
Grok Voice is not yet qualified in live use. No provider credentials are
bundled.

Release assets include module tarballs, the workspace archive, dependency locks,
an SPDX SBOM and release-set.json. Verify the published attestations and
SHA256SUMS before installation, following
RC14's verification and installation instructions
with tag v261021194038.0.0 in every download and installation URL. Retain the
verified assets, manifest and deployment pin for rollback to those exact bytes.
See the embedding guide
for host integration.

v261021073740.0.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 08:56
Immutable release. Only release title and notes can be modified.

Aithema 2026.10

Version 261021073740.0.0. Licensed under AGPL-3.0-only.

Sixteenth October release: no page-load error without email storage, and clearer credit messages.

What START and visitors notice

  • A quieter page load (AIT-442): opening a conversation no longer causes an
    error when the site does not offer saved email addresses.
  • Clearer credit messages (AIT-443): reaching an email address's daily limit
    no longer promises that a conversation can continue tomorrow. The reset message
    says when that address gets a new daily limit. Confirming an email address
    raises this conversation's limit; the message now says that directly.

For hosts

Optional visitor-email port (AIT-442). For an authenticated owner, an absent
optional visitor-email port now answers HTTP 404 instead of 503 on
/api/visitor/email and /api/visitor/erase, with the existing
visitor-unavailable error. When identity reports both canSave: false and
canDelete: false, the UI skips the visitor-email read. Conversation email
verification still works.

Credit-copy overrides (AIT-443). Check overrides of
hostSurface.credits.dailyCap, hostSurface.credits.dailyCapReset and
hostSurface.credits.ended.sessionUpgrade in English and German: the daily-cap
line drops the continuation promise, the reset line names the address's new daily
limit from {time}, and the session-upgrade line names this conversation's
raised limit of {next} credits.

RC14's host requirements
still apply, including its breaking changes; Aithema recommends checking those
requirements before upgrading from an earlier release.

Breaking for hosts

None relative to RC15 (v261021060306.0.0). The status correction concerns
an optional capability the host does not provide; it removes a server-error
response without adding a host requirement. Hosts handling visitor-unavailable
by status should accept 404. START integrates and pins this release separately.

Availability and verification

The sixteen-module release closure is unchanged. Voxtral and the second Grok
voice pipeline (AIT-317/342) remain parked, private and outside this release.
Grok Voice is not yet qualified in live use. No provider credentials are
bundled.

Release assets include module tarballs, the workspace archive, dependency locks,
an SPDX SBOM and release-set.json. Verify the published attestations and
SHA256SUMS before installation, following
RC14's verification and installation instructions
with tag v261021073740.0.0 in every download and installation URL. Retain the
verified assets, manifest and deployment pin for rollback to those exact bytes.
See the embedding guide
for host integration.

v261021060306.0.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 06:58
Immutable release. Only release title and notes can be modified.

Aithema 2026.10

Version 261021060306.0.0. Licensed under AGPL-3.0-only.

Fifteenth October release: a tidier phone footer.

What START and visitors notice

  • A tidier phone footer (AIT-439): the model flag sits in the centre of its
    box, with more room before Legal. The credits label stays centred when
    credit updates are shown.

For hosts

Footer CSS (AIT-439). Below 600 px, the model flag is centred in its 44 px
box, leaving at least 12 px before the Legal control. The credits label is
vertically centred with reconciling text enabled (host.credits.reconcilingVisible,
O4); review custom CSS that overrides these alignments.

RC14's host requirements
still apply, including its breaking changes; Aithema recommends checking those
requirements before upgrading from an earlier release. START integrates and
pins this release separately.

Two changes are test-only: atomic image-generation trace writes (AIT-438) and
deterministic HTML-preview readiness (AIT-440).

Breaking for hosts

None relative to RC14 (v261021043938.0.0). This follow-up changes footer
alignment and tests; host APIs and configuration requirements stay the same.

Availability and verification

The sixteen-module release closure is unchanged. Voxtral and the second Grok
voice pipeline (AIT-317/342) remain parked, private and outside this release.
Grok Voice is not yet qualified in live use. No provider credentials are
bundled.

Release assets include module tarballs, the workspace archive, dependency locks,
an SPDX SBOM and release-set.json. Verify the published attestations and
SHA256SUMS before installation, following
RC14's verification and installation instructions
with tag v261021060306.0.0 in every download and installation URL. Retain the
verified assets, manifest and deployment pin for rollback to those exact bytes.
See the embedding guide
for host integration.

v261021043938.0.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 05:56
Immutable release. Only release title and notes can be modified.

Aithema 2026.10

Version 261021043938.0.0. Licensed under AGPL-3.0-only.

Fourteenth October release: credits display options for hosts, one clock for every deadline, and steadier conversations when an address changes mid-reply.

What START and visitors notice

  • Clearer credits and choices (AIT-411/422/434/435): START can choose which
    credit offers, reset times and conversation actions to show. Credit amounts
    stay with their labels, the email offer explains that the conversation stays
    saved, and the phone footer keeps legal links behind a labelled Legal control.
  • A steady conversation (AIT-410/400/412/432): changing credits, starting a
    call or receiving a reply keeps the page still. Every reply keeps its own
    read-aloud control, disabled in place during calls. The withdrawal notice no
    longer covers the first message; Latest keeps its space when returning.
  • Changing an email address during a reply (AIT-418): submit waits in place
    with “Available once the reply has finished.” If a change races with delivery,
    the existing reply-failed message and Retry explain what happened. A reply the
    visitor never saw does not use visitor credits.
  • Replies and calls recover more reliably (AIT-416/417/391/399/384): an
    activity-recording failure no longer leaves a message without a reply. After
    reconnecting, the overview, clarification and pause state catch up; a
    clarification is spoken once. A refused resume or interruption leaves the
    call safe. Voice shows failure messages next to the control they concern;
    Retry waits for the stated delay.
  • Readable drafts stay available (AIT-374/424/428): when consent no longer
    covers one draft, other readable drafts remain available. The unavailable
    draft keeps a neutral, keyboard-reachable placeholder and can still be
    dismissed; its contents, downloads, votes and regeneration remain closed.
  • Calmer messages and usable handover (AIT-387/429/426/433): unavailable
    features use neutral wording. German defaults address visitors impersonally.
    On phones, the handover heading, the host's full notice, the action and the
    status stack without clipping or moving the page as the status changes.

For hosts

Eight opt-in credit changes (AIT-411). Each changed presentation or policy
requires host opt-in; hosts that set none keep RC13's credit-options DOM. The
existing low-credit ask stays enabled until explicitly suppressed.

Option Host opt-in and result
O1 host.usedUp.newConversation.enabled: true adds the new-conversation action in the used-up panel; default false.
O2 host.usedUp.dailyCapActions: 'none' removes the daily-cap action while retaining its space; default 'export'.
O3 copy.hostSurface.credits.afterConfirm supplies a separate “After confirmation: {n} credits” offer; the built-in dictionaries include it, and custom copy without it falls back to withConfirmed.
O4 host.credits.reconcilingVisible: true shows reconciling text; default false.
O5 host.credits.dailyCapReset: true shows the reset time supplied through dailyCapResetAt; default false.
O6 host.emailAsk.lowCredits: false (set on client and server) turns off the inline and automatic low-credit ask; default true (the ask shows).
O7 Return { ok: false, reason: 'session' } from canAdmit/admit to identify session end; absent by default, with precedence dailyCap > session > host-limit.
O8 /identity automatically reports visitorEmail: { canSave, canDelete } from the complete visitor-email port; the client enables deletion only for explicit canDelete: true.

Only boolean true from wallet canAdmit authorizes spend; truthy objects do
not. O1–O8 preserve their reserved space as state changes. See the
credit host options
for the complete client/server contract. START must integrate its chosen options;
this release does not deploy START.

Phone footer legal links (AIT-435). Below 600 px, when host legal links are configured, they move from the footer row into a popover opened by one labelled footer control (“Rechtliches” / “Legal”, 44 px). Links, labels, order and hrefs are unchanged; 600 px and wider is unchanged. This applies to every host, not only those that set credit options. Custom CSS that targets the legal links in the phone footer needs review, and hosts should confirm that one clearly labelled control meets their own legal-notice requirements.

Credit callback failures are server errors (AIT-407/420). On the turn path,
a throwing host credit callback returns HTTP 500, including TypeError
(previously 400) and RangeError (previously 413). During turn preflight,
wallet(ownerToken, context) and balance() execute inside the turn transaction.
Host credit reads must be synchronous and side-effect free: read-only Aithema
getters and SELECT on host-owned tables through the same SQLite handle are
allowed; writes, storage mutators, async/network work and nested
storage.transaction() calls are forbidden. canAdmit() and creditTiers()
share the read contract but are not called for initial turn admission.

One clock for deadlines and admission (AIT-403/430). Installing a host clock
with createHandlers/setHostClock reaches runtime admission, UTC-day buckets,
voice/render limits, budgets, storage, retention, receipts and evidence checks;
an explicit runtime constructor clock retains policy precedence. Pass the same
forwarding runtime.now function to independently constructed providers,
consent ledgers and other host ports. Custom voice caps and render limiters must
implement setClock(clock) when a clock is installed; otherwise installation
fails closed before changing clocks. Remaining wall-clock reads measure elapsed
work only. See the clock contract.

Billing survives retirement (AIT-421/427). Retirement waits within a bounded
window for outstanding billing, seals durable writes and commits the final
per-attempt projection before host.retired({ sessionId, ownerHash, attempts })
and purge. A validated late charge refused by the seal is recorded on the
existing host reservation and included in retired spend without reopening frozen
attempts; the seal error remains primary. The migration removes the unused
wait_for_billing column while preserving retries, deadlines and seals.

Activity and voice callbacks (AIT-416/417/384). Every touchVisitor call
uses the shared activity guard so a failing host callback cannot fail an
unrelated request. Voice correction, interruption marker and receipt commit
together; a refused barge-in marker leaves the call running. Voice support is
selected by capability rather than provider ID.

Consent, identity and embedding (AIT-371/374/396/368/418/428). Consent reads
are de-duplicated per request and limited to four concurrent reads, with ownership,
revision and scope checked per artifact. A full withdrawal through POST /consent
includes every known scope in its revocation fields; withdrawConsent(id) omits
those fields and uses the legacy refresh path. Both bypass host document reads.
Legacy/unknown consent evidence stays flagged over the pending window. The UI
holds identity request/change while a reply streams; the server accepts it, and
if the reply then fails it reports a retryable identity-changed failure.
Undelivered replies cost the host within caps, not
visitor credits. The guide covers minimal module installation, equal-tier
confirmation and the address-derived daily spend guard.

RC12 host requirements
and RC13's email capability contract
still apply, including voice binding, dated caps, history and mail shutdown;
Aithema recommends checking each production voice option before enabling it.
For retryable provider limits, preserve HTTP 429 and Retry-After through
host adapters; provider delay parsing accepts integer seconds or strict HTTP
dates and omits malformed values, with the existing 60-second lifecycle cap
(AIT-384).

Breaking for hosts

Yes, relative to RC13 (v261020161837.0.0). AIT-407 changes the observable
error status of throwing turn credit callbacks from 400/413 to 500: these are
host integration failures, not malformed visitor input or oversized payloads.
Update adapters, monitoring and retry/error handling that depended on the old
status, and repair callbacks to the synchronous read contract above. AIT-403/430
also rejects custom caps/limiters without setClock when installing a clock;
add that method before opting into an injected clock. AIT-411 also changes
canAdmit in every feature's admission and availability (text, analysis, visuals
and voice), and in the host authorizer for extending a voice credit reservation.
At v261020161837.0.0, both checks accepted every result except false.
Hosts without walletForSession are unaffected. With it, a missing wallet or any
canAdmit result other than true (including a missing return or an object) now
denies every feature; the voice extension authorizer likewise fails closed.
Return a wallet for every session that should be served, with canAdmit
returning true to admit and false to refuse. Existing boolean true/false
results keep their meaning. The eight credit options
are opt-in; they do not require enabling new UI.

Voxtral and the second Grok voice pipeline (AIT-317/342) remain parked, private
and outside this release's sixteen-module closure. CI-only changes: AIT-419 sets
the 405 s planning target; AIT-423 adds the eighth browser shard.
AIT-425/436 strengthen tests without changing behavior.

What is included

...

Read more

v261020161837.0.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 16:46
Immutable release. Only release title and notes can be modified.

Aithema 2026.10

Version 261020161837.0.0. Licensed under AGPL-3.0-only.

Thirteenth October release: email confirmation works on hosts that keep identity per conversation.

What START and visitors notice

  • Confirm email and reach the higher credit tier (AIT-414 / START-524):
    visitors can confirm their email address when the host keeps identity per
    conversation without a visitor-email storage port. The confirmation flow goes
    straight to the identity request, so a missing storage port no longer blocks it.

For hosts

Email storage capability is explicit (AIT-414). Identity responses expose
visitorEmail: { canSave }. It is false when the host has no complete
visitor-email port. With credit tiers and an identity port, the UI then goes
straight to the identity request instead of trying to save a visitor email.
Hosts with the visitor-email port keep the existing save flow. See the
email confirmation contract.

START must integrate the host's identity and credit policy to use the higher
tier; this release does not deploy START. RC12's dated-cap integration and
host-owned history requirements still apply. Production voice hosts still need
a qualified fast reaction binding with effort none, separate from
understanding, with matching account evidence; the local simulator and free
canonical mock remain exempt. Aithema recommends checking each production voice
option before enabling it.

Breaking for hosts

No new breaking change relative to RC12 (v261020150723.0.0).
visitorEmail.canSave is additive. Existing identity and visitor-email ports
remain valid; hosts without visitor-email storage can use the identity request
flow. Hosts upgrading from before RC7 must still apply RC7's preview embedding
requirements.

AIT-407, AIT-410 and AIT-411 are outside this release. Voxtral remains private
and outside the sixteen-module release closure.

What is included

Aithema provides embeddable conversation modules: core state and plugin contracts,
server Web Request handlers and a Node HTTP adapter with SQLite persistence,
and UI components including <aithema-session> and isolated HTML previews.
Hosts supply authentication, ownership, storage, consent and budget policy.

The sixteen packages are @inspr/aithema-core, @inspr/aithema-server,
@inspr/aithema-ui, and
@inspr/aithema-plugin-{openrouter,mistral,device,elevenlabs,grok-voice,openai-images,claude-html,codex-imagegen,extract-text,extract-pdf,extract-ooxml,mail-smtp,zitadel-oidc}.
Grok Voice is not yet qualified in live use. Provider credentials are supplied
by the host; none are bundled. The device preset supports browser text only.
EU processing requires qualification of the specific account and route, plus
current consent.

Release assets include module tarballs, a source/workspace archive, dependency
locks, an SPDX SBOM inside the workspace archive, and release-set.json with
source provenance and artifact digests. The workspace root is not installable.

Verify and install

Download the assets for v261020161837.0.0 into a clean directory:

gh release download v261020161837.0.0 --repo inspr-at/aithema
for asset in SHA256SUMS release-set.json consumer-evidence.json \
  consumer-package-lock.json deployment-pin.json *.tgz; do
  gh attestation verify "$asset" --repo inspr-at/aithema
done
sha256sum --check SHA256SUMS

Require every verification command to succeed before installing. On macOS, use
shasum -a 256 --check SHA256SUMS for the checksum step. These checks apply to
the published assets. consumer-evidence.json binds the tested package
digests to the published manifest and source commit; earlier preparation
artifacts are not release checksums.

Install all sixteen module URLs together so their exact internal dependencies
resolve without registry publication. From the directory containing the verified
manifest, run this in your host project (adjust the manifest path as needed):

node --input-type=module <<'NODE'
import { readFileSync } from 'node:fs';
import { execFileSync } from 'node:child_process';
const manifest = JSON.parse(readFileSync('./release-set.json', 'utf8'));
const base = 'https://github.com/inspr-at/aithema/releases/download/v261020161837.0.0/';
const urls = manifest.artifacts.filter(a => a.kind === 'module').map(a => base + a.path);
execFileSync('npm', ['install', '--save-exact', ...urls], { stdio: 'inherit' });
NODE

Commit the host's package-lock.json: its release URLs and sha512 integrity
values pin the downloaded tarball bytes. The verified
consumer-package-lock.json records the release consumer's tarball integrity
values for comparison. Use npm ci for subsequent installs. Retain the verified
assets, manifest and deployment pin for rollback to those exact bytes.

Compatibility and known follow-ups

The split modules replace the private 0.10.1 monolith and break its API. There is
no automatic legacy API or database conversion. Adapt host integrations to the
module handlers and components, and retain the previous deployment and database
backup separately. The plugin protocol apiVersion: ^1.0.0 is independent of
the product version.

  • Grok Voice is not yet qualified in live use. Evidence is synthetic and
    offline; it does not establish live acoustic quality, German speech quality,
    latency, disruption recovery, billed upstream costs or real account readiness.
    The plugin README records the dated public evidence and its limits.
  • A 60-minute German/English live voice soak has not been measured.
  • Browser consumers need a bundler or import map and module JSON support.
    Consumer smoke checks do not establish host-specific layout or CSP enforcement.
  • Further legal formalization remains follow-up work; this release grants no
    rights beyond its included license and rights/provenance notices.

See the embedding guide
for host integration and supported exports, and the published SHA256SUMS,
attestations and consumer-evidence.json for verification of this release.

v261020150723.0.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 15:57
Immutable release. Only release title and notes can be modified.

Aithema 2026.10

Version 261020150723.0.0. Licensed under AGPL-3.0-only.

Twelfth October release: steadier takeback, safer credits for hosts, and dated cost corrections.

What START and visitors notice

  • Taking a conversation back shows “Listening” at once (AIT-404): the
    composer no longer flashes “Conversation paused” while the server confirms.
    If takeback fails, the paused state returns. A paused conversation whose budget
    is denied shows the used-up panel.
  • A host credit failure cannot leave a message waiting without a reply
    (AIT-405):
    the turn fails cleanly before the message is saved, without spend.
  • Daily caps can stay exact across midnight (AIT-409 / START-524): hosts can
    read dated cost corrections and voice exposures for each attempt, so a final
    cost arriving tomorrow counts on the right day. Hosts must integrate these
    records into their cap policy; this release alone does not deploy that policy
    to START.
  • Voice keeps failure messages next to the control they concern.
    Retry waits for the stated delay.

For hosts

Credits are read before saving a turn (AIT-405). The owner-authorized wallet
projection is read inside the turn's storage transaction, before the visitor's
message is persisted. If the wallet callback throws, that transaction rolls back
and the request returns a server error, with no saved turn or spend. The separate
credit-tier projection remains on owned credits reads; it is not a turn preflight
callback. This replaces a stuck turn with an immediate failure.

Read dated corrections and exposures (AIT-409). SQLiteBudgetLedger exposes
corrections(attemptId) and voiceExposures(attemptId), also available through
runtime.budget when it uses that ledger. Both synchronous reads return arrays
in posting order with this event shape:

{ id, attemptId, lane, atMs, oldMicro, newMicro, oldVisitorMicro, newVisitorMicro }

Amounts are integer micro-USD (1 USD = 1,000,000 micro). atMs is the posted epoch
millisecond. For corrections it is budget_corrections.at_ms, not the admission
or first settlement time. Corrections include reasoning/provider-cost and voice
reconciliations; their old/new amounts are settlements. For voice exposures,
lane is voice and old/new amounts are the retained maxima. Exposure increases
record existing provider liability even above a cap; they are separate from
admitted extensions and invoke no wallet callback. Missing attempts and empty
histories return []. Reads expose no internal evidence JSON or secret references.

Deduplicate by { attemptId, stream, id }, where stream is corrections or
voiceExposures. Corrections use persisted row IDs; voice exposures use a durable
per-attempt sequence starting at 1. Replayed receipts and unchanged maxima add
nothing. Date a positive correction delta (newMicro - oldMicro, or its visitor
equivalent) on the UTC day of atMs. For example, a $10 uncertain settlement
reduced to $0.01 before midnight, then corrected to $8 after midnight, adds $7.99
to the new day's cap. Allocate refunds against the earlier dated charges they
refund; an old-day refund must not reopen today's headroom.

Keep original holds on admission day, extension extras on their recorded event
day, and exposure deltas on the UTC day of atMs. Count settlement above those
reservations on its settled_at_ms day without counting the same liability twice.
Reconcile the host projection idempotently before admission. Earlier rows have
no reconstructed exposure dates; preserve host history rather than inventing
them. Session retirement purges budget_corrections and the attempt's exposure
history: keep a host-owned copy of corrections and exposures needed for cap
history before retirement
. Rebuilding a projection requires that retained copy.
A custom host-supplied budget object does not gain these reads automatically;
its host must implement or supply equivalent dated records. See the
dated accounting contract.

Paused and budget-denied (AIT-404) now displays the used-up panel, so the
composer reflects the actual credit state while another tab holds the conversation.

Continuing host requirements from RC11:

  • Production voice hosts require a qualified fast reaction binding with effort
    none, separate from understanding, with the allowlist, streaming support and
    current matching account evidence. The local voice simulator and free canonical
    mock are exempt. The OpenRouter demo configuration requires
    OPENROUTER_SPEECH_MODEL. Aithema recommends checking each production voice
    option before enabling it.
  • Daily-limit receipt wording requires session-scoped credits
    (creditScope: 'session') and a tier projection returning
    dailyCapReached: true; the upgrade offer is then suppressed.
  • Mail close() closes the transport and cancels pending sends. A running DNS
    lookup finishes and its result is discarded; the lookup itself is not aborted.

AIT-406 repairs the nightly full-browser evidence run. It changes test coverage
and harness selection only, with no product behavior change.

Breaking for hosts

No new breaking change relative to RC11 (v261020105634.0.0) for hosts that
follow the documented port.
AIT-405 changes when a throwing wallet surfaces:
an immediate server error replaces a saved, stuck turn. AIT-409's dated reads
are additive; existing wallet arguments and results remain valid. Daily-cap
accuracy still requires the host integration and retained history described
above. A custom budget implementation must supply its own equivalent reads.

RC11's production voice route requirement still applies, with the simulator and
free canonical mock exemptions above. Hosts upgrading from before RC7 must still
apply RC7's preview embedding requirements.

What is included

Aithema provides embeddable conversation modules: core state and plugin contracts,
server Web Request handlers and a Node HTTP adapter with SQLite persistence,
and UI components including <aithema-session> and isolated HTML previews.
Hosts supply authentication, ownership, storage, consent and budget policy.

The sixteen packages are @inspr/aithema-core, @inspr/aithema-server,
@inspr/aithema-ui, and
@inspr/aithema-plugin-{openrouter,mistral,device,elevenlabs,grok-voice,openai-images,claude-html,codex-imagegen,extract-text,extract-pdf,extract-ooxml,mail-smtp,zitadel-oidc}.
Grok Voice is not yet qualified in live use. Provider credentials are supplied
by the host; none are bundled. The device preset supports browser text only.
EU processing requires qualification of the specific account and route, plus
current consent.

Release assets include module tarballs, a source/workspace archive, dependency
locks, an SPDX SBOM inside the workspace archive, and release-set.json with
source provenance and artifact digests. The workspace root is not installable.

Verify and install

Download the assets for v261020150723.0.0 into a clean directory:

gh release download v261020150723.0.0 --repo inspr-at/aithema
for asset in SHA256SUMS release-set.json consumer-evidence.json \
  consumer-package-lock.json deployment-pin.json *.tgz; do
  gh attestation verify "$asset" --repo inspr-at/aithema
done
sha256sum --check SHA256SUMS

Require every verification command to succeed before installing. On macOS, use
shasum -a 256 --check SHA256SUMS for the checksum step. These checks apply to
the published assets. consumer-evidence.json binds the tested package
digests to the published manifest and source commit; earlier preparation
artifacts are not release checksums.

Install all sixteen module URLs together so their exact internal dependencies
resolve without registry publication. From the directory containing the verified
manifest, run this in your host project (adjust the manifest path as needed):

node --input-type=module <<'NODE'
import { readFileSync } from 'node:fs';
import { execFileSync } from 'node:child_process';
const manifest = JSON.parse(readFileSync('./release-set.json', 'utf8'));
const base = 'https://github.com/inspr-at/aithema/releases/download/v261020150723.0.0/';
const urls = manifest.artifacts.filter(a => a.kind === 'module').map(a => base + a.path);
execFileSync('npm', ['install', '--save-exact', ...urls], { stdio: 'inherit' });
NODE

Commit the host's package-lock.json: its release URLs and sha512 integrity
values pin the downloaded tarball bytes. The verified
consumer-package-lock.json records the release consumer's tarball integrity
values for comparison. Use npm ci for subsequent installs. Retain the verified
assets, manifest and deployment pin for rollback to those exact bytes.

Compatibility and known follow-ups

The split modules replace the private 0.10.1 monolith and break its API. There is
no automatic legacy API or database conversion. Adapt host integrations to the
module handlers and components, and retain the previous deployment and database
backup separately. The plugin protocol apiVersion: ^1.0.0 is independent of
the product version.

  • Grok Voice is not yet qualified in live use. Evidence is synthetic and
    offline; it does not establish live acoustic quality, German speech quality,
    latency, disruption recovery, billed upstream costs or real account readiness.
    The plugin README records the dated public evidence and its limits.
  • A 60-minute German/English live voice soak has not been measured.
  • Browser consumers need a bundler or import map and module JSON support.
    Consumer smoke checks do not establish host-specific layout or CSP enforcement.
  • Further legal formalization remains follow-up work; this release grants no
    rights beyond its included license and rights/provenance notices.

See the [embedding guide](https://github.com/inspr-at/aithema/blob/v261020150723.0.0/docs/emb...

Read more

v261020105634.0.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 11:47
Immutable release. Only release title and notes can be modified.

Aithema 2026.10

Version 261020105634.0.0. Licensed under AGPL-3.0-only.

Eleventh October release: honest voice waits, the fast voice route for every host, and per-conversation credits.

What START and visitors notice

  • Voice says what it is waiting for (AIT-383): ElevenLabs and Grok calls
    distinguish the microphone prompt, ending the previous call, the visible retry
    countdown and connecting. The 30-second connection deadline starts only after
    microphone permission is granted. Each microphone failure has its own guidance
    next to the mic. “No reply yet” appears only after 15 seconds of real agent
    silence and clears when the reply arrives. End cancels startup immediately.
    These notices appear only when they are true. Voice shows failure messages next
    to the control they concern; Retry waits for the stated delay.
  • Every host's voice answers on the fast route (AIT-397): voice requires the
    fast reaction route on custom hosts as well as the demo configuration. Calls
    never fall back to the slow analysis model.
  • Credits belong to each conversation (AIT-395, AIT-401 / START-524): each
    conversation can show its own balance and confirmation offer, even when a
    visitor has several conversations. Daily-cap receipts show the daily limit
    without offering an unavailable upgrade. Voice extensions and settlement now
    retain the timing hosts need to enforce daily caps when a call crosses midnight.
  • Existing conversations survive confirmation changes (AIT-392): hosts can
    turn email confirmation off or roll back without breaking conversation resume.
  • Closing mail stops pending sends (AIT-393): closing the mail plugin also
    cancels sends still waiting for address lookup.

For hosts

A qualified fast reaction (speech) route is now required for voice on every
host
, including custom hosts (AIT-397). For each ElevenLabs, Grok or composed
voice option, configure a reaction binding with effort none, using a model
separate from understanding (analysis). Both choices.models[].bindings and
legacy bindings are supported. Allowlist the reaction plugin and endpoint,
supply current matching account evidence, and use a reasoning plugin that
supports streaming with effort none. The OpenRouter demo configuration,
including start2, requires OPENROUTER_SPEECH_MODEL. A generic effort selection
cannot raise the configured reaction effort. Missing or invalid configuration
refuses voice and logs an operator configuration error; visitors see neutral
voice-unavailable wording. Aithema recommends checking every voice option before
enabling it. See the
fast reaction route contract.

The owner-authorized wallet(ownerToken, context) and
creditTiers(ownerToken, context) ports receive { sessionId } (AIT-395).
For conversation balances, return creditScope: 'session' from the wallet and
project both wallet amounts and tiers for that conversation. Admission must
still enforce owner, address and daily limits. Return dailyCapReached: true
from the tier projection when the daily cap prevents confirmation; the UI then
suppresses the upgrade offer. Existing one-argument callbacks can ignore the
context and keep their owner-wide display and behavior.

Voice extension's wallet.canAdmit(extra, context) receives the additive frozen
context { attemptId, sessionId, extraMicro, at } (AIT-401); at is epoch
milliseconds. The first argument and return value are unchanged. The callback
runs synchronously inside the ledger transaction: do not await, open a nested
transaction or make external side effects. Durable voice_extensions_json
records accepted increases and their times; the receipt for each attempt gains
settled_at_ms, also returned by settlement methods. Replays preserve those
times. There is no new settlement hook. Hosts enforcing UTC-day caps keep the
original hold on its admission day, attribute extension extras to their event
day and settlement above the reservation to its settlement day. Reconcile
idempotently before admission. Old rows have empty extension history and a
nullable settlement time; retain historical host records rather than guessing
a date. Existing callbacks that ignore the new context remain compatible, but
hosts must consume these records to enforce their midnight cap policy. See the
credit and accounting contract.

Resume also works when a host has no identity port (AIT-392). Removing a
verification requirement lifts the saved lock without requiring a removed
identity or email-persistence port. Closing the mail plugin aborts pending sends
and address lookups (AIT-393).

Breaking for hosts

Yes for voice on custom hosts relative to RC10 (v261019195810.0.0). RC10
only capped custom hosts' reaction effort; RC11 refuses voice unless every voice
option has a qualified fast reaction binding with effort none, separate from
the analysis model, plus the allowlist, streaming support and current matching
account evidence described above. Configure that route before enabling voice.
The OpenRouter demo configuration already required it in RC10; set
OPENROUTER_SPEECH_MODEL there.

The AIT-395 and AIT-401 port additions are backward compatible: JavaScript
callbacks may ignore the new second argument, and existing first arguments and
results remain valid. The durable accounting fields are additive; using them
for daily caps requires host integration. Text-only hosts and identity-free
resume need no new port. Hosts upgrading from before RC7 must still apply RC7's
preview embedding requirements.

What is included

Aithema provides embeddable conversation modules: core state and plugin contracts,
server Web Request handlers and a Node HTTP adapter with SQLite persistence,
and UI components including <aithema-session> and isolated HTML previews.
Hosts supply authentication, ownership, storage, consent and budget policy.

The sixteen packages are @inspr/aithema-core, @inspr/aithema-server,
@inspr/aithema-ui, and
@inspr/aithema-plugin-{openrouter,mistral,device,elevenlabs,grok-voice,openai-images,claude-html,codex-imagegen,extract-text,extract-pdf,extract-ooxml,mail-smtp,zitadel-oidc}.
Grok Voice is not yet qualified in live use. Provider credentials are supplied
by the host; none are bundled. The device preset supports browser text only.
EU processing requires qualification of the specific account and route, plus
current consent.

Release assets include module tarballs, a source/workspace archive, dependency
locks, an SPDX SBOM inside the workspace archive, and release-set.json with
source provenance and artifact digests. The workspace root is not installable.

Verify and install

Download the assets for v261020105634.0.0 into a clean directory:

gh release download v261020105634.0.0 --repo inspr-at/aithema
for asset in SHA256SUMS release-set.json consumer-evidence.json \
  consumer-package-lock.json deployment-pin.json *.tgz; do
  gh attestation verify "$asset" --repo inspr-at/aithema
done
sha256sum --check SHA256SUMS

Require every verification command to succeed before installing. On macOS, use
shasum -a 256 --check SHA256SUMS for the checksum step. These checks apply to
the published assets. consumer-evidence.json binds the tested package
digests to the published manifest and source commit; earlier preparation
artifacts are not release checksums.

Install all sixteen module URLs together so their exact internal dependencies
resolve without registry publication. From the directory containing the verified
manifest, run this in your host project (adjust the manifest path as needed):

node --input-type=module <<'NODE'
import { readFileSync } from 'node:fs';
import { execFileSync } from 'node:child_process';
const manifest = JSON.parse(readFileSync('./release-set.json', 'utf8'));
const base = 'https://github.com/inspr-at/aithema/releases/download/v261020105634.0.0/';
const urls = manifest.artifacts.filter(a => a.kind === 'module').map(a => base + a.path);
execFileSync('npm', ['install', '--save-exact', ...urls], { stdio: 'inherit' });
NODE

Commit the host's package-lock.json: its release URLs and sha512 integrity
values pin the downloaded tarball bytes. The verified
consumer-package-lock.json records the release consumer's tarball integrity
values for comparison. Use npm ci for subsequent installs. Retain the verified
assets, manifest and deployment pin for rollback to those exact bytes.

Compatibility and known follow-ups

The split modules replace the private 0.10.1 monolith and break its API. There is
no automatic legacy API or database conversion. Adapt host integrations to the
module handlers and components, and retain the previous deployment and database
backup separately. The plugin protocol apiVersion: ^1.0.0 is independent of
the product version.

  • Grok Voice is not yet qualified in live use. Evidence is synthetic and
    offline; it does not establish live acoustic quality, German speech quality,
    latency, disruption recovery, billed upstream costs or real account readiness.
    The plugin README records the dated public evidence and its limits.
  • A 60-minute German/English live voice soak has not been measured.
  • Browser consumers need a bundler or import map and module JSON support.
    Consumer smoke checks do not establish host-specific layout or CSP enforcement.
  • Further legal formalisation remains follow-up work; this release grants no
    rights beyond its included licence and rights/provenance notices.

See the embedding guide
for host integration and supported exports, and the published SHA256SUMS,
attestations and `consumer-...

Read more

v261019195810.0.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 20:51
Immutable release. Only release title and notes can be modified.

Aithema 2026.10

Version 261019195810.0.0. Licensed under AGPL-3.0-only.

Tenth October release: a smoother ElevenLabs voice and a privacy fix for HTML drafts.

What START and visitors notice

  • HTML drafts stay private with visuals Off (AIT-386 / START-550): an HTML
    draft's content is never sent to the server as an image request. Kept images
    retain their thumbnails and layout, and HTML draft consent keeps its own kind.
  • Faster, more reliable ElevenLabs calls (AIT-379, AIT-380, AIT-381, AIT-388):
    the reply starts with validated spoken audio within five seconds, or one short
    holding line covers the wait. An off-topic reply redirects once; a retry
    continues after what was already said. The provider receives exactly the
    request that was approved for that attempt. When the agent ends the call,
    the call and microphone really close. Refusals use neutral wording.
  • Honest waits and recovery (AIT-377, AIT-378, AIT-383): call-start waits are
    clear, microphone guidance points to the device, and the charge after an
    agent-ended call reflects the available accounting evidence. Voice shows
    failure messages next to the control they concern; Retry waits for the stated delay.
    A provider-confirmed interruption is marked. The silence watchdog stays off
    until the provider declares the signals it needs.
  • Consent never hangs on loading or saving (AIT-376): stalled requests end
    with a way to recover, and a withdrawal always lands, even from a stale page.
  • Withdrawal leaves a clean layout (AIT-385): removing a shown draft leaves
    no empty focused tile. On a 390-pixel phone view, the withdrawal notice sits
    clear of the transcript chevron.

For hosts

Hosts using the OpenRouter demo host configuration, including start2, now
require a qualified fast reaction (speech) route for voice. Set
OPENROUTER_SPEECH_MODEL or supply a qualified reaction binding with effort
none, with current account evidence matched to that route. The demo keeps
the analysis model separate and never silently falls back to it for speech.
Missing or invalid speech configuration refuses voice start with an operator
configuration error in the server log; visitors see neutral voice-unavailable
wording. Custom hosts are unchanged except that, when voice is selected, the
reaction lane's effort is capped at its configured value. We recommend a fast
reaction binding with effort none for voice in custom hosts. See the
fast reaction route contract.

The spoken-turn callback default is 6.5 seconds (turnTimeoutMs and the
ElevenLabs callback timeout). It bounds the whole response, including cleanup;
validated speech or the short holding line covers the five-second first-audio
wait. Retries preserve already spoken text, redirect at most once and require
fresh admission for the exact provider request.

The managed ElevenLabs agent's conversation_config.conversation.client_events
now includes agent_tool_response, needed for a native agent-initiated end.
Run the authorized host ensure to repair an agent missing it; ensure writes and
checks the complete event contract. The server-only checkAgentHealth export
at @inspr/aithema-plugin-elevenlabs/agent-health checks the configured agent
with a single GET and makes no changes. See the
agent event and health contract.

A provider's retry delay now reaches the browser as HTTP 429 with
Retry-After; preserve that status and header through host adapters so Retry
waits for the stated delay. Continue forwarding consent changes to every tab.

Breaking for hosts

Yes for voice in hosts using the OpenRouter demo host configuration,
including start2, relative to RC9 (v261019131804.0.0).
Set
OPENROUTER_SPEECH_MODEL or supply a qualified fast reaction binding with
effort none and matching current account evidence; otherwise voice is refused
with an operator configuration error instead of silently using the analysis
model. Custom hosts are unchanged except for the reaction-effort cap at the
configured value when voice is selected; a fast reaction binding with effort
none is recommended for voice. Repair the managed agent event contract through
host ensure before enabling an older agent. Everything else in this release is
backward compatible. Hosts upgrading from before RC7 must still apply RC7's
preview embedding requirements.

What is included

Aithema provides embeddable conversation modules: core state and plugin contracts,
server Web Request handlers and a Node HTTP adapter with SQLite persistence,
and UI components including <aithema-session> and isolated HTML previews.
Hosts supply authentication, ownership, storage, consent and budget policy.

The sixteen packages are @inspr/aithema-core, @inspr/aithema-server,
@inspr/aithema-ui, and
@inspr/aithema-plugin-{openrouter,mistral,device,elevenlabs,grok-voice,openai-images,claude-html,codex-imagegen,extract-text,extract-pdf,extract-ooxml,mail-smtp,zitadel-oidc}.
Grok Voice is not yet qualified in live use. Provider credentials are supplied
by the host; none are bundled. The device preset supports browser text only.
EU processing requires qualification of the specific account and route, plus
current consent.

Release assets include module tarballs, a source/workspace archive, dependency
locks, an SPDX SBOM inside the workspace archive, and release-set.json with
source provenance and artifact digests. The workspace root is not installable.

Verify and install

Download the assets for v261019195810.0.0 into a clean directory:

gh release download v261019195810.0.0 --repo inspr-at/aithema
for asset in SHA256SUMS release-set.json consumer-evidence.json \
  consumer-package-lock.json deployment-pin.json *.tgz; do
  gh attestation verify "$asset" --repo inspr-at/aithema
done
sha256sum --check SHA256SUMS

Require every verification command to succeed before installing. On macOS, use
shasum -a 256 --check SHA256SUMS for the checksum step. These checks apply to
the published assets. consumer-evidence.json binds the tested package
digests to the published manifest and source commit; earlier preparation
artifacts are not release checksums.

Install all sixteen module URLs together so their exact internal dependencies
resolve without registry publication. From the directory containing the verified
manifest, run this in your host project (adjust the manifest path as needed):

node --input-type=module <<'NODE'
import { readFileSync } from 'node:fs';
import { execFileSync } from 'node:child_process';
const manifest = JSON.parse(readFileSync('./release-set.json', 'utf8'));
const base = 'https://github.com/inspr-at/aithema/releases/download/v261019195810.0.0/';
const urls = manifest.artifacts.filter(a => a.kind === 'module').map(a => base + a.path);
execFileSync('npm', ['install', '--save-exact', ...urls], { stdio: 'inherit' });
NODE

Commit the host's package-lock.json: its release URLs and sha512 integrity
values pin the downloaded tarball bytes. The verified
consumer-package-lock.json records the release consumer's tarball integrity
values for comparison. Use npm ci for subsequent installs. Retain the verified
assets, manifest and deployment pin for rollback to those exact bytes.

Compatibility and known follow-ups

The split modules replace the private 0.10.1 monolith and break its API. There is
no automatic legacy API or database conversion. Adapt host integrations to the
module handlers and components, and retain the previous deployment and database
backup separately. The plugin protocol apiVersion: ^1.0.0 is independent of
the product version.

  • Grok Voice is not yet qualified in live use. Evidence is synthetic and
    offline; it does not establish live acoustic quality, German speech quality,
    latency, disruption recovery, billed upstream costs or real account readiness.
    The plugin README records the dated public evidence and its limits.
  • A 60-minute German/English live voice soak has not been measured.
  • Browser consumers need a bundler or import map and module JSON support.
    Consumer smoke checks do not establish host-specific layout or CSP enforcement.
  • Further legal formalisation remains follow-up work; this release grants no
    rights beyond its included licence and rights/provenance notices.

See the embedding guide
for host integration and supported exports, and the published SHA256SUMS,
attestations and consumer-evidence.json for verification of this release.