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.mdto avoid duplicate/conflicting release guidance - Updated release references in
README.mdandscripts/release.shto use.ai/RELEASE_PROCESS.md - Updated release script messaging to reference
docs-site/changelog.mdand./scripts/publish.sh
Fixed
@agentforge/tools — Relational Insert
- Fixed strict typing mismatch in batch insert aggregation (
allRowsnow aligned withInsertResult.rowstype)
@agentforge/tools — Test Stability
- Made Docker-backed relational integration suites opt-in via
RUN_INTEGRATION_TESTS=trueto avoid failing default test runs when container runtime is unavailable - Made live web-search performance suite opt-in via
RUN_WEB_PERFORMANCE_TESTS=trueto avoid network-dependent failures in default test runs
@agentforge/patterns — Shared Utilities
- Improved
buildAgentdynamic edge wiring types for strict typecheck compatibility - Refined
withErrorHandlingfallback 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/corefrompeerDependenciestodependenciesso it auto-installs for consumers (matching@agentforge/patternsconvention)
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/skillspackage — Skills source files extracted from@agentforge/coreinto a dedicated package with full public API:SkillRegistry,parseSkillContent,scanSkillRoot,scanAllSkillRootscreateActivateSkillTool,createReadSkillResourceTool,createSkillActivationToolsevaluateTrustPolicy,isScriptResource,normalizeRootConfig,resolveResourcePath- All types:
Skill,SkillMetadata,SkillRegistryConfig,TrustLevel, etc.
- Imports re-wired from relative core internals to
@agentforge/corepackage imports - Logger names updated to
agentforge:skills:*namespace - Skills test suite (215 tests) migrated from
packages/core/tests/skills/topackages/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-agentupdated to depend on@agentforge/skills - Root README package table now includes
@agentforge/skills
Release Tooling — Skills Package Support (EP-07)
scripts/release.sh— Addedpackages/skills/package.jsontoPACKAGE_FILESfor automated version bumpsscripts/publish.sh— Addedpackages/skillstoPACKAGESin correct dependency order (after core, before patterns)scripts/convert-workspace-deps.mjs— Addedskillsto workspace package name list for workspace:* → concrete version conversionRELEASE_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/coreentirely — import from@agentforge/skillsinstead gray-matterremoved 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/skillsand 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
skillRootswith multi-root support and deterministic duplicate handling - Query API:
get(),getAll(),has(),size,getNames(),getScanErrors() enabledfeature flag (default off) for zero-impact opt-inmaxDiscoveredSkillscap 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
- Subset filtering via
- Skill Activation Tools — Two LangGraph-compatible tools for runtime skill loading:
activate-skill— Load full SKILL.md instructions by skill nameread-skill-resource— Read resource files from skill directories with path securitytoActivationTools()convenience method returning both as a tupleresolveResourcePath()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 rootevaluateTrustPolicy()decision engine blocking scripts from untrusted roots by defaultallowUntrustedScriptsconfig override for development workflowsgetAllowedTools()API for skill-declared tool filteringTRUST_POLICY_DENIED/TRUST_POLICY_ALLOWEDevents 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-loadedtrust: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.mdcovering 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 streamingrelationalInsert— Single and batch insert with configurable returning modes (none,id,row)relationalUpdate— Conditional updates with optimistic locking, WHERE requirement, and batch operationsrelationalDelete— Safe deletion with WHERE requirement, soft-delete support, and cascade-aware errorsrelationalGetSchema— 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()anddispose()
- 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 helpfulMissingPeerDependencyErrormessages
@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/databasecovering 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-agentbuilding a database-powered ReAct agent from scratch - API Reference — Full parameter tables and response shapes for all 6 relational tools, ConnectionManager class, and
withTransactionhelper 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 supportneo4jGetSchema- Retrieve comprehensive graph schema (nodes, relationships, constraints, indexes)neo4jFindNodes- Find nodes by label and property filtersneo4jTraverse- Graph traversal with relationship type filtering and depth controlneo4jVectorSearch- Vector similarity search using existing embeddingsneo4jVectorSearchWithEmbedding- Vector search with automatic text-to-embedding conversionneo4jCreateNodeWithEmbedding- 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=trueflag to prevent CI failures - Structured Logging - Full logging compliance using
@agentforge/corelogger
Fixed
@agentforge/tools
- TypeScript Compilation Errors in Confluence Tools - Fixed ESM import paths and return type annotations:
- Added
.jsextensions to relative imports (required bymoduleResolution: "node16") - Removed explicit
: Toolreturn 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)
- Added
- TypeScript Compilation Errors in Slack Tools - Fixed return type annotations:
- Removed explicit
: Toolreturn type annotations to allow proper type inference - Fixed 4 files: get-channels, get-messages, notify, send-message
- Removed explicit
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 createusing 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, orvitest runcommands without errors in 3 out of 4 templates - Root Causes:
- P1: TypeScript type error (TS18046):
result.messagestyped as unknown in minimal/api/cli templates - P1: API template DTS build failure (TS2742): Inferred router type not portable for declaration emit
- P1: Vitest run failures:
vitest runexited with code 1 when no test files exist - P2: Package.json metadata mismatch:
mainandtypesfields didn't match actual build output - P2: Unresolved template placeholder:
remained literal when description was empty
- P1: TypeScript type error (TS18046):
- Solutions:
- Fixed
result.messagestyping - Added explicit type assertion in 4 files:templates/minimal/src/index.ts- Addedas Array<{ content: string }>templates/api/src/routes/agent.ts- Addedas Array<{ content: string }>templates/cli/src/commands/analyze.ts- Addedas Array<{ content: string }>templates/cli/src/commands/chat.ts- Addedas Array<{ content: string }>
- Fixed API template DTS build - Added explicit Router type annotations in 2 files:
templates/api/src/routes/agent.ts- Changed toconst router: Router = Router();templates/api/src/routes/health.ts- Changed toconst router: Router = Router();
- Fixed vitest run failures - Added
--passWithNoTestsflag in 3 package.json files:templates/minimal/package.json- Updated test scriptstemplates/api/package.json- Updated test scriptstemplates/cli/package.json- Updated test scripts
- Fixed package.json metadata - Corrected main/types fields in 2 files:
templates/api/package.json- Changed tomain: "dist/server.js",types: "dist/server.d.ts"templates/cli/package.json- Changed tomain: "dist/cli.js",types: "dist/cli.d.ts"
- Fixed template placeholder - Fixed scaffolder variable replacement:
src/commands/create.ts- Changed replacement key fromDESCRIPTIONtoPROJECT_DESCRIPTION
- Fixed
- 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/typesmatch emitted artifacts
- ✅
- Problem: Fresh projects created with
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 createusing v0.12.3 had test failures - Impact:
pnpm exec vitest runfailed with "exampleTool.name is undefined" - Root Cause: Tool API changed - metadata is now under
tool.metadataproperty, but template tests were still accessingtool.namedirectly - Solution:
- Fixed test assertions to use
tool.metadata.nameinstead oftool.name - Fixed test assertions to use
tool.metadata.descriptioninstead oftool.description - Fixed test assertions to use
tool.metadata.categoryinstead oftool.category
- Fixed test assertions to use
- Files Fixed (3 total):
templates/full/tests/example.test.ts- Updated metadata accesstemplates/tool-multi/__tests__/index.test.ts- Updated metadata accesssrc/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
- Problem: Fresh projects created with
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 createusing v0.12.2 had 4 validation failures - Impact: Users couldn't run
typecheck,test,build, orlintcommands without errors - Root Causes:
- TypeScript type error:
result.messagestyped as unknown in full template (index.ts line 70) - Tool naming convention: Tool name was
example_tool(snake_case) but validation requires kebab-case - Build script failure:
tsupcommand had no entry point configured, causing "No input files" error - Lint failure: ESLint v9 installed but no
eslint.config.jsfile existed in scaffolded projects
- TypeScript type error:
- Solution:
- Added explicit type assertion for
result.messages:const messages = result.messages as Array<{ content: string }>; - Changed tool name from
example_tooltoexample-tool(kebab-case) in tool definition and test - Created
tsup.config.tswith proper entry points for all 4 templates (full, minimal, api, cli) - Created
eslint.config.jswith ESLint v9 flat config for all 4 templates - Added
@eslint/jsandtypescript-eslintdependencies to all template package.json files
- Added explicit type assertion for
- Files Fixed (15 total):
templates/full/src/index.ts- type assertiontemplates/full/src/tools/example.ts- kebab-case namingtemplates/full/tests/example.test.ts- test expectationtemplates/full/package.json- ESLint dependenciestemplates/full/tsup.config.ts- NEW FILEtemplates/full/eslint.config.js- NEW FILEtemplates/minimal/package.json- ESLint dependenciestemplates/minimal/tsup.config.ts- NEW FILEtemplates/minimal/eslint.config.js- NEW FILEtemplates/api/package.json- ESLint dependenciestemplates/api/tsup.config.ts- NEW FILEtemplates/api/eslint.config.js- NEW FILEtemplates/cli/package.json- ESLint dependenciestemplates/cli/tsup.config.ts- NEW FILEtemplates/cli/eslint.config.js- NEW FILE
- Templates Affected: All 4 main templates (full, minimal, api, cli)
- Verification: All templates now pass
typecheck,test,build, andlintcommands successfully
- Problem: Fresh projects created with
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 createhad TypeScript compilation errors out of the box - Impact: Users couldn't run newly created projects without manually fixing type errors
- Root Causes:
- Logger initialization bug (3 files):
createLogger()expects(name: string, options?: LoggerOptions)but templates called it with just an options object{ level: 'info' } - Type assertion bug (5 files):
result.messagesarray access caused "of type 'unknown'" errors due to missing type guards - Tool builder API bug (3 files): Templates used
createTool()with builder pattern (.name().description()...) butcreateTool()is a function taking 3 parameters. Builder pattern requirestoolBuilder()
- Logger initialization bug (3 files):
- Solution:
- Fixed logger calls:
createLogger({ level: 'info' })→createLogger('name') - Added safe array access:
result.messages[i].content→const msg = result.messages[i]; msg?.content || 'No response' - Fixed tool builder:
createTool()→toolBuilder()andcategory: 'utility'→category: ToolCategory.UTILITY - Updated tool generator in
commands/tool/create.tsto use correct API - Added
TOOL_CATEGORY_ENUMplaceholder replacement for multi-file tool template
- Fixed logger calls:
- Files Fixed (9 total):
templates/full/src/index.ts- logger + result.messagestemplates/full/src/tools/example.ts- tool buildertemplates/minimal/src/index.ts- result.messagestemplates/api/src/server.ts- loggertemplates/api/src/routes/agent.ts- logger + result.messagestemplates/cli/src/commands/chat.ts- result.messagestemplates/cli/src/commands/analyze.ts- result.messagestemplates/tool-multi/index.ts- tool buildersrc/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
- Problem: All projects created with
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/cligotERR_PNPM_WORKSPACE_PKG_NOT_FOUNDerror when pnpm tried to install packages - Root Cause:
pnpm publishwas not automatically converting workspace protocols to concrete versions as expected - Solution:
- Created
scripts/convert-workspace-deps.mjsto manually convertworkspace:*to concrete versions before publishing - Updated
scripts/publish.shto run conversion before publishing and restore workspace protocols after - Added
.npmrcwithauto-install-peers=truesetting - Added
@pnpm/exportable-manifestand@pnpm/read-project-manifestas dev dependencies
- Created
- Reference: https://github.com/pnpm/pnpm/issues/5094
- Verification: Published packages now have concrete versions in dependencies (e.g.,
"@agentforge/core": "0.12.1")
- Problem: Published packages on npm contained
[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'topackages/core/src/index.ts - New Public Exports:
createHealthChecker()- Health check system with liveness/readiness probescreateProfiler()- Performance profiling with execution time and memory trackingcreateAlertManager()- Alert rules and multi-channel notificationscreateAuditLogger()- 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.tsandmonitoring/health.tswhen both exported from package root - Solution: Renamed the tools lifecycle type from
HealthCheckResulttoToolHealthCheckResult - Migration: If you were using
HealthCheckResultfrom the tools lifecycle module, update imports toToolHealthCheckResult - Impact: Minimal - the tools lifecycle health check is a niche feature; most users will use the monitoring module's
HealthCheckResult
- Problem: Type name conflict between
[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 filesrenderTemplate(template, options)- Render template strings with variable substitutionsanitizeValue(value)- Sanitize values to prevent prompt injectionRenderTemplateOptions- 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
- Problem: Each vertical agent example had its own copy of
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
- Problem:
- 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
untrustedVariablesfor user-controlled data
- Problem: All
- 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 madefalse→'false'(truthy) and0→'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
- Problem:
- 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./promptsin consumer's cwd - Impact: Generated agents had prompt injection vulnerability and wouldn't work when published
- Solution: Updated template to use
trustedVariables/untrustedVariablesand passpromptsDirderived fromimport.meta.url
- Problem 1: Reusable-agent template passed plain object to
- Files Fixed:
packages/core/src/prompt-loader/index.ts- Fixed sanitizeValue order, conditional evaluation, and added testspackages/core/tests/prompt-loader/index.test.ts- Added tests for false/0 in conditionalsexamples/vertical-agents/customer-support/src/index.ts- Updated to use untrustedVariablesexamples/vertical-agents/code-review/src/index.ts- Updated to use untrustedVariablesexamples/vertical-agents/data-analyst/src/index.ts- Updated to use untrustedVariablespackages/cli/templates/reusable-agent/index.ts- Updated to use untrustedVariables and promptsDir
- Bug 1: Header stripping ineffective after newline removal
@agentforge/cli
- [P1] Reusable Agent Creation Failure 🔴 CRITICAL
- Problem:
agent:create-reusablecommand tried to moveprompt-loader.tsfile that no longer exists in template (removed during consolidation) - Impact: CLI command would throw
fs.moveerror and fail after template copy - Solution: Removed
prompt-loader.tsmove operation from file organization step - Files Fixed:
packages/cli/src/commands/agent/create-reusable.ts- Removed obsolete file movepackages/cli/tests/commands/agent/create-reusable.test.ts- Updated test expectations
- Problem:
Documentation
Outdated Prompt Loader References [P2]
- Problem: Documentation and example READMEs still referenced deleted local
prompt-loader.tsfiles after consolidation into@agentforge/core - Impact: Users following documentation would get import errors and outdated security patterns
- Solution: Updated all documentation to use shared
loadPromptfrom@agentforge/corewith proper security API - Files Updated:
docs-site/guide/advanced/vertical-agents.md- Updated to use@agentforge/coreimport and security-aware APIexamples/vertical-agents/customer-support/README.md- Updated import and addedpromptsDirresolutionexamples/vertical-agents/code-review/README.md- Updated import and addedpromptsDirresolutionexamples/vertical-agents/data-analyst/README.md- Updated import and addedpromptsDirresolution
- Problem: Documentation and example READMEs still referenced deleted local
Outdated File Tree Documentation [P2]
- Problem: CLI README and vertical agents guide still listed
src/prompt-loader.tsin file trees and key files sections - Impact: Documentation showed files that are no longer created/present
- Solution: Removed
prompt-loader.tsreferences and updated to reflect shared@agentforge/coreloader - Files Updated:
packages/cli/README.md- Updated scaffolded file tree, added note about shared loaderdocs-site/guide/advanced/vertical-agents.md- Updated key files sections for all 3 example agents
- Problem: CLI README and vertical agents guide still listed
Example Agents
- [P2] Missing promptsDir in Example Agents
- Problem: All 3 example agents called
loadPromptwithoutpromptsDirparameter, falling back toprocess.cwd() - Impact: When consumed as published packages, prompts wouldn't resolve (would look in consumer's cwd instead of package directory)
- Solution: Added
promptsDirresolution usingimport.meta.urlpattern to all example agents - Files Fixed:
examples/vertical-agents/customer-support/src/index.ts- Added promptsDir usingjoin(__dirname, '../prompts')examples/vertical-agents/code-review/src/index.ts- Added promptsDir usingjoin(__dirname, '../prompts')examples/vertical-agents/data-analyst/src/index.ts- Added promptsDir usingjoin(__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 fromsrc/to siblingprompts/directory
- Problem: All 3 example agents called
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
- Attack Vector: Malicious users could inject instructions through variables like
- 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:
RenderTemplateOptionsfor 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.tsexamples/vertical-agents/code-review/src/prompt-loader.tsexamples/vertical-agents/data-analyst/src/prompt-loader.tspackages/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 } });
- Security Model:
@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 inlanggraph/middleware/index.tsbut not re-exported fromlanggraph/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.tslines 118-138
- Problem: Middleware helpers (
Documentation
- Invalid Imports in Advanced Patterns Tutorial [P2]
- Problem: Tutorial showed imports of
createReasoningNodeandcreateActionNodefrom@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.mdlines 241-295
- Problem: Tutorial showed imports of
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:publishcommand 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 returnToolPathInfointerface with script availability flags; conditionally run test/build only if scripts exist; show clear skip messages - Location:
packages/cli/src/commands/tool/publish.tslines 29-60, 115-119, 183-237
- Problem: The
Scoped Package Names Misinterpreted as Paths [P2]
- Problem: Scoped package names like
@agentforge/myToolwere 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.tslines 131-139
- Problem: Scoped package names like
Scoped Package Common Location Resolution [P2]
- Problem: When running
tool:publish @scope/namefrom repo root, only looked forpackages/@scope/namebut most repos store scoped packages in unscoped folders likepackages/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.tslines 150-168
- Problem: When running
Tests
@agentforge/cli
- Added 6 comprehensive tests for
tool:publishcommand:- 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
byPrioritymetrics inexecutor.tsonly 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.tsline 211
- Problem: The
@agentforge/patterns
- Tool Call Deduplication Cache Key Nested Object Handling [P3]
- Problem: The
generateToolCallCacheKeyfunction 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.tsline 11-40
- Problem: The
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.tswith 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 differentmetadata.namethan 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 iftool.metadata.namedoesn't match registry key - Guidance: Clear error message guides users to use
remove()+register()for renaming - Location:
packages/core/src/tools/registry.tsline 202
- Problem: The
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, andinputundefined - 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) => rightto enable default support while maintaining correct semantics - Location:
packages/core/src/langgraph/state.tsline 76 - Note: If a node explicitly returns
{ key: undefined }, it will override the default (expected behavior - nodes should omit keys instead)
- Problem: Defaults declared in state configs were silently ignored for non-reducer channels, leaving fields like
@agentforge/cli
Agent Deploy Command False Success [P2]
- Problem:
agent:deploycommand usedsetTimeoutto 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.tsline 26
- Problem:
Tool Publish Command False Success [P2]
- Problem:
tool:publishcommand usedsetTimeoutto 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
execato runnpm publish - Added: New
publishPackage()utility function inpackages/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.tsline 51
- Problem:
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
undefinedoverrides default) - Test showing best practice (nodes should omit keys, not write
undefined) - Edge case coverage
- Regression test verifying defaults work without
@agentforge/cli
- Updated 3
agent:deploytests to verify error message and deployment instructions - Updated to 9
tool:publishtests 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: updatedWorkerswhich overwritesexecutionResult.workers - Solution: Merge
executionResult.workerswith 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.workersinstead ofstate.workers, losing all workers not in the partial update - Solution: Always start with
state.workersand merge in updates fromexecutionResult.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 ownscurrentWorkloadtracking - 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
- Added comprehensive JSDoc on
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 implementinvoke() - 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)
- Removed fallback to
- Consistent Logging: Replaced
console.warnwith 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()ortoolBuilderare 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, withexecute()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 toexecute() - 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 deprecationpackages/core/src/tools/helpers.ts- Reversed alias directionpackages/core/src/tools/builder.ts- Updated ToolBuilderpackages/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" });- What Changed:
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.tswas returningiteration: state.iteration + 1on line 186. Since theiterationFielduses 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 hitmaxIterationsmuch earlier than intended (e.g., after 3-4 cycles instead of 10). - Solution:
- Changed
iteration: state.iteration + 1toiteration: 1in supervisor node (line 186) - With additive reducer, returning
1means "add 1 to current iteration" - Added clarifying comment explaining the additive reducer behavior
- Changed
- 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.tsverifying 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 callingtool.invoke(), but according to the Tool interface,executeis required andinvokeis 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
- External tools (e.g., LangChain tools) that only implement
- Solution:
- Updated
executeWithRetryfunction to check forinvokefirst (LangChain compatibility), fall back toexecute(required method) - Throws clear error if neither method exists
- Uses
.call(tool, input)to preserve correctthiscontext
- Updated
- Impact:
- Better compatibility with external tools and LangChain ecosystem
- Prevents cryptic "invoke is not a function" errors
- All AgentForge tools (created via
createTool()ortoolBuilder()) 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
thiscontext when callingexecute - Preserve
thiscontext when callinginvoke - Retry logic with
executemethod - Retry logic with
invokemethod
- Tool with only
- Breaking Change: None - backward compatible bug fix
- Fixed runtime error for tools that only implement
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
HumanMessageinstead ofToolMessagein ReAct pattern - Problem: Observation nodes emitted messages with
role: 'tool'but were missingtool_call_id, and the reasoning node didn't handlerole: 'tool'case, causing tool outputs to fall back toHumanMessage. This mislabeled tool outputs and could degrade model behavior. - Solution:
- Added
tool_call_idfield to observation messages (line 336 inpackages/patterns/src/react/nodes.ts) - Added explicit handling for
role: 'tool'messages to create properToolMessageinstances (lines 63-70) - Added
tool_call_id?: stringtoMessageSchemato preserve the field during state validation (line 28 inpackages/patterns/src/react/schemas.ts)
- Added
- 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
- Fixed tool-result messages being treated as
fix: returnIntermediateSteps configuration now properly used [P3 Bug]
- Fixed
returnIntermediateStepsconfiguration parameter being accepted but never used - Problem: The scratchpad was always populated with intermediate steps regardless of the
returnIntermediateStepssetting, wasting memory and tokens when not needed. - Solution:
- Updated
createObservationNodeto acceptreturnIntermediateStepsparameter (line 299-308 inpackages/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)
- Updated
- 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
- When
- Tests: Added tests to verify both scenarios (scratchpad populated when true, empty when false)
- Breaking Change: None - backward compatible bug fix
- Fixed
chore: Updated confusing iteration counter comment for clarity
- Updated comment on line 110 of
packages/patterns/src/react/nodes.tsto clarify that the value1is being added to the iteration counter using an additive reducer, not setting it to 1 - Prevents confusion about how the iteration counter works
- Updated comment on line 110 of
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 theinvoke()method to inject worker registry, but did NOT wrap thestream()method. This meant streaming callers wouldn't see registered workers. - Solution:
- Added
_originalStreamproperty toMultiAgentSystemWithRegistryinterface (line 416) - Wrapped
stream()method inregisterWorkers()function (lines 494-510) following the same pattern asinvoke() - Ensures registered workers are merged into state for both
invoke()andstream()calls
- Added
- Impact:
- Streaming callers now see registered workers (same as invoke callers)
- Consistent behavior between
createMultiAgentSystem()andregisterWorkers() - 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
- Fixed stream method wrapping in standalone
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.nameinstead oft.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
MultiAgentSystemBuildertest to properly assert tool name extraction
- Breaking Change: None - backward compatible with both tool types
- Fixed tool name extraction in
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.taskdirectly instead ofstate.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
- New test file:
- Breaking Change: None - function signature and return type unchanged
- Fixed critical bug where
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/coreand@langchain/langgraphfrompeerDependenciestodependencies - Moved
zodfrompeerDependenciestodependencies - Impact: Users no longer need to manually install LangChain dependencies
- Benefit: Smoother installation experience -
npm install @agentforge/corenow automatically installs all required dependencies - Breaking Change: None - this is purely a packaging improvement
- Moved
@agentforge/patterns
- fix: Remove redundant peerDependencies
- Removed duplicate
peerDependenciessection (dependencies were already correctly listed independencies) - Impact: Cleaner package.json, no functional changes
- Removed duplicate
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, andtools/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.tsensure consistency - Testability - each tool can be tested independently
- Refactored Categories:
- Slack Tools (4 tools) -
slack.ts→slack/directory - HTTP Tools (3 tools) -
http-client.ts→http/directory - Scraper Tools (3 tools) -
scraper.ts→scraper/directory - HTML Parser Tools (3 tools) -
html-parser.ts→html-parser/directory - URL Validator Tools (3 tools) -
url-validator.ts→url-validator/directory - CSV Tools (4 tools) -
csv-parser.ts→csv/directory - JSON Tools (5 tools) -
json-processor.ts→json/directory - XML Tools (4 tools) -
xml-parser.ts→xml/directory - Transformer Tools (6 tools) -
transformer.ts→transformer/directory - File Operations (5 tools) -
file-operations.ts→operations/directory - Directory Operations (4 tools) -
directory-operations.ts→directory/directory - Path Utilities (8 tools) -
path-utilities.ts→path/directory - Date/Time Tools (5 tools) -
date-time.ts→date-time/directory - String Utilities (7 tools) -
string-utilities.ts→string/directory - Math Operations (4 tools) -
math-operations.ts→math/directory - Validation Tools (6 tools) -
validation.ts→validation/directory
- Slack Tools (4 tools) -
- 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 spacesgetConfluencePage- Retrieve a specific page by ID with full contentlistConfluenceSpaces- List all available Confluence spacesgetSpacePages- Get all pages within a specific spacecreateConfluencePage- Create new pages with optional parent pagesupdateConfluencePage- Update existing page content and metadataarchiveConfluencePage- 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, andtimeoutfromlanggraph/patterns/tolanggraph/middleware/for better semantic clarity and organization
Added
- project: Added
.github/copilot-instructions.mdto 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 channelsnotifySlack- Send notifications with @mentions to alert team membersgetSlackChannels- List available Slack channels (public and private)getSlackMessages- Read message history from channels- Configurable via environment variables (
SLACK_USER_TOKENorSLACK_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/corefrom 1.1.8/1.1.15 to 1.1.17 - Updated
@langchain/langgraphfrom 1.0.7/1.1.1 to 1.1.2 - Updated
@langchain/openaifrom 1.2.2/0.3.14 to 1.2.3 - Applied updates across all packages and CLI templates
- Updated
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/langgraphis a devDependency - Test count: 920 tests passing (down from 921 due to removed incompatible test)
- The test used
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
askHumantool in multi-agent systems- The Bug: Worker agents using
askHumanwould 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: truefeature- Worker nodes now generate worker-specific thread IDs (format:
{parent_thread_id}:worker:{workerId}) - ReAct agent compilation now supports
checkpointer: trueto use parent's checkpointer with separate namespace - Worker agents configured to use
checkpointer: truewhen created in multi-agent systems
- Worker nodes now generate worker-specific thread IDs (format:
- Impact: Worker agents can now use
askHumantool 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: truesupport 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 generationpackages/patterns/src/react/types.ts- Addedcheckpointer: truesupport to typespackages/patterns/src/react/agent.ts- Updated compilation to handlecheckpointer: truepackages/patterns/src/react/builder.ts- AddedwithCheckpointer()methodplayground/src/agents/*-agent.ts- Updated all worker agents to usecheckpointer: trueplayground/src/system/pty-agi.ts- Passcheckpointer: trueto all worker agents
- Documentation Added:
packages/patterns/docs/react-agent-guide.md- AddedwithCheckpointer()method documentationdocs-site/guide/patterns/react.md- Added "State Persistence with Checkpointer" sectiondocs-site/guide/patterns/multi-agent.md- Added "Human-in-the-Loop with Checkpointers" sectiondocs/NESTED_GRAPH_INTERRUPT_FIX.md- Comprehensive planning document with all implementation phases
- Test Results: All 921 tests passing ✅
- The Bug: Worker agents using
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 callingwithStructuredOutput()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
toolsparameter fromSupervisorConfig - Removed
maxToolRetriesparameter fromSupervisorConfig - 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
askHumantool 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 });
- Create a ReAct agent with
- 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
- Why This Was Removed: The feature had a critical design flaw - supervisors require
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
- Located in
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.tsat 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)
- Created
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()andisLevelEnabled()methods for performance optimization - All 322 tests passing (Patterns: 204, Tools: 118) with zero breaking changes
- Created 15 dedicated loggers across patterns and core components using consistent naming convention:
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:
# 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.jsFixed
- Release Script Bug - Fixed root package.json not being updated during releases
- Added root
package.jsonto PACKAGE_FILES array inscripts/release.sh - Ensures version consistency across all package files
- Added root
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
RoutingDecisionSchemato support bothtargetAgent(single) andtargetAgents(array) fields - Updated LLM-based routing to handle structured output and select multiple target agents
- Modified supervisor node to create multiple
TaskAssignmentobjects 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
- Enhanced
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
RoutingDecisionSchemato support bothtargetAgent(single) andtargetAgents(array) fields - Updated LLM-based routing to handle structured output and select multiple target agents
- Modified supervisor node to create multiple
TaskAssignmentobjects 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
- Enhanced
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
askHumantool 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
- Added GraphInterrupt detection and re-throw logic to executor node (
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
executeFnfor LangGraph runtime configuration support - Ensures
interrupt()errors bubble up correctly through all execution layers - Added detailed code comments explaining GraphInterrupt handling
- Fixed GraphInterrupt propagation in ReAct action nodes (
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
createLoggerandLogLeveldocumentation 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)
- Added
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
toolsparameter toSupervisorConfigfor tool-enabled routing - Added
maxToolRetriesparameter 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
askHumantool 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)
- Added optional
Examples
- New Multi-Agent Example -
05-supervisor-with-askhuman.ts- Demonstrates supervisor using
askHumantool for ambiguous requests - Shows clear vs. ambiguous request handling
- Best practices for tool-enabled supervisors
- Demonstrates supervisor using
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.md→vertical-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
checkpointerparameter to all 4 agent patterns:createReActAgent()- ReAct pattern with checkpointingcreatePlanExecuteAgent()- Plan-Execute pattern with checkpointingcreateReflectionAgent()- Reflection pattern with checkpointingcreateMultiAgentSystem()- 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)
- Added optional
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
extendspath to non-existenttsconfig.base.json - Added full standalone compiler options (templates should be self-contained)
- Fixed
rootDirfrom./srcto.(template files are at root level) - Fixed
includefromsrc/**/*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
- Removed invalid
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,HumanRequestStatustypes- 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 (
.mdfiles 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-reusablecommand
Changed
- Moved
HumanRequesttypes from tools to core (shared framework types) - Updated all documentation to reflect 70 tools
- Added
@langchain/langgraphas peer dependency (optional) for tools package
Fixed
- Lockfile Update - Updated
pnpm-lock.yamlto include reusable agent example dependencies- Fixes CI deployment issue with
--frozen-lockfileflag - Ensures reproducible builds in GitHub Actions
- Fixes CI deployment issue with
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_usedarray 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
agentproperty inWorkerConfigfor 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
executeFnapproach - Enhanced error handling and verbose logging
- New utility functions:
isReActAgent()andwrapReActAgent()
- New
Developer Experience
- Release Automation - Added comprehensive release tooling
scripts/release.sh- Automated version bump scriptscripts/publish.sh- Automated npm publishing scriptRELEASE_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
WorkerConfigtype 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 - Addedinvoke()as an alias toexecute()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
webSearchtool - 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_KEYfor 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
ToolRelationsinterface andToolRelationsSchemavalidation - Helps LLMs make better decisions about tool selection and ordering
Minimal Prompt Mode: Reduce token usage with native tool calling providers
- New
minimaloption inToolRegistry.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: trueflag
- New
Enhanced Prompt Generation: New options for
ToolRegistry.generatePrompt()includeRelations- Include tool relations in promptsminimal- 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 templatescreateReActAgent()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
modelparameter across all agent patterns- Changed all config interfaces to use
modelinstead ofllm - 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
- Changed all config interfaces to use
[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
dotenvpackage dependency - CLI Minimal Template: Added missing
.env.examplefile - 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/patternswas incorrectly referencing^0.2.0instead of^0.3.1 - All template
package.jsonfiles now correctly reference^0.3.1for 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
.npmrcconfiguration 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
__dirnameerror in ES modules by usingimport.meta.urlinstead - 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
ToolBuilderfor creating type-safe tools with Zod validationToolRegistryfor managing and discovering toolsToolExecutorwith 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