Skip to content

Releases: adil-adysh/NVDA-AI-assistant

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 09 Jun 12:51

Changelog

All notable changes to this project will be documented in this file.

v0.12.0 - 2026-06-09

Features

  • Feat: update version to 0.12.0 and enhance changelog with new assistant layer gestures

  • Feat: add functionality to attach selected text and clipboard content to chat

  • Feat: add evaluation suites and skills for route-change and validate-work, including sample tasks and fixtures

Improvements

  • Docs: added design docs to implement semantic storage

Other

  • Merge pull request #7 from adil-adysh/dependabot/github_actions/actions/github-script-9

chore(deps): bump actions/github-script from 7 to 9

  • Merge pull request #8 from adil-adysh/dependabot/github_actions/peter-evans/create-or-update-comment-5

chore(deps): bump peter-evans/create-or-update-comment from 4 to 5

  • Merge pull request #9 from adil-adysh/dependabot/github_actions/actions/checkout-6

chore(deps): bump actions/checkout from 5 to 6

  • Merge pull request #10 from adil-adysh/dependabot/github_actions/github/codeql-action-4

chore(deps): bump github/codeql-action from 3 to 4

SHA256

6ca84c6c4247aab4dc8d684ccc60b5b63b860c9a8c2dea7ee55a6bd7d200e1d9 AIAssistant-0.12.0.nvda-addon

v0.11.6

Choose a tag to compare

@github-actions github-actions released this 18 May 10:30

Changelog

All notable changes to this project will be documented in this file.

v0.11.6 - 2026-05-18

Features

  • Feat: enhance host lifecycle management with process health check

Other

  • Merge pull request #11 from adil-adysh/dependabot/github_actions/actions/upload-artifact-7

chore(deps): bump actions/upload-artifact from 4 to 7

Refactoring

  • Refactor context pipeline and extraction logic

  • Updated the LanguageContextCollector to handle requests directly and collect language metadata for each request.

  • Refactored ExtractionTextCollector and ExtractionStructureCollector to implement request handling and collection methods.

  • Introduced ContentRequest types to streamline request handling across collectors.

  • Enhanced ContextPipeline to process extraction intents and manage snapshots for text and image requests.

  • Removed deprecated context profile handling in favor of explicit extraction intents in use cases.

  • Updated various use cases to utilize the new extraction intent structure for improved clarity and functionality.

  • Added logging and error handling improvements in image capture and object location resolution.

  • Refactor context extraction pipeline to utilize explicit ContentRequest types

  • Introduced ContentRequest types (PageTextRequest, PageStructureRequest, etc.) to clarify intent in context extraction.

  • Updated ContextCollector interface to handle requests via handles_request() and collect_for_request() methods.

  • Refactored collectors (ImageContextCollector, LanguageContextCollector, etc.) to align with the new request handling mechanism.

  • Enhanced extraction logic in various extractors to streamline text and image extraction processes.

  • Removed deprecated context profile handling in favor of extraction intents.

  • Consolidated utility functions for text extraction and normalization into a new extraction_utils module.

  • Updated use cases to utilize the new extraction intent structure for improved clarity and maintainability.

SHA256

9c468f223f0eb93b9b3beedf05ebf01720e29f719c92ba7a6e2a0864ec1fb454 AIAssistant-0.11.6.nvda-addon

v0.11.5

Choose a tag to compare

@github-actions github-actions released this 14 May 03:37

Changelog

All notable changes to this project will be documented in this file.

v0.11.5 - 2026-05-14

Features

  • Feat: add support for MathML tags and additional attributes in content sanitization

  • Extended the ALLOWED_TAGS set to include various MathML tags for better math content rendering.

  • Added new attributes related to MathML, such as 'display', 'linethickness', 'mathbackground', 'mathcolor', and 'mathvariant' to the ALLOWED_ATTRIBUTES set.

Refactoring

  • Refactor HTML sanitization and add image handling features

  • Disabled HTML sanitization in content.ts, considering HTML from the Python side as trusted.

  • Introduced new Python module for image handling in AI-assistant:

    • Added functions to safely retrieve NVDA objects and their locations.
    • Implemented clipping of object locations to visible areas.
    • Added a check to prevent image capture when the screen curtain is active.

SHA256

608782dcd50cc3005f21d468c65a0bb4519ec77c6931b9827d9b2b4d3e8c94a3 AIAssistant-0.11.4.nvda-addon

v0.11.4

Choose a tag to compare

@github-actions github-actions released this 14 May 02:52

Changelog

All notable changes to this project will be documented in this file.

v0.11.4 - 2026-05-14

Features

  • Feat: update addon version to 0.11.4 with new features and improvements

  • Feat(watchdog): implement idle timeout mechanism for command client disconnection

  • Feat(chat): enhance conversation handling with image support in seed messages

Refactoring

  • Refactor: streamline progress message handling and remove redundant context emission

SHA256

ab407ee1719ecd8e771f70b237f332328c7accfe87be310505983f576b726113 AIAssistant-0.11.4.nvda-addon

v0.11.3

Choose a tag to compare

@github-actions github-actions released this 14 May 01:59

Changelog

All notable changes to this project will be documented in this file.

v0.11.3 - 2026-05-14

Features

  • Feat: update addon version to 0.11.3 with new features and improvements

  • Feat(chat): add keyboard shortcuts for chat window navigation

  • Feat: enhance keyboard navigation and shortcuts

  • Added focus actions for provider and model select elements.

  • Updated keyboard shortcuts for focusing on the provider (Alt+P) and model (Alt+M) selects.

  • Modified chat composer shortcuts to simplify key combinations (Alt+I for input, Alt+A for attach, Alt+S for send).

  • Removed unnecessary effect for document title update.

SHA256

9db40ac7ecc2d0d901ec074addf983d133549fb49fc8eb737367af760bb71392 AIAssistant-0.11.3.nvda-addon

v0.11.2

Choose a tag to compare

@github-actions github-actions released this 14 May 01:45

Changelog

All notable changes to this project will be documented in this file.

v0.11.2 - 2026-05-14

Features

  • Feat(chat): add preserve_conversation option to OpenChatPayload

  • Updated OpenChatPayload interface to include a new optional boolean property preserve_conversation.

  • Modified openChat function to conditionally reset chat state based on the value of preserve_conversation.

  • Feat(chat-streaming): enhance endChatStream to support final HTML content

  • Updated endChatStream to accept final content from payload, allowing for
    replacement of placeholder text-delta content with authoritative HTML blocks.

  • Modified extractTextFromBlocks to handle both text and HTML content,
    ensuring proper extraction of text from HTML blocks.

  • Extended ChatStreamEndPayload interface to include optional content and
    answer_section fields for better data handling.

  • Refactored endStream method in Transcript class to accommodate final
    structured content, improving message rendering consistency.

  • Feat: exclude test files from the add-on package

Fixes

  • Fix: enhance chat preservation logic in openChat function

Updated the openChat function to improve the handling of the preserve_conversation flag. The function now checks for the flag in both the payload and its metadata, ensuring that the chat state is only reset when necessary.

SHA256

8cc404062b63a8a82b4a99cad3a7dd0a26af21007dd4311281394eacee573c57 AIAssistant-0.11.1.nvda-addon

v0.11.1

Choose a tag to compare

@github-actions github-actions released this 13 May 08:52

Changelog

All notable changes to this project will be documented in this file.

v0.11.1 - 2026-05-13

Features

  • Feat: update addon version to 0.11.1

Refactoring

  • Refactor: move result_actions flag injection to engine level, fix formatting

Move the spec.result_actions → metadata injection from UseCase.execute_prompted_use_case
(base.py) to UseCaseEngine.execute() (engine.py) so it covers ALL use cases,
including those that implement execute() directly (e.g. DescribeFocusedImageUseCase).

Also fix formatting corruption in summary.py and structure_summary.py caused by
earlier multi-replace edit.

SHA256

6376b17014f66503e7aa3f8af30d53d0310cd1160148f92d036205bdc483d42e AIAssistant-0.11.1.nvda-addon

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 13 May 08:38

Changelog

All notable changes to this project will be documented in this file.

v0.11.0 - 2026-05-13

Features

  • Feat: update addon version to 0.11.0

  • Feat: add focus object image capture and description use cases

Implement two new use cases for capturing the focused NVDA object:

  • DescribeFocusedImageUseCase: captures the focused object's screen region
    and describes it via the LLM using the existing image description prompt.
  • AttachFocusedImageToChatUseCase: captures the focused object's screen region
    and opens a new chat with the image attached.

New layer mode bindings: F for focus describe, Z for attach focus image.

Adds focus_capture.py utility (NVDA API focus object -> screen region ->
base64 image) and registers both use cases in the registry.

Improvements

  • Docs: update changelog and readme for focus object image capture features

Add changelog entries and readme documentation for the two new
focus object use cases (describe focused object, attach focused
object image to chat) and their layer mode key bindings (F, Z).

SHA256

c1bcf229b7bf956373ad2e687f02dc4839f43e0546e83f9bd9c20c94b70a872d AIAssistant-0.11.0.nvda-addon

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 13 May 08:18

Changelog

All notable changes to this project will be documented in this file.

v0.10.0 - 2026-05-13

Features

  • Feat: update version to 0.10.0 and enhance changelog with new features and improvements

  • Feat: localise all UI strings for NVDA translator

Add # TRANSLATORS: comments to all translate() and _() calls across:

  • ui/session_state.py — provider labels, status messages, guidance
  • service/error_presentation.py — error titles and messages
  • service/provider_readiness.py — provider display names
  • plugin/controller.py — all script descriptions
  • plugin/application.py — use case titles, provider toggle, layer help
  • plugin/background.py — model preload messages (f-strings → _())
  • plugin/layer_mode.py — layer activation and error messages
  • plugin/presenter.py — empty result message

Add missing WebUI t() keys to Python localized_strings:

  • response_streaming_subtitle, attachment_load_failed, attachments_added_status

Fix WebUI attachment strings to use static fallback + .replace()
instead of template literals for proper localisation support.

  • Feat: improve chat error UX with inline error messages, composer text restoration, and attach-to-current fix

User-facing changes:

  • Add to current chat now injects the summary/description as an assistant message
    into the currently active conversation (was silently opening the window)
  • Provider errors during chat are shown as inline error blocks in the transcript
    instead of a display-mode overlay that hid the conversation
  • The user's message is restored in the composer so they can retry without retyping
  • Error streaming state is properly cleaned up via chat_stream_abort
  • New ErrorBlock content type for styled error rendering in the WebView

Internal changes:

  • StreamProjection.abort(reason) for clean teardown of in-flight streams

  • AttachToCurrentAction carries a token for seed text storage/resolution

  • Error metadata flows through chat_append metadata instead of show_error

  • ErrorPresentation type imported and used for content block construction

  • Full edge-case test coverage for attach-to-current flow

  • Changelog updated for v0.9.3

  • Feat(protocol): add canonical YAML spec and code generator

Replace hand-maintained command/event enums across Python, Rust, and
TypeScript with a single canonical YAML definition
(scripts/protocol.yaml) and a generator script
(scripts/generate_protocol.py).

Generated outputs:

  • addon/.../ui/host_protocol_constants.py (Python string constants)
  • nvda_ui_host/src/protocol_commands.rs (Rust CommandName/EventName
    enums + UiCommand impl with match arms)
  • nvda_ui_host/webui/.../protocol-commands.ts (TS type unions)

Wire protocol.rs to include! the generated Rust enums (506 -> 373
lines). Wire host_protocol.py to import from generated constants with
standalone importlib fallback for tests.

Token savings: 14 commands + 14 events now defined once instead of
across 3 languages. Adding a command = edit protocol.yaml + regenerate.

  • Feat(ui): add AttachToCurrent action for zero-token conversation attachment

Add AttachToCurrentAction that opens chat attached to the current
conversation without requiring a token roundtrip through the
ResultActionStore. This appears alongside OpenChat in result actions,
giving users a lightweight option when they don't need seed text.

  • Feat(config): encrypt API keys at rest using Windows DPAPI

Store Gemini and OpenAI API keys encrypted via Windows DPAPI (crypt32.dll
via ctypes) instead of plaintext in config.yaml. Existing keys are
automatically migrated on next save.

  • New utils/crypto.py with lazy ctypes DPAPI bindings

  • YamlConfigStore transparently encrypts on save, decrypts on load

  • CRYPTPROTECT_UI_FORBIDDEN flag prevents UI hangs on NVDA main thread

  • Sensitive keys detected by ApiKey/ApiToken suffix

  • Feat: update documentation and instructions for TypeScript migration, command handling, and Copilot integration

Fixes

  • Fix(ollama): stop auto-pulling model when not found locally

Change ensureModelInstalled to raise an error instead of
automatically calling ollama pull when the model is missing.
Users must now run 'ollama pull ' manually.

Improvements

  • Docs: add behavioral specs for protocol, stream projection, and presentation intent

Create docs/specs/ as the canonical source of truth for cross-layer
contracts. These specs serve as safety nets for refactoring, onboarding
for coding agents, and code-generation targets.

  • protocol-contract.md: all 14 commands, 14 events, envelope rules
  • stream-projection.md: StreamProjection lifecycle and normalization
  • presentation-intent.md: typed UI intent metadata and builder patterns
  • README.md: spec index and maintenance instructions

Refactoring

  • Refactor(providers): extract shared HTTP utilities from Ollama and OpenAI clients

Create providers/_http_utils.py with three generic helpers that consolidate
nearly identical patterns duplicated across provider API clients:

  • parse_json_response(raw, path, provider) — JSON parsing with descriptive errors
  • read_error_body(error) — HTTPError body extraction
  • request_json_with_retry(make_request, ...) — retry loop with timeout/backoff

Ollama http.py: -83 lines (delegates _parseJSON, _readErrorBody, _requestJSON
to shared utils; keeps _requestPullStream as Ollama-specific).
OpenAI client.py: -46 lines (delegates _parse_json, _read_error_body,
_request_json to shared utils; keeps SSE streaming as OpenAI-specific).

Gemini client.py is not affected — its _request_json pattern differs
(pre-built Request, SSL context, no HTTPError retry, different error
hierarchy).

Net: ~129 lines removed from provider clients, 112 shared lines added.

  • Refactor(plugin): extract ModelCache from UseCasePresenter

Move thread-safe model cache (RLock, {provider -> models} dict, async
refresh with stale-provider guards) into dedicated plugin/model_cache.py.

UseCasePresenter now delegates to ModelCache via _get_cached_models and
_refresh_available_models_async thin wrappers plus an _on_models_cached
callback that syncs UI session state.

Removes threading import and lock boilerplate from presenter.py.

  • Refactor(host): split webview.rs into focused sub-modules

Extract three concerns from the monolithic 636-line webview.rs into
dedicated files included via include!():

  • webview_state.rs (114 lines): static globals, thread-local controller,
    WebViewEvent enum, ready-transition logic, test helpers
  • webview_delivery.rs (123 lines): message send/flush/queue pipeline,
    asset embedding (host.html/css/js)
  • webview_events.rs (61 lines): JS event parsing and dispatch

webview.rs (358 lines) keeps: public API (resize, focus, post_host_command,
notify_window_visible), init_webview, and the test module.

No functional changes. All 5 webview tests pass.

  • Refactor: align legacy EVENT_HOST_CLOSED with canonical close_host spec

Drop the manual EVENT_HOST_CLOSED constant and align all layers
with the spec-driven 'close_host' event name:

  • Rust (window.rs, ipc/state.rs): emit 'close_host' instead of 'host_closed'

  • Python (host_protocol.py): import EVENT_CLOSE_HOST from generated constants

  • Python (host_renderer.py, test_host_protocol.py): EVENT_HOST_CLOSED -> EVENT_CLOSE_HOST

  • TypeScript (bridge.ts): type COMMANDS/CONTROL_COMMANDS with generated CommandName

  • TypeScript (protocol-types.ts): re-export CommandName, EventName, CHAT_COMMANDS

  • Refactor(host): consolidate verbose log messages in app dispatch

Replace multi-line log format strings in handle_command and
handle_raw_message with compact single-line log entries.

  • Shorten log prefix from 'Host app ...' to 'app ...'
  • Merge separate info-level forwarding and policy log lines into one
  • Compress debug-level preview logs to single line
  • Combine activation_policy and focus_request logging

Reduces app.rs from 294 to 272 lines and improves readability of
the command dispatch path without changing behavior.

  • Refactor(ui): extract session TypedDicts to session_types module

Split TypedDict type definitions from session_state.py (318→290 lines)
into a new session_types.py module (56 lines). Consumers that only need
the type shapes can now import from session_types without loading the
builder logic and localized string tables.

  • Move SessionProviderInfo, SessionProviderOption, SessionProviderStatus,
    SessionConversationSummary, UISessionMetadata TypedDicts to new module

  • Keep UISessionState dataclass in session_state.py (has to_metadata method)

  • session_state.py imports types from session_types.py

  • Refactor(ui): extract StreamProjection from adapter to dedicated module

Move _StreamedAssistantProjection and _normalize_stream_fragment from
ui/adapter.py (558→427 lines) into a new ui/stream_projection.py module.

  • Rename _StreamedAssistantProjection → StreamProjection (public API)
  • Rename _normalize_stream_fragment → normalize_stream_fragment
  • Add module docstring referencing spec at docs/specs/stream-projection.md
  • Adapter now imports StreamProjection instead of defining it inline

This reduces the token footprint for agents reading adapter.py by ~130
lines and gives the streaming projection logic a clear, testable home.

  • Refactor(webui): migrate to TypeScript with Svelte 5 clean architecture

Rewrite the WebView UI layer from JavaScript to TypeScript with
a clean architecture that separates concerns and eliminates fragile
reactivity patterns:

  • Extract Transcript class into transcript.svelte.ts with
    for inherent Svelte 5 reactivity, removing dependency on external
    \ proxy wrapping
  • Remove self-referential getter/setter on chat.messages in favor
    of direct appState.chat.transcript.messages access (2 fewer
    proxy hops in the reactivity chain)
  • Split monolithic bridge.js into modular command handlers
    (commands/), operations (operations/), and typed protocol
    types (protocol-types.ts)
  • Add CONTROL_COMMANDS set to bridge.ts so control state
    extraction only runs for open_chat, sync_session, a...
Read more

v0.9.2

Choose a tag to compare

@github-actions github-actions released this 11 May 12:08

Changelog

All notable changes to this project will be documented in this file.

v0.9.2 - 2026-05-11

Features

  • Feat: enhance logging functionality with file rotation and management

  • Feat: improve add-on package handling in security scan workflow

SHA256

4d094a078492ed024497ae9f6a43e9e42a5d154a7f1f56125c7d29fbbc46a25c AIAssistant-0.9.1.nvda-addon