summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-07-03 07:09:09 -0500
committeradamdottv <[email protected]>2025-07-03 07:09:09 -0500
commit8825cd38113cfd1ac225b147f52b59d9348ab0aa (patch)
treecff39e453059ff44cf08567f9bf7f49cf1c03985
parent3d9a5d9970b8f4ce56fb706f6cfb8745b61e905d (diff)
downloadopencode-8825cd38113cfd1ac225b147f52b59d9348ab0aa.tar.gz
opencode-8825cd38113cfd1ac225b147f52b59d9348ab0aa.zip
feat(tui): unshare command
-rw-r--r--packages/opencode/src/share/share.ts5
-rw-r--r--packages/tui/internal/commands/command.go9
-rw-r--r--packages/tui/internal/components/chat/messages.go7
-rw-r--r--packages/tui/internal/tui/tui.go11
4 files changed, 28 insertions, 4 deletions
diff --git a/packages/opencode/src/share/share.ts b/packages/opencode/src/share/share.ts
index f498e0f45..f58468cea 100644
--- a/packages/opencode/src/share/share.ts
+++ b/packages/opencode/src/share/share.ts
@@ -67,9 +67,12 @@ export namespace Share {
}
export async function remove(id: string) {
+ const share = await Session.getShare(id).catch(() => {})
+ if (!share) return
+ const { secret } = share
return fetch(`${URL}/share_delete`, {
method: "POST",
- body: JSON.stringify({ id }),
+ body: JSON.stringify({ id, secret }),
}).then((x) => x.json())
}
}
diff --git a/packages/tui/internal/commands/command.go b/packages/tui/internal/commands/command.go
index 13fb3d5eb..9c4da12ec 100644
--- a/packages/tui/internal/commands/command.go
+++ b/packages/tui/internal/commands/command.go
@@ -75,6 +75,7 @@ const (
SessionNewCommand CommandName = "session_new"
SessionListCommand CommandName = "session_list"
SessionShareCommand CommandName = "session_share"
+ SessionUnshareCommand CommandName = "session_unshare"
SessionInterruptCommand CommandName = "session_interrupt"
SessionCompactCommand CommandName = "session_compact"
ToolDetailsCommand CommandName = "tool_details"
@@ -161,6 +162,12 @@ func LoadFromConfig(config *opencode.Config) CommandRegistry {
Trigger: "share",
},
{
+ Name: SessionUnshareCommand,
+ Description: "unshare session",
+ Keybindings: parseBindings("<leader>u"),
+ Trigger: "unshare",
+ },
+ {
Name: SessionInterruptCommand,
Description: "interrupt session",
Keybindings: parseBindings("esc"),
@@ -289,7 +296,7 @@ func LoadFromConfig(config *opencode.Config) CommandRegistry {
{
Name: MessagesRevertCommand,
Description: "revert message",
- Keybindings: parseBindings("<leader>u"),
+ Keybindings: parseBindings("<leader>r"),
},
{
Name: AppExitCommand,
diff --git a/packages/tui/internal/components/chat/messages.go b/packages/tui/internal/components/chat/messages.go
index a0105ec42..05fa30801 100644
--- a/packages/tui/internal/components/chat/messages.go
+++ b/packages/tui/internal/components/chat/messages.go
@@ -309,9 +309,12 @@ func (m *messagesComponent) header(width int) string {
base := styles.NewStyle().Foreground(t.Text()).Background(t.Background()).Render
muted := styles.NewStyle().Foreground(t.TextMuted()).Background(t.Background()).Render
headerLines := []string{}
- headerLines = append(headerLines, util.ToMarkdown("# "+m.app.Session.Title, width-6, t.Background()))
+ headerLines = append(
+ headerLines,
+ util.ToMarkdown("# "+m.app.Session.Title, width-6, t.Background()),
+ )
if m.app.Session.Share.URL != "" {
- headerLines = append(headerLines, muted(m.app.Session.Share.URL))
+ headerLines = append(headerLines, muted(m.app.Session.Share.URL+" /unshare"))
} else {
headerLines = append(headerLines, base("/share")+muted(" to create a shareable link"))
}
diff --git a/packages/tui/internal/tui/tui.go b/packages/tui/internal/tui/tui.go
index 1c3266782..cc437f804 100644
--- a/packages/tui/internal/tui/tui.go
+++ b/packages/tui/internal/tui/tui.go
@@ -827,6 +827,17 @@ func (a appModel) executeCommand(command commands.Command) (tea.Model, tea.Cmd)
shareUrl := response.Share.URL
cmds = append(cmds, tea.SetClipboard(shareUrl))
cmds = append(cmds, toast.NewSuccessToast("Share URL copied to clipboard!"))
+ case commands.SessionUnshareCommand:
+ if a.app.Session.ID == "" {
+ return a, nil
+ }
+ _, err := a.app.Client.Session.Unshare(context.Background(), a.app.Session.ID)
+ if err != nil {
+ slog.Error("Failed to unshare session", "error", err)
+ return a, toast.NewErrorToast("Failed to unshare session")
+ }
+ a.app.Session.Share.URL = ""
+ cmds = append(cmds, toast.NewSuccessToast("Session unshared successfully"))
case commands.SessionInterruptCommand:
if a.app.Session.ID == "" {
return a, nil