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.
Files changed (153) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/.github/workflows/unit-tests.yml +27 -0
  3. package/.jupyterlab-playwright.log +0 -0
  4. package/README.md +83 -9
  5. package/docs/images/codex-sidebar-screenshot.png +0 -0
  6. package/jupyterlab_codex/handlers.py +938 -297
  7. package/jupyterlab_codex/labextension/package.json +13 -3
  8. package/jupyterlab_codex/labextension/static/525.224526d045c727069de6.js +2 -0
  9. package/jupyterlab_codex/labextension/static/737.e7de3ad9dd6ded798340.js +1 -0
  10. package/jupyterlab_codex/labextension/static/remoteEntry.6ef5e7167763a316c000.js +1 -0
  11. package/jupyterlab_codex/protocol.py +297 -0
  12. package/jupyterlab_codex/runner.py +58 -15
  13. package/jupyterlab_codex/sessions.py +582 -97
  14. package/lib/codexChat.d.ts +13 -0
  15. package/lib/codexChat.js +2506 -0
  16. package/lib/codexChat.js.map +1 -0
  17. package/lib/codexChatAttachmentDedup.d.ts +10 -0
  18. package/lib/codexChatAttachmentDedup.js +35 -0
  19. package/lib/codexChatAttachmentDedup.js.map +1 -0
  20. package/lib/codexChatAttachmentLimit.d.ts +18 -0
  21. package/lib/codexChatAttachmentLimit.js +50 -0
  22. package/lib/codexChatAttachmentLimit.js.map +1 -0
  23. package/lib/codexChatAttachmentState.d.ts +15 -0
  24. package/lib/codexChatAttachmentState.js +16 -0
  25. package/lib/codexChatAttachmentState.js.map +1 -0
  26. package/lib/codexChatDocumentUtils.d.ts +70 -0
  27. package/lib/codexChatDocumentUtils.js +506 -0
  28. package/lib/codexChatDocumentUtils.js.map +1 -0
  29. package/lib/codexChatFormatting.d.ts +11 -0
  30. package/lib/codexChatFormatting.js +83 -0
  31. package/lib/codexChatFormatting.js.map +1 -0
  32. package/lib/codexChatNotice.d.ts +3 -0
  33. package/lib/codexChatNotice.js +74 -0
  34. package/lib/codexChatNotice.js.map +1 -0
  35. package/lib/codexChatPersistence.d.ts +35 -0
  36. package/lib/codexChatPersistence.js +158 -0
  37. package/lib/codexChatPersistence.js.map +1 -0
  38. package/lib/codexChatPrimitives.d.ts +44 -0
  39. package/lib/codexChatPrimitives.js +156 -0
  40. package/lib/codexChatPrimitives.js.map +1 -0
  41. package/lib/codexChatRender.d.ts +24 -0
  42. package/lib/codexChatRender.js +293 -0
  43. package/lib/codexChatRender.js.map +1 -0
  44. package/lib/codexChatSessionFactory.d.ts +15 -0
  45. package/lib/codexChatSessionFactory.js +45 -0
  46. package/lib/codexChatSessionFactory.js.map +1 -0
  47. package/lib/codexChatSessionKey.d.ts +3 -0
  48. package/lib/codexChatSessionKey.js +14 -0
  49. package/lib/codexChatSessionKey.js.map +1 -0
  50. package/lib/codexChatStorage.d.ts +4 -0
  51. package/lib/codexChatStorage.js +37 -0
  52. package/lib/codexChatStorage.js.map +1 -0
  53. package/lib/codexSessionResolver.d.ts +12 -0
  54. package/lib/codexSessionResolver.js +38 -0
  55. package/lib/codexSessionResolver.js.map +1 -0
  56. package/lib/handlers/activitySummarizer.d.ts +15 -0
  57. package/lib/handlers/activitySummarizer.js +327 -0
  58. package/lib/handlers/activitySummarizer.js.map +1 -0
  59. package/lib/handlers/codexMessageTypes.d.ts +30 -0
  60. package/lib/handlers/codexMessageTypes.js +2 -0
  61. package/lib/handlers/codexMessageTypes.js.map +1 -0
  62. package/lib/handlers/codexMessageUtils.d.ts +46 -0
  63. package/lib/handlers/codexMessageUtils.js +144 -0
  64. package/lib/handlers/codexMessageUtils.js.map +1 -0
  65. package/lib/handlers/handleCodexSocketMessage.d.ts +107 -0
  66. package/lib/handlers/handleCodexSocketMessage.js +78 -0
  67. package/lib/handlers/handleCodexSocketMessage.js.map +1 -0
  68. package/lib/handlers/sessionSyncHandler.d.ts +34 -0
  69. package/lib/handlers/sessionSyncHandler.js +181 -0
  70. package/lib/handlers/sessionSyncHandler.js.map +1 -0
  71. package/lib/hooks/useCodexSocket.d.ts +15 -0
  72. package/lib/hooks/useCodexSocket.js +84 -0
  73. package/lib/hooks/useCodexSocket.js.map +1 -0
  74. package/lib/index.js +1 -1
  75. package/lib/index.js.map +1 -1
  76. package/lib/panel.d.ts +1 -11
  77. package/lib/panel.js +1 -2815
  78. package/lib/panel.js.map +1 -1
  79. package/lib/protocol.d.ts +235 -0
  80. package/lib/protocol.js +278 -0
  81. package/lib/protocol.js.map +1 -0
  82. package/package.json +13 -3
  83. package/playwright.config.cjs +27 -0
  84. package/playwright.unit.config.cjs +19 -0
  85. package/pyproject.toml +1 -1
  86. package/release.sh +52 -14
  87. package/scripts/run_playwright_e2e.sh +96 -0
  88. package/scripts/run_playwright_freeze_repro.sh +58 -0
  89. package/scripts/run_playwright_queue_repro.sh +60 -0
  90. package/scripts/run_playwright_repro.sh +55 -0
  91. package/src/codexChat.tsx +3914 -0
  92. package/src/codexChatAttachmentDedup.ts +47 -0
  93. package/src/codexChatAttachmentLimit.ts +81 -0
  94. package/src/codexChatAttachmentState.ts +37 -0
  95. package/src/codexChatDocumentUtils.ts +644 -0
  96. package/src/codexChatFormatting.ts +94 -0
  97. package/src/codexChatNotice.ts +95 -0
  98. package/src/codexChatPersistence.ts +191 -0
  99. package/src/codexChatPrimitives.tsx +446 -0
  100. package/src/codexChatRender.tsx +376 -0
  101. package/src/codexChatSessionFactory.ts +79 -0
  102. package/src/codexChatSessionKey.ts +16 -0
  103. package/src/codexChatStorage.ts +36 -0
  104. package/src/codexSessionResolver.ts +56 -0
  105. package/src/handlers/activitySummarizer.ts +369 -0
  106. package/src/handlers/codexMessageTypes.ts +34 -0
  107. package/src/handlers/codexMessageUtils.ts +217 -0
  108. package/src/handlers/handleCodexSocketMessage.ts +204 -0
  109. package/src/handlers/sessionSyncHandler.ts +308 -0
  110. package/src/hooks/useCodexSocket.ts +109 -0
  111. package/src/index.ts +1 -1
  112. package/src/panel.tsx +1 -4184
  113. package/src/protocol.ts +582 -0
  114. package/style/index.css +480 -11
  115. package/test-results/.last-run.json +4 -0
  116. package/test.py +0 -0
  117. package/tests/e2e/cell-output-error-tail.spec.js +156 -0
  118. package/tests/e2e/codex-ui-test-helpers.js +138 -0
  119. package/tests/e2e/fixtures/notebooks/error-output-tail.ipynb +58 -0
  120. package/tests/e2e/fixtures/notebooks/error-output-tail.py +19 -0
  121. package/tests/e2e/fixtures/notebooks/tab1.ipynb +322 -0
  122. package/tests/e2e/fixtures/notebooks/tab1.py +272 -0
  123. package/tests/e2e/fixtures/notebooks/tab2.ipynb +252 -0
  124. package/tests/e2e/fixtures/notebooks/tab2.py +231 -0
  125. package/tests/e2e/fixtures/notebooks/tab3.ipynb +403 -0
  126. package/tests/e2e/fixtures/notebooks/tab3.py +331 -0
  127. package/tests/e2e/fixtures/notebooks/tab4.py +339 -0
  128. package/tests/e2e/freeze-notebook-tabs-repro.spec.js +295 -0
  129. package/tests/e2e/mock-codex-cli-flood.py +127 -0
  130. package/tests/e2e/mock-codex-cli-prompt-echo.py +88 -0
  131. package/tests/e2e/mock-codex-cli.py +95 -0
  132. package/tests/e2e/queue-multitab-repro.spec.js +189 -0
  133. package/tests/test_handlers.py +116 -0
  134. package/tests/test_protocol.py +169 -0
  135. package/tests/test_session_store_limits.py +50 -0
  136. package/tests/unit/codexChatAttachmentDedup.spec.ts +56 -0
  137. package/tests/unit/codexChatAttachmentLimit.spec.ts +57 -0
  138. package/tests/unit/codexChatAttachmentState.spec.ts +71 -0
  139. package/tests/unit/codexChatDocumentUtils.spec.ts +63 -0
  140. package/tests/unit/codexChatLimit.spec.ts +18 -0
  141. package/tests/unit/codexChatNotice.spec.ts +45 -0
  142. package/tests/unit/codexChatPersistence.spec.ts +199 -0
  143. package/tests/unit/codexChatSessionFactory.spec.ts +94 -0
  144. package/tests/unit/codexChatSessionKey.spec.ts +18 -0
  145. package/tests/unit/codexMessageUtils.spec.ts +89 -0
  146. package/tests/unit/codexSessionResolver.spec.ts +92 -0
  147. package/tests/unit/handleCodexSocketMessage.spec.ts +476 -0
  148. package/tsconfig.tsbuildinfo +1 -1
  149. package/webpack.config.js +6 -0
  150. package/jupyterlab_codex/labextension/static/504.335f3447c84ba3d74517.js +0 -2
  151. package/jupyterlab_codex/labextension/static/972.8e856719e40acc1ef4cb.js +0 -1
  152. package/jupyterlab_codex/labextension/static/remoteEntry.a2982f776a1f0f515640.js +0 -1
  153. /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, '&amp;')
131
+ .replace(/</g, '&lt;')
132
+ .replace(/>/g, '&gt;')
133
+ .replace(/\"/g, '&quot;')
134
+ .replace(/'/g, '&#39;');
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,3 @@
1
+ export declare function makeSessionKey(path: string): string;
2
+ export declare function resolveSessionKey(path: string): string;
3
+ export declare function resolveCurrentSessionKey(path: string): string;
@@ -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;