Changelog
[0.31.3] - 2026-11-07
Documentation
- Publish the tutorials, illustrated guides, recipes and API manuals as a searchable dark documentation site with grouped navigation and stable links.
- Add browser-ready MCP recipes, source development and site maintenance guides, sitemap and machine-readable page index.
- Check rendered links, anchors and metadata through Make and CI while preserving literal JavaScript and Lua examples.
Added
- Add explicit token grants for every command and finite action/resource/setting choices, while retaining existing named grants.
- Add searchable permission selection and complete generated token/command references, plus JavaScript and Lua developer manuals.
- Include ordinary command names and operation grants in MCP tool metadata.
Fixed
- Close documentation search safely when focus leaves the page or moves to a non-focusable element.
- Retain caller grants and read-only authority for queued commands, scope job records and idempotency to their caller, and reject unauthorized nested work.
- Make semantic scrolling reach native dialog fields and make semantic taps focus text editors across every command binding.
- Declare finite choices in older command schemas so discovery and permission definitions agree. Exclude read-only provider resources from write discovery.
Migration for scoped jobs
Existing named feature grants remain valid. Older command-job records without a caller tag belong to the local owner and are hidden from scoped tokens. Named credentials now have separate idempotency namespaces. Inspect older submissions with owner access before retrying them after an upgrade.
[0.31.2] - 2026-11-07
Documentation
- Refresh the starter, launcher walkthrough, assistant, provider, template and API screenshots from the current build.
- Add illustrated workflows for app tasks and editing, conversations, model budgets, scoped credentials, backups, visual rules, permission handoffs and companion forms.
- Update the GPS todo tutorial for the app overflow menu and complete-source file selector.
- Add opt-in private-emulator capture scenarios for dialogs and recovery states.
Fixed
- Keep background permission notifications available during app transitions. Present the pending review only after the launcher resumes.
[0.31.1] - 2026-11-06
Changed
- Use shared action styling in widget pickers, widget menus and device setup; compact page movement controls and bound long HTML editor fields.
- Open each custom app in its own Android task with normal Home, Back and Recents behavior, without the manager toolbar. Native and remote launches reuse the same task per app.
- Open apps by their title in a compact list, with bundle editing, execution controls, export and removal in each app's overflow menu.
- Collapse token management actions until requested, lighten secondary controls and use larger left-aligned navigation labels.
- Increase chat control touch targets to 48dp.
Fixed
- Retain bundle editor drafts through rotation, confirm discarded edits and keep failed imports open for correction.
- Validate alternative JSON schema types so the native automation rule editor can preview and save its condition values.
[0.31.0] - 2026-11-06
Changed
- Open bundled and custom apps directly from Dikciz > Apps.
- Breaking: apps inherit all Android access granted to Dikciz. Remove per-app command restrictions and manifest approval dialogs. The optional legacy commands array no longer limits access.
- New apps start enabled. Opening a stopped app resumes it; source edits preserve running/stopped state.
- Update API documentation, agent guides and native menu, app manager and editor screenshots.
Migration
No manifest rewrite is required. Existing stopped apps remain stopped until opened or started.
[0.30.13] - 2026-11-05
Added
- Travel todo, a complete editable reference app with a checklist, opt-in New York geofence, custom-event completion and saved state.
- An illustrated source-linked app tutorial and updated launcher, scripting, MCP and operator documentation.
- Current starter and native walkthrough screenshots, including complete app management and JavaScript editing.
Fixed
- Allow declared geofence deletion during app cancellation cleanup so disabling Travel todo stops its location watch.
[0.30.12] - 2026-11-05
Added
- Complete custom apps with editable HTML/CSS/JavaScript interfaces, Lua or JavaScript backends, app-local state, declared commands, native event subscriptions, persistent one-shot timers and urgent dimmed modals.
- Native app creation, complete-source editing, manifest approval and source-only import/export, shared through HTTP, WebSocket, MCP and local bindings.
- Bundled SOS, Voice notes, Agenda and Device status apps. SOS message/check-in decisions now run from editable public JavaScript with migration of existing plans and review of interrupted runs.
- Background JavaScript scripts alongside Lua, with editable main.js source, shared event subscriptions, state, actions, phone commands and native archive import/export.
Fixed
- Present SOS warnings in a reusable modal with a dimmed background, blocked background taps and an explicit cancellation action.
[0.30.11] - 2026-11-04
Fixed
- Display a visible SOS cancellation countdown with a pinned Cancel SOS button, a foreground dialog fallback and an urgent notification before configured messages are sent.
- Explain pending SOS messages with offline speech, alarm pulses and vibration, then release warning audio and windows after cancellation or completion.
- Keep cancellation reachable over other apps, in landscape and with larger text, including when Home has no attached command endpoint.
- Expose warning state, semantic controls, screenshots and scrolling through the shared control interfaces.
[0.30.10] - 2026-11-04
Added
- Opt-in SOS contact plans, missed check-ins, cancellation grace, persisted SMS idempotency and visible stop controls.
- Accuracy-aware geofences, custom crossing/dwell events and persistent paginated journeys with local route previews.
- Retained RFCOMM, GATT, USB and NFC connections, bounded lifetimes and an optional ELM327 vehicle template.
- On-device Latin OCR, barcode reading, manual perspective correction and raster PDF output.
- Health Connect record discovery, targeted grants, history, aggregates and owned writes/deletes.
- Android-approved saved/local Wi-Fi network flows and local-only hotspot lifecycle.
- Split APK installation sets and cancellation of owned pending installation sessions.
- Five reusable assistant routines with enforced read-only turns, including event subscriptions.
- Native companion screens, launcher-control version text and focused MCP guides.
- Persistent command activity with caller identity, outcomes, duration, interruption state and a native activity/resource screen.
- Token expiry, last-use metadata, rotation, per-token rolling request limits and exact SMS address restrictions.
- Durable event replay and named consumer acknowledgements that survive process restart.
- Visual automation rules with payload conditions, cooldowns, bounded actions and Lua simulation without Android effects.
- Camera and display JPEG streams, partial speech recognition streams and recorded-file transcription through saved compatible providers.
- Encrypted home, widget state, scripts, provider settings and chat backups, with optional API keys, validated previews and restart recovery.
Changed
- Add Getting started links, consistent native form styling, larger chat model controls and explicit resource pause confirmations.
- Expose current resource inventories and token limits through the shared command schemas and focused MCP documentation.
- Bundle Google ML Kit SDKs and models for local image recognition under their separate terms, with SDK performance/utilization metrics disclosed in the dependency guide.
Fixed
- Preserve ML Kit component registrar constructors required by on-device recognition in minified builds.
- Request Android 14+ Health Connect runtime permissions through the runtime permission API instead of launching an internal Activity Result intent.
- Preserve geofence observations across numeric JSON reloads and sample the newest GPS fix without recording stale provider callbacks.
- Preserve queued automation and chat service starts during rapid subscription changes.
- Recover backup checkpoints before loading home configuration and prevent incomplete rollback copies from replacing current files.
- Include visible native confirmation dialogs in API screenshots.
This history includes the releases made while Dikciz and Android Lab shared one repository.
[0.30.9] - 2026-11-04
Added
- Named remote access tokens with per-feature grants, native management, filtered tool discovery and search, and shared execution enforcement across HTTP, WebSocket and MCP.
- Immediate credential revocation checks, identity-bound MCP sessions and restricted WebSocket snapshots/event feeds.
- Offline SQLite full-text search for packaged guides, public manual sections and installed tool schemas, with authored aliases, weighted ranking, prefixes, spelling correction and persistent owner collections.
- Shared search, full-text reads, collection listing and atomic index commands through MCP, HTTP, WebSocket, HTML and Lua.
Changed
- Embedded chat searches relevant documentation directly and uses ranked tool discovery, preserving trusted read-only visibility and execution checks.
- Tooling and lint reject stale packaged search documentation.
Fixed
- Native semantic checkbox taps report success after changing the checked state, including access-token grant selection.
[0.30.8] - 2026-11-03
Added
- An illustrated tutorial covering installation, home editing, provider and model setup, read-only chat, remote connections, Lua events, Android tools and SDK calls.
- A complete HTML template gallery and captured command results, with emulator hardware limits and provider failures identified.
Changed
- Refresh launcher screenshots with the current controls, populated weather and calendar data, a saved voice note and device measurements.
- Link the tutorial from the README, documentation index and scripting guide.
[0.30.7] - 2026-11-02
Added
- Public Android SDK discovery and typed calls through MCP, HTTP, WebSocket, HTML and Lua, with exact overloads, object handles, callbacks and process-scoped idempotency keys. Android permissions and documented bridge restrictions still apply.
- SIM own-number reads with per-number availability and targeted permission review. Missing number access preserves the existing SIM metadata.
- Packaged MCP guides for SDK calls, SIM access and assistant tool contracts.
Changed
- Separate chat quick tasks from the transcript with outlined buttons, a divider and a padded message viewport.
- Include the installed tool schema in rejected assistant calls and distinguish saved conversation access from temporary screen-explanation restrictions.
Fixed
- Read-only agents cannot discover write tools or unaudited SDK members. Forced writes and permission prompts fail before execution, including mutations attempted through the SDK read command.
- A settings patch containing only readOnly:true can restrict an active conversation immediately. Each tool call rechecks access; other settings changes still require stopping the turn.
- Screen explanations preserve the conversation access setting, so a temporary read-only turn does not disable writes for later ordinary messages.
[0.30.6] - 2026-11-02
Added
- A quiet persistent Open chat notification for opening the half-screen assistant over another app while idle, without an extra running service.
- Live assistant activity notifications with a Stop action and direct return to the running conversation. Stale notification actions cannot cancel a newer turn.
Changed
- Redesign the chat sheet with a compact model toolbar, readable header actions, an empty state and a clearer composer. Tool records show their names before expansion.
Fixed
- Empty streamed tool arguments now become an empty JSON object, allowing no-argument tool calls to complete with OpenAI and Anthropic providers.
- Existing conversations with empty or malformed saved tool arguments can continue after update or restart. Provider replay preserves rejected text and recorded outcomes without repeating completed operations.
- Tool wrappers reject malformed JSON, non-object inputs, unsupported fields and wrong parameter types before native execution. Rejected requests remain recoverable within the conversation.
- Notification discovery clears removed action tokens immediately when an updated notification has no actions.
[0.30.5] - 2026-11-02
Fixed
- Pin Android Lab 0.16.0 so fresh builds use the signed Ubuntu archive and security repositories over HTTPS instead of the unavailable snapshot service. Package downloads retry transient failures and incomplete index updates fail before installation.
[0.30.4] - 2026-11-02
Added
- Native Make me a widget and Explain this screen actions, shared through the chat command on every ordinary entrypoint.
- Persistent page targets for generated widgets and screen capture before provider requests, with read-only execution for screen explanations and automatic chat reopening.
Fixed
- Restore MCP documentation resource discovery by keeping the packaged chat guide within its section-size limit.
[0.30.3] - 2026-10-29
Added
- Automatic context limits for known OpenAI and Anthropic models, provider metadata with an offline model catalog, persisted model discovery and editable per-conversation token budgets.
- Known model ceilings in native chat settings and shared settings responses, with output reserves and input ceilings respected during compaction.
[0.30.2] - 2026-10-27
Fixed
- Update Android Lab to 0.15.0, using Ubuntu tool images with a fixed package snapshot so clean CI builds no longer depend on obsolete Alpine package pins.
[0.30.1] - 2026-10-27
Added
- OpenAI, Anthropic and Custom templates in the chat provider form, with standard URLs and protocols filled automatically and editable connection fields for custom hosts.
[0.30.0] - 2026-10-25
Added
- Per-conversation read-only phone access with filtered tool discovery and a trusted executor flag blocking mutations, direct write-tool calls and permission prompts.
- Shared provider connections with an API-backed model dropdown and independent model, token, reasoning, compaction and timeout settings for every conversation.
- Chat settings/configure commands shared by native, HTTP, WebSocket, MCP and scripting bindings, with an in-place database upgrade preserving existing providers, encrypted keys and history.
Fixed
- Retain failed, cancelled and interrupted chat requests and completed tool results in later context, with explicit unknown outcomes for interrupted calls.
- Return rejected documentation requests as recoverable chat tool errors and explain the distinction between tool discovery, execution and resource discovery.
- Exclude queued future messages from the active chat turn's context.
Migration
Existing profiles keep their model and token defaults. The chat database upgrades in place and retains encrypted keys, messages and event rules. Model and token edits now belong to each conversation. Read-only mode defaults to off; once enabled, changing models or providers retains it.
[0.29.1] - 2026-10-24
Fixed
- Keep Goblin controls at full width below the animated badge instead of squeezing their labels into narrow columns.
Documentation
- Refresh the starter screenshots from the current Android build, add the Goblin page to the README gallery and capture walkthrough, and correct the user guide's bundled page list.
Migration
Existing Goblin widgets keep their saved source. Reset the starter home or add clear: both to the widget's .buttons CSS rule to apply the layout fix.
[0.29.0] - 2026-10-24
Added
- A Goblin starter page and reusable complete WebView with manual speech, local alien sounds, timed torch pulses and outdoor weather checks.
- Three disabled Lua examples for London arrival, outdoor heat above 35 Celsius and GPS speed above 80 km/h, with persistent rearm thresholds and cooldowns.
- A complete catalog of bundled HTML templates and Lua scripts, with activation and data-source details.
Migration
Existing edited homes remain intact. Reset the home to load the fourth page and bundled scripts, or add Goblin control from the widget picker. GPS scripts require precise Android location access; the outdoor heat script receives fresh weather from the visible Goblin widget. All new scripts and weather watch start disabled.
[0.28.0] - 2026-10-24
Added
- Native cheese-button assistant with half/full-screen streaming Markdown, persistent SQLite conversations, encrypted provider credentials, custom OpenAI/Anthropic hosts, model discovery and reasoning/output settings.
- Complete-exchange trimming or summary compaction with reserved output budgets, shared MCP phone tools, configurable event-driven turns, hidden-reply badges and notifications, cancellation and interrupted-work recovery.
- Shared chatControl/dikciz_chat commands, focused MCP chat guides and fake-provider Android acceptance tests.
Fixed
-
Expose current HTML event subscriptions through widgetGet and allow validated subscription-array replacement through the shared JSON patchWidget action, including the HTML bridge.
- Remove uninstalled apps from Most used immediately through packageChanged events, protect against stale in-flight icon work, and refresh when the widget becomes visible again.
- Require a stationary one-second hold before moving native app shortcuts or groups. Quick swipes cannot accidentally move or group them; hold and release retains edit actions.
Migration
Existing home files and conversations are preserved. Configure a model provider from the new cheese chat control before sending messages. Chat and configured event rules send requested phone data to that provider and may incur usage charges. Chat history stays in private app storage and survives home resets; uninstalling or clearing app data removes it. Customized Most used widgets keep their document; add the updated template or add its packageChanged subscription to receive immediate uninstall updates.
[0.27.0] - 2026-10-23
Added
- Three redesigned starter pages with clock/weather, real app icons and usage-based ranking, a native bottom dock, agenda, voice notes, and a visual battery/CPU dashboard. Reusable documents include reduced-motion and hidden-page behavior.
- Bounded per-core CPU inventory, readable clock/load samples and normalized process CPU metadata across the shared command target. Protected system counters remain explicitly unknown.
- Optional seven-day foreground-use metadata in appCatalogue and native timed torch off requests, shared across entrypoints. Home quick actions demonstrate owner-started torch pulses and speech.
Fixed
- Honor explicit padding on unframed native app shortcuts, including the bottom dock.
- Preserve voice-note stop requests that arrive during a microphone status poll.
- List complete HTML templates directly in the Dikciz widget picker with searchable descriptions. Empty HTML widget inserts a blank document without another menu; saved templates and package previews remain available.
Documentation
- Replace the starter screenshots with configured Home, Tools and Device pages showing live weather, sample agenda entries and a saved recording.
Migration
Customized homes and existing library packages are preserved. Reset Dikciz home to try the new layout. The dock uses installed apps; it omits missing handlers. Usage ranking needs Android Usage access, and torch/speech demonstrations start only after a tap.
[0.26.0] - 2026-10-23
Added
- Four independent half-page starter WebViews: time/weather and agenda on Home, voice notes and device status on Tools. Each is a complete reusable HTML/CSS/JavaScript library template with separate state.
- Shared read-only calendar occurrence queries for the current seven-day window, with Android recurrence expansion and pagination, plus the next alarm timestamp in device state.
- Tap-operated voice recording with stop/save, widget-owned audio, recent playback and save recovery. Existing homes remain unchanged on APK update.
Documentation
- Correct typed action names and policy mappings, HTML whole-document editing, credential-file restrictions, event replay and process-versus-activity lifecycle guidance.
- Add the complete typed-action and Android access references, including NFC payment-card protocol and session limits. Package feature access and all typed-action fields as four additional short MCP resources.
Migration
Fresh installations and Reset Dikciz home now use Home and Tools with four independent HTML widgets. Existing saved homes remain unchanged on update. Add the new templates individually or reset the home to use the demo layout. Saved voice recordings belong to their widget and are deleted with it; copy recordings elsewhere before removing that widget. Calendar and microphone actions require Android access.
[0.25.0] - 2026-10-23
Fixed
- Grid dimension changes resize widgets to fit, relocate collisions and evict overflow items instead of refusing smaller grids. Full-width HTML follows the column count; all control bindings share the procedure and report evictions.
- Shared state patches accept JSON null consistently with saved widget and script state, including nullable API results.
Added
- Live microphone PCM streaming with a dedicated Android foreground service, owner Stop action, bounded reconnectable replay, shared microphone ownership and explicit lifecycle/cleanup results.
- Native one-shot USSD requests with voice-SIM selection, shared phone-access recovery, configurable response/observation budgets and explicit uncancellable network outcomes.
- Bounded foreground camera MP4 recording with optional microphone AAC, discovered sizes/FPS ranges, shared hardware ownership, finalized-media inspection and cancellation cleanup.
- Replayable process-owned automation events with epoch-bound cursors, filters, long polling, adjustable retention, explicit loss and current Android source-access checks.
- Bounded torch-state callback observation, finite vibration waveforms and predefined effects with native-support discovery and strict action-specific validation.
- Configurable JPEG quality, orientation, sensor crop zoom, exposure compensation and autofocus, with actual Android completion metadata and device-range validation.
- Process-owned shell sessions with incremental cursor reads across every ordinary binding, bounded replay history, explicit gaps, cancellation, retention and release controls.
- Recognition language inventory and model-download requests with provider progress, scheduled/available distinctions, bounded observation and status.
- Requested Wi-Fi scans with explicit throttling/failure, bounded completion, cleanup and per-result elapsed-time freshness.
- Managed microphone recording with explicit start/status/stop/cancel, shared hardware ownership, input preference, encoding options and automatic duration/file limits.
- Local audio playback sessions with asynchronous status, pause/resume/seek/stop, volume, audio focus, output preference and expiry.
- NFC tag reading, NDEF writing and raw technology transactions with optional tag selection; Bluetooth BLE/classic discovery, pairing requests, bounded RFCOMM and GATT discovery, attributes and observations.
- Shared notification dismissal, snooze and inline reply, file lifecycle/search operations with protected credential paths, durable asynchronous command jobs, USB owner access and control/bulk transfers, saved speech audio, geocoding and GNSS status.
- Standard modern stateless MCP discovery and legacy protocol negotiation, with mirrored-header validation and focused interoperability tests.
- Speech voice discovery, voice/language/rate/pitch selection and output cancellation.
- Shared microphone speech recognition with on-device/system modes, provider discovery, language selection, deadlines, alternatives/confidence and cancellation.
- Torch and vibration controls, allowlisted system-setting read/write/read-back, camera capability discovery and Bluetooth, USB, NFC, Wi-Fi and audio inventories.
- Claude Code and Codex plugin manifests, Glama maintainer metadata and focused agent connection documentation for owner-supplied phone endpoints.
- A documentation index, capability coverage table, complete discovered command reference and focused speech/hardware MCP guides.
Migration
Updates preserve existing home files. Changing grid dimensions now reflows widgets and removes overflow items in saved order; back up crowded pages before shrinking them. Apps remain installed when their shortcuts are removed. New device operations require the corresponding Android access and actual hardware. Microphone streaming starts while Dikciz is foreground and uses process-owned replay, which is lost on app process death or APK replacement. Cellular call audio remains platform-restricted.
[0.24.0] - 2026-10-22
Added
- Shared hardware sensor samples, camera discovery and JPEG capture, microphone recording, device speech and explicit cellular call-audio capability reporting through HTTP, WebSocket, MCP, HTML and Lua.
- A bundled Sensors page and reusable complete Live sensors WebView template with live readings and per-sensor unavailable states.
Fixed
- Home reset restores bundled validation limits so older text limits cannot reject bundled widget documents.
- HTML exposes native page and window visibility so preloaded pages can defer permission requests and pause live work while hidden.
- Weather uses permitted phone location when no city is saved, with bounded fresh-fix lookup and manual search fallback. Saved manual cities keep precedence.
Changed
- Tag pipelines wait for the same commit's successful main push pipeline before publishing the signed APK and launcher skill. Build, lint and tooling tests run on main and ready pull requests without repeating on tags. Release badges update after APK publication.
Migration
Updates preserve edited homes. Use Reset Dikciz home to load the three-page starter, or add the Live sensors template to an existing page. Camera and microphone capture require Android grants and foreground eligibility. Cellular call recording and audio injection remain unavailable without privileged system integration.
[0.23.0] - 2026-10-22
Fixed
- New app shortcuts finish insertion without a stuck selection outline. Move and explicit resize controls remain available.
- Widget drops use the finger position at release, so delayed move events cannot leave a shortcut in the preceding cell.
- Page content no longer adds a second grid outer inset beside the right and bottom pager rails. Widget style margins remain configurable.
Changed
- New and reset homes use an 8-column, 6-row grid with full-width Home and Insights widgets. Complete dashboard templates also span eight columns. Existing explicit grid dimensions remain unchanged on update.
Migration
Updates preserve edited homes and their saved grid sizes. Choose 8 columns and 6 rows in grid settings to change an existing layout, or use Reset Dikciz home to replace its pages and grid with the bundled starter.
[0.22.1] - 2026-10-22
Fixed
- The pipeline accepts manual runs on a selected branch or tag. Selecting a release tag runs its build checks and release jobs.
[0.22.0] - 2026-10-22
Fixed
- Intent dispatch accepts requests without the optional data URI, including broadcasts, through every entrypoint.
Changed
- HTML widgets are complete programmable documents. Content and background long presses open the same whole-widget controls, and Edit exposes HTML, CSS, JavaScript and JSON state. Removed native card menus, card preset objects and fragment insertion. Existing documents and saved state remain intact.
- The HTML library adds complete System dashboard and BTC and economic news templates. The system template labels Android-restricted CPU data and sensor inventory; the market template keeps dated results and refreshes external data explicitly.
- The shared device-state command reports RAM, storage, CPU samples, battery temperature and voltage, and bounded sensor inventory through all entrypoints.
- HTML app lists display Android icons through the shared
appIconcommand and MCP tool. The hint now distinguishes app launching from native drawer shortcuts.
Migration
Automation using html-item:* or add-block UI controls must edit the containing document through its widget editor or saved source. Native Delete removes the whole WebView. Existing custom files and optional item-state APIs remain available. Old fragment-library directories are left on disk and are no longer loaded.
[0.21.1] - 2026-10-22
Fixed
- Long pressing an HTML document background or empty container padding opens its widget controls instead of a missing-item message. Saved cards retain their scoped controls; runtime-only targets remain protected.
Changed
- HTML widgets hide native and nested HTML scrollbars while preserving scrolling.
[0.21.0] - 2026-10-22
Fixed
- Browser search passes its URL through the shared native intent command. The optional data URI is validated and available through every entrypoint.
- Saved single-card HTML documents using
main.cardsupport item editing while document containers and empty padding remain protected. - Concurrent native edits and automation state patches preserve unrelated state and cannot restore a deleted wrapper from an older configuration.
Changed
- HTML state belongs to page/widget directories. Wrapper state uses
state.json; card instances useitems/<instance-id>/state.jsonand can keep custom files beside it. Legacy embedded state migrates, file edits refresh the owning view, and deleting an instance or wrapper removes its owned files. - The starter Home is one full-page WebView with three editable cards. Existing homes retain their layout.
- Clock, installed-app search and notes are working card presets and standalone HTML widget packages. The complete dashboard is also a package.
- Saved cards offer Save as preset. Presets retain HTML, CSS and JavaScript and can be inserted without reloading the document. Repeated built-in notes keep separate saved state. Saving refuses duplicate IDs and excludes personal widget state.
Migration
HTML widget state now lives in page/widget directories instead of the widget JSON record. Existing embedded state migrates automatically. File-based integrations must write the new state files. Reset the home or add the Home dashboard preset to use the combined starter on an existing installation.
[0.20.0] - 2026-10-22
Added
- A two-page starter home with clock and web search, installed-app search, saved quick notes, local phone status and optional city-based weather and air quality. Three utility Lua examples start disabled.
- Direct Android commands shared by WebSocket, MCP, HTTP, HTML and Lua. Discover provider resources, read bounded pages, edit contacts and calendars atomically, inspect SIMs, calls, clipboard, last-known location, notifications, media sessions and device state.
- Tracked SMS submission with durable duplicate protection, SIM selection and separate sent/delivery receipts. Packaged MCP guides document native data and the contact/SMS workflow.
Fixed
- SMS documentation describes Android provider persistence for messages sent by non-default apps and distinguishes submission from sending or delivery.
Changed
- Fresh homes use Home and Insights instead of the previous demonstration pages. Edited homes keep their saved content on update. Reset Dikciz home installs the new pages and restores the three disabled utility scripts; other saved scripts and policies remain. Disable or delete unwanted older examples in Settings, Scripts.
- Lua owner-command requests accept object tables as well as JSON strings, with bounded encoding for nested values.
[0.19.0] - 2026-10-21
Added
- MCP documentation resources provide 26 short guides and recipes, an index, paginated discovery and one-section reads. Each section is limited to 4096 UTF-8 bytes. The client adds
mcp-resourcesandmcp-readcommands.
Fixed
- Full-device permission setup uses a dedicated Android task that remains in Recents after Settings or another app takes the foreground. Returning refreshes actual grants and the next setup action, including after activity or process recreation. The same setup controls and screenshots are available through WebSocket, MCP and HTTP.
Migration
- UI clients must accept
snapshot.screen: "deviceAccess"while full-device setup is open. Existing setup control IDs remain available.
[0.18.0] - 2026-10-21
Added
- Enabled Lua scripts can call ordinary launcher commands through
context.requestandcontext.requestJson, receiving canonical results and permission recovery. Enabling a script grants owner command access; Android permissions and root approval remain required.
Fixed
- Long presses inside HTML content select the pressed card or block for a native item editor and scoped deletion. Removing an HTML item preserves its containing widget, page and siblings. Whole-widget controls remain on the top move handle.
- The bundled command deck tolerates missing card elements so remaining controls can initialize after a card is removed.
- APK update recovery starts the automation foreground service before reopening Home, restoring configured background event sources and schedules when Android prevents background activity launch.
- Ordinary MCP operations use the shared command validator and executor. MCP screenshot results retain their PNG payload alongside image content, and the HTTP client supports PNG export and explicit overwrite.
- Remote text editing accepts empty strings, allowing clients to clear an input like the native editor.
- HTML errors retain permission recovery metadata. HTML and Lua lifecycle requests deliver their response before recreating the launcher.
Migration
- Review enabled Lua scripts before upgrading. Their new owner command functions can access files and shell commands independently of the policy's returned-action list. Disable scripts you do not trust. Event delivery and returned typed actions still require their configured policy grants.
- Use the top move handle for whole-widget HTML controls. Long presses inside HTML now edit or delete the nearest saved item.
- Exact MCP screenshot schemas must accept
pngBase64in structured results alongside the image content block. HTML requests now allow one MiB of UTF-8 JSON. Live shell streaming remains available through WebSocket, MCP and HTTP only.
[0.17.0] - 2026-10-20
Added
- Opt-in permission recovery through
autoRequestPermissionsand explicitrequestDeviceAccesscommands on WebSocket, MCP, HTTP and the HTML bridge. Phone notifications and consent dialogs identify the requested access. Replies distinguish missing access, queued owner review, notification delivery and already-granted or unavailable access.
Fixed
- External activity launches share task isolation and foreground verification across native controls, Lua, HTML, WebSocket, MCP and HTTP. Replies distinguish accepted requests, observed launches, missing access, locked screens and targets that never appear.
- Debug builds display
Dikciz (debug)in Android Home selection, app info and the app drawer, distinguishing them from the release app namedDikciz.
Migration
- Launch clients must accept the new
activityLaunchesresult array and terminal outcomeslaunch_unverified,launch_not_observedanddevice_locked.outcome: "launched"andlaunchApp.launched: truerequire observed foreground evidence. Missing Accessibility no longer reports a verified launch.app_action_completedrecords request acceptance;activity_launch_observedrecords verification. - Exact command and discovery schemas must accept
autoRequestPermissions,requestDeviceAccess, its MCP tool andpermissionRequestrecovery details. Device-access inventories includehomeAppandinstallPackages. APK installation no longer opens unknown-source settings automatically; opt in to owner review or request the access explicitly.
[0.16.2] - 2026-10-20
Added
- Live shell and logcat output through WebSocket, MCP and HTTP, with explicit cancellation, configurable deadlines and binary-safe chunks. Streaming defaults to no deadline; ordinary shell commands retain their 30-second default.
- The Python client consumes live output as JSON Lines or raw bytes with
--stream-raw. - The startup screen shows the running version and build type.
Fixed
- Apps opened from Dikciz use independent Android tasks, so Home and Recent apps preserve their running state.
- Android Back handling uses the system callback on Android 13 and newer while keeping the legacy path for older devices.
- Android lint now runs in the required CI code job. Permission declarations, exact-alarm checks and move-handle accessibility pass its checks.
Migration
- Exact control schemas must accept
shellStream,shellStreamStop, their MCP tools and the new streaming limits. WebSocket clients must acceptshellStreamEventframes. Clients must consume SSE for HTTP and MCP streaming calls. MCP callers must opt in to request-scoped log notifications; the supplied client does this automatically. - Continuous commands stop when their originating connection closes, authorization changes or the listener stops. Full device logcat requires privileged access.
[0.16.1] - 2026-10-20
Fixed
- APK updates now reopen Dikciz and its remote listeners when it is the default Home app or has overlay access. Saved configuration and authentication are preserved.
- When background reopening is unavailable, an update notification opens the new launcher directly and clears on startup. If notifications are disabled, open Dikciz manually.
[0.16.0] - 2026-10-20
Removed
- Removed the default SMS role from permission setup, its request and result handling, and the public device-access inventory. The wizard no longer gets stuck retrying that role. Ordinary SMS read, receive and send permissions remain available.
Migration
- Clients that validate the exact
automationStatus.deviceAccessinventory must remove thesmsRolerequirement and unusedrolekind. Progress totals cover the remaining supported controls. No saved configuration change is required.
[0.15.5] - 2026-10-20
Added
- WebSocket, MCP and HTTP expose
deviceInfo,packageInfoand an acknowledgedrestartthat recreates the launcher and listeners while preserving saved configuration and the process. displayScreenshotcaptures the visible Android display through enabled Accessibility on Android 11 or newer. Existingscreenshotretains launcher-window capture.- Diagnostics identify the serving package, installed version, process and activity instance.
launcherHandoffswitches listener ownership between installed debug and release builds without killing the serving process. Target file access and listener support are checked before shutdown.
Fixed
- Listener bind failures continue retrying every 30 seconds after their initial fast attempts, so a released port conflict no longer requires manually restarting the app.
- Failed binds close their sockets before retrying.
- The Python MCP client deletes sessions after successful and rejected calls. Cleanup tolerates restart-invalidated sessions, preventing repeated CLI calls from exhausting the session limit.
Changed
- Scheduled issue synchronization uses repository-specific hours to spread workflow load throughout the day.
Migration
- Exact control schemas must accept the five new commands, matching MCP tools and the diagnostics
applicationobject. A restart closes old connections and MCP sessions; reconnect and verify a changed instance ID.
[0.15.4] - 2026-10-19
Added
- WebSocket, MCP and HTTP commands browse arbitrary app-accessible paths, read and write bounded binary chunks and create directories. The Python client adds HTTP commands and chunked
uploadanddownloadhelpers. - Standalone APK installation stages uploads asynchronously, optionally verifies SHA-256 and exposes Android permission, confirmation, success, cancellation and failure states by session ID.
- Plain HTTP POST
/v1/automationshares the MCP listener, authentication, browser-Origin checks and validated command target, including shell output and exit status. - Settings, Configure logging selects DEBUG, INFO, WARN or ERROR and retention from 1 to 90 days. Saving applies immediately; Cancel leaves the saved configuration unchanged. Defaults remain INFO and seven days.
- The native log viewer, WebSocket
scriptLogsand MCPdikciz_script_logsinclude the target app as nullablecomponentPackage. App actions expose theiractionType, and direct shortcut launches record their target package too.
Changed
- Shell commands now default to a 30-second timeout, increased from five seconds, and accept per-request
timeoutMillisecondsandmaxOutputBytesthrough WebSocket, MCP and HTTP. The output default remains 64 KiB. Discovery reports defaults and supported ranges, and the supplied client waits for the requested command budget. - Successful app launches no longer show a popup. App-action logs retain the action, target and outcome; failures still show feedback.
- The guides document daily UTC log files at
/sdcard/Dikciz/logs/YYYY-MM-DD.log, level filtering and retention controls.
Migration
- Exact discovery schemas must accept
transports.http, the six file/APK commands and their matching MCP tools, and the shell timeout/output fields in commands, tool schemas and limits. HTTP uses the configured MCP port; existing endpoint settings need no change. - Clients that validate exact log-record keys must accept
componentPackage, which is null for records without an app target.
[0.15.3] - 2026-10-19
Added
- WebSocket and MCP listeners accept a configurable numeric IPv4 or IPv6
listenAddressincontrol/ports.jsonand the native control-port settings. Set0.0.0.0for direct IPv4 connections over a private network or VPN without USB forwarding. Existing records retain the127.0.0.1default. controlStatus.transportsreports each listener'slistenAddressalongside its port and path.
Changed
- Editing, atomically replacing or deleting
control/ports.jsonautomatically rebinds both listeners when their effective address or ports change, including while another Android app is in front. Rewriting unchanged endpoints keeps current connections open. - The README, connection walkthrough, configuration reference, user guide and agent setup describe direct network access, bearer authentication, directional network policies and connection troubleshooting.
Migration
- Existing installations keep their loopback binding and ADB forwards. For direct access, enable bearer authentication, choose a network listen address, and connect to the phone's reachable hostname or IP using its device ports. Allow traffic from the controlling computer to those ports in the network policy.
- Invalid listener configuration falls back to
127.0.0.1:19001and127.0.0.1:19002. A changed endpoint closes current connections; reconnect using the new settings.
[0.15.2] - 2026-10-19
Fixed
- Lua automation no longer crashes minified builds with
NoClassDefFoundErrorwhile initializing LuaJ's bit library. Dikciz preserves the library function classes and their constructors during release shrinking.
Added
make dikciz-test-minified-luaruns the Lua context and failure diagnostics tests with release shrinking enabled. Its debug-signed APK uses the debug package and can install alongside the signed release.
[0.15.1] - 2026-10-19
Changed
- The startup screen lasts five seconds instead of ten. Each second it shows a different line picked at random from a hundred hacker and programmer jokes, and no line repeats within one launch. The current line is the
startup:messagesemantic node. - The lab pins Android Lab 0.14.1, whose emulator container has a 12g memory cap instead of 8g. At 8g, long test runs could get the emulator killed.
ANDROID_LAB_EMULATOR_MEMORY_LIMITpasses through Make to override the cap. Runmake restartonce to recreate the emulator with the new cap.
Fixed
- The app icon opens the Dikciz home. Before, it opened Fossify's own launcher, which could show Fossify's "fake version" warning and send you to the Play Store. The Dikciz build no longer contains any Fossify screen. Fossify's launcher icons, home, settings and hidden-icons activities and the Fossify library's about, customization, FAQ, license, contributors, donation, app-lock and blocked-numbers activities are removed from the manifest, along with the library's exported receiver for Fossify's shared theme.
- Without shared storage access, the prompt fills the page and its Grant file access button can be tapped. Before, the prompt was squeezed into the top-left grid cell, its text was cut off and the button was out of reach. The configuration error screen had the same fault and fills the page too.
- The debug log no longer records app component names from the app drawer. Drawer taps log
drawer:appordrawer:app-actionsinstead of the full semantic ID. - The cold-start brand stays dismissable through the control planes while the storage prompt is showing.
- The live tests tap the storage prompt's button at its on-screen position and cover the app icon, the removed Fossify screens and the startup lines. The log audit no longer expects an event the launcher stopped writing, and the Lua access test waits for the widget patch that follows the state patch.
[0.15.0] - 2026-10-19
Added
- The WebSocket and MCP device ports are configurable in
/sdcard/Dikciz/control/ports.jsonand under Settings, Automation, Configure control ports. Saving in Settings restarts both listeners. Direct file edits apply when the listeners next start. Ports must be 1024 to 65535 and differ; an invalid file falls back to 19001 and 19002. No control-plane command can change them, andcontrolStatusreports the ports in use. - The page menu's Cancel button has the semantic ID
page:menu:<page-id>:close, so control clients can close the menu.
Security
- The WebSocket control plane refuses browser origins other than device loopback with
403 Forbidden, the rule MCP already applied. Before, any web page open in the phone's browser could connect tows://127.0.0.1:19001and run launcher commands while the bearer password was off. Native clients, ADB forwards and apps without anOriginheader connect as before. - An automation script receives an event only when its policy is enabled and grants that event's capability. A metadata capability without its content counterpart hides the content fields: clipboard
textandtextTruncated, calendartitle,descriptionandlocation, SMSmessages, notificationtitleandtext, and media-sessiontitle,artistandalbum. Before, every subscribed script received full event content whatever its policy granted. A refused delivery logsautomation_delivery_rejectedwith reasoncapability_denied. automationTriggerrefuses a script whose policy is disabled or does not grantmanualTrigger.
Fixed
- A reset to the bundled home outside safe mode keeps every bundled page. Before, the running launcher kept only the home page until the next reload, so selecting another page failed with
page ID was not found. - Granting Do Not Disturb access delivers the current interruption filter to subscribed scripts and widgets. Before, Dikciz did not notice the grant until the automation service restarted.
- A Lua script that hits the instruction, time or memory limit fails with its
instruction_budget_exceeded,execution_deadline_exceededormemory_budget_exceededreason, logs the failure and sends the failed-script notification. Before, LuaJ reported the stopped run as a success, so the script showedcompletedwith no event handler. - The cold-start brand stays in the semantic snapshot as
startup:dismissuntil it is gone, so a control client can dismiss it. Before, the first home render removed the node while the brand still covered the screen and took the next touch. - A delivery dropped by
minimumIntervalMillisecondslogsautomation_delivery_rejectedwith reasonrate_limitedat debug level. - HTML widgets draw their native card frame. The theme and the Appearance editor set their background, border, margin and padding, as the configuration guide describes. Before, Dikciz saved these settings for an HTML widget and drew none of them.
- Dikciz no longer crashes with
ForegroundServiceDidNotStartInTimeExceptionwhen automation is switched off right after it starts, or when a cold start keeps the launcher busy. The visible launcher starts the automation service as a normal service, and a stop request reaches the service, which leaves the foreground before it ends. - The live test suite runs again. Its conftest pointed at the combined repository root and Android Lab's old in-repository device script, so every test failed at collection since the split. Tests that still expected removed widgets, older layouts or a fixed event order now follow the current launcher.
Migration
- Check each automation policy against its script's subscriptions. A script needs the capability of every event it subscribes to, the content capability to keep reading content fields, and
manualTriggerforautomationTrigger. The bundled policies already declare theirs.
Documentation
- "Who can connect" in the automation control guide and a README note explain that other installed apps can reach the control planes unless the bearer password is on.
- Source, script, test and Fossify directories have their own README files, and the root README, configuration, automation and user guides match the current code. The automation guide documents MCP sessions and corrects the
patchDomargument shape to avaluesobject. A Fossify source refresh keeps.fossify/README.md.
[0.14.1] - 2026-10-18
Fixed
- The app is named Dikciz in every language. Before, phones set to a language with a Fossify translation, such as English (UK) or German, showed it as "Launcher". The automation service notification uses the same name.
[0.14.0] - 2026-10-18
Added
- Tag pushes build a signed
dikcizReleaseAPK and attachdikciz-launcher-vX.Y.Z.apkand its.sha256to the GitHub Release, so Obtainium can install and update Dikciz. The README publishes the signing certificate fingerprint. make release-apkbuilds the signed release APK intodist/and fails unless it is signed with the published certificate and reports the version inVERSION.
Changed
- The
dikcizflavour reportsVERSIONas itsversionNameand derivesversionCodeasmajor * 10000 + minor * 100 + patch, instead of Fossify's1.10.0and16. Builds fail whenVERSIONis notX.Y.Zwith minor and patch below 100. - The Makefile pins Android Lab 0.14.0. A missing pinned image is built with that release's installer once
ANDROID_LAB_ACCEPT_ANDROID_LICENSES=yesis set. CI runs the samemake build, and the CI-onlymake ci-buildbootstrap is gone. - The Makefile derives the Dikciz APK paths from Fossify's
VERSION_CODEinstead of hardcoding them.
Fixed
- A Fossify source refresh keeps
VERSION,.gitattributes,.gitleaks.toml,.dockerignoreand theapp/src/testDikcizunit tests, and the build overlay patch now carries thetestDikcizsource set and test dependency. The refresh test fails when the live build file has Dikciz lines the overlay does not carry.
Migration
- Existing
dikcizDebuginstalls report version code 16. Debug builds now report 1400 for 0.14.0, so they install over them as an update. - Release APKs use the package
eu.psyb0t.dikciz.launcherand install next to the debug build.
[0.13.0] - 2026-10-07
Added
- The README displays the Dikciz logo and links to the APK installation and launcher operation skill.
- A separate lab integration skill links to Android Lab's canonical instructions when its skills are not installed.
-
ClawHub tag publishing selects only the launcher usage skill and excludes lab integration skills and plugins.
- Codeberg and GitLab mirrors, scheduled mirror issue sync, and public archive jobs.
Changed
-
Generic Android Lab and delegation skills no longer ship as copies in the launcher repository. Android Lab owns its reusable skills.
- Dikciz is a standalone source checkout. Its Makefile consumes versioned Android Lab images built locally, without pulling or silently rebuilding them.
- Product controls, tests and Fossify refresh scripts belong to this repository. Android Lab supplies the generic toolchain and emulator.
- Fossify refresh preserves the checkout's Git metadata and shared state directory while verifying a source backup before replacement.
Fixed
- Shell lint and formatting explicitly use four-space indentation, so CI and local checkouts agree without an EditorConfig file.
- Tooling creates the local state directory as the host user before Docker mounts it, so fresh checkouts can write Gradle state.
- Normal emulator launch grants Dikciz the file access needed to load its configuration, matching reset behavior without clearing saved data.
Migration
- Build the required Android Lab images from its separate repository before running launcher Make targets. Existing combined-repository workflows must use the launcher and lab checkouts separately.
[0.12.0] - 2026-10-06
Changed
- Widgets use one non-stacking page-grid order. Moving a widget changes only its cell.
zIndexno longer controls display order or belongs in widget configuration. - The Apps and commands sheet constrains installed application icons to a fixed 32dp box, so package artwork cannot expand a command row.
- The development image pins the current Alpine
python3package.
Migration
- Remove
zIndexfrom every widget document under/sdcard/Dikciz/pages/*/widgets/before upgrading. Dikciz rejects the removed key and keeps the current home instead of applying that configuration.
[0.11.1] - 2026-09-23
Added
- A Dikciz scripting tutorial explains every native event, custom events, Lua policies, HTML bridge calls, self and cross-widget state, typed actions, logs, and the Android access outcomes that can stop an automation.
- The user guide now starts with APK installation and Android Home setup, then shows the resulting page search, saved HTML, appended blocks, script notification, script log, and notification digest screens.
Changed
- The module README and user guide direct people to the scripting tutorial for events and widget automation, while the automation-control guide remains the WebSocket and MCP protocol reference.
- The bundled Workbench action list now includes
patchDom,appAction, andsendSmswith the actions it already supports.
Fixed
- The automation and configuration references no longer omit
patchDomfrom the typed action vocabulary.
[0.11.0] - 2026-09-22
Added
make dikciz-control-readywaits for both local Dikciz control planes to answer through the shared forward.make dikciz-runnow calls it after the launcher starts, so it does not report success before the WebSocket and MCP clients can connect.- The Dikciz user guide is organized as complete tasks, with fresh emulator evidence for named page search, saved HTML, appended HTML blocks, script notifications, script logs, and notification-driven dashboard updates.
Fixed
make dikciz-runnow starts the shared emulator before it installs and launches Dikciz. It no longer waits forever for ADB when the emulator was previously stopped.- First-run control readiness now proves the live WebSocket and MCP listeners without requiring storage access. The full smoke tests still require the configured Home screen.
- The shared forward now joins the lab's edge network as well as its private device network. Docker now publishes the requested WebSocket and MCP ports on host loopback, while they remain unavailable from the LAN.
[0.10.0] - 2026-09-21
Added
make dikciz-guide-captureregenerates every screenshot in the user guide. It resets the shared emulator to the bundled home, performs each documented step on the real device, photographs the result, and writes the images intodocs/images/user-guide/. A documented step that stops working now fails the capture instead of leaving a stale picture in the guide.- Page search in the home chrome. The magnifier beside the Dikciz mark opens a jump list of every page, each row labelled
Name (address). Typing filters on either half, soNotesand2H1Vboth reach the same page, and tapping a row goes there. Automation drives it throughlauncher:page-search,launcher:page-search:query, andlauncher:page-search:page:<pageId>. - Native app shortcuts can merge into an app group by dropping one tile onto another. Groups open as an icon grid and collapse back to a shortcut when one member remains.
Changed
- The user guide is a twenty-nine step walkthrough, from first launch through app groups, the grid, HTML widget authoring, pages, provider widgets, scripts, and the system sheets, to the two control planes. Every screenshot in it comes from the capture command. The thirteen hand-made images it used before are gone.
- The launcher controls button in the bottom chrome is the Dikciz mark alone. The
Controlstext is gone, and the button keeps itsOpen Dikciz launcher controlscontent description for the screen reader and for automation. - The page menu and the launcher control sheet print the page address beside the page name, for example
Page: Home (1H1V). That address is how Lua, HTML, WebSocket, and MCP already name the page. - An app tile draws its icon as the largest square its grid cell allows, measured against the narrower side, with the icon and its label centred in the cell as a pair. The icon used to be a fixed 48dp pinned to the top of the cell, which left a large tile mostly empty.
- App groups are made by dropping one app tile onto another, the way a launcher makes a folder. The picker's
App groupentry and its checkbox form are gone. Dropping a third tile adds it. A group opens as a grid of its member icons: tap one to launch it, long press one to remove it. Removing down to a single app collapses the group back into a plain app shortcut in the same cell, keeping the widget ID so a script addressing it keeps working. TheappGrouptype stays in the public schema and inaddWidget. - Dropping a widget on an occupied cell now merges or trades instead of always being refused. Two app tiles merge into a group. Two widgets of the same size trade places, and both tiles show the trade while the finger is still down. A drop between different sizes is still refused. The tile under the pointer decides, not the corner of the dragged widget.
- An app tile is dragged from anywhere on it, and a tap anywhere on it still launches the app. A widget that owns its content, an HTML document, an Android provider view, or the script dashboard, keeps its top
24Dpdrag strip, because its body needs the touches for itself.
Fixed
- The launcher's own automation-service notification is no longer an automation event. Android requires
startForegroundon every start command the service receives and each call re-posts that notification, so a script subscribed to notifications was handed an event the launcher caused by configuring itself. A script that wrote anything in response closed a loop: the write reloaded the configuration, the reload restarted the service, and the service posted the notification again. One bundled script reached two hundred and eighty-six status writes in six minutes this way. Notifications the launcher posts on a script's behalf are ordinary content and are still reported. - A read that only decides whether a write can be skipped no longer ends the launcher.
writeAtomicFileIfChangedcompared the stored file against the content about to replace it without guarding the read, so a public file left half written by an interrupted process returned an I/O error and took the process down from a background thread. A failed comparison now answers that the content differs and the write goes ahead. - A change written to
/sdcard/Dikciz/from outside the launcher now reloads. The launcher watched the tree with Android'sFileObserver, which reports the FUSE view of shared storage and never saw a file that adb, a computer over MTP, or the launcher's own process wrote. An edit made the documented way could sit on disk until something unrelated happened to trigger a reload. A cheap stat poll of the watched directories now backs the observers up while the home screen is running. make dikciz-testno longer reports failures its own suite caused. Two tests named a fixture their module never imported and could not be collected at all. Two app drawer tests launched an app and returned home without closing the drawer, so later tests drew their pages underneath it. The accessibility waits polledaccessibilitySnapshotten times a second, which exhausts the documented budget of thirty-two live descriptors in about three seconds and refuses the next request. A screen-off check read wakefulness once and caught theDozingstep on the way toAsleep. The log audit asserted the day's log covers every control surface the suite exercises while its file name sorted it ahead of most of them, so it is collected last now.- The lab accepts every emulator console credential the emulator can generate. The credential is base64, and the check rejected the
+,/, and=that alphabet contains, so a randomly drawn token broke GPS injection, sensor injection, incoming SMS, and every other console operation until the emulator was recreated. - Deleting a widget or a page removes its public document. The store only ever wrote files, so every removed widget and every removed page left a document behind that nothing loaded. Making a group removes two widgets at once, which made the stale files pile up quickly. Only documents Dikciz writes are removed, so a foreign file keeps its directory.
- Android no longer kills the launcher process over the automation service.
onStartCommandcould return without ever reachingstartForeground, once by skipping the call when nothing about the configuration had changed, once by skipping it while the service believed it was already in the foreground, and once by ignoring a refusal. Any of the three let the platform kill the whole process five seconds afterstartForegroundService, taking the home screen and both control planes down with it, and the belief was the worst of them because Android ends the foreground state on its own and the service had no way to hear about it. Every start command now reachesstartForeground. A refusal is caught instead of escaping, and whether it is survivable is answered from the platform's record of the posted foreground notification rather than from a field the service maintains. - Dismissing a widget's action sheet forgets every control it registered. The two dismissal paths kept their own lists, which had already drifted, so
movesurvived both andaddBlocksurvived one. A remote client kept seeing buttons for a sheet that was no longer on screen, and a tap on one was accepted. - A widget hovered as a merge target no longer wears the refusal styling. The drop lands on an occupied cell, which the grid otherwise refuses, so the target looked rejected right up until the drop made a group instead.
- The page draws its grid while a widget is being moved or resized. Placement snaps to whole cells, so the gesture was guesswork without them.
[0.9.0] - 2026-09-19
Added
- Automation scripts can send an SMS. The
sendSmsaction takes a dialablerecipientand abody, divides a long body into message parts, and needs theSEND_SMSAndroid permission thatautomationStatusreports assmsSend. With the existingsmsReceivedevent a script can now read an incoming message, decide a reply, and send it. Dikciz is not the default SMS app, so a sent message does not reach the Android SMS provider or the owner's messaging history, and Android limits a non-default app to about thirty messages in thirty minutes before it asks the owner to confirm each send.
Changed
- A policy's
actionslist is now enforced when a script action runs. An action the policy does not declare is refused ascapability_deniedand nothing happens. A script whose policy is missing gets no actions at all. Actions a Dikciz HTML widget dispatches directly are unchanged, because the owner invokes those on the device. - A refused action now records a machine-readable
reasonbeside its outcome, so a log reader can select refusals without parsing outcomes.
Fixed
- Android's Home action now saves the page it selects. The launcher returned to the home page on screen but kept the previously selected page in
config.json, so the next process start reopened on that page. - Only the horizontal page rail starts the app-drawer gesture. An upward drag that began in the page itself opened the drawer instead of scrolling page content, because the page viewport was an activation area and the activation band reached above its own rail.
- The bundled pages fill the whole page grid. Their widgets stopped one row short of the six-row grid, which left an empty strip under the last card and clipped its content.
Migration
- Review each automation policy before upgrading. A script that returns an action its policy does not list stops working and records
capability_denied. Add the action to the policy'sactionslist to restore it. The bundled scripts already declare every action they use.
[0.8.0] - 2026-09-19
Added
- A Dikciz HTML widget can append a named block from its own menu. The block saves its marked source into the already-live document, scrolls that widget to the new block, and does not reload the WebView. Bundled blocks cover a heading, a status row, an action button, and a divider.
- Settings can edit the native page grid. Columns, rows, gap, and outer padding apply to every page. The change is all or nothing, and it is refused with the offending page and widget when an existing item would collide or leave the new grid.
- The page menu can move the current page left, right, up, or down. A move swaps with the page at the immediately adjacent coordinate and leaves every other page in place. A direction with no adjacent page is disabled.
- A long press on the blank page rail before the first dot or after the last dot creates and selects a saved page at that edge of the rail.
- WebSocket and MCP expose a
gridSetcommand that applies the same page-grid change with the same all-or-nothing result.
Changed
- A native page is one fixed viewport. It no longer grows downward, and adding an item never pushes content below the visible page.
- Every top-level item owns explicit grid cells. The old
positionwithxDpandyDpis replaced bycellwithcolumn,row,columnSpan, androwSpan. Theminimizedflag is gone. - Adding an item first-fits row-major on the current page. When no rectangle fits, the action writes nothing and reports
page_full. - Move and resize snap to whole cells. A move or resize that would overlap another item or leave the page is rejected before anything is saved.
- Page creation saves and selects the new page in one step. The provisional page and its confirm and cancel controls are removed.
Migration
- The grid schema is the only layout schema Dikciz reads. A
/sdcard/Dikciz/tree written by 0.7.0 or earlier carriesposition, oldsizerecords, orminimized, and the strict parser rejects all three. Copy the old tree first if you want to keep it, then either push a grid-shaped document through WebSocket or MCPconfigReplace, or runmake dikciz-resetto return to the bundled starter home.
[0.7.0] - 2026-09-17
Added
- A screen-by-screen Dikciz guide now covers the bundled home, launcher controls, app drawer, widget library, page manager, settings, automation access, script dashboard, public files, ADB, WebSocket, and MCP with shared emulator screenshots.
Changed
- Native page content can grow downward. Adding a widget or app shortcut now uses the normal gutter below the lowest current widget and scrolls to reveal the new item.
- WebSocket and MCP page-scroll state now reports the real native offset and range. Clients can use
scrollByandscrollToto inspect and navigate extended page content. - Fossify refresh comparison ignores generated Gradle output, preserves the fork contribution guide, and accepts only an upstream release marker newer than the imported marker.
Fixed
- A full-height HTML widget no longer causes a newly added widget or shortcut to render on top of it.
[0.6.0] - 2026-09-14
Added
- Dikciz now has an always-visible native Controls route and app drawer. The drawer searches launchable apps by label or package name, launches a selected app, and exposes shortcut, app-info, uninstall, and root-backed force-stop actions.
- WebSocket and MCP now expose the shared app catalogue and typed app-action commands. The semantic UI and focused emulator checks cover the controls, drawer entry, search, launch, and shortcut placement.
Changed
- New activity shortcuts are visible native tiles at the current page's usable top-left position. They are no longer obscured by full-page HTML content, and their top edge is the explicit move zone.
- Dikciz documentation now separates its release notes from retained Fossify upstream history and documents the native controls, app drawer, saved shortcuts, remote actions, and current focused verification routes.
Fixed
- Re-entering Android Home no longer replays the ten-second Dikciz startup screen. An upward gesture from the horizontal page rail opens the app drawer instead of being lost to page navigation.
[0.5.0] - 2026-09-13
Added
- Dikciz now has native two-axis pages that combine HTML widgets, app shortcuts, app groups, third-party Android AppWidgets, and the native script dashboard. HTML widgets support local HTML, CSS, JavaScript, persistent state, automatic content height, native edit actions, and a bundled widget library.
- The HTML and Lua APIs now share page and widget addresses, typed Android and custom events, cross-widget state updates, diagnostics, and the automation action runtime. HTML updates patch the current document without reloading the widget.
- Local control now includes configured bearer authentication, device-access inventory, accessibility snapshots and actions, custom automation dispatch, script and widget diagnostics, and bounded renderer recovery.
- The bundled starter home demonstrates device status, clock, lock, app launch, brightness, notification, and script controls. Dikciz has its own launcher icon and startup screen.
Changed
- The shared emulator is the one persistent manual and automated test phone. Clean resets remove only Dikciz and
/sdcard/Dikciz, then restore the bundled starter home after a passed, failed, or interrupted test. - Automation setup now presents the current Android permission, role, special access, accessibility, and root-shell state in one device-access inventory. The device remains the authority for every grant.
Fixed
- HTML widget resize controls draw above widget content and stay within the native widget bounds. Page gutters and HTML card borders no longer disappear at viewport edges.
- HTML renderer limits reject excess widgets and documents, recover from a failed renderer, and keep minimized widgets out of renderer capacity.
Migration
- Replace
text,toggle, and Lua widget entries withhtml,app,appGroup,provider, orscriptDashboardentries before upgrading. Lua remains available as scripts under the public scripts tree, not as a widget type.
[0.4.0] - 2026-09-10
Added
- Dikciz now runs validated local Lua scripts from public files. Policies can subscribe scripts to typed Android and launcher events, then grant only the declared bounded actions.
- Local control planes now expose automation status, manual triggers, persistent command and UI events, script logs, diagnostics, screenshots, semantic UI dumps, and a supplied dependency-free shell client.
- Script failures are retained in bounded public logs, visible in Settings and the control planes, and can post a rate-limited Android notification when the user grants notification permission.
- Provider widgets can expose their current attached actions through stable semantic IDs. The lab includes a configurable fixture for provider actions, media controls, weather recovery, and notification actions.
- The lab can stage, compare, dry-run, and explicitly refresh the maintained Fossify source base from a selected local source tree.
Changed
- Dikciz automation policies now cover typed sensors, location, Calendar, contacts, phone state, Health Connect daily steps, incoming SMS, clipboard, notification and media sessions, device administration, and selected Android system state. Android remains the authority for every permission and special access grant.
- The live-control test suite is split by behavior. Release checks use focused device selectors instead of source-text assertions.
- Gradle output from the provider fixture is ignored so generated files cannot enter a release.
Fixed
- Page, widget, picker, resize, lock, and appearance controls keep their semantic state consistent through native UI and both local control planes.
[0.3.0] - 2026-09-06
Added
- The Dikciz home surface reflows across portrait and landscape orientation.
Changed
- Widgets move from an invisible zone along their top edge. The visible drag grip is gone, and card content no longer reserves side space for it.
- The bundled
dikciz-darkandterminalthemes use 8 dp widget padding. - Page indicator rails keep an equal 16 dp chrome inset on both sides, and the vertical rail ends level with the horizontal rail.
- Fill-page resize keeps a theme's outer widget margin inside the page allocation.
- Dikciz's storage-access prompt uses the bundled Dikciz Dark theme, so the first screen after installation matches the bundled home.
make dikciz-testbuilds the upstream-compatible Fossify core flavour alongside the Dikciz flavour, so the Home-role tests install a core build from the current source instead of whichever APK was already on disk.- The physical-device check installs through Android's package manager for the primary user and forwards the MCP endpoint alongside the WebSocket.
Fixed
- Android's provider bind request carries the provider's user profile, so binding works on devices that expose more than one profile.
- The physical-device runner waits for Android to publish Dikciz's Home activity and recreate its debug app sandbox after a clean installation.
- Android Home starts now require the requested package to hold the verified Home role before the system resolver is used.
- The physical-device check stops and uninstalls only Dikciz's debug package, removes only its public configuration tree, then installs the current build. It never reboots the configured phone.
- The physical-device check re-enables only the current Dikciz package after replacement, so a retained disabled-package state cannot hide its Home activity.
Migration
- The physical-device check no longer backs up or restores Dikciz files, the Android Home role, or package data. It replace-installs the current build before it clears the app's standard private data and public tree, resets to the bundled home, and leaves Dikciz holding the Home role. Copy
/sdcard/Dikcizyourself first when you need the previous configuration.
[0.2.0] - 2026-09-06
Added
- Public Dikciz configuration tree rooted at
/sdcard/Dikciz/config.json, with separate page, widget, and reusable theme files. - Native page and widget controls for app shortcuts, provider widgets, editing, styling, locking, resizing, page creation, and two-axis navigation.
- Control-plane seed, reset, and bounded semantic wait commands through both WebSocket and MCP.
- An opt-in, single-device physical-phone check that fresh-installs the debug build, preserves the user's Dikciz files and Home role, and grants storage access through Android Settings.
Changed
- Widgets remain inside the page viewport. Fill-page resize actions keep the active resize selection visible until the user finishes it.
- Page rails cycle one page at a time when their empty track is tapped, and their dot spacing no longer wastes page space.
- The lab clears only stale Android AVD lock files after an unexpected emulator exit.
Fixed
- Dikciz's storage-access and configuration-error prompts now lay out their title, message, and action separately.
Migration
- On first start after upgrading, Dikciz converts
/sdcard/Dikciz/dikciz.config.jsoninto the public tree and archives the old file asdikciz.config.migrated-v2.json.
[0.1.0] - 2026-09-04
Added
- Docker-only Android build, emulator, browser inspection, and device-control workflow.
- Dikciz, a programmable launcher flavour with a JSON-defined two-axis home, native and Android provider widgets, local WebSocket and MCP controls, and semantic UI automation.
- Launcher themes, wallpaper backgrounds, per-widget appearance, bundled and local fonts, page and widget locks, default Home-page selection, and persistent widget references.
Changed
- Browser VNC now presents the full Android viewport with visible navigation controls and keyboard forwarding.
- Dikciz remains additive to the tracked Fossify Launcher source base so future Android and launcher updates come from the upstream source fork.