opencode-sesh 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -1
- package/CHANGELOG.md +7 -0
- package/README.md +2 -2
- package/package.json +1 -1
- package/tui-plugins/sesh-panel/tui.tsx +25 -7
package/AGENTS.md
CHANGED
|
@@ -85,7 +85,10 @@ the schema below. Keystrokes never touch the database:
|
|
|
85
85
|
- Session and directory pins live in `${XDG_DATA_HOME:-$HOME/.local/share}/sesh/pins.json`
|
|
86
86
|
(`SESH_PINS_FILE` overrides it for tests), shared by fzf and the TUI. Writes
|
|
87
87
|
use a sibling lock directory and atomic rename. Ctrl-S toggles a selected
|
|
88
|
-
session; Ctrl-D toggles its directory
|
|
88
|
+
session; Ctrl-D toggles its directory (terminal picker and option+o picker).
|
|
89
|
+
The sidebar and home lists use Option-S / Option-R instead: opencode binds
|
|
90
|
+
`ctrl+d` itself (composer delete-char, session delete), so ctrl pins would
|
|
91
|
+
shadow the composer. Pinned directories sort before groups
|
|
89
92
|
containing pinned sessions, with pinned sessions first inside each group.
|
|
90
93
|
|
|
91
94
|
**Output contract** (TSV, 6 fields):
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,12 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.0.3] - 2026-10-08
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **tui:** Rebind sidebar pins to option keys to stop shadowing composer
|
|
13
|
+
|
|
8
14
|
## [1.0.2] - 2026-10-08
|
|
9
15
|
|
|
10
16
|
### Fixed
|
|
@@ -430,6 +436,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
430
436
|
- Fixture-database regression suite, TypeScript typechecking, and ShellCheck in
|
|
431
437
|
CI.
|
|
432
438
|
|
|
439
|
+
[1.0.3]: https://github.com/ozandogrultan/opencode-sesh/compare/v1.0.2...v1.0.3
|
|
433
440
|
[1.0.2]: https://github.com/ozandogrultan/opencode-sesh/compare/v1.0.1...v1.0.2
|
|
434
441
|
[1.0.1]: https://github.com/ozandogrultan/opencode-sesh/compare/v1.0.0...v1.0.1
|
|
435
442
|
[1.0.0]: https://github.com/ozandogrultan/opencode-sesh/compare/v0.14.1...v1.0.0
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ Sessions (8) ▾ hide
|
|
|
24
24
|
├○ Retry the OAuth token refr… 2h
|
|
25
25
|
├○ Login rate limiting notes 3d
|
|
26
26
|
├○ Draft the release notes 7d
|
|
27
|
-
├○ Auth middleware cleanup
|
|
27
|
+
├○ Auth middleware cleanup 11d
|
|
28
28
|
└○ Rotate the signing keys 12d
|
|
29
29
|
▾ ~/Projects/mobile (3)
|
|
30
30
|
├○ Author avatar upload retry 1d
|
|
@@ -201,7 +201,7 @@ workspace at its directory; outside cmux it shows a toast instead.
|
|
|
201
201
|
Click the sidebar's `search…` box to filter recent sessions in place; click
|
|
202
202
|
elsewhere or press Esc to leave search. Click the **Sessions** heading to drive
|
|
203
203
|
the list from the keyboard instead of the mouse (`↑`/`↓` to move, Enter to open,
|
|
204
|
-
Option-P to preview,
|
|
204
|
+
Option-P to preview, Option-S/Option-R to pin, Option-D to delete, Esc to leave). Pinned
|
|
205
205
|
directories rise first, while sessions within each directory are ordered by
|
|
206
206
|
last update, newest first. The section lists every session and scrolls to fill
|
|
207
207
|
the sidebar, so click **▾ hide** to collapse it when you need the room.
|
package/package.json
CHANGED
|
@@ -1089,6 +1089,14 @@ function SidebarSessions(props: { api: TuiPluginApi } & PinProps) {
|
|
|
1089
1089
|
})
|
|
1090
1090
|
createEffect(() => {
|
|
1091
1091
|
if (props.api.ui.dialog.open) menu.close()
|
|
1092
|
+
// A modal dialog owns input while open: yield the sidebar's keyboard
|
|
1093
|
+
// captures too, so its layers cannot double-fire with the dialog's own.
|
|
1094
|
+
if (props.api.ui.dialog.open) {
|
|
1095
|
+
cancelDelete()
|
|
1096
|
+
setNavActive(false)
|
|
1097
|
+
setSearching(false)
|
|
1098
|
+
setHovered(undefined)
|
|
1099
|
+
}
|
|
1092
1100
|
})
|
|
1093
1101
|
|
|
1094
1102
|
const moveCursor = (delta: number) => {
|
|
@@ -1357,8 +1365,8 @@ function SidebarSessions(props: { api: TuiPluginApi } & PinProps) {
|
|
|
1357
1365
|
if (!confirmArmed()) requestDelete(entry)
|
|
1358
1366
|
},
|
|
1359
1367
|
},
|
|
1360
|
-
{ key: "
|
|
1361
|
-
{ key: "
|
|
1368
|
+
{ key: "alt+s", desc: "Pin session", preventDefault: true, cmd: () => props.onTogglePin("sessions", entry.id) },
|
|
1369
|
+
{ key: "alt+r", desc: "Pin directory", preventDefault: true, cmd: () => props.onTogglePin("directories", entry.dir) },
|
|
1362
1370
|
{
|
|
1363
1371
|
key: "/",
|
|
1364
1372
|
desc: "Search sessions",
|
|
@@ -1409,7 +1417,7 @@ function SidebarSessions(props: { api: TuiPluginApi } & PinProps) {
|
|
|
1409
1417
|
},
|
|
1410
1418
|
},
|
|
1411
1419
|
{
|
|
1412
|
-
key: "
|
|
1420
|
+
key: "alt+s",
|
|
1413
1421
|
desc: "Pin session",
|
|
1414
1422
|
preventDefault: true,
|
|
1415
1423
|
cmd: () => {
|
|
@@ -1418,7 +1426,7 @@ function SidebarSessions(props: { api: TuiPluginApi } & PinProps) {
|
|
|
1418
1426
|
},
|
|
1419
1427
|
},
|
|
1420
1428
|
{
|
|
1421
|
-
key: "
|
|
1429
|
+
key: "alt+r",
|
|
1422
1430
|
desc: "Pin directory",
|
|
1423
1431
|
preventDefault: true,
|
|
1424
1432
|
cmd: () => {
|
|
@@ -1639,7 +1647,7 @@ function SidebarSessions(props: { api: TuiPluginApi } & PinProps) {
|
|
|
1639
1647
|
</Show>
|
|
1640
1648
|
<Show when={navActive()}>
|
|
1641
1649
|
<box paddingTop={1}>
|
|
1642
|
-
<text style={{ fg: theme().textMuted }}>↑↓ move · enter open · option+p preview ·
|
|
1650
|
+
<text style={{ fg: theme().textMuted }}>↑↓ move · enter open · option+p preview · option+s/r pin · option+d delete · esc done</text>
|
|
1643
1651
|
</box>
|
|
1644
1652
|
</Show>
|
|
1645
1653
|
</Show>
|
|
@@ -1807,6 +1815,16 @@ function HomeSessions(props: { api: TuiPluginApi } & PinProps) {
|
|
|
1807
1815
|
if (searching()) setSearching(false)
|
|
1808
1816
|
}
|
|
1809
1817
|
|
|
1818
|
+
// A modal dialog owns input while open: yield this list's keyboard captures
|
|
1819
|
+
// too, so its layers cannot double-fire with the dialog's own.
|
|
1820
|
+
createEffect(() => {
|
|
1821
|
+
if (props.api.ui.dialog.open) {
|
|
1822
|
+
cancelDelete()
|
|
1823
|
+
setSearching(false)
|
|
1824
|
+
setHovered(undefined)
|
|
1825
|
+
}
|
|
1826
|
+
})
|
|
1827
|
+
|
|
1810
1828
|
onMount(() => {
|
|
1811
1829
|
ensureRootMouse(props.api.renderer)
|
|
1812
1830
|
rootMouseHandlers.add(onRootMouseDown)
|
|
@@ -1854,8 +1872,8 @@ function HomeSessions(props: { api: TuiPluginApi } & PinProps) {
|
|
|
1854
1872
|
if (!confirmArmed()) requestDelete(entry)
|
|
1855
1873
|
},
|
|
1856
1874
|
},
|
|
1857
|
-
{ key: "
|
|
1858
|
-
{ key: "
|
|
1875
|
+
{ key: "alt+s", desc: "Pin session", preventDefault: true, cmd: () => props.onTogglePin("sessions", entry.id) },
|
|
1876
|
+
{ key: "alt+r", desc: "Pin directory", preventDefault: true, cmd: () => props.onTogglePin("directories", entry.dir) },
|
|
1859
1877
|
],
|
|
1860
1878
|
})
|
|
1861
1879
|
})
|