Update to Dataiku Headless
Snapshot Nov 6, 2026 · 18:15 UTC · version 0.9.0
Package or technical metadata updated
Package or technical metadata updated
Observed in package metadata. These changes alone do not establish a new customer-facing feature.
Up to 3 plugins free · no card required.
All fields and original values.
These are saved file metadata. Open a changed file to read its text edits.
Package file
Oct 24, 2026 · 13:55 UTC
Not present
Nov 6, 2026 · 18:15 UTC
{"sha256":"5a1a724844a602acdab8e4f6ffe307b0f7772af0b6c437d6425d8142d21b960a","size":659}
Package file
Oct 24, 2026 · 13:55 UTC
df10462f2b84eab4a4a48d68b6cdeb80a402fda5fe985987292ab93635554e52
Nov 6, 2026 · 18:15 UTC
c142b21c6e1a8f24e5cf2dd6ce31c5c9441a58fe3a64d8f3d8efc6c2e10e7d5a
Package file
Oct 24, 2026 · 13:55 UTC
556
Nov 6, 2026 · 18:15 UTC
603
Package file
Oct 24, 2026 · 13:55 UTC
c6935b186ecc9648319eb1dafc96f223b41c556d445a54d8ec0c6ea9f360e9d9
Nov 6, 2026 · 18:15 UTC
932135fd42ae2b929c46b8ac93df3d2e2fb8b1d51a7a8a6057e1227edf2b5ead
Compare saved observations
Download comparison JSONChanged files
Choose a file to see its text changes. Binary or large files show metadata only.
.agents/plugins/marketplace.json →
.claude-plugin/marketplace.json →
.cursor-plugin/marketplace.json →
.github/plugin/marketplace.json →
CODING_STANDARDS_AND_STRUCTURE.md →
NOTICE →
dataiku_mcp/instance_policy.py →
dataiku_mcp/tools/agent_reviews.py →
dataiku_mcp/tools/cobuild.py →
dataiku_mcp/tools/code_environments.py →
dataiku_mcp/tools/connections.py →
dataiku_mcp/tools/container_exec.py →
dataiku_mcp/tools/cross_project_sharing.py →
dataiku_mcp/tools/dashboards.py →
dataiku_mcp/tools/data_collections.py →
dataiku_mcp/tools/data_quality.py →
dataiku_mcp/tools/datasets.py →
dataiku_mcp/tools/evaluation_stores.py →
dataiku_mcp/tools/general_settings.py →
dataiku_mcp/tools/insights.py →
dataiku_mcp/tools/instances.py →
dataiku_mcp/tools/licensing.py →
dataiku_mcp/tools/llms_and_knowledge_banks.py →
dataiku_mcp/tools/machine_learning/analyses.py →
dataiku_mcp/tools/machine_learning/saved_models.py →
dataiku_mcp/tools/managed_folders.py →
dataiku_mcp/tools/plugins.py →
dataiku_mcp/tools/project_folders.py →
dataiku_mcp/tools/project_libraries.py →
dataiku_mcp/tools/projects.py →
dataiku_mcp/tools/recipes.py →
dataiku_mcp/tools/scenarios.py →
dataiku_mcp/tools/semantic_models.py →
dataiku_mcp/tools/utils/metrics.py →
dataiku_mcp/tools/utils/validation.py →
dataiku_mcp/tools/webapps.py →
scripts/build_http_plugin.py →
scripts/http_plugin_assets/skills/dataiku-headless-setup/SKILL.md →
skills/dataiku-headless-setup/SKILL.md →
skills/dataiku-headless/SKILL.md →
skills/dataiku-headless/references/administration.md →
skills/dataiku-headless/references/administration/code-environments.md →
skills/dataiku-headless/references/administration/plugins.md →
skills/dataiku-headless/references/agents/agent-tools.md →
skills/dataiku-headless/references/cobuild.md →
skills/dataiku-headless/references/container-execution.md →
skills/dataiku-headless/references/dashboards.md →
skills/dataiku-headless/references/datasets.md →
skills/dataiku-headless/references/datasets/uploaded-files-datasets.md →
skills/dataiku-headless/references/insights.md →
skills/dataiku-headless/references/jobs.md →
skills/dataiku-headless/references/llms-and-knowledge-banks.md →
skills/dataiku-headless/references/managed_folders.md →
skills/dataiku-headless/references/migrations.md →
skills/dataiku-headless/references/migrations/sources/excel/guides/validate.md →
skills/dataiku-headless/references/plugin-development.md →
skills/dataiku-headless/references/plugin-development/agent-tools.md →
skills/dataiku-headless/references/plugin-development/agents.md →
skills/dataiku-headless/references/plugin-development/connectors.md →
skills/dataiku-headless/references/plugin-development/file-formats.md →
skills/dataiku-headless/references/plugin-development/guardrails.md →
skills/dataiku-headless/references/plugin-development/llms.md →
skills/dataiku-headless/references/plugin-development/machine-learning.md →
skills/dataiku-headless/references/plugin-development/macros.md →
skills/dataiku-headless/references/plugin-development/prepare-processors.md →
skills/dataiku-headless/references/plugin-development/recipes.md →
skills/dataiku-headless/references/plugin-development/settings-checks.md →
skills/dataiku-headless/references/plugin-development/structured-agent-blocks.md →
skills/dataiku-headless/references/plugin-development/webapps.md →
skills/dataiku-headless/references/project-libraries.md →
skills/dataiku-headless/references/projects.md →
skills/dataiku-headless/references/projects/settings.md →
skills/dataiku-headless/references/recipes.md →
skills/dataiku-headless/references/semantic-models.md →
tests/test_dataset_metrics.py →
tests/test_execution_tools.py →
tests/test_http_middleware.py →
tests/test_http_plugin_renderer.py →
tests/test_instance_pinning.py →
tests/test_instance_policy.py →
tests/test_plugin_futures.py →
tests/test_plugin_packaging.py →
uv.lock →
dataiku_mcp/setup_server.py
− removed · + added
--- before +++ after @@ -12,28 +12,38 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Loopback-only browser setup for Dataiku instance credentials.""" +"""Temporary loopback instance manager for local stdio profiles.""" +import hashlib +import hmac +import json import secrets import threading import webbrowser -from dataclasses import dataclass -from html import escape +from dataclasses import dataclass, field +from functools import partial from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path from typing import get_args from urllib.parse import parse_qs, urlsplit import dataikuapi -from .config import request, stdio -from .config.models import InstanceType +from .config import stdio +from .config.models import InstanceType, StdioConfig, StdioDSSInstanceConfig +from .instance_policy import SUPPORTED_DSS_INSTANCE_TYPES SESSION_LIFETIME_SECONDS = 10 * 60 MAX_REQUEST_BYTES = 16 * 1024 _active_session: "SetupSession | None" = None _session_lock = threading.Lock() +_revision_key = secrets.token_bytes(32) + + +class _ConnectionTestError(ValueError): + """A connection failure whose underlying details can be expanded in the UI.""" + -# Keep the setup server single-route: this is the bird from the checked-in lockup. DATAIKU_BIRD_SVG = """<svg class="bird" viewBox="0 0 200 200" aria-hidden="true" focusable="false"> <path d="M191.342 139.061H108.562V154.536H191.342V139.061Z" fill="currentColor"/> <path d="M183.598 13.1855C179.295 5.34204 170.964 0 161.361 0C147.37 0 136.028 11.3412 136.028 25.3323C136.028 26.6678 136.156 27.9609 136.368 29.2328L134.226 31.8614L0.421086 196.935C-0.23607 197.74 -0.108879 198.927 0.696667 199.585C1.43862 200.178 2.51974 200.136 3.1981 199.457L59.5227 143.196C69.91 132.83 83.9858 127.001 98.6764 127.001H118.285C161.127 127.001 186.884 102.601 182.22 52.4664C180.609 35.2108 181.499 27.9397 187.414 20.6474C190.466 16.8953 196.381 9.56055 196.381 9.56055L189.449 11.5108L183.577 13.1643L183.598 13.1855ZM161.891 28.4485C158.096 28.4485 155.022 25.3747 155.022 21.5801C155.022 17.7856 158.096 14.7118 161.891 14.7118C165.685 14.7118 168.759 17.7856 168.759 21.5801C168.759 25.3747 165.685 28.4485 161.891 28.4485Z" fill="currentColor"/> @@ -48,18 +58,25 @@ timer: threading.Timer browser_opened: bool completed: threading.Event + settings_path: Path result: dict | None = None - validated_connection: tuple[str, str, bool] | None = None + validated_connection: tuple | None = field(default=None, repr=False) + validation_id: str = "" expired: bool = False + lock: threading.Lock = field(default_factory=threading.Lock, repr=False) def close(self) -> None: self.timer.cancel() self.completed.set() + self.validated_connection = None + self.validation_id = "" self.server.shutdown() self.server.server_close() -def _validate_form(form: dict[str, list[str]]) -> dict: +def _validate_form( + form: dict[str, list[str]], existing: StdioDSSInstanceConfig | None = None +) -> dict: name = form.get("name", [""])[0].strip() url = form.get("url", [""])[0].strip() api_key = form.get("api_key", [""])[0].strip() @@ -93,13 +110,14 @@ if parsed_url.username or parsed_url.password: raise ValueError("Instance URL cannot contain credentials.") url = f"{parsed_url.scheme}://{parsed_url.netloc}" - if not api_key: + if not api_key and existing is None: raise ValueError("API key is required.") return { "name": name, "url": url, - "api_key": api_key, + "api_key": api_key or (existing.api_key if existing else None), + "api_ticket": existing.api_ticket if existing and not api_key else None, "description": description, "instance_type": instance_type, "no_check_certificate": "no_check_certificate" in form, @@ -107,157 +125,211 @@ } -def _page( - *, - error: str = "", - status: str = "", - values: dict | None = None, - connection_validated: bool = False, -) -> str: - error_markup = ( - f'<div class="error" role="alert">{escape(error)}</div>' if error else "" - ) - status_markup = ( - f'<div class="status" role="status">{escape(status)}</div>' if status else "" +def _snapshot(config: StdioConfig | None = None) -> dict: + config = config if config is not None else stdio.get_profile_config() + instances = { + name: instance.to_instance(name) + for name, instance in config.dss_instances.items() + } + # Environment entries shadow saved profiles and remain read-only. + instances.update( + (name, instance) + for name, instance in stdio.get_instances().items() + if instance.source != "config" ) - is_initial_page = values is None - values = values or {} - name = escape(values.get("name", "")) - description = escape(values.get("description", "")) - instance_type = values.get("instance_type", "") - instance_type_options = "".join( - f'<option value="{value}"' - + (" selected" if value == instance_type else "") - + f">{value.replace('-', ' ').capitalize()}</option>" - for value in get_args(InstanceType) + current = stdio.get_current_instance() + return { + "supported_instance_types": sorted(SUPPORTED_DSS_INSTANCE_TYPES), + "connections": [ + { + "name": instance.name, + "url": instance.url, + "instance_type": instance.instance_type, + "description": instance.description, + "has_api_key": instance.api_key is not None, + "no_check_certificate": instance.no_check_certificate, + "source": instance.source, + "revision": ( + _profile_revision(config.dss_instances[instance.name]) + if instance.source == "config" + else "" + ), + } + for instance in instances.values() + ], + "active": current.name if current else None, + "default": config.default_instance, + "environment_precedence": any(i.source != "config" for i in instances.values()), + } + + +def _profile_revision(instance: StdioDSSInstanceConfig) -> str: + """Opaque version for stale editor/delete detection, never a raw secret hash.""" + return hmac.new( + _revision_key, instance.model_dump_json().encode(), hashlib.sha256 + ).hexdigest() + + +def _page(state: dict | None = None, *, nonce: str = "") -> str: + template = Path(__file__).with_name("setup_page.html").read_text(encoding="utf-8") + payload = json.dumps(state or {}, ensure_ascii=True).replace("<", "\\u003c") + return ( + template.replace("__BIRD__", DATAIKU_BIRD_SVG) + .replace("__NONCE__", nonce) + .replace("__STATE__", payload) ) - url = escape(values.get("url", "")) - api_key = escape(values.get("api_key", "")) - set_default = " checked" if is_initial_page or values.get("set_default") else "" - no_check_certificate = " checked" if values.get("no_check_certificate") else "" - save_disabled = "" if connection_validated else " disabled" - return f"""<!doctype html> -<html lang="en"> -<head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <title>Configure Dataiku</title> - <style> - :root {{ color-scheme:light; --ink:#1a1a1a; --muted:#606b70; --teal:#00a6a6; --teal-dark:#007b7d; --line:#d9dfdf; --paper:#fffef9; --surface:#fff; --soft:#f3f7f6; --error:#a6242f; }} - * {{ box-sizing: border-box; }} - body {{ margin:0; min-height:100vh; font:15px/1.5 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; color:var(--ink); background:var(--paper); border-top:4px solid var(--teal); }} - main {{ width:min(720px, calc(100% - 32px)); margin:48px auto; }} - .brand {{ display:flex; align-items:center; gap:12px; margin-bottom:24px; }} - .bird {{ display:block; width:48px; height:48px; color:var(--ink); }} - .brand-copy {{ display:grid; gap:1px; line-height:1; }} - .brand-name {{ font-size:18px; font-weight:750; letter-spacing:-.02em; }} - .brand-product {{ color:var(--muted); font-size:11px; font-weight:700; letter-spacing:.12em; text-transform:uppercase; }} - .card {{ background:var(--surface); border:1px solid var(--line); border-radius:12px; padding:32px; box-shadow:0 1px 2px #1a1a1a0d; }} - h1 {{ margin:0; font-size:clamp(28px, 5vw, 38px); line-height:1.1; letter-spacing:-.035em; }} - .intro {{ color:var(--muted); font-size:16px; margin:8px 0 24px; max-width:58ch; }} - .security {{ display:flex; gap:16px; align-items:flex-start; background:var(--soft); border:1px solid #d6e9e5; border-radius:8px; padding:16px; margin-bottom:24px; }} - .security-label {{ flex:0 0 auto; color:var(--teal-dark); font-size:11px; font-weight:750; letter-spacing:.08em; line-height:20px; text-transform:uppercase; }} - .security strong {{ display:block; margin-bottom:2px; }} - .security div {{ color:var(--muted); font-size:13px; }} - .grid {{ display:grid; grid-template-columns:1fr 1fr; gap:18px; }} - label {{ display:block; font-size:13px; font-weight:650; margin-bottom:8px; }} - .full {{ grid-column:1 / -1; }} - input[type=text], input[type=url], input[type=password], select {{ width:100%; border:1px solid var(--line); border-radius:8px; padding:11px 12px; color:var(--ink); background:var(--paper); font:inherit; outline:none; transition:border-color 150ms ease, box-shadow 150ms ease, background-color 150ms ease; }} - input:hover, select:hover {{ border-color:#aeb9b9; }} - input:focus-visible, select:focus-visible {{ border-color:var(--teal-dark); box-shadow:0 0 0 3px #00a6a626; background:var(--surface); }} - .hint {{ color:var(--muted); font-size:12px; margin-top:4px; }} - .checks {{ display:grid; gap:12px; margin:20px 0 24px; }} - .check {{ display:flex; gap:10px; align-items:flex-start; font-weight:500; margin:0; }} - .check input {{ margin-top:4px; accent-color:var(--teal); flex:0 0 auto; }} - details {{ margin-top:16px; }} - summary {{ color:var(--muted); cursor:pointer; font-size:13px; font-weight:650; }} - details .check {{ margin-top:12px; }} - .actions {{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }} - button {{ width:100%; border:0; border-radius:8px; padding:12px 16px; color:white; background:var(--teal-dark); font:inherit; font-weight:700; line-height:1.2; cursor:pointer; transition:background-color 150ms ease, box-shadow 150ms ease; }} - button:hover {{ background:#00696c; }} - button:disabled, button:disabled:hover {{ color:#6f797d; background:#d9dfdf; cursor:not-allowed; }} - button.secondary {{ color:var(--ink); background:var(--surface); border:1px solid var(--line); }} - button.secondary:hover {{ background:var(--soft); }} - button:focus-visible {{ outline:3px solid #00a6a64d; outline-offset:3px; }} - .error {{ background:#fff4f3; color:var(--error); border:1px solid #f0c7c8; border-radius:8px; padding:12px; margin-bottom:20px; }} - .status {{ background:#effaf7; color:#245d57; border:1px solid #ccece4; border-radius:8px; padding:12px; margin-bottom:20px; }} - @media (max-width:600px) {{ main {{ margin:24px auto; }} .brand {{ margin-bottom:20px; }} .bird {{ width:40px; height:40px; }} .card {{ padding:24px; }} .security {{ flex-direction:column; gap:4px; }} .grid {{ grid-template-columns:1fr; }} .full {{ grid-column:auto; }} .actions {{ grid-template-columns:1fr; }} }} - @media (prefers-reduced-motion:reduce) {{ input, button {{ transition:none; }} }} - </style> -</head> -<body> - <main> - <header class="brand">{DATAIKU_BIRD_SVG}<span class="brand-copy"><span class="brand-name">Dataiku</span><span class="brand-product">Headless</span></span></header> - <section class="card"> - <h1>Connect to Dataiku</h1> - <p class="intro">Add or update the instance this agent can use.</p> - <div class="security"><span class="security-label">Local only</span><div><strong>Your credentials stay on this machine.</strong>The API key is saved with user-only (0600) file permissions. This page runs on 127.0.0.1 and expires after 10 minutes.</div></div> - {error_markup} - <form method="post" autocomplete="off"> - <div class="grid"> - <div><label for="name">Instance name</label><input id="name" name="name" type="text" placeholder="production" value="{name}" maxlength="80" required><div class="hint">A short name used when switching instances.</div></div> - <div><label for="description">Description</label><input id="description" name="description" type="text" placeholder="Production Dataiku" value="{description}"></div> - <div class="full"><label for="instance_type">Instance type</label><select id="instance_type" name="instance_type" required><option value="" disabled{"" if instance_type else " selected"}>Choose an instance type</option>{instance_type_options}</select></div> - <div class="full"><label for="url">Instance URL</label><input id="url" name="url" type="url" placeholder="https://your-instance.dataiku.com" value="{url}" aria-describedby="url-hint" required><div class="hint" id="url-hint">Enter the URL of your Dataiku instance.</div></div> - <div class="full"><label for="api_key">API key</label><input id="api_key" name="api_key" type="password" value="{api_key}" required><div class="hint">Create one in Dataiku under Profile & Settings → API keys.</div></div> - </div> - <div class="checks"> - <label class="check"><input type="checkbox" name="set_default"{set_default}><span>Use this instance by default when Dataiku Headless starts.</span></label> - </div> - <details><summary>Advanced options</summary><label class="check"><input type="checkbox" name="no_check_certificate"{no_check_certificate}><span>Skip certificate verification (only for trusted instances with self-signed certificates).</span></label></details> - {status_markup} - <div class="actions"><button class="secondary" type="submit" name="action" value="test">Test connection</button><button type="submit" name="action" value="save"{save_disabled}>Save instance</button></div> - </form> - </section> - </main> -</body> -</html>""" - - -def _success_page(name: str) -> str: - return f"""<!doctype html> -<html lang="en"> -<head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <title>Dataiku configured</title> - <style> - :root {{ color-scheme:light; --ink:#1a1a1a; --muted:#606b70; --teal:#00a6a6; --paper:#fffef9; --line:#d9dfdf; }} - * {{ box-sizing:border-box; }} - body {{ margin:0; min-height:100vh; display:grid; place-items:center; color:var(--ink); background:var(--paper); border-top:4px solid var(--teal); font:16px/1.5 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }} - main {{ width:min(520px, calc(100% - 32px)); margin:32px auto; padding:32px; background:white; border:1px solid var(--line); border-radius:12px; box-shadow:0 1px 2px #1a1a1a0d; text-align:center; }} - .bird {{ display:block; width:56px; height:56px; margin:0 auto 24px; color:var(--ink); }} - .ok {{ width:32px; height:32px; margin:auto; display:grid; place-items:center; border-radius:50%; background:var(--teal); color:white; font-size:18px; font-weight:800; }} - h1 {{ margin:16px 0 8px; font-size:30px; line-height:1.15; letter-spacing:-.03em; }} - p {{ margin:0; color:var(--muted); }} - strong {{ color:var(--ink); }} - @media (max-width:480px) {{ main {{ padding:24px; }} }} - </style> -</head> -<body> - <main> - {DATAIKU_BIRD_SVG} - <div class="ok">✓</div> - <h1>Dataiku is connected</h1> - <p><strong>{escape(name)}</strong> is now the active instance. You can close this tab and continue in your AI coding tool.</p> - </main> -</body> -</html>""" def _test_connection(values: dict) -> None: + if values["instance_type"] not in SUPPORTED_DSS_INSTANCE_TYPES: + raise ValueError( + f"Connection testing is unavailable for {values['instance_type']}. Save the profile without testing." + ) + client = None try: - client = dataikuapi.DSSClient(values["url"], values["api_key"]) - client._session.verify = not values["no_check_certificate"] + client = dataikuapi.DSSClient( + values["url"], + api_key=values["api_key"], + internal_ticket=values["api_ticket"], + no_check_certificate=values["no_check_certificate"], + ) + client._session.request = partial(client._session.request, timeout=15) client.get_auth_info() except Exception as exc: - raise ValueError( - "Could not connect. Check the URL, API key, and certificate settings." - ) from exc + raise _ConnectionTestError(str(exc)) from None + finally: + if client is not None: + client._session.close() + + +def _candidate(form: dict[str, list[str]]) -> tuple: + original_name = form.get("original_name", [""])[0] or None + config = stdio.get_profile_config() + connections = {i["name"]: i for i in _snapshot(config)["connections"]} + if original_name: + instance = connections.get(original_name) + if not instance or instance["source"] != "config": + raise ValueError("This saved instance cannot be edited. Refresh the list.") + existing = config.dss_instances.get(original_name) if original_name else None + if existing is not None and form.get("revision", [""])[0] != _profile_revision( + existing + ): + raise ValueError("This instance changed. Reopen the manager and test again.") + values = _validate_form(form, existing) + if values["name"] != original_name and values["name"] in connections: + raise ValueError("An instance with this name already exists.") + instance = StdioDSSInstanceConfig( + **{k: v for k, v in values.items() if k not in {"name", "set_default"}} + ) + return original_name, existing, instance, values["name"] -def _connection_settings(values: dict) -> tuple[str, str, bool]: - return values["url"], values["api_key"], values["no_check_certificate"] +def _connection_identity(candidate: tuple) -> tuple: + original, existing, instance, _ = candidate + # Description and name changes do not change the authenticated target. + return ( + original, + existing, + instance.url, + instance.api_key, + instance.api_ticket, + instance.no_check_certificate, + instance.instance_type, + ) + + +def _perform_action(session: SetupSession, form: dict[str, list[str]]) -> dict: + if session.expired or session.completed.is_set(): + raise ValueError( + "This instance manager has closed. Open it again from your agent." + ) + if session.settings_path != stdio.get_settings_path(): + raise ValueError("The profile file changed. Open the instance manager again.") + action = form.get("action", [""])[0] + name = form.get("name", [""])[0] + if action == "test": + session.validated_connection = None + session.validation_id = "" + candidate = _candidate(form) + _test_connection(candidate[2].model_dump()) + if session.expired: + raise ValueError( + "This instance manager expired. Open it again from your agent." + ) + session.validated_connection = _connection_identity(candidate) + session.validation_id = secrets.token_urlsafe(24) + return {"validation_id": session.validation_id} + if action == "save": + candidate = _candidate(form) + if candidate[2].instance_type in SUPPORTED_DSS_INSTANCE_TYPES and ( + not session.validation_id + or form.get("validation_id", [""])[0] != session.validation_id + or session.validated_connection != _connection_identity(candidate) + ): + raise ValueError( + "Test the connection successfully before saving. Test again after changing its connection settings." + ) + original, existing, instance, name = candidate + stdio.save_instance_profile( + name, + instance, + original_name=original, + expected_instance=existing, + set_default="set_default" in form, + activate="activate" in form, + ) + session.validated_connection = None + session.validation_id = "" + elif action == "switch": + state = _snapshot() + selected = next((i for i in state["connections"] if i["name"] == name), None) + if selected is None: + raise ValueError("This instance no longer exists. Refresh the list.") + if selected["source"] == "config": + instance = stdio.get_profile_config().dss_instances[name].to_instance(name) + else: + instance = stdio.get_instances()[name] + stdio.set_current_instance(instance) + elif action == "default": + stdio.set_default_instance(name) + elif action == "delete": + config = stdio.get_profile_config() + current = stdio.get_current_instance() + if name not in config.dss_instances: + raise ValueError("This saved instance no longer exists. Refresh the list.") + if form.get("revision", [""])[0] != _profile_revision( + config.dss_instances[name] + ): + raise ValueError( + "This instance changed. Reopen the manager before deleting." + ) + needs_replacement = config.default_instance == name or ( + current and current.name == name + ) + others = [ + i["name"] + for i in _snapshot(config)["connections"] + if i["source"] == "config" and i["name"] != name + ] + replacement = form.get("replacement", [""])[0] or None + if needs_replacement and others and replacement not in others: + raise ValueError("Choose another saved instance as the replacement.") + stdio.delete_instance_from_config( + name, replacement=replacement, expected_instance=config.dss_instances[name] + ) + elif action != "done": + raise ValueError("Unknown instance management action.") + state = _snapshot() + if action == "done": + session.result = { + "active_instance": state["active"], + "connection_count": len(state["connections"]), + } + session.timer.cancel() + session.validated_connection = None + session.validation_id = "" + session.completed.set() + return {"state": state} def _make_handler(token: str, expected_host: str, session_state: SetupSession | None): @@ -265,17 +337,29 @@ def log_message(self, format: str, *args) -> None: return - def _send_html(self, status: int, body: str) -> None: + def _send( + self, + status: int, + body: str, + *, + json_response: bool = False, + nonce: str = "", + ) -> None: encoded = body.encode("utf-8") self.send_response(status) - self.send_header("Content-Type", "text/html; charset=utf-8") + self.send_header( + "Content-Type", + "application/json; charset=utf-8" + if json_response + else "text/html; charset=utf-8", + ) self.send_header("Content-Length", str(len(encoded))) self.send_header("Cache-Control", "no-store") self.send_header( "Content-Security-Policy", - "default-src 'none'; style-src 'unsafe-inline'; form-action 'self'; frame-ancestors 'none'", + f"default-src 'none'; img-src data:; style-src 'unsafe-inline'; script-src 'nonce-{nonce}'; connect-src 'self'; form-action 'self'; frame-ancestors 'none'; base-uri 'none'", ) - self.send_header("Referrer-Policy", "same-origin") + self.send_header("Referrer-Policy", "no-referrer") self.send_header("X-Content-Type-Options", "nosniff") self.end_headers() self.wfile.write(encoded) @@ -289,7 +373,26 @@ if not self._valid_request(): self.send_error(404) return - self._send_html(200, _page()) + if ( + session_state is None + or session_state.completed.is_set() + or session_state.settings_path != stdio.get_settings_path() + ): + self._send( + 410, + "This instance manager has closed. Open it again from your agent.", + ) + return + nonce = secrets.token_urlsafe(24) + try: + state = _snapshot() + except (ValueError, RuntimeError, OSError): + self._send( + 500, + "Could not read the saved instances. Check your local profile file.", + ) + return + self._send(200, _page(state, nonce=nonce), nonce=nonce) def do_POST(self) -> None: if not self._valid_request(): @@ -307,79 +410,91 @@ self.rfile.read(content_length).decode("utf-8"), keep_blank_values=True, ) - values = _validate_form(form) - action = form.get("action", ["save"])[0] - if action == "test": - _test_connection(values) - if session_state: - session_state.validated_connection = _connection_settings( - values - ) - self._send_html( - 200, - _page( - status="Connection successful. You can now save this instance.", - values=values, - connection_validated=True, - ), - ) - return - if action != "save": - raise ValueError("Unknown setup action.") - if ( - not session_state - or session_state.validated_connection - != _connection_settings(values) - ): - raise ValueError( - "Test the connection successfully before saving. Test again after changing the URL, API key, or certificate setting." + if any(len(values) != 1 for values in form.values()): + raise ValueError("Duplicate form fields are not allowed.") + if session_state is None: + raise ValueError("Open the instance manager again.") + with session_state.lock: + result = _perform_action(session_state, form) + except _ConnectionTestError as error: + self._send( + 400, + json.dumps( + { + "error": "Could not connect. Check the URL, API key, and certificate settings.", + "details": str(error), + } + ), + json_response=True, + ) + return + except (UnicodeDecodeError, ValueError, RuntimeError) as error: + # Validation errors are deliberately authored here. Never return raw + # Pydantic/settings errors, which can contain profile or secret data. + if type(error) is ValueError: + message = str(error) + if message.startswith("Invalid stdio settings"): + message = "Could not read the saved instances. Check your local profile file." + else: + message = ( + "Could not process this request. Reopen the instance manager." ) - result = stdio.add_instance_to_config(**values) - request.set_current_instance(result["name"]) - except (UnicodeDecodeError, ValueError, RuntimeError) as exc: - self._send_html( - 400, _page(error=str(exc), values=locals().get("values")) + self._send(400, json.dumps({"error": message}), json_response=True) + return + except OSError: + self._send( + 500, + json.dumps( + { + "error": "Could not save the local profile file. Check its permissions and try again." + } + ), + json_response=True, ) return - - self._send_html(200, _success_page(result["name"])) - if session_state: - session_state.result = result - session_state.timer.cancel() - session_state.completed.set() - threading.Thread(target=self.server.shutdown, daemon=True).start() + self._send(200, json.dumps(result), json_response=True) + if session_state.completed.is_set(): + threading.Thread(target=session_state.close, daemon=True).start() return SetupHandler def start_setup_server(*, open_browser: bool = True) -> SetupSession: - """Start one temporary setup page on a random loopback port and URL token.""" + """Start a instance manager on a random loopback port and secret URL.""" global _active_session - with _session_lock: if _active_session: _active_session.close() - token = secrets.token_urlsafe(24) server = ThreadingHTTPServer(("127.0.0.1", 0), _make_handler(token, "", None)) host = f"127.0.0.1:{server.server_port}" - url = f"http://{host}/{token}" thread = threading.Thread(target=server.serve_forever, daemon=True) - completed = threading.Event() def expire() -> None: session.expired = True + session.validated_connection = None + session.validation_id = "" session.completed.set() server.shutdown() + server.server_close() timer = threading.Timer(SESSION_LIFETIME_SECONDS, expire) timer.daemon = True - session = SetupSession(url, server, thread, timer, False, completed) + session = SetupSession( + f"http://{host}/{token}", + server, + thread, + timer, + False, + completed, + stdio.get_settings_path(), + ) server.RequestHandlerClass = _make_handler(token, host, session) thread.start() timer.start() - browser_opened = webbrowser.open(url, new=2) if open_browser else False - session.browser_opened = browser_opened + session.browser_opened = ( + webbrowser.open(session.url, new=2) if open_browser else False + ) _active_session = session - return _active_session + return session
Full technical diff · 208 changed fields
added /files/.agents~1plugins~1marketplace.json
Field was absent
{
"sha256": "5a1a724844a602acdab8e4f6ffe307b0f7772af0b6c437d6425d8142d21b960a",
"size": 659
}changed /files/.claude-plugin~1marketplace.json/sha256
"df10462f2b84eab4a4a48d68b6cdeb80a402fda5fe985987292ab93635554e52"
"c142b21c6e1a8f24e5cf2dd6ce31c5c9441a58fe3a64d8f3d8efc6c2e10e7d5a"
changed /files/.claude-plugin~1marketplace.json/size
556
603
changed /files/.claude-plugin~1plugin.json/sha256
"c6935b186ecc9648319eb1dafc96f223b41c556d445a54d8ec0c6ea9f360e9d9"
"932135fd42ae2b929c46b8ac93df3d2e2fb8b1d51a7a8a6057e1227edf2b5ead"
changed /files/.claude-plugin~1plugin.json/size
926
918
added /files/.codex-plugin~1mcp.json
Field was absent
{
"sha256": "ad37dba1daf5b808c8c02044c413300dd45820fe9e50aef4897fd1c29a0f41b4",
"size": 623
}changed /files/.codex-plugin~1plugin.json/sha256
"2badf002fed037383d73ccb951fb1e6c4b9657a996a9dc611fc08ad6044d8e59"
"ef60afa841515d5c97c609ed6fdf6c2895dfda1f7e02f35c1e6dc4a61e520e44"
changed /files/.codex-plugin~1plugin.json/size
7118
7131
changed /files/.cortex-plugin~1plugin.json/sha256
"77c7e3923d64d1ba00e330bb4f30c672499b7b0eef5d2ad291ab9b252bbdbd06"
"3436a9f9aa992b405d9868c83114966d7537bdd3cc35ef779d29739d13b35a05"
added /files/.cursor-plugin~1marketplace.json
Field was absent
{
"sha256": "8b247aec5b9cbbbaecb9be45aabbd828f17005f8bc79500ef32df0ab8370bab5",
"size": 578
}changed /files/.cursor-plugin~1plugin.json/sha256
"e0d30697f920b3e68fba8215661af35aec877a5a88f744f9903035bcb0d3ad26"
"ad1226956172fc34d4e500fd770c91be6613c593cc1e804dcb9ff37420f05cf0"
added /files/.github~1plugin~1marketplace.json
Field was absent
{
"sha256": "8b247aec5b9cbbbaecb9be45aabbd828f17005f8bc79500ef32df0ab8370bab5",
"size": 578
}added /files/.github~1plugin~1plugin.json
Field was absent
{
"sha256": "b306cbbdfc7d689560ebb27e44dbb8467d82284b822c3ae7a0a3674b5eed372a",
"size": 848
}removed /files/.mcp.json
{
"sha256": "ad37dba1daf5b808c8c02044c413300dd45820fe9e50aef4897fd1c29a0f41b4",
"size": 623
}Field is absent
changed /files/AGENTS.md/sha256
"78a1522ef9ec675bbcdd59930cb2579b569a502f8034dcaffac1755431ad2640"
"dc0554d0814a0604032c2dcf555419093c590c58f3de4142d4a2fd7942caf474"
changed /files/AGENTS.md/size
7498
7675
changed /files/CHANGELOG.md/sha256
"9070459d24cb782082b736358dac1a3c8dbf8324b16f0faf4e5ea0b957fe3416"
"1c697b1ce71dec51b0cc9a12d96b0e426ea897b6f03106c252c8376b5be8466b"
changed /files/CHANGELOG.md/size
4162
4695
changed /files/CODING_STANDARDS_AND_STRUCTURE.md/sha256
"42c104a39849f8ba4aba28fd4b0cd7814833d928f70679555feb9c764af14511"
"3d3845075a21e2814e9b517f16aa85970177e8245e7ee382bb48aa9b476a802c"
changed /files/CODING_STANDARDS_AND_STRUCTURE.md/size
14143
15343
added /files/CONTRIBUTORS.md
Field was absent
{
"sha256": "1b3b498a5e1fcd6ec0ecfdca936ec74581081517bc703fe3ae74f3d6e459d7be",
"size": 938
}added /files/NOTICE
Field was absent
{
"sha256": "14a8e7d5123c6c13f89faedf678f44edae11074936b39322c7f75269fa3b128d",
"size": 12906
}changed /files/README.md/sha256
"509079466298a4635f6b578de0252a7602c7cf602e0defa2433215f78b48f05b"
"9ed1f335c291dfac7b440422173546299ca4e229ccc779e6bf0337150ddaa39d"
changed /files/README.md/size
18296
20661
changed /files/dataiku_mcp~1config~1stdio.py/sha256
"a94c031a5ddd27410d558bfbf5a64140bb8d71a1fe8b0648100ba960aba07dfc"
"1de4adbc3887895dabd136feebf47391e0885e6863980feefe7c7605ea37ba5a"
changed /files/dataiku_mcp~1config~1stdio.py/size
10606
14141
added /files/dataiku_mcp~1instance_policy.py
Field was absent
{
"sha256": "a62e0be2e7aa8c9fc1e0fbc57cc60f970e78a5b80aa511cacba971d6d46483a5",
"size": 2438
}changed /files/dataiku_mcp~1server.py/sha256
"713ec23963d7bee246ef13a262153e8027275021fe1efd9d7eb00b35c5d92ba2"
"675914e7bba7e287949ab3f8d622c27a993149f86541d293f682a1a210815145"
changed /files/dataiku_mcp~1server.py/size
5717
6544
added /files/dataiku_mcp~1setup_page.html
Field was absent
{
"sha256": "788db788817813489f5b94ea72d2497368c93b3fb0307787445afa941ab4a77a",
"size": 36742
}changed /files/dataiku_mcp~1setup_server.py/sha256
"10dcf7c76477f59bf8e8ba9a18852db6ce47ca9a77c73001f7d34f63d5aef8d7"
"1721fc394eb0e2b3417c8287fa95c3776c5580cb13c97e03a91db2548608845d"
changed /files/dataiku_mcp~1setup_server.py/size
20109
20373
changed /files/dataiku_mcp~1tools~1agent_reviews.py/sha256
"1f0c071ec6608c80ca192dbe6d6a09f721672fa48aaf18c8b5282822fb0c2a33"
"fcb8c88bb520dc6689b9b98045cff61387310ea0917aafa70bf2217adf11a552"
changed /files/dataiku_mcp~1tools~1agent_reviews.py/size
8494
8694
changed /files/dataiku_mcp~1tools~1agents.py/sha256
"de80b96836ef3136d6333cc070db1a355c761bc26b246528cff329d1b207e2ec"
"9b83b82a3197154eb647c47575c81bbb57f51d68073ef19a3139def312fad391"
changed /files/dataiku_mcp~1tools~1agents.py/size
8134
8334
changed /files/dataiku_mcp~1tools~1cobuild.py/sha256
"bf1136330a28fe2d9cc136de9e058066524b4943e51a1553405304692576ae44"
"c7b3f8180c280709eab3a6118b71038c61282b7c0044b67622676a978cacf33c"
changed /files/dataiku_mcp~1tools~1cobuild.py/size
19410
19640
changed /files/dataiku_mcp~1tools~1code_environments.py/sha256
"71f6ffb36c9bb6ab39209efb74635b29161ab07ea729b14ea3286f9047dfcb55"
"0eff238e901c71cea7ac6f567477466178dc476b9269cfffa1d4ce31e72960f8"
changed /files/dataiku_mcp~1tools~1code_environments.py/size
18626
18761
changed /files/dataiku_mcp~1tools~1connections.py/sha256
"d112a160a4f76e81db7833ebcc97c75c80965bcfb86594e3c3464789fea0570b"
"1572ce248bfe12e907498fe6ffeb47c4770cdddd32e47a9582518d66361563c1"
changed /files/dataiku_mcp~1tools~1connections.py/size
8850
8962
changed /files/dataiku_mcp~1tools~1container_exec.py/sha256
"213b1f3c5019fc5db79210efbf468920a752121eecd6e82102b471e233d7c6ae"
"43dbff406fc6948c765c39ad522d2560e05e50706740ea432b63e0bfc34c3785"
changed /files/dataiku_mcp~1tools~1container_exec.py/size
7582
7662
changed /files/dataiku_mcp~1tools~1cross_project_sharing.py/sha256
"5c4e5780ff7faaf62ed84e568b65641fd23448c48b5fcc81dd5ad6cb19581792"
"31714e0f338a562c2341e10c0b26bf1512a985c0274a3f32bf5a97cc8a689418"
changed /files/dataiku_mcp~1tools~1cross_project_sharing.py/size
2452
2532
changed /files/dataiku_mcp~1tools~1dashboards.py/sha256
"d313ecf211aad832faf1bb1b79f6df04d7da9282705e8d9e025f033d5e3d2887"
"a03074fb9b7971759c59b97d539d37a685633cf490aae32edc61cbe484d5f1a7"
changed /files/dataiku_mcp~1tools~1dashboards.py/size
2844
2954
changed /files/dataiku_mcp~1tools~1data_collections.py/sha256
"bc34ac98f9e92fbb301633da2116e7c2f1f71d9aa6ecdd6a732771320fd7b688"
"fd1987886cd970fa8069fa4d7a34c1d645f254e36f3a9b3a25554ddf5c7f3659"
changed /files/dataiku_mcp~1tools~1data_collections.py/size
2597
2686
changed /files/dataiku_mcp~1tools~1data_quality.py/sha256
"c10bd394735a5e92a134f6fda4be2ab4e30cad5cef4142f0539fdf4f5e408498"
"5cc50a9b82aec30626052e92434df3b474c8b72c982c9e885ded18e3b98b1886"
changed /files/dataiku_mcp~1tools~1data_quality.py/size
11343
11543
changed /files/dataiku_mcp~1tools~1datasets.py/sha256
"b231a4721bc87b58e17ff7dd0b048ddc9c34ff0c992ea777cb23c065d29d1265"
"34e500b80e817df7cdd62911cfc3337261a21815ca70e5bfb63f6d45260af83f"
changed /files/dataiku_mcp~1tools~1datasets.py/size
31508
33889
changed /files/dataiku_mcp~1tools~1evaluation_stores.py/sha256
"cee3a0367a33532e9cdbbabd526e1b3c89e97c304c52ba2937139d86bdd0cc7e"
"ae203a57dce4e123c411fabcf2d25bbfbc4964bba395c23b3cc2ef02c80a84f2"
changed /files/dataiku_mcp~1tools~1evaluation_stores.py/size
4819
4929
changed /files/dataiku_mcp~1tools~1flow.py/sha256
"c5001a225a76d083bb086d1471ab3a3654925b8ad6c8a416b8c587cc86486960"
"acba8b3c45cd4b3ffd3880e0499a5d0dc1e7d189e69d409a2f910f5ed2dcc560"
changed /files/dataiku_mcp~1tools~1flow.py/size
14417
14557
changed /files/dataiku_mcp~1tools~1general_settings.py/sha256
"ded1b8f1d1fde94070a27b3c17fcd54774f43d44b3edc9aced97652577e40126"
"5f3ce3ad0311df26e2836a42591b92dbd15a019a8bac33b2bdaae01b86e37d98"
changed /files/dataiku_mcp~1tools~1general_settings.py/size
7363
7452
changed /files/dataiku_mcp~1tools~1groups.py/sha256
"bd8069621f80692c6d15efa78eb1e4d0d4f70c4daf4e2f73d999854e454d906c"
"fc1cb99ce40b3133acdad36c2b6ac27d2a8d4a11f7d1dead3de86307d28122f7"
changed /files/dataiku_mcp~1tools~1groups.py/size
18994
19129
changed /files/dataiku_mcp~1tools~1insights.py/sha256
"de345b96861a1f794aeeef255c10a2c6e4893522de4b47aa292c246de9fca001"
"f62d3739378989dd6172134a7143a2f98b0e7042f5952caf2b03fce02b483d95"
changed /files/dataiku_mcp~1tools~1insights.py/size
2744
2854
changed /files/dataiku_mcp~1tools~1instances.py/sha256
"880053a31c7aad0c8e1363dfa3e8f82fea7b8a39ce9cd1c31a24470ba9f49031"
"2542546acc83f03b7120c30e2e552fb4b2547530bf01e0f90f8aea61f22e242b"
changed /files/dataiku_mcp~1tools~1instances.py/size
8016
9830
changed /files/dataiku_mcp~1tools~1jobs.py/sha256
"a151c67e907b21af03b29763498bb14c692ca78954b797b9f1c6575ab13c3f5f"
"4aa853a2a3a4d6d7ae3177283a3860a5bba8ec9a4f2d295422333d218b155e1f"
changed /files/dataiku_mcp~1tools~1jobs.py/size
24912
27833
changed /files/dataiku_mcp~1tools~1licensing.py/sha256
"157b59ac1c40c43c743727aa8806d934c2ca4672c02ed30ea7c64a504779b938"
"158d078a3bf1e428175bb623f544697741f7d66470f8a11c64462a62fdbcd735"
changed /files/dataiku_mcp~1tools~1licensing.py/size
3307
3373
changed /files/dataiku_mcp~1tools~1llms_and_knowledge_banks.py/sha256
"159026a27802a96fc0d3a683b369bd3d5caf1844b6332fca4821b7ea26b2b992"
"0b9210d7801f27cad274ec8511c383095c8e6914b48c3e399603e4b7276e9216"
changed /files/dataiku_mcp~1tools~1llms_and_knowledge_banks.py/size
12657
12885
changed /files/dataiku_mcp~1tools~1machine_learning~1analyses.py/sha256
"e8afb818d4763d8c16222f9cd3802e97d96b5aeb348fc5032780122b99fbcc1f"
"c049ab0ad4470741aeb664488b92d9b131b6cb736a403296edc203afb9e7de1d"
changed /files/dataiku_mcp~1tools~1machine_learning~1analyses.py/size
10195
10396
changed /files/dataiku_mcp~1tools~1machine_learning~1saved_models.py/sha256
"aaca7be92ae2e7b03d6f054c6ab74fca745dbaaf541cfe66edd8006a84478015"
"82092e9a574cf4512ee9e8cc90d857ce86c455ecfb49379a468ba8f194a2ea54"
changed /files/dataiku_mcp~1tools~1machine_learning~1saved_models.py/size
3660
3801
changed /files/dataiku_mcp~1tools~1managed_folders.py/sha256
"75e035fb3682a9d1f633c31267b2152a535d9bd2823a1c0457b4fd36cb38ede3"
"5eb8976c76a5fce07a080e71abd05307ac977561285660306f0758ef68aac7df"
changed /files/dataiku_mcp~1tools~1managed_folders.py/size
8623
8857
changed /files/dataiku_mcp~1tools~1plugins.py/sha256
"3601e0a1d18c95c6c80da216e56115751be1c3a0bfa9201d7e3258633a9931d6"
"d83b503026dcc3648f96eb76a440f26eb51c0d70f3203c7fa194d71a182ed446"
changed /files/dataiku_mcp~1tools~1plugins.py/size
32950
54470
changed /files/dataiku_mcp~1tools~1project_folders.py/sha256
"8b901ae8a7c1e95d219e73b1ebdc040096ad1fed822967dd56b0f49fc439c337"
"c4b2f5addad857b0d2cdf8375c10510d1e24218c3b166d7cdf2b8f966ab2a209"
changed /files/dataiku_mcp~1tools~1project_folders.py/size
7580
7738
changed /files/dataiku_mcp~1tools~1project_libraries.py/sha256
"8d5f9f012353f6068d388266e299d44a9e67168c8d2bf2bcfd0ebbab95e806b9"
"264180c250e28e5cafc5099a0db891159a0ad86c777dffd3fe07d6ee2ab5d71e"
changed /files/dataiku_mcp~1tools~1project_libraries.py/size
21694
21928
changed /files/dataiku_mcp~1tools~1projects.py/sha256
"843fbbca160d161443d6b7220d20faea717154b45b3ad28a681164cbbb22bd2f"
"5597b1b247cbd206fbc3123dab9c648b8adfcf37078a24e6958506343c08b194"
changed /files/dataiku_mcp~1tools~1projects.py/size
13439
13767
changed /files/dataiku_mcp~1tools~1recipes.py/sha256
"57016cda5836d41e223b1510788a260bf1a5e0273b19e965066459f8537a331f"
"a9212fd94149e677a595a97541338f9b0bfc9f7935c4be97f29565d33a1af224"
changed /files/dataiku_mcp~1tools~1recipes.py/size
4891
5001
changed /files/dataiku_mcp~1tools~1scenarios.py/sha256
"a7664d79751a7a26439825bef09c5e47fb80190591815eabdb01e8fbd37ea071"
"91b4003f37b42e388ced26044c2def414214d8e790ae821e6fbad334d0edafad"
changed /files/dataiku_mcp~1tools~1scenarios.py/size
14117
14377
changed /files/dataiku_mcp~1tools~1semantic_models.py/sha256
"b3c2cac7424a70db0854c2842d2ca0316031bdf759d716d103652414e8cf44aa"
"b3a583be2af3fe1344fca10e7ab56d0ff6feb1afdc7d5bf75ffad3ed9b51939f"
changed /files/dataiku_mcp~1tools~1semantic_models.py/size
3205
3313
changed /files/dataiku_mcp~1tools~1users.py/sha256
"83987175f3b5e6311c7c96ddc545e2399225b2e0f2b96f31cdc63fe72baa5f3b"
"4bc2453720924c1aab29317578b3d90a7921ea6701ddd0ca493f0cab2d376939"
changed /files/dataiku_mcp~1tools~1users.py/size
11125
11260
changed /files/dataiku_mcp~1tools~1utils~1metrics.py/sha256
"382d22e6bec3077dce831411f1f5819fe6052d10e42e436be500262966626a37"
"f04a294d50e47dbc7dcf90d2f96f9a34b1966ccc4b5ed959496f056008cd045e"
changed /files/dataiku_mcp~1tools~1utils~1metrics.py/size
2136
3861
changed /files/dataiku_mcp~1tools~1utils~1validation.py/sha256
"4c4daef28e5040e2c48a5a8db178de769d6dc9186e84f9b302defd39d238dbab"
"5a532dad44aa0e677992d9499eeec9245d0875d8a360394925664e7f16453915"
changed /files/dataiku_mcp~1tools~1utils~1validation.py/size
3807
5272
changed /files/dataiku_mcp~1tools~1webapps.py/sha256
"158763a01a5b614a8f9bc9114a9bb0c9c091336433c2a5132502bca88d318f14"
"3a07be3b7c0a921755613e5c2a5d4b2246235b5ef59c21930e8eda6bdba9b548"
changed /files/dataiku_mcp~1tools~1webapps.py/size
4572
4712
changed /files/dataiku_mcp~1tools~1wikis.py/sha256
"6bedc0e225f95d6037804f619c7f092371c6998080de799ef8039c9071e0e8af"
"e6abd1a316b45e55fae2d7b8450e4af9fd829080582d77eeababe74ab37257ee"
changed /files/dataiku_mcp~1tools~1wikis.py/size
3364
3474
changed /files/docs~1capabilities.md/sha256
"5aef9f27c9d55a43294c0d889ef6c738285fd5fe29682f4bfc1776d88de6f397"
"3fff28e62125381fcd798744d04da74ce55984d7cb2f239547ad2e5303f7f731"
changed /files/docs~1capabilities.md/size
8459
10961
changed /files/docs~1http-deployment.md/sha256
"8c27c2a9b8c7997f16d747868d90f7756d8b61c23c8e0ad9c99a6592d5f7ab46"
"a152442cfafd42c28b6964c339630432ad30c69bd23ca5d18c0a45415e280074"
changed /files/docs~1http-deployment.md/size
17076
17920
changed /files/pyproject.toml/sha256
"f5f19f687d0953ea381717ceef6e6d933d681487e41affa030ecf1c0f31c1d5c"
"fa8ceb8d6b56990d40caf62ee1bb25e8c8a2bd9b685e07c969b51c1c17cd25da"
changed /files/pyproject.toml/size
2442
2538
changed /files/runtime~1run_mcp.py/sha256
"7b28b79d2bc16f11f87e7b04724d8ae91d232e930d9b9e663cfab8a6baa66d24"
"d689671a0cabd01eed2598433b56eb659e58b176814b8495cb66c8df8eed1549"
changed /files/runtime~1run_mcp.py/size
3144
3391
changed /files/runtime~1run_mcp.py.lock/sha256
"ba56a3353ee436538df59d209ee54daf1ee155c8b2cd8e04668b65f3c98e25e8"
"9c11c8ce0209672c15406d504fdab8c59207209d4d5f0c737b65f4437c1b4497"
changed /files/runtime~1run_mcp.py.lock/size
440835
460907
changed /files/scripts~1build_http_plugin.py/sha256
"bdf423a496c2a19bdcfc5fa78bc6e3f1e22bbb35f2eae6393a41b2783e1633c9"
"4079975c611c70caccdf01e4935939f35a5ecb2faa0276061ad7e00fd411a527"
changed /files/scripts~1build_http_plugin.py/size
5535
6263
changed /files/scripts~1check_release.py/sha256
"49d537a24e31f15b0c4f4070a4e3e41b9da90410ef9828897d7466319cc3503a"
"5ba518018e051242428b314247b8a3e3da796f80dddc9db85ce1cfa28a7f577e"
changed /files/scripts~1check_release.py/size
4459
4778
changed /files/scripts~1http_plugin_assets~1skills~1dataiku-headless-setup~1SKILL.md/sha256
"c2e46ee0337d1b02c5ab1137ab38fb8b18883450b99e2778659d9c2d2a049ccf"
"c02b9d42a4a331f7165cbe1ab9e876eded223f46b25af8d3fbf560ef261d717d"
changed /files/scripts~1http_plugin_assets~1skills~1dataiku-headless-setup~1SKILL.md/size
2293
2315
changed /files/skills~1dataiku-headless-setup~1SKILL.md/sha256
"2c6649bec661e37992cb07b69bbdb2bb771ab8e21209184e9a9f7481e2c2f4ea"
"3904b563fc2b6fb8e42419b7312c304c9a6716d9b9cc047fbef07266c66fbd23"
changed /files/skills~1dataiku-headless-setup~1SKILL.md/size
3828
7791
changed /files/skills~1dataiku-headless~1SKILL.md/sha256
"31d203c2c0e829231828aaf0b0e93d8381c7e0341d7495403a259d11cb5fcac5"
"939d7c5ee0d34bd8ee4b8a9846b93fde4484f48ca2c71b1c9f6388602406f138"
changed /files/skills~1dataiku-headless~1SKILL.md/size
6657
8178
changed /files/skills~1dataiku-headless~1references~1administration.md/sha256
"0824744f09f16699e9ed84b7a2b0c41451b1e432015e08eb5e48ce612cb97376"
"305fc51f0c0d3f16b43d7da4935c044215f60b7d724f4a5cd0a3e09f2578b87a"
changed /files/skills~1dataiku-headless~1references~1administration.md/size
996
1108
changed /files/skills~1dataiku-headless~1references~1administration~1code-environments.md/sha256
"06796494f6c410a7de502771cc04fc1f51673f756177ec36faf1822c1af26cd1"
"69df1427dcccbf453d415dd6580e1a67f96a6cb66aba636502aa65a813e056b8"
changed /files/skills~1dataiku-headless~1references~1administration~1code-environments.md/size
5657
5659
changed /files/skills~1dataiku-headless~1references~1administration~1plugins.md/sha256
"a3a313fc2cf19931126fe21ca0e7f5e5cbdb27dc6faa87765b5efca3978b1a01"
"b95b340d4eaa8c4d26b8871d43ba0157d00a2a105e27e9d207e307e457bc5f76"
changed /files/skills~1dataiku-headless~1references~1administration~1plugins.md/size
6268
12584
changed /files/skills~1dataiku-headless~1references~1agents~1agent-tools.md/sha256
"9935fb9ea715f6ef67c2880473f3fe782f55847cdfbc3d6c6ce01b3c25272864"
"1a6cff6687627faf7d5951dfd4ea8980d9c71631a0937c7f0c9dfe3f0479d429"
changed /files/skills~1dataiku-headless~1references~1agents~1agent-tools.md/size
2223
2498
changed /files/skills~1dataiku-headless~1references~1cobuild.md/sha256
"0c8ea21afa02a45e56f9775cb7c35d03543295a019740943b8f6100df7f6e5c9"
"d2eddb132211b90b452f6170d9badfdfd4f08bfe7577e0a0b2dea6906cef8ebb"
changed /files/skills~1dataiku-headless~1references~1cobuild.md/size
8820
9367
changed /files/skills~1dataiku-headless~1references~1container-execution.md/sha256
"7baf9d12146f01b0fa7765250359605650d8f84bdd3b3365fd17f1d01b59f2d8"
"f2d59c5b9e84919c6ec60f241a9c968fc76f6febfa840f7bf67e5e34bc75c8ed"
changed /files/skills~1dataiku-headless~1references~1container-execution.md/size
4081
4178
changed /files/skills~1dataiku-headless~1references~1dashboards.md/sha256
"718c9729c80458fb5247e3bd0ee49c256301a9fba646ff75c3b238e9a85e966e"
"8def1d6fc7073afedaf97454159b9e2d74f4aea941d73cb4cb72684dc3c35a3e"
changed /files/skills~1dataiku-headless~1references~1dashboards.md/size
1716
1990
changed /files/skills~1dataiku-headless~1references~1datasets.md/sha256
"f5a6c26f548c2671b23f7a54f650975008dcfe6f498cd7ae21b54c54821c5068"
"cd564883ead74fa651bdff4e376c7f6094e17c2ed8e8d7e6895b0459fc9a5ce9"
changed /files/skills~1dataiku-headless~1references~1datasets.md/size
5275
6876
changed /files/skills~1dataiku-headless~1references~1datasets~1uploaded-files-datasets.md/sha256
"d46fcf7b4f3e261c07198026e7e8f71ec6e1f54c6f81c8e833f6bec6e73959fc"
"0fa5c92ff78b29b80699490b07f88f321d5f026df647f9584a7817cdf141fd9b"
changed /files/skills~1dataiku-headless~1references~1datasets~1uploaded-files-datasets.md/size
1870
1958
changed /files/skills~1dataiku-headless~1references~1insights.md/sha256
"7685ea0f88fe9278e8f8e10b9fa19cca170d8f6dfd1773d7c35db5b743ae1f9e"
"97fc899dafab540a877f7514683ec6649059f939038761735b6d9080f704d136"
changed /files/skills~1dataiku-headless~1references~1insights.md/size
2563
2835
changed /files/skills~1dataiku-headless~1references~1jobs.md/sha256
"68b447c6c17d58a369ac770d1f0b334ff73e7d143a158124ef9346213b0391f7"
"ea3ed21f5ebc0c4e906a32eebbc1389a33743d6fd5ac233e3b2948e43b62219a"
changed /files/skills~1dataiku-headless~1references~1jobs.md/size
3017
4566
changed /files/skills~1dataiku-headless~1references~1llms-and-knowledge-banks.md/sha256
"17dbbf83558267866b54895a5adede2287a69333ef78980de881a7e1baf4e9cd"
"29b77eecc4c4b01b17410f6bb63f23f1e4288055e5bf98a15112f9a426bcd52e"
changed /files/skills~1dataiku-headless~1references~1llms-and-knowledge-banks.md/size
2418
2354
changed /files/skills~1dataiku-headless~1references~1managed_folders.md/sha256
"62756d70ca577ff04d3e8467212e76ad23a9234568e6daccc0abd2fb95325cc0"
"318802c108274c6211260b1c468ee0957764b656c830a313a8cb9b1cbf888ebd"
changed /files/skills~1dataiku-headless~1references~1managed_folders.md/size
3058
3177
changed /files/skills~1dataiku-headless~1references~1migrations.md/sha256
"dca73f35e614272dce06c4de7b62a36919c7d5133bfa593e708fbe312018b7cd"
"e19be2d30843ebd3c1ec0ef8add516416466136d866bfcdcbaf94a3c7cf1e571"
changed /files/skills~1dataiku-headless~1references~1migrations.md/size
10549
10708
changed /files/skills~1dataiku-headless~1references~1migrations~1sources~1excel~1guides~1validate.md/sha256
"55af8c5c5dede349232da34ce340df35dd4204ef239962b9622b5ff8a9a08393"
"15acdd4710d69c4f025bc85226eb3b8e9b71692fdaca566db3897b53a5fa17ae"
changed /files/skills~1dataiku-headless~1references~1migrations~1sources~1excel~1guides~1validate.md/size
6609
6634
added /files/skills~1dataiku-headless~1references~1plugin-development.md
Field was absent
{
"sha256": "6eb2f214ffaec11b515e98e744f4366fa7d332b0f8a68112865ccacffedea723",
"size": 7231
}added /files/skills~1dataiku-headless~1references~1plugin-development~1agent-tools.md
Field was absent
{
"sha256": "192d514c4a3d45c3a0718d7ebf18f918fa581c086dc9e452f3f410842122366c",
"size": 2878
}added /files/skills~1dataiku-headless~1references~1plugin-development~1agents.md
Field was absent
{
"sha256": "2c037d78e1f2a0f814db9716b9e94d65e1f948eb27534ef33fc66f9e73b3b2ae",
"size": 655
}added /files/skills~1dataiku-headless~1references~1plugin-development~1connectors.md
Field was absent
{
"sha256": "d2752bdc3630933891a340c63e60157656b923c2e396be9b22deabf2db361cfd",
"size": 2451
}added /files/skills~1dataiku-headless~1references~1plugin-development~1file-formats.md
Field was absent
{
"sha256": "67f6313aee6cc082510bbeae7929896eceeec52a33692f430764264b009bb263",
"size": 868
}added /files/skills~1dataiku-headless~1references~1plugin-development~1guardrails.md
Field was absent
{
"sha256": "674dfb1b84c55c056e9632a17fc0f6005d6188cf9877e5bab25162302bdefd62",
"size": 666
}added /files/skills~1dataiku-headless~1references~1plugin-development~1llms.md
Field was absent
{
"sha256": "7fa9d085aa7c158a813a333ce36564e39c77e952238bc35a8cec69c21aea2254",
"size": 2141
}added /files/skills~1dataiku-headless~1references~1plugin-development~1machine-learning.md
Field was absent
{
"sha256": "dd583b98b540d99b42e80a461629a0ea497d31c3b50ad9b36ce903a842a16be3",
"size": 1608
}added /files/skills~1dataiku-headless~1references~1plugin-development~1macros.md
Field was absent
{
"sha256": "a1303487a9da283dffc7a49ae898997bfcf374899685932f9398fc0f0b1e6ca2",
"size": 1343
}added /files/skills~1dataiku-headless~1references~1plugin-development~1prepare-processors.md
Field was absent
{
"sha256": "4950cb33ed9e3448f8775ede08cfb9b36bb9fe4bd9f38a8330214364b802b8b6",
"size": 1054
}added /files/skills~1dataiku-headless~1references~1plugin-development~1recipes.md
Field was absent
{
"sha256": "b59c5df3bd779a891f698d7ed3bbaa1fb38d12a57c07a5a620a714c1fa251e0c",
"size": 2062
}added /files/skills~1dataiku-headless~1references~1plugin-development~1settings-checks.md
Field was absent
{
"sha256": "575e8494ebd9b93eaa0a16d0b5acc2916a4e6d0816bc79e7b61e05f918852564",
"size": 1593
}added /files/skills~1dataiku-headless~1references~1plugin-development~1structured-agent-blocks.md
Field was absent
{
"sha256": "c52498e46a243de7a743a26f817bf8c9d1c838bf5a436da2f1f6d67a23d82fd6",
"size": 735
}added /files/skills~1dataiku-headless~1references~1plugin-development~1webapps.md
Field was absent
{
"sha256": "9cf94185bbe4df97ffe5a287057ecc0b245dc028b0a88958836f7a03b0ace14a",
"size": 1511
}changed /files/skills~1dataiku-headless~1references~1project-libraries.md/sha256
"f832d5c57ff8fc225ce92e68fef2629b72dda859fff1c4dea39f649175753067"
"12b82f7bbd311b8acbd3a269914b6c74430da11c12258a2a3a5297720e903a0b"
changed /files/skills~1dataiku-headless~1references~1project-libraries.md/size
3414
3554
changed /files/skills~1dataiku-headless~1references~1projects.md/sha256
"a8064e4661e2f15cf27731de84b61efed76053f4c33a830918acdb001e8d3b18"
"0a944ee2dd5687d4691b8c4011af697989868a2bf54c843321b1c0042b5598fd"
changed /files/skills~1dataiku-headless~1references~1projects.md/size
3644
3775
changed /files/skills~1dataiku-headless~1references~1projects~1settings.md/sha256
"8653d6bba9acc1fee41908046b555db05ae7b190cef9dc09b43866ed8e34d589"
"bff2018748f3d1acc78a394b2f28e13cc9411c40cd821499210165f209907463"
changed /files/skills~1dataiku-headless~1references~1projects~1settings.md/size
6088
6190
changed /files/skills~1dataiku-headless~1references~1recipes.md/sha256
"e7166e875ddbdc0569b1b36495a06e4806afeb584619dc067c28c08b723af3d9"
"cc0f1503af28968e349fa8de9f0ff6a85c72544d2dc646897ebbb23c65def9c9"
changed /files/skills~1dataiku-headless~1references~1recipes.md/size
5868
5959
changed /files/skills~1dataiku-headless~1references~1semantic-models.md/sha256
"5a7269b5674291b6665b471c6442bbde318ad5aaad5b23ad4ecab5cb6fccf9fe"
"fc33502ea7a1111d2dc572e505589d01c7f78c8e09e40fe043ab53eb6c891448"
changed /files/skills~1dataiku-headless~1references~1semantic-models.md/size
3666
3662
changed /files/tests~1conftest.py/sha256
"c1433084e3645f7b34aa8d470a3c698f8f2dad0ebd8cf40ab62b4e785f4107b4"
"5c4629703c494648293d1cd6819145e24c125a1832c0652a953e07379b7318e8"
changed /files/tests~1conftest.py/size
2137
2277
added /files/tests~1test_dataset_metrics.py
Field was absent
{
"sha256": "23e4f3a936278c8de624dc078c7a42f5950dec1be195de07c05b0eabb95e2c01",
"size": 6955
}changed /files/tests~1test_execution_tools.py/sha256
"228bde49778984188bba14a5078db4188da5e3a36335ba444a152b284eab7bbb"
"7655056bc8d1d32611945df29bb18a901e260a3507b6bd70485d6eb68f3f9bfd"
changed /files/tests~1test_execution_tools.py/size
40724
41150
changed /files/tests~1test_http_middleware.py/sha256
"ba5894f3d2da7251742409d20906e46ccdd671798a55bea98ce8178cd6b55991"
"2d75ab0ff3aa2b2a9238e84d7c93670c39a37f8ed93f2a5fd4e669334dfe8db1"
changed /files/tests~1test_http_middleware.py/size
7367
9590
changed /files/tests~1test_http_plugin_renderer.py/sha256
"fb9554fb1a91331e37588c917b7b346acc8a97b89ba1d25d8bf5702ba09f9824"
"82110e41742086c8f16a0c007257fd21bff12d7d2dfde45cd75c607feca5e2e9"
changed /files/tests~1test_http_plugin_renderer.py/size
4682
6160
changed /files/tests~1test_instance_pinning.py/sha256
"259c5f6fe0ff6f8d85d508f54b8a0fd4591c1cd6dff521572bc581f5588a0653"
"51c6acd0c77948fb43f15047ad992191cd6b7afed2e998a024e5c11becb400c2"
changed /files/tests~1test_instance_pinning.py/size
2572
2564
added /files/tests~1test_instance_policy.py
Field was absent
{
"sha256": "c7c5fa83139803cdb4a020def372758b8b5b26cc5d020d08aff6b8bc684c54b7",
"size": 13875
}changed /files/tests~1test_instances.py/sha256
"256a35e094d16778febf0fcda0e98bd423e01f36c71a7fc651e382cc64120eac"
"23ea6368e1e0addacef1dc160b98cc295daa25902105562903bd6c1cd438a524"
changed /files/tests~1test_instances.py/size
6503
12441
changed /files/tests~1test_launcher_cli.py/sha256
"a6b8bd92af98b415f72d97f1d41fbe4be901be40849c0a0a3baff43b67035347"
"a93f9cb8377c5275d9f292285a99571dcdb0f4f2679c99afcfce9c1355945290"
changed /files/tests~1test_launcher_cli.py/size
4105
4359
changed /files/tests~1test_onboarding_ui.py/sha256
"e9c722822b6e2981e88bd91908440bc3e3aa888c15c75c15602990687a0288ec"
"3662fbd3ba45572fb5b532fd1669f9affb692808f50d8e32729063fe2387625b"
changed /files/tests~1test_onboarding_ui.py/size
1881
1042
added /files/tests~1test_plugin_futures.py
Field was absent
{
"sha256": "75d9ed23b3eb280ddc31bde4819479b5ec190989ac09f35ec7e52b23ef2bf59b",
"size": 4846
}changed /files/tests~1test_plugin_packaging.py/sha256
"eabdcd46b95eb078904a2789791d8af9c6f37a3784753ae1cee5178e6d0ed493"
"01bee934a7d31c3892ad729732ff4bb9d377bed0fa87ca7b847d629ed4d11d2f"
changed /files/tests~1test_plugin_packaging.py/size
2215
6547
changed /files/tests~1test_plugins.py/sha256
"880ae32c7d6dd5e747aa19ad23635b2cff677eb337dbc2c41b2839cb37f2f893"
"002019bb10e95a766452613ef8c972ba959d947cd80eeeed38528b37bfdd982f"
changed /files/tests~1test_plugins.py/size
37595
70849
changed /files/tests~1test_release.py/sha256
"506f8230f600e200654cb34f03ed689670a0f4a423e39a1835c404a6a67ef3d3"
"6c2a241bc9d697f7e30e598d7ff293283e7ea58f21ebef7ced6637be9d2e8d79"
changed /files/tests~1test_release.py/size
10807
11372
changed /files/tests~1test_setup_server.py/sha256
"35e2d7aefb6048aa6bf64d660f5451ed5f41d2ddc1b4445a5b4fa643d05da927"
"9a7608a6074d1f3a2cf251556dfe67d20fdc0f909653da897d33fd18f05349c5"
changed /files/tests~1test_setup_server.py/size
7356
20230
added /files/tests~1test_tls_trust.py
Field was absent
{
"sha256": "33a58568d442dc2a6357db92fb04a695ee4e4c29a9627b9e6b246c0234a34791",
"size": 5208
}changed /files/tests~1test_tool_surface.py/sha256
"465e93e3ac3714e95409a3bc102d63181b7f9981a47422813c68ca79a64e8cc9"
"285c9ebf998a189e8d9d30d1913cea7f63187bc7490c59478dc3ef789e047a80"
changed /files/tests~1test_tool_surface.py/size
7306
8670
changed /files/uv.lock/sha256
"c4b0e88fd73ec75a00e147fd8f5cf34d432177ea9ecec36199e35d250d173c06"
"6249f71d815813a22c5930a3480b49e59d16d6366dd3873ed87fdfff7e51ff30"
changed /files/uv.lock/size
418641
419395
Full snapshot data
{
"files": {
".agents/plugins/marketplace.json": {
"sha256": "5a1a724844a602acdab8e4f6ffe307b0f7772af0b6c437d6425d8142d21b960a",
"size": 659
},
".claude-plugin/marketplace.json": {
"sha256": "c142b21c6e1a8f24e5cf2dd6ce31c5c9441a58fe3a64d8f3d8efc6c2e10e7d5a",
"size": 603
},
".claude-plugin/plugin.json": {
"sha256": "932135fd42ae2b929c46b8ac93df3d2e2fb8b1d51a7a8a6057e1227edf2b5ead",
"size": 918
},
".codex-plugin/mcp.json": {
"sha256": "ad37dba1daf5b808c8c02044c413300dd45820fe9e50aef4897fd1c29a0f41b4",
"size": 623
},
".codex-plugin/plugin.json": {
"sha256": "ef60afa841515d5c97c609ed6fdf6c2895dfda1f7e02f35c1e6dc4a61e520e44",
"size": 7131
},
".cortex-plugin/plugin.json": {
"sha256": "3436a9f9aa992b405d9868c83114966d7537bdd3cc35ef779d29739d13b35a05",
"size": 760
},
".cursor-plugin/marketplace.json": {
"sha256": "8b247aec5b9cbbbaecb9be45aabbd828f17005f8bc79500ef32df0ab8370bab5",
"size": 578
},
".cursor-plugin/plugin.json": {
"sha256": "ad1226956172fc34d4e500fd770c91be6613c593cc1e804dcb9ff37420f05cf0",
"size": 818
},
".dataiku/http-config.json.entra-example": {
"sha256": "5747e2239c76196d40e42cab566662c1bfaa8eeb9712439b15877b1fb2291878",
"size": 602
},
".dataiku/http-config.json.generic_oidc-example": {
"sha256": "93ae065bc832b3db9bf07c154e6ce5e0dcd3944a77bc82ae566d8a695e41b6db",
"size": 880
},
".dataiku/stdio-config.json.example": {
"sha256": "1aa6d21a8f749d2fc75cb537aca4e4a0776beedd0c813a3bfbfd800f44e1ab46",
"size": 396
},
".env.example": {
"sha256": "a7515de1a292b930d316499c398fc32486ea9dbe53d7ab5c5cdd763e3bbb0baa",
"size": 659
},
".github/ISSUE_TEMPLATE/bug_report.yml": {
"sha256": "af357df51db5e8f419f9bdacdb6ebcaf51b402edb8358cfe63f32db6e835045d",
"size": 1391
},
".github/ISSUE_TEMPLATE/config.yml": {
"sha256": "55a4027c6c8659ae2796238449c127348db0403fe6c6efc4463ee0b4e4177112",
"size": 211
},
".github/ISSUE_TEMPLATE/feature_request.yml": {
"sha256": "e6874c531ba5a4fa5f609f947a433582c3681b730e1b647334a680ed28ee8e67",
"size": 970
},
".github/ISSUE_TEMPLATE/question.yml": {
"sha256": "e9d5f06a348eb5a10352637b3ecb1db80a4e004693aae67108263e17438aa0b4",
"size": 706
},
".github/ISSUE_TEMPLATE/rfc.yml": {
"sha256": "4ac111ad95bbccefc563c236c073cb83d94796a5b96b4e3f1d89a3b54571ef3b",
"size": 1298
},
".github/cla/Black Dataiku Lockup Logo.svg": {
"sha256": "01283aaa3c3f6d5b86d9a95ee4f148d6d4ff27d881ff8c4d2dfbf1b5024bffff",
"size": 4025
},
".github/cla/CLA.md": {
"sha256": "73bbf78d5ea488b24d5651d591b72c8ecac8fad9742af8b7b8516878567762c5",
"size": 6940
},
".github/plugin/marketplace.json": {
"sha256": "8b247aec5b9cbbbaecb9be45aabbd828f17005f8bc79500ef32df0ab8370bab5",
"size": 578
},
".github/plugin/plugin.json": {
"sha256": "b306cbbdfc7d689560ebb27e44dbb8467d82284b822c3ae7a0a3674b5eed372a",
"size": 848
},
".github/workflows/bump.yml": {
"sha256": "7a1bab86b7f396cd78b81bc1a41a51e89dac38de8920d4838ceb82c22f1d19b3",
"size": 7810
},
".github/workflows/ci.yml": {
"sha256": "61d87c6627ec13adb097942805ee3a7d244b488fd0e46e05433cca99151d9cdd",
"size": 3239
},
".github/workflows/cla.yml": {
"sha256": "e5edef1fe8d176273c561043d6248f5bf03e5c7f56855a40a709e1d38d4ece94",
"size": 1049
},
".github/workflows/pr-title.yml": {
"sha256": "1360732d6a7925568584c1d40f315cc549ae817f1cefbfd403b8ae069432c8e2",
"size": 754
},
".github/workflows/release-source.yml": {
"sha256": "ce60f64b5592e63eb14f6285ccf3bcbfef18b045b2290e1ea07fb24cb83ec239",
"size": 908
},
".gitignore": {
"sha256": "f1365c8f3ab3df2aaf63c1261f08f96a8275358b00c1a91453f4579f79171309",
"size": 1051
},
".pre-commit-config.yaml": {
"sha256": "05a96ba6d59de85c010cf61d681c98de0300e2e3805114ec49b1f26124dded2b",
"size": 1611
},
"AGENTS.md": {
"sha256": "dc0554d0814a0604032c2dcf555419093c590c58f3de4142d4a2fd7942caf474",
"size": 7675
},
"CHANGELOG.md": {
"sha256": "1c697b1ce71dec51b0cc9a12d96b0e426ea897b6f03106c252c8376b5be8466b",
"size": 4695
},
"CLAUDE.md": {
"sha256": "f8d6e95dab128219768048d6d57147a548414ee71ba70d12f710ac3b7c62e5ef",
"size": 99
},
"CODING_STANDARDS_AND_STRUCTURE.md": {
"sha256": "3d3845075a21e2814e9b517f16aa85970177e8245e7ee382bb48aa9b476a802c",
"size": 15343
},
"CONTRIBUTING.md": {
"sha256": "a9fff4493c906d596e1f03727fea0d766860c84eadacec191870335a81238931",
"size": 2275
},
"CONTRIBUTORS.md": {
"sha256": "1b3b498a5e1fcd6ec0ecfdca936ec74581081517bc703fe3ae74f3d6e459d7be",
"size": 938
},
"LICENSE": {
"sha256": "f76a6b54d58e110e873a18683fe9f6f34788b980a60278456699adaf96f88560",
"size": 10705
},
"NOTICE": {
"sha256": "14a8e7d5123c6c13f89faedf678f44edae11074936b39322c7f75269fa3b128d",
"size": 12906
},
"README.md": {
"sha256": "9ed1f335c291dfac7b440422173546299ca4e229ccc779e6bf0337150ddaa39d",
"size": 20661
},
"RELEASE.md": {
"sha256": "4a6934d9139b239651ca980e57ce04ac0ce7bca4ca9a37925f157acb3df4130c",
"size": 9608
},
"dataiku_mcp/__init__.py": {
"sha256": "32fdfa0c2ecf34e83161dd09f338358849606eb462a02ebe9c31342a339852a2",
"size": 1486
},
"dataiku_mcp/auth.py": {
"sha256": "fb58c4d71b26c6b75b56c46a208d2fa98c67d67bf1df4e543bdc1568946d3c7c",
"size": 7376
},
"dataiku_mcp/config/__init__.py": {
"sha256": "73ee44c473af185a5031332c9ae2da1c98d23611303bbdbc3f591f157e7511bc",
"size": 641
},
"dataiku_mcp/config/files.py": {
"sha256": "0edb37c148e44720cbdc6127c323156dbe31bc0f2e181dfd979c19399cff2796",
"size": 1813
},
"dataiku_mcp/config/http.py": {
"sha256": "fdaf8c5f98f8ef6dc62a4c06b0cd47055611306681f0d3adc256ab6e0ad408f2",
"size": 4748
},
"dataiku_mcp/config/models.py": {
"sha256": "d1f7e86224c8079e912297c966528aa2343c170a035d7b6cb6ed7abf1299fe6f",
"size": 7389
},
"dataiku_mcp/config/request.py": {
"sha256": "072f066b2956c6962e0b231a221ff84a0695f392844f2c92426bd6aeb26fead3",
"size": 4773
},
"dataiku_mcp/config/stdio.py": {
"sha256": "1de4adbc3887895dabd136feebf47391e0885e6863980feefe7c7605ea37ba5a",
"size": 14141
},
"dataiku_mcp/executors.py": {
"sha256": "3049b2c090e314915215841c51b2181e00e4cadad486288ddd499a006ce72bc5",
"size": 1696
},
"dataiku_mcp/instance_policy.py": {
"sha256": "a62e0be2e7aa8c9fc1e0fbc57cc60f970e78a5b80aa511cacba971d6d46483a5",
"size": 2438
},
"dataiku_mcp/server.py": {
"sha256": "675914e7bba7e287949ab3f8d622c27a993149f86541d293f682a1a210815145",
"size": 6544
},
"dataiku_mcp/setup_page.html": {
"sha256": "788db788817813489f5b94ea72d2497368c93b3fb0307787445afa941ab4a77a",
"size": 36742
},
"dataiku_mcp/setup_server.py": {
"sha256": "1721fc394eb0e2b3417c8287fa95c3776c5580cb13c97e03a91db2548608845d",
"size": 20373
},
"dataiku_mcp/tools/__init__.py": {
"sha256": "4802006383d966dd9b16dbee30e31a8a4dc6c869df53ad5d508fa59108ea0b01",
"size": 624
},
"dataiku_mcp/tools/agent_reviews.py": {
"sha256": "fcb8c88bb520dc6689b9b98045cff61387310ea0917aafa70bf2217adf11a552",
"size": 8694
},
"dataiku_mcp/tools/agents.py": {
"sha256": "9b83b82a3197154eb647c47575c81bbb57f51d68073ef19a3139def312fad391",
"size": 8334
},
"dataiku_mcp/tools/cobuild.py": {
"sha256": "c7b3f8180c280709eab3a6118b71038c61282b7c0044b67622676a978cacf33c",
"size": 19640
},
"dataiku_mcp/tools/code_environments.py": {
"sha256": "0eff238e901c71cea7ac6f567477466178dc476b9269cfffa1d4ce31e72960f8",
"size": 18761
},
"dataiku_mcp/tools/connections.py": {
"sha256": "1572ce248bfe12e907498fe6ffeb47c4770cdddd32e47a9582518d66361563c1",
"size": 8962
},
"dataiku_mcp/tools/container_exec.py": {
"sha256": "43dbff406fc6948c765c39ad522d2560e05e50706740ea432b63e0bfc34c3785",
"size": 7662
},
"dataiku_mcp/tools/cross_project_sharing.py": {
"sha256": "31714e0f338a562c2341e10c0b26bf1512a985c0274a3f32bf5a97cc8a689418",
"size": 2532
},
"dataiku_mcp/tools/dashboards.py": {
"sha256": "a03074fb9b7971759c59b97d539d37a685633cf490aae32edc61cbe484d5f1a7",
"size": 2954
},
"dataiku_mcp/tools/data_collections.py": {
"sha256": "fd1987886cd970fa8069fa4d7a34c1d645f254e36f3a9b3a25554ddf5c7f3659",
"size": 2686
},
"dataiku_mcp/tools/data_quality.py": {
"sha256": "5cc50a9b82aec30626052e92434df3b474c8b72c982c9e885ded18e3b98b1886",
"size": 11543
},
"dataiku_mcp/tools/datasets.py": {
"sha256": "34e500b80e817df7cdd62911cfc3337261a21815ca70e5bfb63f6d45260af83f",
"size": 33889
},
"dataiku_mcp/tools/evaluation_stores.py": {
"sha256": "ae203a57dce4e123c411fabcf2d25bbfbc4964bba395c23b3cc2ef02c80a84f2",
"size": 4929
},
"dataiku_mcp/tools/flow.py": {
"sha256": "acba8b3c45cd4b3ffd3880e0499a5d0dc1e7d189e69d409a2f910f5ed2dcc560",
"size": 14557
},
"dataiku_mcp/tools/general_settings.py": {
"sha256": "5f3ce3ad0311df26e2836a42591b92dbd15a019a8bac33b2bdaae01b86e37d98",
"size": 7452
},
"dataiku_mcp/tools/groups.py": {
"sha256": "fc1cb99ce40b3133acdad36c2b6ac27d2a8d4a11f7d1dead3de86307d28122f7",
"size": 19129
},
"dataiku_mcp/tools/insights.py": {
"sha256": "f62d3739378989dd6172134a7143a2f98b0e7042f5952caf2b03fce02b483d95",
"size": 2854
},
"dataiku_mcp/tools/instances.py": {
"sha256": "2542546acc83f03b7120c30e2e552fb4b2547530bf01e0f90f8aea61f22e242b",
"size": 9830
},
"dataiku_mcp/tools/jobs.py": {
"sha256": "4aa853a2a3a4d6d7ae3177283a3860a5bba8ec9a4f2d295422333d218b155e1f",
"size": 27833
},
"dataiku_mcp/tools/licensing.py": {
"sha256": "158d078a3bf1e428175bb623f544697741f7d66470f8a11c64462a62fdbcd735",
"size": 3373
},
"dataiku_mcp/tools/llms_and_knowledge_banks.py": {
"sha256": "0b9210d7801f27cad274ec8511c383095c8e6914b48c3e399603e4b7276e9216",
"size": 12885
},
"dataiku_mcp/tools/machine_learning/__init__.py": {
"sha256": "e0b2ced16330ce7ba69a22dcb37abcaea2fde6e5413f3862f914a3aa6b840033",
"size": 611
},
"dataiku_mcp/tools/machine_learning/analyses.py": {
"sha256": "c049ab0ad4470741aeb664488b92d9b131b6cb736a403296edc203afb9e7de1d",
"size": 10396
},
"dataiku_mcp/tools/machine_learning/saved_models.py": {
"sha256": "82092e9a574cf4512ee9e8cc90d857ce86c455ecfb49379a468ba8f194a2ea54",
"size": 3801
},
"dataiku_mcp/tools/machine_learning/shared/__init__.py": {
"sha256": "08cd1feaf71059731df9e246c5f3c93b5d74715a2af3d8f32adb216fc7845c8b",
"size": 633
},
"dataiku_mcp/tools/machine_learning/shared/common.py": {
"sha256": "86117cf415195e452e3f6ddb5661428be391e270819a338f23cb6377ee6292bf",
"size": 1217
},
"dataiku_mcp/tools/machine_learning/shared/summaries.py": {
"sha256": "08397363ee66e0d9f99db79287a749faee1c8c2bdcd12661f1480a76bfced68a",
"size": 6534
},
"dataiku_mcp/tools/managed_folders.py": {
"sha256": "5eb8976c76a5fce07a080e71abd05307ac977561285660306f0758ef68aac7df",
"size": 8857
},
"dataiku_mcp/tools/plugins.py": {
"sha256": "d83b503026dcc3648f96eb76a440f26eb51c0d70f3203c7fa194d71a182ed446",
"size": 54470
},
"dataiku_mcp/tools/project_folders.py": {
"sha256": "c4b2f5addad857b0d2cdf8375c10510d1e24218c3b166d7cdf2b8f966ab2a209",
"size": 7738
},
"dataiku_mcp/tools/project_libraries.py": {
"sha256": "264180c250e28e5cafc5099a0db891159a0ad86c777dffd3fe07d6ee2ab5d71e",
"size": 21928
},
"dataiku_mcp/tools/projects.py": {
"sha256": "5597b1b247cbd206fbc3123dab9c648b8adfcf37078a24e6958506343c08b194",
"size": 13767
},
"dataiku_mcp/tools/recipes.py": {
"sha256": "a9212fd94149e677a595a97541338f9b0bfc9f7935c4be97f29565d33a1af224",
"size": 5001
},
"dataiku_mcp/tools/scenarios.py": {
"sha256": "91b4003f37b42e388ced26044c2def414214d8e790ae821e6fbad334d0edafad",
"size": 14377
},
"dataiku_mcp/tools/semantic_models.py": {
"sha256": "b3a583be2af3fe1344fca10e7ab56d0ff6feb1afdc7d5bf75ffad3ed9b51939f",
"size": 3313
},
"dataiku_mcp/tools/users.py": {
"sha256": "4bc2453720924c1aab29317578b3d90a7921ea6701ddd0ca493f0cab2d376939",
"size": 11260
},
"dataiku_mcp/tools/utils/__init__.py": {
"sha256": "1bd50f36a1f96b04aad459ffcbb5d7c8ab2ea628f9f7434c087ec243b60ec515",
"size": 601
},
"dataiku_mcp/tools/utils/errors.py": {
"sha256": "d207d450d5177589dd1e298712b0fbf2fbcf399beefb730ef9f8d8c5ee21428e",
"size": 1461
},
"dataiku_mcp/tools/utils/identity_sources.py": {
"sha256": "23cd24db402ff92d85a3dfe16e7ad0c51f2dc7e14345f0a365d03b8eb6d30de7",
"size": 796
},
"dataiku_mcp/tools/utils/job_summaries.py": {
"sha256": "60f0a377d3edddf2d4561546c45cf910a3bb37c7dcb2c8620dff90b1759a0932",
"size": 8280
},
"dataiku_mcp/tools/utils/metrics.py": {
"sha256": "f04a294d50e47dbc7dcf90d2f96f9a34b1966ccc4b5ed959496f056008cd045e",
"size": 3861
},
"dataiku_mcp/tools/utils/parsing.py": {
"sha256": "50b7799fd20890cdff122c34458c26c33a603f902c5f25acb3f3f9a277b55d45",
"size": 2551
},
"dataiku_mcp/tools/utils/serialization.py": {
"sha256": "4ec4de83db5bdf5eeb8c3febf15f1bb05aa137139a74abbcdd354b5180fb12ae",
"size": 2420
},
"dataiku_mcp/tools/utils/validation.py": {
"sha256": "5a532dad44aa0e677992d9499eeec9245d0875d8a360394925664e7f16453915",
"size": 5272
},
"dataiku_mcp/tools/webapps.py": {
"sha256": "3a07be3b7c0a921755613e5c2a5d4b2246235b5ef59c21930e8eda6bdba9b548",
"size": 4712
},
"dataiku_mcp/tools/wikis.py": {
"sha256": "e6abd1a316b45e55fae2d7b8450e4af9fd829080582d77eeababe74ab37257ee",
"size": 3474
},
"docs/assets/codex_composer_logo_dark.png": {
"sha256": "b3d48177b6c10d994f260867fe87015876fe3c4590ca4503b853a46054ecd11f",
"size": 5521
},
"docs/assets/codex_composer_logo_light.png": {
"sha256": "e507bcf422922701fdba38820e45c9260124960d5cbbae22c953ad86b0e6a0c4",
"size": 5110
},
"docs/assets/codex_directory_logo_dark.png": {
"sha256": "b3d48177b6c10d994f260867fe87015876fe3c4590ca4503b853a46054ecd11f",
"size": 5521
},
"docs/assets/codex_directory_logo_light.png": {
"sha256": "2ab75e36f5b81d3f8bdbb4973bbc714564a3532e8726c0241218f608616e1e26",
"size": 4820
},
"docs/assets/dataiku-lockup-black.svg": {
"sha256": "01283aaa3c3f6d5b86d9a95ee4f148d6d4ff27d881ff8c4d2dfbf1b5024bffff",
"size": 4025
},
"docs/assets/dataiku-lockup-white.svg": {
"sha256": "bf358457d36601a9e3e31334b288571ecd50e3ac2b4d661bd2ad515c0f39218b",
"size": 4025
},
"docs/assets/logo_black.png": {
"sha256": "0efedda39a2864fe87e17559d9e99f42144579c436bc279ba4272331f3dffb83",
"size": 11200
},
"docs/capabilities.md": {
"sha256": "3fff28e62125381fcd798744d04da74ce55984d7cb2f239547ad2e5303f7f731",
"size": 10961
},
"docs/http-deployment.md": {
"sha256": "a152442cfafd42c28b6964c339630432ad30c69bd23ca5d18c0a45415e280074",
"size": 17920
},
"pyproject.toml": {
"sha256": "fa8ceb8d6b56990d40caf62ee1bb25e8c8a2bd9b685e07c969b51c1c17cd25da",
"size": 2538
},
"runtime/launcher.sh": {
"sha256": "825d32d06d2ce42f9cc3bcb7210020bafdfe60efe19995fc21d55f8f32ef9366",
"size": 7182
},
"runtime/run_mcp.py": {
"sha256": "d689671a0cabd01eed2598433b56eb659e58b176814b8495cb66c8df8eed1549",
"size": 3391
},
"runtime/run_mcp.py.lock": {
"sha256": "9c11c8ce0209672c15406d504fdab8c59207209d4d5f0c737b65f4437c1b4497",
"size": 460907
},
"scripts/build_http_plugin.py": {
"sha256": "4079975c611c70caccdf01e4935939f35a5ecb2faa0276061ad7e00fd411a527",
"size": 6263
},
"scripts/check_license_headers.py": {
"sha256": "a046de229cd4c86ffac43f13d8b52a6e32fdcf76d1a56a85c5f9252bed9b16fd",
"size": 4286
},
"scripts/check_release.py": {
"sha256": "5ba518018e051242428b314247b8a3e3da796f80dddc9db85ce1cfa28a7f577e",
"size": 4778
},
"scripts/http_plugin_assets/skills/dataiku-headless-setup/SKILL.md": {
"sha256": "c02b9d42a4a331f7165cbe1ab9e876eded223f46b25af8d3fbf560ef261d717d",
"size": 2315
},
"skills/dataiku-headless-setup/SKILL.md": {
"sha256": "3904b563fc2b6fb8e42419b7312c304c9a6716d9b9cc047fbef07266c66fbd23",
"size": 7791
},
"skills/dataiku-headless/SKILL.md": {
"sha256": "939d7c5ee0d34bd8ee4b8a9846b93fde4484f48ca2c71b1c9f6388602406f138",
"size": 8178
},
"skills/dataiku-headless/references/administration.md": {
"sha256": "305fc51f0c0d3f16b43d7da4935c044215f60b7d724f4a5cd0a3e09f2578b87a",
"size": 1108
},
"skills/dataiku-headless/references/administration/code-environments.md": {
"sha256": "69df1427dcccbf453d415dd6580e1a67f96a6cb66aba636502aa65a813e056b8",
"size": 5659
},
"skills/dataiku-headless/references/administration/general-settings.md": {
"sha256": "b358d253115b7b71ab945195671e8b3a29609faa9ae521cfb3432bc3812bfca4",
"size": 1352
},
"skills/dataiku-headless/references/administration/groups.md": {
"sha256": "882808803a62371b973bcd20070dab0335ac89920841bd15ebfde82de337b41f",
"size": 2556
},
"skills/dataiku-headless/references/administration/licensing.md": {
"sha256": "6e3a8e978ca3e54d5324f9eff41731f847f80de31089cdffcf37427e249e3a12",
"size": 1065
},
"skills/dataiku-headless/references/administration/plugins.md": {
"sha256": "b95b340d4eaa8c4d26b8871d43ba0157d00a2a105e27e9d207e307e457bc5f76",
"size": 12584
},
"skills/dataiku-headless/references/administration/users.md": {
"sha256": "56360ccf07eaa6cffd8bd3894a866d02157b00f9a1c726157dfca0977419187d",
"size": 2187
},
"skills/dataiku-headless/references/agent-reviews.md": {
"sha256": "3f170b28d595afbf1e99eaee8f0af0dba4c616b9a1492dd03d9ae1db14b495af",
"size": 2565
},
"skills/dataiku-headless/references/agents.md": {
"sha256": "89ac660ce5a8c482d310d45b98f9e53f06317f31f7baddb7932fd223821eaf83",
"size": 2080
},
"skills/dataiku-headless/references/agents/agent-tools.md": {
"sha256": "1a6cff6687627faf7d5951dfd4ea8980d9c71631a0937c7f0c9dfe3f0479d429",
"size": 2498
},
"skills/dataiku-headless/references/agents/code-agent.md": {
"sha256": "0a3d28c053b76a6821ec5a377aeadb7cc9a12f8a534c2aeebc1d210c5c3f5114",
"size": 1380
},
"skills/dataiku-headless/references/agents/simple-agent.md": {
"sha256": "24d629cf63bf00d8edf53ea1ed26c7d08dee1e65282a5021a8b79fe2a885bed1",
"size": 1096
},
"skills/dataiku-headless/references/agents/structured-agent.md": {
"sha256": "2f8cef6cdfec1c63058c6843df20dd0e4fda4a8cc848a5c35ce3d22451a6e450",
"size": 3120
},
"skills/dataiku-headless/references/cobuild.md": {
"sha256": "d2eddb132211b90b452f6170d9badfdfd4f08bfe7577e0a0b2dea6906cef8ebb",
"size": 9367
},
"skills/dataiku-headless/references/connections.md": {
"sha256": "c246523f3ebd709f60e98158493b8eed1a9a14a29f8cb84eadf2e276f2cb86ab",
"size": 2254
},
"skills/dataiku-headless/references/connections/connection-types.md": {
"sha256": "2ced54097761951cf0dc7e3c32d9d8b2ab6d8ee36676f7c843c41688230b68ef",
"size": 1874
},
"skills/dataiku-headless/references/container-execution.md": {
"sha256": "f2d59c5b9e84919c6ec60f241a9c968fc76f6febfa840f7bf67e5e34bc75c8ed",
"size": 4178
},
"skills/dataiku-headless/references/cross-project-sharing.md": {
"sha256": "cbf8e01ca6df2833b13bba1c705144081369fc28561b374c2b22dbaf87984faa",
"size": 2706
},
"skills/dataiku-headless/references/dashboards.md": {
"sha256": "8def1d6fc7073afedaf97454159b9e2d74f4aea941d73cb4cb72684dc3c35a3e",
"size": 1990
},
"skills/dataiku-headless/references/data-collections.md": {
"sha256": "06eb291085b7d8b5cf29e58655fa90398037fb6bef56feb5c18fefc0dc189efd",
"size": 1899
},
"skills/dataiku-headless/references/data-quality.md": {
"sha256": "12d02a9b30375ba7f11aaee52da36eb63daaaa0bdc7a26f60fc1614a7f6813c5",
"size": 2409
},
"skills/dataiku-headless/references/data-quality/rule-types.md": {
"sha256": "3fcc1d093352fcb0f1604804d92340c6ba728ed8f04c9cbfe0909d4224d8fda7",
"size": 2514
},
"skills/dataiku-headless/references/datasets.md": {
"sha256": "cd564883ead74fa651bdff4e376c7f6094e17c2ed8e8d7e6895b0459fc9a5ce9",
"size": 6876
},
"skills/dataiku-headless/references/datasets/uploaded-files-datasets.md": {
"sha256": "0fa5c92ff78b29b80699490b07f88f321d5f026df647f9584a7817cdf141fd9b",
"size": 1958
},
"skills/dataiku-headless/references/insights.md": {
"sha256": "97fc899dafab540a877f7514683ec6649059f939038761735b6d9080f704d136",
"size": 2835
},
"skills/dataiku-headless/references/jobs.md": {
"sha256": "ea3ed21f5ebc0c4e906a32eebbc1389a33743d6fd5ac233e3b2948e43b62219a",
"size": 4566
},
"skills/dataiku-headless/references/llms-and-knowledge-banks.md": {
"sha256": "29b77eecc4c4b01b17410f6bb63f23f1e4288055e5bf98a15112f9a426bcd52e",
"size": 2354
},
"skills/dataiku-headless/references/machine-learning.md": {
"sha256": "002346999c60ae883dfcd35e679976e74c9e97c4799b326fffff1b70ef24875e",
"size": 3494
},
"skills/dataiku-headless/references/machine-learning/causal-prediction.md": {
"sha256": "bad22eb06b85d2cdf7f03acd5d6d83b694e624476bcf513f1a08f182bbbb1a87",
"size": 1542
},
"skills/dataiku-headless/references/machine-learning/clustering.md": {
"sha256": "decd24f29ba0417e8903d104e2b853097884178d35996dc8be06d04af26c41f6",
"size": 1523
},
"skills/dataiku-headless/references/machine-learning/prediction.md": {
"sha256": "d27a221dcb9100941f5304cd9664da7320a391aaa1c727537caf012d49dc742e",
"size": 1629
},
"skills/dataiku-headless/references/machine-learning/timeseries-forecasting.md": {
"sha256": "9ea2fde92cf3e3d4ef90a81e53c0c25851402ca84e7291777b129b2ecf4590f0",
"size": 1517
},
"skills/dataiku-headless/references/managed_folders.md": {
"sha256": "318802c108274c6211260b1c468ee0957764b656c830a313a8cb9b1cbf888ebd",
"size": 3177
},
"skills/dataiku-headless/references/migrations.md": {
"sha256": "e19be2d30843ebd3c1ec0ef8add516416466136d866bfcdcbaf94a3c7cf1e571",
"size": 10708
},
"skills/dataiku-headless/references/migrations/sources/excel/excel.md": {
"sha256": "07899faf64736f5ca9950921a1240917e2d582149dcf1fe2f0e705b71b9ae46b",
"size": 4101
},
"skills/dataiku-headless/references/migrations/sources/excel/guides/build.md": {
"sha256": "fd12238c9da368e8a3f53beaba991ccaafac3616ab5100fa3f77bae62f234fe5",
"size": 3025
},
"skills/dataiku-headless/references/migrations/sources/excel/guides/excel-semantics.md": {
"sha256": "f050e37ce53f079f09f1cbd59ade3357b94381195c5579d643382fd4cd3191ce",
"size": 3125
},
"skills/dataiku-headless/references/migrations/sources/excel/guides/reading-workbooks.md": {
"sha256": "ed5b92d5a8f6264303749793ab31ee537688120b628a20386919358332737a08",
"size": 4945
},
"skills/dataiku-headless/references/migrations/sources/excel/guides/validate.md": {
"sha256": "15acdd4710d69c4f025bc85226eb3b8e9b71692fdaca566db3897b53a5fa17ae",
"size": 6634
},
"skills/dataiku-headless/references/migrations/sources/excel/guides/webapp.md": {
"sha256": "d2970e426368be6d7b951dc8ec9603defda336a7ea8579f1310ff3c356f170bb",
"size": 5094
},
"skills/dataiku-headless/references/migrations/sources/excel/helpers/dump_anatomy.py": {
"sha256": "4c4f87a015a603a37d5377882543ce3bb0d690bfa9c3541a714a38e592bbc6eb",
"size": 14901
},
"skills/dataiku-headless/references/migrations/sources/excel/helpers/dump_workbook.py": {
"sha256": "5183873597d5dd1ab4dea234a7e70785fadf8984bcceccd559c2ed6bb4d84512",
"size": 3498
},
"skills/dataiku-headless/references/migrations/sources/excel/webapp/template.css": {
"sha256": "bf6aadcc8d53344c02e17e86ab2f4be612fdb0101c641462c564704fbb1b35dc",
"size": 5730
},
"skills/dataiku-headless/references/migrations/sources/excel/webapp/template.html": {
"sha256": "8ea1d5758977bc249bc57cdd0f45a82ef612398b2ab753ebe76dc6a028ba536b",
"size": 1212
},
"skills/dataiku-headless/references/migrations/sources/excel/webapp/template.js": {
"sha256": "139154f93fbf522a445206ee5b8be9072727b8b934e62f335794ce780acc41bb",
"size": 15230
},
"skills/dataiku-headless/references/migrations/sources/excel/webapp/template.py": {
"sha256": "5347604c09a99085de808b5e2cf9c7c91aa5a9981fc41c1ebd80453837ef18a4",
"size": 15134
},
"skills/dataiku-headless/references/plugin-development.md": {
"sha256": "6eb2f214ffaec11b515e98e744f4366fa7d332b0f8a68112865ccacffedea723",
"size": 7231
},
"skills/dataiku-headless/references/plugin-development/agent-tools.md": {
"sha256": "192d514c4a3d45c3a0718d7ebf18f918fa581c086dc9e452f3f410842122366c",
"size": 2878
},
"skills/dataiku-headless/references/plugin-development/agents.md": {
"sha256": "2c037d78e1f2a0f814db9716b9e94d65e1f948eb27534ef33fc66f9e73b3b2ae",
"size": 655
},
"skills/dataiku-headless/references/plugin-development/connectors.md": {
"sha256": "d2752bdc3630933891a340c63e60157656b923c2e396be9b22deabf2db361cfd",
"size": 2451
},
"skills/dataiku-headless/references/plugin-development/file-formats.md": {
"sha256": "67f6313aee6cc082510bbeae7929896eceeec52a33692f430764264b009bb263",
"size": 868
},
"skills/dataiku-headless/references/plugin-development/guardrails.md": {
"sha256": "674dfb1b84c55c056e9632a17fc0f6005d6188cf9877e5bab25162302bdefd62",
"size": 666
},
"skills/dataiku-headless/references/plugin-development/llms.md": {
"sha256": "7fa9d085aa7c158a813a333ce36564e39c77e952238bc35a8cec69c21aea2254",
"size": 2141
},
"skills/dataiku-headless/references/plugin-development/machine-learning.md": {
"sha256": "dd583b98b540d99b42e80a461629a0ea497d31c3b50ad9b36ce903a842a16be3",
"size": 1608
},
"skills/dataiku-headless/references/plugin-development/macros.md": {
"sha256": "a1303487a9da283dffc7a49ae898997bfcf374899685932f9398fc0f0b1e6ca2",
"size": 1343
},
"skills/dataiku-headless/references/plugin-development/prepare-processors.md": {
"sha256": "4950cb33ed9e3448f8775ede08cfb9b36bb9fe4bd9f38a8330214364b802b8b6",
"size": 1054
},
"skills/dataiku-headless/references/plugin-development/recipes.md": {
"sha256": "b59c5df3bd779a891f698d7ed3bbaa1fb38d12a57c07a5a620a714c1fa251e0c",
"size": 2062
},
"skills/dataiku-headless/references/plugin-development/settings-checks.md": {
"sha256": "575e8494ebd9b93eaa0a16d0b5acc2916a4e6d0816bc79e7b61e05f918852564",
"size": 1593
},
"skills/dataiku-headless/references/plugin-development/structured-agent-blocks.md": {
"sha256": "c52498e46a243de7a743a26f817bf8c9d1c838bf5a436da2f1f6d67a23d82fd6",
"size": 735
},
"skills/dataiku-headless/references/plugin-development/webapps.md": {
"sha256": "9cf94185bbe4df97ffe5a287057ecc0b245dc028b0a88958836f7a03b0ace14a",
"size": 1511
},
"skills/dataiku-headless/references/project-folders.md": {
"sha256": "cceec670ebc1620230985c7ffaf34d50c596e5adca26dbcee0d3d9730d19c6af",
"size": 2242
},
"skills/dataiku-headless/references/project-libraries.md": {
"sha256": "12b82f7bbd311b8acbd3a269914b6c74430da11c12258a2a3a5297720e903a0b",
"size": 3554
},
"skills/dataiku-headless/references/projects.md": {
"sha256": "0a944ee2dd5687d4691b8c4011af697989868a2bf54c843321b1c0042b5598fd",
"size": 3775
},
"skills/dataiku-headless/references/projects/settings.md": {
"sha256": "bff2018748f3d1acc78a394b2f28e13cc9411c40cd821499210165f209907463",
"size": 6190
},
"skills/dataiku-headless/references/recipes.md": {
"sha256": "cc0f1503af28968e349fa8de9f0ff6a85c72544d2dc646897ebbb23c65def9c9",
"size": 5959
},
"skills/dataiku-headless/references/recipes/recipe-types/code-recipes.md": {
"sha256": "1bcb99878d5d8278c9e45015ecf594d3ebcb17d2e12a9f67c446c4a1d15d6590",
"size": 1158
},
"skills/dataiku-headless/references/recipes/recipe-types/data-prep-recipes.md": {
"sha256": "c5eafab775d2e494784fda06d93fb8a122947dff456a58189e89bbdacc7e0ebb",
"size": 4459
},
"skills/dataiku-headless/references/recipes/recipe-types/genai-recipes.md": {
"sha256": "3958c31cd3c08c83e926761e5f5e6f58a75cf932e9e5e71f16b6c50eb77c248c",
"size": 1494
},
"skills/dataiku-headless/references/recipes/recipe-types/ml-recipes.md": {
"sha256": "88c41dba11c87a3e7db1f33751ea4aed34659192d9bad30d6dd6c11a1a3391ed",
"size": 1420
},
"skills/dataiku-headless/references/recipes/shared/dataiku_formula_language.md": {
"sha256": "ddec417fcbf843e65352e97398a59c25290c1f4cf0ff4ac00d91d2a56fa5ac9e",
"size": 14583
},
"skills/dataiku-headless/references/recipes/shared/prepare_processors_overview.md": {
"sha256": "0cd7853de9b31be208f4eca4dac07aa8e5492e073abcb77e3c2e74c9d820a215",
"size": 14131
},
"skills/dataiku-headless/references/scenarios.md": {
"sha256": "b6e23112a2e87fa67acafe648c6238403713c0ce445e3cd5d7283ba50167d893",
"size": 4427
},
"skills/dataiku-headless/references/semantic-models.md": {
"sha256": "fc33502ea7a1111d2dc572e505589d01c7f78c8e09e40fe043ab53eb6c891448",
"size": 3662
},
"skills/dataiku-headless/references/webapps.md": {
"sha256": "c5599f542816483f070301a7b067c8d3c246e2d3bd8658989332616e688e5871",
"size": 3151
},
"skills/dataiku-headless/references/wikis.md": {
"sha256": "a34159b2c1e6b477970d56252e83a215b28ee5b9c02e38101cc9e0246d3d3dcc",
"size": 2143
},
"skills/dataiku-headless/references/wikis/wiki-content.md": {
"sha256": "43b32bc0b980f3a0eb61afcc397020207871c552bcb3c1f692318c2dae5d7b2e",
"size": 1073
},
"tests/conftest.py": {
"sha256": "5c4629703c494648293d1cd6819145e24c125a1832c0652a953e07379b7318e8",
"size": 2277
},
"tests/test_auth.py": {
"sha256": "0b90b7514e5fdfe5ef81895fdf99778e4d5df7d64e78696fe55f4948e41fee99",
"size": 6199
},
"tests/test_capabilities_doc.py": {
"sha256": "1b7c19168dec8dca519f0f8938bc4ea79b71f0b48df90aaa9a8cb8e2944211c5",
"size": 3138
},
"tests/test_cobuild.py": {
"sha256": "618d9ece76cf4809fb79dbe91f0c2166f145f347566e3e6cd0b0805fd6756688",
"size": 21151
},
"tests/test_code_environments.py": {
"sha256": "31f0ddd992a0aa208cfe43642d2145026ed3da1ac2216cfaf10a317a5b036041",
"size": 15190
},
"tests/test_config.py": {
"sha256": "5c42ee6856270c8f991b0ffef41244be30293d59e69949f9e1785a080139e7bc",
"size": 38341
},
"tests/test_config_files.py": {
"sha256": "a6d008f5c43f761af91a0f24fab1ca4187f0f21fdce530ae0b6a5de7998703ec",
"size": 2016
},
"tests/test_connections.py": {
"sha256": "4433e22d6777da1c1764127eb59caf5985d504ad42acfb7fd14fb878828866a0",
"size": 1776
},
"tests/test_container_exec.py": {
"sha256": "c4e32467ae25793d06f3809bd6ea871eb24c3c5d138ec0cdc1c051190695ba11",
"size": 15498
},
"tests/test_cursor_plugin.py": {
"sha256": "ad6dab83d5951b2d5a30a109ae79d2d99f642debee598f7fdce6df7b4aba464b",
"size": 1508
},
"tests/test_dataset_metrics.py": {
"sha256": "23e4f3a936278c8de624dc078c7a42f5950dec1be195de07c05b0eabb95e2c01",
"size": 6955
},
"tests/test_datasets.py": {
"sha256": "1a3c26fc5ef871ebbd3e038cd271754ee98cfff608d50b43e71b3051404234a5",
"size": 10217
},
"tests/test_execution_tools.py": {
"sha256": "7655056bc8d1d32611945df29bb18a901e260a3507b6bd70485d6eb68f3f9bfd",
"size": 41150
},
"tests/test_fakes.py": {
"sha256": "3320fcc8139b14048e53dee6342d10e02f1876d634eade23755a0297c2ac199a",
"size": 1775
},
"tests/test_flow_graph.py": {
"sha256": "473eac5415bea2c00187d98c432b04c1a5aa5d4bbc91363783dc39fbc39a1099",
"size": 14746
},
"tests/test_general_settings.py": {
"sha256": "890cd225c0bda0e91a6517a9d65f5dcc6e34a9f21f0b7e1246b619c731c8a629",
"size": 6920
},
"tests/test_groups.py": {
"sha256": "f680d004aa1dd7bd3f69e86a2df63dc61aa61aecef8a8226912c73cde557c4e7",
"size": 4245
},
"tests/test_http_config.py": {
"sha256": "1be66dc0e1efb84c15adecfc40e3a2724997d80198057415ccb571bc95f85330",
"size": 32743
},
"tests/test_http_middleware.py": {
"sha256": "2d75ab0ff3aa2b2a9238e84d7c93670c39a37f8ed93f2a5fd4e669334dfe8db1",
"size": 9590
},
"tests/test_http_plugin_renderer.py": {
"sha256": "82110e41742086c8f16a0c007257fd21bff12d7d2dfde45cd75c607feca5e2e9",
"size": 6160
},
"tests/test_instance_pinning.py": {
"sha256": "51c6acd0c77948fb43f15047ad992191cd6b7afed2e998a024e5c11becb400c2",
"size": 2564
},
"tests/test_instance_policy.py": {
"sha256": "c7c5fa83139803cdb4a020def372758b8b5b26cc5d020d08aff6b8bc684c54b7",
"size": 13875
},
"tests/test_instances.py": {
"sha256": "23ea6368e1e0addacef1dc160b98cc295daa25902105562903bd6c1cd438a524",
"size": 12441
},
"tests/test_launcher_cli.py": {
"sha256": "a93f9cb8377c5275d9f292285a99571dcdb0f4f2679c99afcfce9c1355945290",
"size": 4359
},
"tests/test_local_file_http_guards.py": {
"sha256": "0091957b4ed63a9f9713a04b67c779c0e6b9328ddaf6bd56935ccb19a5c1836f",
"size": 2172
},
"tests/test_onboarding_ui.py": {
"sha256": "3662fbd3ba45572fb5b532fd1669f9affb692808f50d8e32729063fe2387625b",
"size": 1042
},
"tests/test_pep723_launcher.py": {
"sha256": "0784ffa1a050cd3ffb3fc2f35e9119fa595bb9a1d8802cb75bcd2552bc5fb710",
"size": 4243
},
"tests/test_plugin_futures.py": {
"sha256": "75d9ed23b3eb280ddc31bde4819479b5ec190989ac09f35ec7e52b23ef2bf59b",
"size": 4846
},
"tests/test_plugin_packaging.py": {
"sha256": "01bee934a7d31c3892ad729732ff4bb9d377bed0fa87ca7b847d629ed4d11d2f",
"size": 6547
},
"tests/test_plugins.py": {
"sha256": "002019bb10e95a766452613ef8c972ba959d947cd80eeeed38528b37bfdd982f",
"size": 70849
},
"tests/test_project_settings.py": {
"sha256": "58700d233bbac5a263adad7fa214bc3e4878c225a21e55c962853e97f7796404",
"size": 6312
},
"tests/test_project_variables.py": {
"sha256": "9e06ef65f63819196dff7fc0083403648f0b381740ec97d5d7980bb0c0803d32",
"size": 2931
},
"tests/test_release.py": {
"sha256": "6c2a241bc9d697f7e30e598d7ff293283e7ea58f21ebef7ced6637be9d2e8d79",
"size": 11372
},
"tests/test_server.py": {
"sha256": "8d1f277c85be089144b9462b4d95bafadc75bd9efaf494edff24c663b294e5a5",
"size": 9591
},
"tests/test_setup_server.py": {
"sha256": "9a7608a6074d1f3a2cf251556dfe67d20fdc0f909653da897d33fd18f05349c5",
"size": 20230
},
"tests/test_smoke.py": {
"sha256": "d115dd73a722c076e1d9596c0d09b38a926700b3d8cacfa308deabd9d5a1d35e",
"size": 1988
},
"tests/test_tls_trust.py": {
"sha256": "33a58568d442dc2a6357db92fb04a695ee4e4c29a9627b9e6b246c0234a34791",
"size": 5208
},
"tests/test_tool_surface.py": {
"sha256": "285c9ebf998a189e8d9d30d1913cea7f63187bc7490c59478dc3ef789e047a80",
"size": 8670
},
"tests/test_users.py": {
"sha256": "1a45e66c5c001308abcb8fc50f083fbd3505cf6427f3d258e1e81994c8ca3f96",
"size": 6089
},
"tests/utils/fakes.py": {
"sha256": "8ce9812999f93c96ba83f50301a745d009e560cddb1f8abad86b036984123fc9",
"size": 2341
},
"uv.lock": {
"sha256": "6249f71d815813a22c5930a3480b49e59d16d6366dd3873ed87fdfff7e51ff30",
"size": 419395
}
}
}SHA-256 of public snapshot: 181cd644401784043e329a2935a65ac4587413f1fc263d113295ba5bb17e116b