walkerOS v3.2.0
Changes
Add chainPath to ingest metadata and support path-specific mocks via --mock destination.ga4.before.redact='...'
Unify duplicated CLI patterns for reliability and consistency
- Add unified event validator with graduated levels (strict/standard/minimal)
- Fix package resolution in simulate to respect packages.path from flow config
- Extract shared readStdinToTempFile utility, remove copy-paste dynamic imports
- Standardize duration output to milliseconds (matching MCP schema contract)
- Fix temp file cleanup in run command (hot-swap accumulation, shutdown handler)
- Fix simulator bare /tmp cleanup bug
- Unify URL fetching into shared fetchContentString, eliminate temp file
roundtrip - Refactor loadJsonFromSource as thin wrapper around loadJsonConfig
- Remove unused downloadFromUrl function
Replace externalServer hack with typed sourceSettings override in bundle wrapper
Flow graph architecture: symmetric before/next hooks, mutable Ingest, per-destination isolation.
- Add symmetric
before/nextto all step types (sources, transformers, destinations) - Add
Ingestinterface with mutable_metatracking (hops, path) - Parameterize
Transformer.Fn<T, E>andResult<E>on event type - Support
Result[]return from transformers for fan-out - Remove
Object.freeze(ingest)— ingest is fully mutable - Upgrade
setIngestto create typedIngestwith_meta - Clone ingest per destination to prevent cross-contamination
- Add
createMockContexttest utility for context construction
Generalize queue flush: refresh user/globals/consent on queued events and flush
after any state mutation command
Wire initConfig.hooks into collector instance. Simulation uses
prePush/postDestinationPush hooks for event capture. Hooks are wired by
startFlow before events fire.
Polyfill fetch and navigator.sendBeacon in JSDOM during web simulation to prevent throws and capture network calls
Resolve transitive dependencies from local path packages automatically
Improve flow_simulate tool description, warnings, and prompts to explain require, consent, mapping, and policy behavior. Agents using the MCP now get actionable guidance when destinations are pending or events are silently skipped.
Add conditional routing and native cache as built-in config properties on
sources, transformers, and destinations.
Routing: NextRule[] in next/before properties enables conditional step
chaining, replacing @walkeros/transformer-router.
Cache:
- Cache rules use the same match syntax as routing (MatchExpression)
- Source cache: full pipeline caching with respond interception
- Transformer cache: step-level memoization, chain continues
- Destination cache: event deduplication
- Update rules modify cached results on read via getMappingValue
- Default per-collector memory store with namespaced keys
compileMatcher upgraded to use getByPath for scoped dot-paths (ingest.method,
event.name). Removed @walkeros/server-transformer-cache (replaced by native
cache).
Support path-based package: references on flow config components
Add include/exclude destination filter to collector.push PushOptions.
Sources can now control which destinations receive their events.
Destination simulation uses the full collector pipeline with include filter,
giving production-identical event enrichment, consent, and mapping.
Transformer respond wrappers now propagate through the pipeline
Accept non-JSON POST bodies in all server sources
Server sources no longer reject non-JSON bodies with HTTP 400. Instead, they push an empty event {} to the collector, enabling source.before transformers to process raw input via ingest. Raw body is available through ingest mapping (e.g., "rawBody": "body").
Support single .ts files and directories without package.json as local packages in flow.json
Add --snapshot flag to push command for setting up global state before bundle execution
Add useHooks wrapping to store get/set/delete operations
Refactor bundler to two-step compilation: ESM code compilation + platform
wrapper. Config changes no longer require full rebuilds. Production bundles
carry zero dev/simulate code.
Unify simulation for sources, destinations, and transformers through the push
command.
- All step types simulate via
pushwith auto-env loading and call tracking - Add
--simulate transformer.Xto invoke a transformer directly with an event - Before chains run as mandatory preparation; next chains are skipped
- Source simulation captures at the collector.push boundary, preserving the
full before chain - Hooks (prePush/postDestinationPush) capture events instead of manual overrides
- Timer interception flushes setTimeout/setInterval deterministically for
async patterns (debounced batches, detached Promise chains) - MCP migrated to the push-based simulation pipeline
- Legacy simulate code removed