A feature-rich point release: Elyra gains a built-in AI SDK plus the last of the Electron-parity desktop features.
Added
AI SDK (ai feature)
A new Laravel-inspired elyra-ai crate, re-exported as elyra::ai. Keys stay in the Rust backend.
- Agents — anonymous (
ai.chat().instructions(…).prompt(…)) and named (impl Agent+ai.prompt(&agent, …)). - Tools —
Tooltrait with an automatic tool-use loop across both providers. - Sub-agents — an
Agentused as a tool (sub_agent/AgentTool); delegates run in isolation. - Structured output —
prompt_as::<T>()viaserde+schemars. - Streaming —
stream()yieldsStreamChunks (SSE), ideal for piping to the event bus. - Images —
ai.image(prompt).landscape().generate()(OpenAIgpt-image-1). - Embeddings —
ai.embeddings([...]).generate(). - Vector store (RAG) — in-memory
VectorStore+cosine_similarity, portable across the sqlxAnydriver. AiProviderbinds an env-configuredAiclient into the container.
Default provider Anthropic (claude-sonnet-5); images gpt-image-1; embeddings text-embedding-3-small. See docs/ai.md.
Single-instance & deep-linking
App::single_instance()— later launches focus the running window and forward their command line onelyra:second-instance, then exit (portable loopback rendezvous + handshake).App::deep_link("myapp")— launch URL viadeepLink.initial(), later URLs onelyra:deep-link(macOS open-URL event; Windows/Linux scheme registration). See docs/single-instance.md.
Notes
Everything is compiled, clippy-clean, and tested (21 suites; SQLite locally, MySQL/Postgres in CI, runtime typechecked with TypeScript 7). AI live calls are exercised only with ELYRA_AI_LIVE=1 and keys — they were not run in CI or during development (no keys present), so the live provider path is documented as unverified. RAG ranks in-process by design (the Any driver has no pgvector).
Full changelog: https://github.com/kwhorne/elyra-framework/blob/main/CHANGELOG.md · MIT licensed.