Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
05bbc07
feat: persist webchat conversations and add API client package
jamiepine Mar 25, 2026
9f9e7e0
streaming support
jamiepine Mar 25, 2026
b9dd1df
design doc
jamiepine Mar 26, 2026
d454798
conversation settings impl
jamiepine Mar 26, 2026
5a77c00
feat: finish conversation settings — load from DB, per-process model …
jamiepine Mar 29, 2026
e804610
ui tweaks
jamiepine Mar 29, 2026
9e5b802
feat: channel settings unification — ResponseMode, per-channel persis…
jamiepine Mar 29, 2026
15c9fe9
refactor: remove legacy listen_only_mode infrastructure
jamiepine Mar 29, 2026
c3e7db5
feat: settings hot-reload, response mode badges, portal header info
jamiepine Mar 29, 2026
c6eb977
fix: channel settings popover not opening on click
jamiepine Mar 29, 2026
76ba6b3
fix: settings popover overflow when advanced section is open
jamiepine Mar 29, 2026
d70163c
fix: address PR review feedback
jamiepine Mar 29, 2026
f165c25
fix: address remaining PR review feedback
jamiepine Mar 29, 2026
0f1406b
fix: add missing `settings` field to all Binding initializers in tests
jamiepine Mar 30, 2026
f9263a0
fix: remove stale `settings` field from platform config structs and u…
jamiepine Mar 31, 2026
75d0ca4
fix: resolve clippy errors (too_many_arguments, if_same_then_else, co…
jamiepine Mar 31, 2026
7cb1839
fix: replace unnecessary `to_string()` with `as_ref()` in main.rs
jamiepine Mar 31, 2026
3e910e4
fix: show agent display name instead of ID in portal chat header
jamiepine Mar 31, 2026
584e55e
fix: use accent color for user message bubbles in portal chat
jamiepine Mar 31, 2026
a73bde2
fix: use subtler hover/active colors in conversation sidebar
jamiepine Mar 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions desktop/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions desktop/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ path = "src/main.rs"

[dependencies]
tauri = { version = "2", features = ["macos-private-api"] }
tauri-plugin-global-shortcut = "2"
tauri-plugin-shell = "2"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
Expand Down
2 changes: 1 addition & 1 deletion desktop/src-tauri/gen/schemas/acl-manifests.json

Large diffs are not rendered by default.

66 changes: 66 additions & 0 deletions desktop/src-tauri/gen/schemas/desktop-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -2354,6 +2354,72 @@
"const": "core:window:deny-unminimize",
"markdownDescription": "Denies the unminimize command without any pre-configured scope."
},
{
"description": "No features are enabled by default, as we believe\nthe shortcuts can be inherently dangerous and it is\napplication specific if specific shortcuts should be\nregistered or unregistered.\n",
"type": "string",
"const": "global-shortcut:default",
"markdownDescription": "No features are enabled by default, as we believe\nthe shortcuts can be inherently dangerous and it is\napplication specific if specific shortcuts should be\nregistered or unregistered.\n"
},
{
"description": "Enables the is_registered command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:allow-is-registered",
"markdownDescription": "Enables the is_registered command without any pre-configured scope."
},
{
"description": "Enables the register command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:allow-register",
"markdownDescription": "Enables the register command without any pre-configured scope."
},
{
"description": "Enables the register_all command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:allow-register-all",
"markdownDescription": "Enables the register_all command without any pre-configured scope."
},
{
"description": "Enables the unregister command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:allow-unregister",
"markdownDescription": "Enables the unregister command without any pre-configured scope."
},
{
"description": "Enables the unregister_all command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:allow-unregister-all",
"markdownDescription": "Enables the unregister_all command without any pre-configured scope."
},
{
"description": "Denies the is_registered command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:deny-is-registered",
"markdownDescription": "Denies the is_registered command without any pre-configured scope."
},
{
"description": "Denies the register command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:deny-register",
"markdownDescription": "Denies the register command without any pre-configured scope."
},
{
"description": "Denies the register_all command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:deny-register-all",
"markdownDescription": "Denies the register_all command without any pre-configured scope."
},
{
"description": "Denies the unregister command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:deny-unregister",
"markdownDescription": "Denies the unregister command without any pre-configured scope."
},
{
"description": "Denies the unregister_all command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:deny-unregister-all",
"markdownDescription": "Denies the unregister_all command without any pre-configured scope."
},
{
"description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`",
"type": "string",
Expand Down
66 changes: 66 additions & 0 deletions desktop/src-tauri/gen/schemas/macOS-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -2354,6 +2354,72 @@
"const": "core:window:deny-unminimize",
"markdownDescription": "Denies the unminimize command without any pre-configured scope."
},
{
"description": "No features are enabled by default, as we believe\nthe shortcuts can be inherently dangerous and it is\napplication specific if specific shortcuts should be\nregistered or unregistered.\n",
"type": "string",
"const": "global-shortcut:default",
"markdownDescription": "No features are enabled by default, as we believe\nthe shortcuts can be inherently dangerous and it is\napplication specific if specific shortcuts should be\nregistered or unregistered.\n"
},
{
"description": "Enables the is_registered command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:allow-is-registered",
"markdownDescription": "Enables the is_registered command without any pre-configured scope."
},
{
"description": "Enables the register command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:allow-register",
"markdownDescription": "Enables the register command without any pre-configured scope."
},
{
"description": "Enables the register_all command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:allow-register-all",
"markdownDescription": "Enables the register_all command without any pre-configured scope."
},
{
"description": "Enables the unregister command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:allow-unregister",
"markdownDescription": "Enables the unregister command without any pre-configured scope."
},
{
"description": "Enables the unregister_all command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:allow-unregister-all",
"markdownDescription": "Enables the unregister_all command without any pre-configured scope."
},
{
"description": "Denies the is_registered command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:deny-is-registered",
"markdownDescription": "Denies the is_registered command without any pre-configured scope."
},
{
"description": "Denies the register command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:deny-register",
"markdownDescription": "Denies the register command without any pre-configured scope."
},
{
"description": "Denies the register_all command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:deny-register-all",
"markdownDescription": "Denies the register_all command without any pre-configured scope."
},
{
"description": "Denies the unregister command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:deny-unregister",
"markdownDescription": "Denies the unregister command without any pre-configured scope."
},
{
"description": "Denies the unregister_all command without any pre-configured scope.",
"type": "string",
"const": "global-shortcut:deny-unregister-all",
"markdownDescription": "Denies the unregister_all command without any pre-configured scope."
},
{
"description": "This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality with a reasonable\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n\n#### This default permission set includes:\n\n- `allow-open`",
"type": "string",
Expand Down
30 changes: 30 additions & 0 deletions docs/design-docs/api-client-package-followup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# API Client Package Follow-up

The first extraction of `@spacebot/api-client` is intentionally light.

It creates a reusable package boundary for Spacedrive and other consumers, but it still re-exports generated types from `interface/src/api/`.

## Follow-up Work

### 1. Make `spacebot/interface` consume `@spacebot/api-client`

The Spacebot interface should stop importing from its local `src/api/*` modules directly and instead consume the shared package.

That will make the package the single source of truth for:

- OpenAPI client setup
- generated schema types
- friendly exported types
- manual SSE event types

### 2. Move OpenAPI generation output into the package

The long-term target is for `schema.d.ts` to be generated directly into `packages/api-client/` instead of `interface/src/api/`.

That will let the shared package fully own the generated contract and avoid the current re-export bridge.

## Why Deferred

These steps are worth doing, but they are not required for the first Spacedrive integration slice.

For now, the package boundary exists, and Spacedrive can start consuming it immediately.
Loading
Loading