vasyansk
daf87d3c09
feat(app): panel zoom — full-grid render + header toggle
...
Wire Cmd::SetZoom through Tauri bridge (set_zoom command), add zoomed
field to WorkspaceView, short-circuit LayoutEngine to render only the
zoomed panel full-grid, and toggle Maximize2/Minimize2 in panel header.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 12:33:46 +07:00
vasyansk
2b1ccaf31d
feat: persisted per-workspace panel zoom (proto + daemon, auto-clear on removal)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-10 12:24:23 +07:00
vasyansk
defceb1169
feat(app): real daemon health footer (live, uptime, version)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 12:09:35 +07:00
vasyansk
f7763a84fc
feat: Health command — version, pid, started_at (proto + daemon)
2026-06-10 12:06:38 +07:00
vasyansk
f18d929c10
docs: SP1+SP3+SP4 implementation plan
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 11:57:45 +07:00
vasyansk
a707895200
docs: SP1+SP3+SP4 design — observability, scrollback search, panel zoom
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 11:52:39 +07:00
vasyansk
c9ed522230
chore(app): regenerate Tauri schemas for window-state permission
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 09:25:43 +07:00
vasyansk
a5156859d6
Merge: persist window size/position via tauri-plugin-window-state
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 09:25:29 +07:00
vasyansk
7d8e39ca3d
feat(app): remember window size/position across restarts (window-state plugin)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 09:25:29 +07:00
vasyansk
5fca6bfd09
Merge SP2: UI parity + persistent event log & read-model
...
- UI parity with Pencil mockup (top bar, panel cards, sidebar/event-center polish)
- Daemon-owned, disk-persisted event log (~/.spacesh/events.json) with read-flags
- Event Center sourced from daemon; real Unread/Errors tabs + bell unread badge
- 112 workspace tests green; frontend build clean
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:59:34 +07:00
vasyansk
615b90e887
test(daemon): event log survives cold daemon restart
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:35:38 +07:00
vasyansk
a8000323ec
docs: SP2 manual test scenario and updated Event Center limitations
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-10 08:30:21 +07:00
vasyansk
834d61c69a
feat(app): daemon-sourced Event Center feed, read-model, bell badge
...
Source Event Center from daemon event_log (seed + live event/events_read push).
Unread/Errors tabs filter real EventRecord flags; bell shows numeric unread badge;
clicking an entry calls focusSurface + markEventsRead(ids). notify.ts param widened
to string so exit kind type-checks without breaking existing NOTIFY_STATES guard.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-10 08:28:35 +07:00
vasyansk
d08a446b6f
feat(app): event_log and mark_read bridge commands
2026-06-10 08:19:22 +07:00
vasyansk
21fe1308cc
feat(daemon): EventLog/MarkRead commands; Focus marks surface read
...
Wire Cmd::EventLog and Cmd::MarkRead to the live EventLog (replacing
NOT_IMPLEMENTED stubs). Cmd::Focus now calls mark_read for the surface,
persists the updated snapshot, and broadcasts Evt::EventsRead.
Add integration tests: event_log_query_and_mark_read and
focus_marks_surface_events_read.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-10 08:13:50 +07:00
vasyansk
e83524a076
feat(daemon): record done/wait/error/exit into the event log
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:02:03 +07:00
vasyansk
f7bf9fc5c6
wire(daemon): thread EventLog + EventPersister through serve/router
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 07:40:54 +07:00
vasyansk
ac2d5ca1db
feat(daemon): JsonEventStore + debounced EventPersister
...
Adds disk persistence for the event log: atomic temp+fsync+rename write,
corrupt-file backup, and a debounced coalescing persister task mirroring
state_store/persist patterns. 4 tests: round-trip, missing, corrupt, burst.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-10 07:27:23 +07:00
vasyansk
56ba1723b9
feat(daemon): EventLog ring model with read-flags
...
Add event_log.rs with EventLog (capped VecDeque, monotonic ids, mark_read,
snapshot/restore) and EventLogState. Register mod in main.rs. Stub
Cmd::EventLog and Cmd::MarkRead arms in server.rs to keep the exhaustive
match compiling; full wiring follows in Task 4.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-10 07:21:26 +07:00
vasyansk
5a8596dd0b
feat(proto): EventLog/MarkRead commands and Event/EventsRead events
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-10 06:59:27 +07:00
vasyansk
fc13e4340c
feat(proto): EventKind, EventRecord, MarkReadTarget
2026-06-10 06:52:35 +07:00
vasyansk
36964c9f21
feat(app): UI parity with Pencil mockup — top bar, panel cards, sidebar/event-center polish
...
Top bar (breadcrumb + actions + account), rounded panel cards with active
accent + rich headers, sidebar count pills/collapsible groups/daemon footer,
preset chips + scrollback pill, Event Center tabs + external-notify footer,
JetBrains Mono + Inter via @fontsource, shared theme tokens. Backend-absent
pieces are mocked (search, zoom, uptime, channels) pending SP1–SP5.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 06:47:38 +07:00
vasyansk
807eab3f6c
docs: SP2 implementation plan — persistent event log + read-model
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 06:40:15 +07:00
vasyansk
e038ff307d
docs: SP2 design — persistent event log + read-model
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 06:31:26 +07:00
vasyansk
5c47ec25a1
Merge fix: GUI spaceshd discovery + non-fatal connect
2026-06-09 23:31:52 +07:00
vasyansk
92706c0780
fix(app): robust spaceshd discovery for tauri dev + non-fatal connect
...
The app is its own cargo workspace, so in 'tauri dev' the app binary lives
in app/src-tauri/target/ and spaceshd is NOT a sibling — lazy-start failed
and the .expect() crashed the window. Now: find_daemon tries SPACESHD_BIN,
sibling, repo-root target/{debug,release}, then PATH; bridge honors
SPACESH_SOCK like the daemon/CLI; setup logs instead of panicking.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 23:31:52 +07:00
vasyansk
ec4025a683
docs: manual run & test guide (build, daemon, GUI, CLI, per-milestone checks)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 23:26:15 +07:00
vasyansk
710fa6473f
Merge spacesh M3: status detection sources + UI + native notifications
...
Claude Code hooks (per-surface CLAUDE_CONFIG_DIR), zsh OSC 133, fallback
patterns → set_state; status rings, sidebar aggregate, Event Center,
native macOS notifications, auto-unread. 87 tests green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 23:18:50 +07:00
vasyansk
c86627153d
chore(app): lock notification plugin deps + regenerated tauri schemas
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 23:14:28 +07:00
vasyansk
1ecefdeb80
feat(app): Event Center, native notifications, auto-unread, state wiring in App
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 23:13:00 +07:00
vasyansk
d36548ff39
feat(app): status rings on panels + sidebar aggregate badge from state events
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 23:11:46 +07:00
vasyansk
c35585755e
feat(daemon): actor OSC133/fallback detection → set_state, hook/shell spawn env, cleanup
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 23:05:18 +07:00
vasyansk
4396ad7909
feat(daemon): zsh OSC 133 shell integration via per-surface ZDOTDIR
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 23:00:48 +07:00
vasyansk
255fa27271
feat(daemon): versioned Claude Code hook adapter (per-surface CLAUDE_CONFIG_DIR)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 23:00:40 +07:00
vasyansk
4ec7dc1a78
feat(core): Osc133Scanner + FallbackScanner status detectors + grid tail_text
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:59:24 +07:00
vasyansk
84a19356e2
docs(plan): M3 implementation plan — status detection sources + UI
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:52:29 +07:00
vasyansk
c0c8fe25f1
docs(spec): M3 design — status detection sources + UI + native notifications
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:45:11 +07:00
vasyansk
7f2afc3b8a
Merge spacesh M4: CLI + set_state/state status primitive
...
spacesh-cli (lib+bin) one-shot client at full bus parity minus
interactive panels; --json + completions; lazy-start (notify
best-effort). In-memory ephemeral SurfaceState (set_state/state).
SPACESH_SOCK override. 73 tests green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:28:30 +07:00
vasyansk
819e936e6d
docs(plan): sync M4 lifecycle test with SPACESH_SOCK serial-guard fix
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:24:40 +07:00
vasyansk
67c64e5bfe
chore: lock clap/clap_complete for spacesh-cli
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:24:40 +07:00
vasyansk
6fc099bb6f
test(daemon): serialize SPACESH_SOCK-mutating lifecycle tests to fix env race
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:23:41 +07:00
vasyansk
6f2e7885a4
test(cli): wire-level integration tests via SPACESH_SOCK mock daemon
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:20:26 +07:00
vasyansk
3c3a8039f3
feat(cli): command dispatch, human/--json rendering, status table, completions
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:17:53 +07:00
vasyansk
a9fa1bf77b
feat(cli): spacesh-cli scaffold — clap tree, one-shot client, command mapping
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:17:15 +07:00
vasyansk
635f9f4356
feat(daemon): per-surface status (set_state/state), idle-on-spawn, SPACESH_SOCK override
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:13:50 +07:00
vasyansk
4bd4aa4a36
feat(proto): SurfaceState + SetState command + State event + SurfaceView.state
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:10:54 +07:00
vasyansk
c2f8ef4214
docs(plan): M4 implementation plan — CLI + set_state/state primitive
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 22:06:34 +07:00
vasyansk
429fd6977e
docs(spec): M4 design — CLI + set_state/state status primitive
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 21:58:40 +07:00
vasyansk
34cc4ba5ca
Merge spacesh M2: layouts, split tree, persistence, sidebar, presets
...
n-ary split layouts + LayoutEngine resize, multi-workspace structure
with groups/unread/order, 10 presets + wizard, disk persistence
(state.json) with cold-start restore (panels stopped). 56 tests green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 21:44:16 +07:00
vasyansk
33fc8625af
docs(plan): correct M2 deferral note — group commands wired, only drag UI deferred
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 21:42:01 +07:00