Skip to content

QUILL Lite 1.1 and Quill Radio 3.1.0: Sign in with ChatGPT, pictures described, web search, Ask QUILL Radio - #1609

Merged
accesswatch merged 4 commits into
mainfrom
release/quilllite-1.1-radio-3.1
Sep 30, 2026
Merged

accesswatch merged 4 commits into
mainfrom
release/quilllite-1.1-radio-3.1

Conversation

@accesswatch

Copy link
Copy Markdown
Contributor

What this is

Use the ChatGPT plan a person already pays for, in every QUILL app that has AI, rebuilt from the s:\q prototype on QUILL's own infrastructure -- and the two releases that carry it: QUILL Lite 1.1.0 and Quill Radio 3.1.0.

  • Core (quill/core/ai/chatgpt_*.py): OAuth with dynamic registration and PKCE from quill.core.auth, ID-token issuer/audience/nonce/expiry checks, refresh token only in the OS store via SecretsManager (one entry per app), Responses API with store=false and stream=true, model list in both shapes, Pillow image validation, five coded errors, two reviewed egress sites.
  • Editors: Use My ChatGPT Subscription (Alt+F5), Ask About an Image (Ctrl+F5), Tidy Dictated Text (Ctrl+F3), from one shared base of HostedAiMixin; the service decides the route once (chatgpt > own key > free). Model and web search live in <data>/ai/chatgpt.json; no Settings field.
  • Quill Radio: Ask QUILL Radio (Ctrl+Shift+8) with the station and title attached to every message, nine quick questions (three attach favorites / song log / listening history and say what and how many first), the same account window as "QUILL Radio". No free service, no key route. Text only.
  • Releases: Radio 3.1 notes split into release-notes-3.1.md; the portable build gains the windows-media group (a stick copy had no modern Windows Media engine and could not route output); site front page and Lite page moved to 1.1.0 with a splash; every guide, AI guide, changelog and release note written, rendered and synced.
  • Gates: rebaselines with dated notes (hosted_ai_commands 626, hosted_ai_service 620, lite/commands 1099), snapshots regenerated, keyboard and F1 references rebuilt, 200 new tests.

Also carries the Radio 3.1.0 follow-ups that were already in the working tree (notification targets, per-podcast alert toggle, favorites details pane).

Not yet exercised

A live ChatGPT sign-in against a real Plus/Pro account from this build. The plan-sharing endpoints and the /v1/models shape come from the prototype.

🤖 Generated with Claude Code

…- QUILL Lite 1.1 and Quill Radio 3.1.0

Use the ChatGPT plan a person already pays for, in every QUILL app that has AI,
rebuilt from the s:\q prototype on QUILL's own infrastructure.

Core (wx-free, strict-typed): quill/core/ai/chatgpt_account.py signs in with
OpenAI's dynamic registration and PKCE from quill.core.auth, checks the ID
token's issuer, audience, nonce and expiry (OIDC 3.1.3.7, no JWT library), and
keeps only the refresh token in the OS store through SecretsManager, one entry
per app; the access token lives in memory. chatgpt_loopback.py is the one
socket. chatgpt_http.py holds the two egress sites. chatgpt_client.py speaks
the Responses API with store=false and stream=true, reads the model list in
both shapes, and validates and re-encodes images with Pillow.
chatgpt_ai_help.py sends the gateway's own instructions on the plan, adds web
search when allowed, and describes pictures. Five coded errors in
chatgpt_errors.py.

Editors: Use My ChatGPT Subscription (Alt+F5), Ask About an Image (Ctrl+F5)
and Tidy Dictated Text (Ctrl+F3) in both editors from one shared base of
HostedAiMixin (quill/ui/hosted_ai_chatgpt_commands.py), with the account window
(hosted_ai_chatgpt.py) and the picture dialog (hosted_ai_image.py). The
service decides the route once -- chatgpt, own key, free -- and the pad and
the conversation window take their sentences from it. A sign-in outranks a
saved key. Sign Out and Forget exist only while signed in. Model and web
search live in <data>/ai/chatgpt.json; no Settings field was added.

Quill Radio: Ask QUILL Radio (Community, Ctrl+Shift+8), a conversation that
carries the station and the title playing with every message, nine quick
questions of which three attach favorites, the song log or the listening
history and say what and how many before Enter; the same account window as
the editors, signed in as "QUILL Radio"; no free service and no key route by
design. Text only: it never listens to the stream. Quick questions act only
on Enter or Use This Question, never on arrowing.

Releases: QUILL Lite 1.1.0 and Quill Radio 3.1.0. Radio's 3.1 notes stand in
their own release-notes-3.1.md and Help > Release Notes opens them; the
portable build now carries the windows-media pywinrt group, so a stick copy
has the modern Windows Media engine and Output Device routing like an
installed one; the site points at Lite 1.1.0 and the 1.1 notes; every Lite
and Radio guide, AI guide, changelog and release note is written, rendered and
synced. Two pyproject dependencies the build checks for were installed on the
build machine (winrt-Windows.Media, markitdown 0.1.8).

Gates: rebaselines with dated notes for hosted_ai_commands.py (626),
hosted_ai_service.py (620) and lite/commands.py (1099); two egress entries;
keymap, command-table, parity, help catalogue and every snapshot regenerated;
keyboard and F1 references rebuilt. 200 new tests.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Comment thread tests/unit/ui/test_hosted_ai_chatgpt_window.py Fixed
Jeff Bishop and others added 3 commits September 29, 2026 18:40
…complete-url-substring-sanitization on PR #1609

The About-text test checked that "chatgpt.com" appeared somewhere in the
sentence, which CodeQL reads as a URL-substring check. It is a test of the
sentence, not a sanitizer, but the whole USAGE_URL is the sharper assertion
anyway.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… three gates CI caught

Jeff's call (2026-09-29): QUILL Lite 1.1 goes out now and Quill Radio 3.1.0
waits. The Radio 3.1 documentation stays written in its Markdown sources, but
the rendered HTML and EPUB and the site's copies go back to the 3.0.4 renders,
and the site map points Help > Release Notes' page at release-notes-3.0.html
again, so nothing about 3.1.0 is visible on quillforall.org before the release.
Flip the map to release-notes-3.1.html and re-render when Radio publishes.

Also the three things the PR's unit-test job caught that the local targeted
runs did not: the Lite command-coverage snapshot rewritten by its own writer
(a hand edit had left one line out of order), the F1 help reference and its
HTML/EPUB regenerated after the quick-question help text changed, and the
ChatGPT state file classified in the persistence audit as a marker store like
the gateway session beside it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ps alone

The Radio 3.1 user guide, changelogs, README, the split release notes and the
Help > Release Notes mapping are held back with the Radio release itself
(Jeff, 2026-09-29): CI's artifact check diffs Markdown against its renders
from the merge base, so reverting only the renders left the sources orphaned.
Sources, renders and the site's Radio pages are all exactly main's again; the
Ask QUILL Radio code still lands. The held documentation is one patch,
build/radio-3.1-docs-hold.patch (845 lines, local), to apply, re-render, sync
and flip the site map when Quill Radio 3.1.0 is published.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@accesswatch
accesswatch merged commit e329952 into main Sep 30, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants