Synced main specs (tools-app, fingerprint-wizard); change archived at 2026-09-30-fpagent-tools-ui. Includes openspec project config and the agent skills installed with it.
3.1 KiB
3.1 KiB
Proposal: fpagent-tools-ui
Why
The python server (app.py) that served this project's enrollment UI is being
replaced by the fpagent binary (see fingerprint-agent), which owns scanner
capture on 127.0.0.1:9000 and enforces PocketBase + OpenFGA authorization per
enroll. The UI must be re-modeled onto fpagent's enroll-only event vocabulary
and YOUreka Auth, or this repo has no reason to exist alongside fpagent.
What Changes
- BREAKING: Add a new Express app in
tools/that replacesapp.pyas the UI host: a landing page linking two YOUreka tools — Image Cropper (https://smart-pxa.yrka.app) and Fingerprint Agent (/fingerprint). - New
/fingerprintenrollment wizard (re-modeled frompublic/capture/) that captures via fpagent Socket.IO:fprint-enroll {token, domain, finger, reference}→fprint-enroll-status→fprint-enroll-done, withfprint-enroll-stopcancel andagent-helloversion display. - Operator authentication via YOUreka Auth cookie session (portal
/api/web/authredirect flow; PocketBase session refresh server-side), same pattern asone-school-chat. - Domain selection: a hardcoded catalog (UNICAL
uc, Metropolitan Hotelmtr, UCTHucth, UNICAL Radio Internationaluri, YOUrekayrka) filtered after login against the same public OpenFGA verify URL fpagent uses; only permitted domains are offered. Results are cached per operator for 5 minutes, with an explicit refresh control available once the cache elapses. - a2loft integration (staff lookup, fingerprint save) kept, but moved behind
same-origin Express proxies; OTP input retained per a2loft call, validated by
a2loft exactly as before (
?phone=&otp=, phone injected server-side). - BREAKING: Remove the python server and its UI:
app.py,requirement.txt,public/(after the new UI reaches parity). - clockio mode is not ported: fpagent is enroll-only by design.
- All configuration is hardcoded in source: port
4173, portalhttps://portal.yrka.app, PocketBasehttps://pb.itcass.net, a2lofthttps://apis.a2loft.net, agenthttp://127.0.0.1:9000.
Capabilities
New Capabilities
tools-app: the Express tools host — landing page, YOUreka Auth cookie session, hardcoded configuration, same-origin a2loft proxies.fingerprint-wizard: the/fingerprintenrollment wizard — domain permission filtering, fpagent capture wiring, OTP-validated lookup/save flow.
Modified Capabilities
(none — this repo has no existing specs)
Impact
- New code:
tools/(Express app, static pages, auth session module, domain permit module). New dependencies:express,pocketbase. - Removed code:
app.py,requirement.txt,public/capture/,public/clockio/,.config.jsonhandling. - Deployment: fpagent must run with
-allowed-originsincluding the tools app origin (http://localhost:4173in dev); the wizard page calls fpagent cross-origin from the browser. - External systems:
portal.yrka.app(web-auth + OpenFGA verify),pb.itcass.net(PocketBase session),apis.a2loft.net(staff lookup + fingerprint save, unchanged contract), fpagent on loopback.