* 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>
81 lines
2.5 KiB
JSON
81 lines
2.5 KiB
JSON
{
|
|
"answer": {
|
|
"empty": "No answers yet. Ask one from the launcher: /claude ? <question>",
|
|
"title": "Claude — quick ask"
|
|
},
|
|
"launcher": {
|
|
"ask": "Ask Claude (one-shot)",
|
|
"ask_hint": "Type a question after ?",
|
|
"continue": "Resume last Claude session",
|
|
"launch": "Launch Claude Code",
|
|
"show_answer": "Show last answer"
|
|
},
|
|
"notify": {
|
|
"ask_failed": "ask failed",
|
|
"auth_remedy": "Claude login expired — start a Claude session in a terminal to refresh it, then re-ask.",
|
|
"full_answer_hint": "Full answer: click the bar pulse",
|
|
"no_output": "(no output)",
|
|
"title": "Claude"
|
|
},
|
|
"orb": {
|
|
"sessions": "{count} sessions"
|
|
},
|
|
"pulse": {
|
|
"burn": "{model} · {tin} in / {tout} out",
|
|
"cached": "{n} cached",
|
|
"panel_launch_failed": "could not launch the answer panel",
|
|
"sessions_header": "Claude — {count} sessions",
|
|
"title": "pulse",
|
|
"total": "Σ {tin} in / {tout} out"
|
|
},
|
|
"sessions": {
|
|
"empty": "No live Claude sessions. Start one in a terminal, or with /claude.",
|
|
"retire": "Retire",
|
|
"title": "Claude — {count} sessions",
|
|
"title_one": "Claude — 1 session"
|
|
},
|
|
"settings": {
|
|
"breath_speed": {
|
|
"description": "How fast the pulse dot and orb breathe. 1.0 is the default; higher is faster, lower is slower.",
|
|
"label": "Breath speed"
|
|
},
|
|
"orb_swell": {
|
|
"description": "How far the desktop orb magnifies as it breathes. 0 keeps it a static size; 1.0 is the default; higher swells more.",
|
|
"label": "Orb swell"
|
|
},
|
|
"pulse_glow_floor": {
|
|
"description": "How dim the bar dot gets at the low point of its breath. 0 dims to black; higher stays brighter. 0.45 is the default.",
|
|
"label": "Bar dot glow floor"
|
|
}
|
|
},
|
|
"state": {
|
|
"orb": {
|
|
"error": "error",
|
|
"idle": "idle",
|
|
"needs_attention": "needs you",
|
|
"text": "responding",
|
|
"tool_start": "running a tool",
|
|
"turn_end": "done — ready for you",
|
|
"turn_start": "thinking"
|
|
},
|
|
"tip": {
|
|
"error": "Claude: error",
|
|
"idle": "Claude: idle",
|
|
"needs_attention": "Claude needs you",
|
|
"text": "Claude: responding",
|
|
"tool_start": "Claude: running a tool",
|
|
"turn_end": "Claude: done — ready for you",
|
|
"turn_start": "Claude: thinking"
|
|
},
|
|
"word": {
|
|
"error": "error",
|
|
"idle": "idle",
|
|
"needs_attention": "needs you",
|
|
"text": "responding",
|
|
"tool_start": "tool",
|
|
"turn_end": "done",
|
|
"turn_start": "thinking"
|
|
}
|
|
}
|
|
}
|