Changes duck typing ('db' in object) to instanceof check for precise type discrimination.
Only unwraps SQLiteStorageService instances, preserving DatabaseAdapter wrappers intact.
Fixes MCP tool failures (get_node_essentials, get_node_info, validate_node_operation)
on systems using sql.js fallback (Node.js version mismatches, ARM architectures).
- Changed: NodeRepository constructor to use instanceof SQLiteStorageService
- Fixed: sql.js queries now flow through SQLJSAdapter wrapper properly
- Impact: Empty object returns eliminated, proper data normalization restored
Closes#296🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added isDocker and cloudPlatform fields to session_start telemetry events to enable measurement of the v2.17.1 user ID stability fix.
Changes:
- Added detectCloudPlatform() method to event-tracker.ts
- Updated trackSessionStart() to include isDocker and cloudPlatform
- Added 16 comprehensive unit tests for environment detection
- Tests for all 8 cloud platforms (Railway, Render, Fly, Heroku, AWS, K8s, GCP, Azure)
- Tests for Docker detection, local env, and combined scenarios
- Version bumped to 2.18.1
- Comprehensive CHANGELOG entry
Impact:
- Enables validation of v2.17.1 boot_id-based user ID stability
- Allows segmentation of metrics by environment
- 100% backward compatible - only adds new fields
- All tests passing, TypeScript compilation successful
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added comprehensive TypeScript type definitions for n8n node parsing while
maintaining zero compilation errors. Uses pragmatic "70% benefit with 0%
breakage" approach with strategic `any` assertions.
## Type Definitions (src/types/node-types.ts)
- NodeClass union type replaces `any` in method signatures
- Type guards: isVersionedNodeInstance(), isVersionedNodeClass()
- Utility functions for safe node handling
## Parser Updates
- node-parser.ts: All methods use NodeClass (15+ methods)
- simple-parser.ts: Strongly typed method signatures
- property-extractor.ts: Typed extraction methods
- 30+ method signatures improved
## Strategic Pattern
- Strong types in public method signatures (caller type safety)
- Strategic `as any` assertions for internal union type access
- Pattern: const desc = description as any; // Access union properties
## Benefits
- Better IDE support and auto-complete
- Compile-time safety at call sites
- Type-based documentation
- Zero compilation errors
- Bug prevention (would have caught v2.17.4 baseDescription issue)
## Test Updates
- All test files updated with `as any` for mock objects
- Zero compilation errors maintained
## Known Limitations
- ~70% type coverage (signatures typed, internal logic uses assertions)
- Union types (INodeTypeBaseDescription vs INodeTypeDescription) not fully resolved
- Future work: Conditional types or overloads for 100% type safety
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit fixes two critical bugs affecting AI Agent and other langchain nodes:
1. Version Extraction Bug (node-parser.ts)
- AI Agent was returning version "3" instead of "2.2" (the defaultVersion)
- Root cause: extractVersion() checked non-existent instance.baseDescription.defaultVersion
- Fix: Updated priority to check currentVersion first, then description.defaultVersion
- Impact: All VersionedNodeType nodes now return correct version
2. typeVersion Validation Bypass (workflow-validator.ts)
- Langchain nodes with invalid typeVersion passed validation (even typeVersion: 99999)
- Root cause: langchain skip happened before typeVersion validation
- Fix: Moved typeVersion validation before langchain parameter skip
- Impact: Invalid typeVersion values now properly caught for all nodes
Also includes:
- Database rebuilt with corrected version data (536 nodes)
- Version bump: 2.17.3 → 2.17.4
- Comprehensive CHANGELOG entry
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This fixes a critical validation gap where AI agents could create invalid
configurations for nodes using resourceLocator properties (primarily AI model
nodes like OpenAI Chat Model v1.2+, Anthropic, Cohere, etc.).
Before this fix, AI agents could incorrectly pass a string value like:
model: "gpt-4o-mini"
Instead of the required object format:
model: { mode: "list", value: "gpt-4o-mini" }
These invalid configs would pass validation but fail at runtime in n8n.
Changes:
- Added resourceLocator type validation in config-validator.ts (lines 237-274)
- Validates value is an object with required 'mode' and 'value' properties
- Provides helpful error messages with exact fix suggestions
- Added 10 comprehensive test cases (100% passing)
- Updated version to 2.17.3
- Added CHANGELOG entry
Affected nodes: OpenAI Chat Model (v1.2+), Anthropic, Cohere, DeepSeek,
Groq, Mistral, OpenRouter, xAI Grok Chat Models, and embeddings nodes.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Fixes critical issue where Docker and cloud deployments generated new
anonymous user IDs on every container recreation, causing 100-200x
inflation in unique user counts.
Changes:
- Use host's boot_id for stable identification across container updates
- Auto-detect Docker (IS_DOCKER=true) and 8 cloud platforms
- Defensive fallback chain: boot_id → combined signals → generic ID
- Zero configuration required
Impact:
- Resolves ~1000x/month inflation in stdio mode
- Resolves ~180x/month inflation in HTTP mode (6 releases/day)
- Improves telemetry accuracy: 3,996 apparent users → ~2,400-2,800 actual
Testing:
- 18 new unit tests for boot_id functionality
- 16 new integration tests for Docker/cloud detection
- All 60 telemetry tests passing (100%)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit implements HIGH-02 (Rate Limiting) and HIGH-03 (SSRF Protection)
from the security audit, protecting against brute force attacks and
Server-Side Request Forgery.
Security Enhancements:
- Rate limiting: 20 attempts per 15 minutes per IP (configurable)
- SSRF protection: Three security modes (strict/moderate/permissive)
- DNS rebinding prevention
- Cloud metadata blocking in all modes
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Production-ready improvements based on comprehensive code review:
Critical Fixes:
- Robust container detection: Checks multiple env vars (IS_DOCKER, IS_CONTAINER)
with flexible formats (true/1/yes) and filesystem markers (/.dockerenv,
/run/.containerenv) for Docker, Kubernetes, Podman, containerd support
- Fixed redundant exit calls: Removed immediate exit, use 1000ms timeout for
graceful shutdown allowing cleanup to complete
- Added error handling for stdin registration with try-catch
- Added shutdown trigger logging (SIGTERM/SIGINT/SIGHUP/STDIN_END/STDIN_CLOSE)
Improvements:
- Increased timeout from 500ms to 1000ms for slower systems
- Added null safety for stdin operations
- Enhanced documentation explaining behavior in different environments
- More descriptive variable names (isDocker → isContainer)
Testing:
- Supports Docker, Kubernetes, Podman, and other container runtimes
- Graceful fallback if container detection fails
- Works in Claude Desktop, containers, and manual execution
Code Review: Approved by code-reviewer agent
All critical and warning issues addressed
Reported by: @Eddy-Chahed
Issue: #277🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added 4 critical integration tests to prevent regression of the
production-breaking array index corruption bug in multi-output nodes.
Tests verify against real n8n API:
1. IF Node - Empty array preservation when removing connections
- Removes true branch connection
- Verifies empty array at index 0
- Verifies false branch stays at index 1 (not shifted)
2. Switch Node - Remove first case (MOST CRITICAL)
- Tests exact bug scenario that was production-breaking
- Removes case 0
- Verifies cases 1, 2, 3 stay at original indices
3. Switch Node - Sequential operations
- Complex scenario: rewire, add, remove in sequence
- Verifies indices maintained throughout operations
- Tests empty arrays preserved at intermediate positions
4. Filter Node - Rewiring connections
- Tests kept/discarded outputs (2-output node)
- Rewires one output
- Verifies other output unchanged
All tests validate actual workflow structure from n8n API to ensure
our fix (only remove trailing empty arrays) works correctly.
Coverage:
- Total: 174 tests (158 unit + 16 integration)
- All tests passing ✅
- Integration tests provide regression protection
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Version bump due to functionality changes in Phase 5:
Changes:
- handleDeleteWorkflow now returns deleted workflow data
- handleListWorkflows tags parameter fixed (array → CSV string)
- N8nApiClient.deleteWorkflow return type fixed (void → Workflow)
- WorkflowListParams.tags type corrected (string[] → string)
These are bug fixes and enhancements, not just tests.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implements comprehensive execution data filtering system to enable AI agents
to inspect large workflow executions without exceeding token limits.
Features:
- Preview mode: Shows structure, counts, and size estimates (~500 tokens)
- Summary mode: Returns 2 sample items per node (~2-5K tokens)
- Filtered mode: Granular control with itemsLimit and nodeNames
- Full mode: Complete data retrieval (explicit opt-in)
- Smart recommendations based on data size analysis
- Structure-only mode (itemsLimit: 0) for schema inspection
- 100% backward compatibility with legacy includeData parameter
Technical improvements:
- New ExecutionProcessor service with intelligent filtering logic
- Type-safe implementation with Record<string, unknown> over any
- Comprehensive validation and error handling
- 33 unit tests with 78% coverage
- Constants-based thresholds for easy tuning
Bug fixes:
- Fixed preview mode API data fetching to enable structure analysis
- Validates and caps itemsLimit to prevent abuse
Impact:
- Reduces token usage by 80-95% for large datasets (50+ items)
- Prevents token overflow when inspecting workflow executions
- Enables recommended workflow: preview → recommendation → targeted fetch
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The v2.14.1 release contains the entire telemetry system refactor with:
- Major architectural improvements (modularization)
- Security & privacy enhancements
- Performance & reliability improvements
- Test coverage increase from 63% to 91%
- Multiple bug fixes for CI/test failures
- Add anonymous telemetry system with Supabase integration
- Fix TypeErrors affecting 50% of tool calls
- Improve test coverage to 91%+
- Add comprehensive CHANGELOG
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created complete CHANGELOG.md from v1.0.0 to v2.7.0 based on git history
- Updated README.md to fix incorrect CHANGELOG path reference
- Added n8n-docs/ directory to .gitignore (was accidentally tracked)
- Removed n8n-docs from git tracking
The CHANGELOG now follows Keep a Changelog format and includes all major features,
fixes, and improvements for each version with proper categorization.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Removed ~965MB of temporary directories (temp/, extracted-nodes/, etc)
- Deleted outdated database files and backups (.bak files)
- Removed legacy shell scripts (mcp-server-v20.sh, rebuild-v20.sh)
- Cleaned up orphan test files and debugging scripts
- Removed duplicate schema file (src/db/schema.sql)
- Deleted old Dockerfile.old and empty database files
- Updated documentation structure in README.md
- Added n8n_diagnostic tool to documentation
- Condensed version history in CLAUDE.md
- Created release notes for v2.7.0
Total impact: Removed 34 files, saving ~965MB+ of disk space
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove all references to workflow execution/management features
- Delete legacy scripts for bidirectional n8n integration
- Update documentation to focus on node documentation serving only
- Remove old docker-compose files for workflow management
- Add simplified docker-compose.yml for documentation server
- Update CHANGELOG.md to reflect v2.0.0 and v2.1.0 changes
- Update Dockerfile to use v2 paths and database
The project is now clearly focused on serving n8n node documentation
to AI assistants, with no workflow execution capabilities.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated CLAUDE.md with complete project state and capabilities
- Enhanced README.md with node extraction features and examples
- Added CHANGELOG.md to track version history
- Documented new MCP tools and resources for node source extraction
- Added special features section highlighting AI Agent capabilities
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>