Skip to content

1.4.0

Choose a tag to compare

@damith-dasasian damith-dasasian released this 08 Oct 21:13
· 105 commits to main since this release

Tools for agents. fsl logs lets a coding agent read production logs with flags named
after SQL clauses, one JSON entry per line, and an error that names the valid fields when
it guesses one. /fsl-review reads CAPABILITIES.md from the installed package and
proposes how fsl could serve the code in front of it. Errors a framework catches are now
logged where it catches them, so a React boundary or a router no longer hides them. And
withLogging wraps scheduled and task handlers too. A production app ran each release
candidate before this release.

Added

  • withLogging wraps onSchedule and onTaskDispatched as well as onCall: pass ScheduledEvent or Request<Data> as the second type argument. userId comes from auth.uid when the event has one. CAPABILITIES.md no longer lists onRequest(, which withLogging cannot wrap.
  • fsl logs reads production logs through gcloud logging read, or .fsl-logs/ with --local, with flags named after SQL clauses (--where, --select, --group-by, --order-by, --limit, --distinct, --since, --repeats). One JSON entry per line; a field or flag it does not know is an error that names the valid ones.
  • fsl logs schema lists every label in the logs with counts and sample values (none for userId or keys containing email, name, phone), and keeps labels your code writes with --add. fsl logs attachments <logId> downloads an entry's files.
  • The logs folder ignores itself in git. Every folder fsl creates for logs (logLocalDir, .fsl-logs/) gets a .gitignore of * unless one exists, so the README's .gitignore step is gone. fsl logs now says on stderr when 0 entries matched, and fsl logs schema keeps samples for fsl's own functionName.
  • /fsl-logs skill for coding agents, installed by fsl install-skills.
  • /fsl-review [scope] skill and CAPABILITIES.md. The skill reads CAPABILITIES.md from the installed package and the code in the scope (the app, a folder or a file), and proposes how fsl could best serve that code. It proposes and stops. CAPABILITIES.md ships in the package: for each capability, what it gives, the code signals it fits, how to add it, and the mistakes to avoid.
  • fsl install-skills writes fsl-version (the package version) into each skill's frontmatter, and asks before removing an installed logs or query-logs; --force answers yes.
  • fsl doctor finding skill-out-of-date (warning): a skill's fsl-version differs from the fsl running doctor. Skills without fsl-version are skipped.
  • BaseLabels declares every label fsl writes, each with a one-line comment: repeatKey, repeatOf, repeatCount, firstSeen, lastSeen, sentLate, truncated, hasAttachments, logId, functionName, trace, run, slow, step, feedback.
  • Errors a framework catches are logged where it catches them. createRoot(el, { onCaughtError: handleReactError }) and app.config.errorHandler = handleVueError (new) send React and Vue render errors, handleReactError now accepts what React 19 passes, and the React Router and Vue Router adapters log their router's errors on their own (errorType RouteError: a loader or action error or 5xx response as ERROR, a 4xx response as WARNING; a guard that throws or a lazy route that fails to load as ERROR). The function an adapter returns stops its error listener too.
  • /testing capture.settled() waits for every send already started, so a test can read entries after a log call with attachments or after a repeat summary; log methods still return void.

Fixed

  • fsl doctor maps-published is an error only when nothing removes the maps before a deploy: no fsl upload-sourcemaps in a package.json script or hosting predeploy, and no **/*.map in hosting ignore. A plain npm run build no longer fails doctor.
  • fsl --help, -h and help, and --help or -h after any command, print the usage and exit 0 instead of running the command (install-skills --help ran the install). fsl install-skills with no terminal and no --force no longer answers N for you: it asks nothing, installs what needs no answer, names on stderr what it left and the --force that does it, and exits 1.
  • /fsl-review and CAPABILITIES.md no longer flag a data-fsl-view value from a fixed set of code names, no longer raise maxInstances from code alone, and name both versions when a whole-app review finds two installs that differ.

Removed

  • /query-logs skill, which depended on firebase-mcp-server. fsl install-skills offers to remove an installed copy.
  • /logs skill, replaced by /fsl-review: it carried facts in its own copy, which went stale. fsl install-skills offers to remove an installed copy.