Repository navigation
1.4.0
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
withLoggingwrapsonScheduleandonTaskDispatchedas well asonCall: passScheduledEventorRequest<Data>as the second type argument.userIdcomes fromauth.uidwhen the event has one.CAPABILITIES.mdno longer listsonRequest(, whichwithLoggingcannot wrap.fsl logsreads production logs throughgcloud 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 schemalists every label in the logs with counts and sample values (none foruserIdor keys containingemail,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.gitignoreof*unless one exists, so the README's.gitignorestep is gone.fsl logsnow says on stderr when 0 entries matched, andfsl logs schemakeeps samples for fsl's ownfunctionName. /fsl-logsskill for coding agents, installed byfsl install-skills./fsl-review [scope]skill andCAPABILITIES.md. The skill readsCAPABILITIES.mdfrom 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.mdships 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-skillswritesfsl-version(the package version) into each skill's frontmatter, and asks before removing an installedlogsorquery-logs;--forceanswers yes.fsl doctorfindingskill-out-of-date(warning): a skill'sfsl-versiondiffers from the fsl running doctor. Skills withoutfsl-versionare skipped.BaseLabelsdeclares 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 })andapp.config.errorHandler = handleVueError(new) send React and Vue render errors,handleReactErrornow accepts what React 19 passes, and the React Router and Vue Router adapters log their router's errors on their own (errorTypeRouteError: a loader or action error or 5xx response asERROR, a 4xx response asWARNING; a guard that throws or a lazy route that fails to load asERROR). The function an adapter returns stops its error listener too. /testingcapture.settled()waits for every send already started, so a test can readentriesafter a log call with attachments or after a repeat summary; log methods still returnvoid.
Fixed
fsl doctormaps-publishedis an error only when nothing removes the maps before a deploy: nofsl upload-sourcemapsin apackage.jsonscript or hostingpredeploy, and no**/*.mapin hostingignore. A plainnpm run buildno longer fails doctor.fsl --help,-handhelp, and--helpor-hafter any command, print the usage and exit 0 instead of running the command (install-skills --helpran the install).fsl install-skillswith no terminal and no--forceno longer answers N for you: it asks nothing, installs what needs no answer, names on stderr what it left and the--forcethat does it, and exits 1./fsl-reviewandCAPABILITIES.mdno longer flag adata-fsl-viewvalue from a fixed set of code names, no longer raisemaxInstancesfrom code alone, and name both versions when a whole-app review finds two installs that differ.
Removed
/query-logsskill, which depended onfirebase-mcp-server.fsl install-skillsoffers to remove an installed copy./logsskill, replaced by/fsl-review: it carried facts in its own copy, which went stale.fsl install-skillsoffers to remove an installed copy.