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
package/style/index.css
CHANGED
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
justify-self: end;
|
|
124
124
|
display: flex;
|
|
125
125
|
align-items: center;
|
|
126
|
-
gap:
|
|
126
|
+
gap: 0;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
@container (max-width: 420px) {
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
.jp-CodexChat-header-actions {
|
|
145
|
-
gap:
|
|
145
|
+
gap: 0;
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
.jp-CodexChat-notebook {
|
|
@@ -770,6 +770,7 @@
|
|
|
770
770
|
.jp-CodexChat-assistant {
|
|
771
771
|
align-self: flex-start;
|
|
772
772
|
border: 0;
|
|
773
|
+
background: transparent;
|
|
773
774
|
padding-left: 0;
|
|
774
775
|
padding-right: 0;
|
|
775
776
|
}
|
|
@@ -905,6 +906,133 @@
|
|
|
905
906
|
margin-top: 8px;
|
|
906
907
|
}
|
|
907
908
|
|
|
909
|
+
.jp-CodexChat-selectionToggle {
|
|
910
|
+
appearance: none;
|
|
911
|
+
-webkit-appearance: none;
|
|
912
|
+
box-sizing: border-box;
|
|
913
|
+
position: absolute;
|
|
914
|
+
right: calc(var(--cdx-selection-btn-size, 2em) * -0.14);
|
|
915
|
+
bottom: calc(var(--cdx-selection-btn-size, 2em) * -0.36);
|
|
916
|
+
z-index: 1;
|
|
917
|
+
width: var(--cdx-selection-btn-size, 2em) !important;
|
|
918
|
+
height: var(--cdx-selection-btn-size, 2em) !important;
|
|
919
|
+
min-width: var(--cdx-selection-btn-size, 2em) !important;
|
|
920
|
+
min-height: var(--cdx-selection-btn-size, 2em) !important;
|
|
921
|
+
max-width: var(--cdx-selection-btn-size, 2em) !important;
|
|
922
|
+
max-height: var(--cdx-selection-btn-size, 2em) !important;
|
|
923
|
+
border-radius: 50% !important;
|
|
924
|
+
overflow: hidden;
|
|
925
|
+
border: 2px solid color-mix(in srgb, var(--cdx-surface) 94%, #ffffff);
|
|
926
|
+
background: #101010;
|
|
927
|
+
color: #ffffff;
|
|
928
|
+
display: inline-flex;
|
|
929
|
+
align-items: center;
|
|
930
|
+
justify-content: center;
|
|
931
|
+
padding: 0;
|
|
932
|
+
line-height: 0;
|
|
933
|
+
font-size: calc(var(--cdx-selection-btn-size, 2em) * 0.48);
|
|
934
|
+
cursor: pointer;
|
|
935
|
+
box-shadow: 0 8px 22px rgba(10, 10, 10, 0.3);
|
|
936
|
+
opacity: 1;
|
|
937
|
+
transition: background 120ms ease, border-color 120ms ease, color 120ms ease, transform 120ms ease,
|
|
938
|
+
opacity 120ms ease;
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
.jp-CodexChat-selectionToggle svg {
|
|
942
|
+
display: block;
|
|
943
|
+
transition: transform 120ms ease;
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
.jp-CodexChat-selectionToggle:hover {
|
|
947
|
+
background: #1a1a1a;
|
|
948
|
+
border-color: color-mix(in srgb, #ffffff 94%, var(--cdx-border));
|
|
949
|
+
transform: translateY(-1px);
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
.jp-CodexChat-selectionToggle.is-open {
|
|
953
|
+
background: #000000;
|
|
954
|
+
border-color: #ffffff;
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
.jp-CodexChat-selectionToggle.is-open svg {
|
|
958
|
+
transform: rotate(45deg);
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
@media (hover: hover) and (pointer: fine) {
|
|
962
|
+
.jp-CodexChat-user.has-selection-preview .jp-CodexChat-selectionToggle {
|
|
963
|
+
opacity: 0;
|
|
964
|
+
pointer-events: none;
|
|
965
|
+
transform: translateY(2px) scale(0.94);
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
.jp-CodexChat-user.has-selection-preview:hover .jp-CodexChat-selectionToggle,
|
|
969
|
+
.jp-CodexChat-user.has-selection-preview:focus-within .jp-CodexChat-selectionToggle,
|
|
970
|
+
.jp-CodexChat-user.has-selection-preview.is-selection-open .jp-CodexChat-selectionToggle {
|
|
971
|
+
opacity: 1;
|
|
972
|
+
pointer-events: auto;
|
|
973
|
+
transform: translateY(0) scale(1);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
.jp-CodexChat-user.has-selection-preview .jp-CodexChat-selectionToggle:hover {
|
|
977
|
+
transform: translateY(-1px) scale(1);
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
.jp-CodexChat-selectionCard {
|
|
982
|
+
margin-top: 0;
|
|
983
|
+
width: auto;
|
|
984
|
+
padding: 9px 11px;
|
|
985
|
+
border-radius: 12px;
|
|
986
|
+
border: 1px solid color-mix(in srgb, var(--cdx-border) 72%, transparent);
|
|
987
|
+
background: color-mix(in srgb, var(--cdx-surface-2) 82%, transparent);
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
.jp-CodexChat-contextSection + .jp-CodexChat-contextSection {
|
|
991
|
+
margin-top: 10px;
|
|
992
|
+
padding-top: 10px;
|
|
993
|
+
border-top: 1px solid color-mix(in srgb, var(--cdx-border) 66%, transparent);
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
.jp-CodexChat-selectionMeta {
|
|
997
|
+
font-family: var(--cdx-mono);
|
|
998
|
+
font-size: 11px;
|
|
999
|
+
line-height: 1.35;
|
|
1000
|
+
color: var(--cdx-muted);
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
.jp-CodexChat-selectionText {
|
|
1004
|
+
margin-top: 4px;
|
|
1005
|
+
font-family: var(--cdx-mono);
|
|
1006
|
+
font-size: 12px;
|
|
1007
|
+
line-height: 1.45;
|
|
1008
|
+
color: var(--cdx-text);
|
|
1009
|
+
white-space: pre-wrap;
|
|
1010
|
+
overflow-wrap: anywhere;
|
|
1011
|
+
word-break: break-word;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
.jp-CodexChat-selectionCode {
|
|
1015
|
+
margin-top: 6px;
|
|
1016
|
+
border-radius: 10px;
|
|
1017
|
+
border: 1px solid color-mix(in srgb, var(--cdx-border) 78%, transparent);
|
|
1018
|
+
background: color-mix(in srgb, var(--cdx-surface) 86%, var(--cdx-surface-2));
|
|
1019
|
+
padding: 8px 10px;
|
|
1020
|
+
overflow: auto;
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
.jp-CodexChat-selectionCode code.hljs {
|
|
1024
|
+
white-space: pre;
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
.jp-CodexChat-message.has-selection-preview {
|
|
1028
|
+
overflow: visible;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
.jp-CodexChat-user.has-selection-preview {
|
|
1032
|
+
--cdx-selection-btn-size: clamp(1.85em, 2.08em, 2.28em);
|
|
1033
|
+
margin-bottom: calc(var(--cdx-selection-btn-size) * 0.45);
|
|
1034
|
+
}
|
|
1035
|
+
|
|
908
1036
|
.jp-CodexChat-attachmentPill {
|
|
909
1037
|
display: inline-flex;
|
|
910
1038
|
align-items: center;
|
|
@@ -957,10 +1085,12 @@
|
|
|
957
1085
|
|
|
958
1086
|
.jp-CodexMarkdown code {
|
|
959
1087
|
font-family: var(--cdx-mono);
|
|
960
|
-
font-size:
|
|
1088
|
+
font-size: 8px;
|
|
961
1089
|
color: var(--cdx-code-text);
|
|
962
|
-
padding: 2px
|
|
963
|
-
|
|
1090
|
+
padding: 2px 5px;
|
|
1091
|
+
margin-left: 2px;
|
|
1092
|
+
margin-right: 2px;
|
|
1093
|
+
border-radius: 8px;
|
|
964
1094
|
border: 0;
|
|
965
1095
|
background: color-mix(in srgb, var(--cdx-surface-2) 78%, transparent);
|
|
966
1096
|
line-height: 1.45;
|
|
@@ -971,6 +1101,11 @@
|
|
|
971
1101
|
word-break: break-word;
|
|
972
1102
|
}
|
|
973
1103
|
|
|
1104
|
+
.jp-CodexChat .jp-CodexMarkdown code {
|
|
1105
|
+
font-family: var(--cdx-mono) !important;
|
|
1106
|
+
font-size: 12px !important;
|
|
1107
|
+
}
|
|
1108
|
+
|
|
974
1109
|
.jp-CodexMarkdown pre {
|
|
975
1110
|
margin: 10px 0 0;
|
|
976
1111
|
padding: 10px;
|
|
@@ -1108,6 +1243,16 @@
|
|
|
1108
1243
|
color: var(--cdx-code-operator);
|
|
1109
1244
|
}
|
|
1110
1245
|
|
|
1246
|
+
/* Fallback for highlight.js token classes we do not theme explicitly. */
|
|
1247
|
+
.jp-CodexCodeBlock .hljs-subst,
|
|
1248
|
+
.jp-CodexCodeBlock .hljs-type,
|
|
1249
|
+
.jp-CodexCodeBlock .hljs-name,
|
|
1250
|
+
.jp-CodexCodeBlock .hljs-class,
|
|
1251
|
+
.jp-CodexCodeBlock .hljs-tag,
|
|
1252
|
+
.jp-CodexCodeBlock .hljs-link {
|
|
1253
|
+
color: var(--cdx-code-text);
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1111
1256
|
.jp-CodexCodeBlockCopyBtn {
|
|
1112
1257
|
opacity: 0;
|
|
1113
1258
|
pointer-events: none;
|
|
@@ -1156,7 +1301,7 @@
|
|
|
1156
1301
|
box-shadow: none;
|
|
1157
1302
|
display: flex;
|
|
1158
1303
|
flex-direction: column;
|
|
1159
|
-
gap:
|
|
1304
|
+
gap: 2px;
|
|
1160
1305
|
}
|
|
1161
1306
|
|
|
1162
1307
|
.jp-CodexComposer:focus-within {
|
|
@@ -1168,13 +1313,13 @@
|
|
|
1168
1313
|
width: 100%;
|
|
1169
1314
|
box-sizing: border-box;
|
|
1170
1315
|
resize: none;
|
|
1171
|
-
min-height: calc(1.
|
|
1172
|
-
max-height: calc(1.
|
|
1316
|
+
min-height: calc(1.45em + 8px);
|
|
1317
|
+
max-height: calc(1.45em * 3 + 8px);
|
|
1173
1318
|
border: 0;
|
|
1174
1319
|
border-radius: 14px;
|
|
1175
|
-
padding:
|
|
1320
|
+
padding: 4px 10px;
|
|
1176
1321
|
font-size: 13px;
|
|
1177
|
-
line-height: 1.
|
|
1322
|
+
line-height: 1.45;
|
|
1178
1323
|
background: transparent;
|
|
1179
1324
|
color: var(--cdx-text);
|
|
1180
1325
|
outline: none;
|
|
@@ -1189,6 +1334,83 @@
|
|
|
1189
1334
|
opacity: 0.7;
|
|
1190
1335
|
}
|
|
1191
1336
|
|
|
1337
|
+
.jp-CodexComposer-cellAttachmentWrap {
|
|
1338
|
+
display: flex;
|
|
1339
|
+
align-items: center;
|
|
1340
|
+
max-height: 0;
|
|
1341
|
+
margin-bottom: 0;
|
|
1342
|
+
opacity: 0;
|
|
1343
|
+
transform: translateY(-4px) scale(0.98);
|
|
1344
|
+
transform-origin: left center;
|
|
1345
|
+
overflow: hidden;
|
|
1346
|
+
pointer-events: none;
|
|
1347
|
+
transition: max-height 170ms ease, margin-bottom 170ms ease, opacity 170ms ease, transform 170ms ease;
|
|
1348
|
+
}
|
|
1349
|
+
|
|
1350
|
+
.jp-CodexComposer-cellAttachmentWrap.is-visible {
|
|
1351
|
+
max-height: 32px;
|
|
1352
|
+
margin-bottom: 6px;
|
|
1353
|
+
opacity: 1;
|
|
1354
|
+
transform: translateY(0) scale(1);
|
|
1355
|
+
pointer-events: auto;
|
|
1356
|
+
}
|
|
1357
|
+
|
|
1358
|
+
.jp-CodexComposer-cellAttachment {
|
|
1359
|
+
appearance: none;
|
|
1360
|
+
-webkit-appearance: none;
|
|
1361
|
+
display: inline-flex;
|
|
1362
|
+
align-items: center;
|
|
1363
|
+
justify-content: center;
|
|
1364
|
+
gap: 4px;
|
|
1365
|
+
width: fit-content;
|
|
1366
|
+
max-width: 100%;
|
|
1367
|
+
min-height: 24px;
|
|
1368
|
+
padding: 0 7px 0 6px;
|
|
1369
|
+
border-radius: 9999px !important;
|
|
1370
|
+
border: 1px solid transparent;
|
|
1371
|
+
overflow: hidden;
|
|
1372
|
+
background: color-mix(in srgb, var(--cdx-accent) 9%, var(--cdx-surface));
|
|
1373
|
+
color: color-mix(in srgb, var(--cdx-accent) 80%, var(--cdx-text));
|
|
1374
|
+
font-size: 11px;
|
|
1375
|
+
font-weight: 400;
|
|
1376
|
+
line-height: 1;
|
|
1377
|
+
cursor: pointer;
|
|
1378
|
+
transition: background 120ms ease, color 120ms ease, border-color 120ms ease;
|
|
1379
|
+
animation: cdx-cell-attachment-in 220ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
1380
|
+
}
|
|
1381
|
+
|
|
1382
|
+
.jp-CodexComposer-cellAttachment:not(.is-off) {
|
|
1383
|
+
border-color: color-mix(in srgb, var(--cdx-accent) 42%, var(--cdx-border));
|
|
1384
|
+
box-shadow: 0 0 0 1px color-mix(in srgb, var(--cdx-accent) 16%, transparent);
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
.jp-CodexComposer-cellAttachment.is-off {
|
|
1388
|
+
background: color-mix(in srgb, var(--cdx-border) 28%, var(--cdx-surface));
|
|
1389
|
+
color: color-mix(in srgb, var(--cdx-text) 72%, var(--cdx-muted));
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1392
|
+
.jp-CodexComposer-cellAttachment:hover,
|
|
1393
|
+
.jp-CodexComposer-cellAttachment:focus-within {
|
|
1394
|
+
background: color-mix(in srgb, var(--cdx-accent) 80%, var(--cdx-text));
|
|
1395
|
+
color: var(--cdx-surface);
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1398
|
+
.jp-CodexComposer-cellAttachmentLabel {
|
|
1399
|
+
min-width: 0;
|
|
1400
|
+
white-space: nowrap;
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
@keyframes cdx-cell-attachment-in {
|
|
1404
|
+
0% {
|
|
1405
|
+
opacity: 0;
|
|
1406
|
+
transform: translateY(-4px) scale(0.96);
|
|
1407
|
+
}
|
|
1408
|
+
100% {
|
|
1409
|
+
opacity: 1;
|
|
1410
|
+
transform: translateY(0) scale(1);
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1192
1414
|
.jp-CodexComposer-attachments {
|
|
1193
1415
|
display: flex;
|
|
1194
1416
|
flex-wrap: wrap;
|
|
@@ -1196,6 +1418,55 @@
|
|
|
1196
1418
|
padding: 0 4px;
|
|
1197
1419
|
}
|
|
1198
1420
|
|
|
1421
|
+
.jp-CodexComposer-queued {
|
|
1422
|
+
display: flex;
|
|
1423
|
+
align-items: center;
|
|
1424
|
+
gap: 8px;
|
|
1425
|
+
min-width: 0;
|
|
1426
|
+
margin: 0 2px 4px;
|
|
1427
|
+
padding: 4px 8px;
|
|
1428
|
+
border: 1px solid color-mix(in srgb, var(--cdx-accent) 30%, var(--cdx-border));
|
|
1429
|
+
border-radius: 10px;
|
|
1430
|
+
background: color-mix(in srgb, var(--cdx-accent) 10%, var(--cdx-surface));
|
|
1431
|
+
color: color-mix(in srgb, var(--cdx-accent) 82%, var(--cdx-text));
|
|
1432
|
+
font-size: 11px;
|
|
1433
|
+
}
|
|
1434
|
+
|
|
1435
|
+
.jp-CodexComposer-queuedLabel {
|
|
1436
|
+
flex: 0 0 auto;
|
|
1437
|
+
font-weight: 700;
|
|
1438
|
+
letter-spacing: 0.01em;
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
.jp-CodexComposer-queuedText {
|
|
1442
|
+
flex: 1 1 auto;
|
|
1443
|
+
min-width: 0;
|
|
1444
|
+
white-space: nowrap;
|
|
1445
|
+
overflow: hidden;
|
|
1446
|
+
text-overflow: ellipsis;
|
|
1447
|
+
}
|
|
1448
|
+
|
|
1449
|
+
.jp-CodexComposer-queuedRemove {
|
|
1450
|
+
appearance: none;
|
|
1451
|
+
width: 16px;
|
|
1452
|
+
height: 16px;
|
|
1453
|
+
padding: 0;
|
|
1454
|
+
border-radius: 999px;
|
|
1455
|
+
border: 1px solid color-mix(in srgb, var(--cdx-accent) 35%, var(--cdx-border));
|
|
1456
|
+
background: color-mix(in srgb, var(--cdx-surface) 84%, transparent);
|
|
1457
|
+
color: inherit;
|
|
1458
|
+
display: inline-flex;
|
|
1459
|
+
align-items: center;
|
|
1460
|
+
justify-content: center;
|
|
1461
|
+
cursor: pointer;
|
|
1462
|
+
transition: background 120ms ease, border-color 120ms ease;
|
|
1463
|
+
}
|
|
1464
|
+
|
|
1465
|
+
.jp-CodexComposer-queuedRemove:hover:not(:disabled) {
|
|
1466
|
+
background: var(--cdx-surface);
|
|
1467
|
+
border-color: color-mix(in srgb, var(--cdx-accent) 55%, var(--cdx-border));
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1199
1470
|
.jp-CodexComposer-attachment {
|
|
1200
1471
|
position: relative;
|
|
1201
1472
|
width: 64px;
|
|
@@ -1241,7 +1512,7 @@
|
|
|
1241
1512
|
align-items: center;
|
|
1242
1513
|
justify-content: space-between;
|
|
1243
1514
|
gap: 10px;
|
|
1244
|
-
padding-top:
|
|
1515
|
+
padding-top: 0;
|
|
1245
1516
|
}
|
|
1246
1517
|
|
|
1247
1518
|
.jp-CodexComposer-toolbarLeft {
|
|
@@ -1260,6 +1531,65 @@
|
|
|
1260
1531
|
flex-shrink: 0;
|
|
1261
1532
|
}
|
|
1262
1533
|
|
|
1534
|
+
.jp-CodexContextWrap {
|
|
1535
|
+
position: relative;
|
|
1536
|
+
display: inline-flex;
|
|
1537
|
+
align-items: center;
|
|
1538
|
+
}
|
|
1539
|
+
|
|
1540
|
+
.jp-CodexContextBtn {
|
|
1541
|
+
color: color-mix(in srgb, var(--cdx-muted) 90%, var(--cdx-text));
|
|
1542
|
+
}
|
|
1543
|
+
|
|
1544
|
+
.jp-CodexContextBtn.is-stale:not(:disabled) {
|
|
1545
|
+
opacity: 0.72;
|
|
1546
|
+
}
|
|
1547
|
+
|
|
1548
|
+
.jp-CodexContextPopover {
|
|
1549
|
+
min-width: 176px;
|
|
1550
|
+
width: fit-content;
|
|
1551
|
+
z-index: 35;
|
|
1552
|
+
max-width: min(280px, calc(100vw - 24px));
|
|
1553
|
+
border-radius: 12px;
|
|
1554
|
+
border: 1px solid color-mix(in srgb, var(--cdx-border) 85%, transparent);
|
|
1555
|
+
background: color-mix(in srgb, var(--cdx-surface) 94%, transparent);
|
|
1556
|
+
box-shadow: 0 14px 30px rgba(2, 6, 23, 0.2);
|
|
1557
|
+
backdrop-filter: blur(10px);
|
|
1558
|
+
padding: 8px 9px;
|
|
1559
|
+
display: grid;
|
|
1560
|
+
gap: 6px;
|
|
1561
|
+
}
|
|
1562
|
+
|
|
1563
|
+
.jp-CodexContextPopoverTitle {
|
|
1564
|
+
font-size: 11px;
|
|
1565
|
+
font-weight: 700;
|
|
1566
|
+
letter-spacing: 0.01em;
|
|
1567
|
+
color: var(--cdx-text);
|
|
1568
|
+
}
|
|
1569
|
+
|
|
1570
|
+
.jp-CodexContextPopoverRow {
|
|
1571
|
+
display: flex;
|
|
1572
|
+
align-items: center;
|
|
1573
|
+
justify-content: space-between;
|
|
1574
|
+
gap: 10px;
|
|
1575
|
+
font-size: 11px;
|
|
1576
|
+
color: var(--cdx-muted);
|
|
1577
|
+
}
|
|
1578
|
+
|
|
1579
|
+
.jp-CodexContextPopoverRow strong {
|
|
1580
|
+
color: var(--cdx-text);
|
|
1581
|
+
font-family: var(--cdx-mono);
|
|
1582
|
+
font-size: 11px;
|
|
1583
|
+
font-weight: 600;
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
.jp-CodexContextPopoverMeta {
|
|
1587
|
+
padding-top: 2px;
|
|
1588
|
+
border-top: 1px solid color-mix(in srgb, var(--cdx-border) 80%, transparent);
|
|
1589
|
+
font-size: 10px;
|
|
1590
|
+
color: color-mix(in srgb, var(--cdx-muted) 90%, var(--cdx-text));
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1263
1593
|
.jp-CodexComposer-hint {
|
|
1264
1594
|
font-size: 11px;
|
|
1265
1595
|
color: var(--cdx-muted);
|
|
@@ -1530,6 +1860,15 @@
|
|
|
1530
1860
|
--cdx-good: var(--jp-success-color1, #22c55e);
|
|
1531
1861
|
--cdx-warn: var(--jp-warn-color1, #f97316);
|
|
1532
1862
|
--cdx-bad: var(--jp-error-color1, #ef4444);
|
|
1863
|
+
--cdx-code-text: var(--cdx-text);
|
|
1864
|
+
--cdx-code-comment: #6b7280;
|
|
1865
|
+
--cdx-code-keyword: #7c3aed;
|
|
1866
|
+
--cdx-code-string: #0f766e;
|
|
1867
|
+
--cdx-code-number: #b45309;
|
|
1868
|
+
--cdx-code-function: #0f766e;
|
|
1869
|
+
--cdx-code-variable: #1d4ed8;
|
|
1870
|
+
--cdx-code-operator: #334155;
|
|
1871
|
+
--cdx-code-title: #0f172a;
|
|
1533
1872
|
|
|
1534
1873
|
--cdx-radius: 14px;
|
|
1535
1874
|
--cdx-radius-sm: 10px;
|
|
@@ -1547,6 +1886,108 @@
|
|
|
1547
1886
|
color: var(--cdx-text);
|
|
1548
1887
|
}
|
|
1549
1888
|
|
|
1889
|
+
.jp-mod-theme-light .jp-CodexMenuPortal {
|
|
1890
|
+
--cdx-code-text: #0f172a;
|
|
1891
|
+
--cdx-code-comment: #6b7280;
|
|
1892
|
+
--cdx-code-keyword: #7c3aed;
|
|
1893
|
+
--cdx-code-string: #0f766e;
|
|
1894
|
+
--cdx-code-number: #b45309;
|
|
1895
|
+
--cdx-code-function: #0f766e;
|
|
1896
|
+
--cdx-code-variable: #1d4ed8;
|
|
1897
|
+
--cdx-code-operator: #334155;
|
|
1898
|
+
--cdx-code-title: #0f172a;
|
|
1899
|
+
}
|
|
1900
|
+
|
|
1901
|
+
.jp-mod-theme-dark .jp-CodexMenuPortal {
|
|
1902
|
+
--cdx-code-text: #e2e8f0;
|
|
1903
|
+
--cdx-code-comment: #94a3b8;
|
|
1904
|
+
--cdx-code-keyword: #c084fc;
|
|
1905
|
+
--cdx-code-string: #5eead4;
|
|
1906
|
+
--cdx-code-number: #fbbf24;
|
|
1907
|
+
--cdx-code-function: #4ade80;
|
|
1908
|
+
--cdx-code-variable: #93c5fd;
|
|
1909
|
+
--cdx-code-operator: #cbd5e1;
|
|
1910
|
+
--cdx-code-title: #f8fafc;
|
|
1911
|
+
}
|
|
1912
|
+
|
|
1913
|
+
.jp-CodexMenu.jp-CodexChat-selectionPopover {
|
|
1914
|
+
min-width: min(18ch, calc(100vw - 24px)) !important;
|
|
1915
|
+
width: fit-content !important;
|
|
1916
|
+
max-width: min(600px, calc(100vw - 24px)) !important;
|
|
1917
|
+
max-height: calc(100vh - 48px) !important;
|
|
1918
|
+
max-height: calc(100dvh - 48px) !important;
|
|
1919
|
+
padding: 8px !important;
|
|
1920
|
+
overflow: auto !important;
|
|
1921
|
+
overscroll-behavior: contain;
|
|
1922
|
+
-webkit-overflow-scrolling: touch;
|
|
1923
|
+
}
|
|
1924
|
+
|
|
1925
|
+
.jp-CodexMenu.jp-CodexCellAttachmentPopoverMenu {
|
|
1926
|
+
min-width: 220px;
|
|
1927
|
+
width: fit-content;
|
|
1928
|
+
max-width: min(320px, calc(100vw - 24px));
|
|
1929
|
+
padding: 8px;
|
|
1930
|
+
box-shadow: 0 12px 26px rgba(2, 6, 23, 0.16);
|
|
1931
|
+
}
|
|
1932
|
+
|
|
1933
|
+
.jp-CodexMenu.jp-CodexContextPopover {
|
|
1934
|
+
min-width: 176px;
|
|
1935
|
+
width: fit-content;
|
|
1936
|
+
max-width: min(280px, calc(100vw - 24px));
|
|
1937
|
+
border-radius: 12px;
|
|
1938
|
+
background: color-mix(in srgb, var(--cdx-surface) 94%, transparent);
|
|
1939
|
+
box-shadow: 0 14px 30px rgba(2, 6, 23, 0.2);
|
|
1940
|
+
padding: 8px 9px;
|
|
1941
|
+
}
|
|
1942
|
+
|
|
1943
|
+
.jp-CodexCellAttachmentPopoverCard {
|
|
1944
|
+
display: grid;
|
|
1945
|
+
gap: 6px;
|
|
1946
|
+
padding: 2px;
|
|
1947
|
+
}
|
|
1948
|
+
|
|
1949
|
+
.jp-CodexCellAttachmentPopoverTitle {
|
|
1950
|
+
font-size: 11px;
|
|
1951
|
+
font-weight: 700;
|
|
1952
|
+
letter-spacing: 0.01em;
|
|
1953
|
+
color: var(--cdx-text);
|
|
1954
|
+
}
|
|
1955
|
+
|
|
1956
|
+
.jp-CodexCellAttachmentPopoverRow {
|
|
1957
|
+
display: flex;
|
|
1958
|
+
align-items: center;
|
|
1959
|
+
justify-content: space-between;
|
|
1960
|
+
gap: 10px;
|
|
1961
|
+
font-size: 11px;
|
|
1962
|
+
color: var(--cdx-muted);
|
|
1963
|
+
}
|
|
1964
|
+
|
|
1965
|
+
.jp-CodexCellAttachmentPopoverRow strong {
|
|
1966
|
+
color: var(--cdx-text);
|
|
1967
|
+
font-family: var(--cdx-mono);
|
|
1968
|
+
font-size: 11px;
|
|
1969
|
+
font-weight: 700;
|
|
1970
|
+
}
|
|
1971
|
+
|
|
1972
|
+
.jp-CodexCellAttachmentDot {
|
|
1973
|
+
width: 9px;
|
|
1974
|
+
height: 9px;
|
|
1975
|
+
border-radius: 999px;
|
|
1976
|
+
display: inline-block;
|
|
1977
|
+
border: 1px solid color-mix(in srgb, var(--cdx-border) 80%, transparent);
|
|
1978
|
+
}
|
|
1979
|
+
|
|
1980
|
+
.jp-CodexCellAttachmentDot.is-on {
|
|
1981
|
+
background: color-mix(in srgb, var(--cdx-good) 88%, var(--cdx-text));
|
|
1982
|
+
border-color: color-mix(in srgb, var(--cdx-good) 48%, var(--cdx-border));
|
|
1983
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--cdx-good) 18%, transparent);
|
|
1984
|
+
}
|
|
1985
|
+
|
|
1986
|
+
.jp-CodexCellAttachmentDot.is-off {
|
|
1987
|
+
background: color-mix(in srgb, var(--cdx-muted) 42%, var(--cdx-surface));
|
|
1988
|
+
border-color: color-mix(in srgb, var(--cdx-border) 88%, transparent);
|
|
1989
|
+
}
|
|
1990
|
+
|
|
1550
1991
|
.jp-CodexUsageBtn {
|
|
1551
1992
|
position: relative;
|
|
1552
1993
|
}
|
|
@@ -1564,6 +2005,19 @@
|
|
|
1564
2005
|
color: color-mix(in srgb, var(--cdx-bad) 85%, var(--cdx-text));
|
|
1565
2006
|
}
|
|
1566
2007
|
|
|
2008
|
+
.jp-CodexPermissionBtn.is-warning:not(:disabled) {
|
|
2009
|
+
border-color: transparent;
|
|
2010
|
+
background: transparent;
|
|
2011
|
+
color: color-mix(in srgb, #f5b301 72%, var(--cdx-text));
|
|
2012
|
+
}
|
|
2013
|
+
|
|
2014
|
+
.jp-CodexPermissionBtn.is-warning:hover:not(:disabled),
|
|
2015
|
+
.jp-CodexPermissionBtn.is-warning.is-open:not(:disabled) {
|
|
2016
|
+
border-color: color-mix(in srgb, #f5b301 55%, var(--cdx-border));
|
|
2017
|
+
background: color-mix(in srgb, #f5b301 14%, var(--cdx-surface));
|
|
2018
|
+
color: color-mix(in srgb, #f5b301 84%, var(--cdx-text));
|
|
2019
|
+
}
|
|
2020
|
+
|
|
1567
2021
|
.jp-CodexUsageBtn.is-stale:not(:disabled),
|
|
1568
2022
|
.jp-CodexUsageBtn.is-stale:hover:not(:disabled),
|
|
1569
2023
|
.jp-CodexUsageBtn.is-stale.is-open:not(:disabled) {
|
|
@@ -1775,15 +2229,30 @@
|
|
|
1775
2229
|
color: #ffffff;
|
|
1776
2230
|
}
|
|
1777
2231
|
|
|
2232
|
+
.jp-CodexSendBtn.is-queue:not(:disabled) {
|
|
2233
|
+
border-color: color-mix(in srgb, var(--cdx-accent) 70%, var(--cdx-border));
|
|
2234
|
+
background: color-mix(in srgb, var(--cdx-accent) 92%, #0f172a);
|
|
2235
|
+
color: #ffffff;
|
|
2236
|
+
}
|
|
2237
|
+
|
|
1778
2238
|
.jp-CodexSendBtn:hover:not(:disabled) {
|
|
1779
2239
|
border-color: color-mix(in srgb, #000000 92%, var(--cdx-border));
|
|
1780
2240
|
background: color-mix(in srgb, #000000 92%, #222222);
|
|
1781
2241
|
}
|
|
1782
2242
|
|
|
2243
|
+
.jp-CodexSendBtn.is-queue:hover:not(:disabled) {
|
|
2244
|
+
border-color: color-mix(in srgb, var(--cdx-accent) 86%, var(--cdx-border));
|
|
2245
|
+
background: color-mix(in srgb, var(--cdx-accent) 96%, #0f172a);
|
|
2246
|
+
}
|
|
2247
|
+
|
|
1783
2248
|
.jp-CodexSendBtn:active:not(:disabled) {
|
|
1784
2249
|
background: color-mix(in srgb, #000000 88%, #222222);
|
|
1785
2250
|
}
|
|
1786
2251
|
|
|
2252
|
+
.jp-CodexSendBtn.is-queue:active:not(:disabled) {
|
|
2253
|
+
background: color-mix(in srgb, var(--cdx-accent) 88%, #0f172a);
|
|
2254
|
+
}
|
|
2255
|
+
|
|
1787
2256
|
.jp-CodexSendBtn:focus-visible {
|
|
1788
2257
|
outline: none;
|
|
1789
2258
|
box-shadow: 0 0 0 3px color-mix(in srgb, var(--cdx-accent) 22%, transparent);
|
package/test.py
ADDED
|
File without changes
|