Changelog
All notable changes to personaforge are documented here.
Format: Keep a Changelog · Semantic Versioning
Full changelog
The authoritative CHANGELOG.md lives in the repository root.
View on GitHub →
v2.3.0 — Current
Added
- 9 Extended Multi-Agent Orchestration Patterns (
@personaforge/orchestration) — Mixture-of-Agents (MoA), Actor-Critic loops, Socratic tutor guiding, Prompt Chaining pipelines, Program-of-Thought code sandbox runtimes, Skeleton-of-Thought parallel generation, Step-Back conceptual abstraction solvers, Rejection Sampling (Best-of-N) evaluations, and validation-driven Self-Correction. createGSDCoordinator()(Get Shit Done) — spec-driven workflow coordinator that executes project goals inPlan-Execute-Verify phases, using a workspace.planningfolder to isolate contexts.createRalphLoop()(RALF) — autonomous cycle executor that leverages fresh session isolation to prevent context bloat while propagating iteration summaries.MastermindContext Compression (@personaforge/compression) — a multi-stage intelligent context compression suite featuring:CacheAligner(KV-cache prefix alignment).- Specialized crushers (
smart-crusherfor JSON, minifiers for Code, log timestamp/duplicate aggregators, XML, CSV). - Sliding-window group budget enforcers to prevent orphaned tool call/result pairs.
- Code & Context Reduction (CCR) annotations with
retrieveToolfor on-demand details recall.
v1.1.7
Added
DbScheduleStore(@personaforge/scheduler) — bridgesScheduleManagerwith anyAgentDbbackend. Persist schedules to SQLite, Postgres, MySQL, MongoDB, Redis, DynamoDB, or Turso with no custom glue code. See Scheduler → Production persistence.- DB health in
/healthendpoint —createHttpServicenow accepts adb?: AgentDboption. When provided,GET /health(and/v1/health) runs a livedb.health()probe. Returns HTTP 503 with{ status: 'degraded' }when the database is unreachable.
Fixed
@personaforge/db—uuid()security — all 8 backends (InMemory, SQLite, Postgres, MongoDB, Redis, JSON, MySQL, DynamoDB, Turso) now generate IDs withcrypto.randomUUID()instead of the previousMath.random()-based implementation.@personaforge/db—init()race condition — concurrent callers no longer double-initialize the connection. All async backends (Postgres, MongoDB, MySQL, DynamoDB, Turso) now share a single_initPromiseguard.PostgresAgentDb—getKnowledgeItems(),getTrace(), andgetTraces()now correctly re-serialize JSONBcontentandmetadatacolumns to string (thepgdriver returns these as parsed objects).MongoAgentDb— allfindOneandfindcalls now include{ projection: { _id: 0 } }so MongoDB's internal_idfield is never included in returned rows.DynamoDbAgentDb— constructor now callsvalidateTableNames()to catch invalid table names at construction time instead of silently failing at runtime.DbSessionStore—now()helper now returns Unix epoch seconds (Math.floor(Date.now() / 1000)) to match theAgentDbtimestamp contract (was returning milliseconds, causingcreated_at/updated_atto be off by ×1000).TursoAgentDb— single-row casts (LibSqlRow → SessionRow,MemoryRow, etc.) now use theas unknown as Tdouble-cast pattern, fixing TypeScript strict-mode errors.PostgresAgentDb—close()method was accidentally stripped during a refactor; restored.- Unified class API —
SimpleAgentandLegacyAgentwere removed from public exports;Agentis now the only class-based API and includes both legacy defaults and modern fluent methods. - Durable runtime lifecycle correctness — resume now rejects terminal workflows consistently; terminal-state handling no longer allows invalid resume paths.
- CQRS error propagation — event-bus handler failures are now surfaced via
AggregateErrorafter handlers run. - State machine lifecycle hardening —
start()is idempotent; transition commits insend()andjumpTo()are atomic (state changes apply only after targetonEntrysucceeds). - Snapshot restore semantics — snapshots persist startup status (
started); restore defaults legacy snapshots to started to avoid duplicate initialonEntryexecution.
v1.1.6
Changed
Monorepo restructure — packages fully independent
- All source code now lives in independently-built workspace packages under
packages/. Thesrc/directory is retained as a backward-compatible re-export barrel — no breaking API changes. packages/toolsrewritten with clean functionaldefineToolimplementations; removed all class-based files with broken relative imports.packages/test-utilsis now a fully standalone package:createMockLLM,createMockAgent,runScenariowith zero cross-package dependencies.- CI pipeline updated to 4 sequential jobs:
typecheck → lint → test (Node 18 / 20 / 22) → build all packages.
Fixed
router/selectForBudget— removed incorrect× 1,000,000scaling; budget comparison is now a direct dollar-per-million comparison.adapter-redis/session-store— removed unnecessary optional chain on non-nullhGetAllresult; fixed template literal number type.tools/types.ts— migrated from deprecatedZodTypeAny→z.ZodType;_defprivate field access replaced with.def.- Removed 33 broken package copies that had relative
src/-path imports causing circular resolution failures. - Documentation URLs updated from
rvuyyuru2.github.io/agent-frameworktopersonaforge.github.io/personaforgethroughout all docs. - Version consistency:
ARCHITECTURE.mdandSECURITY.mdnow match thepackage.jsonversion.
Security
SECURITY.md: addedShellToolsandbox requirements section documenting blocked command patterns.SECURITY.md: documentedRedisRateLimiteras the required solution for multi-instance distributed rate limiting.README.md: qualified audit-logging claim — removed unqualified SOC 2 / HIPAA label; added compliance footnote.
v1.1.0
Added
agent.stream() — async iterable streaming on every agent
- Every
CreateAgentResultnow has a built-instream(prompt, options?)method - Returns an
AsyncIterable<string>— chunks arrive as the LLM generates - Works with
for awaitloops; no extra setup; accepts allrun()options exceptonChunk
ts
for await (const chunk of agent.stream('Explain quantum computing')) {
process.stdout.write(chunk);
}defineAgent() builder — budget(), checkpoint(), adapters()
.budget(config)— USD spend caps without dropping down tocreateAgent().checkpoint(store)— durable crash recovery wired in one line.adapters(registry)— plug in adapter registry or explicit bindings- Full builder method table now documented in Creating Agents
Performance
AgenticRunner — Zod→JSON Schema cached per agent (not per run)
- Tool definitions (Zod → JSON Schema) are computed once in the constructor and reused
- Zero
toolToLLMDef()overhead on hot-pathrun()calls after initial agent creation
Tool execution — timer leak fixed
Promise.racetimeout timer is now always cleared via.finally()on every tool call- Prevents 30-second timer handles accumulating in long-running processes
- Timing now uses
performance.now()for sub-millisecond accuracy
AuditPlugin — O(1) event queries
- Internal
Mapindexes maintained on everyonEvent()call getEventsByType(),getEventsForNode(),getEventsForExecution()are all O(1) index lookups- Previously O(n) full scans — eliminates bottleneck on high-event-volume workflows
OpenTelemetryPlugin — OTel module imported once and cached
- The
@opentelemetry/apidynamic import is now cached after the first successful load - Previously re-imported on every
onNodeStart()call
v1.0.0
Added
Reasoning Module
ReasoningManager— chain-of-thought and self-critique loops over anygeneratefunctionReasoningEventTypediscriminated union:step,action,complete,errorNextActiontyped decision point:continue | finish | backtrack | escalateReasoningStore— pluggable trace persistence (audit, replay, fine-tuning)
Scheduler Module
ScheduleManager— CRUD for cron-based job schedules with pluggableScheduleStore+ScheduleRunStoreInMemoryScheduleStore(dev) /SqliteScheduleStore(prod)- In-process handler registry — no HTTP endpoint required
- Full lifecycle:
create / update / delete / enable / disable / triggerNow / listRuns
CompressionManager
- Transparent context-window compression before LLM calls;
truncate | summarise | rollingstrategies
ContextProvider
- Retrieves and injects grounding documents into the system prompt or user message at run time
- Pluggable
ContextBackend:InMemoryContextBackend,SqliteContextBackend
Freedom Layer — bare / compose / pipe
bare(opts)— zero-defaults agent; caller owns LLM, tools, hooks, everythingcompose(...agents, opts?)— sequential pipeline; output of each agent → input of nextcomposeoptions:when(conditional routing) +transform(reshape data between steps)pipe(agent).then(agent).run(prompt)— builder-style equivalent tocompose()
Eval Regression Suite
runEvalSuite— labeled dataset, per-sample scoring, baseline comparison, CI exit codeInMemoryEvalStore/SqliteEvalStore— durable baseline persistence across CI jobssetBaseline: true— promote current run as new reference;regressionThreshold— allowable score drop
Real-World Example Library (4 new runnable examples)
examples/reasoning-agent.ts— Incident Triage Bot (no API key needed)examples/scheduled-agent.ts— Nightly Market Digest (no API key needed)examples/code-review-pipeline.ts— PR Code Review Pipeline (no API key needed)examples/eval-regression.ts— CI Eval Regression Guard (no API key needed)
Documentation
- 19 · Incident Triage Bot —
ReasoningManager, event streaming - 20 · Scheduled Agent Jobs — cron scheduling, run history
- 21 · Code Review Pipeline —
bare(),compose(),pipe() - 22 · Eval Regression Guard —
runEvalSuite, CI baseline guard
v0.7.0
Added
Budget Enforcement
budget?: BudgetConfigadded toCreateAgentOptions— hard USD caps per run and per userBudgetEnforcerinstantiated in factory,recordAndCheck(userId)called after the run loopuserId?: stringadded toAgenticRunConfigfor per-user cap enforcement
HITL Approval HTTP Endpoints
GET /v1/approvals— list pending approvalsPOST /v1/approvals/:id— submit decision{ approved, comment, decidedBy }approvalStore?: ApprovalStoreadded toCreateHttpServiceOptions
Distributed Trace Context
- W3C
traceparent/tracestateextraction from incoming HTTP request headers traceIdfrom incoming trace propagated in JSON and SSE responsessrc/observability/trace-context.ts—extractTraceContext(),injectTraceContext()
v0.6.0
Added
Testing Module (personaforge/testing)
MockToolRegistry— records all invocations;calls(),lastCall(),reset()createTestAgent()— zero-config test harness withMockLLMProvider+MockSessionStorecreateTestHttpService()— integration test helper on a random port
HTTP Runtime
X-Request-IDcorrelation header on every responserateLimitmiddleware option inCreateHttpServiceOptionsauditStoreoption — SQLite-backed persistent audit log- WebSocket transport (
websocket: true) — attaches to existinghttp.Server - Admin API (
adminApi: true) —/admin/health,/admin/agents,/admin/audit,/admin/stats,/admin/checkpoints
Adapter System (personaforge/adapters)
- 20-category adapter system covering SQL, NoSQL, vector, cache, object storage, message queues, observability, embedding, session, memory, guardrail, RAG, tool registry, auth, rate limiting, audit log
createProductionSetup()— opinionated full-stack wiring with progressive upgrade path
LLM Router (personaforge/llm)
LLMRouter— intelligent routing by task type, complexity, and strategy- Four strategies:
balanced,cost,quality,speed - Factories:
createBalancedRouter,createCostOptimizedRouter,createQualityFirstRouter,createSpeedOptimizedRouter
Deployment Templates (/templates)
Dockerfile,docker-compose.yml,fly.toml,render.yaml,k8s.yaml- Grafana dashboard JSON (
grafana-dashboard.json)
DX Improvements
defineTool()helper — AI SDK-style fluent builder with Zod schemas,needsApproval, streaming hookscreateWorkflow().then(step).commit()— Mastra-style inspired typed step workflowscreateStepWorkflow,StepWorkflow,StepWorkflowBuilder,StepWorkflowStepexports
Resilience
withResilience()— circuit breaker + rate limiter + retry + health check wrapperRedisRateLimiter— distributed rate limiting via Redis
Secret Manager (personaforge/config)
createSecretManager()with adapters:EnvSecretManagerAdapter,AwsSecretsManagerAdapter,AzureKeyVaultAdapter,VaultAdapter,GcpSecretManagerAdapter
Orchestration Extensions
AgentRouter— capability-based, round-robin, least-loaded routingHandoffProtocol— structured agent-to-agent task handoff with tracingConsensusProtocol— multi-agent voting (majority, unanimous, weighted, best-of-n)
v0.5.0
Added
- Checkpoint/resume for long-running agents —
checkpointStore?inAgenticRunnerConfig createSqliteSessionStoreSync— sync init, safe for factory use- Persistent user profiles and learning modes
- Eval dataset persistence —
EvalStore,InMemoryEvalStore,SqliteEvalStore,runEvalSuite - Plugin system —
personaforge/pluginswith built-in logging, rate-limit, telemetry plugins - Contracts layer —
personaforge/contractsfor shared interfaces without runtime code
v0.4.0
Added
- Full adapter system for all infrastructure categories
- Multi-tenancy with
createTenantContext() - JWT RBAC on HTTP routes
- SOC 2 / HIPAA audit trail
v0.3.0
Added
- ReAct agentic loop with
createAgent createHttpServiceHTTP runtime with OpenAPI- 50+ built-in tools
- RAG / KnowledgeEngine
v0.1.0
Initial release.