jupyterlab_claude_code_extension 1.0.57 → 1.0.58

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/README.md CHANGED
@@ -18,6 +18,7 @@ Browse, resume, and manage your Claude Code sessions from a JupyterLab side pane
18
18
  - **Live indicator** - a green dot marks sessions that are currently running somewhere
19
19
  - **One-click resume** - click a row to jump back into that session in a terminal. If a terminal for the project is already open, it's reused instead of duplicated
20
20
  - **Favorites** - star projects you keep coming back to via the right-click menu
21
+ - **Remove** - drop a project's Claude history from the panel via the right-click menu; the history folder is moved to the trash (it honours JupyterLab's "move files to trash" setting), not deleted permanently
21
22
  - **Search** - fuzzy filter at the top of the panel
22
23
  - **Presentation modes** - label rows by session name, folder name, or path relative to the JupyterLab root
23
24
  - **Hover tooltip** with project path, last activity, message count, branch, and session id
package/lib/widget.js CHANGED
@@ -85,9 +85,14 @@ export class ClaudeCodeSessionsWidget extends Widget {
85
85
  refresh() {
86
86
  this._showLoading();
87
87
  this._setRefreshSpinning(true);
88
- this._fetch()
89
- .catch(err => this._showError(err))
90
- .finally(() => this._setRefreshSpinning(false));
88
+ // `_fetch` is filesystem-fast, so without a floor the refresh icon would
89
+ // spin for a single frame and read as "nothing happened". Hold the
90
+ // spinner for at least ~500 ms so the click visibly registers.
91
+ const minSpin = new Promise(resolve => window.setTimeout(resolve, 500));
92
+ Promise.all([
93
+ this._fetch().catch(err => this._showError(err)),
94
+ minSpin
95
+ ]).finally(() => this._setRefreshSpinning(false));
91
96
  }
92
97
  /** Choose how rows are labelled: by session name, folder name, or path. */
93
98
  setPresentationMode(mode) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jupyterlab_claude_code_extension",
3
- "version": "1.0.57",
3
+ "version": "1.0.58",
4
4
  "description": "Browse, resume, and manage your Claude Code CLI sessions from a JupyterLab side panel. One click reactivates the right terminal - no duplicate tabs, live remote-control indicator, and favourites for the projects you keep coming back to.",
5
5
  "keywords": [
6
6
  "jupyter",
package/src/widget.ts CHANGED
@@ -113,9 +113,16 @@ export class ClaudeCodeSessionsWidget extends Widget {
113
113
  refresh(): void {
114
114
  this._showLoading();
115
115
  this._setRefreshSpinning(true);
116
- this._fetch()
117
- .catch(err => this._showError(err))
118
- .finally(() => this._setRefreshSpinning(false));
116
+ // `_fetch` is filesystem-fast, so without a floor the refresh icon would
117
+ // spin for a single frame and read as "nothing happened". Hold the
118
+ // spinner for at least ~500 ms so the click visibly registers.
119
+ const minSpin = new Promise<void>(resolve =>
120
+ window.setTimeout(resolve, 500)
121
+ );
122
+ Promise.all([
123
+ this._fetch().catch(err => this._showError(err)),
124
+ minSpin
125
+ ]).finally(() => this._setRefreshSpinning(false));
119
126
  }
120
127
 
121
128
  /** Choose how rows are labelled: by session name, folder name, or path. */