jupyterlab_claude_code_extension 1.2.36 → 1.2.38
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 +1 -1
- package/lib/index.js +4 -4
- package/lib/widget.d.ts +4 -3
- package/lib/widget.js +4 -3
- package/package.json +1 -1
- package/src/index.ts +4 -4
- package/src/widget.ts +5 -4
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ Chat-panel extensions re-implement the agent loop and trail the real tool. This
|
|
|
26
26
|
## Features
|
|
27
27
|
|
|
28
28
|
- **Three-section side panel** - Favorites, Recent, and All projects, each scrolling independently
|
|
29
|
-
- **
|
|
29
|
+
- **Remote control indicator** - a green dot marks sessions that are actively under Claude's remote control, not merely a terminal that happens to be running
|
|
30
30
|
- **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
|
|
31
31
|
- **Favorites** - star projects you keep coming back to via the right-click menu
|
|
32
32
|
- **Remove** - drop a project's Claude history from the panel via the right-click menu; a confirmation dialog names the project and warns it removes the whole project and all its conversations before anything is touched, then the history folder is moved to the trash (it honours JupyterLab's "move files to trash" setting), not deleted permanently
|
package/lib/index.js
CHANGED
|
@@ -45,10 +45,10 @@ const plugin = {
|
|
|
45
45
|
labShell.add(widget, currentSidebar, { rank: 600 });
|
|
46
46
|
const apply = () => {
|
|
47
47
|
const mode = settings.get('presentationMode').composite;
|
|
48
|
-
// '
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
widget.setPresentationMode(mode === 'path' ? 'path' : '
|
|
48
|
+
// 'folder' was the previous name for this mode; any value other
|
|
49
|
+
// than 'path' is treated as 'name', so a saved 'folder' still maps
|
|
50
|
+
// to the name mode.
|
|
51
|
+
widget.setPresentationMode(mode === 'path' ? 'path' : 'name');
|
|
52
52
|
const limit = settings.get('recentLimit').composite;
|
|
53
53
|
if (typeof limit === 'number') {
|
|
54
54
|
widget.setRecentLimit(limit);
|
package/lib/widget.d.ts
CHANGED
|
@@ -3,11 +3,12 @@ import { IDefaultFileBrowser } from '@jupyterlab/filebrowser';
|
|
|
3
3
|
import { ITerminalTracker } from '@jupyterlab/terminal';
|
|
4
4
|
import { Widget } from '@lumino/widgets';
|
|
5
5
|
import { Message } from '@lumino/messaging';
|
|
6
|
-
export type PresentationMode = '
|
|
6
|
+
export type PresentationMode = 'name' | 'path';
|
|
7
7
|
export declare class ClaudeCodeSessionsWidget extends Widget {
|
|
8
8
|
constructor(app: JupyterFrontEnd, rootDir: string, terminalTracker?: ITerminalTracker | null, fileBrowser?: IDefaultFileBrowser | null);
|
|
9
9
|
refresh(): void;
|
|
10
|
-
/** Choose how rows are labelled: by
|
|
10
|
+
/** Choose how rows are labelled: by name (session name, initially the
|
|
11
|
+
* folder name), or by path. */
|
|
11
12
|
setPresentationMode(mode: PresentationMode): void;
|
|
12
13
|
/** Set how many rows the Recent section displays. */
|
|
13
14
|
setRecentLimit(n: number): void;
|
|
@@ -88,7 +89,7 @@ export declare class ClaudeCodeSessionsWidget extends Widget {
|
|
|
88
89
|
*/
|
|
89
90
|
private _showLaunchSpinner;
|
|
90
91
|
private _wireTerminalDisposal;
|
|
91
|
-
/** Apply the presentation-mode setting (basename collisions for
|
|
92
|
+
/** Apply the presentation-mode setting (basename collisions for name
|
|
92
93
|
* mode are resolved separately in ``_disambiguate``). */
|
|
93
94
|
private _displayName;
|
|
94
95
|
private _basename;
|
package/lib/widget.js
CHANGED
|
@@ -13,7 +13,7 @@ const BRANCH_WATCH_INTERVAL_MS = 2000;
|
|
|
13
13
|
const BRANCH_WATCH_MAX_ATTEMPTS = 90; // ~3 minutes
|
|
14
14
|
const DEFAULT_RECENT_LIMIT = 10;
|
|
15
15
|
const EXPANDED_STORAGE_KEY = 'jupyterlab_claude_code_extension:expanded';
|
|
16
|
-
const DEFAULT_PRESENTATION_MODE = '
|
|
16
|
+
const DEFAULT_PRESENTATION_MODE = 'name';
|
|
17
17
|
const SECTION_LABELS = {
|
|
18
18
|
favourites: 'Favorites',
|
|
19
19
|
recent: 'Recent',
|
|
@@ -114,7 +114,8 @@ export class ClaudeCodeSessionsWidget extends Widget {
|
|
|
114
114
|
this._setLoading(false);
|
|
115
115
|
});
|
|
116
116
|
}
|
|
117
|
-
/** Choose how rows are labelled: by
|
|
117
|
+
/** Choose how rows are labelled: by name (session name, initially the
|
|
118
|
+
* folder name), or by path. */
|
|
118
119
|
setPresentationMode(mode) {
|
|
119
120
|
if (this._presentationMode === mode) {
|
|
120
121
|
return;
|
|
@@ -738,7 +739,7 @@ export class ClaudeCodeSessionsWidget extends Widget {
|
|
|
738
739
|
});
|
|
739
740
|
}
|
|
740
741
|
// -------------------------------------------------------------- rendering
|
|
741
|
-
/** Apply the presentation-mode setting (basename collisions for
|
|
742
|
+
/** Apply the presentation-mode setting (basename collisions for name
|
|
742
743
|
* mode are resolved separately in ``_disambiguate``). */
|
|
743
744
|
_displayName(s) {
|
|
744
745
|
const folder = this._basename(s.project_path) || s.encoded_path;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jupyterlab_claude_code_extension",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.38",
|
|
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/index.ts
CHANGED
|
@@ -77,10 +77,10 @@ const plugin: JupyterFrontEndPlugin<void> = {
|
|
|
77
77
|
|
|
78
78
|
const apply = (): void => {
|
|
79
79
|
const mode = settings.get('presentationMode').composite as string;
|
|
80
|
-
// '
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
widget.setPresentationMode(mode === 'path' ? 'path' : '
|
|
80
|
+
// 'folder' was the previous name for this mode; any value other
|
|
81
|
+
// than 'path' is treated as 'name', so a saved 'folder' still maps
|
|
82
|
+
// to the name mode.
|
|
83
|
+
widget.setPresentationMode(mode === 'path' ? 'path' : 'name');
|
|
84
84
|
const limit = settings.get('recentLimit').composite as number;
|
|
85
85
|
if (typeof limit === 'number') {
|
|
86
86
|
widget.setRecentLimit(limit);
|
package/src/widget.ts
CHANGED
|
@@ -50,9 +50,9 @@ const EXPANDED_STORAGE_KEY = 'jupyterlab_claude_code_extension:expanded';
|
|
|
50
50
|
|
|
51
51
|
type SectionKey = 'favourites' | 'recent' | 'all';
|
|
52
52
|
|
|
53
|
-
export type PresentationMode = '
|
|
53
|
+
export type PresentationMode = 'name' | 'path';
|
|
54
54
|
|
|
55
|
-
const DEFAULT_PRESENTATION_MODE: PresentationMode = '
|
|
55
|
+
const DEFAULT_PRESENTATION_MODE: PresentationMode = 'name';
|
|
56
56
|
|
|
57
57
|
const SECTION_LABELS: Record<SectionKey, string> = {
|
|
58
58
|
favourites: 'Favorites',
|
|
@@ -155,7 +155,8 @@ export class ClaudeCodeSessionsWidget extends Widget {
|
|
|
155
155
|
});
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
/** Choose how rows are labelled: by
|
|
158
|
+
/** Choose how rows are labelled: by name (session name, initially the
|
|
159
|
+
* folder name), or by path. */
|
|
159
160
|
setPresentationMode(mode: PresentationMode): void {
|
|
160
161
|
if (this._presentationMode === mode) {
|
|
161
162
|
return;
|
|
@@ -869,7 +870,7 @@ export class ClaudeCodeSessionsWidget extends Widget {
|
|
|
869
870
|
|
|
870
871
|
// -------------------------------------------------------------- rendering
|
|
871
872
|
|
|
872
|
-
/** Apply the presentation-mode setting (basename collisions for
|
|
873
|
+
/** Apply the presentation-mode setting (basename collisions for name
|
|
873
874
|
* mode are resolved separately in ``_disambiguate``). */
|
|
874
875
|
private _displayName(s: ISession): string {
|
|
875
876
|
const folder = this._basename(s.project_path) || s.encoded_path;
|