Skip to content

fix(windows): align install.ps1 MSI with per-machine scope (#913)#1187

Merged
senamakel merged 3 commits intotinyhumansai:mainfrom
M3gA-Mind:fix/913-windows-msi-installer
May 4, 2026
Merged

fix(windows): align install.ps1 MSI with per-machine scope (#913)#1187
senamakel merged 3 commits intotinyhumansai:mainfrom
M3gA-Mind:fix/913-windows-msi-installer

Conversation

@M3gA-Mind
Copy link
Copy Markdown
Contributor

@M3gA-Mind M3gA-Mind commented May 4, 2026

Summary

  • Remove MSIINSTALLPERUSER / ALLUSERS=2 from msiexec so silent install matches the Tauri WiX package (InstallScope="perMachine"), addressing MSI 1603 failures from install.ps1 (see Windows installer exits with MSI error 1603 during OpenHuman install #913).
  • Start elevated msiexec via -Verb RunAs when the shell is not already admin so UAC can approve a machine-wide install (still works with irm … | iex).
  • Extract script-scoped helpers and a dot-source guard for unit tests.
  • Add scripts/tests/OpenHumanWindowsInstall.Tests.ps1, pnpm test:install-ps1, and enable the Windows job in installer-smoke.yml.

Problem

GitHub #913: install.ps1 verified the MSI download and SHA256, then msiexec exited 1603. The script passed per-user public properties while the shipped MSI is authored per-machine (Program Files, HKLM), which commonly produces a fatal install.

Solution

  • Use a fixed argument list: /i <msi> /qn /norestart with no conflicting ALLUSERS/MSIINSTALLPERUSER overrides.
  • Request elevation only for the msiexec child process when needed.
  • PowerShell tests assert the MSI argument contract and asset selection; CI runs them on windows-latest.

Submission Checklist

  • Tests added or updated — PowerShell tests for MSI arg contract and release asset selection.
  • Diff coverage ≥ 80%N/A: PowerShell + workflow only (no Vitest/Rust diff-cover surface).
  • Coverage matrix — N/A.
  • Feature IDs in matrix — N/A.
  • No new external network dependencies — same GitHub release API as before for real installs.
  • Manual smoke checklist — N/A.
  • Linked issue — see Related.

Impact

  • Windows users: one UAC prompt when installing the MSI without an elevated shell.
  • CI: installer-smoke runs Windows tests + install.ps1 -DryRun.

Related

Closes #913

Summary by CodeRabbit

  • New Features

    • Installer now performs elevation-aware Windows installs and adapts how it launches the installer when admin rights are needed.
  • Tests

    • Added a local Windows installer test suite validating asset selection and installer arguments.
    • Added automated Windows smoke tests in CI to run the installer tests and a dry-run.
  • Chores

    • Installer version bumped to 1.1.0.
    • Added a convenience script entry to run the Windows installer tests.

…sai#913)

- Drop MSIINSTALLPERUSER/ALLUSERS=2 (conflicts with Tauri WiX perMachine MSI; 1603).

- Elevate msiexec via -Verb RunAs when not admin.

- Add PowerShell unit tests + installer-smoke windows job; pnpm test:install-ps1.

Co-authored-by: Cursor <cursoragent@cursor.com>
@M3gA-Mind M3gA-Mind requested a review from a team May 4, 2026 13:10
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 4, 2026

📝 Walkthrough

Walkthrough

Adds Windows-specific installer helpers and elevation-aware install flow to the PowerShell installer, a PowerShell test runner validating those helpers, CI updates to run the tests then perform an installer dry-run, and bumps the reported installer version to 1.1.0.

Changes

Windows installer refactor & CI test

Layer / File(s) Summary
Helper functions
scripts/install.ps1
Adds Get-OpenHumanMsiexecInstallArgumentList, Test-OpenHumanWindowsProcessElevated, and Select-OpenHumanWindowsAssetFromRelease.
Core installation flow
scripts/install.ps1
Install logic now uses the new helpers, removes injected MSIINSTALLPERUSER/ALLUSERS, prints JSON arg lists on -DryRun, performs elevation-aware msiexec invocation (direct vs -Verb RunAs), updates displayed version to 1.1.0, and guards against dot-sourcing auto-run.
Tests
scripts/tests/OpenHumanWindowsInstall.Tests.ps1
New PowerShell test runner with Assert-Equal/Assert-True, tests for msiexec arg shape, asset selection (MSI preferred, EXE fallback, null), and elevation detection; exits non-zero on failures.
CI / Tooling
.github/workflows/installer-smoke.yml, package.json
Adds smoke-windows job that runs the PowerShell tests then installer dry-run on windows-latest; adds test:install-ps1 npm script to run the test file.

Sequence Diagram(s)

sequenceDiagram
  participant GH_Actions as "GitHub Actions\n(installer-smoke)"
  participant PWsh as "PowerShell Tests\n(OpenHumanWindowsInstall.Tests.ps1)"
  participant Installer as "Install Script\n(scripts/install.ps1)"
  participant GH_API as "GitHub Releases API"
  participant MSI as "msiexec / UAC"

  GH_Actions->>PWsh: checkout repo\nrun test script
  PWsh->>Installer: dot-source helpers\nrun unit tests
  PWsh-->>GH_Actions: exit 0/1
  GH_Actions->>Installer: run install.ps1 -DryRun
  Installer->>GH_API: query latest release assets
  GH_API-->>Installer: return assets
  Installer->>Installer: Select asset & build msiexec args
  alt not elevated
    Installer->>MSI: display RunAs instruction (DryRun) / start msiexec with -Verb RunAs
  else elevated
    Installer->>MSI: display direct msiexec args (DryRun) / start msiexec directly
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰
I hopped through scripts at break of day,
Built args and checks to guide the way.
Tests first, then dry-run — UAC in view,
Version bumped, installer steps made true.
A tiny rabbit cheers: "Install anew!" 🎉

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main fix: aligning install.ps1 MSI with per-machine scope, which directly addresses the core issue being resolved.
Linked Issues check ✅ Passed The pull request directly addresses issue #913 by removing per-user MSI properties, using fixed per-machine msiexec arguments, adding elevation handling, extracting helpers, and adding tests and CI coverage as required.
Out of Scope Changes check ✅ Passed All changes are in scope: helper functions for MSI args and asset selection, elevation detection, PowerShell tests, workflow updates, and a package.json script entry, all directly supporting the per-machine MSI fix and its verification.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Review rate limit: 4/5 reviews remaining, refill in 12 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@scripts/install.ps1`:
- Around line 202-207: The dry-run branch always prints a "(non-admin)
Start-Process ... -Verb RunAs" message even when the process is elevated; modify
the DryRun handling in the if ($DryRun) block so it calls
Test-OpenHumanWindowsProcessElevated and conditionally prints either the
non-admin RunAs message or an "(already elevated) Start-Process msiexec -Wait
-ArgumentList <above>" message accordingly; locate the DryRun branch that uses
Get-OpenHumanMsiexecInstallArgumentList and update it to branch on
Test-OpenHumanWindowsProcessElevated to emit the correct hint for elevated vs
non-elevated execution.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 5e5ec95f-e37d-474c-bd24-c661da4db214

📥 Commits

Reviewing files that changed from the base of the PR and between 995e5cc and f5e8988.

📒 Files selected for processing (4)
  • .github/workflows/installer-smoke.yml
  • package.json
  • scripts/install.ps1
  • scripts/tests/OpenHumanWindowsInstall.Tests.ps1

Comment thread scripts/install.ps1
Dry-run now mirrors the real install path: print RunAs only when not
elevated, otherwise print the direct msiexec -Wait hint.

Co-authored-by: Cursor <cursoragent@cursor.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@scripts/install.ps1`:
- Around line 23-33: The Get-OpenHumanMsiexecInstallArgumentList function
currently returns the raw $MsiPath as an array element which can be split if it
contains spaces; update the function so the MSI path element is properly quoted
(e.g., wrap $MsiPath in double quotes) before returning the ArgumentList array
so Start-Process will pass the full path as a single argument to msiexec; keep
the rest of the returned switches (/i, '/qn', '/norestart') unchanged and ensure
the quoted path is the second array element.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 91ff2301-fa61-4273-90df-a86fd8d80524

📥 Commits

Reviewing files that changed from the base of the PR and between f5e8988 and cc77aaa.

📒 Files selected for processing (1)
  • scripts/install.ps1

Comment thread scripts/install.ps1
Comment on lines +23 to +33
function Get-OpenHumanMsiexecInstallArgumentList {
<#
.SYNOPSIS
Argument list for Start-Process msiexec.exe (no per-user MSI overrides).
#>
param(
[Parameter(Mandatory = $true)]
[string]$MsiPath
)
return @('/i', $MsiPath, '/qn', '/norestart')
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# First, let's look at the full context of the install.ps1 file
head -250 scripts/install.ps1 | tail -+1

Repository: tinyhumansai/openhuman

Length of output: 134


🏁 Script executed:

# Also search for where this helper is being called
rg "Get-OpenHumanMsiexecInstallArgumentList" scripts/install.ps1 -A 5 -B 2

Repository: tinyhumansai/openhuman

Length of output: 1212


🌐 Web query:

Start-Process -ArgumentList PowerShell spaces quoting behavior

💡 Result:

PowerShell's Start-Process cmdlet with -ArgumentList has a longstanding bug where it joins array elements with spaces without automatically quoting arguments containing spaces or special characters. This causes arguments with spaces to be split incorrectly by the target process. Key behavior from official docs: - -ArgumentList accepts a string array or single string. - Array elements are joined into a single string separated by single spaces. - No automatic quoting: arguments with spaces or quotes must have embedded escaped double quotes (e.g., ""path with spaces""). - Best practice: Use a single string for all arguments with proper embedded quoting. Examples: Single string (recommended): Start-Process cmd.exe -ArgumentList "/c dir "C:\Program Files"" Array (requires manual quoting): Start-Process cmd.exe -ArgumentList "/c", "dir", ""C:\Program Files"" This bug (#5576) remains open as of 2025; won't be fixed for backward compatibility. Workaround: manual embedded quoting or direct invocation (& exe args) where PowerShell auto-quotes. For paths/files with spaces, always embed quotes like '"path with spaces"' in the argument string/array element.

Citations:


🏁 Script executed:

# Check where $tmpFile is defined and used
rg '\$tmpFile' scripts/install.ps1 -B 2 -A 2 | head -60

Repository: tinyhumansai/openhuman

Length of output: 1692


🏁 Script executed:

# Check the full context of the MSI invocation to ensure quoting is complete
sed -n '195,230p' scripts/install.ps1

Repository: tinyhumansai/openhuman

Length of output: 1588


🏁 Script executed:

# Let's verify the proposed fix syntax is valid PowerShell
# and check if there are any other arguments that need quoting
cat > /tmp/test_quote.ps1 << 'EOF'
# Test the proposed quoting syntax
$MsiPath = "C:\Users\Test User\AppData\Local\Temp\OpenHuman.msi"

# Current implementation (WRONG)
$currentImpl = @('/i', $MsiPath, '/qn', '/norestart')
Write-Host "Current implementation:"
Write-Host ($currentImpl | ConvertTo-Json -Compress)
Write-Host "Joined: $($currentImpl -join ' ')"
Write-Host ""

# Proposed implementation (CORRECT)
$proposedImpl = @('/i', ('"{0}"' -f $MsiPath), '/qn', '/norestart')
Write-Host "Proposed implementation:"
Write-Host ($proposedImpl | ConvertTo-Json -Compress)
Write-Host "Joined: $($proposedImpl -join ' ')"
EOF
pwsh -NoProfile -File /tmp/test_quote.ps1

Repository: tinyhumansai/openhuman

Length of output: 450


🏁 Script executed:

# Check if there are any other MSI-related invocations that might need review
rg "msiexec" scripts/install.ps1 -i

Repository: tinyhumansai/openhuman

Length of output: 1037


Quote the MSI path to handle spaces in the temp directory.

Line 32 currently returns the raw MSI path as an array element to -ArgumentList. PowerShell's Start-Process joins array elements with spaces without automatic quoting, so the path will be incorrectly split if $env:TEMP contains spaces (common in Windows profiles with user names like "User Name"). This causes msiexec to receive multiple arguments instead of one quoted path, breaking silent installs.

Suggested fix
 function Get-OpenHumanMsiexecInstallArgumentList {
   <#
   .SYNOPSIS
     Argument list for Start-Process msiexec.exe (no per-user MSI overrides).
   #>
   param(
     [Parameter(Mandatory = $true)]
     [string]$MsiPath
   )
-  return @('/i', $MsiPath, '/qn', '/norestart')
+  return @('/i', ('"{0}"' -f $MsiPath), '/qn', '/norestart')
 }
🧰 Tools
🪛 PSScriptAnalyzer (1.25.0)

[warning] Missing BOM encoding for non-ASCII encoded file 'install.ps1'

(PSUseBOMForUnicodeEncodedFile)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/install.ps1` around lines 23 - 33, The
Get-OpenHumanMsiexecInstallArgumentList function currently returns the raw
$MsiPath as an array element which can be split if it contains spaces; update
the function so the MSI path element is properly quoted (e.g., wrap $MsiPath in
double quotes) before returning the ArgumentList array so Start-Process will
pass the full path as a single argument to msiexec; keep the rest of the
returned switches (/i, '/qn', '/norestart') unchanged and ensure the quoted path
is the second array element.

Responds to CodeRabbit on PR tinyhumansai#1187: string[] ArgumentList keeps paths with spaces as one token; dry-run elevation hint already fixed on branch.

Co-authored-by: Cursor <cursoragent@cursor.com>
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
scripts/install.ps1 (1)

32-35: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Quote the MSI path token before passing it to Start-Process -ArgumentList.

At Line 35, returning raw $MsiPath can break installs when the temp path contains spaces, because Start-Process argument-list joining may not preserve it as one native argv token for msiexec. This is the root cause for intermittent path-based failures.

Suggested fix
-  return @('/i', $MsiPath, '/qn', '/norestart')
+  return @('/i', ('"{0}"' -f $MsiPath), '/qn', '/norestart')
In PowerShell 7.x, when using Start-Process -ArgumentList with a string array, are elements containing spaces automatically quoted for the native process, or must embedded quotes be supplied manually?
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@scripts/install.ps1` around lines 32 - 35, The returned argument array
currently returns the raw $MsiPath token which can be split when the temp path
contains spaces; update the array construction in scripts/install.ps1 so the MSI
path element is explicitly quoted before being returned (ensure the element
passed to Start-Process -ArgumentList is a single quoted string token containing
the full path), e.g., wrap $MsiPath in quotes or otherwise escape it so
Start-Process receives one native argv for msiexec; keep the other tokens
('/i','/qn','/norestart') unchanged and verify the change is used by the code
that calls Start-Process -ArgumentList.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@scripts/install.ps1`:
- Around line 32-35: The returned argument array currently returns the raw
$MsiPath token which can be split when the temp path contains spaces; update the
array construction in scripts/install.ps1 so the MSI path element is explicitly
quoted before being returned (ensure the element passed to Start-Process
-ArgumentList is a single quoted string token containing the full path), e.g.,
wrap $MsiPath in quotes or otherwise escape it so Start-Process receives one
native argv for msiexec; keep the other tokens ('/i','/qn','/norestart')
unchanged and verify the change is used by the code that calls Start-Process
-ArgumentList.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f78e47c7-9b2d-4d8b-9c5e-e1a192253d2c

📥 Commits

Reviewing files that changed from the base of the PR and between cc77aaa and 73aee04.

📒 Files selected for processing (2)
  • scripts/install.ps1
  • scripts/tests/OpenHumanWindowsInstall.Tests.ps1

@senamakel senamakel merged commit 13fa917 into tinyhumansai:main May 4, 2026
20 checks passed
jwalin-shah added a commit to jwalin-shah/openhuman that referenced this pull request May 5, 2026
* feat(remotion): Ghosty character library with transparent MOV variants (tinyhumansai#1059)

Co-authored-by: WOZCODE <contact@withwoz.com>

* feat(composio/gmail): sync into memory tree (Slack-parity) (tinyhumansai#1056)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(scheduler-gate): throttle background AI on battery / busy CPU (tinyhumansai#1062)

* fix(core,cef): run core in-process and stop orphaning CEF helpers on Cmd+Q (tinyhumansai#1061)

* ci: add dedicated staging release workflow (tinyhumansai#1066)

* fix(sentry): Rust source context + per-release deploy marker (tinyhumansai#405) (tinyhumansai#1067)

* fix(welcome): re-enable OAuth buttons with focus/timeout recovery (tinyhumansai#1049) (tinyhumansai#1069)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(dependencies): update pnpm-lock.yaml and Cargo.lock for package… (tinyhumansai#1082)

* fix(onboarding): personalize welcome agent greeting with user identity (tinyhumansai#1078)

* fix(chat): make agent message bubbles fit content width (tinyhumansai#1083)

* Feat/dmg checks (tinyhumansai#1084)

* fix(linux): Add X11 platform flags to .deb package launcher (tinyhumansai#1087)

Co-authored-by: unn-Known1 <unn-known1@users.noreply.github.com>

* fix(sentry): auto-send React events; collapse core→tauri for desktop (tinyhumansai#1086)

Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>

* fix(cef): run blank reload guard on the CEF UI thread (tinyhumansai#1092)

* fix(app): reload webview instead of restart_app in dev mode (tinyhumansai#1068) (tinyhumansai#1071)

* fix(linux): deliver X11 ozone flags via custom .desktop template (tinyhumansai#1091)

* fix(webview-accounts): retry data-dir purge so CEF handle race doesn't leak cookies (tinyhumansai#1076) (tinyhumansai#1081)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>

* fix(webview/slack): media perms + deep-link isolation (tinyhumansai#1074) (tinyhumansai#1080)

Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>

* ci(release): split staging vs production workflows; promote staging tags (tinyhumansai#1094)

* Update release-staging.yml (tinyhumansai#1097)

* chore(staging): v0.53.5

* chore(staging): v0.53.6

* ci(staging): cut staging from main; add act local-debug helper (tinyhumansai#1099)

* chore(staging): v0.53.7

* fix(ci): correct sentry-cli download URL and trap scope (tinyhumansai#1100)

* chore(staging): v0.53.8

* feat(chat): forward thread_id to backend for KV cache locality (tinyhumansai#1095)

* fix(ci): bump pinned sentry-cli to 3.4.1 (2.34.2 was never published) (tinyhumansai#1102)

* chore(staging): v0.53.9

* fix(ci): drop bash trap in upload_sentry_symbols.sh; inline cleanup (tinyhumansai#1103)

* chore(staging): v0.53.10

* refactor(session): flatten session_raw/, switch md to YYYY_MM_DD (tinyhumansai#1098)

* Add full Composio managed-auth toolkit catalog (tinyhumansai#1093)

* ci: add diff-aware 80% coverage gate (Vitest + cargo-llvm-cov) (tinyhumansai#1104)

* feat(scripts): pnpm work + pnpm debug for agent-driven workflows (tinyhumansai#1105)

* ci: pull pnpm into CI image, drop redundant setup steps (tinyhumansai#1107)

* docs: add Cursor Cloud specific instructions to AGENTS.md (tinyhumansai#1106)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* chore(staging): v0.53.11

* docs: surface 80% coverage gate and scripts/debug runners (tinyhumansai#1108)

* feat(app): show Composio integrations as sorted icon grid on Skills (tinyhumansai#1109)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* feat(composio): client-side trigger enable/disable toggles (tinyhumansai#1110)

* feat(skills): channels grid + integrations card polish; tolerant Composio trigger decode (tinyhumansai#1112)

* chore(staging): v0.53.12

* feat(home): early-bird banner + assistant→agent terminology (tinyhumansai#1113)

* feat(updater): in-app auto-update with auto-download + restart prompt (tinyhumansai#677) (tinyhumansai#1114)

* chore(claude): add ship-and-babysit slash command (tinyhumansai#1115)

* feat(home): EarlyBirdyBanner + agent terminology + LinkedIn enrichment model pin (tinyhumansai#1118)

* fix(chat): single onboarding thread in sidebar after wizard (tinyhumansai#1116)

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Steven Enamakel <senamakel@users.noreply.github.com>

* fix: filter out global namespace from citation chips (tinyhumansai#1124)

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: senamakel-droid <281415773+senamakel-droid@users.noreply.github.com>

* feat(nav): enable Memory tab in BottomTabBar (tinyhumansai#1125)

* feat(memory): singleton ingestion + status RPC + UI pill (tinyhumansai#1126)

* feat(human): mascot tab with viseme-driven lipsync (staging only) (tinyhumansai#1127)

* Fix CEF zombie processes on full app close and restart (tinyhumansai#1128)

Co-authored-by: senamakel-droid <281415773+senamakel-droid@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>

* Update issue templates for GitHub issue types (tinyhumansai#1146)

* feat(human): expand mascot expressions and tighten reply-speech state machine (tinyhumansai#1147)

* feat(memory): ingestion pipeline + tree-architecture docs + ops/schemas split (tinyhumansai#1142)

* feat(threads): surface live subagent work in parent thread (tinyhumansai#1122) (tinyhumansai#1159)

* fix(human): keep mascot mouth animating when TTS ships no viseme data (tinyhumansai#1160)

* feat(composio): consume backend markdownFormatted for LLM output (tinyhumansai#1165)

* fix(subagent): lazy-register toolkit actions filtered out of fuzzy top-K (tinyhumansai#1162)

* feat(memory): user-facing long-term memory window preset (tinyhumansai#1137) (tinyhumansai#1161)

* fix(tauri-shell): proactively kill stale openhuman RPC on startup (tinyhumansai#1166)

* chore(staging): v0.53.13

* fix(composio): per-action tool consumes backend markdownFormatted (tinyhumansai#1167)

* fix(threads): persist selectedThreadId across reloads (tinyhumansai#1168)

* feat(memory_tree): switch embed model to bge-m3 (1024-dim, 8K context) (tinyhumansai#1174)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(agent): drop redundant [Memory context] recall injection (tinyhumansai#1173)

* chore(memory_tree): drop body-read timeouts on Ollama HTTP calls (tinyhumansai#1171)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(transcript): emit thread_id + fix orchestrator missing cost (tinyhumansai#1169)

* fix(composio/gmail): phase out html2md, prefer text/plain MIME part (tinyhumansai#1170)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(tools): markdown output for internal tool results (tinyhumansai#1172)

* feat(security): enforce prompt-injection guard before model and tool execution (tinyhumansai#1175)

* fix(cef): popup paint dies after first frame — skip blank-page guard for popups (tinyhumansai#1079) (tinyhumansai#1182)

Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>

* chore(sentry): rename OPENHUMAN_SENTRY_DSN → OPENHUMAN_CORE_SENTRY_DSN (tinyhumansai#1186)

* feat(remotion): add yellow mascot character with all animation variants (tinyhumansai#1193)

Co-authored-by: Neel Mistry <neelmistry@Neels-MacBook-Pro.local>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(composio): hide raw connection ID, derive friendly label (tinyhumansai#1153) (tinyhumansai#1185)

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* fix(windows): align install.ps1 MSI with per-machine scope (tinyhumansai#913) (tinyhumansai#1187)

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(tauri): deterministic CEF teardown on full app close (tinyhumansai#1120) (tinyhumansai#1189)

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(composio): cap Gmail HTML body before strip (crash mitigation) (tinyhumansai#1191)

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(auth): stop stale chat threads after signup (tinyhumansai#1192)

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(sentry): staging-only "Trigger Sentry Test" button (tinyhumansai#1072) (tinyhumansai#1183)

* chore(staging): v0.53.14

* chore(staging): v0.53.15

* feat(composio): format trigger slugs into human-readable labels (tinyhumansai#1129) (tinyhumansai#1179)

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* fix(ui): hide unsupported permission UI on non-macOS for Screen Intelligence (tinyhumansai#1194)

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(tauri-shell): retire embedded Gmail webview-account flow (tinyhumansai#1181)

* feat(onboarding): replace welcome-agent bot with react-joyride walkthrough (tinyhumansai#1180)

* chore(release): v0.53.16

* fix(threads): preserve selectedThreadId on cold-boot identity hydration (tinyhumansai#1196)

* feat(core): version/shutdown/update RPCs + mid-thread integration refresh (tinyhumansai#1195)

* fix(mascot): swap to yellow mascot via @remotion/player (tinyhumansai#1200)

* feat(memory_tree): cloud-default LLM, queue priority, entity filter, Memory tab UI (tinyhumansai#1198)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Persist turn state + restore conversation history on cold-boot (tinyhumansai#1202)

* feat(mascot): floating desktop mascot via native NSPanel + WKWebView (macOS) (tinyhumansai#1203)

* fix(memory/tree): emit summary children as Obsidian wikilinks (tinyhumansai#1210)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(tools): coding-harness baseline primitives (tinyhumansai#1205) (tinyhumansai#1208)

* docs: add Codex PR checklist for remote agents

---------

Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>
Co-authored-by: WOZCODE <contact@withwoz.com>
Co-authored-by: sanil-23 <sanil@vezures.xyz>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Cyrus Gray <144336577+graycyrus@users.noreply.github.com>
Co-authored-by: CodeGhost21 <164498022+CodeGhost21@users.noreply.github.com>
Co-authored-by: oxoxDev <164490987+oxoxDev@users.noreply.github.com>
Co-authored-by: Mega Mind <146339422+M3gA-Mind@users.noreply.github.com>
Co-authored-by: Gaurang Patel <ptelgm.yt@gmail.com>
Co-authored-by: unn-Known1 <unn-known1@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Steven Enamakel <senamakel@users.noreply.github.com>
Co-authored-by: Steven Enamakel's Droid <enamakel.agent@tinyhumans.ai>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: senamakel-droid <281415773+senamakel-droid@users.noreply.github.com>
Co-authored-by: YellowSnnowmann <167776381+YellowSnnowmann@users.noreply.github.com>
Co-authored-by: Neil <neil@maha.xyz>
Co-authored-by: Neel Mistry <neelmistry@Neels-MacBook-Pro.local>
Co-authored-by: obchain <167975049+obchain@users.noreply.github.com>
Co-authored-by: Jwalin Shah <jshah1331@gmail.com>
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.

Windows installer exits with MSI error 1603 during OpenHuman install

2 participants