Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ android {
minSdk 21
targetSdk 34
versionCode 1
versionName "1.0"
versionName "0.1.1"

// Configure supported ABIs
ndk {
Expand Down
4 changes: 2 additions & 2 deletions build/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ info:
description: "Local-first meeting assistant" # The application description
copyright: "© 2026 Tom Vokac" # Copyright text
comments: "Local-first meeting assistant" # Comments
version: "0.1.0" # The application version
version: "0.1.1" # The application version
# cfBundleIconName: "appicon" # The macOS icon name in Assets.car icon bundles (optional)
# # Should match the name of your .icon file without the extension
# # If not set and Assets.car exists, defaults to "appicon"
Expand Down Expand Up @@ -76,4 +76,4 @@ fileAssociations:

# Other data
other:
- name: My Other Data
- name: My Other Data
6 changes: 3 additions & 3 deletions build/darwin/Info.dev.plist
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
<key>CFBundleIdentifier</key>
<string>dev.vokac.parley</string>
<key>CFBundleVersion</key>
<string>0.1.0</string>
<string>0.1.1</string>
<key>CFBundleGetInfoString</key>
<string>This is a comment</string>
<key>CFBundleShortVersionString</key>
<string>0.1.0</string>
<string>0.1.1</string>
<key>CFBundleIconFile</key>
<string>icons</string>
<key>CFBundleIconName</key>
Expand All @@ -31,4 +31,4 @@
<true/>
</dict>
</dict>
</plist>
</plist>
6 changes: 3 additions & 3 deletions build/darwin/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
<key>CFBundleIdentifier</key>
<string>dev.vokac.parley</string>
<key>CFBundleVersion</key>
<string>0.1.0</string>
<string>0.1.1</string>
<key>CFBundleGetInfoString</key>
<string>This is a comment</string>
<key>CFBundleShortVersionString</key>
<string>0.1.0</string>
<string>0.1.1</string>
<key>CFBundleIconFile</key>
<string>icons</string>
<key>CFBundleIconName</key>
Expand All @@ -26,4 +26,4 @@
<key>NSHumanReadableCopyright</key>
<string>© 2026, My Company</string>
</dict>
</plist>
</plist>
6 changes: 3 additions & 3 deletions build/ios/Info.dev.plist
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.1.0-dev</string>
<string>0.1.1-dev</string>
<key>CFBundleVersion</key>
<string>0.1.0</string>
<string>0.1.1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>MinimumOSVersion</key>
Expand Down Expand Up @@ -58,4 +58,4 @@
<string>This is a comment</string>

</dict>
</plist>
</plist>
6 changes: 3 additions & 3 deletions build/ios/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.1.0</string>
<string>0.1.1</string>
<key>CFBundleVersion</key>
<string>0.1.0</string>
<string>0.1.1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>MinimumOSVersion</key>
Expand Down Expand Up @@ -56,4 +56,4 @@
<string>This is a comment</string>

</dict>
</plist>
</plist>
2 changes: 1 addition & 1 deletion build/linux/nfpm/nfpm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
name: "parley.exe"
arch: ${GOARCH}
platform: "linux"
version: "0.1.0"
version: "0.1.1"
section: "default"
priority: "extra"
maintainer: ${GIT_COMMITTER_NAME} <${GIT_COMMITTER_EMAIL}>
Expand Down
6 changes: 5 additions & 1 deletion build/windows/Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,11 @@ tasks:
EXTRA_TAGS: '{{.EXTRA_TAGS}}'
OBFUSCATED: '{{.OBFUSCATED}}'
GARBLE_ARGS: '{{.GARBLE_ARGS}}'
PRODUCT_VERSION: '{{.PRODUCT_VERSION}}'
vars:
# Default to CGO_ENABLED=0 if not explicitly set
CGO_ENABLED: '{{.CGO_ENABLED | default "1"}}'
PRODUCT_VERSION: '{{.PRODUCT_VERSION | default ""}}'

build:native:
summary: Builds the application using native Go cross-compilation
Expand Down Expand Up @@ -57,7 +59,7 @@ tasks:
- cmd: rm -f *.syso
platforms: [linux, darwin]
vars:
BUILD_FLAGS: '{{if eq .DEV "true"}}{{if or .EXTRA_TAGS (eq .OBFUSCATED "true")}}-tags {{if eq .OBFUSCATED "true"}}wails_obfuscated{{if .EXTRA_TAGS}},{{end}}{{end}}{{.EXTRA_TAGS}} {{end}}-buildvcs=false -gcflags=all="-l"{{else}}-tags production{{if eq .OBFUSCATED "true"}},wails_obfuscated{{end}}{{if .EXTRA_TAGS}},{{.EXTRA_TAGS}}{{end}} -trimpath -buildvcs=false -ldflags="-w -s -H windowsgui"{{end}}'
BUILD_FLAGS: '{{if eq .DEV "true"}}{{if or .EXTRA_TAGS (eq .OBFUSCATED "true")}}-tags {{if eq .OBFUSCATED "true"}}wails_obfuscated{{if .EXTRA_TAGS}},{{end}}{{end}}{{.EXTRA_TAGS}} {{end}}-buildvcs=false -gcflags=all="-l"{{else}}-tags production{{if eq .OBFUSCATED "true"}},wails_obfuscated{{end}}{{if .EXTRA_TAGS}},{{.EXTRA_TAGS}}{{end}} -trimpath -buildvcs=false -ldflags="-w -s -H windowsgui -X main.appVersion={{if .PRODUCT_VERSION}}{{.PRODUCT_VERSION}}{{else}}0.1.1{{end}}"{{end}}'
env:
GOOS: windows
CGO_ENABLED: '{{.CGO_ENABLED | default "1"}}'
Expand Down Expand Up @@ -119,6 +121,8 @@ tasks:
dir: build/windows/nsis
deps:
- task: build
vars:
PRODUCT_VERSION: '{{.PRODUCT_VERSION}}'
preconditions:
- sh: '[ "{{.INSTALL_SCOPE}}" = "user" ] || [ "{{.INSTALL_SCOPE}}" = "machine" ]'
msg: "INSTALL_SCOPE must be 'user' or 'machine', got '{{.INSTALL_SCOPE}}'"
Expand Down
6 changes: 3 additions & 3 deletions build/windows/info.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{
"fixed": {
"file_version": "0.1.0"
"file_version": "0.1.1"
},
"info": {
"0000": {
"ProductVersion": "0.1.0",
"ProductVersion": "0.1.1",
"CompanyName": "Vokac",
"FileDescription": "Local-first meeting assistant",
"LegalCopyright": "© 2026 Tom Vokac",
"ProductName": "Parley",
"Comments": "Local-first meeting assistant"
}
}
}
}
2 changes: 1 addition & 1 deletion build/windows/msix/app_manifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<Identity
Name="dev.vokac.parley"
Publisher="CN=Vokac"
Version="0.1.0.0"
Version="0.1.1.0"
ProcessorArchitecture="x64" />

<Properties>
Expand Down
2 changes: 1 addition & 1 deletion build/windows/msix/template.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
PackageDisplayName="Parley"
PublisherName="CN=Vokac"
PublisherDisplayName="Vokac"
Version="0.1.0.0"
Version="0.1.1.0"
PackageDescription="Local-first meeting assistant">
<Capabilities>
<Capability Name="runFullTrust" />
Expand Down
70 changes: 51 additions & 19 deletions build/windows/nsis/project.nsi
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Unicode true
## !define INFO_PROJECTNAME "my-project" # Default "Parley"
## !define INFO_COMPANYNAME "My Company" # Default "Vokac"
## !define INFO_PRODUCTNAME "My Product Name" # Default "Parley"
## !define INFO_PRODUCTVERSION "1.0.0" # Default "0.1.0"
## !define INFO_PRODUCTVERSION "1.0.0" # Default "0.1.1"
## !define INFO_COPYRIGHT "(c) Now, My Company" # Default "© 2026, My Company"
###
## !define PRODUCT_EXECUTABLE "Application.exe" # Default "${INFO_PROJECTNAME}.exe"
Expand Down Expand Up @@ -123,27 +123,59 @@ Section
RMDir /r "$INSTDIR\resources\whisper"
File /r "..\..\..\resources"

# On a fresh NVIDIA installation, provision Nemotron from its upstream
# repositories. This is deliberately non-fatal: an offline machine, an old
# driver, or a failed model download leaves bundled CPU Whisper available.
# Upgrades reuse the existing runtime/model and never redownload it.
${If} $IsUpgrade == "0"
# A complete Nemotron install is persistent and automatically preferred by
# the app. Fresh NVIDIA installs provision it automatically. On upgrades
# where it is missing (including an earlier partial download), ask before
# downloading several GB. Silent upgrades never start a surprise download.
# Every failure/decline remains non-fatal because CPU Whisper is bundled.
IfFileExists "$INSTDIR\resources\nemotron\.ready" nemotron_present nemotron_probe_gpu

nemotron_probe_gpu:
nsExec::ExecToStack 'cmd /C nvidia-smi -L'
Pop $1
Pop $2
${If} $1 == 0
DetailPrint "NVIDIA GPU detected; provisioning Nemotron 3.5 ASR Streaming..."
nsExec::ExecToLog '"$SYSDIR\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -File "$INSTDIR\resources\nemotron\setup.ps1" -InstallRoot "$INSTDIR\resources\nemotron"'
Pop $1
${If} $1 != 0
DetailPrint "Nemotron provisioning did not complete (exit $1). Parley will use bundled CPU Whisper."
${EndIf}
${Else}
DetailPrint "No NVIDIA GPU detected; using bundled CPU Whisper."
${EndIf}
${Else}
DetailPrint "Upgrade detected; preserving the existing Nemotron installation."
${EndIf}
StrCmp $1 "0" nemotron_gpu_found nemotron_no_gpu

nemotron_gpu_found:
StrCmp $IsUpgrade "0" nemotron_provision
IfSilent nemotron_silent_skip
MessageBox MB_YESNO|MB_ICONQUESTION "Parley found an NVIDIA GPU, but Nemotron 3.5 ASR Streaming is not installed.$\r$\n$\r$\nDownload and install it now? This can download several gigabytes and may take several minutes. CPU Whisper remains available if you choose No." /SD IDNO IDYES nemotron_provision IDNO nemotron_declined

nemotron_provision:
DetailPrint "NVIDIA GPU detected; provisioning Nemotron 3.5 ASR Streaming..."
nsExec::ExecToLog '"$SYSDIR\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -File "$INSTDIR\resources\nemotron\setup.ps1" -InstallRoot "$INSTDIR\resources\nemotron"'
Pop $1
StrCmp $1 "0" 0 nemotron_provision_failed
IfFileExists "$INSTDIR\resources\nemotron\.ready" nemotron_provisioned nemotron_not_ready

nemotron_provisioned:
DetailPrint "Nemotron provisioning completed; Parley will use it automatically."
Goto nemotron_done

nemotron_present:
DetailPrint "Existing Nemotron installation detected; Parley will use it automatically."
Goto nemotron_done

nemotron_no_gpu:
DetailPrint "No NVIDIA GPU detected; using bundled CPU Whisper."
Goto nemotron_done

nemotron_declined:
DetailPrint "Nemotron download declined; using bundled CPU Whisper."
Goto nemotron_done

nemotron_silent_skip:
DetailPrint "Silent upgrade detected; skipping optional Nemotron download and using bundled CPU Whisper."
Goto nemotron_done

nemotron_not_ready:
DetailPrint "Nemotron was not provisioned for this GPU; Parley will use bundled CPU Whisper."
Goto nemotron_done

nemotron_provision_failed:
DetailPrint "Nemotron provisioning did not complete (exit $1). Parley will use bundled CPU Whisper."

nemotron_done:

SetOutPath $INSTDIR

Expand Down
4 changes: 2 additions & 2 deletions build/windows/nsis/wails_tools.nsh
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
!define INFO_PRODUCTNAME "Parley"
!endif
!ifndef INFO_PRODUCTVERSION
!define INFO_PRODUCTVERSION "0.1.0"
!define INFO_PRODUCTVERSION "0.1.1"
!endif
!ifndef INFO_COPYRIGHT
!define INFO_COPYRIGHT "© 2026, My Company"
Expand Down Expand Up @@ -258,4 +258,4 @@ RequestExecutionLevel "${REQUEST_EXECUTION_LEVEL}"
!macro wails.unassociateCustomProtocols
; Delete app custom protocol associations

!macroend
!macroend
4 changes: 2 additions & 2 deletions build/windows/wails.exe.manifest
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity type="win32" name="dev.vokac.parley" version="0.1.0" processorArchitecture="*"/>
<assemblyIdentity type="win32" name="dev.vokac.parley" version="0.1.1" processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>
Expand All @@ -19,4 +19,4 @@
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
</assembly>
1 change: 1 addition & 0 deletions frontend/bindings/github.com/tomvokac/parley/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ export {
export type {
AnalysisStatusEvent,
LoadedSession,
RuntimeInfo,
StatusEvent
} from "./models.js";
10 changes: 10 additions & 0 deletions frontend/bindings/github.com/tomvokac/parley/meetingservice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@ export function ExportMarkdown(sessionID: number): $CancellablePromise<string> {
return $Call.ByID(3378443135, sessionID);
}

/**
* GetRuntimeInfo reports the exact app version and the transcription model that
* has actually been selected. In particular, this reflects a CPU fallback when
* Nemotron was preferred but could not start, rather than merely echoing the
* configured model filename.
*/
export function GetRuntimeInfo(): $CancellablePromise<$models.RuntimeInfo> {
return $Call.ByID(3989995776);
}

/**
* IsRunning reports whether a session is active.
*/
Expand Down
15 changes: 15 additions & 0 deletions frontend/bindings/github.com/tomvokac/parley/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,21 @@ export interface LoadedSession {
"liveNotes": store$0.LiveNote[] | null;
}

/**
* RuntimeInfo is the build and transcription metadata currently in use. The
* frontend displays it persistently so packaged-version or model-selection
* problems can be identified without opening log files.
*/
export interface RuntimeInfo {
"appVersion": string;
"transcriptionModel": string;

/**
* loading | ready | error
*/
"transcriptionStatus": string;
}

/**
* StatusEvent is broadcast whenever the capture/transcription state changes.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ declare module "@wailsio/runtime" {
interface CustomEvents {
"analysis": analysis$0.State;
"analysisStatus": main$0.AnalysisStatusEvent;
"runtimeInfo": main$0.RuntimeInfo;
"status": main$0.StatusEvent;
"transcript": stt$0.Segment;
}
Expand Down
Loading
Loading