@notebook-intelligence/notebook-intelligence 4.1.2 → 4.2.1
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/lib/api.js +8 -1
- package/lib/chat-sidebar.js +6 -1
- package/lib/components/settings-panel.js +1 -1
- package/lib/index.js +4 -2
- package/lib/tokens.d.ts +4 -0
- package/lib/tokens.js +5 -0
- package/package.json +1 -1
- package/src/api.ts +11 -1
- package/src/chat-sidebar.tsx +17 -1
- package/src/components/settings-panel.tsx +1 -1
- package/src/index.ts +4 -2
- package/src/tokens.ts +5 -0
- package/style/base.css +4 -0
package/lib/api.js
CHANGED
|
@@ -5,7 +5,7 @@ import { requestAPI } from './handler';
|
|
|
5
5
|
import { URLExt } from '@jupyterlab/coreutils';
|
|
6
6
|
import { UUID } from '@lumino/coreutils';
|
|
7
7
|
import { Signal } from '@lumino/signaling';
|
|
8
|
-
import { GITHUB_COPILOT_PROVIDER_ID, RequestDataType, BackendMessageType } from './tokens';
|
|
8
|
+
import { GITHUB_COPILOT_PROVIDER_ID, RequestDataType, BackendMessageType, AssistantMode } from './tokens';
|
|
9
9
|
export var GitHubCopilotLoginStatus;
|
|
10
10
|
(function (GitHubCopilotLoginStatus) {
|
|
11
11
|
GitHubCopilotLoginStatus["NotLoggedIn"] = "NOT_LOGGED_IN";
|
|
@@ -360,6 +360,13 @@ class NBIAPI {
|
|
|
360
360
|
}));
|
|
361
361
|
}
|
|
362
362
|
static async emitTelemetryEvent(event) {
|
|
363
|
+
const assistantMode = this.config.isInClaudeCodeMode
|
|
364
|
+
? AssistantMode.Claude
|
|
365
|
+
: AssistantMode.Default;
|
|
366
|
+
event.data = {
|
|
367
|
+
...(event.data || {}),
|
|
368
|
+
assistantMode
|
|
369
|
+
};
|
|
363
370
|
return new Promise((resolve, reject) => {
|
|
364
371
|
requestAPI('emit-telemetry-event', {
|
|
365
372
|
method: 'POST',
|
package/lib/chat-sidebar.js
CHANGED
|
@@ -327,6 +327,11 @@ function ChatResponse(props) {
|
|
|
327
327
|
runCommand('notebook-intelligence:chat-user-input', item.content.confirmArgs);
|
|
328
328
|
} },
|
|
329
329
|
React.createElement("div", { className: "jp-Dialog-buttonLabel" }, item.content.confirmLabel)),
|
|
330
|
+
item.content.confirmSessionArgs ? (React.createElement("button", { className: "jp-Dialog-button jp-mod-accept jp-mod-styled", onClick: () => {
|
|
331
|
+
markFormConfirmed(item.id);
|
|
332
|
+
runCommand('notebook-intelligence:chat-user-input', item.content.confirmSessionArgs);
|
|
333
|
+
} },
|
|
334
|
+
React.createElement("div", { className: "jp-Dialog-buttonLabel" }, item.content.confirmSessionLabel))) : null,
|
|
330
335
|
React.createElement("button", { className: "jp-Dialog-button jp-mod-reject jp-mod-styled", onClick: () => {
|
|
331
336
|
markFormCanceled(item.id);
|
|
332
337
|
runCommand('notebook-intelligence:chat-user-input', item.content.cancelArgs);
|
|
@@ -1319,7 +1324,7 @@ function SidebarComponent(props) {
|
|
|
1319
1324
|
"Chat is disabled as you don't have a model configured.",
|
|
1320
1325
|
React.createElement("button", { className: "jp-Dialog-button jp-mod-accept jp-mod-styled", onClick: handleConfigurationClick },
|
|
1321
1326
|
React.createElement("div", { className: "jp-Dialog-buttonLabel" }, "Configure models")))),
|
|
1322
|
-
ghLoginRequired && (React.createElement("div", { className: "sidebar-login-info" },
|
|
1327
|
+
!NBIAPI.config.isInClaudeCodeMode && ghLoginRequired && (React.createElement("div", { className: "sidebar-login-info" },
|
|
1323
1328
|
React.createElement("div", null, "You are not logged in to GitHub Copilot. Please login now to activate chat."),
|
|
1324
1329
|
React.createElement("div", { className: "sidebar-login-buttons" },
|
|
1325
1330
|
React.createElement("button", { className: "jp-Dialog-button jp-mod-accept jp-mod-styled", onClick: handleLoginClick },
|
|
@@ -431,7 +431,7 @@ function SettingsPanelComponentClaude(props) {
|
|
|
431
431
|
settingSources,
|
|
432
432
|
tools
|
|
433
433
|
]);
|
|
434
|
-
return (React.createElement("div", { className: "config-dialog" },
|
|
434
|
+
return (React.createElement("div", { className: "config-dialog claude-mode-config-dialog" },
|
|
435
435
|
React.createElement("div", { className: "config-dialog-body" },
|
|
436
436
|
React.createElement("div", { className: "model-config-section" },
|
|
437
437
|
React.createElement("div", { className: "model-config-section-header" }, "Enable Claude mode"),
|
package/lib/index.js
CHANGED
|
@@ -760,11 +760,12 @@ const plugin = {
|
|
|
760
760
|
const messageCheckTimeout = 5000;
|
|
761
761
|
const messageCheckInterval = 1000;
|
|
762
762
|
let output = '';
|
|
763
|
-
|
|
763
|
+
const messageReceivedHandler = (sender, message) => {
|
|
764
764
|
const content = stripAnsi(message.content.join(''));
|
|
765
765
|
output += content;
|
|
766
766
|
lastMessageReceivedTime = Date.now();
|
|
767
|
-
}
|
|
767
|
+
};
|
|
768
|
+
session.messageReceived.connect(messageReceivedHandler);
|
|
768
769
|
session.send({
|
|
769
770
|
type: 'stdin',
|
|
770
771
|
content: [command + '\n'] // Add newline to execute the command
|
|
@@ -774,6 +775,7 @@ const plugin = {
|
|
|
774
775
|
lastMessageCheckInterval = setInterval(() => {
|
|
775
776
|
if (Date.now() - lastMessageReceivedTime > messageCheckTimeout) {
|
|
776
777
|
clearInterval(lastMessageCheckInterval);
|
|
778
|
+
session.messageReceived.disconnect(messageReceivedHandler);
|
|
777
779
|
resolve(`Command executed in Jupyter terminal, output: ${output}`);
|
|
778
780
|
}
|
|
779
781
|
}, messageCheckInterval);
|
package/lib/tokens.d.ts
CHANGED
|
@@ -96,6 +96,10 @@ export declare enum BuiltinToolsetType {
|
|
|
96
96
|
}
|
|
97
97
|
export declare const GITHUB_COPILOT_PROVIDER_ID = "github-copilot";
|
|
98
98
|
export declare const CLAUDE_CODE_CHAT_PARTICIPANT_ID = "claude-code";
|
|
99
|
+
export declare enum AssistantMode {
|
|
100
|
+
Default = "default",
|
|
101
|
+
Claude = "claude"
|
|
102
|
+
}
|
|
99
103
|
export declare enum TelemetryEventType {
|
|
100
104
|
InlineCompletionRequest = "inline-completion-request",
|
|
101
105
|
ExplainThisRequest = "explain-this-request",
|
package/lib/tokens.js
CHANGED
|
@@ -61,6 +61,11 @@ export var BuiltinToolsetType;
|
|
|
61
61
|
})(BuiltinToolsetType || (BuiltinToolsetType = {}));
|
|
62
62
|
export const GITHUB_COPILOT_PROVIDER_ID = 'github-copilot';
|
|
63
63
|
export const CLAUDE_CODE_CHAT_PARTICIPANT_ID = 'claude-code';
|
|
64
|
+
export var AssistantMode;
|
|
65
|
+
(function (AssistantMode) {
|
|
66
|
+
AssistantMode["Default"] = "default";
|
|
67
|
+
AssistantMode["Claude"] = "claude";
|
|
68
|
+
})(AssistantMode || (AssistantMode = {}));
|
|
64
69
|
export var TelemetryEventType;
|
|
65
70
|
(function (TelemetryEventType) {
|
|
66
71
|
TelemetryEventType["InlineCompletionRequest"] = "inline-completion-request";
|
package/package.json
CHANGED
package/src/api.ts
CHANGED
|
@@ -13,7 +13,8 @@ import {
|
|
|
13
13
|
ITelemetryEvent,
|
|
14
14
|
IToolSelections,
|
|
15
15
|
RequestDataType,
|
|
16
|
-
BackendMessageType
|
|
16
|
+
BackendMessageType,
|
|
17
|
+
AssistantMode
|
|
17
18
|
} from './tokens';
|
|
18
19
|
|
|
19
20
|
export enum GitHubCopilotLoginStatus {
|
|
@@ -497,6 +498,15 @@ export class NBIAPI {
|
|
|
497
498
|
}
|
|
498
499
|
|
|
499
500
|
static async emitTelemetryEvent(event: ITelemetryEvent): Promise<void> {
|
|
501
|
+
const assistantMode = this.config.isInClaudeCodeMode
|
|
502
|
+
? AssistantMode.Claude
|
|
503
|
+
: AssistantMode.Default;
|
|
504
|
+
|
|
505
|
+
event.data = {
|
|
506
|
+
...(event.data || {}),
|
|
507
|
+
assistantMode
|
|
508
|
+
};
|
|
509
|
+
|
|
500
510
|
return new Promise<void>((resolve, reject) => {
|
|
501
511
|
requestAPI<any>('emit-telemetry-event', {
|
|
502
512
|
method: 'POST',
|
package/src/chat-sidebar.tsx
CHANGED
|
@@ -613,6 +613,22 @@ function ChatResponse(props: any) {
|
|
|
613
613
|
{item.content.confirmLabel}
|
|
614
614
|
</div>
|
|
615
615
|
</button>
|
|
616
|
+
{item.content.confirmSessionArgs ? (
|
|
617
|
+
<button
|
|
618
|
+
className="jp-Dialog-button jp-mod-accept jp-mod-styled"
|
|
619
|
+
onClick={() => {
|
|
620
|
+
markFormConfirmed(item.id);
|
|
621
|
+
runCommand(
|
|
622
|
+
'notebook-intelligence:chat-user-input',
|
|
623
|
+
item.content.confirmSessionArgs
|
|
624
|
+
);
|
|
625
|
+
}}
|
|
626
|
+
>
|
|
627
|
+
<div className="jp-Dialog-buttonLabel">
|
|
628
|
+
{item.content.confirmSessionLabel}
|
|
629
|
+
</div>
|
|
630
|
+
</button>
|
|
631
|
+
) : null}
|
|
616
632
|
<button
|
|
617
633
|
className="jp-Dialog-button jp-mod-reject jp-mod-styled"
|
|
618
634
|
onClick={() => {
|
|
@@ -1937,7 +1953,7 @@ function SidebarComponent(props: any) {
|
|
|
1937
1953
|
</button>
|
|
1938
1954
|
</div>
|
|
1939
1955
|
)}
|
|
1940
|
-
{ghLoginRequired && (
|
|
1956
|
+
{!NBIAPI.config.isInClaudeCodeMode && ghLoginRequired && (
|
|
1941
1957
|
<div className="sidebar-login-info">
|
|
1942
1958
|
<div>
|
|
1943
1959
|
You are not logged in to GitHub Copilot. Please login now to
|
|
@@ -877,7 +877,7 @@ function SettingsPanelComponentClaude(props: any) {
|
|
|
877
877
|
]);
|
|
878
878
|
|
|
879
879
|
return (
|
|
880
|
-
<div className="config-dialog">
|
|
880
|
+
<div className="config-dialog claude-mode-config-dialog">
|
|
881
881
|
<div className="config-dialog-body">
|
|
882
882
|
<div className="model-config-section">
|
|
883
883
|
<div className="model-config-section-header">Enable Claude mode</div>
|
package/src/index.ts
CHANGED
|
@@ -1006,11 +1006,12 @@ const plugin: JupyterFrontEndPlugin<INotebookIntelligence> = {
|
|
|
1006
1006
|
const messageCheckTimeout = 5000;
|
|
1007
1007
|
const messageCheckInterval = 1000;
|
|
1008
1008
|
let output = '';
|
|
1009
|
-
|
|
1009
|
+
const messageReceivedHandler = (sender: any, message: any) => {
|
|
1010
1010
|
const content = stripAnsi(message.content.join(''));
|
|
1011
1011
|
output += content;
|
|
1012
1012
|
lastMessageReceivedTime = Date.now();
|
|
1013
|
-
}
|
|
1013
|
+
};
|
|
1014
|
+
session.messageReceived.connect(messageReceivedHandler);
|
|
1014
1015
|
|
|
1015
1016
|
session.send({
|
|
1016
1017
|
type: 'stdin',
|
|
@@ -1022,6 +1023,7 @@ const plugin: JupyterFrontEndPlugin<INotebookIntelligence> = {
|
|
|
1022
1023
|
lastMessageCheckInterval = setInterval(() => {
|
|
1023
1024
|
if (Date.now() - lastMessageReceivedTime > messageCheckTimeout) {
|
|
1024
1025
|
clearInterval(lastMessageCheckInterval);
|
|
1026
|
+
session.messageReceived.disconnect(messageReceivedHandler);
|
|
1025
1027
|
resolve(
|
|
1026
1028
|
`Command executed in Jupyter terminal, output: ${output}`
|
|
1027
1029
|
);
|
package/src/tokens.ts
CHANGED
|
@@ -112,6 +112,11 @@ export enum BuiltinToolsetType {
|
|
|
112
112
|
export const GITHUB_COPILOT_PROVIDER_ID = 'github-copilot';
|
|
113
113
|
export const CLAUDE_CODE_CHAT_PARTICIPANT_ID = 'claude-code';
|
|
114
114
|
|
|
115
|
+
export enum AssistantMode {
|
|
116
|
+
Default = 'default',
|
|
117
|
+
Claude = 'claude'
|
|
118
|
+
}
|
|
119
|
+
|
|
115
120
|
export enum TelemetryEventType {
|
|
116
121
|
InlineCompletionRequest = 'inline-completion-request',
|
|
117
122
|
ExplainThisRequest = 'explain-this-request',
|