FN-8753: enable installed voice input in project settings

Make Voice Input available only after its local model and runtime are ready.

- Bundle the optional sherpa runtime with the published CLI.
- Gate the project setting on model installation and stable runtime status codes.
- Add localized recovery guidance, documentation, and coverage.

Files changed:
 .changeset/fn-8753-voice-input-enable.md           |  7 ++++
 docs/dashboard-guide.md                            |  2 +-
 docs/settings-reference.md                         |  8 +++--
 packages/cli/package.json                          |  3 ++
 packages/cli/src/__tests__/package-config.test.ts  | 16 +++++++++
 .../settings/__tests__/VoiceInputSection.test.tsx  | 36 ++++++++++++++++----
 .../settings/sections/VoiceInputSection.tsx        | 30 ++++++++++++-----
 packages/dashboard/package.json                    |  2 +-
 .../routes/__tests__/register-voice-routes.test.ts | 39 ++++++++++++++++++++++
 .../dashboard/src/stt/__tests__/voice-stt.test.ts  | 27 ++++++++++++---
 packages/dashboard/src/stt/parakeet-service.ts     | 26 ++++++++++-----
 packages/i18n/locales/en/app.json                  |  6 ++++
 pnpm-lock.yaml                                     |  6 +++-
 13 files changed, 175 insertions(+), 33 deletions(-)

Fusion-Task-Id: FN-8753

Fusion-Task-Lineage: db92b148-37f0-45d2-b616-ed2e3f2d54f6

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
This commit is contained in:
gsxdsm
2026-08-02 23:07:37 -07:00
parent 46583a4cb6
commit fb0863f660
13 changed files with 175 additions and 33 deletions

View File

@@ -86,6 +86,9 @@
"ws": "^8.18.0",
"playwright-core": "^1.60.0"
},
"optionalDependencies": {
"sherpa-onnx-node": "1.13.4"
},
"peerDependencies": {
"typebox": "*"
},

View File

@@ -177,6 +177,22 @@ describe("CLI package.json publishing config", () => {
expect(publishedPkg.files).toContain("agent-browser.mjs");
});
/*
FNXC:VoiceInput 2026-08-03-05:43:
FN-8753 requires the published CLI manifest to own the lazy sherpa native
addon. The private dashboard workspace dependency is not present after an
npm install, so retain the pinned optional dependency through prepack while
keeping private workspace tooling out of the consumer manifest.
*/
it("keeps the optional voice runtime in the published manifest", () => {
const publishedPkg = applyPrepackTransform(pkg);
expect(pkg.optionalDependencies).toHaveProperty("sherpa-onnx-node", "1.13.4");
expect(publishedPkg.optionalDependencies).toHaveProperty("sherpa-onnx-node", "1.13.4");
expect(publishedPkg.devDependencies).not.toHaveProperty("@fusion/dashboard");
expect(publishedPkg.dependencies).not.toHaveProperty("@fusion/dashboard");
});
/**
* FNXC:Packaging 2026-06-13-16:36:
* Standalone npm/pnpm installs may omit a package when the published manifest declares it as both a runtime dependency and an optional peer. Keep the pi runtime packages as plain dependencies so dist/bin.js and dist/extension.js can resolve their static imports outside the monorepo, while leaving typebox as the optional-peer control because Fusion does not import it at runtime.