jupyterlab-codex-sidebar 0.1.4 → 0.1.6
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/.claude/settings.local.json +9 -0
- package/.github/workflows/unit-tests.yml +27 -0
- package/.jupyterlab-playwright.log +0 -0
- package/README.md +83 -9
- package/docs/images/codex-sidebar-screenshot.png +0 -0
- package/jupyterlab_codex/handlers.py +938 -297
- package/jupyterlab_codex/labextension/package.json +13 -3
- package/jupyterlab_codex/labextension/static/525.224526d045c727069de6.js +2 -0
- package/jupyterlab_codex/labextension/static/737.e7de3ad9dd6ded798340.js +1 -0
- package/jupyterlab_codex/labextension/static/remoteEntry.6ef5e7167763a316c000.js +1 -0
- package/jupyterlab_codex/protocol.py +297 -0
- package/jupyterlab_codex/runner.py +58 -15
- package/jupyterlab_codex/sessions.py +582 -97
- package/lib/codexChat.d.ts +13 -0
- package/lib/codexChat.js +2506 -0
- package/lib/codexChat.js.map +1 -0
- package/lib/codexChatAttachmentDedup.d.ts +10 -0
- package/lib/codexChatAttachmentDedup.js +35 -0
- package/lib/codexChatAttachmentDedup.js.map +1 -0
- package/lib/codexChatAttachmentLimit.d.ts +18 -0
- package/lib/codexChatAttachmentLimit.js +50 -0
- package/lib/codexChatAttachmentLimit.js.map +1 -0
- package/lib/codexChatAttachmentState.d.ts +15 -0
- package/lib/codexChatAttachmentState.js +16 -0
- package/lib/codexChatAttachmentState.js.map +1 -0
- package/lib/codexChatDocumentUtils.d.ts +70 -0
- package/lib/codexChatDocumentUtils.js +506 -0
- package/lib/codexChatDocumentUtils.js.map +1 -0
- package/lib/codexChatFormatting.d.ts +11 -0
- package/lib/codexChatFormatting.js +83 -0
- package/lib/codexChatFormatting.js.map +1 -0
- package/lib/codexChatNotice.d.ts +3 -0
- package/lib/codexChatNotice.js +74 -0
- package/lib/codexChatNotice.js.map +1 -0
- package/lib/codexChatPersistence.d.ts +35 -0
- package/lib/codexChatPersistence.js +158 -0
- package/lib/codexChatPersistence.js.map +1 -0
- package/lib/codexChatPrimitives.d.ts +44 -0
- package/lib/codexChatPrimitives.js +156 -0
- package/lib/codexChatPrimitives.js.map +1 -0
- package/lib/codexChatRender.d.ts +24 -0
- package/lib/codexChatRender.js +293 -0
- package/lib/codexChatRender.js.map +1 -0
- package/lib/codexChatSessionFactory.d.ts +15 -0
- package/lib/codexChatSessionFactory.js +45 -0
- package/lib/codexChatSessionFactory.js.map +1 -0
- package/lib/codexChatSessionKey.d.ts +3 -0
- package/lib/codexChatSessionKey.js +14 -0
- package/lib/codexChatSessionKey.js.map +1 -0
- package/lib/codexChatStorage.d.ts +4 -0
- package/lib/codexChatStorage.js +37 -0
- package/lib/codexChatStorage.js.map +1 -0
- package/lib/codexSessionResolver.d.ts +12 -0
- package/lib/codexSessionResolver.js +38 -0
- package/lib/codexSessionResolver.js.map +1 -0
- package/lib/handlers/activitySummarizer.d.ts +15 -0
- package/lib/handlers/activitySummarizer.js +327 -0
- package/lib/handlers/activitySummarizer.js.map +1 -0
- package/lib/handlers/codexMessageTypes.d.ts +30 -0
- package/lib/handlers/codexMessageTypes.js +2 -0
- package/lib/handlers/codexMessageTypes.js.map +1 -0
- package/lib/handlers/codexMessageUtils.d.ts +46 -0
- package/lib/handlers/codexMessageUtils.js +144 -0
- package/lib/handlers/codexMessageUtils.js.map +1 -0
- package/lib/handlers/handleCodexSocketMessage.d.ts +107 -0
- package/lib/handlers/handleCodexSocketMessage.js +78 -0
- package/lib/handlers/handleCodexSocketMessage.js.map +1 -0
- package/lib/handlers/sessionSyncHandler.d.ts +34 -0
- package/lib/handlers/sessionSyncHandler.js +181 -0
- package/lib/handlers/sessionSyncHandler.js.map +1 -0
- package/lib/hooks/useCodexSocket.d.ts +15 -0
- package/lib/hooks/useCodexSocket.js +84 -0
- package/lib/hooks/useCodexSocket.js.map +1 -0
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/panel.d.ts +1 -11
- package/lib/panel.js +1 -2815
- package/lib/panel.js.map +1 -1
- package/lib/protocol.d.ts +235 -0
- package/lib/protocol.js +278 -0
- package/lib/protocol.js.map +1 -0
- package/package.json +13 -3
- package/playwright.config.cjs +27 -0
- package/playwright.unit.config.cjs +19 -0
- package/pyproject.toml +1 -1
- package/release.sh +52 -14
- package/scripts/run_playwright_e2e.sh +96 -0
- package/scripts/run_playwright_freeze_repro.sh +58 -0
- package/scripts/run_playwright_queue_repro.sh +60 -0
- package/scripts/run_playwright_repro.sh +55 -0
- package/src/codexChat.tsx +3914 -0
- package/src/codexChatAttachmentDedup.ts +47 -0
- package/src/codexChatAttachmentLimit.ts +81 -0
- package/src/codexChatAttachmentState.ts +37 -0
- package/src/codexChatDocumentUtils.ts +644 -0
- package/src/codexChatFormatting.ts +94 -0
- package/src/codexChatNotice.ts +95 -0
- package/src/codexChatPersistence.ts +191 -0
- package/src/codexChatPrimitives.tsx +446 -0
- package/src/codexChatRender.tsx +376 -0
- package/src/codexChatSessionFactory.ts +79 -0
- package/src/codexChatSessionKey.ts +16 -0
- package/src/codexChatStorage.ts +36 -0
- package/src/codexSessionResolver.ts +56 -0
- package/src/handlers/activitySummarizer.ts +369 -0
- package/src/handlers/codexMessageTypes.ts +34 -0
- package/src/handlers/codexMessageUtils.ts +217 -0
- package/src/handlers/handleCodexSocketMessage.ts +204 -0
- package/src/handlers/sessionSyncHandler.ts +308 -0
- package/src/hooks/useCodexSocket.ts +109 -0
- package/src/index.ts +1 -1
- package/src/panel.tsx +1 -4184
- package/src/protocol.ts +582 -0
- package/style/index.css +480 -11
- package/test-results/.last-run.json +4 -0
- package/test.py +0 -0
- package/tests/e2e/cell-output-error-tail.spec.js +156 -0
- package/tests/e2e/codex-ui-test-helpers.js +138 -0
- package/tests/e2e/fixtures/notebooks/error-output-tail.ipynb +58 -0
- package/tests/e2e/fixtures/notebooks/error-output-tail.py +19 -0
- package/tests/e2e/fixtures/notebooks/tab1.ipynb +322 -0
- package/tests/e2e/fixtures/notebooks/tab1.py +272 -0
- package/tests/e2e/fixtures/notebooks/tab2.ipynb +252 -0
- package/tests/e2e/fixtures/notebooks/tab2.py +231 -0
- package/tests/e2e/fixtures/notebooks/tab3.ipynb +403 -0
- package/tests/e2e/fixtures/notebooks/tab3.py +331 -0
- package/tests/e2e/fixtures/notebooks/tab4.py +339 -0
- package/tests/e2e/freeze-notebook-tabs-repro.spec.js +295 -0
- package/tests/e2e/mock-codex-cli-flood.py +127 -0
- package/tests/e2e/mock-codex-cli-prompt-echo.py +88 -0
- package/tests/e2e/mock-codex-cli.py +95 -0
- package/tests/e2e/queue-multitab-repro.spec.js +189 -0
- package/tests/test_handlers.py +116 -0
- package/tests/test_protocol.py +169 -0
- package/tests/test_session_store_limits.py +50 -0
- package/tests/unit/codexChatAttachmentDedup.spec.ts +56 -0
- package/tests/unit/codexChatAttachmentLimit.spec.ts +57 -0
- package/tests/unit/codexChatAttachmentState.spec.ts +71 -0
- package/tests/unit/codexChatDocumentUtils.spec.ts +63 -0
- package/tests/unit/codexChatLimit.spec.ts +18 -0
- package/tests/unit/codexChatNotice.spec.ts +45 -0
- package/tests/unit/codexChatPersistence.spec.ts +199 -0
- package/tests/unit/codexChatSessionFactory.spec.ts +94 -0
- package/tests/unit/codexChatSessionKey.spec.ts +18 -0
- package/tests/unit/codexMessageUtils.spec.ts +89 -0
- package/tests/unit/codexSessionResolver.spec.ts +92 -0
- package/tests/unit/handleCodexSocketMessage.spec.ts +476 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/webpack.config.js +6 -0
- package/jupyterlab_codex/labextension/static/504.335f3447c84ba3d74517.js +0 -2
- package/jupyterlab_codex/labextension/static/972.8e856719e40acc1ef4cb.js +0 -1
- package/jupyterlab_codex/labextension/static/remoteEntry.a2982f776a1f0f515640.js +0 -1
- /package/jupyterlab_codex/labextension/static/{504.335f3447c84ba3d74517.js.LICENSE.txt → 525.224526d045c727069de6.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useEffect, useMemo, useState } from 'react';
|
|
3
|
+
import DOMPurify from 'dompurify';
|
|
4
|
+
import hljs from 'highlight.js/lib/core';
|
|
5
|
+
import bashLang from 'highlight.js/lib/languages/bash';
|
|
6
|
+
import cssLang from 'highlight.js/lib/languages/css';
|
|
7
|
+
import diffLang from 'highlight.js/lib/languages/diff';
|
|
8
|
+
import javascriptLang from 'highlight.js/lib/languages/javascript';
|
|
9
|
+
import jsonLang from 'highlight.js/lib/languages/json';
|
|
10
|
+
import markdownLang from 'highlight.js/lib/languages/markdown';
|
|
11
|
+
import pythonLang from 'highlight.js/lib/languages/python';
|
|
12
|
+
import sqlLang from 'highlight.js/lib/languages/sql';
|
|
13
|
+
import typescriptLang from 'highlight.js/lib/languages/typescript';
|
|
14
|
+
import xmlLang from 'highlight.js/lib/languages/xml';
|
|
15
|
+
import yamlLang from 'highlight.js/lib/languages/yaml';
|
|
16
|
+
import { formatSelectionPreviewTextForDisplay } from './codexChatDocumentUtils';
|
|
17
|
+
hljs.registerLanguage('bash', bashLang);
|
|
18
|
+
hljs.registerLanguage('css', cssLang);
|
|
19
|
+
hljs.registerLanguage('diff', diffLang);
|
|
20
|
+
hljs.registerLanguage('javascript', javascriptLang);
|
|
21
|
+
hljs.registerLanguage('json', jsonLang);
|
|
22
|
+
hljs.registerLanguage('markdown', markdownLang);
|
|
23
|
+
hljs.registerLanguage('python', pythonLang);
|
|
24
|
+
hljs.registerLanguage('sql', sqlLang);
|
|
25
|
+
hljs.registerLanguage('typescript', typescriptLang);
|
|
26
|
+
hljs.registerLanguage('xml', xmlLang);
|
|
27
|
+
hljs.registerLanguage('yaml', yamlLang);
|
|
28
|
+
let markdownParser = null;
|
|
29
|
+
let markdownParserPromise = null;
|
|
30
|
+
async function ensureMarkdownParser() {
|
|
31
|
+
if (markdownParser) {
|
|
32
|
+
return markdownParser;
|
|
33
|
+
}
|
|
34
|
+
if (!markdownParserPromise) {
|
|
35
|
+
markdownParserPromise = Promise.all([import('marked'), import('marked-katex-extension')])
|
|
36
|
+
.then(([markedModule, katexModule]) => {
|
|
37
|
+
const marked = markedModule.marked;
|
|
38
|
+
const markedKatex = katexModule.default;
|
|
39
|
+
marked.use(markedKatex({
|
|
40
|
+
throwOnError: false
|
|
41
|
+
}));
|
|
42
|
+
const parser = {
|
|
43
|
+
parse(markdown) {
|
|
44
|
+
return marked.parse(normalizeMathDelimiters(markdown), {
|
|
45
|
+
gfm: true,
|
|
46
|
+
breaks: true
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
markdownParser = parser;
|
|
51
|
+
return parser;
|
|
52
|
+
})
|
|
53
|
+
.catch(error => {
|
|
54
|
+
markdownParserPromise = null;
|
|
55
|
+
throw error;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return markdownParserPromise;
|
|
59
|
+
}
|
|
60
|
+
async function copyToClipboard(text) {
|
|
61
|
+
if (!text) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
await navigator.clipboard.writeText(text);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
try {
|
|
70
|
+
const textarea = document.createElement('textarea');
|
|
71
|
+
textarea.value = text;
|
|
72
|
+
textarea.setAttribute('readonly', 'true');
|
|
73
|
+
textarea.style.position = 'fixed';
|
|
74
|
+
textarea.style.left = '-9999px';
|
|
75
|
+
document.body.appendChild(textarea);
|
|
76
|
+
textarea.select();
|
|
77
|
+
const ok = document.execCommand('copy');
|
|
78
|
+
document.body.removeChild(textarea);
|
|
79
|
+
return ok;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export async function blobToDataUrl(blob) {
|
|
87
|
+
return await new Promise((resolve, reject) => {
|
|
88
|
+
const reader = new FileReader();
|
|
89
|
+
reader.onload = () => resolve(String(reader.result || ''));
|
|
90
|
+
reader.onerror = () => reject(reader.error || new Error('Failed to read blob'));
|
|
91
|
+
reader.readAsDataURL(blob);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
export function splitFencedCodeBlocks(text) {
|
|
95
|
+
const blocks = [];
|
|
96
|
+
let rest = text;
|
|
97
|
+
while (rest.length > 0) {
|
|
98
|
+
const fenceStart = rest.indexOf('```');
|
|
99
|
+
if (fenceStart === -1) {
|
|
100
|
+
blocks.push({ kind: 'text', text: rest });
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
if (fenceStart > 0) {
|
|
104
|
+
blocks.push({ kind: 'text', text: rest.slice(0, fenceStart) });
|
|
105
|
+
}
|
|
106
|
+
const afterFence = rest.slice(fenceStart + 3);
|
|
107
|
+
const fenceEnd = afterFence.indexOf('```');
|
|
108
|
+
if (fenceEnd === -1) {
|
|
109
|
+
blocks.push({ kind: 'text', text: rest.slice(fenceStart) });
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
const raw = afterFence.slice(0, fenceEnd);
|
|
113
|
+
rest = afterFence.slice(fenceEnd + 3);
|
|
114
|
+
let lang = '';
|
|
115
|
+
let code = raw;
|
|
116
|
+
const firstNewline = raw.indexOf('\n');
|
|
117
|
+
if (firstNewline !== -1) {
|
|
118
|
+
const candidate = raw.slice(0, firstNewline).trim();
|
|
119
|
+
if (candidate.length > 0 && candidate.length <= 20 && /^[A-Za-z0-9+#_.-]+$/.test(candidate)) {
|
|
120
|
+
lang = candidate;
|
|
121
|
+
code = raw.slice(firstNewline + 1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
blocks.push({ kind: 'code', lang, code: code.replace(/\n$/, '') });
|
|
125
|
+
}
|
|
126
|
+
return blocks.filter(block => (block.kind === 'text' ? block.text.length > 0 : true));
|
|
127
|
+
}
|
|
128
|
+
function escapeHtml(value) {
|
|
129
|
+
return value
|
|
130
|
+
.replace(/&/g, '&')
|
|
131
|
+
.replace(/</g, '<')
|
|
132
|
+
.replace(/>/g, '>')
|
|
133
|
+
.replace(/\"/g, '"')
|
|
134
|
+
.replace(/'/g, ''');
|
|
135
|
+
}
|
|
136
|
+
function normalizeHighlightLanguage(lang) {
|
|
137
|
+
const normalized = lang.trim().toLowerCase();
|
|
138
|
+
if (!normalized) {
|
|
139
|
+
return '';
|
|
140
|
+
}
|
|
141
|
+
const aliasMap = {
|
|
142
|
+
js: 'javascript',
|
|
143
|
+
jsx: 'javascript',
|
|
144
|
+
mjs: 'javascript',
|
|
145
|
+
cjs: 'javascript',
|
|
146
|
+
ts: 'typescript',
|
|
147
|
+
tsx: 'typescript',
|
|
148
|
+
py: 'python',
|
|
149
|
+
sh: 'bash',
|
|
150
|
+
shell: 'bash',
|
|
151
|
+
zsh: 'bash',
|
|
152
|
+
yml: 'yaml',
|
|
153
|
+
'c++': 'cpp',
|
|
154
|
+
'c#': 'csharp',
|
|
155
|
+
'objective-c': 'objectivec',
|
|
156
|
+
objc: 'objectivec'
|
|
157
|
+
};
|
|
158
|
+
return aliasMap[normalized] ?? normalized;
|
|
159
|
+
}
|
|
160
|
+
function inferHighlightLanguage(code) {
|
|
161
|
+
const source = code.trim();
|
|
162
|
+
if (!source) {
|
|
163
|
+
return '';
|
|
164
|
+
}
|
|
165
|
+
const pythonSignals = [
|
|
166
|
+
/^\s*from\s+[A-Za-z0-9_.]+\s+import\s+/m,
|
|
167
|
+
/^\s*import\s+[A-Za-z0-9_.]+/m,
|
|
168
|
+
/^\s*def\s+[A-Za-z_][A-Za-z0-9_]*\s*\(/m,
|
|
169
|
+
/^\s*class\s+[A-Za-z_][A-Za-z0-9_]*\s*(\(|:)/m,
|
|
170
|
+
/\bNone\b|\bTrue\b|\bFalse\b/,
|
|
171
|
+
/:\s*$/m
|
|
172
|
+
];
|
|
173
|
+
if (pythonSignals.some(pattern => pattern.test(source))) {
|
|
174
|
+
return 'python';
|
|
175
|
+
}
|
|
176
|
+
return '';
|
|
177
|
+
}
|
|
178
|
+
export function renderHighlightedCodeToSafeHtml(code, lang) {
|
|
179
|
+
const fallback = escapeHtml(code);
|
|
180
|
+
let highlighted = fallback;
|
|
181
|
+
try {
|
|
182
|
+
const normalizedLang = normalizeHighlightLanguage(lang);
|
|
183
|
+
if (normalizedLang && hljs.getLanguage(normalizedLang)) {
|
|
184
|
+
highlighted = hljs.highlight(code, { language: normalizedLang, ignoreIllegals: true }).value;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
const inferredLang = inferHighlightLanguage(code);
|
|
188
|
+
if (inferredLang && hljs.getLanguage(inferredLang)) {
|
|
189
|
+
highlighted = hljs.highlight(code, { language: inferredLang, ignoreIllegals: true }).value;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
highlighted = hljs.highlightAuto(code).value;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
highlighted = fallback;
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
return DOMPurify.sanitize(highlighted, { USE_PROFILES: { html: true } });
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return escapeHtml(highlighted);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
export function renderMarkdownToSafeHtml(markdown) {
|
|
207
|
+
if (!markdown) {
|
|
208
|
+
return '';
|
|
209
|
+
}
|
|
210
|
+
const parser = markdownParser;
|
|
211
|
+
if (!parser) {
|
|
212
|
+
return escapeHtml(markdown).replace(/\n/g, '<br />');
|
|
213
|
+
}
|
|
214
|
+
let html = '';
|
|
215
|
+
try {
|
|
216
|
+
html = parser.parse(markdown);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return escapeHtml(markdown).replace(/\n/g, '<br />');
|
|
220
|
+
}
|
|
221
|
+
try {
|
|
222
|
+
return DOMPurify.sanitize(html, { USE_PROFILES: { html: true } });
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return escapeHtml(markdown).replace(/\n/g, '<br />');
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function normalizeMathDelimiters(markdown) {
|
|
229
|
+
const normalizedEscapedBlock = markdown.replace(/(^|[^\\])\\\[([\s\S]*?)\\\]/g, (_match, prefix, body) => `${prefix}\n$$\n${body}\n$$\n`);
|
|
230
|
+
const normalizedEscapedInline = normalizedEscapedBlock.replace(/(^|[^\\])\\\((.+?)\\\)/g, (_match, prefix, body) => `${prefix}$${body}$`);
|
|
231
|
+
return normalizedEscapedInline.replace(/(^|\n)[ \t]*\[\s*\n([\s\S]*?)\n[ \t]*\](?=\n|$)/g, (_match, prefix, body) => {
|
|
232
|
+
const trimmed = body.trim();
|
|
233
|
+
if (!looksLikeLatexMath(trimmed)) {
|
|
234
|
+
return `${prefix}[\n${body}\n]`;
|
|
235
|
+
}
|
|
236
|
+
return `${prefix}\n$$\n${trimmed}\n$$\n`;
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
function looksLikeLatexMath(value) {
|
|
240
|
+
if (!value) {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
return /\\[A-Za-z]+/.test(value) || /[_^{}]/.test(value);
|
|
244
|
+
}
|
|
245
|
+
export function StatusPill(props) {
|
|
246
|
+
const label = props.status === 'disconnected' ? 'Disconnected' : props.status === 'running' ? 'Running' : 'Ready';
|
|
247
|
+
return (_jsx("span", { className: `jp-CodexStatusPill jp-CodexStatusPill-${props.status}`, role: "img", "aria-label": label, title: label, children: _jsx("span", { className: "jp-CodexStatusPill-dot", "aria-hidden": "true" }) }));
|
|
248
|
+
}
|
|
249
|
+
const CodeBlock = memo(function CodeBlock(props) {
|
|
250
|
+
const [copied, setCopied] = useState(false);
|
|
251
|
+
const highlightedCode = useMemo(() => renderHighlightedCodeToSafeHtml(props.code, props.lang), [props.code, props.lang]);
|
|
252
|
+
async function onCopy() {
|
|
253
|
+
const ok = await copyToClipboard(props.code);
|
|
254
|
+
if (!ok) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
setCopied(true);
|
|
258
|
+
window.setTimeout(() => setCopied(false), 900);
|
|
259
|
+
}
|
|
260
|
+
return (_jsxs("div", { className: "jp-CodexCodeBlockWrap", children: [_jsxs("div", { className: "jp-CodexCodeBlockBar", children: [_jsx("span", { className: "jp-CodexCodeBlockMeta", children: props.lang ? _jsx("span", { className: "jp-CodexCodeBlockLang", children: props.lang }) : _jsx("span", {}) }), props.canCopy && (_jsx("button", { className: "jp-CodexBtn jp-CodexBtn-ghost jp-CodexBtn-xs jp-CodexCodeBlockCopyBtn", onClick: () => void onCopy(), children: copied ? 'Copied' : 'Copy' }))] }), _jsx("pre", { className: "jp-CodexCodeBlock", children: _jsx("code", { className: "hljs", dangerouslySetInnerHTML: { __html: highlightedCode } }) })] }));
|
|
261
|
+
});
|
|
262
|
+
CodeBlock.displayName = 'CodeBlock';
|
|
263
|
+
export const MessageText = memo(function MessageText(props) {
|
|
264
|
+
const [, setMarkdownParserVersion] = useState(0);
|
|
265
|
+
useEffect(() => {
|
|
266
|
+
let disposed = false;
|
|
267
|
+
void ensureMarkdownParser()
|
|
268
|
+
.then(() => {
|
|
269
|
+
if (!disposed) {
|
|
270
|
+
setMarkdownParserVersion(version => version + 1);
|
|
271
|
+
}
|
|
272
|
+
})
|
|
273
|
+
.catch(() => undefined);
|
|
274
|
+
return () => {
|
|
275
|
+
disposed = true;
|
|
276
|
+
};
|
|
277
|
+
}, []);
|
|
278
|
+
const blocks = splitFencedCodeBlocks(props.text);
|
|
279
|
+
return (_jsx("div", { className: "jp-CodexChat-text", children: blocks.map((block, idx) => {
|
|
280
|
+
if (block.kind === 'code') {
|
|
281
|
+
return _jsx(CodeBlock, { lang: block.lang, code: block.code, canCopy: Boolean(props.canCopyCode) }, idx);
|
|
282
|
+
}
|
|
283
|
+
const html = renderMarkdownToSafeHtml(block.text);
|
|
284
|
+
return _jsx("div", { className: "jp-CodexMarkdown", dangerouslySetInnerHTML: { __html: html } }, idx);
|
|
285
|
+
}) }));
|
|
286
|
+
}, (a, b) => a.text === b.text && Boolean(a.canCopyCode) === Boolean(b.canCopyCode));
|
|
287
|
+
MessageText.displayName = 'MessageText';
|
|
288
|
+
export function SelectionPreviewCode(props) {
|
|
289
|
+
const displayCode = formatSelectionPreviewTextForDisplay(props.code);
|
|
290
|
+
const highlightedCode = useMemo(() => renderHighlightedCodeToSafeHtml(displayCode, ''), [displayCode]);
|
|
291
|
+
return (_jsx("pre", { className: "jp-CodexCodeBlock jp-CodexChat-selectionCode", children: _jsx("code", { className: "hljs", dangerouslySetInnerHTML: { __html: highlightedCode } }) }));
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=codexChatRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codexChatRender.js","sourceRoot":"","sources":["../src/codexChatRender.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type TextRole = 'user' | 'assistant' | 'system';
|
|
2
|
+
export type SessionCreateOptions = {
|
|
3
|
+
threadId?: string;
|
|
4
|
+
reuseStoredThread?: boolean;
|
|
5
|
+
sessionKey?: string;
|
|
6
|
+
};
|
|
7
|
+
export type SessionFactoryDefaults<TModelOption extends string, TReasoningOption extends string, TSandboxMode extends string> = {
|
|
8
|
+
readStoredThreadId: (path: string, sessionKey: string) => string;
|
|
9
|
+
readDefaultModelOption: () => TModelOption;
|
|
10
|
+
readDefaultReasoningEffortOption: () => TReasoningOption;
|
|
11
|
+
readDefaultSandboxModeOption: () => TSandboxMode;
|
|
12
|
+
normalizeSystemText: (role: TextRole, text: string) => string;
|
|
13
|
+
};
|
|
14
|
+
export declare function createSession<TSession, TModelOption extends string, TReasoningOption extends string, TSandboxMode extends string>(path: string, intro: string, options: SessionCreateOptions | undefined, defaults: SessionFactoryDefaults<TModelOption, TReasoningOption, TSandboxMode>): TSession;
|
|
15
|
+
export declare function createThreadResetSession<TSession, TModelOption extends string, TReasoningOption extends string, TSandboxMode extends string>(path: string, sessionKey: string, threadId: string, defaults: SessionFactoryDefaults<TModelOption, TReasoningOption, TSandboxMode>): TSession;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export function createSession(path, intro, options, defaults) {
|
|
2
|
+
const generateId = () => typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function'
|
|
3
|
+
? crypto.randomUUID()
|
|
4
|
+
: `${Date.now()}-${Math.floor(Math.random() * 0x100000000).toString(16)}`;
|
|
5
|
+
const defaultIntro = 'Session started';
|
|
6
|
+
const systemText = defaults.normalizeSystemText('system', intro || defaultIntro);
|
|
7
|
+
const requestedThreadId = (options?.threadId || '').trim();
|
|
8
|
+
const storedThreadId = options?.reuseStoredThread === false ? '' : defaults.readStoredThreadId(path, options?.sessionKey || '');
|
|
9
|
+
const threadId = requestedThreadId || storedThreadId || generateId();
|
|
10
|
+
return {
|
|
11
|
+
threadId,
|
|
12
|
+
runState: 'ready',
|
|
13
|
+
activeRunId: null,
|
|
14
|
+
runStartedAt: null,
|
|
15
|
+
progress: '',
|
|
16
|
+
progressKind: '',
|
|
17
|
+
messages: [
|
|
18
|
+
{
|
|
19
|
+
kind: 'text',
|
|
20
|
+
id: generateId(),
|
|
21
|
+
role: 'system',
|
|
22
|
+
text: systemText
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
pairedOk: null,
|
|
26
|
+
pairedPath: '',
|
|
27
|
+
pairedOsPath: '',
|
|
28
|
+
pairedMessage: '',
|
|
29
|
+
notebookMode: null,
|
|
30
|
+
selectedModelOption: defaults.readDefaultModelOption(),
|
|
31
|
+
selectedReasoningEffort: defaults.readDefaultReasoningEffortOption(),
|
|
32
|
+
selectedSandboxMode: defaults.readDefaultSandboxModeOption(),
|
|
33
|
+
effectiveSandboxMode: null,
|
|
34
|
+
conversationMode: 'resume'
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function createThreadResetSession(path, sessionKey, threadId, defaults) {
|
|
38
|
+
const time = new Date().toLocaleTimeString();
|
|
39
|
+
return createSession(path, `Session started (${time})`, {
|
|
40
|
+
threadId,
|
|
41
|
+
reuseStoredThread: false,
|
|
42
|
+
sessionKey
|
|
43
|
+
}, defaults);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=codexChatSessionFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codexChatSessionFactory.js","sourceRoot":"","sources":["../src/codexChatSessionFactory.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,KAAa,EACb,OAAyC,EACzC,QAA8E;IAE9E,MAAM,UAAU,GAAG,GAAG,EAAE,CACtB,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;QACtE,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE;QACrB,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAE9E,MAAM,YAAY,GAAG,iBAAiB,CAAC;IACvC,MAAM,UAAU,GAAG,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,IAAI,YAAY,CAAC,CAAC;IACjF,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,MAAM,cAAc,GAAG,OAAO,EAAE,iBAAiB,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;IAChI,MAAM,QAAQ,GAAG,iBAAiB,IAAI,cAAc,IAAI,UAAU,EAAE,CAAC;IAErE,OAAO;QACL,QAAQ;QACR,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,UAAU,EAAE;gBAChB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,UAAU;aACjB;SACF;QACD,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,EAAE;QACd,YAAY,EAAE,EAAE;QAChB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,IAAI;QAClB,mBAAmB,EAAE,QAAQ,CAAC,sBAAsB,EAAE;QACtD,uBAAuB,EAAE,QAAQ,CAAC,gCAAgC,EAAE;QACpE,mBAAmB,EAAE,QAAQ,CAAC,4BAA4B,EAAE;QAC5D,oBAAoB,EAAE,IAAI;QAC1B,gBAAgB,EAAE,QAAQ;KACJ,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAY,EACZ,UAAkB,EAClB,QAAgB,EAChB,QAA8E;IAE9E,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC;IAC7C,OAAO,aAAa,CAClB,IAAI,EACJ,oBAAoB,IAAI,GAAG,EAC3B;QACE,QAAQ;QACR,iBAAiB,EAAE,KAAK;QACxB,UAAU;KACX,EACD,QAAQ,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function makeSessionKey(path) {
|
|
2
|
+
const normalizedPath = (path || '').trim();
|
|
3
|
+
if (!normalizedPath) {
|
|
4
|
+
return '';
|
|
5
|
+
}
|
|
6
|
+
return normalizedPath;
|
|
7
|
+
}
|
|
8
|
+
export function resolveSessionKey(path) {
|
|
9
|
+
return makeSessionKey(path || '');
|
|
10
|
+
}
|
|
11
|
+
export function resolveCurrentSessionKey(path) {
|
|
12
|
+
return resolveSessionKey(path);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=codexChatSessionKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codexChatSessionKey.js","sourceRoot":"","sources":["../src/codexChatSessionKey.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,cAAc,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,EAAE,CAAC;KACX;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function safeLocalStorageGet(key: string): string | null;
|
|
2
|
+
export declare function hasStoredValue(key: string): boolean;
|
|
3
|
+
export declare function safeLocalStorageSet(key: string, value: string): void;
|
|
4
|
+
export declare function safeLocalStorageRemove(key: string): void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export function safeLocalStorageGet(key) {
|
|
2
|
+
if (typeof window === 'undefined') {
|
|
3
|
+
return null;
|
|
4
|
+
}
|
|
5
|
+
try {
|
|
6
|
+
return window.localStorage.getItem(key);
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function hasStoredValue(key) {
|
|
13
|
+
return safeLocalStorageGet(key) !== null;
|
|
14
|
+
}
|
|
15
|
+
export function safeLocalStorageSet(key, value) {
|
|
16
|
+
if (typeof window === 'undefined') {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
window.localStorage.setItem(key, value);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Ignore storage failures; settings still work for current session.
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function safeLocalStorageRemove(key) {
|
|
27
|
+
if (typeof window === 'undefined') {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
window.localStorage.removeItem(key);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Ignore storage failures; settings still work for current session.
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=codexChatStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codexChatStorage.js","sourceRoot":"","sources":["../src/codexChatStorage.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,OAAO,IAAI,CAAC;KACb;IACD,IAAI;QACF,OAAO,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KACzC;IAAC,MAAM;QACN,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,mBAAmB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,KAAa;IAC5D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,OAAO;KACR;IACD,IAAI;QACF,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KACzC;IAAC,MAAM;QACN,oEAAoE;KACrE;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,OAAO;KACR;IACD,IAAI;QACF,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACrC;IAAC,MAAM;QACN,oEAAoE;KACrE;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type MessageLike = {
|
|
2
|
+
notebookPath?: unknown;
|
|
3
|
+
sessionContextKey?: unknown;
|
|
4
|
+
runId?: unknown;
|
|
5
|
+
};
|
|
6
|
+
export type ResolveMessageSessionKeyParams = {
|
|
7
|
+
message: MessageLike;
|
|
8
|
+
runToSessionKey: Map<string, string>;
|
|
9
|
+
activeSessionKeyByPath: Map<string, string>;
|
|
10
|
+
currentSessionKey: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function resolveMessageSessionKey(params: ResolveMessageSessionKeyParams): string;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { makeSessionKey } from './codexChatSessionKey';
|
|
2
|
+
export function resolveMessageSessionKey(params) {
|
|
3
|
+
const { message, runToSessionKey, activeSessionKeyByPath, currentSessionKey } = params;
|
|
4
|
+
const messagePath = typeof message?.notebookPath === 'string' ? message.notebookPath : '';
|
|
5
|
+
const sessionContextKey = typeof message?.sessionContextKey === 'string' ? message.sessionContextKey : '';
|
|
6
|
+
if (sessionContextKey) {
|
|
7
|
+
return sessionContextKey;
|
|
8
|
+
}
|
|
9
|
+
const runId = typeof message?.runId === 'string' ? message.runId : '';
|
|
10
|
+
if (runId) {
|
|
11
|
+
const mapped = runToSessionKey.get(runId);
|
|
12
|
+
if (mapped) {
|
|
13
|
+
return mapped;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
if (messagePath) {
|
|
17
|
+
if (runId) {
|
|
18
|
+
const activeSessionKey = activeSessionKeyByPath.get(messagePath);
|
|
19
|
+
if (activeSessionKey) {
|
|
20
|
+
runToSessionKey.set(runId, activeSessionKey);
|
|
21
|
+
return activeSessionKey;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const activeSessionKey = activeSessionKeyByPath.get(messagePath);
|
|
25
|
+
if (activeSessionKey) {
|
|
26
|
+
return activeSessionKey;
|
|
27
|
+
}
|
|
28
|
+
return makeSessionKey(messagePath);
|
|
29
|
+
}
|
|
30
|
+
if (runId) {
|
|
31
|
+
const mapped = runToSessionKey.get(runId);
|
|
32
|
+
if (mapped) {
|
|
33
|
+
return mapped;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return currentSessionKey;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=codexSessionResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codexSessionResolver.js","sourceRoot":"","sources":["../src/codexSessionResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAevD,MAAM,UAAU,wBAAwB,CAAC,MAAsC;IAC7E,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IACvF,MAAM,WAAW,GAAG,OAAO,OAAO,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1F,MAAM,iBAAiB,GAAG,OAAO,OAAO,EAAE,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1G,IAAI,iBAAiB,EAAE;QACrB,OAAO,iBAAiB,CAAC;KAC1B;IAED,MAAM,KAAK,GAAG,OAAO,OAAO,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,IAAI,KAAK,EAAE;QACT,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC;SACf;KACF;IAED,IAAI,WAAW,EAAE;QACf,IAAI,KAAK,EAAE;YACT,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACjE,IAAI,gBAAgB,EAAE;gBACpB,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBAC7C,OAAO,gBAAgB,CAAC;aACzB;SACF;QACD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,gBAAgB,EAAE;YACpB,OAAO,gBAAgB,CAAC;SACzB;QACD,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;KACpC;IAED,IAAI,KAAK,EAAE;QACT,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC;SACf;KACF;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type ActivityPhase = 'started' | 'completed' | '';
|
|
2
|
+
export type ActivityCategory = 'reasoning' | 'command' | 'file' | 'tool' | 'event';
|
|
3
|
+
export interface ActivitySummary {
|
|
4
|
+
activity: {
|
|
5
|
+
category: ActivityCategory;
|
|
6
|
+
phase: ActivityPhase;
|
|
7
|
+
title: string;
|
|
8
|
+
detail: string;
|
|
9
|
+
raw: string;
|
|
10
|
+
};
|
|
11
|
+
progress: string;
|
|
12
|
+
progressKind: '' | 'reasoning';
|
|
13
|
+
}
|
|
14
|
+
export declare function summarizeCodexEvent(payload: any): ActivitySummary;
|
|
15
|
+
export declare function isNoiseCodexEvent(payload: any): boolean;
|