From 913d02170594d652c03c6f7977f73c9a13596278 Mon Sep 17 00:00:00 2001 From: grossmj Date: Thu, 9 Jul 2026 10:40:38 +0200 Subject: [PATCH] Release v3.1.0a4 --- CHANGELOG | 137 +++++++++++++++++++++++++++++++++++++ gns3server/crash_report.py | 2 +- gns3server/version.py | 4 +- 3 files changed, 140 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 305263c5e..284533090 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,142 @@ # Change Log +## 3.1.0a4 09/07/2026 + +* Bundle web-ui v3.1.0a4 +* Add jwt_refresh_token_expire_minutes to sample configuration +* Remove deleted web-ui files from git +* .dockerignore ignore .dockerignore +* typo made me reconsider and move out to env +* defaulted DOCKERHUB_ORG repository variable +* Remove API docs from 2.2 after merging +* Update GitHub Actions workflows +* Fix web-wireshark docker build broken by xpra 6.5 release +* Update CI to install [ai-features,dev] instead of [ai-copilot,dev] +* Make AI features (AI Copilot + MCP) optional via [ai-features] extra +* Add refresh token mechanism documentation under docs/features/ +* Add /refresh to allowed public endpoints list in route auth test +* Add stateless JWT refresh token mechanism +* Add project/node/link handler tests: 39 total, covering list/get/create/delete/start/stop/suspend/reload/console/update/fields +* Add MCP tool parameter consistency tests +* Fix appliance_install: add version parameter +* Add coordinate system note to docs +* Document canvas coordinate system in node_create x/y params +* Update docstring: batch concurrency from 10 to 100 +* Remove unused import time +* Add list type check before nodes[0] access in _normalize_link_nodes +* Add fields type validation in create handlers +* Use pop() instead of pop(0) for O(1) port removal +* Fix review issues: key_prefix length, count validation, WAL log, timeout comment, pointless temp var +* Fix: pass name from TemplateUsage to add_node_from_template +* Remove unused imports (logging, log, select) +* Add warning for unconsumed pre-allocated UDP ports after link creation +* Remove FIXME comment about middleware in server.py +* Rename device_command_run_handler → device_show_run_handler to match tool name +* Rename device_command_run → device_show_run for clarity +* Fix device_command_run KeyError('commands'): tool desc said show_commands but backend expects commands +* Fix template_list return type annotation to match _run_handler_sync envelope +* Add performance optimization documentation +* Update MCP service docs: API key format, auth flow, tool parameters, concurrency +* Increase HTTP connection pool to 500/1000 +* Increase BATCH_MAX_WORKERS and Pool concurrency from 20 to 100 +* Remove final timing artifact in projects.py +* Remove remaining dead timing variables and imports +* Remove database warmup (proven ineffective - real bottleneck was bcrypt blocking event loop) +* Clean up all timing/debug logs +* Add memory: import validation best practice +* Fix: add missing UUID imports +* Generate fresh JWT on API key auth instead of returning raw key +* Optimize API key auth: O(1) lookup via UUID-embedded key format +* Fix: offload bcrypt.checkpw to thread pool to prevent blocking event loop +* Add timing to API key auth path and log api_keys count +* Replace SELECT 1 warmup with full database file read to warm OS page cache +* Add timing logs to auth dependency chain to identify 6s pre-handler delay +* Add granular timing to get_template: separate execute vs fetch time +* Warm up database connection pool on startup to avoid 8s cold-start penalty on first API request +* Fix: register WAL PRAGMA on sync_engine instead of Engine class for async compat +* Add timing logs to get_template to identify DB query bottleneck +* Add timing middleware to log slow requests (>1s) with [CTRL-TIMING] prefix +* Fix: _time → time in compute.py timing log +* Add [CTRL-TIMING] logs to controller create_node flow +* Fix: pass template_id to batch mode handler so top-level template_id works as default +* Add detailed timing logs to MCP node creation and HTTP client +* Add fields filter to template_list tool with description for AI +* Fix: add missing _filter_link_response function +* Pass name parameter through to controller API when creating node from template +* Add validation to compact link format with clear error messages +* Add compact array format for link node entries to reduce token usage +* Add fields filter to link_create tool +* Reduce md5sum cache write failure log level from error to warning +* Add fields filter to node_create tool description for AI +* Optimize MCP create_node: support inherited template_id and default fields filter +* Increase MCP HTTP client timeout from 10s to 30s +* Enable SQLite WAL mode to fix 'database is locked' errors under concurrent API requests +* Cache IOU image default values per image path to avoid redundant subprocess calls +* Increase node and link creation concurrency from 5 to 20 +* Fix: revert IOU lock optimization, serialize IOU node creation for correct application_id assignment +* Performance: accelerate project opening with parallel link creation and batch UDP port allocation +* feat: Add batch link_ids to link_delete/link_reset, fields filter to link_list +* feat: Add fields filter to link_list +* feat: Add batch node_ids to node_delete +* fix: Convert http to ws scheme in node_console WebSocket URL +* feat: Add batch link_ids to link_capture_download +* feat: Add batch link_ids to link_capture_start/stop +* fix: Store username in gns3_ctx during auth, use for short-lived download JWTs +* fix: Generate independent short-lived JWT for pcap download +* revert: Remove _configs_map changes in tools_v2 (handled by template renderer now) +* fix: Merge commands for duplicate device_names in _configs_map +* fix: Actually pass template param to device_config/command handlers +* fix: Correct Jinja2 template commands_field per tool type +* feat: Jinja2 template support in device_command_run +* feat: Jinja2 template support in device_config_send +* feat: Add batch node_ids support to node_start/stop/reload/suspend +* feat: Add fields filter to appliance_list +* feat: Add fields filter to node_list +* feat: node_get fields filter — match controller Node schema fields +* fix: Set auto_close=False on project_create so projects stay open when clients disconnect +* feat: Add batch mode to node_create and link_create (parallel, max 10 workers) +* fix: Pass API key directly instead of generating short-lived JWT +* feat: API key lifecycle — revoke/restore/delete +* fix: Rename revoke_api_key → delete_api_key +* fix: Hard-delete API keys instead of soft delete (revoked flag) +* feat: Support API keys in REST API authentication (reuse gns3_ prefix keys) +* fix: Lazily access db engine for API key validation +* fix: Add missing updated_at column to api_keys table +* fix: Export ApiKeyCreate from schemas package +* feat: Add API Key support for MCP authentication +* fix: Validate JWT token exp claim — was silently ignored after migration to joserfc +* fix: Add image field to template_create, document type-specific params in description +* fix: Remove .json() calls on 204 responses for prune/install images +* fix: Skip always-running nodes in start_all/stop_all +* fix: Add missing rotation parameter to drawing_update MCP tool +* fix: Map MCP device_command_run parameter to tool's expected field name +* fix: Update link_reset description to match actual behavior (delete + recreate) +* fix: Remove unsupported description param from project_create +* fix: Fix symbol_get/upload/delete handlers for correct API paths +* feat: Log registered MCP tools at startup +* fix: Type compute_id as uuid.UUID to reject non-UUID values at MCP input layer +* fix: Require UUID for compute_get/images, remove 'local' string default +* feat: Add device configuration MCP tools (config_send, command_run, vpcs_config_set) +* refactor: unify MCP tool naming to _ convention +* feat: Add symbol upload/delete, project load, and locked check MCP tools +* feat: Add image management MCP tools +* feat: Add symbol and appliance MCP tools +* feat: Add node bulk ops, project lock, and server info MCP tools +* feat: Add snapshot and drawing MCP tools +* refactor: unify MCP handlers to use http_call directly, relocate node file ops to Node class +* feat: Add node file operations as MCP tools (list, get, write, delete) +* Add comment about rootful Docker permissions at container start +* Fix _fix_permissions test: set process.returncode=0 and update assertion +* Fix list_node_files PermissionError on os.scandir +* Fix _fix_permissions error handling and list_node_files PermissionError +* Add async_iterable_to_stream utility to avoid aiohttp compatibility issues +* Add descriptive detail to 403 errors in compute file endpoints +* Fix silent file write failure in write_compute_project_file +* feat: Node file streaming, recursive listing, file type detection, and file delete +* Update README tool descriptions: .txt → .md +* Update README tool descriptions to mention Markdown format +* Add MCP project tools: update, duplicate, and README operations + ## 3.1.0a3 06/06/2026 * Bundle web-ui v3.1.0a3 diff --git a/gns3server/crash_report.py b/gns3server/crash_report.py index 0f34c0ace..77bb23363 100644 --- a/gns3server/crash_report.py +++ b/gns3server/crash_report.py @@ -58,7 +58,7 @@ class CrashReport: Report crash to a third party service """ - DSN = "https://5a97c548f3a1cdc23c9b6b82f7c64744@o19455.ingest.us.sentry.io/38482" + DSN = "https://7b5d8f1189b61e674dc6ee41b0ec9da8@o19455.ingest.us.sentry.io/38482" _instance = None def __init__(self): diff --git a/gns3server/version.py b/gns3server/version.py index 3a2506d2d..41cfaf0ef 100644 --- a/gns3server/version.py +++ b/gns3server/version.py @@ -22,8 +22,8 @@ # or negative for a release candidate or beta (after the base version # number has been incremented) -__version__ = "3.1.0.dev4" -__version_info__ = (3, 1, 0, 99) +__version__ = "3.1.0a4" +__version_info__ = (3, 1, 0, -99) if "dev" in __version__: try: