Co-authored-by: Clément Drouin <clement.drouin@mistral.ai>
Co-authored-by: Clément Sirieix <clement.sirieix@mistral.ai>
Co-authored-by: Gauthier Guinet <43207538+Gguinet@users.noreply.github.com>
Co-authored-by: Kim-Adeline Miguel <kimadeline.miguel@mistral.ai>
Co-authored-by: Michel Thomazo <51709227+michelTho@users.noreply.github.com>
Co-authored-by: Quentin <torroba.q@gmail.com>
Co-authored-by: Simon <80467011+sorgfresser@users.noreply.github.com>
Co-authored-by: Simon Van de Kerckhove <simon.vandekerckhove@mistral.ai>
Co-authored-by: Vincent G <10739306+VinceOPS@users.noreply.github.com>
Co-authored-by: angelapopopo <angele.lenglemetz@mistral.ai>
Co-authored-by: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
Mathias Gesbert 2026-03-23 18:45:21 +01:00 committed by GitHub
parent 5103019b01
commit eb580209d4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
180 changed files with 11136 additions and 1030 deletions

View file

@ -1,8 +1,14 @@
from __future__ import annotations
from vibe.acp.utils import get_proxy_help_text
from vibe.acp.utils import (
TOOL_OPTIONS,
ToolOption,
build_permission_options,
get_proxy_help_text,
)
from vibe.core.paths import GLOBAL_ENV_FILE
from vibe.core.proxy_setup import SUPPORTED_PROXY_VARS
from vibe.core.tools.permissions import PermissionScope, RequiredPermission
def _write_env_file(content: str) -> None:
@ -53,3 +59,65 @@ class TestGetProxyHelpText:
assert "HTTP_PROXY=http://proxy:8080" in result
assert "HTTPS_PROXY=" not in result
class TestBuildPermissionOptions:
def test_no_permissions_returns_default_options(self) -> None:
result = build_permission_options(None)
assert result is TOOL_OPTIONS
def test_empty_list_returns_default_options(self) -> None:
result = build_permission_options([])
assert result is TOOL_OPTIONS
def test_with_permissions_includes_labels_in_allow_always(self) -> None:
permissions = [
RequiredPermission(
scope=PermissionScope.COMMAND_PATTERN,
invocation_pattern="npm install foo",
session_pattern="npm install *",
label="npm install *",
)
]
result = build_permission_options(permissions)
assert len(result) == 3
allow_always = next(o for o in result if o.option_id == ToolOption.ALLOW_ALWAYS)
assert "npm install *" in allow_always.name
assert "session" in allow_always.name.lower()
def test_allow_always_has_field_meta(self) -> None:
permissions = [
RequiredPermission(
scope=PermissionScope.COMMAND_PATTERN,
invocation_pattern="mkdir foo",
session_pattern="mkdir *",
label="mkdir *",
)
]
result = build_permission_options(permissions)
allow_always = next(o for o in result if o.option_id == ToolOption.ALLOW_ALWAYS)
assert allow_always.field_meta is not None
assert "required_permissions" in allow_always.field_meta
meta_perms = allow_always.field_meta["required_permissions"]
assert len(meta_perms) == 1
assert meta_perms[0]["session_pattern"] == "mkdir *"
def test_allow_once_and_reject_unchanged(self) -> None:
permissions = [
RequiredPermission(
scope=PermissionScope.URL_PATTERN,
invocation_pattern="example.com",
session_pattern="example.com",
label="fetching from example.com",
)
]
result = build_permission_options(permissions)
allow_once = next(o for o in result if o.option_id == ToolOption.ALLOW_ONCE)
reject_once = next(o for o in result if o.option_id == ToolOption.REJECT_ONCE)
assert allow_once.name == "Allow once"
assert reject_once.name == "Reject once"
assert allow_once.field_meta is None
assert reject_once.field_meta is None