All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Cross-platform npm publishing — Publish workflow now builds native addons on Linux (glibc + musl) and Windows in parallel, uploads artifacts, and combines them into a single cross-platform npm package
- musl/Alpine support — Added
x86_64-unknown-linux-muslNAPI build target forhyperlight-analysis; CI cross-compiles musl from glibc runner withmusl-tools - Runtime NAPI platform detection — Binary launcher uses napi-rs generated
index.jsforjs-host-api(full musl/glibc/win32 detection) and probeslddforhyperlight-analysismusl vs glibc resolution - ha-modules.d.ts sync test — New test in
dts-sync.test.tsregeneratesha-modules.d.tsand compares to committed version, catching drift when module exports/types change without re-running the generator
- Cross-platform .node loading —
build-binary.jsno longer hardcodes the NAPI triple at build time; copies all available platform.nodefiles and uses runtime detection to load the correct one - postinstall script — Fixed missing closing brace in
package.jsonnode -esnippet that caused SyntaxError duringnpm install - Publish artifact ordering — Download artifacts AFTER
just setupto avoid symlink/junction clobber whenbuild-hyperlightre-createsdeps/js-host-api - ha-modules.d.ts stale types — Regenerated with
ShapeFragmentreturn types (wasstring) to match upstream ShapeFragment safety system - Node.js launcher URL — Use
pathToFileURL(cjs).hrefinstead of manualfile://concatenation (fixes invalid URLs on Windows) - Unix PATH instructions — Removed backslash escaping of
$PATHin post-build output - pattern-loader test cleanup —
afterEachonly swallowsEBUSY/EPERMon Windows; rethrows real errors on other platforms
- Publish workflow — Replaced single-platform
ubuntu-latestpublish with multi-platform matrix build (Linux KVM, Linux musl, Windows WHP) followed by artifact-combining publish job on self-hosted runner - Publish runner —
publish-npmjob now runs on self-hostedhld-kvm-amdrunner (needs Rust toolchain forjust setup)
- Windows WHP support — HyperAgent now runs on Windows with hardware-isolated Hyperlight micro-VMs via Windows Hypervisor Platform (WHP)
- Justfile:
[windows]recipes forbuild-hyperlight,resolve-hyperlight-dir,start-debug - Justfile:
runtime-cflagsforward-slash fix for clang cross-compilation on Windows build-binary.js:.cmdlauncher and platform-aware post-build output with PowerShell instructionsagent/index.ts:pathToFileURL()for ESM plugin imports on Windowsbuild.rs: forward-slash CFLAGS for clang on Windowscode-validator/guest:win32-x64-msvcNAPI build target.gitattributes: enforce LF line endings across platformsREADME.md: document Windows WHP as supported prerequisite
- Justfile:
- CI Windows matrix —
pr-validate.ymlnow includes Windows WHP build/test entries;publish.ymlupdated for Windows builds - Deterministic VM dispose —
invalidateSandbox()now callsdispose()onLoadedJSSandboxandJSSandboxfor deterministic VM resource cleanup instead of relying on V8 GC - PPTX ShapeFragment safety system — Branded opaque type for shape builders with validation engine (#14)
- Duplicate error messages —
event-handler.tsnow suppresses duplicate "Tool execution failed" output when the handler has already displayed the error - MMIO error detection —
sandbox/tool.jsdetects MMIO unmapped-address errors in both compilation and runtime paths, providing clearer error messages - Plugin O_NOFOLLOW on Windows —
fs-readandfs-writeplugins fall back gracefully whenO_NOFOLLOWis unavailable (Windows), relying onlstatSyncpre-check for symlink safety - Test Windows compatibility — Symlink tests skip with EPERM on Windows (
path-jail,fs-read,fs-write);dts-syncusesrmSyncinstead of shellrm -rf;pattern-loaderuses uniqueos.tmpdir()paths to avoid Windows Defender EBUSY locks - CI docs-only job — Added missing checkout step to docs-pr CI job (#12)
- postinstall script — Fixed missing closing brace in
package.jsonpostinstallnode -esnippet
- Surrogate pool env vars —
agent/index.tssetsHYPERLIGHT_INITIAL_SURROGATES=2andHYPERLIGHT_MAX_SURROGATES=24on Windows - hyperlight-js dependency — Updated to include
dispose()API and npm audit fixes - Build system — Eliminated
deps/hyperlight-jsgit clone; Cargo dep now resolves hyperlight-js checkout via Cargo's git cache (#13) - npm scripts —
prepareandpostinstallusenode -einstead of POSIX shell for cross-platform compatibility
- npm audit fixes — Updated
picomatchandbrace-expansionacross all workspaces (root,code-validator/guest,deps/js-host-api)
v0.1.4 - 2026-03-24
- Plugin schema extraction — Schema extraction failed on compiled
.jsfiles, causingapplyInlineConfigto find no recognised keys andallowedDomainsto never be set. Now prefers.tssource for schema parsing (read-only) with TOCTOU-safe fallback to.js - Pre-approved plugin enable — Fast-path (approved plugins skip audit) failed to call
loadSource(), leavingplugin.sourcenull.verifySourceHash()then returned false, silently disabling the plugin on sandbox rebuild - CI docs-only skip — PR validation now skips heavy CI jobs (lint, build, test) when only markdown files change.
skills/**andpatterns/**are treated as code (they have integrity tests)
v0.1.3 - 2026-03-24
- Plugin loading under npm — Plugins failed with "Stripping types is currently unsupported for files under node_modules" when installed via npm. Plugin loader now prefers compiled
.jsover.tswhen running undernode_modules, while still using.tsin dev mode for live editing - Plugin hash/approval consistency —
computePluginHash(),loadSource(), andverifySourceHash()now use centralisedresolvePluginSource()helper to ensure hashing and import use the same file
v0.1.2 - 2026-03-23
- npm global install — Launcher script now resolves symlinks before computing lib/ path, fixing
Cannot find module 'hyperagent-launcher.cjs'when installed vianpm install -g(symlink from npm bin dir broke relative path resolution) - PATH invocation — Handle bare command name (no slash in
$0) by resolving viacommand -vbefore symlink resolution
v0.1.1 - 2026-03-23
- Version display — Strip leading "v" prefix from
VERSIONenv var and build-time injection to prevent "vv0.1.0" in banner display - Plugin validation — Reject plugin manifest versions with "v" prefix (e.g. "v1.0.0") to prevent double-prefix in display
- npm install — Skip
postinstall/preparescripts gracefully when installed as a published npm package (scripts only exist in the source repo) - Rust lint — Fix clippy errors:
unwrap_used,manual_strip, dead code,needless_range_loop; allowexpect_usedon static regex patterns in plugin scanner
- CI quality gate — PR validation now runs
just lint-all+just test-all, adding Rust clippy and fmt checks that were previously missing - npm registry — Publish to npmjs.org (public) instead of GitHub Packages (required custom registry config)
- Just recipes renamed —
lint-rust→lint-analysis-guest,fmt-rust→fmt-analysis-guest,test-rust→test-analysis-guestfor clarity - Rust formatting — Applied
cargo fmtacross all Rust workspaces (analysis-guest and sandbox runtime) - cfg(hyperlight) — Added
check-cfgtonative-globalsCargo.toml to silence warnings
v0.1.0 - 2026-03-20
Initial public release.
-
Core Agent
- Interactive REPL with GitHub Copilot SDK integration
- Sandboxed JavaScript execution in Hyperlight micro-VMs
- MinVer-style versioning from git tags
- Session management with persistence and resume
- Context compaction for infinite conversations
- Multi-model support with mid-conversation switching
-
Plugin System
fs-read- Read-only filesystem access (path-jailed)fs-write- Write-only filesystem access (path-jailed)fetch- HTTPS fetch with SSRF protection- LLM-based plugin security auditing with canary verification
- Plugin approval persistence with content-hash invalidation
-
Skills System
- Domain expertise via markdown files with YAML frontmatter
- Auto-matching via trigger keywords
- Tool restrictions per skill
- Built-in skills: pptx-expert, web-scraper, research-synthesiser, data-processor, report-builder, api-explorer
-
Patterns System
- Code generation templates for common tasks
- Built-in patterns: two-handler-pipeline, file-generation, fetch-and-process, data-transformation, data-extraction, image-embed
-
Resource Profiles
- Bundled limit and plugin presets
- Stackable profiles (max limits, union of plugins)
- Built-in profiles: default, file-builder, web-research, heavy-compute
-
Module System
- Built-in modules: str-bytes, crc32, base64, xml-escape, deflate, zip-format, ooxml-core, pptx, pptx-charts, pptx-tables
- User-defined modules persisted to ~/.hyperagent/modules/
- Shared state across handler recompiles via ha:shared-state
-
Code Validation
- Pre-execution validation in isolated Rust guest (hyperlight-analysis-guest)
- QuickJS parser for syntax checking
- Import validation against available modules
- Plugin source scanning for dangerous patterns
-
CLI Features
- Non-interactive mode with
--promptand--auto-approve - Slash commands for runtime configuration
- Command suggestions extracted from LLM output
- Ctrl+R reverse history search
- Session transcript recording
- Non-interactive mode with
- Hardware isolation via Hyperlight micro-VMs (KVM/MSHV/WHP)
- Tool gating blocks all SDK built-in tools (bash, edit, grep, read, write)
- LLM-based plugin security auditing with anti-prompt-injection canaries
- Code validation before execution in isolated sandbox
- Path jailing for filesystem plugins
- SSRF protection for fetch plugin (DNS + post-connect IP validation)