EYAS v0.8.20-beta — A front door, and its locks
EYAS had no public face: the overview page lived in the repository, the
documentation was only reachable from a running instance, and the README still
described a smaller project than the one in the tree.
It has one now — https://eyssen.github.io/eyas/ — and turning the repository's
scanners on for the first time found real defects behind it, which this release
fixes.
A public site
- The landing page and the docs are published together.
/serves the
product overview,/docs/<lang>/the 392-page documentation in all six
languages. One build script assembles both, and CI runs the same script
rather than a copy of its logic. - The landing page speaks six languages, not two. Every string exists per
language in the page itself, so it stays a single self-contained file. The
language is chosen before first paint from?lang=, the last choice, or the
browser, and English renders without JavaScript. - A beta callout and an installation panel replaced a mock terminal line.
The callout asks for reports and links the issue tracker; the panel carries
the three real install routes and a link to the getting-started guide that
follows the language switch.
Security fixes
- Email header injection in both address formatters. A display name was
written into a header without removing CR/LF, so a name carrying
\r\nBcc: …added a recipient. The quote was escaped but the backslash was
not, so a name ending in one escaped its own closing quote. - The CLI MCP bridge secret came from
Math.random()plus a timestamp.
That secret authenticates bridge sessions; it now takes 24 bytes from the
CSPRNG and encodes no clock. - Notification event patterns are globs, but only the dot was escaped
before the star was expanded, leaving every other regex metacharacter live:
board.(task).*matchedboard.task.assignedthrough a regex group. - Generated skill frontmatter escaped quotes but not backslashes, the
key-injection its own guard was written to prevent. - The research HTML stripper missed
</script >and</script foo>, kept
the contents of comments, and kept a tag left unterminated by truncation. - Four advisories patched: drizzle-orm (SQL injection via improperly
escaped identifiers), nodemailer,@anthropic-ai/sdk, and sharp in the docs
package. Measured against a baseline: the suite fails identically before and
after, so the upgrades change nothing else.
Around the repository
- A security policy, a contributing guide and issue templates. Private
vulnerability reporting is on, andSECURITY.mdnow names that channel
instead of leaving reporters with a public issue.CONTRIBUTING.mdleads
with what a contributor cannot guess: this repository is a mirror. - The README's figures are measured, not estimated. 57 modules, 228 skills,
7,200+ tests across 747 files, twelve provider submodules including the CLI
engines that need no API key, and the six setup-wizard steps the code
actually registers.