Files
church-translate/app/package.json
T
Waters ChurchandClaude Opus 5 4aa30699c9 Install the update itself, instead of asking for a drag
Build 115. Downloading and then telling the operator to quit, mount and drag
was the friction the updater was supposed to remove.

An app cannot replace itself while running, so the swap is done by a small
script that outlives the process: it waits for us to exit, moves the old bundle
aside, copies the new one in, clears the quarantine flag and relaunches.

Moved aside, not deleted. If the copy fails half way — a full disk, a truncated
download, the volume going away — the old app goes straight back and is
reopened. The failure this is written against is a campus Mac with no working
app and a service in an hour, which is far worse than not updating. Tested in a
sandbox across all three paths: a clean swap, a copy that fails mid-way (old app
restored, no leftovers), and a disk image with no app in it (aborts before
touching the installed one).

It refuses while translation is live: quitting stops every listener's captions
and no update is worth that. Stop translating first.

No sudo — /Applications is admin-writable and the bundle belongs to the
operator. If that is ever untrue the copy fails and the rollback runs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-24 12:50:05 -04:00

161 lines
4.1 KiB
JSON

{
"name": "church-translate-engine",
"productName": "Church Translate",
"version": "3.23.2",
"buildNumber": 115,
"private": true,
"description": "Live sermon translation — self-contained: captures audio, transcribes, translates, and serves the congregation page itself",
"main": "main.js",
"scripts": {
"predist": "node tools/sync-build-version.js && node tools/check-packaged-files.js",
"start": "electron .",
"dist": "electron-builder --mac",
"dist:mac": "electron-builder --mac",
"dist:win": "electron-builder --win"
},
"devDependencies": {
"electron": "^33.2.0",
"electron-builder": "^25.1.8"
},
"dependencies": {
"@huggingface/transformers": "^3.8.1",
"espeak-ng": "^1.0.2",
"kokoro-js": "^1.2.1",
"qrcode": "^1.5.4",
"sherpa-onnx-node": "^1.13.6",
"tar-stream": "^3.2.1",
"unbzip2-stream": "^1.4.3",
"ws": "^8.18.0"
},
"build": {
"appId": "org.waterschurch.translate.engine",
"productName": "Church Translate",
"directories": {
"output": "dist"
},
"files": [
"main.js",
"preload.js",
"index.html",
"engine.css",
"engine.js",
"model-worker.js",
"mt-service.js",
"capture-worklet.js",
"selftest.html",
"selftest.js",
"selftest.wav",
"vendor/transformers.min.js",
"vendor/ort-wasm-simd-threaded.jsep.wasm",
"vendor/ort-wasm-simd-threaded.jsep.mjs",
"server/**/*",
"tts-service.js",
"kokoro-sidecar.js",
"voices.js",
"pt-variants.js",
"speech-text.js",
"tools/setup-local-voices.sh",
"voice-catalog.js",
"out-routing.js",
"mt-guard.js",
"liturgy.js",
"preach.js",
"spa-variants.js",
"bible-lexicon.js",
"app-log.js",
"sidecar-langs.js",
"short-questions.js",
"tools/verify-windows.js"
],
"mac": {
"target": [
{
"target": "dir",
"arch": [
"arm64"
]
},
{
"target": "dmg",
"arch": [
"arm64"
]
}
],
"category": "public.app-category.utilities",
"extendInfo": {
"NSMicrophoneUsageDescription": "Church Translate listens to the sermon audio you select so it can caption and translate it."
},
"identity": null,
"extraResources": [
{
"from": "vendor/node",
"to": "node"
},
{
"from": "vendor/cloudflared",
"to": "cloudflared"
}
],
"artifactName": "${productName}-${version}-${arch}.${ext}",
"files": [
"!node_modules/**/.cache${/*}",
"!node_modules/onnxruntime-node/bin/napi-v3/win32${/*}",
"!node_modules/onnxruntime-node/bin/napi-v3/linux${/*}",
"!node_modules/sherpa-onnx-win-x64${/*}"
]
},
"asar": false,
"buildVersion": "115",
"win": {
"target": [
{
"target": "nsis",
"arch": [
"x64"
]
},
{
"target": "zip",
"arch": [
"x64"
]
}
],
"artifactName": "${productName} Setup ${version}.${ext}",
"extraResources": [
{
"from": "vendor-win/node.exe",
"to": "node.exe"
},
{
"from": "vendor-win/cloudflared.exe",
"to": "cloudflared.exe"
},
{
"from": "vendor-win/ffmpeg.exe",
"to": "ffmpeg.exe"
},
{
"from": "vendor-win/FFMPEG-LICENSE.txt",
"to": "FFMPEG-LICENSE.txt"
}
],
"files": [
"!node_modules/**/.cache${/*}",
"!node_modules/onnxruntime-node/bin/napi-v3/darwin${/*}",
"!node_modules/onnxruntime-node/bin/napi-v3/linux${/*}",
"!node_modules/sherpa-onnx-darwin-arm64${/*}"
]
},
"nsis": {
"oneClick": false,
"perMachine": false,
"allowToChangeInstallationDirectory": true,
"createDesktopShortcut": true,
"createStartMenuShortcut": true,
"deleteAppDataOnUninstall": false
}
}
}