Update claude-companion to v1.3.0 (what its got: a lot) (#167)
* claude-companion: v1.3.0 — headless aggregator, user settings, sessions panel Catalog-side update for lowcache/claude-companion, from 1.0.1 to 1.3.0. Architecture: the pulse aggregator moved out of the bar widget into a headless [[service]] (pulse-svc.luau). Capture no longer depends on the bar dot being placed — the service starts with the shell and listens regardless of surfaces, retiring the plugin's old "pulse must sit on a bar" deployment invariant. The bar widget and desktop orb are now independent subscribers of the claude.pulse rollup, rendering only. Noctalia 5 beta also fixed the older limitation where bar widgets did not receive state.watch callbacks, so the bar dot is event-driven like the orb; both docs are updated accordingly. New: a `sessions` panel on right-click of the pulse (left-click still opens the answer panel) — one row per live session with state, model and token burn, plus a Retire control for a session whose SessionEnd hook never fired and which would otherwise sit at idle indefinitely. It introduces no new IPC verb: only the trailing `session` payload field is read for routing, so `session_end` with `,,,,,<sid>` is already a well-formed single-session retire. PROTOCOL.md now documents that property so any adapter can use it. Session ids are allowlisted before reaching a shell command. New: three animation settings (breath_speed, pulse_glow_floor, orb_swell), each declaring an explicit `step` — an omitted step defaults to 1.0 in the manifest parser, which collapses a fractional range to a couple of preset stops instead of a slider. plugin_api stays at 3. Everything used here is ungated at that level, and the contributing guidance is to raise it only when adopting a capability from a newer level. Verified against the installed build rather than assumed. Also ships tests/manifest_spec.py, which pins the settings contract: every numeric setting must declare an explicit step finer than its range, defaults must land on a step boundary, label/description must use the *_key form, and every key must resolve in translations/en.json. Neither the linter nor a widget spec can catch a bad step, which is how the slider bug shipped in the first place. Validated: catalog validator 54/54 exit 0, its own 54 self-tests pass, and the plugin's suite (5 luau + shim + manifest) is green. Live-tested on niri against Noctalia 5 beta; the compositor shim is unchanged in this update. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * claude-companion: tint the sessions retire control, fix singular header Follow-up on the v1.3.0 submission from live review: the retire button carried no variant and rendered at the background colour; a single session read "1 sessions". The panel root stays unfilled by design — noctalia panels are translucent under the glass style, so the backdrop is the shell's, not the plugin's. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: lowcache <drawpdeadredd@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
lowcache
Claude Opus 5
parent
d113b03439
commit
d2aa9b9751
@@ -156,7 +156,9 @@ end
|
||||
-- 401 whenever no terminal session has run recently. Two layers, both fail-open:
|
||||
-- a pre-flight that skips the launch when the token is positively expired, and
|
||||
-- an error-text match that swaps the raw API error for the remedy.
|
||||
-- (remedy text: tr("notify.auth_remedy"))
|
||||
-- Resolved per call, not once at load: a language change should be reflected in the
|
||||
-- remedy text without a plugin reload.
|
||||
local function auth_remedy() return tr("notify.auth_remedy") end
|
||||
|
||||
local CREDS_PATH = "~/.claude/.credentials.json"
|
||||
|
||||
@@ -284,9 +286,8 @@ function onActivate(id)
|
||||
-- and the remedy needs a terminal anyway — so say so now and skip the
|
||||
-- launch. No claude.state touch: no ask session ever starts.
|
||||
if token_expired() then
|
||||
local remedy = tr("notify.auth_remedy")
|
||||
publish_answer(ask, remedy, true)
|
||||
if not panel_showing() then noctalia.notifyError(tr("notify.title"), remedy) end
|
||||
publish_answer(ask, auth_remedy(), true)
|
||||
if not panel_showing() then noctalia.notifyError(tr("notify.title"), auth_remedy()) end
|
||||
return
|
||||
end
|
||||
set_state(EVENT.turn_start)
|
||||
@@ -316,7 +317,7 @@ function onActivate(id)
|
||||
if final == "" then final = tr("notify.ask_failed") end
|
||||
-- a 401 that slipped past the pre-flight: deliver the remedy, not the
|
||||
-- raw API error blob
|
||||
if is_auth_error(final) then final = tr("notify.auth_remedy") end
|
||||
if is_auth_error(final) then final = auth_remedy() end
|
||||
publish_answer(ask, final, true)
|
||||
if not panel_showing() then
|
||||
local body, clipped = preview(final)
|
||||
|
||||
Reference in New Issue
Block a user