Repository navigation
AbstractCore v2.22.0
Mailbox servers are found from the address, the web console's Email tab connects over IMAP with
every server field visible and pre-filled, a settings save keeps the keys this version does not
know, and transcription routes written with a download provider are repaired. The terminal console
abstractcore-console 0.6.0 ships with this release.
Added
abstractcore.comms.email.discovery.discover_servers(address)andPOST /acore/email/discover:
a mailbox's IMAP and SMTP servers are found from its address (known providers, the domain's
autoconfig file, the Thunderbird ISPDB, DNS SRV, then MX; HTTPS only, public hosts only, safe
XML).PUT /acore/emailandabstractcore email connectwithout servers discover them; nothing
found is a 400email_discovery_failedlisting the steps tried. `abstractcore email discover ` prints the result.abstractcore.comms.email.discovery.server_defaults(address, discovered=None): the server
fields a mailbox form pre-fills (the discovered servers and login, else the standard
imap.<domain>993 SSL andsmtp.<domain>465 SSL), with one sentence saying which.
POST /acore/email/discoverandabstractcore email discover --jsonreturn it asdefaults.PUT /acore/email/folder,EmailAccountStore.set_folder()andabstractcore email folder <name>: the folder the mailbox is read from changes without connecting again (empty = INBOX).GET /acore/emailandabstractcore email status --jsonlistoauth_providers(whether this
version has a built-in sign-in client for Google and Microsoft) andregistered_address_stored.abstractcore.console.themes.KIT_SWITCH_CSSandKIT_FORM_CSS: the UI kit's switch and form,
card and tabs rules (ui-kit 0.3.3), copied verbatim byabstractcore.console.theme_sync
(parse_kit_block), which refuses a kit without them.- Model catalog: an artifact may carry
route: {key, provider, model}, the capability route that
runs it when the engine is not the download provider (model_catalog.route_for_download).
The speech input model (Hugging FaceSystran/faster-whisper-base) is run by faster-whisper
base.
Changed
- Web console, Email tab: in order, Email address (the only field with a Save button),
Mailbox, the Agent email tools switch, and Advanced. The Mailbox tabs are IMAP
(first, the default), Google and Microsoft. The IMAP pane shows every field: Mailbox
address, Password, and Incoming mail (IMAP) and Outgoing mail (SMTP) as Server / Port / Security
rows, filled withimap.<domain>993 SSL andsmtp.<domain>465 SSL as soon as the address has
a domain, then with the discovered settings, never over a field you edited; one line says where
they came from. There are no User name or Display name fields: a small link "My provider uses a
different login name" shows a Login field, and "Custom certificate" shows the CA file. One
Connect tests reading and sending, then stores; an error names the step that failed. Once
connected, the Mailbox card shows the status line, the Active switch, Test, and
Disconnect with an inline confirmation. Advanced is three short sentences saved as you edit:
who your agents may send to, "At most N per hour and N per day", and the watched folder.
"Save and test", "Turn on/off", "Save policy" and "Save limits" are gone; the CLI hint uses
--password-stdin. Forms are at most 720 px wide with labels above the fields. - Web console and terminal console, Email: the address is asked once. With no email address
stored and no mailbox, the mailbox form's address is the only address field (connecting sets the
email address from it). With an email address stored, the mailbox form shows "Mailbox account: — Use a different account"; the link shows the field, prefilled, and the email address is read-only until you connect or go back to it. "Your mailbox is a different account" shows only when the two addresses differ. - Email send limits default to 100 per hour and 1000 per day (were 20 and 100). Connecting a
mailbox does not store the defaults, so an account where nobody set limits follows the
defaults; limits set withabstractcore email limits set,PUT /acore/email/limitsor the
console are stored withset_by: "user"(only the windows set) and kept across upgrades.
abstractcore email limits reset(EmailAccountStore.reset_limits()) follows the defaults
again. The limits document gainssource:default|user|legacy. - Connecting a mailbox sets the email address when none is stored. A connection given no display
name keeps the stored one, else uses the address's local part (abstractcore email connect --display-namestill sets it); a connection given no user name signs in with the discovered
form, else the address. - Web console on phones: the content uses the full width (flat sections, one page scroll); the
list panels fold from their heading and the browser remembers it. The dark/light control is a
"Dark theme" switch. abstractcore emailtexts say "Email address" and "Use this mailbox".- Terminal console
abstractcore-console0.6.0: the Email screen follows the web console card
by card: Email address with its own Save; the Mailbox card with the tabs IMAP (first, the
default), Google and Microsoft, the IMAP tab showing every server field pre-filled from the
address (standard values at once, thenabstractcore email discover --jsondefaults, never
over an edit), Login and CA file behind small links, the address asked once, and one Connect;
connected: status line, the Active switch, Test and Disconnect with an inline confirmation;
the Agent email tools switch; Advanced as three sentences (recipients, limits, watched
folder) saved as you edit, every failure with its cause inline. On/off settings on every screen
are switches ([x]on,[ ]off,[-]unavailable with the reason;SpaceorEnter) that
apply at once; switching on a flag marked UNSAFE still asks first. The Routes screen reads a
route whose provider is no engine (for exampleinput.voice=huggingface) as "unknown
engine" with AbstractCore's reason. It needs this release'sabstractcore email discoverand
abstractcore email folder. See Terminal console.
Fixed
- A Hugging Face model on a computer with no Hugging Face cache yet reads as not downloaded
(absent, downloadable), notunknown: a fresh install's Transcription card said "Unknown" and
"Download all" skipped the model. - Transcription showed "Engine missing: unknown AbstractVoice engine 'huggingface'": the
recommended download plan asked AbstractVoice for the engine of the download provider
(huggingface) instead of the route's engine (faster-whisper). Plan rows carry
route_provider/route_modeland judge that engine; the grid probes the transcription
model's weights in the Hugging Face cache. Any other unknown voice provider says to pick a
transcription engine (Multimodal page in the gateway console, Routes in the core console).
Speech input accepts AbstractVoice's aliases (whisper,local,hf,transformers). - The default allowlist entry follows the registered address when it changes
(EmailAccountStore.set_registered_addressswaps the old address for the new one), so a sign-in
code or a notification to a changed address is no longer refused as "not in the allowlist".
evaluate(..., self_addresses=)lets a caller treat given addresses as allowlist entries. - Web console: Copy buttons work when the console is opened over plain http from another machine
(textarea fallback when the Clipboard API is unavailable) and say "Copy failed — select and
copy" when nothing was copied. - A settings save keeps the keys this version does not know in
abstractcore.json: top-level
keys, unknown fields of every section, unknowncapability_defaultskeys and route keys this
version cannot parse, unknownprovider_profileskeys and unknown columns of a profile that
still exists are written back unchanged. Before, the first save after a restart (any setter: a
route, a default, a timeout) removed a key you added yourself (a top-level key,
vision.user_note) and every key a newer AbstractCore had written. Known keys are validated as
before, and a route or profile you delete stays deleted.
Migration
- Config repair on load: a stored
input.voiceroute that holds a catalog download pair
(huggingface/Systran/faster-whisper-base) is rewritten to the catalog's route
(faster-whisper/base) the first time this version loads the config, after writing a copy
of the file toabstractcore.json.route-repair-<time>.bak(mode 0600). The repair runs once and
changes nothing else; any other route is left as it is. - Send limits: an unmarked 20 / 100 stored by 2.21 or earlier (the old defaults, written at
connect) follows the new defaults 100 / 1000; any other unmarked value is kept as alegacy
limit. Runabstractcore email limits setto keep 20 / 100, orabstractcore email limits resetto follow the defaults. - Keys written by a newer AbstractCore, or added by hand, survive saves from this version: a
downgrade followed by an upgrade keeps them. abstractcore-console0.6.0 callsabstractcore email discoverandabstractcore email folder: upgrade AbstractCore to 2.22.0 together with the terminal console.
Documentation
- Docker: the server examples name the current image,
ghcr.io/lpalbou/abstractcore-server:2.22.0. - Email describes server discovery, the folder verb, the Email tab's cards and
the terminal Email screen; Centralized Config describes how a save
keeps unknown keys and the voice-route repair.