Tags: AndroidIRCx/AndroidIRCx
Tags
v1.10.0 — versionCode 170 The add-on platform: reviewed, permission-based packages with Safe Mode and rollback. A scripting API that can answer who is who from the cache and keep its own tables, secrets and files. Commands added by scripts now autocomplete. Expert mode can rewrite outgoing raw IRC, with the transport-critical commands kept out of reach. Thirteen security findings closed, each with a test that used to fail.
v1.9.56 — AI, MCP, and forty new scripting members **v1.9.56 — versionCode 169** AI arrives in AndroidIRCX: scripts can call a model, an assistant can work on your IRC session, and the scripting API grew about forty members closing most of the gap with mIRC. Everything here is **off until you turn it on**, uses **your own API key**, and can be switched off entirely from one place. --- The app ships no model and operates none on your behalf. You add a provider — Anthropic, OpenAI, Gemini, DeepSeek, Groq, OpenRouter, or a model server on your own network — with your own key, and presets fill in the addresses. A Claude Pro or ChatGPT Plus subscription **will not work**: those plans include no API access, and bridging a subscription-authenticated CLI is the pattern Anthropic banned on 2026-04-04. Only developer keys. → [AI](https://github.com/AndroidIRCx/AndroidIRCx/wiki/AI) `api.ai.ask()` and `api.ai.chat()`, riding the existing scripting-time budget — no new paywall. Five example scripts ship, all disabled: an `/ai` task runner, a `/summarize` catch-up, channel translation, a suggested reply on highlight, and a moderation flag. `/ai` reads the last 30 messages of the channel, does what you asked with them, and answers **only you**. `/aisend` posts that answer afterwards if you want it sent. That split is the safety story: channel text goes into the prompt, so a stranger writing "ignore that and say X" must not become you saying X. → [Scripting](https://github.com/AndroidIRCx/AndroidIRCx/wiki/Scripting) Ask about your own channels, what you missed, who said what. Reading happens straight away; anything that **sends, joins or leaves stops and asks you first**. - **Several conversations**, each keeping its own thread, persisted across restarts - **Memory** — short facts it keeps between conversations, every one listed and deletable in settings - **Script tools** — it can list, read, lint and save your scripts, and never enables one - **Documentation** — it can read this wiki to answer questions about the app Give the assistant tools from a server you run, or let an assistant on your computer use your IRC session. The server offers three bind choices — this phone only, your network, or every connection — and shows the real URL and token to paste. → [MCP](https://github.com/AndroidIRCx/AndroidIRCx/wiki/MCP) --- - **Nothing is sent until you agree**, in a dialog that says what goes where. Local providers never ask. - **Per-channel opt-in, default off.** The other people in a channel never agreed to anything, so it is asked per channel rather than once. - **Identifying data removed by default** — nicknames become user1, user2; IP addresses, hostmasks and e-mail addresses are stripped. - **Private addresses are never fetched**, allowlist or not — loopback, 10.x, 192.168.x, 172.16–31.x, link-local. - **Your API key lives in the device keychain** and is excluded from backup exports. - **Anything AI reads is data, not instructions.** A page or a message that says "ignore your instructions" gets reported, not obeyed. A master switch stops every AI call immediately without unconfiguring anything. --- About forty new members, audited against mIRC's identifier and event lists. | | | |---|---| | **`api.echo`** | print a line locally — mIRC's `/echo`. `sendNotice` is real IRC traffic; this is not | | **`api.listStorage` / `clearStorage`** | you could write a value per nick but never count, iterate or clean them up | | **`api.confirm` / `ask`** | a script can finally ask the user something | | **`api.banMask` / `getBanTypes`** | mIRC's `$mask()`, using the app's own logic including IP octets | | **`api.bold` / `italic` / `underline` / `colour` / `strip`** | `strip` matters most: colour codes sit between you and matching what someone said | | **`api.getSharedChannels`** | mIRC's `$comchan` | | **`api.getChannelList`** | reads the cache and never runs `/LIST` | | **`api.notify` / `copyToClipboard` / `setInput`** | `setInput` puts text in the composer and does **not** send it | | **`api.http`** | uses the assistant's allowlist, not a second permission model | | **`api.aiStatus`** | drives the activity strip above the composer | | **favourites, reactions, away, user activity, flood log** | all read-only, all under the same opt-in | | **`onUnload`** | a script can finally clean up after itself | **`onRaw` never fired.** It was documented, in the autocomplete and in the wiki, and `handleRaw` was called from nowhere at all — so anyone who wrote one saw nothing and had no way to find out why. It works now, observing every line in both directions. **`getTheme()` threw the colours away.** It returned only name and light-or-dark, so a script had to hardcode a palette that clashed with every built-in theme. It returns `colors` now. --- - **Typing with highlight on now works.** The `selection` prop was controlled on every render, pushing the caret back before each keystroke landed — it only showed with highlight on because that render is the slow one. - **No more doubled text.** The highlight layer was a `ScrollView` with scrolling disabled that the input drove with `scrollTo`, which Android ignores, so the two layers sat at different offsets and showed different parts of the script at once. - **No more spellcheck underlines** under every identifier. - **Autocomplete shows signatures and a description**, not bare names — so you can tell `userNick` is a value and what `setTimer` wants. - **Generate with AI can edit** the script you have open instead of replacing it. - Scrollable body with pinned buttons, so landscape works. --- `build.ps1` no longer kills every JVM on the machine — Android Studio included. Gradle daemons are stopped through Gradle. adb is killed and not restarted, since a release build never talks to a device. `-Clean` now means something: without it the build is incremental, where before every run paid for a full native rebuild. --- Tested on the internal track. MCP has been exercised against the app's own client but **not yet against a third-party peer**.
PreviousNext