codebind 0.6.9__py3-none-any.whl → 0.6.11__py3-none-any.whl

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 (19) hide show
  1. codebind/execution.py +39 -23
  2. codebind/extension.py +28 -0
  3. codebind/jupyter.py +45 -19
  4. codebind/session.py +1 -12
  5. codebind/terminal.py +50 -37
  6. {codebind-0.6.9.data → codebind-0.6.11.data}/data/share/jupyter/labextensions/codebind-jupyterlab/package.json +2 -2
  7. codebind-0.6.11.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/590.98c719a309e23852.js +1 -0
  8. codebind-0.6.11.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/remoteEntry.24258c9500a0850a.js +1 -0
  9. {codebind-0.6.9.dist-info → codebind-0.6.11.dist-info}/METADATA +7 -6
  10. codebind-0.6.11.dist-info/RECORD +24 -0
  11. {codebind-0.6.9.dist-info → codebind-0.6.11.dist-info}/WHEEL +1 -1
  12. codebind-0.6.9.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/590.dae4561c5427a855.js +0 -1
  13. codebind-0.6.9.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/remoteEntry.c10098fb6e87897c.js +0 -1
  14. codebind-0.6.9.dist-info/RECORD +0 -24
  15. {codebind-0.6.9.data → codebind-0.6.11.data}/data/share/jupyter/labextensions/codebind-jupyterlab/install.json +0 -0
  16. {codebind-0.6.9.data → codebind-0.6.11.data}/data/share/jupyter/labextensions/codebind-jupyterlab/static/style.js +0 -0
  17. {codebind-0.6.9.data → codebind-0.6.11.data}/data/share/jupyter/labextensions/codebind-jupyterlab/static/third-party-licenses.json +0 -0
  18. {codebind-0.6.9.dist-info → codebind-0.6.11.dist-info}/entry_points.txt +0 -0
  19. {codebind-0.6.9.dist-info → codebind-0.6.11.dist-info}/licenses/LICENSE +0 -0
codebind/execution.py CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import asyncio
5
6
  import sys
6
7
  from collections.abc import Callable, Iterator
7
8
  from contextlib import contextmanager
@@ -222,7 +223,7 @@ class IPythonExecutor:
222
223
  with preview_tool_output() as preview, record_tool_output(self.shell):
223
224
  result = self.shell.run_cell(cell, store_history=True)
224
225
  report = self._native_report(result)
225
- preview.show_notice(result.execution_count, report.error)
226
+ preview.show_notice(report.error)
226
227
  return report
227
228
 
228
229
  bridge = self.bridge
@@ -277,7 +278,7 @@ class IPythonExecutor:
277
278
  self.shell.events.trigger("post_execute")
278
279
  self.shell.events.trigger("post_run_cell", result)
279
280
  report = self._native_report(result)
280
- preview.show_notice(result.execution_count, report.error)
281
+ preview.show_notice(report.error)
281
282
  return report
282
283
 
283
284
  bridge = self.bridge
@@ -288,27 +289,42 @@ class IPythonExecutor:
288
289
  display_cell(cell)
289
290
  transformed = self.shell.transform_cell(cell)
290
291
  expression_outputs: list[dict[str, Any]] = []
291
- with _captured_execution(
292
- self.shell,
293
- expression_outputs,
294
- bridged=bridged,
295
- on_output=on_output,
296
- on_clear=on_clear,
297
- ) as captured:
298
- result = await self.shell.run_cell_async(
299
- cell,
300
- store_history=True,
301
- transformed_cell=transformed,
302
- )
303
- if bridged:
304
- assert bridge is not None and cell_id is not None
305
- bridge.finish_code_cell(
306
- cell_id,
307
- result.execution_count,
308
- self._notebook_outputs(result, captured, expression_outputs),
309
- )
310
- else:
311
- captured.show()
292
+ try:
293
+ with _captured_execution(
294
+ self.shell,
295
+ expression_outputs,
296
+ bridged=bridged,
297
+ on_output=on_output,
298
+ on_clear=on_clear,
299
+ ) as captured:
300
+ result = await self.shell.run_cell_async(
301
+ cell,
302
+ store_history=True,
303
+ transformed_cell=transformed,
304
+ )
305
+ # IPython records a cancellation raised inside the cell as an execution
306
+ # error. Keep it as a tool error unless this agent task was cancelled.
307
+ if asyncio.current_task() and asyncio.current_task().cancelling():
308
+ raise asyncio.CancelledError
309
+ if isinstance(result.error_before_exec or result.error_in_exec, KeyboardInterrupt):
310
+ raise KeyboardInterrupt
311
+ if bridged:
312
+ assert bridge is not None and cell_id is not None
313
+ bridge.finish_code_cell(
314
+ cell_id,
315
+ result.execution_count,
316
+ self._notebook_outputs(result, captured, expression_outputs),
317
+ )
318
+ else:
319
+ captured.show()
320
+ except BaseException:
321
+ if bridged:
322
+ assert bridge is not None and cell_id is not None
323
+ try:
324
+ bridge.cancel_code_cell(cell_id)
325
+ except Exception:
326
+ pass
327
+ raise
312
328
 
313
329
  return self._report(result, captured, expression_outputs)
314
330
 
codebind/extension.py CHANGED
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import asyncio
6
+ import inspect
6
7
  import sys
7
8
  from typing import Any
8
9
 
@@ -22,6 +23,9 @@ _STATE_ATTRIBUTE = "_codebind_extension_state"
22
23
 
23
24
 
24
25
  def _close_state(state: dict[str, Any]) -> None:
26
+ restore_control_interrupt = state.get("restore_control_interrupt")
27
+ if callable(restore_control_interrupt):
28
+ restore_control_interrupt()
25
29
  restore_output_magic = state.get("restore_output_magic")
26
30
  if callable(restore_output_magic):
27
31
  restore_output_magic()
@@ -95,6 +99,7 @@ def load_ipython_extension(ipython: InteractiveShell) -> None:
95
99
  "restore_terminal_question_mode": None,
96
100
  "terminal_history": None,
97
101
  "restore_output_magic": None,
102
+ "restore_control_interrupt": None,
98
103
  }
99
104
 
100
105
  if manager is None:
@@ -192,6 +197,29 @@ def load_ipython_extension(ipython: InteractiveShell) -> None:
192
197
 
193
198
  manager.register_target(TARGET_NAME, accept_comm)
194
199
  state["comm_target"] = accept_comm
200
+ control_handlers = getattr(ipython.kernel, "control_handlers", None)
201
+ if isinstance(control_handlers, dict):
202
+ previous_interrupt = control_handlers.get("interrupt_request")
203
+
204
+ async def interrupt_request(stream: Any, ident: Any, parent: Any) -> None:
205
+ bridge = state.get("bridge")
206
+ if isinstance(bridge, JupyterLabBridge):
207
+ bridge.request_cancel()
208
+ if callable(previous_interrupt):
209
+ result = previous_interrupt(stream, ident, parent)
210
+ if inspect.isawaitable(result):
211
+ await result
212
+
213
+ control_handlers["interrupt_request"] = interrupt_request
214
+
215
+ def restore_control_interrupt() -> None:
216
+ if control_handlers.get("interrupt_request") is interrupt_request:
217
+ if previous_interrupt is None:
218
+ control_handlers.pop("interrupt_request", None)
219
+ else:
220
+ control_handlers["interrupt_request"] = previous_interrupt
221
+
222
+ state["restore_control_interrupt"] = restore_control_interrupt
195
223
 
196
224
  def question_magic(line: str, cell: str | None = None) -> None:
197
225
  session = state.get("session")
codebind/jupyter.py CHANGED
@@ -17,6 +17,7 @@ class JupyterLabBridge:
17
17
 
18
18
  def __init__(self, comm: Any, conversation: dict[str, Any] | None) -> None:
19
19
  self._comm = comm
20
+ self._loop = asyncio.get_running_loop()
20
21
  self._question_handler: _QuestionHandler | None = None
21
22
  self._tasks: set[asyncio.Task[None]] = set()
22
23
  self._conversation = conversation
@@ -35,7 +36,8 @@ class JupyterLabBridge:
35
36
 
36
37
  def _stop(self) -> None:
37
38
  for task in self._tasks:
38
- task.cancel()
39
+ if not task.done() and not task.cancelling():
40
+ task.cancel()
39
41
  self._tasks.clear()
40
42
  for future in self._save_waiters.values():
41
43
  future.cancel()
@@ -46,6 +48,28 @@ class JupyterLabBridge:
46
48
  """Handle questions submitted by Codebind cells."""
47
49
  self._question_handler = handler
48
50
 
51
+ def request_cancel(self) -> None:
52
+ """Cancel active questions safely from shell or control-channel callbacks."""
53
+ if not self.ready:
54
+ return
55
+
56
+ def cancel_on_loop() -> None:
57
+ if not self.ready:
58
+ return
59
+ for task in tuple(self._tasks):
60
+ if not task.done() and not task.cancelling():
61
+ task.cancel()
62
+ self._comm.send({"type": "cancel_acknowledged"})
63
+
64
+ try:
65
+ current = asyncio.get_running_loop()
66
+ except RuntimeError:
67
+ current = None
68
+ if current is self._loop:
69
+ cancel_on_loop()
70
+ else:
71
+ self._loop.call_soon_threadsafe(cancel_on_loop)
72
+
49
73
  async def load_conversation(self) -> dict[str, Any] | None:
50
74
  return self._conversation
51
75
 
@@ -100,6 +124,13 @@ class JupyterLabBridge:
100
124
  )
101
125
  return True
102
126
 
127
+ def cancel_code_cell(self, cell_id: str) -> bool:
128
+ """Return an interrupted code cell to JupyterLab's idle state."""
129
+ if not self.ready:
130
+ return False
131
+ self._comm.send({"type": "code_cell_cancelled", "cell_id": cell_id})
132
+ return True
133
+
103
134
  def append_code_output(self, cell_id: str, output: dict[str, Any]) -> bool:
104
135
  """Append one live output to a running code cell."""
105
136
  if not self.ready:
@@ -180,13 +211,6 @@ class JupyterLabBridge:
180
211
  self._comm.send({"type": "markdown_cell_cancelled", "cell_id": cell_id})
181
212
  return True
182
213
 
183
- def ensure_instructions_cell(self, source: str) -> bool:
184
- """Show the conversation's immutable system instructions in the notebook."""
185
- if not self.ready:
186
- return False
187
- self._comm.send({"type": "instructions_cell", "source": source})
188
- return True
189
-
190
214
  def report_session_ready(self, error: BaseException | None = None) -> None:
191
215
  """Tell JupyterLab whether persisted conversation state is ready."""
192
216
  self._comm.send(
@@ -201,6 +225,8 @@ class JupyterLabBridge:
201
225
  )
202
226
 
203
227
  def _on_message(self, message: dict[str, Any]) -> None:
228
+ if not self.ready:
229
+ return
204
230
  data = message.get("content", {}).get("data", {})
205
231
  if not isinstance(data, dict):
206
232
  return
@@ -216,8 +242,7 @@ class JupyterLabBridge:
216
242
  future.set_result(None)
217
243
  return
218
244
  if data.get("type") == "cancel":
219
- for task in tuple(self._tasks):
220
- task.cancel()
245
+ self.request_cancel()
221
246
  return
222
247
  if data.get("type") != "question":
223
248
  return
@@ -245,15 +270,16 @@ class JupyterLabBridge:
245
270
  if self._question_handler is None:
246
271
  raise RuntimeError("Codebind is not ready to receive questions.")
247
272
  await self._question_handler(question, notebook)
248
- except asyncio.CancelledError:
273
+ except (asyncio.CancelledError, KeyboardInterrupt):
249
274
  cancelled = True
250
275
  except Exception as exception:
251
276
  error = {"type": type(exception).__name__, "message": str(exception)}
252
- self._comm.send(
253
- {
254
- "type": "question_finished",
255
- "cell_id": cell_id,
256
- "error": error,
257
- "cancelled": cancelled,
258
- }
259
- )
277
+ if self.ready:
278
+ self._comm.send(
279
+ {
280
+ "type": "question_finished",
281
+ "cell_id": cell_id,
282
+ "error": error,
283
+ "cancelled": cancelled,
284
+ }
285
+ )
codebind/session.py CHANGED
@@ -130,12 +130,8 @@ class Session:
130
130
  conversation.append_message(message, turn_id)
131
131
  for turn_id in unfinished:
132
132
  conversation.append("turn_finished", turn_id=turn_id, status="interrupted")
133
- sent_instructions = False
134
133
  if not conversation.events:
135
134
  conversation.append_message(SystemMessage(self.instructions), "system")
136
- if self.bridge is not None:
137
- self.bridge.ensure_instructions_cell(self.instructions)
138
- sent_instructions = True
139
135
  if unfinished or value is None:
140
136
  await self._await_durable(self.store.save(conversation.as_dict()))
141
137
  self.conversation = conversation
@@ -144,13 +140,6 @@ class Session:
144
140
  (message for message in reversed(self._messages) if isinstance(message, AIMessage)),
145
141
  None,
146
142
  )
147
- if self.bridge is not None and not sent_instructions:
148
- system = next(
149
- (message for message in self._messages if isinstance(message, SystemMessage)),
150
- None,
151
- )
152
- if system is not None and isinstance(system.content, str):
153
- self.bridge.ensure_instructions_cell(system.content)
154
143
 
155
144
  async def aload(self) -> None:
156
145
  """Load persisted state and prepare the frontend without starting a turn."""
@@ -553,7 +542,7 @@ class Session:
553
542
  self._tool_message(report, identifier),
554
543
  turn_id,
555
544
  )
556
- except asyncio.CancelledError:
545
+ except (asyncio.CancelledError, KeyboardInterrupt):
557
546
  self._cancel_assistant_stream(assistant_cell_id)
558
547
  await self._seal_interrupted_calls(turn_id)
559
548
  await self._append_event("turn_finished", turn_id=turn_id, status="cancelled")
codebind/terminal.py CHANGED
@@ -3,7 +3,6 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import ast
6
- import shutil
7
6
  import sys
8
7
  from collections.abc import Callable, Iterator
9
8
  from contextlib import contextmanager
@@ -23,7 +22,8 @@ from rich.markdown import Markdown
23
22
 
24
23
  _MISSING = object()
25
24
  _IMAGE_FORMATS = ("image/png", "image/jpeg", "image/svg+xml")
26
- _MAXIMUM_VISIBLE_OUTPUT_LINES = 10
25
+ _MAXIMUM_VISIBLE_OUTPUT_LINES = 3
26
+ _MAXIMUM_VISIBLE_OUTPUT_CHARACTERS_PER_LINE = 80
27
27
 
28
28
 
29
29
  def _plain_ansi(value: str) -> str:
@@ -192,66 +192,80 @@ class TerminalCellHistory:
192
192
  class _OutputPreview:
193
193
  """Limit only terminal painting; IPython still records every written byte."""
194
194
 
195
- def __init__(self, maximum_lines: int, maximum_characters: int) -> None:
195
+ def __init__(self, maximum_lines: int, maximum_characters_per_line: int) -> None:
196
196
  self.maximum_lines = maximum_lines
197
- self.maximum_characters = maximum_characters
197
+ self.maximum_characters_per_line = maximum_characters_per_line
198
198
  self.visible_lines = 0
199
+ self.characters_on_line = 0
200
+ self.line_truncated = False
199
201
  self.visible_characters = 0
200
202
  self.hidden_line_breaks = 0
201
203
  self.hidden_has_tail = False
202
204
  self.hidden_characters = 0
203
- self.truncated = False
204
205
  self.visible_ends_line = True
205
206
 
206
207
  def _hide(self, data: str) -> None:
207
- self.truncated = True
208
208
  self.hidden_characters += len(data)
209
209
  self.hidden_line_breaks += data.count("\n") + data.count("\r") - data.count("\r\n")
210
210
  self.hidden_has_tail = not data.endswith(("\n", "\r"))
211
211
 
212
+ def _paint(self, stream, text: str) -> None:
213
+ if not text:
214
+ return
215
+ if stream.isatty():
216
+ stream.write("\x1b[90m")
217
+ stream.write(text)
218
+ if stream.isatty():
219
+ stream.write("\x1b[0m")
220
+ self.visible_characters += len(text)
221
+
212
222
  def write(self, stream, data: str) -> int:
213
223
  for piece in data.splitlines(keepends=True):
214
- remaining = self.maximum_characters - self.visible_characters
215
- if self.truncated or self.visible_lines >= self.maximum_lines or remaining <= 0:
224
+ if self.visible_lines >= self.maximum_lines:
216
225
  self._hide(piece)
217
226
  continue
218
- visible = piece[:remaining]
219
- if len(visible) < len(piece) and "\x1b" in visible:
220
- # Never leave a partially printed ANSI escape sequence on screen.
221
- visible = ""
227
+
228
+ if piece.endswith("\r\n"):
229
+ body, ending = piece[:-2], "\r\n"
230
+ elif piece.endswith(("\n", "\r")):
231
+ body, ending = piece[:-1], piece[-1]
232
+ else:
233
+ body, ending = piece, ""
234
+
235
+ visible = ""
236
+ if not self.line_truncated:
237
+ remaining = self.maximum_characters_per_line - self.characters_on_line
238
+ visible = body[:remaining]
239
+ self.characters_on_line += len(visible)
240
+ if len(body) > remaining:
241
+ visible += "…"
242
+ self.line_truncated = True
243
+ if ending:
244
+ visible += ending
245
+ self.visible_lines += 1
246
+ self.characters_on_line = 0
247
+ self.line_truncated = False
222
248
  if visible:
223
- if stream.isatty():
224
- stream.write("\x1b[90m")
225
- stream.write(visible)
226
- if stream.isatty():
227
- stream.write("\x1b[0m")
228
- self.visible_characters += len(visible)
229
- self.visible_ends_line = visible.endswith(("\n", "\r"))
230
- if self.visible_ends_line:
231
- self.visible_lines += 1
232
- if len(visible) < len(piece):
233
- self._hide(piece[len(visible) :])
249
+ self._paint(stream, visible)
250
+ self.visible_ends_line = bool(ending)
234
251
  return len(data)
235
252
 
236
- def show_notice(self, number: int, error: dict[str, str] | None = None) -> None:
253
+ def show_notice(self, error: dict[str, str] | None = None) -> None:
237
254
  if self.visible_characters and not self.visible_ends_line:
238
255
  sys.stdout.write("\n")
239
256
  self.visible_ends_line = True
240
257
  if not self.hidden_characters:
241
258
  return
242
- if sys.stdout.isatty():
243
- sys.stdout.write("\x1b[0m")
259
+ terminal = sys.stdout.isatty()
260
+ if terminal:
261
+ sys.stdout.write("\x1b[90m")
244
262
  hidden_lines = self.hidden_line_breaks + int(self.hidden_has_tail)
245
263
  label = "line" if hidden_lines == 1 else "lines"
246
- sys.stdout.write(
247
- f"… {hidden_lines:,} more output {label}. Run %output {number} to view all.\n"
248
- )
264
+ sys.stdout.write(f"… {hidden_lines:,} more output {label}\n")
249
265
  if error is not None:
250
- if sys.stdout.isatty():
251
- sys.stdout.write("\x1b[90m")
252
266
  sys.stdout.write(f"{error['type']}: {error['message']}\n")
253
- if sys.stdout.isatty():
254
- sys.stdout.write("\x1b[0m")
267
+ if terminal:
268
+ sys.stdout.write("\x1b[0m")
255
269
 
256
270
 
257
271
  class _PreviewStream:
@@ -276,10 +290,10 @@ class _PreviewStream:
276
290
  @contextmanager
277
291
  def preview_tool_output(
278
292
  maximum_lines: int = _MAXIMUM_VISIBLE_OUTPUT_LINES,
293
+ maximum_characters_per_line: int = _MAXIMUM_VISIBLE_OUTPUT_CHARACTERS_PER_LINE,
279
294
  ) -> Iterator[_OutputPreview]:
280
295
  """Show a compact preview while keeping the tool cell's complete native output."""
281
- columns = shutil.get_terminal_size(fallback=(80, 24)).columns
282
- preview = _OutputPreview(maximum_lines, maximum_lines * max(20, columns))
296
+ preview = _OutputPreview(maximum_lines, maximum_characters_per_line)
283
297
  stdout, stderr = sys.stdout, sys.stderr
284
298
  preview_stdout = _PreviewStream(stdout, preview)
285
299
  preview_stderr = _PreviewStream(stderr, preview)
@@ -395,7 +409,6 @@ def show_input(shell: TerminalInteractiveShell, cell: str) -> None:
395
409
  style=style,
396
410
  color_depth=shell.color_depth,
397
411
  )
398
- sys.stdout.write("\n")
399
412
 
400
413
 
401
414
  def install_markdown_renderer(shell: TerminalInteractiveShell) -> Callable[[], None]:
@@ -408,7 +421,7 @@ def install_markdown_renderer(shell: TerminalInteractiveShell) -> Callable[[], N
408
421
 
409
422
  def render(text: str, _metadata: object) -> None:
410
423
  sys.stdout.write("\n")
411
- Console(file=sys.stdout, soft_wrap=True, no_color=shell.colors.lower() == "nocolor").print(
424
+ Console(file=sys.stdout, no_color=shell.colors.lower() == "nocolor").print(
412
425
  Markdown(text)
413
426
  )
414
427
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codebind-jupyterlab",
3
- "version": "0.6.5",
3
+ "version": "0.6.11",
4
4
  "description": "Native JupyterLab cells and Question cells for Codebind.",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",
@@ -31,7 +31,7 @@
31
31
  "extension": true,
32
32
  "outputDir": "../data/share/jupyter/labextensions/codebind-jupyterlab",
33
33
  "_build": {
34
- "load": "static/remoteEntry.c10098fb6e87897c.js",
34
+ "load": "static/remoteEntry.24258c9500a0850a.js",
35
35
  "extension": "./extension"
36
36
  }
37
37
  }
@@ -0,0 +1 @@
1
+ "use strict";(self.rspackChunkcodebind_jupyterlab=self.rspackChunkcodebind_jupyterlab||[]).push([[590],{509(e,t,n){n.r(t);var o=n(511),l=n(343),d=n(99),i=n(171),r=n(241);let s="codebind:insert-question",c="codebind:toggle-question-mode",a="codebind:run-question",u="jp-CodebindQuestionCell",m=new WeakMap,p=new WeakMap;function g(e){let t=e.getMetadata("codebind");return"object"!=typeof t||null===t||"question"!==t.kind?null:{kind:"question",status:"draft"===t.status?"draft":"sent"}}function f(e){let t=e.getMetadata("codebind");if("object"!=typeof t||null===t)return null;let n=t.kind;return"string"==typeof n?n:null}function y(e){let t={},n=[];for(let[o,l]of Object.entries(e))o.startsWith("text/")||["image/png","image/jpeg","image/webp","image/gif","image/svg+xml"].includes(o)||"application/json"===o||"application/vnd.jupyter.stdout"===o||"application/vnd.jupyter.stderr"===o?void 0!==l&&(t[o]=l):n.push(o);return n.length>0&&(t.omitted_mime_types=n),t}function w(e){return d.isStream(e)?{type:"stream",name:e.name,text:e.text}:d.isError(e)?{type:"error",name:e.ename,message:e.evalue,traceback:e.traceback}:d.isExecuteResult(e)?{type:"result",execution_count:e.execution_count,data:y(e.data)}:d.isDisplayData(e)?{type:"display",data:y(e.data)}:{type:e.output_type}}function _(e){return e.replace(/(^|[^\\])\\([()[\]])/g,"$1\\\\$2")}function b(e){let t=m.get(e);for(let n of e.content.widgets){let e=g(n.model);n.node.classList.toggle(u,null!==e);let o=n.node.querySelector(".jp-InputPrompt");o&&(e?(n.readOnly="sent"===e.status,o.dataset.codebindQuestion="true",o.style.color="#a855f7",o.textContent=t?.runningQuestions.has(n.model.id)?"[*]:":"[ ]:"):o.dataset.codebindQuestion&&(delete o.dataset.codebindQuestion,o.style.removeProperty("color"),o.textContent=""))}}function k(e){let t=e.content;for(let e of t.widgets)"instructions"===f(e.model)&&(e.node.hidden=!0);if(t.activeCell&&"instructions"===f(t.activeCell.model)){let e=t.widgets.findIndex(e=>"instructions"!==f(e.model));e>=0&&(t.activeCellIndex=e)}}function C(e){let t=e.sessionContext.session?.kernel;if(!t)return;let n=m.get(e)??{comm:null,kernel:null,registeredKernel:null,connectKernel:null,disconnectKernel:null,ready:null,resolveReady:null,rejectReady:null,connectOnIdle:!1,runningQuestions:new Map,questionTimers:new Map,sessionReady:!1,cancelAcknowledged:!1,questionMode:!1,questionButton:null,knownCellIds:new Set(e.content.widgets.map(e=>e.model.id)),pendingQuestionCellIds:new Set};if(m.set(e,n),n.registeredKernel===t)return;n.disconnectKernel?.(),n.rejectReady?.(Error("The notebook kernel changed.")),n.comm?.close(),n.registeredKernel=t,n.connectKernel=null,n.disconnectKernel=null,n.ready=null,n.resolveReady=null,n.rejectReady=null,n.connectOnIdle=!1;n.kernel&&n.kernel!==t&&p.get(n.kernel)?.delete(n),n.kernel=t;let d=p.get(t);if(!d){d=new Set,p.set(t,d);let e=t.interrupt.bind(t);t.interrupt=async()=>{let n=[...d??[]].filter(e=>e.runningQuestions.size>0);for(let e of n)e.cancelAcknowledged=!1;if(n.length>0)try{let e=r.KernelMessage.createMessage({session:t.clientId,username:t.username,channel:"control",msgType:"interrupt_request",content:{}});t.sendControlMessage(e,!0).done.catch(()=>void 0)}catch{}for(let e=0;n.length>0&&e<150;e+=1){if(n.every(e=>0===e.runningQuestions.size||e.cancelAcknowledged))return;await new Promise(e=>setTimeout(e,20))}return e()}}for(let e of(d.add(n),n.comm=null,n.runningQuestions.clear(),n.questionTimers.values()))window.clearTimeout(e);n.questionTimers.clear(),n.sessionReady=!1,n.cancelAcknowledged=!1;let i=null,s=new Map,c=new Map,a=()=>{if(!i)return;let e=i;i=null,e.parentModel&&null!==e.parentExecutionCount&&(e.parentModel.executionCount=e.parentExecutionCount)},u=()=>{if(n.comm||"idle"!==t.status||!e.content.model)return;let d=t.createComm("codebind");d.commsOverSubshells=r.CommsOverSubshells.Disabled,n.comm=d,n.sessionReady=!1,n.ready=new Promise((e,t)=>{n.resolveReady=e,n.rejectReady=t}),n.ready.catch(()=>void 0),d.onMsg=r=>{let u,m=r.content.data;if(!function(e){if("object"!=typeof e||null===e)return!1;if("markdown_cell"===e.type)return"string"==typeof e.source;if("markdown_cell_started"===e.type||"markdown_cell_updated"===e.type||"markdown_cell_finished"===e.type)return"string"==typeof e.cell_id&&"string"==typeof e.source;if("markdown_cell_cancelled"===e.type)return"string"==typeof e.cell_id;if("code_cell_started"===e.type)return"string"==typeof e.cell_id&&"string"==typeof e.source;if("code_cell_cancelled"===e.type)return"string"==typeof e.cell_id;if("code_cell_output"===e.type)return"string"==typeof e.cell_id&&"object"==typeof e.output&&null!==e.output;if("code_cell_clear"===e.type)return"string"==typeof e.cell_id&&"boolean"==typeof e.wait;if("question_finished"===e.type){let t=e.error;return"string"==typeof e.cell_id&&"boolean"==typeof e.cancelled&&(null===t||"object"==typeof t&&"string"==typeof t.type&&"string"==typeof t.message)}if("question_started"===e.type)return"string"==typeof e.cell_id;if("cancel_acknowledged"===e.type)return!0;if("session_ready"===e.type){let t=e.error;return null===t||"object"==typeof t&&"string"==typeof t.type&&"string"==typeof t.message}return"conversation_save"===e.type?"string"==typeof e.request_id&&"object"==typeof e.conversation&&null!==e.conversation:"code_cell_finished"===e.type&&"string"==typeof e.cell_id&&("number"==typeof e.execution_count||null===e.execution_count)&&Array.isArray(e.outputs)}(m))return;if("conversation_save"===m.type){let t=e.content.model;return t?(t.setMetadata("codebind",m.conversation),void e.context.save().then(()=>{d.send({type:"conversation_saved",request_id:m.request_id,error:null})},e=>{d.send({type:"conversation_saved",request_id:m.request_id,error:String(e)})})):void d.send({type:"conversation_saved",request_id:m.request_id,error:"Notebook model is unavailable."})}if("session_ready"===m.type){n.sessionReady=null===m.error,m.error?(n.rejectReady?.(Error(m.error.message)),(0,o.showErrorMessage)(`Codebind could not load: ${m.error.type}`,m.error.message)):n.resolveReady?.(),n.resolveReady=null,n.rejectReady=null;return}if("question_started"===m.type){let e=n.questionTimers.get(m.cell_id);void 0!==e&&(window.clearTimeout(e),n.questionTimers.delete(m.cell_id));return}if("cancel_acknowledged"===m.type){n.cancelAcknowledged=!0;return}if("question_finished"===m.type){let t=n.questionTimers.get(m.cell_id);void 0!==t&&(window.clearTimeout(t),n.questionTimers.delete(m.cell_id)),n.runningQuestions.delete(m.cell_id),0===n.runningQuestions.size&&(n.cancelAcknowledged=!1),b(e),a(),m.error&&!m.cancelled&&(0,o.showErrorMessage)(`Codebind question: ${m.error.type}`,m.error.message);return}if("markdown_cell_updated"===m.type||"markdown_cell_finished"===m.type){let t=c.get(m.cell_id);if(!t)return;t.sharedModel.setSource(_(m.source));let n=e.content.widgets.find(e=>e.model.id===t.id);n instanceof l.MarkdownCell&&(n.rendered=!0),"markdown_cell_finished"===m.type&&c.delete(m.cell_id);return}if("markdown_cell_cancelled"===m.type){let t=c.get(m.cell_id);if(c.delete(m.cell_id),!t)return;let n=e.content.widgets.findIndex(e=>e.model.id===t.id);n>=0&&e.content.model?.sharedModel.deleteCell(n);return}if("code_cell_output"===m.type)return void s.get(m.cell_id)?.outputs.add(m.output);if("code_cell_clear"===m.type)return void s.get(m.cell_id)?.outputs.clear(m.wait);if("code_cell_finished"===m.type){let e=s.get(m.cell_id);if(s.delete(m.cell_id),!e)return;e.outputs.fromJSON(m.outputs),e.executionCount=m.execution_count,e.executionState="idle",i&&null===i.parentExecutionCount&&null!==m.execution_count&&(i.parentExecutionCount=m.execution_count-1);return}if("code_cell_cancelled"===m.type){let e=s.get(m.cell_id);s.delete(m.cell_id),e&&(e.executionState="idle");return}if("markdown_cell_started"===m.type)u={type:"markdown_cell",source:m.source};else{if("markdown_cell"!==m.type&&"code_cell_started"!==m.type)return;u=m}(()=>{if(i)return;let n=e.content,o=n.widgets.findIndex(e=>"code"===e.model.type&&"running"===e.model.executionState);i={parentModel:o>=0?n.widgets[o].model:null,parentExecutionCount:null};let l=(e,n)=>{"idle"===n&&(t.statusChanged.disconnect(l),a())};return t.statusChanged.connect(l)})();let p=function(e,t){let n=e.content,o=n.model;if(!o)return null;let d=n.widgets.length;"code_cell_started"===t.type?o.sharedModel.insertCell(d,{cell_type:"code",source:t.source,metadata:{trusted:!0,collapsed:!0,editable:!1,deletable:!1,codebind:{kind:"tool"}},execution_count:null,outputs:[]}):o.sharedModel.insertCell(d,{cell_type:"markdown",source:_(t.source),metadata:{editable:!1,deletable:!1,codebind:{kind:"assistant"}}});let i=n.widgets[d]??null;return i&&(i.readOnly=!0),i instanceof l.MarkdownCell&&(i.rendered=!0),i?.model??null}(e,u);"code_cell_started"===m.type&&p?.type==="code"&&(p.executionState="running",s.set(m.cell_id,p)),"markdown_cell_started"===m.type&&p&&c.set(m.cell_id,p)},d.onClose=()=>{if(n.comm===d){let t=n.sessionReady;for(let e of s.values())e.executionState="idle";for(let e of(s.clear(),n.runningQuestions.clear(),n.cancelAcknowledged=!1,n.questionTimers.values()))window.clearTimeout(e);n.questionTimers.clear(),b(e),n.rejectReady?.(Error("Codebind is not loaded in this kernel. Run %load_ext codebind.")),n.comm=null,n.sessionReady=!1,n.ready=null,n.resolveReady=null,n.rejectReady=null,n.connectOnIdle=t}};let u=e.content.model?.getMetadata("codebind");d.open({conversation:"object"==typeof u&&null!==u?u:null})};n.connectKernel=u;let g=(e,t)=>{"idle"===t&&n.connectOnIdle&&(n.connectOnIdle=!1,u())},f=(e,t)=>{r.KernelMessage.isExecuteInputMsg(t)&&/(?:^|\n)\s*%(?:re)?load_ext\s+codebind(?:\s|$)/.test(t.content.code)&&(n.connectOnIdle=!0)};t.statusChanged.connect(g),t.iopubMessage.connect(f),n.disconnectKernel=()=>{t.statusChanged.disconnect(g),t.iopubMessage.disconnect(f)},e.context.ready.then(()=>{e.content.model?.getMetadata("codebind")&&(n.connectOnIdle=!0,u())})}function h(e){let t=e.content,n=t.model;if(!n)return;t.activeCell?"markdown"!==t.activeCell.model.type&&i.NotebookActions.changeCellType(t,"markdown"):(n.sharedModel.insertCell(0,{cell_type:"markdown",source:"",metadata:{}}),t.activeCellIndex=0);let o=t.activeCell;o&&null!==f(o.model)||(o?.model.setMetadata("codebind",{kind:"question",status:"draft"}),o instanceof l.MarkdownCell&&(o.rendered=!1),t.mode="edit",b(e),o?.editor?.focus())}function v(e){let t=m.get(e);if(!t)return;k(e);let n=e.content.widgets,o=new Set(n.map(e=>e.model.id)),l=n.filter(e=>!t.knownCellIds.has(e.model.id));for(let e of(t.knownCellIds=o,t.pendingQuestionCellIds))o.has(e)||t.pendingQuestionCellIds.delete(e);if(t.questionMode)for(let e of l)null===f(e.model)&&t.pendingQuestionCellIds.add(e.model.id);b(e),t.questionMode&&e.content.activeCell&&t.pendingQuestionCellIds.delete(e.content.activeCell.model.id)&&h(e)}function M(e){let t=m.get(e);t&&q(e,!t.questionMode)}function q(e,t){let n=m.get(e);if(n){if(n.questionMode=t,!n.questionMode){n.pendingQuestionCellIds.clear();let t=e.content.activeCell;t&&g(t.model)?.status==="draft"&&(t.model.deleteMetadata("codebind"),i.NotebookActions.changeCellType(e.content,"code"),e.content.mode="edit",e.content.activeCell?.editor?.focus())}n.questionButton&&(n.questionButton.pressed=n.questionMode),n.questionMode&&e.content.activeCell&&null===f(e.content.activeCell.model)&&h(e)}}async function x(e){let t=e.content,n=t.activeCell;if(!n||!g(n.model))return;await e.sessionContext.ready,C(e);let d=m.get(e),i=d?.registeredKernel;if(!d||!i)return void await (0,o.showErrorMessage)("Codebind is not connected","Start the notebook kernel before sending a Question cell.");try{if("dead"===i.status)throw Error("The notebook kernel stopped.");if("idle"!==i.status&&await new Promise((e,t)=>{let n=(o,l)=>{("idle"===l||"dead"===l)&&(i.statusChanged.disconnect(n),"idle"===l?e():t(Error("The notebook kernel stopped.")))};i.statusChanged.connect(n)}),d.connectKernel?.(),!d.ready)throw Error("Run %load_ext codebind in this kernel.");await d.ready}catch(e){await (0,o.showErrorMessage)("Codebind could not load",String(e));return}if(!d.sessionReady||!d.comm)return void await (0,o.showErrorMessage)("Codebind is not connected","Run %load_ext codebind in this kernel before sending a Question cell.");if(d.runningQuestions.size>0)return void await (0,o.showErrorMessage)("Codebind is busy","Wait for the current question to finish before sending another.");let r=n.model.sharedModel.getSource().trim();if(!r)return void await (0,o.showErrorMessage)("Empty Codebind question","Write a question before sending it.");d.runningQuestions.set(n.model.id,n.model),d.cancelAcknowledged=!1,n.model.sharedModel.setSource(_(r)),n.model.setMetadata("codebind",{kind:"question",status:"sent"}),n.model.setMetadata("editable",!1),n.model.setMetadata("deletable",!1),n.readOnly=!0,b(e),n instanceof l.MarkdownCell&&(n.rendered=!0),t.mode="command";let s=window.setTimeout(()=>{d.questionTimers.has(n.model.id)&&(d.questionTimers.delete(n.model.id),d.runningQuestions.delete(n.model.id),n.model.setMetadata("codebind",{kind:"question",status:"draft"}),n.model.setMetadata("editable",!0),n.model.setMetadata("deletable",!0),n.readOnly=!1,b(e),(0,o.showErrorMessage)("Codebind did not receive the Question","The kernel did not acknowledge it. Reload Codebind and send it again."))},1e4);d.questionTimers.set(n.model.id,s),d.comm.send({type:"question",cell_id:n.model.id,question:r,notebook:function(e){let t=[];for(let n of e.content.widgets){if(null!==f(n.model))continue;let e=n.model.type;if("code"!==e&&"markdown"!==e&&"raw"!==e)continue;let o={id:n.model.id,type:e,source:n.model.sharedModel.getSource(),execution_count:null,outputs:[],attachments:{}};if("code"===e){let e=n.model.toJSON();o.execution_count=e.execution_count,o.outputs=e.outputs.map(w)}else{let e=n.model.toJSON().attachments;if(e){let t={};for(let[n,o]of Object.entries(e))o&&(t[n]=y(o));o.attachments=t}}t.push(o)}return t}(e)})}function T(e,t){let n={comm:null,kernel:null,registeredKernel:null,connectKernel:null,disconnectKernel:null,ready:null,resolveReady:null,rejectReady:null,connectOnIdle:!1,runningQuestions:new Map,questionTimers:new Map,sessionReady:!1,cancelAcknowledged:!1,questionMode:!1,questionButton:null,knownCellIds:new Set(e.content.widgets.map(e=>e.model.id)),pendingQuestionCellIds:new Set};m.set(e,n);let l=!1,d=()=>{if(!l){if(!n.kernel){n.runningQuestions.size>0&&(n.cancelAcknowledged=!1,n.comm?.send({type:"cancel"}));return}l=!0,n.kernel.interrupt().catch(e=>{n.runningQuestions.size>0&&(0,o.showErrorMessage)("Codebind could not interrupt",String(e))}).finally(()=>{l=!1})}},i=e=>{0!==n.runningQuestions.size&&(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),d())},r=n=>{"Tab"===n.key&&n.shiftKey&&!n.ctrlKey&&!n.altKey&&!n.metaKey&&n.target instanceof Node&&e.content.node.contains(n.target)&&(n.preventDefault(),n.stopPropagation(),n.stopImmediatePropagation(),M(e),t.commands.notifyCommandChanged(c))},s=o=>{0===n.runningQuestions.size||t.shell.currentWidget!==e||"c"!==o.key.toLowerCase()||!o.ctrlKey||o.altKey||o.metaKey||o.shiftKey||(o.preventDefault(),o.stopPropagation(),o.stopImmediatePropagation(),d())};e.node.addEventListener("keydown",r,!0),window.addEventListener("keydown",s,!0);let a=null,u=()=>{let t=e.toolbar.node.querySelector('[data-command="notebook:interrupt-kernel"]');t!==a&&(a?.removeEventListener("click",i,!0),a=t,a?.addEventListener("click",i,!0))},g=new MutationObserver(u);g.observe(e.toolbar.node,{childList:!0,subtree:!0});let f=new MutationObserver(()=>{window.setTimeout(()=>v(e),0)});f.observe(e.content.node,{childList:!0,subtree:!0}),u(),e.disposed.connect(()=>{for(let t of(g.disconnect(),f.disconnect(),a?.removeEventListener("click",i,!0),e.node.removeEventListener("keydown",r,!0),window.removeEventListener("keydown",s,!0),n.disconnectKernel?.(),n.rejectReady?.(Error("The notebook closed.")),n.comm?.close(),n.kernel&&p.get(n.kernel)?.delete(n),n.questionTimers.values()))window.clearTimeout(t);n.questionTimers.clear()});let y=new o.ToolbarButton({label:"Question",tooltip:"Toggle Question mode for the selected and newly created cells",onClick:()=>{q(e,y.pressed),t.commands.notifyCommandChanged(c)}});n.questionButton=y,e.toolbar.insertItem(10,"codebindQuestion",y),e.content.modelContentChanged.connect(()=>{v(e),window.setTimeout(()=>v(e),0)}),e.content.activeCellChanged.connect(()=>v(e)),e.context.ready.then(()=>{k(e),e.content.model?.cells.changed.connect(()=>{v(e),window.setTimeout(()=>v(e),0)}),v(e)}),e.sessionContext.ready.then(()=>C(e)),e.sessionContext.kernelChanged.connect(()=>C(e))}let E={id:"codebind-jupyterlab:plugin",description:"Insert Codebind executions as native notebook cells.",autoStart:!0,requires:[i.INotebookTracker],activate:(e,t)=>{e.commands.addCommand(s,{label:"Use Selected Cell as Codebind Question",execute:()=>{let e=t.currentWidget;e&&h(e)}}),e.commands.addCommand(c,{label:"Toggle Codebind Question Mode",isToggled:()=>{let e=t.currentWidget;return!!e&&(m.get(e)?.questionMode??!1)},execute:()=>{let n=t.currentWidget;n&&(M(n),e.commands.notifyCommandChanged(c))}}),e.commands.addCommand(a,{label:"Send Codebind Question",isEnabled:()=>{let e=t.currentWidget?.content.activeCell;return!!e&&null!==g(e.model)},execute:async()=>{let e=t.currentWidget;e&&await x(e)}}),e.commands.addKeyBinding({command:a,keys:["Shift Enter"],selector:`.jp-Notebook.jp-mod-editMode .${u}`}),e.commands.addKeyBinding({command:a,keys:["Shift Enter"],selector:`.jp-Notebook.jp-mod-commandMode .${u}`}),e.contextMenu.addItem({command:s,selector:".jp-Notebook .jp-Cell",rank:8}),t.forEach(t=>T(t,e)),t.widgetAdded.connect((t,n)=>T(n,e))}};n.d(t,{},{default:E})}}]);
@@ -0,0 +1 @@
1
+ var _JUPYTERLAB;(()=>{"use strict";var e,n,r,t,o,i,u,a,l,c,s,f,p,d,h,g,v,y,m,b,S,k,j,w,E,x,T,M,P,V,q,A,C,O,D,_,L,N={457(e,n,r){var t={"./index":()=>r.e(590).then(()=>()=>r(509)),"./extension":()=>r.e(590).then(()=>()=>r(509))},o=function(e,n){return r.R=n,n=r.o(t,e)?t[e]():Promise.resolve().then(()=>{throw Error('Module "'+e+'" does not exist in container.')}),r.R=void 0,n},i=function(e,n){if(r.S){var t="default",o=r.S[t];if(o&&o!==e)throw Error("Container initialization failed as it has already been initialized with a different share scope");return r.S[t]=e,r.I(t,n)}};r.d(n,{get:()=>o,init:()=>i})}},$={};function z(e){var n=$[e];if(void 0!==n)return n.exports;var r=$[e]={exports:{}};return N[e](r,r.exports,z),r.exports}z.m=N,z.c=$,z.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return z.d(n,{a:n}),n},z.d=(e,n,r)=>{var t=(n,r)=>{for(var t in n)z.o(n,t)&&!z.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,[r]:n[t]})};t(n,"get"),t(r,"value")},z.f={},z.e=e=>Promise.all(Object.keys(z.f).reduce((n,r)=>(z.f[r](e,n),n),[])),z.u=e=>""+e+".98c719a309e23852.js?v=98c719a309e23852",z.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})(),z.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),I={},z.l=function(e,n,r,t){if(I[e])return void I[e].push(n);if(void 0!==r)for(var o,i,u=document.getElementsByTagName("script"),a=0;a<u.length;a++){var l=u[a];if(l.getAttribute("src")==e||l.getAttribute("data-rspack")=="codebind-jupyterlab:"+r){o=l;break}}o||(i=!0,(o=document.createElement("script")).timeout=120,z.nc&&o.setAttribute("nonce",z.nc),o.setAttribute("data-rspack","codebind-jupyterlab:"+r),o.src=e),I[e]=[n];var c=function(n,r){o.onerror=o.onload=null,clearTimeout(s);var t=I[e];if(delete I[e],o.parentNode&&o.parentNode.removeChild(o),t&&t.forEach(function(e){return e(r)}),n)return n(r)},s=setTimeout(c.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=c.bind(null,o.onerror),o.onload=c.bind(null,o.onload),i&&document.head.appendChild(o)},z.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},z.S={},z.initializeSharingData={scopeToSharingDataMapping:{default:[{name:"codebind-jupyterlab",version:"0.6.11",factory:()=>z.e(590).then(()=>()=>z(509)),eager:0,treeShakingMode:null}]},uniqueName:"codebind-jupyterlab"},R={},U={},z.I=function(e,n){n||(n=[]);var r=U[e];if(r||(r=U[e]={}),!(n.indexOf(r)>=0)){if(n.push(r),R[e])return R[e];z.o(z.S,e)||(z.S[e]={});var t=z.S[e],o=function(e){"u">typeof console&&console.warn&&console.warn(e)},i=z.initializeSharingData.uniqueName,u=function(e,n,r,o){var u=t[e]=t[e]||{},a=u[n];(!a||!a.loaded&&(!o!=!a.eager?o:i>a.from))&&(u[n]={get:r,from:i,eager:!!o})},a=function(r){var t=function(e){o("Initialization of sharing external failed: "+e)};try{var i=z(r);if(!i)return;var u=function(r){return r&&r.init&&r.init(z.S[e],n)};if(i.then)return l.push(i.then(u,t));var a=u(i);if(a&&a.then)return l.push(a.catch(t))}catch(e){t(e)}},l=[],c=z.initializeSharingData.scopeToSharingDataMapping;return(c[e]&&c[e].forEach(function(e){"object"==typeof e?u(e.name,e.version,e.factory,e.eager):a(e)}),l.length)?R[e]=Promise.all(l).then(function(){return R[e]=1}):R[e]=1}},z.g.importScripts&&(B=z.g.location+"");var I,R,U,B,K=z.g.document;if(!B&&K&&(K.currentScript&&"SCRIPT"===K.currentScript.tagName.toUpperCase()&&(B=K.currentScript.src),!B)){var J=K.getElementsByTagName("script");if(J.length)for(var Y=J.length-1;Y>-1&&(!B||!/^http(s?):/.test(B));)B=J[Y--].src}if(!B)throw Error("Automatic publicPath is not supported in this browser");z.p=B=B.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),z.consumesLoadingData={chunkMapping:{590:["511","343","99","171","241"]},moduleIdToConsumeDataMapping:{171:{shareScope:"default",shareKey:"@jupyterlab/notebook",import:null,requiredVersion:"^4.6.3",strictVersion:!1,singleton:!0,eager:!1,fallback:void 0,treeShakingMode:null},241:{shareScope:"default",shareKey:"@jupyterlab/services",import:null,requiredVersion:"^7.6.3",strictVersion:!1,singleton:!0,eager:!1,fallback:void 0,treeShakingMode:null},343:{shareScope:"default",shareKey:"@jupyterlab/cells",import:null,requiredVersion:"^4.6.3",strictVersion:!1,singleton:!1,eager:!1,fallback:void 0,treeShakingMode:null},511:{shareScope:"default",shareKey:"@jupyterlab/apputils",import:null,requiredVersion:"^4.7.3",strictVersion:!1,singleton:!0,eager:!1,fallback:void 0,treeShakingMode:null},99:{shareScope:"default",shareKey:"@jupyterlab/nbformat",import:null,requiredVersion:"^4.6.3",strictVersion:!1,singleton:!1,eager:!1,fallback:void 0,treeShakingMode:null}},initialConsumes:[]},e=function(e){return e.split(".").map(function(e){return+e==e?+e:e})},n=function(n){var r=function(n){var r=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(n),t=r[1]?[0].concat(e(r[1])):[0];r[2]&&(t.length++,t.push.apply(t,e(r[2])));let o=t[t.length-1];for(;t.length&&(void 0===o||/^[*xX]$/.test(o));)t.pop(),o=t[t.length-1];return t},t=function(e){return 1===e.length?[0]:2===e.length?[1].concat(e.slice(1)):3===e.length?[2].concat(e.slice(1)):[e.length].concat(e.slice(1))},o=function(e){return[-e[0]-1].concat(e.slice(1))},i=function(e){let n=/^(\^|~|<=|<|>=|>|=|v|!)/.exec(e),i=n?n[0]:"",u=r(i.length?e.slice(i.length).trim():e.trim());switch(i){case"^":if(u.length>1&&0===u[1]){if(u.length>2&&0===u[2])return[3].concat(u.slice(1));return[2].concat(u.slice(1))}return[1].concat(u.slice(1));case"~":return[2].concat(u.slice(1));case">=":return u;case"=":case"v":case"":return t(u);case"<":return o(u);case">":return[,t(u),0,u,2];case"<=":return[,t(u),o(u),1];case"!":return[,t(u),0];default:throw Error("Unexpected start value")}},u=function(e,n){if(1===e.length)return e[0];let r=[];for(let n of e.slice().reverse())0 in n?r.push(n):r.push.apply(r,n.slice(1));return[,].concat(r,e.slice(1).map(()=>n))};return u(n.split(/\s*\|\|\s*/).map(function(e){let n=e.split(/\s+-\s+/);if(1===n.length){e=e.trim();let n=[],r=/[-0-9A-Za-z]\s+/g;for(var a,l=0;a=r.exec(e);){let r=a.index+1;n.push(i(e.slice(l,r).trim())),l=r}return n.push(i(e.slice(l).trim())),u(n,2)}let c=r(n[0]),s=r(n[1]);return[,t(s),o(s),1,c,2]}),1)},r=function(n){var r=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(n),t=r[1]?e(r[1]):[];return r[2]&&(t.length++,t.push.apply(t,e(r[2]))),r[3]&&(t.push([]),t.push.apply(t,e(r[3]))),t},t=function(e,n){e=r(e),n=r(n);for(var t=0;;){if(t>=e.length)return t<n.length&&"u"!=(typeof n[t])[0];var o=e[t],i=(typeof o)[0];if(t>=n.length)return"u"==i;var u=n[t],a=(typeof u)[0];if(i==a){if("o"!=i&&"u"!=i&&o!=u)return o<u;t++}else{if("o"==i&&"n"==a)return!0;return"s"==a||"u"==i}}},o=function(e){var n=e[0],r="";if(1===e.length)return"*";if(n+.5){r+=0==n?">=":-1==n?"<":1==n?"^":2==n?"~":n>0?"=":"!=";for(var t=1,i=1;i<e.length;i++){var u=e[i],a=(typeof u)[0];t--,r+="u"==a?"-":(t>0?".":"")+(t=2,u)}return r}for(var l=[],i=1;i<e.length;i++){var u=e[i];l.push(0===u?"not("+c()+")":1===u?"("+c()+" || "+c()+")":2===u?l.pop()+" "+l.pop():o(u))}return c();function c(){return l.pop().replace(/^\((.+)\)$/,"$1")}},i=function(e,n){if(0 in e){n=r(n);var t=e[0],o=t<0;o&&(t=-t-1);for(var u=0,a=1,l=!0;;a++,u++){var c,s,f=a<e.length?(typeof e[a])[0]:"";if(u>=n.length||"o"==(s=(typeof(c=n[u]))[0])){if(!l)return!0;if("u"==f)return a>t&&!o;return""==f!=o}if("u"==s){if(!l||"u"!=f)return!1}else if(l)if(f==s)if(a<=t){if(c!=e[a])return!1}else{if(o?c>e[a]:c<e[a])return!1;c!=e[a]&&(l=!1)}else if("s"!=f&&"n"!=f){if(o||a<=t)return!1;l=!1,a--}else{if(a<=t||s<f!=o)return!1;l=!1}else"s"!=f&&"n"!=f&&(l=!1,a--)}}for(var p=[],d=p.pop.bind(p),u=1;u<e.length;u++){var h=e[u];p.push(1==h?d()|d():2==h?d()&d():h?i(h,n):!d())}return!!d()},u=function(e,n){var r=z.S[e];if(!r||!z.o(r,n))throw Error("Shared module "+n+" doesn't exist in shared scope "+e);return r},a=function(e,n){var r=e[n],n=Object.keys(r).reduce(function(e,n){return!e||t(e,n)?n:e},0);return n&&r[n]},l=function(e,n){var r=e[n];return Object.keys(r).reduce(function(e,n){return!e||!r[e].loaded&&t(e,n)?n:e},0)},c=function(e,n,r,t){return"Unsatisfied version "+r+" from "+(r&&e[n][r].from)+" of shared singleton module "+n+" (required "+o(t)+")"},s=function(e,n,r,t){var o=l(e,r);return m(e[r][o])},f=function(e,n,r,t){var o=l(e,r);return i(t,o)||v(c(e,r,o,t)),m(e[r][o])},p=function(e,n,r,t){var o=l(e,r);if(!i(t,o))throw Error(c(e,r,o,t));return m(e[r][o])},d=function(e,n,r){var o=e[n],n=Object.keys(o).reduce(function(e,n){return i(r,n)&&(!e||t(e,n))?n:e},0);return n&&o[n]},h=function(e,n,r,t){var i=e[r];return"No satisfying version ("+o(t)+") of shared module "+r+" found in shared scope "+n+".\nAvailable versions: "+Object.keys(i).map(function(e){return e+" from "+i[e].from}).join(", ")},g=function(e,n,r,t){var o=d(e,r,t);if(o)return m(o);throw Error(h(e,n,r,t))},v=function(e){"u">typeof console&&console.warn&&console.warn(e)},y=function(e,n,r,t){v(h(e,n,r,t))},m=function(e){return e.loaded=1,e.get()},S=(b=function(e){return function(n,r,t,o){var i=z.I(n);return i&&i.then?i.then(e.bind(e,n,z.S[n],r,t,o)):e(n,z.S[n],r,t,o)}})(function(e,n,r){return u(e,r),m(a(n,r))}),k=b(function(e,n,r,t){return n&&z.o(n,r)?m(a(n,r)):t()}),j=b(function(e,n,r,t){return u(e,r),m(d(n,r,t)||y(n,e,r,t)||a(n,r))}),w=b(function(e,n,r){return u(e,r),s(n,e,r)}),E=b(function(e,n,r,t){return u(e,r),f(n,e,r,t)}),x=b(function(e,n,r,t){return u(e,r),g(n,e,r,t)}),T=b(function(e,n,r,t){return u(e,r),p(n,e,r,t)}),M=b(function(e,n,r,t,o){return n&&z.o(n,r)?m(d(n,r,t)||y(n,e,r,t)||a(n,r)):o()}),P=b(function(e,n,r,t){return n&&z.o(n,r)?s(n,e,r):t()}),V=b(function(e,n,r,t,o){return n&&z.o(n,r)?f(n,e,r,t):o()}),q=b(function(e,n,r,t,o){var i=n&&z.o(n,r)&&d(n,r,t);return i?m(i):o()}),A=b(function(e,n,r,t,o){return n&&z.o(n,r)?p(n,e,r,t):o()}),C=function(e){var r=!1,t=!1,o=!1,i=!1,u=[e.shareScope,e.shareKey];return(e.requiredVersion?(e.strictVersion&&(r=!0),e.singleton&&(t=!0),u.push(n(e.requiredVersion)),o=!0):e.singleton&&(t=!0),e.fallback&&(i=!0,u.push(e.fallback)),r&&t&&o&&i)?function(){return A.apply(null,u)}:r&&o&&i?function(){return q.apply(null,u)}:t&&o&&i?function(){return V.apply(null,u)}:r&&t&&o?function(){return T.apply(null,u)}:t&&i?function(){return P.apply(null,u)}:o&&i?function(){return M.apply(null,u)}:r&&o?function(){return x.apply(null,u)}:t&&o?function(){return E.apply(null,u)}:t?function(){return w.apply(null,u)}:o?function(){return j.apply(null,u)}:i?function(){return k.apply(null,u)}:function(){return S.apply(null,u)}},O={},z.f.consumes=function(e,n){var r=z.consumesLoadingData.moduleIdToConsumeDataMapping,t=z.consumesLoadingData.chunkMapping;z.o(t,e)&&t[e].forEach(function(e){if(z.o(O,e))return n.push(O[e]);var t=function(n){O[e]=0,z.m[e]=function(r){delete z.c[e],r.exports=n()}},o=function(n){delete O[e],z.m[e]=function(r){throw delete z.c[e],n}};try{var i=C(r[e])();i.then?n.push(O[e]=i.then(t).catch(o)):t(i)}catch(e){o(e)}})},D={871:0},z.f.j=function(e,n){var r=z.o(D,e)?D[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var t=new Promise((n,t)=>r=D[e]=[n,t]);n.push(r[2]=t);var o=z.p+z.u(e),i=Error();z.l(o,function(n){if(z.o(D,e)&&(0!==(r=D[e])&&(D[e]=void 0),r)){var t=n&&("load"===n.type?"missing":n.type),o=n&&n.target&&n.target.src;i.message="Loading chunk "+e+" failed.\n("+t+": "+o+")",i.name="ChunkLoadError",i.type=t,i.request=o,r[1](i)}},"chunk-"+e,e)}},_=(e,n)=>{var r,t,[o,i,u]=n,a=0;if(o.some(e=>0!==D[e])){for(r in i)z.o(i,r)&&(z.m[r]=i[r]);u&&u(z)}for(e&&e(n);a<o.length;a++)t=o[a],z.o(D,t)&&D[t]&&D[t][0](),D[t]=0},(L=self.rspackChunkcodebind_jupyterlab=self.rspackChunkcodebind_jupyterlab||[]).forEach(_.bind(null,0)),L.push=_.bind(null,L.push.bind(L));var F=z(457);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["codebind-jupyterlab"]=F})();
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codebind
3
- Version: 0.6.9
3
+ Version: 0.6.11
4
4
  Summary: A frontend-neutral model loop for persistent IPython sessions.
5
5
  Keywords: ai,ipython,llm,repl,agents
6
6
  Author: Giovanni Gravili
@@ -75,7 +75,7 @@ Inspect this project and tell me what to implement first.
75
75
  ```
76
76
 
77
77
  Terminal conversations remain live for the current IPython process. Previous terminal inputs and outputs, including Python cells you ran yourself, enter the model's context when you ask a question. Durable automatic resumption belongs to notebooks, where the notebook file provides an unambiguous conversation identity.
78
- Model-executed cells appear with IPython's native input counter, syntax highlighting, output prompts, streams, and tracebacks. Assistant Markdown appears before the following tool cell, and tool output appears as it is written. To keep terminal scrollback usable, Codebind shows at most 10 gray lines of each model-executed cell's output, then displays a notice such as `… 990 more output lines. Run %output 8 to view all.` The complete output remains available to the model and in IPython history; `%output 8` opens its full text in IPython's pager. User-entered Python cells keep IPython's normal display behavior. Assistant Markdown is rendered through IPython's terminal MIME renderer. A terminal is a stream rather than a notebook document, so these displays are not editable notebook cells.
78
+ Model-executed cells appear with IPython's native input counter, syntax highlighting, output prompts, streams, and tracebacks. Assistant Markdown appears before the following tool cell, and tool output appears as it is written. To keep terminal scrollback usable, Codebind previews at most three gray output lines, shortening each line after 60 characters with `...`. Further lines appear as `… N more output lines.` The complete output remains available to the model and in IPython history; `%output 8` opens the full text of cell 8 in IPython's pager. User-entered Python cells keep IPython's normal display behavior. Assistant Markdown is rendered through IPython's terminal MIME renderer. A terminal is a stream rather than a notebook document, so these displays are not editable notebook cells.
79
79
 
80
80
  ## JupyterLab
81
81
 
@@ -97,15 +97,16 @@ Load Codebind in a notebook:
97
97
  %load_ext codebind
98
98
  ```
99
99
 
100
- That is the complete setup. **Question** is a native toolbar toggle:
100
+ That is the complete setup. **Question** is a native toolbar toggle, also available with `Shift+Tab`:
101
101
 
102
102
  - Turning it on converts the selected cell into a Question and makes each newly created user cell a Question until the toggle is turned off.
103
- - Codebind-generated instruction, tool, and answer cells are never converted.
103
+ - Turning it off returns the selected unsent Question to a Python code cell.
104
+ - Codebind-generated tool and answer cells are never converted.
104
105
  - Write ordinary Markdown and press `Shift+Enter`.
105
106
 
106
107
  ### Instructions and notebook context
107
108
 
108
- - Loading the extension adds a locked Markdown cell containing Codebind's packaged instructions. Its exact text becomes the conversation's immutable system message and remains stable when the server or kernel restarts.
109
+ - Loading the extension stores Codebind's packaged instructions as the conversation's immutable system message in notebook metadata, without showing an instructions cell. Reopening the notebook or restarting its kernel preserves that message.
109
110
  - The whole notebook is model context. Before each Question, Codebind snapshots ordinary Markdown, raw, and code cells—including visible text and image outputs, but never the live Python namespace.
110
111
  - Images displayed by the model's IPython tool are included in that tool's result. PNG, JPEG, WebP, GIF, and SVG renditions are prepared as model-visible images; unsupported or oversized images are reported as omissions.
111
112
  - The first turn records the snapshot. Later turns append only new, changed, removed, or reordered cells. Existing Questions, tool calls, tool results, and answers in the conversation ledger are not duplicated.
@@ -123,7 +124,7 @@ That is the complete setup. **Question** is a native toolbar toggle:
123
124
  - Interrupted saves finish before a turn is cancelled, preventing a restart from turning a partial write into an orphan tool result. An interrupted tool call is closed with an explicit interrupted result.
124
125
  - Temporary model transport failures retry the same Question with a fresh connection; repeated WebSocket failures use HTTP. Invalid requests and authentication failures remain visible errors.
125
126
  - If a provider stream is cancelled or fails, Codebind discards that provider session before the next Question while retaining the notebook conversation and stable prompt-cache identity.
126
- - The instruction cell, sent Question cells, model-authored tool cells, and assistant Markdown cells are non-editable and non-deletable. Draft Questions remain editable until sent. Jupyter's standard interrupt button cancels an active Codebind question.
127
+ - Sent Question cells, model-authored tool cells, and assistant Markdown cells are non-editable and non-deletable. Draft Questions remain editable until sent. During an active question, `Ctrl+C` or Jupyter's interrupt button cancels the agent loop; a kernel interrupt is used only if cooperative cancellation does not finish.
127
128
 
128
129
  ### Markdown and other frontends
129
130
 
@@ -0,0 +1,24 @@
1
+ codebind/__init__.py,sha256=GNO_K5EPAdgiK2CWsPVVY-3bAmH2TnFJ9ReAWgSbnqM,514
2
+ codebind/cli.py,sha256=9LOR1L3P8sPsOOgsnpbOsA1PNUZdAj1Z9ROFKeo3EV8,423
3
+ codebind/configuration.py,sha256=b9ux-MiepzAFfRhorZp4w2pdLLs44necescIGg_IKfo,1828
4
+ codebind/conversation.py,sha256=nFMe2QgFkFOA2GYInN-cO_jhA9010LpM6_Ij2g4Q2BA,17500
5
+ codebind/display.py,sha256=IpxcElyNcr5olRIatEduN_d-sRwpsMlaq1UtrOXocQA,494
6
+ codebind/execution.py,sha256=RBZ6RLs_iFiXBTA2VtWFuIuFN9Auf924vNeH58u1P-I,17324
7
+ codebind/extension.py,sha256=XuHB3fomvdj15SwWDnawdGZkm-vJQo9rr2mI-LKsJUg,10320
8
+ codebind/images.py,sha256=9bJHjXc75_YRBFTAqAWiknRTCjs8ApyGVVSxC_S5lio,4342
9
+ codebind/instructions.md,sha256=_8CVGEuKgPRLmxfPnJMP0sNGg_Nh_o6z5iuKHKj57RM,3768
10
+ codebind/jupyter.py,sha256=Chl14OBGA_EN99bEiO0rHEQJ6vLdCw-PhaC2JWwpOQ4,9551
11
+ codebind/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ codebind/session.py,sha256=TfS48Lhu9TgATo5oV5kg9H8_fSBNlOtm-kMIBSs4zW4,24143
13
+ codebind/terminal.py,sha256=FGowLee5nuubsmqXZqpWxZChsw8JjwQ0wnogk9AnFRI,17615
14
+ codebind-0.6.11.dist-info/licenses/LICENSE,sha256=ujX46e0LFBIBTnCDY0u3Q7LV363B7CiI7QJZxIkEXlk,1073
15
+ codebind-0.6.11.data/data/share/jupyter/labextensions/codebind-jupyterlab/install.json,sha256=78rEThkfrk1pXtekX5WrG9_Y0lJYi5XBEm8n9athpFE,164
16
+ codebind-0.6.11.data/data/share/jupyter/labextensions/codebind-jupyterlab/package.json,sha256=kTlYeh6jdbfq3K3EOza3bcKzhNpPO_-5Uniw-wCyfIo,1193
17
+ codebind-0.6.11.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/590.98c719a309e23852.js,sha256=3_28fXeGzVozV517cjkmxSSO9ccdVOe-4-RMBf46p8w,17613
18
+ codebind-0.6.11.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/remoteEntry.24258c9500a0850a.js,sha256=eWX4O8-R_o-6pVn1LSxUHs3LC8qfi-xX4Vg1QLwy3gg,11795
19
+ codebind-0.6.11.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/style.js,sha256=Opy15wyuR_ABqsrk-cOcOj2yZtvtq0r36aDkErnloD0,113
20
+ codebind-0.6.11.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/third-party-licenses.json,sha256=MNToQfru1YnHAie-2Virp23yWsc5co3qG0IzrO6SEfw,20
21
+ codebind-0.6.11.dist-info/WHEEL,sha256=e4_1dyBeezi8ZjfxrZ3bnVOxFDa3ksqVqH0jTHkUZ3k,81
22
+ codebind-0.6.11.dist-info/entry_points.txt,sha256=GiPcU63sULDlywJSKigAS4M3vaziYIrubXOb3fAg2_c,48
23
+ codebind-0.6.11.dist-info/METADATA,sha256=eECKMS633J9zg7OXyDa4M3mPTU-LkVHJtapAaY_wiEQ,8013
24
+ codebind-0.6.11.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.12.18
2
+ Generator: uv 0.12.19
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1 +0,0 @@
1
- "use strict";(self.rspackChunkcodebind_jupyterlab=self.rspackChunkcodebind_jupyterlab||[]).push([[590],{509(e,t,n){n.r(t);var o=n(511),l=n(343),d=n(99),i=n(171),r=n(241);let s="codebind:insert-question",a="codebind:toggle-question-mode",c="codebind:run-question",u="jp-CodebindQuestionCell",m=new WeakMap,p=new WeakMap;function f(e){return 0!==e.runningQuestions.size&&(e.comm?.send({type:"cancel"}),!0)}function g(e){let t=e.getMetadata("codebind");return"object"!=typeof t||null===t||"question"!==t.kind?null:{kind:"question",status:"draft"===t.status?"draft":"sent"}}function y(e){let t=e.getMetadata("codebind");if("object"!=typeof t||null===t)return null;let n=t.kind;return"string"==typeof n?n:null}function b(e){let t={},n=[];for(let[o,l]of Object.entries(e))o.startsWith("text/")||["image/png","image/jpeg","image/webp","image/gif","image/svg+xml"].includes(o)||"application/json"===o||"application/vnd.jupyter.stdout"===o||"application/vnd.jupyter.stderr"===o?void 0!==l&&(t[o]=l):n.push(o);return n.length>0&&(t.omitted_mime_types=n),t}function _(e){return d.isStream(e)?{type:"stream",name:e.name,text:e.text}:d.isError(e)?{type:"error",name:e.ename,message:e.evalue,traceback:e.traceback}:d.isExecuteResult(e)?{type:"result",execution_count:e.execution_count,data:b(e.data)}:d.isDisplayData(e)?{type:"display",data:b(e.data)}:{type:e.output_type}}function w(e){return e.replace(/(^|[^\\])\\([()[\]])/g,"$1\\\\$2")}function k(e){let t=m.get(e);for(let n of e.content.widgets){let e=g(n.model);n.node.classList.toggle(u,null!==e);let o=n.node.querySelector(".jp-InputPrompt");o&&(e?(n.readOnly="sent"===e.status,o.dataset.codebindQuestion="true",o.textContent=t?.runningQuestions.has(n.model.id)?"[*]:":"[ ]:"):o.dataset.codebindQuestion&&(delete o.dataset.codebindQuestion,o.textContent=""))}}function C(e){let t=e.sessionContext.session?.kernel;if(!t)return;let n=m.get(e)??{comm:null,kernel:null,registeredKernel:null,connectKernel:null,disconnectKernel:null,ready:null,resolveReady:null,rejectReady:null,connectOnIdle:!1,runningQuestions:new Map,questionTimers:new Map,sessionReady:!1,questionMode:!1,questionButton:null,knownCellIds:new Set(e.content.widgets.map(e=>e.model.id)),pendingQuestionCellIds:new Set};if(m.set(e,n),n.registeredKernel===t)return;n.disconnectKernel?.(),n.rejectReady?.(Error("The notebook kernel changed.")),n.comm?.close(),n.registeredKernel=t,n.connectKernel=null,n.disconnectKernel=null,n.ready=null,n.resolveReady=null,n.rejectReady=null,n.connectOnIdle=!1;n.kernel&&n.kernel!==t&&p.get(n.kernel)?.delete(n),n.kernel=t;let d=p.get(t);if(!d){d=new Set,p.set(t,d);let e=t.interrupt.bind(t);t.interrupt=async()=>{let t=[...d??[]].filter(e=>e.runningQuestions.size>0);for(let e of t)f(e);for(let e=0;t.length>0&&e<50;e+=1){if(t.every(e=>0===e.runningQuestions.size))return;await new Promise(e=>setTimeout(e,10))}return e()}}for(let e of(d.add(n),n.comm=null,n.runningQuestions.clear(),n.questionTimers.values()))window.clearTimeout(e);n.questionTimers.clear(),n.sessionReady=!1;let i=null,s=new Map,a=new Map,c=()=>{if(!i)return;let e=i;i=null,e.parentModel&&null!==e.parentExecutionCount&&(e.parentModel.executionCount=e.parentExecutionCount)},u=()=>{if(n.comm||"idle"!==t.status||!e.content.model)return;let d=t.createComm("codebind");d.commsOverSubshells=r.CommsOverSubshells.Disabled,n.comm=d,n.sessionReady=!1,n.ready=new Promise((e,t)=>{n.resolveReady=e,n.rejectReady=t}),n.ready.catch(()=>void 0),d.onMsg=r=>{let u,m=r.content.data;if(!function(e){if("object"!=typeof e||null===e)return!1;if("markdown_cell"===e.type||"instructions_cell"===e.type)return"string"==typeof e.source;if("markdown_cell_started"===e.type||"markdown_cell_updated"===e.type||"markdown_cell_finished"===e.type)return"string"==typeof e.cell_id&&"string"==typeof e.source;if("markdown_cell_cancelled"===e.type)return"string"==typeof e.cell_id;if("code_cell_started"===e.type)return"string"==typeof e.cell_id&&"string"==typeof e.source;if("code_cell_output"===e.type)return"string"==typeof e.cell_id&&"object"==typeof e.output&&null!==e.output;if("code_cell_clear"===e.type)return"string"==typeof e.cell_id&&"boolean"==typeof e.wait;if("question_finished"===e.type){let t=e.error;return"string"==typeof e.cell_id&&"boolean"==typeof e.cancelled&&(null===t||"object"==typeof t&&"string"==typeof t.type&&"string"==typeof t.message)}if("question_started"===e.type)return"string"==typeof e.cell_id;if("session_ready"===e.type){let t=e.error;return null===t||"object"==typeof t&&"string"==typeof t.type&&"string"==typeof t.message}return"conversation_save"===e.type?"string"==typeof e.request_id&&"object"==typeof e.conversation&&null!==e.conversation:"code_cell_finished"===e.type&&"string"==typeof e.cell_id&&("number"==typeof e.execution_count||null===e.execution_count)&&Array.isArray(e.outputs)}(m))return;if("conversation_save"===m.type){let t=e.content.model;return t?(t.setMetadata("codebind",m.conversation),void e.context.save().then(()=>{d.send({type:"conversation_saved",request_id:m.request_id,error:null})},e=>{d.send({type:"conversation_saved",request_id:m.request_id,error:String(e)})})):void d.send({type:"conversation_saved",request_id:m.request_id,error:"Notebook model is unavailable."})}if("instructions_cell"===m.type)return void function(e,t){let n=e.content,o=n.model;if(!o)return;let d=n.widgets.findIndex(e=>"instructions"===y(e.model));if(d<0){let e=n.activeCell?.model.id??null;if(o.sharedModel.insertCell(0,{cell_type:"markdown",source:t,metadata:{editable:!1,deletable:!1,codebind:{kind:"instructions"}}}),d=0,null!==e){let t=n.widgets.findIndex(t=>t.model.id===e);t>=0&&(n.activeCellIndex=t)}}let i=n.widgets[d];i&&(i.model.sharedModel.getSource()!==t&&i.model.sharedModel.setSource(t),i.model.setMetadata("editable",!1),i.model.setMetadata("deletable",!1),i.model.setMetadata("codebind",{kind:"instructions"}),i.readOnly=!0,i instanceof l.MarkdownCell&&(i.rendered=!0))}(e,m.source);if("session_ready"===m.type){n.sessionReady=null===m.error,m.error?(n.rejectReady?.(Error(m.error.message)),(0,o.showErrorMessage)(`Codebind could not load: ${m.error.type}`,m.error.message)):n.resolveReady?.(),n.resolveReady=null,n.rejectReady=null;return}if("question_started"===m.type){let e=n.questionTimers.get(m.cell_id);void 0!==e&&(window.clearTimeout(e),n.questionTimers.delete(m.cell_id));return}if("question_finished"===m.type){let t=n.questionTimers.get(m.cell_id);void 0!==t&&(window.clearTimeout(t),n.questionTimers.delete(m.cell_id)),n.runningQuestions.delete(m.cell_id),k(e),c(),m.error&&!m.cancelled&&(0,o.showErrorMessage)(`Codebind question: ${m.error.type}`,m.error.message);return}if("markdown_cell_updated"===m.type||"markdown_cell_finished"===m.type){let t=a.get(m.cell_id);if(!t)return;t.sharedModel.setSource(w(m.source));let n=e.content.widgets.find(e=>e.model.id===t.id);n instanceof l.MarkdownCell&&(n.rendered=!0),"markdown_cell_finished"===m.type&&a.delete(m.cell_id);return}if("markdown_cell_cancelled"===m.type){let t=a.get(m.cell_id);if(a.delete(m.cell_id),!t)return;let n=e.content.widgets.findIndex(e=>e.model.id===t.id);n>=0&&e.content.model?.sharedModel.deleteCell(n);return}if("code_cell_output"===m.type)return void s.get(m.cell_id)?.outputs.add(m.output);if("code_cell_clear"===m.type)return void s.get(m.cell_id)?.outputs.clear(m.wait);if("code_cell_finished"===m.type){let e=s.get(m.cell_id);if(!e)return;e.outputs.fromJSON(m.outputs),e.executionCount=m.execution_count,e.executionState="idle",i&&null===i.parentExecutionCount&&null!==m.execution_count&&(i.parentExecutionCount=m.execution_count-1);return}if("markdown_cell_started"===m.type)u={type:"markdown_cell",source:m.source};else{if("markdown_cell"!==m.type&&"code_cell_started"!==m.type)return;u=m}(()=>{if(i)return;let n=e.content,o=n.widgets.findIndex(e=>"code"===e.model.type&&"running"===e.model.executionState);i={parentModel:o>=0?n.widgets[o].model:null,parentExecutionCount:null};let l=(e,n)=>{"idle"===n&&(t.statusChanged.disconnect(l),c())};return t.statusChanged.connect(l)})();let p=function(e,t){let n=e.content,o=n.model;if(!o)return null;let d=n.widgets.length;"code_cell_started"===t.type?o.sharedModel.insertCell(d,{cell_type:"code",source:t.source,metadata:{trusted:!0,collapsed:!0,editable:!1,deletable:!1,codebind:{kind:"tool"}},execution_count:null,outputs:[]}):o.sharedModel.insertCell(d,{cell_type:"markdown",source:w(t.source),metadata:{editable:!1,deletable:!1,codebind:{kind:"assistant"}}});let i=n.widgets[d]??null;return i&&(i.readOnly=!0),i instanceof l.MarkdownCell&&(i.rendered=!0),i?.model??null}(e,u);"code_cell_started"===m.type&&p?.type==="code"&&(p.executionState="running",s.set(m.cell_id,p)),"markdown_cell_started"===m.type&&p&&a.set(m.cell_id,p)},d.onClose=()=>{if(n.comm===d){let e=n.sessionReady;n.rejectReady?.(Error("Codebind is not loaded in this kernel. Run %load_ext codebind.")),n.comm=null,n.sessionReady=!1,n.ready=null,n.resolveReady=null,n.rejectReady=null,n.connectOnIdle=e}};let u=e.content.model?.getMetadata("codebind");d.open({conversation:"object"==typeof u&&null!==u?u:null})};n.connectKernel=u;let g=(e,t)=>{"idle"===t&&n.connectOnIdle&&(n.connectOnIdle=!1,u())},b=(e,t)=>{r.KernelMessage.isExecuteInputMsg(t)&&/(?:^|\n)\s*%(?:re)?load_ext\s+codebind(?:\s|$)/.test(t.content.code)&&(n.connectOnIdle=!0)};t.statusChanged.connect(g),t.iopubMessage.connect(b),n.disconnectKernel=()=>{t.statusChanged.disconnect(g),t.iopubMessage.disconnect(b)},e.context.ready.then(()=>{e.content.model?.getMetadata("codebind")&&(n.connectOnIdle=!0,u())})}function h(e){let t=e.content,n=t.model;if(!n)return;t.activeCell?"markdown"!==t.activeCell.model.type&&i.NotebookActions.changeCellType(t,"markdown"):(n.sharedModel.insertCell(0,{cell_type:"markdown",source:"",metadata:{}}),t.activeCellIndex=0);let o=t.activeCell;o&&null!==y(o.model)||(o?.model.setMetadata("codebind",{kind:"question",status:"draft"}),o instanceof l.MarkdownCell&&(o.rendered=!1),t.mode="edit",k(e),o?.editor?.focus())}function v(e){let t=m.get(e);if(!t)return;let n=e.content.widgets,o=new Set(n.map(e=>e.model.id)),l=n.filter(e=>!t.knownCellIds.has(e.model.id));for(let e of(t.knownCellIds=o,t.pendingQuestionCellIds))o.has(e)||t.pendingQuestionCellIds.delete(e);if(t.questionMode)for(let e of l)null===y(e.model)&&t.pendingQuestionCellIds.add(e.model.id);k(e),t.questionMode&&e.content.activeCell&&t.pendingQuestionCellIds.delete(e.content.activeCell.model.id)&&h(e)}function M(e,t){let n=m.get(e);n&&(n.questionMode=t,n.questionMode||n.pendingQuestionCellIds.clear(),n.questionButton&&(n.questionButton.pressed=n.questionMode),n.questionMode&&e.content.activeCell&&null===y(e.content.activeCell.model)&&h(e))}async function q(e){let t=e.content,n=t.activeCell;if(!n||!g(n.model))return;await e.sessionContext.ready,C(e);let d=m.get(e),i=d?.registeredKernel;if(!d||!i)return void await (0,o.showErrorMessage)("Codebind is not connected","Start the notebook kernel before sending a Question cell.");try{if("dead"===i.status)throw Error("The notebook kernel stopped.");if("idle"!==i.status&&await new Promise((e,t)=>{let n=(o,l)=>{("idle"===l||"dead"===l)&&(i.statusChanged.disconnect(n),"idle"===l?e():t(Error("The notebook kernel stopped.")))};i.statusChanged.connect(n)}),d.connectKernel?.(),!d.ready)throw Error("Run %load_ext codebind in this kernel.");await d.ready}catch(e){await (0,o.showErrorMessage)("Codebind could not load",String(e));return}if(!d.sessionReady||!d.comm)return void await (0,o.showErrorMessage)("Codebind is not connected","Run %load_ext codebind in this kernel before sending a Question cell.");if(d.runningQuestions.size>0)return void await (0,o.showErrorMessage)("Codebind is busy","Wait for the current question to finish before sending another.");let r=n.model.sharedModel.getSource().trim();if(!r)return void await (0,o.showErrorMessage)("Empty Codebind question","Write a question before sending it.");d.runningQuestions.set(n.model.id,n.model),n.model.sharedModel.setSource(w(r)),n.model.setMetadata("codebind",{kind:"question",status:"sent"}),n.model.setMetadata("editable",!1),n.model.setMetadata("deletable",!1),n.readOnly=!0,k(e),n instanceof l.MarkdownCell&&(n.rendered=!0),t.mode="command";let s=window.setTimeout(()=>{d.questionTimers.has(n.model.id)&&(d.questionTimers.delete(n.model.id),d.runningQuestions.delete(n.model.id),n.model.setMetadata("codebind",{kind:"question",status:"draft"}),n.model.setMetadata("editable",!0),n.model.setMetadata("deletable",!0),n.readOnly=!1,k(e),(0,o.showErrorMessage)("Codebind did not receive the Question","The kernel did not acknowledge it. Reload Codebind and send it again."))},1e4);d.questionTimers.set(n.model.id,s),d.comm.send({type:"question",cell_id:n.model.id,question:r,notebook:function(e){let t=[];for(let n of e.content.widgets){if(null!==y(n.model))continue;let e=n.model.type;if("code"!==e&&"markdown"!==e&&"raw"!==e)continue;let o={id:n.model.id,type:e,source:n.model.sharedModel.getSource(),execution_count:null,outputs:[],attachments:{}};if("code"===e){let e=n.model.toJSON();o.execution_count=e.execution_count,o.outputs=e.outputs.map(_)}else{let e=n.model.toJSON().attachments;if(e){let t={};for(let[n,o]of Object.entries(e))o&&(t[n]=b(o));o.attachments=t}}t.push(o)}return t}(e)})}function x(e,t){let n={comm:null,kernel:null,registeredKernel:null,connectKernel:null,disconnectKernel:null,ready:null,resolveReady:null,rejectReady:null,connectOnIdle:!1,runningQuestions:new Map,questionTimers:new Map,sessionReady:!1,questionMode:!1,questionButton:null,knownCellIds:new Set(e.content.widgets.map(e=>e.model.id)),pendingQuestionCellIds:new Set};m.set(e,n);let l=e=>{f(n)&&(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),window.setTimeout(()=>{n.runningQuestions.size>0&&n.kernel?.interrupt()},500))},d=null,i=()=>{let t=e.toolbar.node.querySelector('[data-command="notebook:interrupt-kernel"]');t!==d&&(d?.removeEventListener("click",l,!0),d=t,d?.addEventListener("click",l,!0))},r=new MutationObserver(i);r.observe(e.toolbar.node,{childList:!0,subtree:!0});let s=new MutationObserver(()=>{window.setTimeout(()=>v(e),0)});s.observe(e.content.node,{childList:!0,subtree:!0}),i(),e.disposed.connect(()=>{for(let e of(r.disconnect(),s.disconnect(),d?.removeEventListener("click",l,!0),n.disconnectKernel?.(),n.rejectReady?.(Error("The notebook closed.")),n.comm?.close(),n.kernel&&p.get(n.kernel)?.delete(n),n.questionTimers.values()))window.clearTimeout(e);n.questionTimers.clear()});let c=new o.ToolbarButton({label:"Question",tooltip:"Toggle Question mode for the selected and newly created cells",onClick:()=>{M(e,c.pressed),t.commands.notifyCommandChanged(a)}});n.questionButton=c,e.toolbar.insertItem(10,"codebindQuestion",c),e.content.modelContentChanged.connect(()=>{v(e),window.setTimeout(()=>v(e),0)}),e.content.activeCellChanged.connect(()=>v(e)),e.context.ready.then(()=>{e.content.model?.cells.changed.connect(()=>{v(e),window.setTimeout(()=>v(e),0)}),v(e)}),e.sessionContext.ready.then(()=>C(e)),e.sessionContext.kernelChanged.connect(()=>C(e))}let j={id:"codebind-jupyterlab:plugin",description:"Insert Codebind executions as native notebook cells.",autoStart:!0,requires:[i.INotebookTracker],activate:(e,t)=>{e.commands.addCommand(s,{label:"Use Selected Cell as Codebind Question",execute:()=>{let e=t.currentWidget;e&&h(e)}}),e.commands.addCommand(a,{label:"Toggle Codebind Question Mode",isToggled:()=>{let e=t.currentWidget;return!!e&&(m.get(e)?.questionMode??!1)},execute:()=>{let n=t.currentWidget;if(n){let t;(t=m.get(n))&&M(n,!t.questionMode),e.commands.notifyCommandChanged(a)}}}),e.commands.addCommand(c,{label:"Send Codebind Question",isEnabled:()=>{let e=t.currentWidget?.content.activeCell;return!!e&&null!==g(e.model)},execute:async()=>{let e=t.currentWidget;e&&await q(e)}}),e.commands.addKeyBinding({command:c,keys:["Shift Enter"],selector:`.jp-Notebook.jp-mod-editMode .${u}`}),e.commands.addKeyBinding({command:c,keys:["Shift Enter"],selector:`.jp-Notebook.jp-mod-commandMode .${u}`}),e.contextMenu.addItem({command:s,selector:".jp-Notebook .jp-Cell",rank:8}),t.forEach(t=>x(t,e)),t.widgetAdded.connect((t,n)=>x(n,e))}};n.d(t,{},{default:j})}}]);
@@ -1 +0,0 @@
1
- var _JUPYTERLAB;(()=>{"use strict";var e,n,r,t,o,i,u,a,l,c,s,f,p,d,h,g,v,y,b,m,S,k,j,w,E,x,T,M,P,V,q,A,C,O,D,_,L,N={457(e,n,r){var t={"./index":()=>r.e(590).then(()=>()=>r(509)),"./extension":()=>r.e(590).then(()=>()=>r(509))},o=function(e,n){return r.R=n,n=r.o(t,e)?t[e]():Promise.resolve().then(()=>{throw Error('Module "'+e+'" does not exist in container.')}),r.R=void 0,n},i=function(e,n){if(r.S){var t="default",o=r.S[t];if(o&&o!==e)throw Error("Container initialization failed as it has already been initialized with a different share scope");return r.S[t]=e,r.I(t,n)}};r.d(n,{get:()=>o,init:()=>i})}},$={};function z(e){var n=$[e];if(void 0!==n)return n.exports;var r=$[e]={exports:{}};return N[e](r,r.exports,z),r.exports}z.m=N,z.c=$,z.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return z.d(n,{a:n}),n},z.d=(e,n,r)=>{var t=(n,r)=>{for(var t in n)z.o(n,t)&&!z.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,[r]:n[t]})};t(n,"get"),t(r,"value")},z.f={},z.e=e=>Promise.all(Object.keys(z.f).reduce((n,r)=>(z.f[r](e,n),n),[])),z.u=e=>""+e+".dae4561c5427a855.js?v=dae4561c5427a855",z.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})(),z.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),I={},z.l=function(e,n,r,t){if(I[e])return void I[e].push(n);if(void 0!==r)for(var o,i,u=document.getElementsByTagName("script"),a=0;a<u.length;a++){var l=u[a];if(l.getAttribute("src")==e||l.getAttribute("data-rspack")=="codebind-jupyterlab:"+r){o=l;break}}o||(i=!0,(o=document.createElement("script")).timeout=120,z.nc&&o.setAttribute("nonce",z.nc),o.setAttribute("data-rspack","codebind-jupyterlab:"+r),o.src=e),I[e]=[n];var c=function(n,r){o.onerror=o.onload=null,clearTimeout(s);var t=I[e];if(delete I[e],o.parentNode&&o.parentNode.removeChild(o),t&&t.forEach(function(e){return e(r)}),n)return n(r)},s=setTimeout(c.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=c.bind(null,o.onerror),o.onload=c.bind(null,o.onload),i&&document.head.appendChild(o)},z.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},z.S={},z.initializeSharingData={scopeToSharingDataMapping:{default:[{name:"codebind-jupyterlab",version:"0.6.5",factory:()=>z.e(590).then(()=>()=>z(509)),eager:0,treeShakingMode:null}]},uniqueName:"codebind-jupyterlab"},R={},U={},z.I=function(e,n){n||(n=[]);var r=U[e];if(r||(r=U[e]={}),!(n.indexOf(r)>=0)){if(n.push(r),R[e])return R[e];z.o(z.S,e)||(z.S[e]={});var t=z.S[e],o=function(e){"u">typeof console&&console.warn&&console.warn(e)},i=z.initializeSharingData.uniqueName,u=function(e,n,r,o){var u=t[e]=t[e]||{},a=u[n];(!a||!a.loaded&&(!o!=!a.eager?o:i>a.from))&&(u[n]={get:r,from:i,eager:!!o})},a=function(r){var t=function(e){o("Initialization of sharing external failed: "+e)};try{var i=z(r);if(!i)return;var u=function(r){return r&&r.init&&r.init(z.S[e],n)};if(i.then)return l.push(i.then(u,t));var a=u(i);if(a&&a.then)return l.push(a.catch(t))}catch(e){t(e)}},l=[],c=z.initializeSharingData.scopeToSharingDataMapping;return(c[e]&&c[e].forEach(function(e){"object"==typeof e?u(e.name,e.version,e.factory,e.eager):a(e)}),l.length)?R[e]=Promise.all(l).then(function(){return R[e]=1}):R[e]=1}},z.g.importScripts&&(B=z.g.location+"");var I,R,U,B,K=z.g.document;if(!B&&K&&(K.currentScript&&"SCRIPT"===K.currentScript.tagName.toUpperCase()&&(B=K.currentScript.src),!B)){var J=K.getElementsByTagName("script");if(J.length)for(var Y=J.length-1;Y>-1&&(!B||!/^http(s?):/.test(B));)B=J[Y--].src}if(!B)throw Error("Automatic publicPath is not supported in this browser");z.p=B=B.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),z.consumesLoadingData={chunkMapping:{590:["511","343","99","171","241"]},moduleIdToConsumeDataMapping:{171:{shareScope:"default",shareKey:"@jupyterlab/notebook",import:null,requiredVersion:"^4.6.3",strictVersion:!1,singleton:!0,eager:!1,fallback:void 0,treeShakingMode:null},241:{shareScope:"default",shareKey:"@jupyterlab/services",import:null,requiredVersion:"^7.6.3",strictVersion:!1,singleton:!0,eager:!1,fallback:void 0,treeShakingMode:null},343:{shareScope:"default",shareKey:"@jupyterlab/cells",import:null,requiredVersion:"^4.6.3",strictVersion:!1,singleton:!1,eager:!1,fallback:void 0,treeShakingMode:null},511:{shareScope:"default",shareKey:"@jupyterlab/apputils",import:null,requiredVersion:"^4.7.3",strictVersion:!1,singleton:!0,eager:!1,fallback:void 0,treeShakingMode:null},99:{shareScope:"default",shareKey:"@jupyterlab/nbformat",import:null,requiredVersion:"^4.6.3",strictVersion:!1,singleton:!1,eager:!1,fallback:void 0,treeShakingMode:null}},initialConsumes:[]},e=function(e){return e.split(".").map(function(e){return+e==e?+e:e})},n=function(n){var r=function(n){var r=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(n),t=r[1]?[0].concat(e(r[1])):[0];r[2]&&(t.length++,t.push.apply(t,e(r[2])));let o=t[t.length-1];for(;t.length&&(void 0===o||/^[*xX]$/.test(o));)t.pop(),o=t[t.length-1];return t},t=function(e){return 1===e.length?[0]:2===e.length?[1].concat(e.slice(1)):3===e.length?[2].concat(e.slice(1)):[e.length].concat(e.slice(1))},o=function(e){return[-e[0]-1].concat(e.slice(1))},i=function(e){let n=/^(\^|~|<=|<|>=|>|=|v|!)/.exec(e),i=n?n[0]:"",u=r(i.length?e.slice(i.length).trim():e.trim());switch(i){case"^":if(u.length>1&&0===u[1]){if(u.length>2&&0===u[2])return[3].concat(u.slice(1));return[2].concat(u.slice(1))}return[1].concat(u.slice(1));case"~":return[2].concat(u.slice(1));case">=":return u;case"=":case"v":case"":return t(u);case"<":return o(u);case">":return[,t(u),0,u,2];case"<=":return[,t(u),o(u),1];case"!":return[,t(u),0];default:throw Error("Unexpected start value")}},u=function(e,n){if(1===e.length)return e[0];let r=[];for(let n of e.slice().reverse())0 in n?r.push(n):r.push.apply(r,n.slice(1));return[,].concat(r,e.slice(1).map(()=>n))};return u(n.split(/\s*\|\|\s*/).map(function(e){let n=e.split(/\s+-\s+/);if(1===n.length){e=e.trim();let n=[],r=/[-0-9A-Za-z]\s+/g;for(var a,l=0;a=r.exec(e);){let r=a.index+1;n.push(i(e.slice(l,r).trim())),l=r}return n.push(i(e.slice(l).trim())),u(n,2)}let c=r(n[0]),s=r(n[1]);return[,t(s),o(s),1,c,2]}),1)},r=function(n){var r=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(n),t=r[1]?e(r[1]):[];return r[2]&&(t.length++,t.push.apply(t,e(r[2]))),r[3]&&(t.push([]),t.push.apply(t,e(r[3]))),t},t=function(e,n){e=r(e),n=r(n);for(var t=0;;){if(t>=e.length)return t<n.length&&"u"!=(typeof n[t])[0];var o=e[t],i=(typeof o)[0];if(t>=n.length)return"u"==i;var u=n[t],a=(typeof u)[0];if(i==a){if("o"!=i&&"u"!=i&&o!=u)return o<u;t++}else{if("o"==i&&"n"==a)return!0;return"s"==a||"u"==i}}},o=function(e){var n=e[0],r="";if(1===e.length)return"*";if(n+.5){r+=0==n?">=":-1==n?"<":1==n?"^":2==n?"~":n>0?"=":"!=";for(var t=1,i=1;i<e.length;i++){var u=e[i],a=(typeof u)[0];t--,r+="u"==a?"-":(t>0?".":"")+(t=2,u)}return r}for(var l=[],i=1;i<e.length;i++){var u=e[i];l.push(0===u?"not("+c()+")":1===u?"("+c()+" || "+c()+")":2===u?l.pop()+" "+l.pop():o(u))}return c();function c(){return l.pop().replace(/^\((.+)\)$/,"$1")}},i=function(e,n){if(0 in e){n=r(n);var t=e[0],o=t<0;o&&(t=-t-1);for(var u=0,a=1,l=!0;;a++,u++){var c,s,f=a<e.length?(typeof e[a])[0]:"";if(u>=n.length||"o"==(s=(typeof(c=n[u]))[0])){if(!l)return!0;if("u"==f)return a>t&&!o;return""==f!=o}if("u"==s){if(!l||"u"!=f)return!1}else if(l)if(f==s)if(a<=t){if(c!=e[a])return!1}else{if(o?c>e[a]:c<e[a])return!1;c!=e[a]&&(l=!1)}else if("s"!=f&&"n"!=f){if(o||a<=t)return!1;l=!1,a--}else{if(a<=t||s<f!=o)return!1;l=!1}else"s"!=f&&"n"!=f&&(l=!1,a--)}}for(var p=[],d=p.pop.bind(p),u=1;u<e.length;u++){var h=e[u];p.push(1==h?d()|d():2==h?d()&d():h?i(h,n):!d())}return!!d()},u=function(e,n){var r=z.S[e];if(!r||!z.o(r,n))throw Error("Shared module "+n+" doesn't exist in shared scope "+e);return r},a=function(e,n){var r=e[n],n=Object.keys(r).reduce(function(e,n){return!e||t(e,n)?n:e},0);return n&&r[n]},l=function(e,n){var r=e[n];return Object.keys(r).reduce(function(e,n){return!e||!r[e].loaded&&t(e,n)?n:e},0)},c=function(e,n,r,t){return"Unsatisfied version "+r+" from "+(r&&e[n][r].from)+" of shared singleton module "+n+" (required "+o(t)+")"},s=function(e,n,r,t){var o=l(e,r);return b(e[r][o])},f=function(e,n,r,t){var o=l(e,r);return i(t,o)||v(c(e,r,o,t)),b(e[r][o])},p=function(e,n,r,t){var o=l(e,r);if(!i(t,o))throw Error(c(e,r,o,t));return b(e[r][o])},d=function(e,n,r){var o=e[n],n=Object.keys(o).reduce(function(e,n){return i(r,n)&&(!e||t(e,n))?n:e},0);return n&&o[n]},h=function(e,n,r,t){var i=e[r];return"No satisfying version ("+o(t)+") of shared module "+r+" found in shared scope "+n+".\nAvailable versions: "+Object.keys(i).map(function(e){return e+" from "+i[e].from}).join(", ")},g=function(e,n,r,t){var o=d(e,r,t);if(o)return b(o);throw Error(h(e,n,r,t))},v=function(e){"u">typeof console&&console.warn&&console.warn(e)},y=function(e,n,r,t){v(h(e,n,r,t))},b=function(e){return e.loaded=1,e.get()},S=(m=function(e){return function(n,r,t,o){var i=z.I(n);return i&&i.then?i.then(e.bind(e,n,z.S[n],r,t,o)):e(n,z.S[n],r,t,o)}})(function(e,n,r){return u(e,r),b(a(n,r))}),k=m(function(e,n,r,t){return n&&z.o(n,r)?b(a(n,r)):t()}),j=m(function(e,n,r,t){return u(e,r),b(d(n,r,t)||y(n,e,r,t)||a(n,r))}),w=m(function(e,n,r){return u(e,r),s(n,e,r)}),E=m(function(e,n,r,t){return u(e,r),f(n,e,r,t)}),x=m(function(e,n,r,t){return u(e,r),g(n,e,r,t)}),T=m(function(e,n,r,t){return u(e,r),p(n,e,r,t)}),M=m(function(e,n,r,t,o){return n&&z.o(n,r)?b(d(n,r,t)||y(n,e,r,t)||a(n,r)):o()}),P=m(function(e,n,r,t){return n&&z.o(n,r)?s(n,e,r):t()}),V=m(function(e,n,r,t,o){return n&&z.o(n,r)?f(n,e,r,t):o()}),q=m(function(e,n,r,t,o){var i=n&&z.o(n,r)&&d(n,r,t);return i?b(i):o()}),A=m(function(e,n,r,t,o){return n&&z.o(n,r)?p(n,e,r,t):o()}),C=function(e){var r=!1,t=!1,o=!1,i=!1,u=[e.shareScope,e.shareKey];return(e.requiredVersion?(e.strictVersion&&(r=!0),e.singleton&&(t=!0),u.push(n(e.requiredVersion)),o=!0):e.singleton&&(t=!0),e.fallback&&(i=!0,u.push(e.fallback)),r&&t&&o&&i)?function(){return A.apply(null,u)}:r&&o&&i?function(){return q.apply(null,u)}:t&&o&&i?function(){return V.apply(null,u)}:r&&t&&o?function(){return T.apply(null,u)}:t&&i?function(){return P.apply(null,u)}:o&&i?function(){return M.apply(null,u)}:r&&o?function(){return x.apply(null,u)}:t&&o?function(){return E.apply(null,u)}:t?function(){return w.apply(null,u)}:o?function(){return j.apply(null,u)}:i?function(){return k.apply(null,u)}:function(){return S.apply(null,u)}},O={},z.f.consumes=function(e,n){var r=z.consumesLoadingData.moduleIdToConsumeDataMapping,t=z.consumesLoadingData.chunkMapping;z.o(t,e)&&t[e].forEach(function(e){if(z.o(O,e))return n.push(O[e]);var t=function(n){O[e]=0,z.m[e]=function(r){delete z.c[e],r.exports=n()}},o=function(n){delete O[e],z.m[e]=function(r){throw delete z.c[e],n}};try{var i=C(r[e])();i.then?n.push(O[e]=i.then(t).catch(o)):t(i)}catch(e){o(e)}})},D={871:0},z.f.j=function(e,n){var r=z.o(D,e)?D[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var t=new Promise((n,t)=>r=D[e]=[n,t]);n.push(r[2]=t);var o=z.p+z.u(e),i=Error();z.l(o,function(n){if(z.o(D,e)&&(0!==(r=D[e])&&(D[e]=void 0),r)){var t=n&&("load"===n.type?"missing":n.type),o=n&&n.target&&n.target.src;i.message="Loading chunk "+e+" failed.\n("+t+": "+o+")",i.name="ChunkLoadError",i.type=t,i.request=o,r[1](i)}},"chunk-"+e,e)}},_=(e,n)=>{var r,t,[o,i,u]=n,a=0;if(o.some(e=>0!==D[e])){for(r in i)z.o(i,r)&&(z.m[r]=i[r]);u&&u(z)}for(e&&e(n);a<o.length;a++)t=o[a],z.o(D,t)&&D[t]&&D[t][0](),D[t]=0},(L=self.rspackChunkcodebind_jupyterlab=self.rspackChunkcodebind_jupyterlab||[]).forEach(_.bind(null,0)),L.push=_.bind(null,L.push.bind(L));var F=z(457);(_JUPYTERLAB=void 0===_JUPYTERLAB?{}:_JUPYTERLAB)["codebind-jupyterlab"]=F})();
@@ -1,24 +0,0 @@
1
- codebind/__init__.py,sha256=GNO_K5EPAdgiK2CWsPVVY-3bAmH2TnFJ9ReAWgSbnqM,514
2
- codebind/cli.py,sha256=9LOR1L3P8sPsOOgsnpbOsA1PNUZdAj1Z9ROFKeo3EV8,423
3
- codebind/configuration.py,sha256=b9ux-MiepzAFfRhorZp4w2pdLLs44necescIGg_IKfo,1828
4
- codebind/conversation.py,sha256=nFMe2QgFkFOA2GYInN-cO_jhA9010LpM6_Ij2g4Q2BA,17500
5
- codebind/display.py,sha256=IpxcElyNcr5olRIatEduN_d-sRwpsMlaq1UtrOXocQA,494
6
- codebind/execution.py,sha256=0G3WZ5HkXCdr-PavhRcvjKOjW70-iHGM2Xp9KkZ6WIc,16562
7
- codebind/extension.py,sha256=DRT0-Syn8yQ4ib46Mb-Yvxhw1fXz9OINr2bCS7oR-uE,8953
8
- codebind/images.py,sha256=9bJHjXc75_YRBFTAqAWiknRTCjs8ApyGVVSxC_S5lio,4342
9
- codebind/instructions.md,sha256=_8CVGEuKgPRLmxfPnJMP0sNGg_Nh_o6z5iuKHKj57RM,3768
10
- codebind/jupyter.py,sha256=07H_S9G3iyyUtWRzlvFr5-5X6CuLBXVficu5Fz8jpVw,8652
11
- codebind/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- codebind/session.py,sha256=4RenhDW0Wq3-OuFYO-px9CUhdFUQAgFOsMqwRzGDIU0,24713
13
- codebind/terminal.py,sha256=1b1riHRNu-vhexKuecrhp6_PosnqeEtV4_kLfgOJAy8,17343
14
- codebind-0.6.9.dist-info/licenses/LICENSE,sha256=ujX46e0LFBIBTnCDY0u3Q7LV363B7CiI7QJZxIkEXlk,1073
15
- codebind-0.6.9.data/data/share/jupyter/labextensions/codebind-jupyterlab/install.json,sha256=78rEThkfrk1pXtekX5WrG9_Y0lJYi5XBEm8n9athpFE,164
16
- codebind-0.6.9.data/data/share/jupyter/labextensions/codebind-jupyterlab/package.json,sha256=hawl8ZytgxN-WbUjgbzdIVemPPczzmSFoc2HwDxtgIc,1192
17
- codebind-0.6.9.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/590.dae4561c5427a855.js,sha256=lMbXilytbQEc_kzyVkgzhKZxU_zgdNLTz4uLJfC7APY,16141
18
- codebind-0.6.9.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/remoteEntry.c10098fb6e87897c.js,sha256=U0JBoOwkRkzPct8MzcUO1pc2XeVGvxgztXBMtJMg2b4,11794
19
- codebind-0.6.9.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/style.js,sha256=Opy15wyuR_ABqsrk-cOcOj2yZtvtq0r36aDkErnloD0,113
20
- codebind-0.6.9.data/data/share/jupyter/labextensions/codebind-jupyterlab/static/third-party-licenses.json,sha256=MNToQfru1YnHAie-2Virp23yWsc5co3qG0IzrO6SEfw,20
21
- codebind-0.6.9.dist-info/WHEEL,sha256=7hzKWg-J8I3Buqyw5tBii5z_MmAVsDYXXijd_QAtNZ8,81
22
- codebind-0.6.9.dist-info/entry_points.txt,sha256=GiPcU63sULDlywJSKigAS4M3vaziYIrubXOb3fAg2_c,48
23
- codebind-0.6.9.dist-info/METADATA,sha256=OkFf02Hzvlq6W0ZKS24nYLXtN97wtMEZN7W1_6yut5o,7817
24
- codebind-0.6.9.dist-info/RECORD,,