ZGO-CORE // ENGINEERING REPORT

// module map · command surface · FFI exports · test status

Home Port Report Source
0.1.0version
3crate-types (rlib · staticlib · cdylib)
152engine commands
4C-ABI exports
86.3%Alfred port coverage

zgo-core is in active development. The figures on this page are derived from the crate source as it stands today (Cargo.toml, src/commands.rs, src/ffi.rs, PORT_REPORT.md): version, crate-types, the dotted command list in commands::COMMANDS — held in lockstep with Engine::invoke's match arms by the commands_cover_invoke_arms drift-guard test — the exported C symbols, and the hand-assessed Alfred coverage. The "planned" column lists work that is not yet implemented — it is a roadmap, not a claim of coverage.

Module map

modulerole todayplanned
lib (Engine)one dotted command surface via Engine::invoke; event sink; id allocation; profile + clipboard persistencemore dispatch coverage as modules grow
modelworkflow · object · connection · variable · feedback · item · arg · icon · mod · text · snippet · theme · profile typesworkflow object config typing per object kind
scriptfilterto_json + parse (JSON & legacy XML) + run_env always on; run_script/run_command behind execper-object Script Filter dispatch, rerun loop
matchercase-insensitive subsequence ranking with word-start / consecutive / case bonuses; filter over itemsper-source ranking profiles
frecency · rankper-uid hit-count / last-used learning (learn.record, learn.rank) and a blended fuzzy + frecency score on one axis (rank.blend)decay-curve tuning exposed to the host
minquery · stability · trajectory · regressmatcher introspection replayed through the live ranker: shortest query that pins a target (match.minquery), typo-robustness radius (match.stability), keystroke-by-keystroke prefix safety (match.trajectory), and catalog-drift regression against a saved baseline (catalog.snapshotmatch.regress)host-side scheduling of periodic baselines
classifyquery.classify — ranks a raw query into typed interpretations (calc / unit / color / base / timestamp / url / email / ip / uuid / hex), each naming the command to runmore detector kinds as tool modules land
vars{query} · {var:NAME} · {clipboard} · {date[:FMT]} · {time} · {uuid} · {allvars} token expansionper-modifier variable scopes, secret masking
websearchbuilt-in search keywords + custom {query} URL templating with RFC 3986 encodingper-site result parsing, suggestion fetch (host side)
clipboardcapped newest-first history with re-copy merge + case-insensitive searchimage/file blob capture (host pasteboard integration)
snippetauto-expansion keyword match (longest trigger) + placeholder expansion (clipboard / date / cursor)per-collection affix editing, keystroke injection (host side)
storeprofile + clipboard JSON persistence (dirs paths)raw binary plist read, multi-profile
importworkflow info.plist-as-JSON import + export; alfredsnippet import.alfredworkflow zip unpack, raw plist parse
dispatch · executor · utilities · conditional · fallbacktrigger resolution (keyword / snippet / external / hotkey / file action), whole-graph walk threading the argument through each object, the pure argument transforms (utility.*), condition routing, and the empty-result fallback rowrerun loops, per-object async execution
developer / productivity toolsself-contained pure-Rust algorithms behind the same command surface: calc · gen (uuid v4/v5/v7 · ulid · nanoid · password · passphrase · strength · lorem) · hash (digests · HMAC · file) · codec (base64/32/58 · Z85 · url · html) · color (convert · WCAG contrast · palette) · numbase · numfmt · numspell · units · currency · ipcalc · cron · datemath · datetime · timezone (world clock · meeting planner · humanize) · unicode · urlparse · jwt · qr · regexp · textdiff · textstats · texttransform · readability · strmetrics · phonetic · pipeline · csvjson · dataconv · lineops · dictionarysee the port report's "beyond Alfred" rounds for what is deliberately out of scope (live rates, full UCD, tz history, YAML/TOML parsing)
catalog sourcesthe launchable surface behind the launch bar: appindex (filesystem / application index), spotlight, filesearch, bookmarks, contacts, runningapps, music, onepassword, process (ranking model only), syscommands (sleep / lock / trash catalogue + runner), actions (Universal Actions), keystroke (paste-to-front injection)native enumeration stays host-side where the OS API is required
queryhistorycapped newest-first typed-query ring with a recall window (query.record / query.recent / query.list / query.clear)per-profile history separation
ffiC ABI: zgo_init · zgo_invoke · zgo_set_event_callback · zgo_string_freericher event payloads
tauri_plugin (feature tauri)Tauri v2 command (zgo_invoke) + setup; events on zgo-eventmountable webui packaging

Build surfaces

The crate declares crate-type = ["rlib", "staticlib", "cdylib"]. The rlib links natively into Rust/Tauri hosts; the staticlib/cdylib expose the C ABI for non-Rust hosts (header include/zgo_core.h, hand-written, no cbindgen). The default exec feature carries Script Filter / Run Script process spawning; building --no-default-features yields a feedback-only core with no spawn surface that compiles in headless CI — feedback serialization, parsing, matching, token expansion and web-search URL building still work without it. The optional tauri feature adds the Tauri v2 command layer.

Verification

The crate carries in-source unit and integration tests across the engine and its modules: the command surface (version reporting, workflow CRUD + import/export, match filtering, token rendering, web-search URL building, clipboard add/search/clear, feedback parse/render, structured unknown-command errors), plus module-level tests in matcher (word-start ranking, subsequence rejection), vars (token resolution, unknown-left-verbatim, uuid shape), scriptfilter (JSON + legacy XML parse, run-env), snippet (auto-expand match, cursor offset), clipboard, websearch, import and store. Tests for the feedback-only core run without spawning a process and pass identically in a headless Linux CI; the run_script path is feature-gated so the default test path can be built without it.