Skip to content

Changelog

All notable changes to AgentForge will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.15.2] - 2026-03-05

Added

@agentforge/patterns — Testing

  • Added shared regression tests for withErrorHandling:
    • GraphInterrupt passthrough behavior
    • Error fallback shape behavior for states with optional status/error

Changed

Release Tooling & Documentation

  • Removed RELEASE_CHECKLIST.md to avoid duplicate/conflicting release guidance
  • Updated release references in README.md and scripts/release.sh to use .ai/RELEASE_PROCESS.md
  • Updated release script messaging to reference docs-site/changelog.md and ./scripts/publish.sh

Fixed

@agentforge/tools — Relational Insert

  • Fixed strict typing mismatch in batch insert aggregation (allRows now aligned with InsertResult.rows type)

@agentforge/tools — Test Stability

  • Made Docker-backed relational integration suites opt-in via RUN_INTEGRATION_TESTS=true to avoid failing default test runs when container runtime is unavailable
  • Made live web-search performance suite opt-in via RUN_WEB_PERFORMANCE_TESTS=true to avoid network-dependent failures in default test runs

@agentforge/patterns — Shared Utilities

  • Improved buildAgent dynamic edge wiring types for strict typecheck compatibility
  • Refined withErrorHandling fallback typing to expose explicit { status: 'failed'; error: string } fallback shape
  • Fixed typecheck compatibility for package-wide strict checks

Published

  • All packages published to npm registry at version 0.15.2:
    • @agentforge/core@0.15.2
    • @agentforge/skills@0.15.2
    • @agentforge/patterns@0.15.2
    • @agentforge/tools@0.15.2
    • @agentforge/testing@0.15.2
    • @agentforge/cli@0.15.2

[0.15.1] - 2026-02-25

Fixed

@agentforge/skills — Dependency Fix

  • Moved @agentforge/core from peerDependencies to dependencies so it auto-installs for consumers (matching @agentforge/patterns convention)

Published

  • All packages published to npm registry at version 0.15.1:
    • @agentforge/core@0.15.1
    • @agentforge/skills@0.15.1
    • @agentforge/patterns@0.15.1
    • @agentforge/tools@0.15.1
    • @agentforge/testing@0.15.1
    • @agentforge/cli@0.15.1

[0.15.0] - 2026-02-25

Added

@agentforge/skills — New Package (EP-07)

  • New @agentforge/skills package — Skills source files extracted from @agentforge/core into a dedicated package with full public API:
    • SkillRegistry, parseSkillContent, scanSkillRoot, scanAllSkillRoots
    • createActivateSkillTool, createReadSkillResourceTool, createSkillActivationTools
    • evaluateTrustPolicy, isScriptResource, normalizeRootConfig, resolveResourcePath
    • All types: Skill, SkillMetadata, SkillRegistryConfig, TrustLevel, etc.
  • Imports re-wired from relative core internals to @agentforge/core package imports
  • Logger names updated to agentforge:skills:* namespace
  • Skills test suite (215 tests) migrated from packages/core/tests/skills/ to packages/skills/tests/
    • 7 test files: activation, conformance, parser, prompt, registry, scanner, trust
    • Fixture skill packs (valid, malformed, untrusted) moved to packages/skills/tests/fixtures/

Documentation — Skills Package Migration (EP-07)

  • All docs, guides, examples, and tutorials updated to import from @agentforge/skills
  • New @agentforge/skills API Reference page (extracted from core API docs)
  • Migration guide updated with Skills Package Extraction section
  • Logger namespace references updated: agentforge:core:skills:*agentforge:skills:*
  • Example app skill-aware-agent updated to depend on @agentforge/skills
  • Root README package table now includes @agentforge/skills

Release Tooling — Skills Package Support (EP-07)

  • scripts/release.sh — Added packages/skills/package.json to PACKAGE_FILES for automated version bumps
  • scripts/publish.sh — Added packages/skills to PACKAGES in correct dependency order (after core, before patterns)
  • scripts/convert-workspace-deps.mjs — Added skills to workspace package name list for workspace:* → concrete version conversion
  • RELEASE_CHECKLIST.md — Added skills to version bump, publish order (5-tier: core → skills → patterns/tools → testing (depends on core + patterns) → cli), and verify sections

Removed

@agentforge/core — Skills Extraction (Breaking Change)

  • Skills source code removed from @agentforge/core entirely — import from @agentforge/skills instead
  • gray-matter removed from core dependencies (now only in @agentforge/skills)
  • Core bundle size reduced ~16% (ESM: 171.62 KB → 143.67 KB)

Breaking Changes

  • SkillRegistry, parseSkillContent, scanSkillRoot, evaluateTrustPolicy, and all skills-related types are no longer exported from @agentforge/core
  • Consumers must install @agentforge/skills and update imports accordingly

Published

  • All packages published to npm registry at version 0.15.0:
    • @agentforge/core@0.15.0
    • @agentforge/skills@0.15.0
    • @agentforge/patterns@0.15.0
    • @agentforge/tools@0.15.0
    • @agentforge/testing@0.15.0
    • @agentforge/cli@0.15.0

[0.14.0] - 2026-02-24

Added

@agentforge/core — Agent Skills Compatibility Layer

  • SkillRegistry — Auto-discover and manage agent skills following the Agent Skills Specification:
    • Folder-config auto-discovery with YAML frontmatter parsing (via gray-matter)
    • Configurable skillRoots with multi-root support and deterministic duplicate handling
    • Query API: get(), getAll(), has(), size, getNames(), getScanErrors()
    • enabled feature flag (default off) for zero-impact opt-in
    • maxDiscoveredSkills cap for token budget control
    • Structured logging with hierarchical logger names
  • generatePrompt() — System prompt integration producing <available_skills> XML:
    • Subset filtering via skills?: string[] for focused agents
    • XML escaping and token-aware prompt composition
  • Skill Activation Tools — Two LangGraph-compatible tools for runtime skill loading:
    • activate-skill — Load full SKILL.md instructions by skill name
    • read-skill-resource — Read resource files from skill directories with path security
    • toActivationTools() convenience method returning both as a tuple
    • resolveResourcePath() with segment-based traversal detection and symlink guard (realpathSync)
    • Structured event emission (SKILL_ACTIVATED, SKILL_RESOURCE_LOADED)
  • Trust Policy Engine — Fine-grained access control for skill resources:
    • TrustLevel (workspace/trusted/untrusted) configurable per skill root
    • evaluateTrustPolicy() decision engine blocking scripts from untrusted roots by default
    • allowUntrustedScripts config override for development workflows
    • getAllowedTools() API for skill-declared tool filtering
    • TRUST_POLICY_DENIED/TRUST_POLICY_ALLOWED events for observability
    • Backward compatible — plain string roots default to untrusted
  • ToolCategory.SKILLS — New tool category enum value for skill-related tools
  • Event System — Registry events for observability, logging, and metrics:
    • skill:discovered, skill:warning, skill:activated, skill:resource-loaded
    • trust:policy-allowed, trust:policy-denied

@agentforge/core — Testing

  • 35-Test Conformance Suite — End-to-end validation covering discovery, prompt generation, tool activation, resource loading, trust policy enforcement, allowed-tools, and full pipeline
  • 180+ Skill Unit Tests — Parser (34), scanner (10), registry (27), prompt (23), activation (40), trust (41), plus conformance (35)
  • Fixture Skill Packs — Committed test fixtures for valid, malformed, and untrusted skill scenarios

Documentation Site

  • Agent Skills Guide — Developer setup guide (guide/agent-skills.md) covering SkillRegistry configuration, prompt integration, activation tools, and feature flags
  • Skill Authoring Reference — Author guide (guide/agent-skills-authoring.md) for creating SKILL.md files with frontmatter, instructions, resources, and trust levels
  • Skill-Powered Agent Tutorial — Step-by-step tutorial (tutorials/skill-powered-agent.md) building a skill-powered ReAct agent from scratch (9 steps)
  • Agent Skills Examples — 10 runnable integration patterns (examples/agent-skills.md): registry setup, prompt generation, activation tools, trust policies, event monitoring, multi-root configuration, combining skills with custom tools, and more
  • SkillRegistry API Reference — Full API documentation in api/core.md covering constructor options, query methods, event types, utility functions, and type definitions
  • VitePress Sidebar & Cross-links — Agent Skills section in Guide sidebar, tutorial and examples nav entries, cross-links between all related pages

Examples

  • skill-aware-agent — End-to-end demo application demonstrating mixed-trust skill roots with observability events

Published

  • All packages published to npm registry at version 0.14.0:
    • @agentforge/core@0.14.0
    • @agentforge/patterns@0.14.0
    • @agentforge/tools@0.14.0
    • @agentforge/testing@0.14.0
    • @agentforge/cli@0.14.0

[0.13.0] - 2026-02-23

Added

@agentforge/tools — Vendor-Agnostic Relational Database Tools

  • 6 New Database Tools — Full CRUD and schema introspection for PostgreSQL, MySQL, and SQLite:
    • relationalQuery — Execute raw SQL with parameterized binding (positional and named parameters)
    • relationalSelect — Type-safe SELECT with WHERE conditions, ORDER BY, LIMIT/OFFSET, and result streaming
    • relationalInsert — Single and batch insert with configurable returning modes (none, id, row)
    • relationalUpdate — Conditional updates with optimistic locking, WHERE requirement, and batch operations
    • relationalDelete — Safe deletion with WHERE requirement, soft-delete support, and cascade-aware errors
    • relationalGetSchema — Schema introspection with caching (tables, columns, primary keys, foreign keys, indexes)
  • ConnectionManager — Vendor-agnostic connection lifecycle management:
    • Connection pooling with configurable max connections, acquire timeout, and idle timeout
    • Automatic reconnection with exponential backoff
    • State tracking (disconnected, connecting, connected, reconnecting, error)
    • Pool metrics (totalCount, activeCount, idleCount, waitingCount) and health checks
    • Event emitters for connection state changes
    • Graceful shutdown with disconnect() and dispose()
  • Transaction Support — ACID transactions via withTransaction():
    • Configurable isolation levels (read uncommitted, read committed, repeatable read, serializable)
    • Transaction timeout with auto-rollback
    • Nested savepoints with createSavepoint(), rollbackToSavepoint(), withSavepoint()
  • Batch Operations — Efficient bulk processing for insert, update, and delete:
    • Configurable batch size (1–5000 items per chunk)
    • Continue-on-error with partial success reporting
    • Retry support with configurable delay
    • Vendor-optimized recommended batch sizes
  • Result Streaming — Memory-bounded query results for large datasets:
    • Configurable chunk size and max rows
    • Sample-based response payloads for agent consumption
    • Benchmark mode for performance profiling
  • SQL Security — 5-layer protection against injection and accidental data loss:
    • Parameterized query enforcement
    • DDL blocking (CREATE, DROP, TRUNCATE, ALTER rejected by default)
    • WHERE requirement for UPDATE and DELETE (explicit opt-in for full-table operations)
    • Identifier validation (qualified for table names, strict for column names)
    • Error message sanitization (no connection strings or internal details)
  • Schema Metadata Utilities — Schema validation and type mapping helpers
  • Peer Dependency Architecture — Database drivers (pg, mysql2, better-sqlite3) are optional peer dependencies with helpful MissingPeerDependencyError messages

@agentforge/tools — Testing

  • Comprehensive Unit Tests — 400+ unit tests covering all CRUD operations, connection management, schema introspection, SQL sanitization, batch operations, and streaming
  • SQLite Integration Tests — End-to-end CRUD and transaction tests using in-memory SQLite

Documentation Site

  • Database Tools Guide — New concept page at guide/concepts/database covering ConnectionManager setup, all 6 CRUD tools, transactions, batch operations, streaming, security, and vendor differences
  • Database Agent Tutorial — New step-by-step tutorial at tutorials/database-agent building a database-powered ReAct agent from scratch
  • API Reference — Full parameter tables and response shapes for all 6 relational tools, ConnectionManager class, and withTransaction helper added to the tools API reference page
  • 9 Advanced Integration Examples — Transactions, batch insert/update, result streaming, multi-agent shared database, error handling, connection pooling, schema introspection, and performance optimization

Published

  • All packages published to npm registry at version 0.13.0:
    • @agentforge/core@0.13.0
    • @agentforge/patterns@0.13.0
    • @agentforge/tools@0.13.0
    • @agentforge/testing@0.13.0
    • @agentforge/cli@0.13.0

[0.12.6] - 2026-02-12

Added

@agentforge/tools

  • Neo4j Integration - Complete graph database support with 7 specialized tools:
    • neo4jQuery - Execute Cypher queries with parameterized query support
    • neo4jGetSchema - Retrieve comprehensive graph schema (nodes, relationships, constraints, indexes)
    • neo4jFindNodes - Find nodes by label and property filters
    • neo4jTraverse - Graph traversal with relationship type filtering and depth control
    • neo4jVectorSearch - Vector similarity search using existing embeddings
    • neo4jVectorSearchWithEmbedding - Vector search with automatic text-to-embedding conversion
    • neo4jCreateNodeWithEmbedding - Create nodes with automatic embedding generation
  • Multi-Provider Embedding System - Provider-agnostic embedding support:
    • OpenAI (text-embedding-3-small, text-embedding-3-large, text-embedding-ada-002)
    • Cohere (embed-english-v3.0, embed-multilingual-v3.0, embed-english-light-v3.0)
    • HuggingFace (sentence-transformers/all-MiniLM-L6-v2, BAAI/bge-small-en-v1.5)
    • Voyage AI (voyage-2, voyage-code-2, voyage-large-2)
    • Ollama (nomic-embed-text, mxbai-embed-large, all-minilm)
    • Configurable via environment variables with per-call model overrides
  • Cypher Injection Protection - Backtick escaping for safe identifier handling
  • Comprehensive Documentation:
    • Complete Neo4j package documentation with setup guides and examples
    • GraphRAG tutorial covering knowledge graph construction and retrieval
    • API reference with all tool schemas and response formats
  • Integration Tests - Gated behind RUN_INTEGRATION_TESTS=true flag to prevent CI failures
  • Structured Logging - Full logging compliance using @agentforge/core logger

Fixed

@agentforge/tools

  • TypeScript Compilation Errors in Confluence Tools - Fixed ESM import paths and return type annotations:
    • Added .js extensions to relative imports (required by moduleResolution: "node16")
    • Removed explicit : Tool return type annotations to allow proper type inference
    • Fixed 8 files: auth.ts and 7 tool files (archive, create, get, get-space-pages, list-spaces, search, update)
  • TypeScript Compilation Errors in Slack Tools - Fixed return type annotations:
    • Removed explicit : Tool return type annotations to allow proper type inference
    • Fixed 4 files: get-channels, get-messages, notify, send-message

Published

  • All packages published to npm registry at version 0.12.6:
    • @agentforge/core@0.12.6
    • @agentforge/patterns@0.12.6
    • @agentforge/tools@0.12.6
    • @agentforge/testing@0.12.6
    • @agentforge/cli@0.12.6

[0.12.5] - 2026-02-11

Fixed

@agentforge/cli

  • Critical: Template validation issues across minimal, api, and cli templates 🔴 CRITICAL
    • Problem: Fresh projects created with agentforge create using v0.12.4 had multiple P1 and P2 validation failures in minimal, api, and cli templates (full template was 100% fixed)
    • Impact: Users couldn't run typecheck, build, or vitest run commands without errors in 3 out of 4 templates
    • Root Causes:
      1. P1: TypeScript type error (TS18046): result.messages typed as unknown in minimal/api/cli templates
      2. P1: API template DTS build failure (TS2742): Inferred router type not portable for declaration emit
      3. P1: Vitest run failures: vitest run exited with code 1 when no test files exist
      4. P2: Package.json metadata mismatch: main and types fields didn't match actual build output
      5. P2: Unresolved template placeholder: remained literal when description was empty
    • Solutions:
      1. Fixed result.messages typing - Added explicit type assertion in 4 files:
        • templates/minimal/src/index.ts - Added as Array<{ content: string }>
        • templates/api/src/routes/agent.ts - Added as Array<{ content: string }>
        • templates/cli/src/commands/analyze.ts - Added as Array<{ content: string }>
        • templates/cli/src/commands/chat.ts - Added as Array<{ content: string }>
      2. Fixed API template DTS build - Added explicit Router type annotations in 2 files:
        • templates/api/src/routes/agent.ts - Changed to const router: Router = Router();
        • templates/api/src/routes/health.ts - Changed to const router: Router = Router();
      3. Fixed vitest run failures - Added --passWithNoTests flag in 3 package.json files:
        • templates/minimal/package.json - Updated test scripts
        • templates/api/package.json - Updated test scripts
        • templates/cli/package.json - Updated test scripts
      4. Fixed package.json metadata - Corrected main/types fields in 2 files:
        • templates/api/package.json - Changed to main: "dist/server.js", types: "dist/server.d.ts"
        • templates/cli/package.json - Changed to main: "dist/cli.js", types: "dist/cli.d.ts"
      5. Fixed template placeholder - Fixed scaffolder variable replacement:
        • src/commands/create.ts - Changed replacement key from DESCRIPTION to PROJECT_DESCRIPTION
    • Files Fixed (9 total):
      • 4 template source files (minimal, api, cli)
      • 3 template package.json files (minimal, api, cli)
      • 2 API route files (agent.ts, health.ts)
      • 1 scaffolder file (create.ts)
    • Templates Affected: minimal, api, cli (full template was already 100% fixed in v0.12.4)
    • Verification: All 1076 tests passing, fresh scaffold validation passes all acceptance criteria:
      • pnpm typecheck - PASS for all templates
      • pnpm lint - PASS for all templates
      • pnpm test - PASS for all templates
      • pnpm build - PASS for all templates
      • ✅ No unresolved template tokens
      • main/types match emitted artifacts

Published

  • All packages published to npm registry at version 0.12.5:
    • @agentforge/core@0.12.5
    • @agentforge/patterns@0.12.5
    • @agentforge/tools@0.12.5
    • @agentforge/testing@0.12.5
    • @agentforge/cli@0.12.5

[0.12.4] - 2026-02-11

Fixed

@agentforge/cli

  • Critical: Tool metadata test failure in fresh scaffolds 🔴 CRITICAL
    • Problem: Fresh projects created with agentforge create using v0.12.3 had test failures
    • Impact: pnpm exec vitest run failed with "exampleTool.name is undefined"
    • Root Cause: Tool API changed - metadata is now under tool.metadata property, but template tests were still accessing tool.name directly
    • Solution:
      • Fixed test assertions to use tool.metadata.name instead of tool.name
      • Fixed test assertions to use tool.metadata.description instead of tool.description
      • Fixed test assertions to use tool.metadata.category instead of tool.category
    • Files Fixed (3 total):
      • templates/full/tests/example.test.ts - Updated metadata access
      • templates/tool-multi/__tests__/index.test.ts - Updated metadata access
      • src/commands/tool/create.ts - Updated test generator to use correct metadata access
    • Templates Affected: full, tool-multi, and all future tools created with agentforge tool:create
    • Verification: All 1076 tests passing, fresh scaffold tests now pass

Published

  • All packages published to npm registry at version 0.12.4:
    • @agentforge/core@0.12.4
    • @agentforge/patterns@0.12.4
    • @agentforge/tools@0.12.4
    • @agentforge/testing@0.12.4
    • @agentforge/cli@0.12.4

[0.12.3] - 2026-02-11

Fixed

@agentforge/cli

  • Critical: 4 template regressions discovered in fresh scaffold validation 🔴 CRITICAL
    • Problem: Fresh projects created with agentforge create using v0.12.2 had 4 validation failures
    • Impact: Users couldn't run typecheck, test, build, or lint commands without errors
    • Root Causes:
      1. TypeScript type error: result.messages typed as unknown in full template (index.ts line 70)
      2. Tool naming convention: Tool name was example_tool (snake_case) but validation requires kebab-case
      3. Build script failure: tsup command had no entry point configured, causing "No input files" error
      4. Lint failure: ESLint v9 installed but no eslint.config.js file existed in scaffolded projects
    • Solution:
      • Added explicit type assertion for result.messages: const messages = result.messages as Array<{ content: string }>;
      • Changed tool name from example_tool to example-tool (kebab-case) in tool definition and test
      • Created tsup.config.ts with proper entry points for all 4 templates (full, minimal, api, cli)
      • Created eslint.config.js with ESLint v9 flat config for all 4 templates
      • Added @eslint/js and typescript-eslint dependencies to all template package.json files
    • Files Fixed (15 total):
      • templates/full/src/index.ts - type assertion
      • templates/full/src/tools/example.ts - kebab-case naming
      • templates/full/tests/example.test.ts - test expectation
      • templates/full/package.json - ESLint dependencies
      • templates/full/tsup.config.ts - NEW FILE
      • templates/full/eslint.config.js - NEW FILE
      • templates/minimal/package.json - ESLint dependencies
      • templates/minimal/tsup.config.ts - NEW FILE
      • templates/minimal/eslint.config.js - NEW FILE
      • templates/api/package.json - ESLint dependencies
      • templates/api/tsup.config.ts - NEW FILE
      • templates/api/eslint.config.js - NEW FILE
      • templates/cli/package.json - ESLint dependencies
      • templates/cli/tsup.config.ts - NEW FILE
      • templates/cli/eslint.config.js - NEW FILE
    • Templates Affected: All 4 main templates (full, minimal, api, cli)
    • Verification: All templates now pass typecheck, test, build, and lint commands successfully

Published

  • All packages published to npm registry at version 0.12.3:
    • @agentforge/core@0.12.3
    • @agentforge/patterns@0.12.3
    • @agentforge/tools@0.12.3
    • @agentforge/testing@0.12.3
    • @agentforge/cli@0.12.3

[0.12.2] - 2026-02-11

Fixed

@agentforge/cli

  • Critical: TypeScript errors in all CLI templates 🔴 CRITICAL
    • Problem: All projects created with agentforge create had TypeScript compilation errors out of the box
    • Impact: Users couldn't run newly created projects without manually fixing type errors
    • Root Causes:
      1. Logger initialization bug (3 files): createLogger() expects (name: string, options?: LoggerOptions) but templates called it with just an options object { level: 'info' }
      2. Type assertion bug (5 files): result.messages array access caused "of type 'unknown'" errors due to missing type guards
      3. Tool builder API bug (3 files): Templates used createTool() with builder pattern (.name().description()...) but createTool() is a function taking 3 parameters. Builder pattern requires toolBuilder()
    • Solution:
      • Fixed logger calls: createLogger({ level: 'info' })createLogger('name')
      • Added safe array access: result.messages[i].contentconst msg = result.messages[i]; msg?.content || 'No response'
      • Fixed tool builder: createTool()toolBuilder() and category: 'utility'category: ToolCategory.UTILITY
      • Updated tool generator in commands/tool/create.ts to use correct API
      • Added TOOL_CATEGORY_ENUM placeholder replacement for multi-file tool template
    • Files Fixed (9 total):
      • templates/full/src/index.ts - logger + result.messages
      • templates/full/src/tools/example.ts - tool builder
      • templates/minimal/src/index.ts - result.messages
      • templates/api/src/server.ts - logger
      • templates/api/src/routes/agent.ts - logger + result.messages
      • templates/cli/src/commands/chat.ts - result.messages
      • templates/cli/src/commands/analyze.ts - result.messages
      • templates/tool-multi/index.ts - tool builder
      • src/commands/tool/create.ts - tool generator
    • Templates Affected: All 5 templates (full, minimal, api, cli, tool-multi)
    • Total Bugs Fixed: 12 bugs across 9 files
    • Verification: All templates now pass TypeScript validation with zero errors

Published

  • All packages published to npm registry at version 0.12.2:
    • @agentforge/core@0.12.2
    • @agentforge/patterns@0.12.2
    • @agentforge/tools@0.12.2
    • @agentforge/testing@0.12.2
    • @agentforge/cli@0.12.2

[0.12.1] - 2026-02-11

Fixed

Publishing

  • Critical: workspace: dependencies not converted to concrete versions* 🔴 CRITICAL
    • Problem: Published packages on npm contained workspace:* dependencies instead of concrete version numbers (e.g., "@agentforge/core": "workspace:*" instead of "@agentforge/core": "0.12.0")
    • Impact: Users running npx @agentforge/cli got ERR_PNPM_WORKSPACE_PKG_NOT_FOUND error when pnpm tried to install packages
    • Root Cause: pnpm publish was not automatically converting workspace protocols to concrete versions as expected
    • Solution:
      • Created scripts/convert-workspace-deps.mjs to manually convert workspace:* to concrete versions before publishing
      • Updated scripts/publish.sh to run conversion before publishing and restore workspace protocols after
      • Added .npmrc with auto-install-peers=true setting
      • Added @pnpm/exportable-manifest and @pnpm/read-project-manifest as dev dependencies
    • Reference: https://github.com/pnpm/pnpm/issues/5094
    • Verification: Published packages now have concrete versions in dependencies (e.g., "@agentforge/core": "0.12.1")

[0.12.0] - 2026-02-09

Added

@agentforge/core

  • Monitoring Module Export
    • Problem: Monitoring utilities (health checks, profiling, alerting, audit logging) were implemented and documented but not exported from package root
    • Impact: Users couldn't access production-ready monitoring features despite documentation showing import { ... } from '@agentforge/core'
    • Solution: Added export * from './monitoring/index.js' to packages/core/src/index.ts
    • New Public Exports:
      • createHealthChecker() - Health check system with liveness/readiness probes
      • createProfiler() - Performance profiling with execution time and memory tracking
      • createAlertManager() - Alert rules and multi-channel notifications
      • createAuditLogger() - Compliance and security audit logging
    • Benefits:
      • Monitoring features now accessible to all consumers
      • Aligns with package description and documentation
      • Consistent with other module exports (resources, streaming, etc.)

Changed

@agentforge/core

  • BREAKING: Renamed HealthCheckResult to ToolHealthCheckResult
    • Problem: Type name conflict between tools/lifecycle.ts and monitoring/health.ts when both exported from package root
    • Solution: Renamed the tools lifecycle type from HealthCheckResult to ToolHealthCheckResult
    • Migration: If you were using HealthCheckResult from the tools lifecycle module, update imports to ToolHealthCheckResult
    • Impact: Minimal - the tools lifecycle health check is a niche feature; most users will use the monitoring module's HealthCheckResult

[0.11.8] - 2026-02-07

Added

@agentforge/core

  • Shared Prompt Loader [REFACTOR]
    • Problem: Each vertical agent example had its own copy of prompt-loader.ts, leading to code duplication and maintenance drift (4 identical copies)
    • Solution: Consolidated into a single shared implementation in @agentforge/core
    • New Exports:
      • loadPrompt(promptName, options, promptsDir?) - Load and render prompt templates from .md files
      • renderTemplate(template, options) - Render template strings with variable substitution
      • sanitizeValue(value) - Sanitize values to prevent prompt injection
      • RenderTemplateOptions - TypeScript interface for security controls
    • Location: packages/core/src/prompt-loader/index.ts
    • Tests: packages/core/tests/prompt-loader/index.test.ts
    • Migration: All vertical agents and CLI template now import from @agentforge/core
    • Benefits:
      • Single source of truth for prompt loading logic
      • Consistent security fixes across all agents
      • Easier to maintain and update
      • Available to all AgentForge users

Fixed

@agentforge/core - Prompt Loader

  • Critical Bugs in Prompt Injection Protection [P2] 🔴 HIGH
    • Bug 1: Header stripping ineffective after newline removal
      • Problem: sanitizeValue() removed newlines BEFORE stripping headers, so payloads like "Acme\n\n# New System Prompt" became "Acme # New System Prompt" and the header regex (/^#+\s*/gm) no longer matched
      • Impact: Markdown header injection protection was completely bypassed
      • Solution: Swapped order - strip headers FIRST, then remove newlines
    • Bug 2: Sanitization opt-in not used at call sites
      • Problem: All loadPrompt() call sites used plain objects (treated as trusted), so user-controlled variables bypassed sanitization entirely
      • Impact: The prompt injection protection was effectively unused
      • Solution: Updated all call sites to explicitly use untrustedVariables for user-controlled data
    • Bug 3: Untrusted variables stringified before conditionals, making false/0 truthy
      • Problem: renderTemplate() sanitized untrusted values into strings and then used the merged variables for {{#if ...}} conditionals. This made false'false' (truthy) and 0'0' (truthy)
      • Impact: Untrusted boolean/numeric variables didn't work correctly in conditionals
      • Solution: Evaluate conditionals against RAW values, only use sanitized values for substitution
    • Bug 4: CLI template bypassed sanitization and used wrong promptsDir
      • Problem 1: Reusable-agent template passed plain object to loadPrompt, so user-supplied values weren't sanitized
      • Problem 2: Template didn't pass promptsDir, so published packages would look for ./prompts in consumer's cwd
      • Impact: Generated agents had prompt injection vulnerability and wouldn't work when published
      • Solution: Updated template to use trustedVariables/untrustedVariables and pass promptsDir derived from import.meta.url
    • Files Fixed:
      • packages/core/src/prompt-loader/index.ts - Fixed sanitizeValue order, conditional evaluation, and added tests
      • packages/core/tests/prompt-loader/index.test.ts - Added tests for false/0 in conditionals
      • examples/vertical-agents/customer-support/src/index.ts - Updated to use untrustedVariables
      • examples/vertical-agents/code-review/src/index.ts - Updated to use untrustedVariables
      • examples/vertical-agents/data-analyst/src/index.ts - Updated to use untrustedVariables
      • packages/cli/templates/reusable-agent/index.ts - Updated to use untrustedVariables and promptsDir

@agentforge/cli

  • [P1] Reusable Agent Creation Failure 🔴 CRITICAL
    • Problem: agent:create-reusable command tried to move prompt-loader.ts file that no longer exists in template (removed during consolidation)
    • Impact: CLI command would throw fs.move error and fail after template copy
    • Solution: Removed prompt-loader.ts move operation from file organization step
    • Files Fixed:
      • packages/cli/src/commands/agent/create-reusable.ts - Removed obsolete file move
      • packages/cli/tests/commands/agent/create-reusable.test.ts - Updated test expectations

Documentation

  • Outdated Prompt Loader References [P2]

    • Problem: Documentation and example READMEs still referenced deleted local prompt-loader.ts files after consolidation into @agentforge/core
    • Impact: Users following documentation would get import errors and outdated security patterns
    • Solution: Updated all documentation to use shared loadPrompt from @agentforge/core with proper security API
    • Files Updated:
      • docs-site/guide/advanced/vertical-agents.md - Updated to use @agentforge/core import and security-aware API
      • examples/vertical-agents/customer-support/README.md - Updated import and added promptsDir resolution
      • examples/vertical-agents/code-review/README.md - Updated import and added promptsDir resolution
      • examples/vertical-agents/data-analyst/README.md - Updated import and added promptsDir resolution
  • Outdated File Tree Documentation [P2]

    • Problem: CLI README and vertical agents guide still listed src/prompt-loader.ts in file trees and key files sections
    • Impact: Documentation showed files that are no longer created/present
    • Solution: Removed prompt-loader.ts references and updated to reflect shared @agentforge/core loader
    • Files Updated:
      • packages/cli/README.md - Updated scaffolded file tree, added note about shared loader
      • docs-site/guide/advanced/vertical-agents.md - Updated key files sections for all 3 example agents

Example Agents

  • [P2] Missing promptsDir in Example Agents
    • Problem: All 3 example agents called loadPrompt without promptsDir parameter, falling back to process.cwd()
    • Impact: When consumed as published packages, prompts wouldn't resolve (would look in consumer's cwd instead of package directory)
    • Solution: Added promptsDir resolution using import.meta.url pattern to all example agents
    • Files Fixed:
      • examples/vertical-agents/customer-support/src/index.ts - Added promptsDir using join(__dirname, '../prompts')
      • examples/vertical-agents/code-review/src/index.ts - Added promptsDir using join(__dirname, '../prompts')
      • examples/vertical-agents/data-analyst/src/index.ts - Added promptsDir using join(__dirname, '../prompts')
    • Result: Example agents now work correctly when consumed as library dependencies
    • Note: Initial implementation used '../../prompts' (wrong), corrected to '../prompts' to properly resolve from src/ to sibling prompts/ directory

Published

  • All packages published to npm registry at version 0.11.8:
    • @agentforge/core@0.11.8
    • @agentforge/patterns@0.11.8
    • @agentforge/tools@0.11.8
    • @agentforge/testing@0.11.8
    • @agentforge/cli@0.11.8

[0.11.7] - 2026-02-07

Fixed

Vertical Agents - Prompt Injection Vulnerability [SECURITY] 🔴 HIGH

  • Vulnerability: Prompt loaders were vulnerable to prompt injection attacks when user-controlled data was passed as template variables
    • Attack Vector: Malicious users could inject instructions through variables like companyName: 'Acme\n\nIGNORE PREVIOUS INSTRUCTIONS'
    • Impact: Attackers could override agent behavior, potentially leading to data leaks or policy violations
  • Solution: Added comprehensive prompt injection protection with trusted/untrusted variable distinction
    • Security Model:
      • trustedVariables: From config files/hardcoded values (NOT sanitized)
      • untrustedVariables: From user input/API calls/databases (WILL be sanitized)
    • Protection Mechanisms:
      • sanitizeValue() function prevents:
        • Newline injection (prevents multi-line instruction injection)
        • Markdown header injection (prevents structure hijacking)
        • Excessive length (prevents prompt bloat, max 500 chars)
    • New Interface: RenderTemplateOptions for explicit security control
    • Backwards Compatible: ✅ Existing code using plain objects continues to work (treated as trusted)
    • Files Updated:
      • examples/vertical-agents/customer-support/src/prompt-loader.ts
      • examples/vertical-agents/code-review/src/prompt-loader.ts
      • examples/vertical-agents/data-analyst/src/prompt-loader.ts
      • packages/cli/templates/reusable-agent/prompt-loader.ts
    • Tests Added: examples/vertical-agents/customer-support/src/prompt-loader.test.ts
    • Migration Guide:
      typescript
      // ✅ No changes needed - backwards compatible
      loadPrompt('system', { companyName: 'Acme' });
      
      // ✅ Recommended: Explicitly mark untrusted variables
      loadPrompt('system', {
        trustedVariables: { companyName: 'Acme Corp' },
        untrustedVariables: { userName: req.body.name }
      });

@agentforge/core

  • Middleware Helpers Not Exported from Package Root [P2]
    • Problem: Middleware helpers (withLogging, withCache, withRateLimit, withValidation, withConcurrency) and their factory functions (createSharedCache, createSharedRateLimiter, createSharedConcurrencyController) were defined in langgraph/middleware/index.ts but not re-exported from langgraph/index.ts, making them unavailable when importing from @agentforge/core
    • Impact: Users following documentation examples would get import errors when trying to use middleware helpers
    • Solution: Added re-exports for all middleware helpers and their associated types to packages/core/src/langgraph/index.ts
    • Location: packages/core/src/langgraph/index.ts lines 118-138

Documentation

  • Invalid Imports in Advanced Patterns Tutorial [P2]
    • Problem: Tutorial showed imports of createReasoningNode and createActionNode from @agentforge/patterns, but these are internal implementation details not exported from the package
    • Impact: Users copying the example code would get import errors
    • Solution: Removed incorrect imports and improved the custom workflow example with proper model initialization and helper functions
    • Location: docs-site/tutorials/advanced-patterns.md lines 241-295

Published

  • All packages published to npm registry at version 0.11.7:
    • @agentforge/core@0.11.7
    • @agentforge/patterns@0.11.7
    • @agentforge/tools@0.11.7
    • @agentforge/testing@0.11.7
    • @agentforge/cli@0.11.7

[0.11.6] - 2026-02-05

Fixed

@agentforge/cli

  • Tool Publish Command Skips Missing Scripts [P2]

    • Problem: The tool:publish command attempted to run test and build scripts even when they didn't exist in package.json, causing failures in projects without those scripts
    • Impact: Publishing simple tool packages without test or build scripts would fail with script execution errors
    • Solution: Modified resolveToolPath() to return ToolPathInfo interface with script availability flags; conditionally run test/build only if scripts exist; show clear skip messages
    • Location: packages/cli/src/commands/tool/publish.ts lines 29-60, 115-119, 183-237
  • Scoped Package Names Misinterpreted as Paths [P2]

    • Problem: Scoped package names like @agentforge/myTool were incorrectly treated as file paths due to the / character check
    • Impact: Publishing scoped packages would fail with "directory not found" errors
    • Solution: Added regex check /^@[^/]+\/[^/]+$/ to distinguish scoped packages from actual file paths
    • Location: packages/cli/src/commands/tool/publish.ts lines 131-139
  • Scoped Package Common Location Resolution [P2]

    • Problem: When running tool:publish @scope/name from repo root, only looked for packages/@scope/name but most repos store scoped packages in unscoped folders like packages/name
    • Impact: Publishing scoped packages from repo root would fail unless user was in the tool directory
    • Solution: Extract unscoped name from scoped packages and try both scoped and unscoped paths in common locations; prefer scoped folder if both exist
    • Location: packages/cli/src/commands/tool/publish.ts lines 150-168

Tests

@agentforge/cli

  • Added 6 comprehensive tests for tool:publish command:
    • Skip build when no build script exists
    • Skip test when no test script exists
    • Skip both test and build when neither script exists
    • Handle scoped package names correctly (not treat as paths)
    • Resolve scoped package from unscoped folder in packages/
    • Resolve scoped package from unscoped folder in tools/
    • Prefer scoped folder if it exists over unscoped

Published

  • All packages published to npm registry at version 0.11.6:
    • @agentforge/core@0.11.6
    • @agentforge/patterns@0.11.6
    • @agentforge/tools@0.11.6
    • @agentforge/testing@0.11.6
    • @agentforge/cli@0.11.6

[0.11.5] - 2026-02-04

Fixed

@agentforge/core

  • Tool Executor Priority Metrics Exclude Failures [P3]
    • Problem: The byPriority metrics in executor.ts only tracked successful executions, skewing monitoring and observability stats
    • Impact: Failed tool executions were not counted in priority metrics, making it impossible to accurately monitor tool execution patterns
    • Solution: Added metrics.byPriority[priority]++ to the error handling block so both successful and failed executions are tracked
    • Location: packages/core/src/tools/executor.ts line 211

@agentforge/patterns

  • Tool Call Deduplication Cache Key Nested Object Handling [P3]
    • Problem: The generateToolCallCacheKey function only normalized top-level argument keys, which could cause collisions or failed deduplication when nested objects had keys in different orders
    • Impact: Tool calls with identical nested arguments but different key orders could be treated as different calls, bypassing deduplication
    • Solution: Implemented recursive normalizeObject() function that properly sorts keys at all nesting levels, ensuring consistent cache keys
    • Location: packages/patterns/src/shared/deduplication.ts line 11-40

Tests

@agentforge/core

  • Added 4 comprehensive tests for tool executor metrics tracking:
    • Test for tracking successful executions by priority
    • Test for tracking failed executions by priority
    • Test for tracking mixed successful and failed executions by priority
    • Test for metrics reset functionality

@agentforge/patterns

  • Created new test suite packages/patterns/tests/shared/deduplication.test.ts with 12 tests:
    • Top-level key order consistency
    • Nested object key order consistency
    • Deeply nested objects (3+ levels)
    • Arrays within objects
    • Null/undefined handling
    • Complex nested structures with arrays and objects

Published

  • All packages published to npm registry at version 0.11.5:
    • @agentforge/core@0.11.5
    • @agentforge/patterns@0.11.5
    • @agentforge/tools@0.11.5
    • @agentforge/testing@0.11.5
    • @agentforge/cli@0.11.5

[0.11.4] - 2026-02-04

Fixed

@agentforge/core

  • Tool Registry Desync Prevention [P2]

    • Problem: The update() method allowed renaming tools by accepting a tool with a different metadata.name than the registry key, causing Map key to desync from tool metadata
    • Impact: This broke lookups, prompts, and other methods that rely on metadata.name
    • Solution: Added validation in update() to prevent renaming - throws error if tool.metadata.name doesn't match registry key
    • Guidance: Clear error message guides users to use remove() + register() for renaming
    • Location: packages/core/src/tools/registry.ts line 202
  • State Defaults for Non-Reducer Channels [P2]

    • Problem: Defaults declared in state configs were silently ignored for non-reducer channels, leaving fields like status, shouldContinue, maxIterations, and input undefined
    • Root Cause: LangGraph's Annotation() API doesn't support defaults for LastValue channels - only for channels with reducers
    • Impact: Affected all patterns (ReAct, Plan-Execute, Reflection, Multi-Agent) where state fields with defaults weren't being initialized
    • Solution: For non-reducer channels with defaults, use a "last value wins" reducer (_left, right) => right to enable default support while maintaining correct semantics
    • Location: packages/core/src/langgraph/state.ts line 76
    • Note: If a node explicitly returns { key: undefined }, it will override the default (expected behavior - nodes should omit keys instead)

@agentforge/cli

  • Agent Deploy Command False Success [P2]

    • Problem: agent:deploy command used setTimeout to fake deployment and reported success without actually deploying
    • Impact: Incorrect behavior for a release tool - users thought agents were deployed when they weren't
    • Solution: Replaced placeholder with proper error message and comprehensive deployment instructions for 4 methods (Docker, Kubernetes, Serverless, Manual)
    • Location: packages/cli/src/commands/agent/deploy.ts line 26
  • Tool Publish Command False Success [P2]

    • Problem: tool:publish command used setTimeout to fake npm publishing and reported success without actually publishing
    • Impact: Critical issue for release tool - packages weren't being published to npm
    • Solution: Implemented actual npm publishing using execa to run npm publish
    • Added: New publishPackage() utility function in packages/cli/src/utils/package-manager.ts
    • Features: Comprehensive error handling for authentication (E401/ENEEDAUTH), permissions (E403), and version conflicts (E409/EPUBLISHCONFLICT)
    • Location: packages/cli/src/commands/tool/publish.ts line 51

Tests

@agentforge/core

  • Added test for tool registry desync prevention
  • Added 7 comprehensive tests for state defaults fix:
    • Regression test verifying defaults work without validateState()
    • Test showing validateState() still works correctly
    • Test ensuring "last value wins" semantics (no accumulation)
    • Test for backward compatibility (non-reducer channels without defaults)
    • Test documenting residual risk (explicit undefined overrides default)
    • Test showing best practice (nodes should omit keys, not write undefined)
    • Edge case coverage

@agentforge/cli

  • Updated 3 agent:deploy tests to verify error message and deployment instructions
  • Updated to 9 tool:publish tests total:
    • Successful publishing
    • Custom tag support
    • Dry-run mode
    • Test failure handling
    • Build failure handling
    • npm publish failure handling
    • Authentication error handling
    • Version conflict handling
    • General error handling
  • Added 5 new tests for publishPackage() utility function

Published

  • All packages published to npm registry at version 0.11.4:
    • @agentforge/core@0.11.4
    • @agentforge/patterns@0.11.4
    • @agentforge/tools@0.11.4
    • @agentforge/testing@0.11.4
    • @agentforge/cli@0.11.4

[0.11.3] - 2026-02-04

Fixed

@agentforge/patterns

  • CRITICAL HOTFIX: Multi-Agent Workload Tracking Completion [Multiple P1/P2 Fixes]
    • Context: Version 0.11.2 fixed workload increment/decrement basics but had critical remaining bugs
    • Fix 1 [P1]: Workload now decrements on both completion AND failure
      • Problem: Workload was incremented on assignment but never decremented, causing load-balanced routing to become increasingly inaccurate over time
      • Root Cause: The executeWithLLM() helper function returned its own object that bypassed the workload decrement code. Additionally, the error handler didn't decrement workload on failure
      • Solution: Moved helper function, ensured workload decrement happens AFTER all execution paths complete, added workload decrement to error handler (catch block)
      • Impact: Workload now correctly decrements on both success and failure paths
    • Fix 2 [P2]: Missing worker IDs now fail fast with clear error messages
      • Problem: If a worker ID was routed but missing in state.workers, workload was silently not updated, creating inconsistent state and hiding configuration errors
      • Root Cause: Supervisor checked if (worker) and silently continued if worker was undefined
      • Solution: Changed to if (!worker) with error logging and exception throwing, listing available workers for debugging
      • Impact: Configuration errors are caught immediately instead of silently ignored
    • Fix 3: Custom worker updates preserved when decrementing workload
      • Problem: The workload decrement logic was overwriting worker updates returned by custom executeFn or ReAct agents
      • Root Cause: Code did workers: updatedWorkers which overwrites executionResult.workers
      • Solution: Merge executionResult.workers with workload decrement instead of overwriting
      • Impact: Custom execution paths can safely modify worker state (add skills, change availability, update other workers) without being overwritten
    • Fix 4 [P2]: Partial executionResult.workers no longer drops other workers
      • Problem: When executeFn returned only a subset of workers (e.g., just worker1), all other workers (worker2, worker3, etc.) were dropped from state
      • Root Cause: Merge logic started with executionResult.workers instead of state.workers, losing all workers not in the partial update
      • Solution: Always start with state.workers and merge in updates from executionResult.workers
      • Impact: All workers are preserved in state even when custom execution paths return partial worker updates

Added

@agentforge/patterns

  • Workload Management Contract Documentation
    • Added comprehensive JSDoc on createWorkerNode() explaining that framework owns currentWorkload tracking
    • Added inline comments at workload decrement location documenting the contract
    • Added code examples showing correct and incorrect usage
    • Contract: Custom executeFn should NOT modify currentWorkload (framework owns it), but CAN modify other worker properties (skills, availability, etc.)
    • Rationale: Workload is infrastructure concern (like React owning component lifecycle), simpler mental model, prevents bugs, consistent behavior

Tests

@agentforge/patterns

  • Added comprehensive workload tracking tests (6 new tests):
    • Workload decrements on task failure/error
    • Error when worker ID missing from state.workers
    • Load-balanced routing changes after workload updates
    • Custom executeFn worker updates preserved while decrementing workload
    • Framework decrements workload even if executeFn modifies it (documents contract)
    • Partial executionResult.workers doesn't drop other workers from state
  • All 28 multi-agent node tests passing
  • Total: 1011 tests passing across all packages

Published

  • All packages published to npm registry at version 0.11.3:
    • @agentforge/core@0.11.3
    • @agentforge/patterns@0.11.3
    • @agentforge/tools@0.11.3
    • @agentforge/testing@0.11.3
    • @agentforge/cli@0.11.3

[0.11.2] - 2026-02-04

Fixed

@agentforge/patterns

  • CRITICAL: Multi-Agent Workload Tracking [P1 Priority]
    • Fixed broken workload tracking that prevented load-balanced routing from reflecting in-flight work
    • Problem 1: Workload never incremented on task assignment (supervisor node)
      • When supervisor assigned tasks to workers, it created TaskAssignment objects but never incremented the currentWorkload counter in state
      • Workers always appeared to have their initial workload (typically 0)
    • Problem 2: Workload decrement used static config instead of state (worker node)
      • When tasks completed, worker node decremented workload using capabilities.currentWorkload from the static config parameter
      • Should have read from state.workers[id].currentWorkload instead
      • This meant decrements were based on stale data, not current state
    • Problem 3: Workload decrement only happened in LLM execution path
      • Custom executeFn and ReAct agents returned directly without updating workload
      • Only the default LLM execution path handled workload decrement
      • This caused inconsistent workload tracking depending on execution method
    • Solution:
      • Supervisor node now increments workload for all assigned workers in state
      • Worker node now reads current workload from state, not config
      • Workload decrement now happens for ALL execution paths (custom executeFn, ReAct agents, and LLM execution)
    • Impact:
      • Load-balanced routing now correctly reflects in-flight work
      • Workers with higher workload are deprioritized appropriately
      • Workload tracking is consistent across all execution methods
      • Fixes routing strategy that depends on accurate currentWorkload values

Published

  • All packages published to npm registry at version 0.11.2:
    • @agentforge/core@0.11.2
    • @agentforge/patterns@0.11.2
    • @agentforge/tools@0.11.2
    • @agentforge/testing@0.11.2
    • @agentforge/cli@0.11.2

[0.11.1] - 2026-02-04

Fixed

@agentforge/core

  • Executor Contract Enforcement: Tool executor now properly enforces the invoke() requirement to match the TypeScript type contract introduced in v0.11.0
    • Removed fallback to execute() method for tools that don't implement invoke()
    • Improved error message to guide developers: "Tool must implement invoke() method. Tools created with createTool() or toolBuilder automatically have this method. If you are manually constructing a tool, ensure it has an invoke() method."
    • Added deprecation warning for tools that only implement execute() (backward compatibility during migration period)
  • Consistent Logging: Replaced console.warn with structured logger in tool executor for consistent logging across the codebase
    • Deprecation warnings now appear in structured log format with timestamps and context
    • Logger instance: agentforge:tools:executor

Technical Details

  • All 997 tests passing ✅
  • No breaking changes - backward compatible
  • Tools created with createTool() or toolBuilder are unaffected
  • Only affects manually constructed tools that violate the type contract

[0.11.0] - 2026-02-04

Changed

@agentforge/core, @agentforge/patterns, @agentforge/tools

  • LangChain Compatibility: invoke() is now the primary method [Deprecation]

    • What Changed: invoke() is now the primary method for tool execution, with execute() deprecated as an alias
    • Migration: Replace all .execute( calls with .invoke( in your code
    • Timeline: execute() will be removed in v1.0.0 (breaking change)
    • Backward Compatibility: Both methods work identically in v0.11.0 - no immediate action required
    • Why: Aligns AgentForge with LangChain industry standards for better ecosystem compatibility

    Implementation Details:

    • Core tool interface now defines invoke() as primary, execute() as deprecated alias
    • All tool helpers (createTool(), toolBuilder()) create tools with both methods
    • Tool executor prefers invoke() when available, falls back to execute()
    • Updated 12 test files (core, patterns, tools) - 97 occurrences
    • Updated 9 example files - 29 occurrences
    • Updated 15 documentation files - 112+ occurrences
    • All 997 tests passing ✅
    • Build successful ✅

    Files Modified:

    • packages/core/src/tools/types.ts - Updated Tool interface with deprecation
    • packages/core/src/tools/helpers.ts - Reversed alias direction
    • packages/core/src/tools/builder.ts - Updated ToolBuilder
    • packages/core/src/langchain/converter.ts - Uses invoke()
    • packages/patterns/src/react/nodes.ts - Uses invoke()
    • packages/patterns/src/plan-execute/nodes.ts - Uses invoke()
    • Plus 12 test files, 9 example files, and 15 documentation files

    Migration Example:

    typescript
    // Before (v0.10.x)
    const result = await tool.execute({ input: "test" });
    
    // After (v0.11.0+)
    const result = await tool.invoke({ input: "test" });

Published

  • All packages published to npm registry at version 0.11.0:
    • @agentforge/core@0.11.0
    • @agentforge/patterns@0.11.0
    • @agentforge/tools@0.11.0
    • @agentforge/testing@0.11.0
    • @agentforge/cli@0.11.0

[0.10.7] - 2026-02-04

Fixed

@agentforge/patterns

  • fix: Multi-agent iteration counter exponential growth [P1 Bug]
    • Fixed iteration counter causing exponential growth (0→1→3→7→15) instead of linear increment (0→1→2→3→4)
    • Problem: Supervisor node in packages/patterns/src/multi-agent/nodes.ts was returning iteration: state.iteration + 1 on line 186. Since the iterationField uses an additive reducer (left, right) => left + right, this caused the iteration count to double each cycle instead of incrementing by 1. This caused agents to hit maxIterations much earlier than intended (e.g., after 3-4 cycles instead of 10).
    • Solution:
      • Changed iteration: state.iteration + 1 to iteration: 1 in supervisor node (line 186)
      • With additive reducer, returning 1 means "add 1 to current iteration"
      • Added clarifying comment explaining the additive reducer behavior
    • Impact:
      • Multi-agent workflows now correctly track iteration count
      • Agents can run for the full intended number of iterations
      • Prevents premature termination due to incorrect iteration counting
    • Tests: Added comprehensive test in packages/patterns/tests/multi-agent/nodes.test.ts verifying linear increment (0→1→2→3→4) with detailed comments explaining how the additive reducer works
    • Breaking Change: None - backward compatible bug fix

@agentforge/core

  • fix: Tool executor invoke/execute compatibility [P2 Bug]
    • Fixed runtime error for tools that only implement execute() method
    • Problem: The executor in packages/core/src/tools/executor.ts (lines 108-121) was always calling tool.invoke(), but according to the Tool interface, execute is required and invoke is optional (LangChain-compatible alias). This would cause runtime errors for:
      • External tools (e.g., LangChain tools) that only implement invoke
      • Manually created tool objects that only implement execute
    • Solution:
      • Updated executeWithRetry function to check for invoke first (LangChain compatibility), fall back to execute (required method)
      • Throws clear error if neither method exists
      • Uses .call(tool, input) to preserve correct this context
    • Impact:
      • Better compatibility with external tools and LangChain ecosystem
      • Prevents cryptic "invoke is not a function" errors
      • All AgentForge tools (created via createTool() or toolBuilder()) continue to work as they have both methods
    • Tests: Added 8 comprehensive tests in packages/core/tests/tools/executor.test.ts:
      • Tool with only execute() method (should work)
      • Tool with only invoke() method (should work for LangChain compatibility)
      • Tool with both methods (should prefer invoke)
      • Tool with neither method (should throw clear error)
      • Preserve this context when calling execute
      • Preserve this context when calling invoke
      • Retry logic with execute method
      • Retry logic with invoke method
    • Breaking Change: None - backward compatible bug fix

Published

  • All packages published to npm registry at version 0.10.7:
    • @agentforge/core@0.10.7
    • @agentforge/patterns@0.10.7
    • @agentforge/tools@0.10.7
    • @agentforge/testing@0.10.7
    • @agentforge/cli@0.10.7

[0.10.6] - 2026-02-04

Fixed

@agentforge/patterns

  • fix: Tool-result messages now properly handled as ToolMessage instead of HumanMessage [P2 Bug]

    • Fixed tool-result messages being treated as HumanMessage instead of ToolMessage in ReAct pattern
    • Problem: Observation nodes emitted messages with role: 'tool' but were missing tool_call_id, and the reasoning node didn't handle role: 'tool' case, causing tool outputs to fall back to HumanMessage. This mislabeled tool outputs and could degrade model behavior.
    • Solution:
      • Added tool_call_id field to observation messages (line 336 in packages/patterns/src/react/nodes.ts)
      • Added explicit handling for role: 'tool' messages to create proper ToolMessage instances (lines 63-70)
      • Added tool_call_id?: string to MessageSchema to preserve the field during state validation (line 28 in packages/patterns/src/react/schemas.ts)
    • Impact:
      • Tool outputs are now properly labeled for LLMs, improving model behavior and tool-calling accuracy
      • Message flow correctly preserves the relationship between tool calls and their results via tool_call_id
      • Aligns with LangChain's expected message format for tool interactions
    • Tests: Added comprehensive test coverage for tool message handling and schema validation
    • Breaking Change: None - backward compatible bug fix
  • fix: returnIntermediateSteps configuration now properly used [P3 Bug]

    • Fixed returnIntermediateSteps configuration parameter being accepted but never used
    • Problem: The scratchpad was always populated with intermediate steps regardless of the returnIntermediateSteps setting, wasting memory and tokens when not needed.
    • Solution:
      • Updated createObservationNode to accept returnIntermediateSteps parameter (line 299-308 in packages/patterns/src/react/nodes.ts)
      • Conditionally populate scratchpad only when returnIntermediateSteps: true (lines 340-354)
      • Passed flag from agent config to observation node (line 137 in packages/patterns/src/react/agent.ts)
    • Impact:
      • When returnIntermediateSteps: false (default): Scratchpad is not populated, saving memory and tokens
      • When returnIntermediateSteps: true: Scratchpad is populated with intermediate reasoning steps for debugging and observability
    • Tests: Added tests to verify both scenarios (scratchpad populated when true, empty when false)
    • Breaking Change: None - backward compatible bug fix
  • chore: Updated confusing iteration counter comment for clarity

    • Updated comment on line 110 of packages/patterns/src/react/nodes.ts to clarify that the value 1 is being added to the iteration counter using an additive reducer, not setting it to 1
    • Prevents confusion about how the iteration counter works

Published

  • All packages published to npm registry at version 0.10.6:
    • @agentforge/core@0.10.6
    • @agentforge/patterns@0.10.6
    • @agentforge/tools@0.10.6
    • @agentforge/testing@0.10.6
    • @agentforge/cli@0.10.6

[0.10.5] - 2026-02-04

Fixed

@agentforge/patterns

  • fix: Wrap stream() method in registerWorkers to inject worker registry [P2 Bug]
    • Fixed stream method wrapping in standalone registerWorkers() function
    • Problem: registerWorkers() only wrapped the invoke() method to inject worker registry, but did NOT wrap the stream() method. This meant streaming callers wouldn't see registered workers.
    • Solution:
      • Added _originalStream property to MultiAgentSystemWithRegistry interface (line 416)
      • Wrapped stream() method in registerWorkers() function (lines 494-510) following the same pattern as invoke()
      • Ensures registered workers are merged into state for both invoke() and stream() calls
    • Impact:
      • Streaming callers now see registered workers (same as invoke callers)
      • Consistent behavior between createMultiAgentSystem() and registerWorkers()
      • Worker capabilities are properly injected into the initial state regardless of which method is used
    • Location: packages/patterns/src/multi-agent/agent.ts (lines 416, 494-510)
    • Added comprehensive test coverage:
      • 2 new tests for stream method wrapping
      • Tests verify that stream() wrapper correctly merges registered workers into input
      • Tests verify correct tool name extraction from AgentForge Tools when using stream()
      • Tests use spy/mock pattern to verify wrapper logic directly
    • Breaking Change: None - backward compatible enhancement

Published

  • All packages published to npm registry at version 0.10.5:
    • @agentforge/core@0.10.5
    • @agentforge/patterns@0.10.5
    • @agentforge/tools@0.10.5
    • @agentforge/testing@0.10.5
    • @agentforge/cli@0.10.5

[0.10.4] - 2026-02-04

Fixed

@agentforge/patterns

  • fix: Correct tool name extraction for AgentForge Tools in Multi-Agent system [P2 Bug]
    • Fixed tool name extraction in MultiAgentSystemBuilder.registerWorkers() (line 371)
    • Fixed tool name extraction in standalone registerWorkers() function (line 469)
    • Problem: Worker tool names were recorded as 'unknown' when using AgentForge Tools because the code read t.name instead of t.metadata.name
    • Solution: Added getToolName() helper function that correctly handles both AgentForge Tools (tool.metadata.name) and LangChain tools (tool.name)
    • Impact:
      • Worker tool names are now correctly recorded in routing/tool prompts
      • Runtime worker capabilities show the correct tool names
      • The supervisor can make better routing decisions based on accurate tool information
    • Location: packages/patterns/src/multi-agent/agent.ts (lines 22-44, 371, 469)
    • Added comprehensive test coverage:
      • 5 new tests for tool name extraction with both AgentForge Tools and LangChain tools
      • Tests verify correct extraction from AgentForge Tools (using metadata.name)
      • Tests verify correct extraction from LangChain tools (using name)
      • Tests verify handling of mixed tool types
      • Tests verify graceful fallback to 'unknown' for tools without name
      • Updated MultiAgentSystemBuilder test to properly assert tool name extraction
    • Breaking Change: None - backward compatible with both tool types

Published

  • All packages published to npm registry at version 0.10.4:
    • @agentforge/core@0.10.4
    • @agentforge/patterns@0.10.4
    • @agentforge/tools@0.10.4
    • @agentforge/testing@0.10.4
    • @agentforge/cli@0.10.4

[0.10.3] - 2026-02-04

Fixed

@agentforge/patterns

  • fix: Correct task routing in wrapReActAgent for parallel execution [P1 Critical Bug]
    • Fixed critical bug where wrapReActAgent() used the most recent message from shared state instead of the worker's specific assignment
    • Problem: In parallel or multi-step multi-agent execution, workers could receive the wrong task (another worker's task from the most recent message)
    • Solution: Changed task extraction to use currentAssignment.task directly instead of state.messages[state.messages.length - 1]?.content
    • Impact: Ensures correct task routing in parallel and multi-step scenarios
    • Location: packages/patterns/src/multi-agent/utils.ts (lines 78-103)
    • Added comprehensive test coverage:
      • New test file: packages/patterns/tests/multi-agent/utils.test.ts
      • 3 new tests specifically for parallel execution scenarios
      • Tests verify correct task routing with multiple parallel assignments
      • Tests verify graceful handling of missing/completed assignments
    • Breaking Change: None - function signature and return type unchanged

Published

  • All packages published to npm registry at version 0.10.3:
    • @agentforge/core@0.10.3
    • @agentforge/patterns@0.10.3
    • @agentforge/tools@0.10.3
    • @agentforge/testing@0.10.3
    • @agentforge/cli@0.10.3

[0.10.2] - 2026-02-04

Fixed

@agentforge/core

  • fix: Move LangChain dependencies from peerDependencies to dependencies
    • Moved @langchain/core and @langchain/langgraph from peerDependencies to dependencies
    • Moved zod from peerDependencies to dependencies
    • Impact: Users no longer need to manually install LangChain dependencies
    • Benefit: Smoother installation experience - npm install @agentforge/core now automatically installs all required dependencies
    • Breaking Change: None - this is purely a packaging improvement

@agentforge/patterns

  • fix: Remove redundant peerDependencies
    • Removed duplicate peerDependencies section (dependencies were already correctly listed in dependencies)
    • Impact: Cleaner package.json, no functional changes

Published

  • All packages published to npm registry at version 0.10.2:
    • @agentforge/core@0.10.2
    • @agentforge/patterns@0.10.2
    • @agentforge/tools@0.10.2
    • @agentforge/testing@0.10.2
    • @agentforge/cli@0.10.2

[0.10.1] - 2026-02-03

Changed

@agentforge/tools

  • refactor: Complete tools directory structure migration - Internal refactoring for better maintainability
    • Completed comprehensive refactoring of 72 tools across 16 monolithic files into organized directory structures
    • All tool categories now follow consistent directory pattern with index.ts, types.ts, and tools/ subdirectory
    • Added 17 factory functions for programmatic configuration (createSlackTools(), createHttpTools(), etc.)
    • No breaking changes - All public exports remain identical, fully backward compatible
    • Benefits:
      • Improved modularity - each tool in its own file (50-150 lines vs 100-600 lines)
      • Better maintainability - changes to one tool don't affect others
      • Enhanced discoverability - clear directory structure makes tools easy to find
      • Consistent patterns - all 16 tool categories follow the same structure
      • Type safety - shared types in types.ts ensure consistency
      • Testability - each tool can be tested independently
    • Refactored Categories:
      • Slack Tools (4 tools) - slack.tsslack/ directory
      • HTTP Tools (3 tools) - http-client.tshttp/ directory
      • Scraper Tools (3 tools) - scraper.tsscraper/ directory
      • HTML Parser Tools (3 tools) - html-parser.tshtml-parser/ directory
      • URL Validator Tools (3 tools) - url-validator.tsurl-validator/ directory
      • CSV Tools (4 tools) - csv-parser.tscsv/ directory
      • JSON Tools (5 tools) - json-processor.tsjson/ directory
      • XML Tools (4 tools) - xml-parser.tsxml/ directory
      • Transformer Tools (6 tools) - transformer.tstransformer/ directory
      • File Operations (5 tools) - file-operations.tsoperations/ directory
      • Directory Operations (4 tools) - directory-operations.tsdirectory/ directory
      • Path Utilities (8 tools) - path-utilities.tspath/ directory
      • Date/Time Tools (5 tools) - date-time.tsdate-time/ directory
      • String Utilities (7 tools) - string-utilities.tsstring/ directory
      • Math Operations (4 tools) - math-operations.tsmath/ directory
      • Validation Tools (6 tools) - validation.tsvalidation/ directory
    • Documentation: Updated README with directory structure explanation and factory function examples
    • Test Results: All 975 tests passing ✅
    • Build: Successful ✅

Published

  • All packages published to npm registry at version 0.10.1:
    • @agentforge/core@0.10.1
    • @agentforge/patterns@0.10.1
    • @agentforge/tools@0.10.1
    • @agentforge/testing@0.10.1
    • @agentforge/cli@0.10.1

[0.10.0] - 2026-02-03

Added

@agentforge/tools

  • feat: add Confluence integration tools - Seven new tools for Atlassian Confluence integration
    • searchConfluence - Search for pages across all Confluence spaces
    • getConfluencePage - Retrieve a specific page by ID with full content
    • listConfluenceSpaces - List all available Confluence spaces
    • getSpacePages - Get all pages within a specific space
    • createConfluencePage - Create new pages with optional parent pages
    • updateConfluencePage - Update existing page content and metadata
    • archiveConfluencePage - Archive pages (move to trash)
    • Configurable via environment variables (ATLASSIAN_API_KEY, ATLASSIAN_EMAIL, ATLASSIAN_SITE_URL) or programmatic configuration
    • Factory function createConfluenceTools(config) for custom configuration
    • Comprehensive test coverage (32 tests)
    • Full TypeScript support with Zod schema validation
    • Structured logging with [[tools:confluence]] prefix for debugging and monitoring
    • Tool count increased from 74 to 81 tools
    • Web Tools category increased from 15 to 22 tools

Changed

@agentforge/tools

  • refactor: Migrate all tools to directory structure pattern - Comprehensive refactoring for better maintainability
    • Refactored 72 tools across 16 monolithic files into organized directory structures
    • Phase 2: Slack Tools (4 tools) - Split slack.ts (661 lines) into directory structure
    • Phase 3: Web Tools (10 tools) - Split HTTP, Scraper, HTML Parser, URL tools into directories
    • Phase 4: Data Tools (19 tools) - Split CSV, JSON, XML, Transformer tools into directories
    • Phase 5: File Tools (17 tools) - Split File Operations, Directory Operations, Path Utilities into directories
    • Phase 6: Utility Tools (22 tools) - Split Date/Time, String, Math, Validation tools into directories
    • Benefits:
      • Improved modularity - each tool in its own file
      • Better maintainability - changes to one tool don't affect others
      • Enhanced discoverability - clear directory structure
      • Consistent patterns - all tool categories follow the same structure
      • Type safety - shared types ensure consistency
      • Testability - each tool can be tested independently
    • Directory Structure Pattern:
      tool-category/
      ├── index.ts          # Main exports, factory functions, default instances
      ├── types.ts          # TypeScript interfaces, Zod schemas, configuration types
      ├── auth.ts           # Authentication helpers (for API tools)
      └── tools/            # Individual tool implementations
          ├── tool-1.ts
          ├── tool-2.ts
          └── tool-3.ts
    • Factory Functions: Each tool category now provides a factory function for custom configuration
      • createSlackTools(config?), createConfluenceTools(config?), createHttpTools(config?), etc.
      • Enables programmatic configuration without environment variables
      • Supports multiple instances with different configurations
    • No Breaking Changes: All public exports remain the same, fully backward compatible
    • Test Results: All 975 tests passing ✅
    • Documentation: Updated README with directory structure explanation and factory function examples

Published

  • All packages published to npm registry at version 0.10.0:
    • @agentforge/core@0.10.0
    • @agentforge/patterns@0.10.0
    • @agentforge/tools@0.10.0
    • @agentforge/testing@0.10.0
    • @agentforge/cli@0.10.0

[0.9.1] - 2026-02-02

Changed

  • @agentforge/core: Refactored LangGraph utilities organization - moved retry, error-handler, and timeout from langgraph/patterns/ to langgraph/middleware/ for better semantic clarity and organization

Added

  • project: Added .github/copilot-instructions.md to provide comprehensive guidance for AI coding agents working with the AgentForge framework

Published

  • All packages published to npm registry at version 0.9.1:
    • @agentforge/core@0.9.1
    • @agentforge/patterns@0.9.1
    • @agentforge/tools@0.9.1
    • @agentforge/testing@0.9.1
    • @agentforge/cli@0.9.1

[0.9.0] - 2026-01-30

Added

@agentforge/tools

  • feat: add Slack integration tools - Four new tools for Slack workspace integration
    • sendSlackMessage - Send messages to Slack channels
    • notifySlack - Send notifications with @mentions to alert team members
    • getSlackChannels - List available Slack channels (public and private)
    • getSlackMessages - Read message history from channels
    • Configurable via environment variables (SLACK_USER_TOKEN or SLACK_BOT_TOKEN) or programmatic configuration
    • Factory function createSlackTools(config) for custom token configuration
    • Comprehensive test coverage (23 tests)
    • Full TypeScript support with Zod schema validation
    • Structured logging for debugging and monitoring
    • Tool count increased from 70 to 74 tools
    • Web Tools category increased from 11 to 15 tools

Published

  • All packages published to npm registry at version 0.9.0:
    • @agentforge/core@0.9.0
    • @agentforge/patterns@0.9.0
    • @agentforge/tools@0.9.0
    • @agentforge/testing@0.9.0
    • @agentforge/cli@0.9.0

[0.8.2] - 2026-01-28

Changed

  • Dependency Updates - Updated all LangChain packages to latest versions for improved compatibility and bug fixes
    • Updated @langchain/core from 1.1.8/1.1.15 to 1.1.17
    • Updated @langchain/langgraph from 1.0.7/1.1.1 to 1.1.2
    • Updated @langchain/openai from 1.2.2/0.3.14 to 1.2.3
    • Applied updates across all packages and CLI templates

Fixed

  • Test Compatibility (@agentforge/tools) - Removed incompatible test in ask-human.test.ts
    • The test used vi.mock() inside a test case instead of at the top level
    • This pattern was incompatible with newer versions of Vitest/LangChain
    • Test was attempting to mock dynamic import failure, which is not a realistic scenario since @langchain/langgraph is a devDependency
    • Test count: 920 tests passing (down from 921 due to removed incompatible test)

Published

  • All packages published to npm registry at version 0.8.2:
    • @agentforge/core@0.8.2
    • @agentforge/patterns@0.8.2
    • @agentforge/tools@0.8.2
    • @agentforge/testing@0.8.2
    • @agentforge/cli@0.8.2

[0.8.1] - 2026-01-28

Fixed

  • Nested Graph Interrupt Bug (@agentforge/patterns) - Fixed infinite loop when worker agents use askHuman tool in multi-agent systems
    • The Bug: Worker agents using askHuman would cause infinite loops - the agent would ask the same question repeatedly even after the user responded
    • Root Cause: When a worker agent (nested graph) called interrupt(), the multi-agent system didn't properly resume the worker's checkpoint. Instead, it re-executed the worker node from the beginning
    • The Fix: Implemented separate checkpoint namespaces for worker agents using LangGraph's checkpointer: true feature
      • Worker nodes now generate worker-specific thread IDs (format: {parent_thread_id}:worker:{workerId})
      • ReAct agent compilation now supports checkpointer: true to use parent's checkpointer with separate namespace
      • Worker agents configured to use checkpointer: true when created in multi-agent systems
    • Impact: Worker agents can now use askHuman tool without causing infinite loops, enabling proper human-in-the-loop workflows in multi-agent systems
    • Implementation Details:
      • Phase 1: Updated worker node creation to pass worker-specific thread IDs
      • Phase 2: Added checkpointer: true support to ReAct agent compilation
      • Phase 3: Updated all worker agents to use checkpointer: true
      • Phase 4: Enhanced type definitions to document worker checkpoint namespaces
      • Phase 5: Validated fix with manual testing - confirmed no infinite loops
    • Files Modified:
      • packages/patterns/src/multi-agent/utils.ts - Worker-specific thread ID generation
      • packages/patterns/src/react/types.ts - Added checkpointer: true support to types
      • packages/patterns/src/react/agent.ts - Updated compilation to handle checkpointer: true
      • packages/patterns/src/react/builder.ts - Added withCheckpointer() method
      • playground/src/agents/*-agent.ts - Updated all worker agents to use checkpointer: true
      • playground/src/system/pty-agi.ts - Pass checkpointer: true to all worker agents
    • Documentation Added:
      • packages/patterns/docs/react-agent-guide.md - Added withCheckpointer() method documentation
      • docs-site/guide/patterns/react.md - Added "State Persistence with Checkpointer" section
      • docs-site/guide/patterns/multi-agent.md - Added "Human-in-the-Loop with Checkpointers" section
      • docs/NESTED_GRAPH_INTERRUPT_FIX.md - Comprehensive planning document with all implementation phases
    • Test Results: All 921 tests passing ✅

Published

  • All packages published to npm registry at version 0.8.1:
    • @agentforge/core@0.8.1
    • @agentforge/patterns@0.8.1
    • @agentforge/tools@0.8.1
    • @agentforge/testing@0.8.1
    • @agentforge/cli@0.8.1

[0.8.0] - 2026-01-28

Removed

  • Tool-Enabled Supervisor (@agentforge/patterns) - Removed supervisor tool support due to fundamental technical incompatibility
    • Why This Was Removed: The feature had a critical design flaw - supervisors require withStructuredOutput() to guarantee routing decisions, but this is fundamentally incompatible with tool calling
      • withStructuredOutput() constrains the LLM to return a specific schema (RoutingDecision)
      • bindTools() allows the LLM to return tool_calls instead of the structured output
      • These two capabilities are mutually exclusive - the LLM cannot do both simultaneously
      • The previous implementation used complex retry loops to work around this, but it was unreliable and broke the type contract
    • Removed tools parameter from SupervisorConfig
    • Removed maxToolRetries parameter from SupervisorConfig
    • Removed tool execution infrastructure from routing logic (~180 lines)
    • Removed "Tool-Enabled Supervisor" section from documentation
    • Migration Path: Use an intake/triage agent upstream of the supervisor for human-in-the-loop workflows
      • Create a ReAct agent with askHuman tool to handle clarification (ReAct pattern supports tools natively)
      • Pass clarified requests to the multi-agent system supervisor (supervisor only does routing)
      • Benefits: Cleaner separation of concerns, each agent has a coherent contract, more reliable and maintainable
      • Example:
        typescript
        // Intake agent handles human interaction (no structured output constraint)
        const intakeAgent = createReActAgent({
          model: llm,
          tools: [askHumanTool],
          systemPrompt: 'Clarify ambiguous requests before routing...'
        });
        
        // Supervisor handles routing (structured output, no tools)
        const system = createMultiAgentSystem({
          supervisor: {
            strategy: 'llm-based',
            model: llm,  // Uses withStructuredOutput internally
            systemPrompt: 'Route to the best worker...'
          },
          workers: [...]
        });
        
        // Chain them together
        const clarified = await intakeAgent.invoke({ input: userQuery });
        const result = await system.invoke({ input: clarified.output });
    • Test Count Impact: Removed 14 tests (integration-with-tools.test.ts and routing-with-tools.test.ts)
      • Total test count: 921 tests passing (down from 1046 in v0.6.0, but v0.7.0 had 935 before this removal)
      • All remaining tests passing with no regressions

Changed

  • Documentation Updates - Updated all test count references to reflect current state
    • Updated README.md badge from 1046 to 921 tests passing
    • Updated README.md Phase 3 count from 143 to 129 tests
    • Updated web-search TESTING.md from 29 to 45 unit tests with detailed breakdown

Published

  • All packages published to npm registry at version 0.8.0:
    • @agentforge/core@0.8.0
    • @agentforge/patterns@0.8.0
    • @agentforge/tools@0.8.0
    • @agentforge/testing@0.8.0
    • @agentforge/cli@0.8.0

[0.7.0] - 2026-01-27

Added

  • Agent Builder Utility - New shared utility for consistent StateGraph creation across agent patterns

    • Located in packages/patterns/src/shared/agent-builder.ts
    • Provides createAgentGraph() function with standardized configuration
    • Eliminates boilerplate code in agent pattern implementations
    • Consistent error handling and state management
  • implementSafe() Method for ToolBuilder - Automatic error handling for tools

    • New method on ToolBuilder that wraps tool implementation in try-catch
    • Automatically returns { success: boolean; data?: T; error?: string } format
    • Eliminates manual error handling boilerplate in tool implementations
    • Type-safe error responses with full TypeScript support
    • Example:
      typescript
      const tool = toolBuilder()
        .name('read-file')
        .schema(z.object({ path: z.string().describe('Path to the file to read') }))
        .implementSafe(async ({ path }) => {
          return await fs.readFile(path, 'utf-8');
        })
        .build();
      // Result: { success: true, data: "file content" }
      // Or on error: { success: false, error: "ENOENT: no such file..." }

Changed

  • Refactored 14 Tools to Use implementSafe() - Eliminated 116 lines of boilerplate code

    • File Operations (8 tools): directoryList, directoryCreate, directoryDelete, fileSearch, fileReader, fileWriter, fileAppend, fileDelete
    • Web Tools (1 tool): urlValidator (also updated UrlValidationResult interface)
    • Data Tools (4 tools): jsonParser, jsonStringify, jsonQuery, jsonValidator
    • All tools now use consistent error handling pattern
    • Cleaner, more maintainable code focused on business logic
  • Consolidated Vitest Configurations - Workspace-level test configuration

    • Created vitest.workspace.ts at repository root
    • Removed 4 duplicate package-level vitest configurations
    • Properly excludes CLI template tests (78 tests that shouldn't run in workspace)
    • All 935 tests passing (84 test files)

Fixed

  • DRY Violations Eliminated - Completed comprehensive DRY remediation plan
    • Phase 1: Removed ReAct pattern duplication (~2,300 lines)
    • Phase 2: Created shared utilities for error handling and state fields (~145 lines)
    • Phase 3: Advanced refactoring with builder utilities (~176 lines)
    • Total: ~2,621 lines of duplicate code eliminated
    • Improved maintainability and developer experience
    • Zero breaking changes for users

Published

  • All packages published to npm registry at version 0.7.0:
    • @agentforge/core@0.7.0
    • @agentforge/patterns@0.7.0
    • @agentforge/tools@0.7.0
    • @agentforge/testing@0.7.0
    • @agentforge/cli@0.7.0

[0.6.4] - 2026-01-24

Added

  • Comprehensive Structured Logging System - Complete systematic implementation of hierarchical logging across the entire AgentForge framework
    • Created 15 dedicated loggers across patterns and core components using consistent naming convention: agentforge:<package>:<module>:<component>
    • Replaced 41 console.log/error calls with structured logging using appropriate log levels (DEBUG, INFO, WARN, ERROR)
    • Enhanced Logger interface with isDebugEnabled() and isLevelEnabled() methods for performance optimization
    • All 322 tests passing (Patterns: 204, Tools: 118) with zero breaking changes

Pattern Logging:

  • ReAct Pattern: 3 loggers (reasoning, action, observation) - 8 instances migrated
  • Reflection Pattern: 3 loggers (generator, reflector, reviser) - 11 instances migrated
  • Plan-Execute Pattern: 3 loggers (planner, executor, replanner) - enhanced logging
  • Multi-Agent Pattern: 1 logger (nodes) - 16 instances migrated

Core Components:

  • Monitoring/Alerts: 4 console.log instances migrated to structured logging
  • Tool Registry/Lifecycle: 2 console.error instances migrated to structured logging

Documentation:

  • Created DEBUGGING_GUIDE.md - comprehensive debugging reference with pattern-specific sections
  • Created LOGGING_STANDARDS.md - official logging standards and best practices
  • Created LOGGING_EXAMPLES.md - concrete code examples for all patterns
  • Updated all 4 pattern documentation files with structured logging sections
  • Created CONSOLE_LOGGING_AUDIT.md - complete audit of all console.log usage
  • Created LOGGING_STRATEGY.md - 5-phase implementation strategy (100% complete)

Benefits:

  • Consistent, hierarchical logging across all patterns and core components
  • Fine-grained control via LOG_LEVEL environment variable (DEBUG, INFO, WARN, ERROR)
  • Performance-optimized with level checking to avoid unnecessary string operations
  • Backward compatible - existing verbose parameters still work (deprecated but functional)
  • Better debugging experience with pattern-specific log filtering

Example Usage:

bash
# Enable debug logging for all patterns
LOG_LEVEL=DEBUG node your-agent.js

# Enable debug logging for specific pattern
LOG_LEVEL=DEBUG DEBUG=agentforge:patterns:react:* node your-agent.js

# Enable debug logging for specific component
LOG_LEVEL=DEBUG DEBUG=agentforge:patterns:react:reasoning node your-agent.js

Fixed

  • Release Script Bug - Fixed root package.json not being updated during releases
    • Added root package.json to PACKAGE_FILES array in scripts/release.sh
    • Ensures version consistency across all package files

Published

  • All packages published to npm registry at version 0.6.4:
    • @agentforge/core@0.6.4
    • @agentforge/patterns@0.6.4
    • @agentforge/tools@0.6.4
    • @agentforge/testing@0.6.4
    • @agentforge/cli@0.6.4

[0.6.3] - 2026-01-23

Added

  • Parallel Routing in Multi-Agent Pattern - Route queries to multiple agents simultaneously for comprehensive answers
    • Enhanced RoutingDecisionSchema to support both targetAgent (single) and targetAgents (array) fields
    • Updated LLM-based routing to handle structured output and select multiple target agents
    • Modified supervisor node to create multiple TaskAssignment objects for parallel execution
    • Enhanced supervisor router to detect comma-separated agent IDs and return arrays for LangGraph parallel execution
    • Removed state update conflicts from worker nodes (currentAgent, status) to enable parallel execution
    • Simplified worker router to always return 'supervisor' for cleaner state management
    • Added comprehensive documentation with examples, execution flow diagrams, and best practices
    • Fully backward compatible - existing systems continue to work with single-agent routing

Benefits:

  • Comprehensive answers combining insights from multiple specialists
  • Faster execution through parallel processing instead of sequential routing
  • Better coverage of complex queries requiring multiple perspectives
  • Intelligent aggregation of results from multiple agents

Example Use Cases:

  • Code + Security: "Are there security issues in the auth module?"
  • Code + Documentation: "How does authentication work?"
  • Legal + HR: "What are compliance requirements for employee data?"

Published

  • All packages published to npm registry at version 0.6.3:
    • @agentforge/core@0.6.3
    • @agentforge/patterns@0.6.3
    • @agentforge/tools@0.6.3
    • @agentforge/testing@0.6.3
    • @agentforge/cli@0.6.3

[0.6.3] - 2026-01-23

Added

  • Parallel Routing in Multi-Agent Pattern - Route queries to multiple agents simultaneously for comprehensive answers
    • Enhanced RoutingDecisionSchema to support both targetAgent (single) and targetAgents (array) fields
    • Updated LLM-based routing to handle structured output and select multiple target agents
    • Modified supervisor node to create multiple TaskAssignment objects for parallel execution
    • Enhanced supervisor router to detect comma-separated agent IDs and return arrays for LangGraph parallel execution
    • Removed state update conflicts from worker nodes (currentAgent, status) to enable parallel execution
    • Simplified worker router to always return 'supervisor' for cleaner state management
    • Added comprehensive documentation with examples, execution flow diagrams, and best practices
    • Fully backward compatible - existing systems continue to work with single-agent routing

Benefits:

  • Comprehensive answers combining insights from multiple specialists
  • Faster execution through parallel processing instead of sequential routing
  • Better coverage of complex queries requiring multiple perspectives
  • Intelligent aggregation of results from multiple agents

Example Use Cases:

  • Code + Security: "Are there security issues in the auth module?"
  • Code + Documentation: "How does authentication work?"
  • Legal + HR: "What are compliance requirements for employee data?"

Published

  • All packages published to npm registry at version 0.6.3:
    • @agentforge/core@0.6.3
    • @agentforge/patterns@0.6.3
    • @agentforge/tools@0.6.3
    • @agentforge/testing@0.6.3
    • @agentforge/cli@0.6.3

[0.6.2] - 2026-01-23

Fixed

  • Plan-Execute Pattern Interrupt Handling - Fixed GraphInterrupt propagation in Plan-Execute pattern
    • Added GraphInterrupt detection and re-throw logic to executor node (@agentforge/patterns)
    • Ensures askHuman tool works correctly in Plan-Execute agents
    • Completes interrupt handling coverage across all agent patterns that execute tools
    • Now all patterns support human-in-the-loop workflows: ReAct, Multi-Agent, and Plan-Execute

Published

  • All packages published to npm registry at version 0.6.2:
    • @agentforge/core@0.6.2
    • @agentforge/patterns@0.6.2
    • @agentforge/tools@0.6.2
    • @agentforge/testing@0.6.2
    • @agentforge/cli@0.6.2

[0.6.1] - 2026-01-22

Fixed

  • askHuman Tool Interrupt Handling - Fixed GraphInterrupt propagation for proper human-in-the-loop workflows
    • Fixed GraphInterrupt propagation in ReAct action nodes (@agentforge/core)
    • Fixed GraphInterrupt propagation in multi-agent worker nodes (@agentforge/patterns)
    • Added config parameter to executeFn for LangGraph runtime configuration support
    • Ensures interrupt() errors bubble up correctly through all execution layers
    • Added detailed code comments explaining GraphInterrupt handling

Changed

  • Internal Logging - Replaced console.log debug statements with structured logging
    • Implemented structured logging in askHuman tool with debug-level logs
    • Implemented structured logging in multi-agent utils with debug/error levels
    • Added LOG_LEVEL environment variable support (debug, info, warn, error)
    • Improves production observability and debugging capabilities

Documentation

  • Logging API Documentation - Added comprehensive documentation for existing logger API
    • Added createLogger and LogLevel documentation to Core API reference
    • Updated monitoring guide to show built-in logger as primary option
    • Updated deployment guide to show built-in logger as recommended option
    • Documented LOG_LEVEL environment variable usage
    • Showed Winston as alternative for advanced logging needs (file rotation, remote logging)

Published

  • All packages published to npm registry at version 0.6.1:
    • @agentforge/core@0.6.1
    • @agentforge/patterns@0.6.1
    • @agentforge/tools@0.6.1
    • @agentforge/testing@0.6.1
    • @agentforge/cli@0.6.1

[0.6.0] - 2026-01-22

Added

Tool-Enabled Supervisor (@agentforge/patterns)

DEPRECATED

This feature was removed in a later version. See [Unreleased] section for migration path to intake/triage agent pattern.

  • Supervisor Tools for Multi-Agent Pattern - Supervisors can now use tools during routing decisions
    • Added optional tools parameter to SupervisorConfig for tool-enabled routing
    • Added maxToolRetries parameter to control tool call retry attempts (default: 3)
    • Supervisors can gather additional information before routing tasks to workers
    • Enables human-in-the-loop workflows with askHuman tool in supervisor
    • Automatic tool call detection and execution in routing logic
    • Conversation history tracking across tool calls for context preservation
    • Full backward compatibility - tools are optional
    • 11 new unit tests for routing with tools
    • 3 new integration tests for system configuration
    • Total Test Count: 1046 tests passing (up from 1032)

Examples

  • New Multi-Agent Example - 05-supervisor-with-askhuman.ts
    • Demonstrates supervisor using askHuman tool for ambiguous requests
    • Shows clear vs. ambiguous request handling
    • Best practices for tool-enabled supervisors

Changed

Documentation

  • Terminology Update - Standardized on "vertical agents" terminology

    • Renamed "reusable agents" to "vertical agents" (industry-standard term)
    • Updated all documentation, examples, and navigation
    • Renamed examples/reusable-agents/examples/vertical-agents/
    • Renamed docs guide: reusable-agents.mdvertical-agents.md
    • Updated CLI templates and references
    • Maintained backward compatibility with 'reusable-agent' keyword for discoverability
    • Improves clarity and aligns with common industry terminology
  • Multi-Agent Pattern Documentation - Enhanced with tool-enabled supervisor section

    • Comprehensive examples and best practices
    • Updated both package docs and docs-site
    • New feature documentation: docs/FEATURE_TOOL_ENABLED_SUPERVISOR.md
  • Test Count Updates - Updated test counts across all documentation

    • README.md: Updated badge and metrics to show 1046 tests
    • All documentation now reflects current test coverage

Published

  • All packages published to npm registry at version 0.6.0:
    • @agentforge/core@0.6.0
    • @agentforge/patterns@0.6.0 (includes tool-enabled supervisor)
    • @agentforge/tools@0.6.0
    • @agentforge/testing@0.6.0
    • @agentforge/cli@0.6.0

[0.5.4] - 2026-01-21

Added

Checkpointer Support (@agentforge/patterns)

  • Checkpointer Support Across All Patterns - Enable state persistence and human-in-the-loop workflows
    • Added optional checkpointer parameter to all 4 agent patterns:
      • createReActAgent() - ReAct pattern with checkpointing
      • createPlanExecuteAgent() - Plan-Execute pattern with checkpointing
      • createReflectionAgent() - Reflection pattern with checkpointing
      • createMultiAgentSystem() - Multi-Agent pattern with checkpointing
    • Fully backward compatible - checkpointer is optional
    • Enables askHuman tool usage with all patterns
    • Enables conversation continuity and state persistence
    • Enables LangGraph interrupts for human-in-the-loop workflows
    • 4 new tests for checkpointer support (2 ReAct + 2 Multi-Agent)
    • Updated JSDoc examples showing checkpointer usage with MemorySaver
    • Total Test Count: 1032 tests passing (up from 1028)

Changed

Documentation

  • Test Count Updates - Updated test counts across all documentation
    • README.md: Updated badge and metrics to show 1032 tests
    • docs/ROADMAP.md: Updated test count to 1032 tests
    • All documentation now reflects current test coverage

Published

  • All packages published to npm registry at version 0.5.4:
    • @agentforge/core@0.5.4
    • @agentforge/patterns@0.5.4
    • @agentforge/tools@0.5.4
    • @agentforge/testing@0.5.4
    • @agentforge/cli@0.5.4

[0.5.3] - 2026-01-21

Fixed

CLI Template (@agentforge/cli)

  • Reusable Agent Template tsconfig.json - Fixed incorrect TypeScript configuration
    • Removed invalid extends path to non-existent tsconfig.base.json
    • Added full standalone compiler options (templates should be self-contained)
    • Fixed rootDir from ./src to . (template files are at root level)
    • Fixed include from src/**/* to . (no src directory in template)
    • Template now matches pattern used in other CLI templates (minimal, full, etc.)
    • Resolves TypeScript errors when opening template in IDE

Published

  • All packages published to npm registry at version 0.5.3:
    • @agentforge/core@0.5.3
    • @agentforge/patterns@0.5.3
    • @agentforge/tools@0.5.3
    • @agentforge/testing@0.5.3
    • @agentforge/cli@0.5.3

[0.5.2] - 2026-01-21

Added

Human-in-the-Loop Support (@agentforge/tools, @agentforge/core)

  • askHuman Tool - New tool for human-in-the-loop workflows

    • Pauses agent execution to request human input or approval
    • Priority levels: low, normal, high, critical
    • Timeout handling with default responses
    • Suggested responses for UI integration
    • LangGraph interrupt integration
    • Full TypeScript support with Zod validation
    • 11 comprehensive unit tests
  • Interrupt Handling Utilities (@agentforge/core)

    • HumanRequest, HumanRequestPriority, HumanRequestStatus types
    • Interrupt creation and type guard utilities
    • Thread status tracking
    • SSE event formatters for real-time communication
    • 19 unit tests for interrupt and streaming utilities
  • New Agent Tools Category - Created dedicated category for agent interaction tools

    • Tool count increased from 69 to 70 tools
    • 5 categories: Web, Data, File, Utility, Agent

Reusable Agent Examples

  • Three Production-Ready Vertical Agents - Complete examples in examples/vertical-agents/
    • Customer Support Agent (24 tests passing)
    • Code Review Agent (26 tests passing)
    • Data Analyst Agent (28 tests passing)
    • Each demonstrates factory function pattern, external prompts, tool injection, feature flags
    • Total: 78 comprehensive tests across all examples
  • Total Test Count: 1028 tests passing across all packages (up from 897)

CLI Scaffolding (@agentforge/cli)

  • New Command: agent:create-reusable - Scaffold production-ready reusable agents
    • Interactive prompts for agent name, description, and author
    • Complete template with factory function pattern
    • External prompt templates (.md files with {{variable}} placeholders)
    • Prompt loader utility for template rendering
    • Comprehensive test suite (14 test cases)
    • Configuration validation with Zod
    • Tool injection support and feature flags
    • Full documentation and examples
    • 5 CLI command tests

Documentation

  • Reusable Agents Guide - Complete guide for building configurable agents
    • Factory function pattern
    • External prompt templates
    • Tool injection and feature flags
    • Configuration validation
    • Testing patterns and best practices
  • Main README for Reusable Agents - Overview of all three example agents (341 lines)
  • Updated Examples README - Added reusable agents section and learning path
  • CLI Documentation - Detailed usage guide for agent:create-reusable command

Changed

  • Moved HumanRequest types from tools to core (shared framework types)
  • Updated all documentation to reflect 70 tools
  • Added @langchain/langgraph as peer dependency (optional) for tools package

Fixed

  • Lockfile Update - Updated pnpm-lock.yaml to include reusable agent example dependencies
    • Fixes CI deployment issue with --frozen-lockfile flag
    • Ensures reproducible builds in GitHub Actions

Published

  • All packages published to npm registry at version 0.5.2:
    • @agentforge/core@0.5.2
    • @agentforge/patterns@0.5.2
    • @agentforge/tools@0.5.2
    • @agentforge/testing@0.5.2
    • @agentforge/cli@0.5.2

[0.5.1] - 2026-01-16

Added

Multi-Agent Pattern Enhancements (@agentforge/patterns)

  • Streaming Support - Added stream() method wrapper to Multi-Agent pattern

    • Ensures worker capabilities are injected into initial state when using streaming mode
    • Maintains consistency with invoke() method behavior
    • Enables real-time streaming of multi-agent workflows
  • Tool Usage Tracking - Enhanced ReAct agent wrapper with tool tracking

    • Automatically extracts and logs tools used during ReAct agent execution
    • Includes tools_used array in task result metadata
    • Removes duplicate tool names for cleaner reporting
    • Adds verbose logging to show which tools were used by each worker

Changed

  • Updated all package versions to 0.5.1
  • Improved observability of ReAct agents in Multi-Agent workflows

Published

  • All packages published to npm registry at version 0.5.1:
    • @agentforge/core@0.5.1
    • @agentforge/patterns@0.5.1 (includes streaming support and tool tracking)
    • @agentforge/tools@0.5.1
    • @agentforge/testing@0.5.1
    • @agentforge/cli@0.5.1

[0.5.0] - 2026-01-15

Added

Multi-Agent Pattern Enhancement (@agentforge/patterns)

  • Automatic ReAct Agent Integration - Multi-Agent workers can now accept ReAct agents directly
    • New agent property in WorkerConfig for ReAct agent instances
    • Automatic detection and wrapping of ReAct agents via isReActAgent()
    • Seamless state conversion between Multi-Agent and ReAct formats
    • Priority system: executeFn > agent > default LLM execution
    • Eliminates boilerplate wrapper code (20+ lines → 1 line)
    • Full backward compatibility with existing executeFn approach
    • Enhanced error handling and verbose logging
    • New utility functions: isReActAgent() and wrapReActAgent()

Developer Experience

  • Release Automation - Added comprehensive release tooling
    • scripts/release.sh - Automated version bump script
    • scripts/publish.sh - Automated npm publishing script
    • RELEASE_CHECKLIST.md - Complete release checklist
    • .ai/RELEASE_PROCESS.md - AI assistant release guide

Changed

  • Updated all package versions to 0.5.0
  • Updated VitePress documentation site to display v0.5.0
  • Updated CLI templates to use @agentforge/* ^0.5.0
  • Improved WorkerConfig type definitions with comprehensive JSDoc

Published

  • All packages published to npm registry at version 0.5.0:
    • @agentforge/core@0.5.0
    • @agentforge/patterns@0.5.0 (includes ReAct agent integration)
    • @agentforge/tools@0.5.0
    • @agentforge/testing@0.5.0
    • @agentforge/cli@0.5.0

[0.4.1] - 2026-01-15

Added

Tool Compatibility (@agentforge/tools)

  • invoke() method alias - Added invoke() as an alias to execute() for all tools
    • Provides compatibility with LangChain's tool interface
    • Both methods work identically - use whichever fits your framework
    • No breaking changes - execute() remains the primary method
    • Fully typed with TypeScript support

Changed

  • Updated all package versions to 0.4.1
  • Updated VitePress documentation site to display v0.4.1
  • Updated CLI templates to use @agentforge/* ^0.4.1

Published

  • All packages published to npm registry at version 0.4.1:
    • @agentforge/core@0.4.1
    • @agentforge/patterns@0.4.1
    • @agentforge/tools@0.4.1 (includes invoke() alias)
    • @agentforge/testing@0.4.1
    • @agentforge/cli@0.4.1

[0.4.0] - 2026-01-09

Added

Web Search Tool (@agentforge/tools)

  • New webSearch tool - Intelligent web search with dual provider support
    • DuckDuckGo provider - Free, no API key required
    • Serper provider - Premium Google search results (optional, requires API key)
    • Smart fallback mechanism - Automatically falls back to alternative provider if primary returns no results
    • Configurable timeout - Default 30s, configurable from 1-60 seconds
    • Retry logic - Exponential backoff with 3 retries for transient failures
    • Performance optimizations - Efficient result parsing and processing
    • Comprehensive testing - 45 tests with 100% statement coverage, 92.5% branch coverage
    • Full documentation - README, JSDoc comments, and usage examples

Features

  • Support for custom search queries with configurable result limits (1-50 results)
  • Metadata tracking (response time, source provider, fallback usage)
  • Environment variable support (SERPER_API_KEY for premium features)
  • TypeScript type definitions for all inputs and outputs
  • Zod schema validation for inputs

Documentation

  • Updated tools README with webSearch documentation
  • Added comparison table: DuckDuckGo vs Serper
  • Created usage examples for both providers
  • Added environment setup instructions

Changed

  • Tool count increased from 68 to 69 tools
  • Updated all package versions to 0.4.0
  • Updated VitePress documentation site to display v0.4.0
  • Marked docs-site package as private (not published to npm)

Fixed

  • Updated pnpm lockfile to use workspace:* for internal dependencies
  • Fixed GitHub Actions CI deployment issue with frozen lockfile

Published

  • All packages published to npm registry at version 0.4.0:
    • @agentforge/core@0.4.0
    • @agentforge/patterns@0.4.0
    • @agentforge/tools@0.4.0 (includes webSearch)
    • @agentforge/testing@0.4.0
    • @agentforge/cli@0.4.0

[0.3.9] - 2026-01-09

Added

  • Tool Relations: Define relationships between tools to guide LLM workflows

    • .requires(tools) - Tools that must be called before this tool
    • .suggests(tools) - Tools that work well with this tool
    • .conflicts(tools) - Tools that conflict with this tool
    • .follows(tools) - Tools this typically follows in a workflow
    • .precedes(tools) - Tools this typically precedes in a workflow
    • Full TypeScript support with ToolRelations interface and ToolRelationsSchema validation
    • Helps LLMs make better decisions about tool selection and ordering
  • Minimal Prompt Mode: Reduce token usage with native tool calling providers

    • New minimal option in ToolRegistry.generatePrompt()
    • Only includes supplementary context (relations, examples, notes, limitations)
    • Excludes basic tool definitions (name, description, parameters) sent via API
    • Reduces token usage by up to 67% when using OpenAI, Anthropic, Gemini, or Mistral
    • Backward compatible - opt-in via minimal: true flag
  • Enhanced Prompt Generation: New options for ToolRegistry.generatePrompt()

    • includeRelations - Include tool relations in prompts
    • minimal - Enable minimal prompt mode for native tool calling

Improved

  • Tool Builder API: Added 5 new fluent methods for defining tool relations
  • Documentation: Updated API docs and examples with tool relations and minimal mode
  • Type Safety: Full TypeScript support for all new features with validation

Tests

  • Added 106 new tests for tool relations and minimal prompt mode
  • All 516 tests passing across the core package

[0.3.5] - 2026-01-08

Fixed

  • CLI Templates: Removed incorrect .compile() calls from all templates
    • createReActAgent() already returns a compiled graph
    • Fixed minimal, full, cli, and api templates
    • Users no longer need to call .compile() on pattern creation functions

[0.3.4] - 2026-01-08

Changed

  • Breaking Change: Standardized on model parameter across all agent patterns
    • Changed all config interfaces to use model instead of llm
    • Affects: ReAct, Reflection, Plan-Execute, and Multi-Agent patterns
    • Updated all documentation and examples to use model
    • This provides a consistent, modern API across the framework

[0.3.3] - 2026-01-08

Added

  • CLI Templates: Added environment validation to all templates (minimal, full, cli, api)
    • Validates required environment variables (OPENAI_API_KEY) before starting
    • Provides clear, helpful error messages when variables are missing
    • Includes step-by-step instructions on how to fix missing environment variables
    • Prevents cryptic OpenAI SDK errors when API key is not configured

Improved

  • Documentation: Enhanced quick-start guide with more explicit environment setup instructions
    • Added warning about setting up .env BEFORE running the agent
    • Clarified the importance of copying .env.example to .env
    • Added explanation of what happens if environment setup is skipped

[0.3.2] - 2026-01-08

Fixed

  • CLI Minimal Template: Added missing dotenv package dependency
  • CLI Minimal Template: Added missing .env.example file
  • CLI Minimal Template: Added import 'dotenv/config' to load environment variables
  • CLI Minimal Template: Updated README with environment setup instructions

[0.3.1] - 2026-01-08

Fixed

  • CLI Templates: Fixed version references in CLI templates - @agentforge/patterns was incorrectly referencing ^0.2.0 instead of ^0.3.1
  • All template package.json files now correctly reference ^0.3.1 for all @agentforge/* packages

[0.3.0] - 2026-01-08

Added

  • Initial public release with all core packages
  • Complete documentation site
  • CLI tool for project scaffolding
  • 827 passing tests across all packages

[0.2.0] - 2026-01-08

Changed

  • BREAKING: Updated to LangChain v1.x (from v0.3.x)
    • @langchain/core@^1.1.0 (was ^0.3.x)
    • @langchain/langgraph@^1.0.0 (was ^0.2.x)
    • langchain@^1.2.0 (was ^0.3.x)
    • @langchain/openai@^1.2.0 (was ^0.3.x)
  • All packages now use consistent LangChain v1.x peer dependencies
  • Templates updated to use latest LangChain versions

Fixed

  • Resolved peer dependency conflicts between packages
  • Fixed workspace:* dependencies in published packages

[0.1.9] - 2026-01-08

Fixed

  • All Packages: Replaced workspace:* dependencies with actual npm versions to fix installation issues
  • Added .npmrc configuration for proper workspace dependency handling

[0.1.8] - 2026-01-08

Fixed

  • CLI: Fixed template path resolution - was going up too many directory levels
  • CLI: Replaced workspace:* dependencies with actual npm versions in all templates
  • Repository URLs now use git+https:// format to avoid npm warnings

[0.1.6] - 2026-01-08

Added

  • Changelog and Contributing guide pages

Fixed

  • CLI: Fixed __dirname error in ES modules by using import.meta.url instead
  • Template copying now works correctly when creating new projects

[0.1.5] - 2026-01-08

Added

  • Complete documentation site with VitePress
  • 34 documentation pages covering all aspects of the framework
  • Interactive examples and tutorials
  • Comprehensive API reference for all packages
  • Verification checklist for documentation quality

Changed

  • Updated documentation site version display to v0.1.5

Fixed

  • Documentation site navigation and links

[0.1.0] - 2026-01-07

Added

Core Package (@agentforge/core)

  • Tool System

    • ToolBuilder for creating type-safe tools with Zod validation
    • ToolRegistry for managing and discovering tools
    • ToolExecutor with retry logic and error handling
    • LangChain tool conversion utilities
    • 69+ built-in tools across 8 categories
  • Middleware System

    • Composable middleware architecture
    • Built-in middleware: caching, rate limiting, validation, logging, metrics
    • Middleware composition utilities
  • Streaming Support

    • SSE (Server-Sent Events) streaming
    • WebSocket streaming
    • Progress tracking and backpressure management
    • Stream transformers and utilities
  • Resource Management

    • Resource lifecycle management
    • Connection pooling
    • Automatic cleanup and disposal
    • Health checks
  • Monitoring & Observability

    • Metrics collection (counters, gauges, histograms)
    • Event tracking
    • Performance monitoring
    • Integration with monitoring services

Patterns Package (@agentforge/patterns)

  • ReAct Pattern

    • Reasoning and acting loop
    • Tool selection and execution
    • Configurable max iterations
  • Plan-Execute Pattern

    • Planning phase with task decomposition
    • Execution phase with progress tracking
    • Re-planning on failures
  • Reflection Pattern

    • Self-critique and improvement
    • Iterative refinement
    • Quality scoring
  • Multi-Agent Pattern

    • Agent coordination and communication
    • Supervisor and worker agents
    • Message passing and state sharing

CLI Package (@agentforge/cli)

  • Project scaffolding with templates
  • 13 commands for development workflow
  • Interactive project creation
  • Development server
  • Build and deployment tools

Testing Package (@agentforge/testing)

  • Mock factories for agents, tools, and LLMs
  • Test helpers and utilities
  • Fixtures for common test scenarios
  • Integration testing support

Tools Package (@agentforge/tools)

  • 69+ production-ready tools
  • Categories: web, file system, data processing, API, database, math, text, utilities
  • Full TypeScript support with Zod validation

Documentation

  • Complete getting started guide
  • Core concepts documentation
  • Pattern-specific guides
  • API reference for all packages
  • 6 example projects
  • 5 step-by-step tutorials
  • Deployment guides

Developer Experience

  • Full TypeScript support
  • Comprehensive type definitions
  • ESLint and Prettier configuration
  • Vitest for testing
  • pnpm workspace setup
  • GitHub Actions CI/CD

[Unreleased]

Planned Features

  • Additional agent patterns (Tree of Thoughts, Chain of Thought)
  • More built-in tools
  • Enhanced monitoring and observability
  • Performance optimizations
  • Additional deployment templates
  • Plugin system
  • Visual agent builder
  • Agent marketplace

Version History

  • 0.9.0 (2026-01-30) - Added Slack integration tools (4 new tools: sendSlackMessage, notifySlack, getSlackChannels, getSlackMessages)
  • 0.8.2 (2026-01-28) - Updated LangChain packages to latest versions, fixed test compatibility
  • 0.8.1 (2026-01-28) - Fixed nested graph interrupt bug - worker agents can now use askHuman without infinite loops
  • 0.8.0 (2026-01-28) - Removed tool-enabled supervisor feature (fundamental technical incompatibility)
  • 0.7.0 (2026-01-27) - Agent builder utility, implementSafe() method, DRY remediation (~2,621 lines eliminated)
  • 0.6.4 (2026-01-24) - Comprehensive structured logging system across all patterns and core components
  • 0.6.3 (2026-01-23) - Parallel routing for multi-agent pattern - route to multiple agents simultaneously
  • 0.6.2 (2026-01-23) - Fixed Plan-Execute pattern interrupt handling
  • 0.6.1 (2026-01-22) - Fixed askHuman interrupt handling, added logging documentation
  • 0.6.0 (2026-01-22) - Tool-enabled supervisors for multi-agent pattern (deprecated), vertical agents terminology
  • 0.5.4 (2026-01-21) - Checkpointer support for all patterns, enabling human-in-the-loop workflows
  • 0.5.3 (2026-01-21) - Fixed vertical-agent template tsconfig.json
  • 0.5.2 (2026-01-21) - Human-in-the-Loop support, vertical agent examples, and CLI scaffolding
  • 0.5.1 (2026-01-16) - Multi-Agent streaming support and tool usage tracking
  • 0.5.0 (2026-01-15) - Automatic ReAct agent integration for Multi-Agent pattern, release automation
  • 0.4.1 (2026-01-15) - Added invoke() method alias for LangChain compatibility
  • 0.4.0 (2026-01-09) - Added webSearch tool with DuckDuckGo and Serper providers
  • 0.3.3 (2026-01-08) - Added environment validation to all CLI templates with helpful error messages
  • 0.3.2 (2026-01-08) - Fixed minimal template missing dotenv configuration
  • 0.3.1 (2026-01-08) - Fixed CLI template version references
  • 0.3.0 (2026-01-08) - Initial public release with all core packages
  • 0.2.0 (2026-01-08) - BREAKING: Updated to LangChain v1.x, fixed peer dependencies
  • 0.1.9 (2026-01-08) - Fixed workspace:* dependencies in all packages
  • 0.1.8 (2026-01-08) - CLI template path and dependency fixes
  • 0.1.6 (2026-01-08) - CLI ES module fix, changelog and contributing pages
  • 0.1.5 (2026-01-08) - Documentation updates
  • 0.1.0 (2026-01-07) - Initial release

Released under the MIT License.