keyboard: make Squeekboard the single path
This commit is contained in:
parent
d8820da557
commit
89cf93f965
4 changed files with 69 additions and 42 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
---
|
---
|
||||||
outlines:
|
outlines:
|
||||||
default: { width: 48.3, height: 79 }
|
default: { width: 48.3, height: 79 }
|
||||||
tilda: { width: 30, height: 79 }
|
tilda: { width: 30, height: 79 }
|
||||||
|
|
@ -10,7 +10,7 @@ outlines:
|
||||||
fndefault: { width: 55.3, height: 79 }
|
fndefault: { width: 55.3, height: 79 }
|
||||||
fnright2x: { width: 101, height: 79 }
|
fnright2x: { width: 101, height: 79 }
|
||||||
fnhome: { width: 75.6, height: 79 }
|
fnhome: { width: 75.6, height: 79 }
|
||||||
|
|
||||||
|
|
||||||
views:
|
views:
|
||||||
base:
|
base:
|
||||||
|
|
@ -18,13 +18,13 @@ views:
|
||||||
- "Tab q w e r t y u i o p [ ] \\"
|
- "Tab q w e r t y u i o p [ ] \\"
|
||||||
- "Ctrl a s d f g h j k l ; ' Return"
|
- "Ctrl a s d f g h j k l ; ' Return"
|
||||||
- "Shift_L z x c v b n m , . / Up Shift_R"
|
- "Shift_L z x c v b n m , . / Up Shift_R"
|
||||||
- "Esc preferences Alt Menu space show_fnkeys Left Down Right"
|
- "Esc preferences Alt Voice space show_fnkeys Left Down Right"
|
||||||
upper:
|
upper:
|
||||||
- "~ ! @ # $ % ^ & * ( ) _ + BackSpace"
|
- "~ ! @ # $ % ^ & * ( ) _ + BackSpace"
|
||||||
- "Tab Q W E R T Y U I O P [ ] |"
|
- "Tab Q W E R T Y U I O P [ ] |"
|
||||||
- "Ctrl A S D F G H J K L : \" Return"
|
- "Ctrl A S D F G H J K L : \" Return"
|
||||||
- "Shift_L Z X C V B N M < > ? Up Shift_R"
|
- "Shift_L Z X C V B N M < > ? Up Shift_R"
|
||||||
- "Esc preferences Alt Menu space show_fnkeys Left Down Right"
|
- "Esc preferences Alt Voice space show_fnkeys Left Down Right"
|
||||||
fnkeys:
|
fnkeys:
|
||||||
- "Voice F1 F2 F3 F4 Seven Eight Nine NumSlash Home BkspFn"
|
- "Voice F1 F2 F3 F4 Seven Eight Nine NumSlash Home BkspFn"
|
||||||
- "TabFn F5 F6 F7 F8 Four Five Six NumAst End Ins Del"
|
- "TabFn F5 F6 F7 F8 Four Five Six NumAst End Ins Del"
|
||||||
|
|
@ -35,7 +35,8 @@ views:
|
||||||
buttons:
|
buttons:
|
||||||
Voice:
|
Voice:
|
||||||
outline: "lctrlesc"
|
outline: "lctrlesc"
|
||||||
text: " "
|
label: "🎙"
|
||||||
|
action: dictate
|
||||||
Shift_L:
|
Shift_L:
|
||||||
action:
|
action:
|
||||||
locking:
|
locking:
|
||||||
|
|
@ -276,7 +277,3 @@ buttons:
|
||||||
TabFn:
|
TabFn:
|
||||||
outline: "lctrlesc"
|
outline: "lctrlesc"
|
||||||
keysym: "Tab"
|
keysym: "Tab"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
---
|
---
|
||||||
outlines:
|
outlines:
|
||||||
default: { width: 48.3, height: 79 }
|
default: { width: 48.3, height: 79 }
|
||||||
tilda: { width: 30, height: 79 }
|
tilda: { width: 30, height: 79 }
|
||||||
|
|
@ -10,7 +10,7 @@ outlines:
|
||||||
fndefault: { width: 55.3, height: 79 }
|
fndefault: { width: 55.3, height: 79 }
|
||||||
fnright2x: { width: 101, height: 79 }
|
fnright2x: { width: 101, height: 79 }
|
||||||
fnhome: { width: 75.6, height: 79 }
|
fnhome: { width: 75.6, height: 79 }
|
||||||
|
|
||||||
|
|
||||||
views:
|
views:
|
||||||
base:
|
base:
|
||||||
|
|
@ -18,13 +18,13 @@ views:
|
||||||
- "Tab q w e r t y u i o p [ ] \\"
|
- "Tab q w e r t y u i o p [ ] \\"
|
||||||
- "Ctrl a s d f g h j k l ; ' Return"
|
- "Ctrl a s d f g h j k l ; ' Return"
|
||||||
- "Shift_L z x c v b n m , . / Up Shift_R"
|
- "Shift_L z x c v b n m , . / Up Shift_R"
|
||||||
- "Esc preferences Alt Menu space show_fnkeys Left Down Right"
|
- "Esc preferences Alt Voice space show_fnkeys Left Down Right"
|
||||||
upper:
|
upper:
|
||||||
- "~ ! @ # $ % ^ & * ( ) _ + BackSpace"
|
- "~ ! @ # $ % ^ & * ( ) _ + BackSpace"
|
||||||
- "Tab Q W E R T Y U I O P [ ] |"
|
- "Tab Q W E R T Y U I O P [ ] |"
|
||||||
- "Ctrl A S D F G H J K L : \" Return"
|
- "Ctrl A S D F G H J K L : \" Return"
|
||||||
- "Shift_L Z X C V B N M < > ? Up Shift_R"
|
- "Shift_L Z X C V B N M < > ? Up Shift_R"
|
||||||
- "Esc preferences Alt Menu space show_fnkeys Left Down Right"
|
- "Esc preferences Alt Voice space show_fnkeys Left Down Right"
|
||||||
fnkeys:
|
fnkeys:
|
||||||
- "Voice F1 F2 F3 F4 Seven Eight Nine NumSlash Home BkspFn"
|
- "Voice F1 F2 F3 F4 Seven Eight Nine NumSlash Home BkspFn"
|
||||||
- "TabFn F5 F6 F7 F8 Four Five Six NumAst End Ins Del"
|
- "TabFn F5 F6 F7 F8 Four Five Six NumAst End Ins Del"
|
||||||
|
|
@ -35,7 +35,8 @@ views:
|
||||||
buttons:
|
buttons:
|
||||||
Voice:
|
Voice:
|
||||||
outline: "lctrlesc"
|
outline: "lctrlesc"
|
||||||
text: " "
|
label: "🎙"
|
||||||
|
action: dictate
|
||||||
Shift_L:
|
Shift_L:
|
||||||
action:
|
action:
|
||||||
locking:
|
locking:
|
||||||
|
|
@ -276,7 +277,3 @@ buttons:
|
||||||
TabFn:
|
TabFn:
|
||||||
outline: "lctrlesc"
|
outline: "lctrlesc"
|
||||||
keysym: "Tab"
|
keysym: "Tab"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,35 @@
|
||||||
# TASK 17 — Keyboard (stevia) + dictation polish
|
# TASK 17 — Keyboard (stevia) + dictation polish
|
||||||
|
|
||||||
**Status:** shipped-partial; daily dictation use confirmed 2026-08-07. The
|
**Status:** Squeekboard replacement source authored 2026-08-11; parser tests
|
||||||
phone went from NO on-screen keyboard to a working patched stevia with a mic
|
green, full package build and glass proof pending. Stevia remains the active
|
||||||
key and live dictation in one session. What shipped works; the follow-ons are
|
fallback until the new Squeekboard package is installed and survives repeated
|
||||||
UX/layout polish.
|
dismiss/reopen cycles.
|
||||||
|
|
||||||
## What shipped (2026-07-21)
|
## Current decision (2026-08-11)
|
||||||
|
|
||||||
|
One keyboard owns the phone: Squeekboard. The daily layout has a permanent
|
||||||
|
number row plus Fn/numpad; the terminal hint selects the compact terminal
|
||||||
|
layout. Both expose the same first-party dictation action. The old
|
||||||
|
Stevia/Squeekboard switcher and drag-up keyboard swap retire only after the
|
||||||
|
replacement is proven on glass.
|
||||||
|
|
||||||
|
`Pixel3Arch/pkgs/squeekboard` now carries:
|
||||||
|
|
||||||
|
- a `dictate` layout action that spawns packaged
|
||||||
|
`/usr/bin/souveraine-stt`;
|
||||||
|
- daily and terminal layouts with the mic available from their base rows;
|
||||||
|
- a Cairo-drawn, state-honest mic: restrained violet at idle, three breathing
|
||||||
|
violet bubbles while recording, a rotating broken ring while transcribing,
|
||||||
|
and a red-violet error mark;
|
||||||
|
- animation driven by
|
||||||
|
`$XDG_RUNTIME_DIR/souveraine-stt/state`, polled only while the keyboard
|
||||||
|
widget is mapped.
|
||||||
|
|
||||||
|
No bitmap was imported and no Stevia completion code was reused. Native
|
||||||
|
Squeekboard word completion remains the next layer after the single-keyboard
|
||||||
|
path is stable.
|
||||||
|
|
||||||
|
## Earlier Stevia path (historical, currently installed)
|
||||||
|
|
||||||
- **stevia is the OSK**, patched to run under Hyprland. Upstream stevia
|
- **stevia is the OSK**, patched to run under Hyprland. Upstream stevia
|
||||||
hard-requires `zphoc_device_state_v1` (phoc-private) before creating a
|
hard-requires `zphoc_device_state_v1` (phoc-private) before creating a
|
||||||
|
|
@ -31,14 +55,11 @@ UX/layout polish.
|
||||||
4xx / unreachable from a genuine empty transcript. The old "didn't catch
|
4xx / unreachable from a genuine empty transcript. The old "didn't catch
|
||||||
that" on any no-text result masked a whole server outage as a mic bug.
|
that" on any no-text result masked a whole server outage as a mic bug.
|
||||||
|
|
||||||
## Follow-ons (the polish that remains)
|
## Historical follow-ons and retained evidence
|
||||||
|
|
||||||
1. **Dictation UX**: the mic key spawns the CLI fire-and-forget — no
|
1. **Dictation UX:** the earlier Stevia implementation established the state
|
||||||
in-keyboard recording indicator (the CLI sends a notify-send "Listening…"
|
contract. Squeekboard now renders that contract directly in the mic key;
|
||||||
toast, which is coarse). A pressed/recording state on the key itself
|
package and glass proof remain.
|
||||||
(stevia has `--status` wired: `souveraine-stt --status` → idle|recording)
|
|
||||||
would be the honest tell. Needs a stevia patch to poll status and
|
|
||||||
restyle the key, OR drive it off the notify path.
|
|
||||||
|
|
||||||
**2026-07-30 progress:**
|
**2026-07-30 progress:**
|
||||||
- `souveraine-stt` now writes a 3-state file
|
- `souveraine-stt` now writes a 3-state file
|
||||||
|
|
@ -95,11 +116,14 @@ UX/layout polish.
|
||||||
|
|
||||||
## Acceptance
|
## Acceptance
|
||||||
|
|
||||||
Keyboard usable in every app; mic key dictates real speech into the
|
Squeekboard raises from ordinary and terminal inputs, types letters/numbers,
|
||||||
focused field (verified 2026-07-21: "Hello, can you hear me?" end-to-end);
|
and survives at least five dismiss/reopen cycles. Its mic key dictates real
|
||||||
pill dismisses without eating key taps; number row, layout switcher, Hunspell
|
speech into the focused field and visibly traverses idle → recording →
|
||||||
suggestions and compact arrows work in the daily layout; a recording indicator
|
transcribing → idle; the error state is also forced once. The AI side panels
|
||||||
makes the mic key's state obvious.
|
must not dismiss or strand it. Only after that proof may Stevia,
|
||||||
|
`souveraine-osk-switch`, and the shell's keyboard-swap gesture be removed.
|
||||||
|
Native word completion is a following acceptance step, not a blocker for the
|
||||||
|
single-keyboard cutover.
|
||||||
|
|
||||||
## Connects to
|
## Connects to
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
# TASK 70 — The island: agent surfacing for the shell (and her face)
|
# TASK 70 — The island: agent surfacing for the shell (and her face)
|
||||||
|
|
||||||
**Status:** recon 2026-08-11, nothing built. **Adjacent to:** TASK-69 (the
|
**Status:** source implemented; relocation into the AI panel is uncommitted
|
||||||
session daemon is this surface's data source). **Source reviewed:**
|
and not installed as of 2026-08-11. **Adjacent to:** TASK-69 (the session
|
||||||
|
daemon is this surface's data source). **Source reviewed:**
|
||||||
`patheonsceo/Dynamic-island-for-arch` ("Open Agent Island", upstream clone for
|
`patheonsceo/Dynamic-island-for-arch` ("Open Agent Island", upstream clone for
|
||||||
reference). **Twines with:** TASK-59 (the avatar).
|
reference). **Twines with:** TASK-59 (the avatar).
|
||||||
|
|
||||||
|
|
@ -134,11 +135,19 @@ would be a guess wearing the costume of a measurement.
|
||||||
|
|
||||||
### Status
|
### Status
|
||||||
|
|
||||||
Untested against a running shell — nothing has rendered. `qmllint` is clean on
|
The first bar rendering was installed on laptop and phone. Casey's glass
|
||||||
all four files, but it cannot resolve `qs.*` imports from the repo, so
|
review rejected that placement: the phone bar has no room for agent-session
|
||||||
property-level mistakes will only appear at load. Acceptance ("one real session
|
chrome, and activity belongs beside the conversation it describes.
|
||||||
showing, safety suite green") is **not** met: the sessions are real and shown,
|
|
||||||
the permission half is not built.
|
The source now removes `island` from both bar profiles and mounts a compact,
|
||||||
|
expandable `AgentSessionPanel` at the top of `AiChat`. It consumes the
|
||||||
|
existing `AgentSessions` singleton and `IslandExpansion`; no second
|
||||||
|
collector or session model was introduced. This relocation is source-only
|
||||||
|
until packaged. The phone may receive it with the next package; the laptop's
|
||||||
|
live shell must wait for Casey's coordinated larger push.
|
||||||
|
|
||||||
|
Acceptance remains partial: real session status is implemented read-only; the
|
||||||
|
permission half is deliberately not built.
|
||||||
|
|
||||||
**Method note:** `/usr/bin/qmllint` is a **Qt5** binary that prints nothing and
|
**Method note:** `/usr/bin/qmllint` is a **Qt5** binary that prints nothing and
|
||||||
exits 0 on broken input — it is not a gate. Use `/usr/lib/qt6/bin/qmllint`, and
|
exits 0 on broken input — it is not a gate. Use `/usr/lib/qt6/bin/qmllint`, and
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue