@bibobonking/opensol 3.0.3 → 3.1.0

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.
Files changed (71) hide show
  1. package/.github/workflows/build.yml +60 -8
  2. package/CHANGELOG.md +18 -0
  3. package/desktop/README.md +39 -0
  4. package/desktop/loading/index.html +36 -0
  5. package/desktop/src-tauri/Cargo.lock +4301 -0
  6. package/desktop/src-tauri/Cargo.toml +23 -0
  7. package/desktop/src-tauri/binaries/.gitkeep +0 -0
  8. package/desktop/src-tauri/build.rs +3 -0
  9. package/desktop/src-tauri/capabilities/default.json +7 -0
  10. package/desktop/src-tauri/icons/128x128.png +0 -0
  11. package/desktop/src-tauri/icons/128x128@2x.png +0 -0
  12. package/desktop/src-tauri/icons/32x32.png +0 -0
  13. package/desktop/src-tauri/icons/64x64.png +0 -0
  14. package/desktop/src-tauri/icons/Square107x107Logo.png +0 -0
  15. package/desktop/src-tauri/icons/Square142x142Logo.png +0 -0
  16. package/desktop/src-tauri/icons/Square150x150Logo.png +0 -0
  17. package/desktop/src-tauri/icons/Square284x284Logo.png +0 -0
  18. package/desktop/src-tauri/icons/Square30x30Logo.png +0 -0
  19. package/desktop/src-tauri/icons/Square310x310Logo.png +0 -0
  20. package/desktop/src-tauri/icons/Square44x44Logo.png +0 -0
  21. package/desktop/src-tauri/icons/Square71x71Logo.png +0 -0
  22. package/desktop/src-tauri/icons/Square89x89Logo.png +0 -0
  23. package/desktop/src-tauri/icons/StoreLogo.png +0 -0
  24. package/desktop/src-tauri/icons/icon.icns +0 -0
  25. package/desktop/src-tauri/icons/icon.ico +0 -0
  26. package/desktop/src-tauri/icons/icon.png +0 -0
  27. package/desktop/src-tauri/src/lib.rs +210 -0
  28. package/desktop/src-tauri/src/main.rs +6 -0
  29. package/desktop/src-tauri/tauri.conf.json +48 -0
  30. package/dist/assets/index-DdI1_iPD.css +1 -0
  31. package/dist/assets/index-egG5Bgfo.js +312 -0
  32. package/dist/index.html +2 -2
  33. package/package.json +2 -1
  34. package/server/daemon.mjs +64 -2
  35. package/server/lib/mcp.mjs +532 -0
  36. package/server/lib/mcp.test.mjs +46 -0
  37. package/server/lib/store.mjs +22 -0
  38. package/server/lib/tools.mjs +59 -1
  39. package/src/agent/tools.ts +6 -5
  40. package/src/components/Composer.tsx +22 -38
  41. package/src/components/DiffView.tsx +98 -0
  42. package/src/components/McpTab.tsx +337 -0
  43. package/src/components/MessageItem.tsx +62 -13
  44. package/src/components/ModelDeck.tsx +652 -0
  45. package/src/components/SessionsTab.tsx +206 -0
  46. package/src/components/SettingsModal.tsx +106 -69
  47. package/src/components/Sidebar.tsx +78 -24
  48. package/src/components/ToolCallCard.tsx +29 -7
  49. package/src/components/WorkspacePanel.tsx +16 -1
  50. package/src/core/kernel.ts +2 -0
  51. package/src/core/mcp-tools.ts +63 -0
  52. package/src/core/plugins/tools/fs.ts +24 -3
  53. package/src/core/services/agent-loop.ts +3 -1
  54. package/src/core/services/approval.ts +2 -1
  55. package/src/core/services/titles.ts +135 -0
  56. package/src/core/services/tools.ts +11 -8
  57. package/src/core/types.ts +4 -0
  58. package/src/index.css +97 -1
  59. package/src/lib/daemon.ts +29 -0
  60. package/src/lib/diff.ts +62 -0
  61. package/src/lib/permissions.ts +6 -6
  62. package/src/store/chats.ts +9 -1
  63. package/src/store/mcp.ts +67 -0
  64. package/src/store/settings.ts +9 -6
  65. package/src/store/ui.ts +13 -0
  66. package/src/store/workspace.ts +26 -0
  67. package/src/types.ts +51 -2
  68. package/tsconfig.tsbuildinfo +1 -1
  69. package/dist/assets/index-BmN7pBji.css +0 -1
  70. package/dist/assets/index-DgNDjkOz.js +0 -301
  71. package/src/components/ModelPicker.tsx +0 -487
@@ -1,25 +1,77 @@
1
- name: build
1
+ name: OpenSol Desktop
2
2
 
3
3
  on:
4
- push:
5
- branches: [main]
6
4
  workflow_dispatch:
5
+ push:
6
+ tags: ['v*']
7
7
 
8
8
  jobs:
9
9
  build:
10
- runs-on: ubuntu-latest
10
+ strategy:
11
+ fail-fast: false
12
+ matrix:
13
+ include:
14
+ - os: ubuntu-22.04
15
+ label: linux-x64
16
+ - os: windows-latest
17
+ label: windows-x64
18
+ - os: macos-latest
19
+ label: macos-arm64
20
+ - os: macos-13
21
+ label: macos-x64
22
+ runs-on: ${{ matrix.os }}
11
23
  steps:
12
24
  - uses: actions/checkout@v4
13
25
  - uses: actions/setup-node@v4
14
26
  with:
15
27
  node-version: 22
16
28
  cache: npm
29
+ - uses: dtolnay/rust-toolchain@stable
30
+ - uses: swatinem/rust-cache@v2
31
+ with:
32
+ workspaces: desktop/src-tauri
33
+ - name: Linux system libraries
34
+ if: runner.os == 'Linux'
35
+ run: |
36
+ sudo apt-get update
37
+ sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev libssl-dev patchelf
17
38
  - run: npm ci
18
- - run: npm run typecheck
19
- - run: npm test
20
39
  - run: npm run build
21
- - uses: actions/upload-artifact@v4
40
+ - name: Upload web build (dist)
41
+ if: matrix.label == 'linux-x64'
42
+ uses: actions/upload-artifact@v4
22
43
  with:
23
- name: dist
44
+ name: opensol-web-dist
24
45
  path: dist
25
46
  if-no-files-found: error
47
+ - name: Bundle the Node.js sidecar
48
+ run: node desktop/scripts/prepare-sidecar.mjs
49
+ - name: Build installers
50
+ working-directory: desktop
51
+ run: npx --yes @tauri-apps/cli@2 build
52
+ - uses: actions/upload-artifact@v4
53
+ with:
54
+ name: opensol-desktop-${{ matrix.label }}
55
+ path: |
56
+ desktop/src-tauri/target/release/bundle/deb/*.deb
57
+ desktop/src-tauri/target/release/bundle/appimage/*.AppImage
58
+ desktop/src-tauri/target/release/bundle/rpm/*.rpm
59
+ desktop/src-tauri/target/release/bundle/msi/*.msi
60
+ desktop/src-tauri/target/release/bundle/nsis/*.exe
61
+ desktop/src-tauri/target/release/bundle/dmg/*.dmg
62
+ if-no-files-found: error
63
+
64
+ release:
65
+ if: startsWith(github.ref, 'refs/tags/v')
66
+ needs: build
67
+ runs-on: ubuntu-22.04
68
+ permissions:
69
+ contents: write
70
+ steps:
71
+ - uses: actions/download-artifact@v4
72
+ with:
73
+ path: dist-desktop
74
+ merge-multiple: true
75
+ - uses: softprops/action-gh-release@v2
76
+ with:
77
+ files: dist-desktop/*
package/CHANGELOG.md ADDED
@@ -0,0 +1,18 @@
1
+ # Changelog
2
+
3
+ ## 3.1.0
4
+
5
+ **New**
6
+ - **MCP connect** — Settings → MCP (and the sidebar). Add local (stdio) or remote (Streamable HTTP) Model Context Protocol servers; their tools reach the agent as `mcp__<server>__<tool>`. Per-server approval (ask / auto), per-tool switches, secrets masked in the UI. The daemon owns every connection (`server/lib/mcp.mjs`).
7
+ - **Remove workspace** — trash button on each workspace in the sidebar (removes it from the list; the folder stays on disk).
8
+ - **Sessions tab** — new tab in the workspace panel: sessions of the open workspace (or all), with rename, AI title and delete. New sessions record the workspace they started in.
9
+ - **AI session titles** — after the first answer the model names the session (Settings → General turns it off). "Name with AI" in the session menu regenerates a title; names you type are never overwritten.
10
+ - **Edit stats** — file edits show `+added −removed` and where the change starts (`L42:7`), with a mini diff in the tool card; the task header and the Undo bar show the turn total.
11
+ - **OpenSol Desktop** — Tauri app (`desktop/`) using the OS webview: WebKitGTK (Linux), WebView2 (Windows 10/11), WKWebView (macOS). The web version is unchanged. See `desktop/README.md`.
12
+
13
+ **Changed**
14
+ - Thoughts are closed by default, also while the model is still thinking.
15
+ - New **Model Deck** replaces the dropdown picker: centered overlay, provider rail, context bars, and a draggable effort throttle; the composer shows live effort bars. `Ctrl/⌘ M` opens it.
16
+ - Redesigned Settings: numbered rail with a sliding pill, large section headers, card layout.
17
+ - More motion: spring knob, staggered rows, blur-in titles, diff rows, tool rows. All of it respects `prefers-reduced-motion`.
18
+ - Daemon now persists `chatFontSize`, `workDetail` and `autoCollapseWork` (they were dropped before).
@@ -0,0 +1,39 @@
1
+ # OpenSol Desktop
2
+
3
+ OpenSol Desktop is the same OpenSol app in a native window. It uses each operating
4
+ system's own webview instead of bundling a browser:
5
+
6
+ | OS | Webview | Installer |
7
+ |---|---|---|
8
+ | Linux | WebKitGTK 4.1 | `.deb`, `.AppImage` |
9
+ | Windows 10 / 11 | Microsoft WebView2 (installed on demand on Windows 10) | `.exe` (NSIS), `.msi` |
10
+ | macOS 11+ | WKWebView | `.dmg` (Apple Silicon and Intel) |
11
+
12
+ The web version (`npm start`, `dist/`) is unchanged and still works. Desktop and web share the
13
+ same data folder (`~/.opensol`), so keys, chats and settings are the same in both.
14
+
15
+ ## How it works
16
+
17
+ 1. The window opens a small loading page.
18
+ 2. If an OpenSol daemon of the same version already runs on `127.0.0.1:4174` it is reused.
19
+ Otherwise the app starts its own daemon with a bundled Node.js (`opensol-node`) on a free port.
20
+ 3. The window navigates to the daemon. Links to other sites open in your default browser.
21
+ 4. When you close the window, a daemon that the app started is stopped.
22
+
23
+ ## Build it yourself
24
+
25
+ Requirements: Node 22+, Rust (stable), and the Tauri prerequisites for your OS
26
+ (<https://tauri.app/start/prerequisites/>). From the repository root:
27
+
28
+ ```bash
29
+ npm ci
30
+ npm run build # the web app → dist/
31
+ node desktop/scripts/prepare-sidecar.mjs # copies this machine's Node as the sidecar
32
+ cd desktop && npx @tauri-apps/cli@2 build
33
+ ```
34
+
35
+ Installers appear in `desktop/src-tauri/target/release/bundle/`. Each OS has to be built on that
36
+ OS (Windows installers on Windows, macOS on macOS); `.github/workflows/desktop.yml` does all four
37
+ on GitHub Actions when you push a `v*` tag or run it manually.
38
+
39
+ For a quick run from source: `cd desktop/src-tauri && cargo run` (needs `dist/` built).
@@ -0,0 +1,36 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>OpenSol</title>
7
+ <style>
8
+ :root { color-scheme: light dark; --bg:#f8f8f6; --ink:#171715; --muted:#62625d; --accent:#d97706; }
9
+ @media (prefers-color-scheme: dark) { :root { --bg:#0f0f0e; --ink:#edede9; --muted:#a0a099; --accent:#f59e0b; } }
10
+ html,body{height:100%;margin:0;background:var(--bg);color:var(--ink);font:14px system-ui,-apple-system,"Segoe UI",sans-serif}
11
+ body{display:grid;place-items:center}
12
+ .box{text-align:center;animation:in .6s cubic-bezier(.16,1,.3,1) both}
13
+ .orb{width:46px;height:46px;margin:0 auto 18px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff7,transparent 40%),var(--accent);animation:pulse 1.6s ease-in-out infinite}
14
+ h1{margin:0;font-size:20px;letter-spacing:-.03em}
15
+ p{margin:8px 0 0;color:var(--muted);max-width:360px;line-height:1.5}
16
+ .err{color:#cf3830;white-space:pre-wrap}
17
+ @keyframes pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.86);opacity:.7}}
18
+ @keyframes in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
19
+ </style>
20
+ </head>
21
+ <body>
22
+ <div class="box">
23
+ <div class="orb" id="orb"></div>
24
+ <h1>OpenSol</h1>
25
+ <p id="msg">Starting the local daemon…</p>
26
+ </div>
27
+ <script>
28
+ window.__opensolError = function (message) {
29
+ document.getElementById('orb').style.animation = 'none';
30
+ var el = document.getElementById('msg');
31
+ el.className = 'err';
32
+ el.textContent = message;
33
+ };
34
+ </script>
35
+ </body>
36
+ </html>