{"ok":true,"site":{"host":"victorious-sea-029fc1400.6.azurestaticapps.net","url":"https://victorious-sea-029fc1400.6.azurestaticapps.net/","type":"live","desc":"A Jupyter-inspired Python notebook rebuilt with Microsoft Fluent UI.","tools":[{"name":"get_notebook_state","kind":"answer","impl":"imperative","description":"Read the visible notebook cells (source, outputs, table and chart summaries, status), Python kernel status, selected cell, and current theme.","title":"Get notebook state","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_python_cell","kind":"act","impl":"imperative","description":"Append a new editable Python code cell to the notebook. This does not execute the code. Cells accept Jupyter-style %pip install and !pip install lines; do not use micropip directly.","title":"Add a Python cell","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"code":{"type":"string","description":"Python source code for the new cell.","maxLength":12000}},"required":["code"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_markdown_cell","kind":"act","impl":"imperative","description":"Append a Markdown cell for headings, explanations, notes, or conclusions.","title":"Add a Markdown cell","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"markdown":{"type":"string","description":"Markdown content for the new cell.","maxLength":12000}},"required":["markdown"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"insert_cell","kind":"act","impl":"imperative","description":"Insert a new code or Markdown cell directly above or below an existing cell, so content can be placed in the middle of the notebook.","title":"Insert a cell between cells","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1,"description":"Existing cell used as the anchor."},"position":{"type":"string","enum":["above","below"],"description":"Where to insert relative to the anchor cell (default below)."},"kind":{"type":"string","enum":["code","markdown"]},"source":{"type":"string","maxLength":12000}},"required":["cellId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_cell_source","kind":"act","impl":"imperative","description":"Replace the source of an existing code or Markdown cell after reviewing or debugging it. This does not execute the cell. Cells accept Jupyter-style %pip install and !pip install lines; do not use micropip directly.","title":"Apply changes to a cell","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1,"description":"Cell to update."},"source":{"type":"string","maxLength":12000},"explanation":{"type":"string","maxLength":500}},"required":["cellId","source"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_cell","kind":"transact","impl":"imperative","description":"Remove a cell from the notebook. The user can undo the deletion from the notebook.","title":"Delete a cell","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1,"description":"Cell to delete."}},"required":["cellId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"move_cell","kind":"act","impl":"imperative","description":"Move a cell one position up or down in the notebook.","title":"Move a cell","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1,"description":"Cell to move."},"direction":{"type":"string","enum":["up","down"]}},"required":["cellId","direction"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"run_python_cell","kind":"act","impl":"imperative","description":"Execute one existing Python cell in the in-browser kernel and return its text output, table summary, or error.","title":"Run a Python cell","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1,"description":"The numeric ID of the code cell to run."}},"required":["cellId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"run_all_cells","kind":"act","impl":"imperative","description":"Execute every Python code cell of the open notebook from top to bottom in the shared in-browser kernel, exactly like the Run all toolbar button: execution continues after a failing cell so one error does not hide the rest. Use it after adding or editing several cells, or after restart_kernel, instead of calling run_python_cell in a loop. Returns how many cells ran, every failure with its cell id and traceback tail, and the total duration.","title":"Run all cells","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"comment_on_cell","kind":"act","impl":"imperative","description":"Attach a visible review, explanation, or debugging comment to an existing notebook cell.","title":"Comment on a cell","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1,"description":"Cell to annotate."},"comment":{"type":"string","maxLength":2000}},"required":["cellId","comment"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"read_cells_for_summary","kind":"answer","impl":"imperative","description":"When the user asks for a summary of each cell: read every cell (source, kind, status, output preview), write a one- or two-line summary per cell in your own words, then submit them with set_cell_summaries so they appear under the cells.","title":"Read cells to summarize","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"cellIds":{"type":"array","items":{"type":"integer","minimum":1},"maxItems":200,"description":"Limit to specific cells; omit for every cell."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_cell_summaries","kind":"act","impl":"imperative","description":"Display the summaries you wrote under the matching notebook cells (1-2 lines each). Pass an empty summary to clear one. Summaries also appear in the Outline panel.","title":"Show cell summaries","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"summaries":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1},"summary":{"type":"string","maxLength":300}},"required":["cellId","summary"],"additionalProperties":false}}},"required":["summaries"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"summarize_notebook","kind":"answer","impl":"imperative","description":"Return a concise structural summary of the notebook, including sections, code imports, execution state, and outputs.","title":"Summarize notebook","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"suggest_python_completion","kind":"act","impl":"imperative","description":"Return context-aware Python code completions for the cursor in a notebook cell, including notebook symbols and pandas, NumPy, matplotlib, and DataFrame members.","title":"Suggest Python completion","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1,"description":"Cell to complete in."},"cursor":{"type":"integer","minimum":0}},"required":["cellId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"find_file_bugs","kind":"answer","impl":"imperative","description":"Statically analyze any project file and list problems with line numbers: Python syntax errors, undefined names, unused imports, unreachable code, risky patterns (pyflakes-powered), CSV column mismatches, invalid JSON, Markdown and requirements issues. Notebooks are checked cell by cell. Results also appear in the Problems panel.","title":"Find bugs in a file","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"fileName":{"type":"string","maxLength":300,"description":"File name or path from Explorer; omit for the open file."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_problems","kind":"answer","impl":"imperative","description":"List the problems currently shown in the Problems panel, including runtime errors captured from executed cells and files.","title":"Read the Problems panel","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"find_cell_errors","kind":"answer","impl":"imperative","description":"List every notebook cell whose latest execution failed, including its source and captured traceback.","title":"Find cell errors","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"diagnose_cell_error","kind":"act","impl":"imperative","description":"Inspect a failed cell and return a focused debugging suggestion based on its latest traceback.","title":"Diagnose a cell error","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1,"description":"Failed cell."}},"required":["cellId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_kernel_variables","kind":"answer","impl":"imperative","description":"List the variables defined in the Python kernel with their type, shape or length, and a short preview.","title":"List kernel variables","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"modify_chart","kind":"act","impl":"imperative","description":"Change an existing chart type, title, color, axes, labels, or data values in a notebook cell.","title":"Modify interactive chart","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1,"description":"Cell with an interactive chart."},"type":{"type":"string","enum":["bar","line","scatter"]},"title":{"type":"string","maxLength":200},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"x":{"type":"string","maxLength":100},"y":{"type":"string","maxLength":100},"xLabel":{"type":"string","maxLength":120},"yLabel":{"type":"string","maxLength":120},"data":{"type":"array","maxItems":1000,"items":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"}]}}}},"required":["cellId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"explain_chart","kind":"act","impl":"imperative","description":"Explain the variables, range, average, extrema, and trend in an interactive notebook chart.","title":"Explain interactive chart","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1,"description":"Cell with an interactive chart."}},"required":["cellId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_project_files","kind":"answer","impl":"imperative","description":"List the Explorer folders, their colors, and files with their paths.","title":"List project files","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"read_project_file","kind":"answer","impl":"imperative","description":"Return the full text of any project file (Python, Markdown, CSV, text, JSON) or the cells of a notebook.","title":"Read a project file","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"fileName":{"type":"string","maxLength":300,"description":"File name or path such as data/iris.csv."}},"required":["fileName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"edit_project_file","kind":"act","impl":"imperative","description":"Edit any non-notebook project file: replace its whole content, or find and replace an exact snippet (optionally every occurrence). The file opens in the editor so the user can review the change.","title":"Edit a project file","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"fileName":{"type":"string","maxLength":300},"content":{"type":"string","maxLength":200000,"description":"New full content of the file."},"find":{"type":"string","maxLength":20000,"description":"Exact text to replace."},"replace":{"type":"string","maxLength":20000},"replaceAll":{"type":"boolean"}},"required":["fileName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"preview_project_file","kind":"act","impl":"imperative","description":"Open a project file in the editor. Supports notebooks, CSV, Markdown, text, JSON, and Python files listed in Explorer.","title":"Open a project file","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"fileName":{"type":"string","description":"File name or path from Explorer."}},"required":["fileName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_project_file","kind":"act","impl":"imperative","description":"Create a new editable Python, Markdown, text, CSV, or JSON file in an Explorer folder.","title":"Create project file","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"folderId":{"type":"string"},"content":{"type":"string","maxLength":2000000}},"required":["name"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_file_path","kind":"answer","impl":"imperative","description":"Return the relative and project-rooted path of a file so it can be copied or referenced in code.","title":"Get a file path","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"fileName":{"type":"string","maxLength":300}},"required":["fileName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_project_folder_color","kind":"act","impl":"imperative","description":"Assign a color to a folder in Explorer.","title":"Set project folder color","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"folderId":{"type":"string"},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["folderId","color"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rename_project_file","kind":"act","impl":"imperative","description":"Rename a file, notebook, or folder in Explorer with the same rules as the Explorer rename dialog. Pass the path shown by list_project_files or get_file_path (a bare file name works when it is unique) and the new name including its extension. Open tabs, the editor header, and Problems entries follow the new name. Protected folders, duplicate names in the same folder, empty names, and names containing a slash are rejected. Returns the old and the new path.","title":"Rename a project file or folder","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"Current path or name of the file, notebook, or folder.","maxLength":400},"newName":{"type":"string","description":"New name without slashes, including the file extension.","maxLength":120}},"required":["path","newName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_project_file","kind":"transact","impl":"imperative","description":"Delete a file, notebook, or folder from Explorer, closing its editor tab and clearing its Problems entries. Deleting a folder also deletes the files inside it. Only the PROJECT folder itself is protected. Confirm with the user before calling this: nothing is restored afterwards.","title":"Delete a project file or folder","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"Path or name of the file, notebook, or folder to delete.","maxLength":400}},"required":["path"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"move_project_file","kind":"act","impl":"imperative","description":"Move a file or notebook into another Explorer folder, which changes the relative path that Python code must use to open it. Pass folderPath as the folder path from list_project_files, or \"\" (or \"/\") for the PROJECT root. Duplicate names in the target folder, protected folders, and moving a folder into itself or its own subfolder are rejected. Returns the old and the new path.","title":"Move a project file to a folder","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"path":{"type":"string","description":"Path or name of the file, notebook, or folder to move.","maxLength":400},"folderPath":{"type":"string","description":"Destination folder path; \"\" or \"/\" means the PROJECT root.","maxLength":400}},"required":["path","folderPath"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"import_notebook_from_url","kind":"act","impl":"imperative","description":"Import a public Jupyter notebook from a GitHub, GitLab, Bitbucket, or Kaggle-hosted HTTPS .ipynb link. Replaces the current notebook after validating nbformat 4 JSON.","title":"Import notebook from URL","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Public HTTPS notebook URL.","maxLength":2000}},"required":["url"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"import_notebook_from_json","kind":"act","impl":"imperative","description":"Create and open a new notebook from raw .ipynb JSON text that you fetched yourself. Use this whenever import_notebook_from_url cannot reach a notebook because the browser blocks the page from fetching it (CORS) or the host is not GitHub, GitLab, Bitbucket, or Kaggle: read the .ipynb yourself and pass its exact JSON here. Unlike import_notebook_from_url this keeps the current notebook and opens the imported one in a new tab. Returns the new notebook path and its cell count.","title":"Import a notebook from .ipynb JSON","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"content":{"type":"string","description":"Raw nbformat 4 .ipynb JSON text.","maxLength":400000},"name":{"type":"string","description":"Optional notebook name; \".ipynb\" is appended when missing.","maxLength":80}},"required":["content"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_notebook_ipynb","kind":"answer","impl":"imperative","description":"Serialize a notebook to Jupyter nbformat 4 JSON, identical to what the Export .ipynb button downloads, including every cell source, captured output, and execution count. Use it to hand the notebook to another tool, to keep a copy before a risky edit, or to diff it against an earlier version. Defaults to the notebook in the active tab.","title":"Get the notebook as .ipynb JSON","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"fileName":{"type":"string","description":"Optional notebook name or path; defaults to the active notebook.","maxLength":400}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"profile_csv_file","kind":"act","impl":"imperative","description":"Inspect a CSV file from Explorer and return its dimensions, missing values, inferred column types, distinct counts, and a small sample.","title":"Profile project CSV file","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"fileName":{"type":"string","description":"CSV file name or path from Explorer.","maxLength":300}},"required":["fileName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clean_csv_file","kind":"act","impl":"imperative","description":"Clean a CSV file in Explorer by dropping empty rows, removing duplicate rows, or both. The updated CSV remains editable in the project.","title":"Clean project CSV file","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"fileName":{"type":"string","description":"CSV file name or path from Explorer.","maxLength":300},"dropEmptyRows":{"type":"boolean"},"removeDuplicates":{"type":"boolean"}},"required":["fileName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"open_data_wrangler","kind":"act","impl":"imperative","description":"Open the Data Wrangler drawer for a CSV file, for the DataFrame output of a cell, or for a DataFrame variable in the kernel.","title":"Open Data Wrangler","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"fileName":{"type":"string","maxLength":300},"cellId":{"type":"integer","minimum":1,"description":"Cell whose output table to open."},"variable":{"type":"string","pattern":"^[A-Za-z_]\\w*$","maxLength":100}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_cell_table","kind":"answer","impl":"imperative","description":"Return the columns, dtypes, and rows (up to 1000) of the DataFrame shown under a cell.","title":"Read a cell table output","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"cellId":{"type":"integer","minimum":1,"description":"Cell with a table output."},"maxRows":{"type":"integer","minimum":1,"maximum":1000}},"required":["cellId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"run_python_terminal_command","kind":"act","impl":"imperative","description":"Execute Python, pip install, pip list, or browser environment commands in the docked terminal using the shared in-browser kernel.","title":"Run a Python terminal command","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"code":{"type":"string","maxLength":12000}},"required":["code"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"read_terminal_output","kind":"answer","impl":"imperative","description":"Read the visible terminal transcript, active browser environment, and available environments before choosing the next command.","title":"Read Python terminal output","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_python_environment","kind":"act","impl":"imperative","description":"Create and activate a named conda-style browser environment, restarting the shared notebook kernel with isolated variables.","title":"Create Python environment","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9_-]+$","maxLength":50}},"required":["name"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"install_python_packages","kind":"act","impl":"imperative","description":"Install one or more Pyodide-compatible Python packages with pip in the active or selected browser environment and show the result in the terminal.","title":"Install Python packages","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"packages":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","pattern":"^[a-zA-Z0-9_.-]+(?:==[a-zA-Z0-9_.+-]+)?$","maxLength":100}},"environment":{"type":"string","pattern":"^[a-zA-Z0-9_-]+$","maxLength":50}},"required":["packages"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"run_project_python_file","kind":"act","impl":"imperative","description":"Open and run a Python file from Explorer in the shared browser kernel. Text output is sent to the terminal and generated charts are opened in the visualization drawer.","title":"Run project Python file","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"fileName":{"type":"string","description":".py file name or path from Explorer.","maxLength":300}},"required":["fileName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"restart_kernel","kind":"act","impl":"imperative","description":"Restart the shared in-browser Pyodide kernel like the Restart toolbar button: every variable, import, and execution count is dropped and all cell outputs and statuses are cleared. Use it when kernel state is inconsistent, after installing a package that shadows an import, or before a clean run_all_cells. It waits for a busy kernel to finish first and returns once the kernel is ready again, or reports the kernel state if the wait times out.","title":"Restart the Python kernel","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"timeoutMs":{"type":"integer","minimum":1000,"maximum":60000,"description":"How long to wait for a busy or starting kernel before giving up (default 20000)."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_terminal_visibility","kind":"act","impl":"imperative","description":"Open or close the docked terminal / problems panel, optionally choosing which tab to show.","title":"Show or hide the bottom panel","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"visible":{"type":"boolean"},"tab":{"type":"string","enum":["terminal","problems"]}},"required":["visible"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_current_user","kind":"answer","impl":"imperative","description":"Return who is signed in to Fluent Notebook (name, provider, user id) when the Azure host provides authentication, or report that the workspace is anonymous.","title":"Get the signed-in user","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"save_workspace_to_cloud","kind":"act","impl":"imperative","description":"Save every project file, folder, notebook cell, and environment name to the signed-in user's private Azure Blob Storage workspace. Requires the user to be signed in.","title":"Save workspace to cloud","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"load_workspace_from_cloud","kind":"act","impl":"imperative","description":"Replace the current project with the signed-in user's workspace saved in Azure Blob Storage. Requires the user to be signed in.","title":"Load workspace from cloud","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_notebook_theme","kind":"act","impl":"imperative","description":"Switch the Fluent Notebook appearance between light and dark theme.","title":"Set notebook theme","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"theme":{"type":"string","enum":["light","dark"]}},"required":["theme"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Developer Tools","apiSurface":"spec","toolCount":49}}