Skip to content

feat: add generic extension pump registration mechanism#790

Open
Lebei2046 wants to merge 5 commits into
PerryTS:mainfrom
Lebei2046:feature/voice-to-text-2
Open

feat: add generic extension pump registration mechanism#790
Lebei2046 wants to merge 5 commits into
PerryTS:mainfrom
Lebei2046:feature/voice-to-text-2

Conversation

@Lebei2046
Copy link
Copy Markdown
Contributor

Summary

Added a generic extension pump registration mechanism that allows external extensions (like Vosk speech recognition) to register pump functions that run on each timer tick, without coupling to Perry core code.

Changes

crates/perry-runtime/src/lib.rs

  • Added ext_pump module with:
    • js_register_ext_pump(f): Extensions call this to register their process_pending function
    • js_run_ext_pump(): Called by platform-specific timer pumps to execute registered extension work

crates/perry-ui-gtk4/src/app.rs

  • Added declaration and call to js_run_ext_pump() in the 8ms timer pump

Related issue

Test plan

The extension pump is used by the Vosk speech recognition extension to process pending recognition results on the main thread, enabling real-time text updates during speech.

  • cargo build --release clean
  • cargo test --workspace --exclude perry-ui-ios --exclude perry-ui-tvos --exclude perry-ui-watchos --exclude perry-ui-gtk4 --exclude perry-ui-android --exclude perry-ui-windows passes
  • (if user-facing) Added or updated a test under test-files/ or a #[test] in the affected crate
  • (if CLI / stdlib / runtime API changed) Updated docs/src/
  • (if touching a platform UI backend) Built -p perry-ui-<backend> locally on that platform

Screenshots / output

Checklist

  • I have NOT bumped the workspace version or edited CLAUDE.md / CHANGELOG.md (maintainer handles these at merge)
  • My commits follow the loose feat: / fix: / docs: / chore: prefix convention used in the log
  • I've read CONTRIBUTING.md and agree to the Code of Conduct

Benefits

  • No coupling: Perry core doesn't need to know about specific extensions
  • Generic: Any extension can use this mechanism
  • Safe: No-op if no extension is registered
  • Thread-safe: Uses AtomicPtr with proper memory ordering
  • Follows existing pattern: Mirrors the stdlib_pump registration pattern

Lebei2046 and others added 5 commits May 14, 2026 08:13
Add support for specifying library search paths in native library
target configurations via the new `libDirs` field in package.json.

Changes:
- Add `lib_dirs` field to TargetNativeConfig
- Parse `libDirs` from package.json
- Add `-L` flags for libDirs before linking
…docs (v0.5.909)

Maintainer fold-in on top of @Lebei2046's libDirs feature:

- link.rs: emit /LIBPATH:<dir> on is_windows (MSVC link.exe) instead of
  -L<dir>, mirroring the existing libs loop's MSVC/Unix split.
- resolve.rs: anchor relative libDirs entries to package_dir via
  package_dir.join(p), matching swift_sources / metal_sources. Field
  type is now Vec<PathBuf>.
- compile.rs: doc-comment on the new field.
- manifest-v1.md: row added for libDirs.
- resolve.rs: two new tests in manifest_parse_tests covering
  package_dir anchoring + empty-by-default behavior.
- Cargo.toml / Cargo.lock / CLAUDE.md / CHANGELOG.md: 0.5.908 → 0.5.909
  (renumbered to follow PerryTS#760 which took 0.5.908 mid-review).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants