# leeroy-wip commit export (full message + stats)

Generated: 2026-01-25
Worktree: /Users/leeroy/Documents/Development/happy-local/components/.worktrees/happy/slopus/tmp/leeroy-wip
Range: upstream/main..leeroy-wip

Command:
```bash
happys wt git happy slopus/tmp/leeroy-wip -- log --reverse --date=short --pretty=fuller --name-status --stat upstream/main..HEAD
```

Output:
```text
commit 58528a7c37d3a4eea2874dbe1258c2626b88cd5e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    chore(crypto): patch react-native-libsodium

A	expo-app/patches/@more-tech+react-native-libsodium+1.5.5.patch

commit 552b8da0f62129749a8dd96bc7cfba125e51c1f6
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(deps): add @types/react-test-renderer

M	expo-app/package.json
M	expo-app/yarn.lock

commit 017b15c07ad75413718d9e734b8f40f2ce738ce7
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    chore(config): harden app variant defaults

M	expo-app/app.config.js

commit 4890a471df312191ae325d5691b61231097df078
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(auth): harden tokenStorage web persistence

A	expo-app/sources/auth/tokenStorage.test.ts
M	expo-app/sources/auth/tokenStorage.ts

commit 4adc41d92af05c1028bb6b7b81239a6279d13c29
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(sync): add permission mode types and mapping

A	expo-app/sources/sync/permissionMapping.test.ts
A	expo-app/sources/sync/permissionMapping.ts
A	expo-app/sources/sync/permissionTypes.test.ts
A	expo-app/sources/sync/permissionTypes.ts

commit a5fbc3e8ba00ba0f41b9af18ca0c6296414f5533
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(persistence): scope storage and validate draft modes

A	expo-app/sources/sync/persistence.test.ts
M	expo-app/sources/sync/persistence.ts
A	expo-app/sources/utils/storageScope.test.ts
A	expo-app/sources/utils/storageScope.ts

commit 18e77c46f38a2d336fb4e05d50aec3f4dcad5edd
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(session): clamp configurable model modes

M	expo-app/sources/-session/SessionView.tsx

commit f7bb8a28fff741703bf1238ec039197272703dce
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(tools): harden ACP tool parsing and titles

M	expo-app/sources/components/tools/knownTools.tsx
M	expo-app/sources/components/tools/views/GeminiExecuteView.tsx
M	expo-app/sources/sync/typesRaw.spec.ts
M	expo-app/sources/sync/typesRaw.ts

commit 292424245277951fc1aa80149407b720b72db9ad
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(sync): centralize outgoing message metadata

A	expo-app/sources/sync/messageMeta.test.ts
A	expo-app/sources/sync/messageMeta.ts
M	expo-app/sources/sync/sync.ts

commit 39cc25154cddcfc43ed1c25dc4d126bd9d0137cd
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(storage): persist session model modes

M	expo-app/sources/sync/serverConfig.ts
M	expo-app/sources/sync/storage.ts

commit c2d3507357dc7ef150105ff56468ec2f580943f6
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(settings): make parsing tolerant for profiles

M	expo-app/sources/sync/settings.spec.ts
M	expo-app/sources/sync/settings.ts
M	expo-app/sources/sync/sync.ts

commit 207ef1b2f57207ad67a08256a11b40863e9fba76
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(dev): gate CLI detection logging

M	expo-app/sources/hooks/useCLIDetection.ts
M	expo-app/sources/realtime/RealtimeVoiceSession.tsx
M	expo-app/sources/realtime/RealtimeVoiceSession.web.tsx

commit 58a892d413d17670aa459491ca3e4c60024d894f
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(command-palette): include navigate dependency

M	expo-app/sources/components/CommandPalette/CommandPaletteProvider.tsx

commit 41479b35415f4c4a725e7dc8887dccd78c1d38cd
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(env): add env var template parsing

M	expo-app/sources/hooks/envVarUtils.ts
A	expo-app/sources/utils/envVarTemplate.test.ts
A	expo-app/sources/utils/envVarTemplate.ts

commit 695bcd09eb9e67184daa24e0815c895c4af6612d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(env): improve remote env resolution and previews

M	expo-app/sources/hooks/useEnvironmentVariables.test.ts
M	expo-app/sources/hooks/useEnvironmentVariables.ts
M	expo-app/sources/sync/ops.ts
M	expo-app/sources/sync/settings.ts

commit 6cdb90a49aad04fbae4958cbcdf1fa57b2eda0b1
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(env): update env var list, cards, and preview modal

A	expo-app/sources/components/EnvironmentVariableCard.test.ts
M	expo-app/sources/components/EnvironmentVariableCard.tsx
A	expo-app/sources/components/EnvironmentVariablesList.test.ts
M	expo-app/sources/components/EnvironmentVariablesList.tsx
A	expo-app/sources/components/newSession/EnvironmentVariablesPreviewModal.tsx
A	expo-app/sources/components/newSession/ProfileCompatibilityIcon.tsx

commit 65bae55a0b61c4af5cd084945577a271a0c6cd9a
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(i18n): separate translation types and content

M	expo-app/sources/text/README.md
D	expo-app/sources/text/_default.ts
A	expo-app/sources/text/_types.ts
M	expo-app/sources/text/index.ts
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts
M	expo-app/sources/theme.css

commit 2993b5c860ffe5165867095b7ae5f5440f0a935c
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(new-session): restore standard modal flow

A	expo-app/sources/__tests__/app/new/pick/path.test.ts
M	expo-app/sources/app/(app)/_layout.tsx
M	expo-app/sources/app/(app)/machine/[id].tsx
M	expo-app/sources/app/(app)/new/index.tsx
M	expo-app/sources/app/(app)/new/pick/machine.tsx
M	expo-app/sources/app/(app)/new/pick/path.tsx
M	expo-app/sources/app/(app)/new/pick/profile-edit.tsx
A	expo-app/sources/app/(app)/new/pick/profile.tsx
M	expo-app/sources/app/(app)/settings/features.tsx
M	expo-app/sources/components/AgentInput.tsx
M	expo-app/sources/components/SessionTypeSelector.tsx
A	expo-app/sources/components/newSession/MachineSelector.tsx
A	expo-app/sources/components/newSession/PathSelector.tsx
M	expo-app/sources/components/newSession/ProfileCompatibilityIcon.tsx
A	expo-app/sources/sync/modelOptions.ts
A	expo-app/sources/utils/recentMachines.ts
A	expo-app/sources/utils/recentPaths.ts

commit 9e08047d24789583f061743482c55ac30e591b28
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(profiles): harden routing, grouping, and editing

M	expo-app/sources/app/(app)/session/[id]/info.tsx
M	expo-app/sources/app/(app)/settings/profiles.tsx
M	expo-app/sources/components/ProfileEditForm.tsx
M	expo-app/sources/components/SettingsView.tsx
A	expo-app/sources/components/profileActions.ts
A	expo-app/sources/profileRouteParams.test.ts
A	expo-app/sources/profileRouteParams.ts
A	expo-app/sources/sync/profileGrouping.test.ts
A	expo-app/sources/sync/profileGrouping.ts
A	expo-app/sources/sync/profileMutations.ts
A	expo-app/sources/sync/profileUtils.test.ts
M	expo-app/sources/sync/profileUtils.ts
M	expo-app/sources/sync/storageTypes.ts

commit 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(ui): unify list selectors and modal primitives

M	expo-app/CONTRIBUTING.md
M	expo-app/sources/app/(app)/settings/voice/language.tsx
M	expo-app/sources/components/AgentInput.tsx
M	expo-app/sources/components/Item.tsx
A	expo-app/sources/components/ItemActionsMenuModal.tsx
A	expo-app/sources/components/ItemGroup.dividers.test.ts
A	expo-app/sources/components/ItemGroup.dividers.ts
A	expo-app/sources/components/ItemGroup.selectableCount.test.ts
A	expo-app/sources/components/ItemGroup.selectableCount.ts
M	expo-app/sources/components/ItemGroup.tsx
A	expo-app/sources/components/ItemRowActions.tsx
D	expo-app/sources/components/NewSessionWizard.tsx
D	expo-app/sources/components/PermissionModeSelector.tsx
A	expo-app/sources/components/SearchHeader.tsx
M	expo-app/sources/components/SearchableListSelector.tsx
A	expo-app/sources/components/Switch.web.tsx
M	expo-app/sources/modal/ModalManager.ts
M	expo-app/sources/modal/components/BaseModal.tsx
M	expo-app/sources/modal/components/CustomModal.tsx
M	expo-app/sources/modal/components/WebAlertModal.tsx
M	expo-app/sources/modal/types.ts
D	expo-app/sources/sync/profileSync.ts
M	expo-app/sources/sync/reducer/phase0-skipping.spec.ts
M	expo-app/sources/theme.ts
A	expo-app/sources/utils/ignoreNextRowPress.test.ts
A	expo-app/sources/utils/ignoreNextRowPress.ts
A	expo-app/sources/utils/promptUnsavedChangesAlert.test.ts
A	expo-app/sources/utils/promptUnsavedChangesAlert.ts

commit 2ab560bb0535df6c77cd14b314748566e46732b4
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(cli-detection): add daemon detect-cli RPC support

M	expo-app/sources/hooks/useCLIDetection.ts
M	expo-app/sources/sync/ops.ts

commit 2d4675a5d051d623b18ca85f284e74c21197237d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(agent-input): use compact permission badges

M	expo-app/sources/components/AgentInput.tsx

commit d97924f3ef398638746919a3fee3675b0a12cee6
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    chore(test): define __DEV__ for vitest

M	expo-app/vitest.config.ts

commit 9c19baa833b91a7ac16bef710c18a19134e02ac2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(settings): add api keys and experiment toggles

M	expo-app/sources/profileRouteParams.ts
M	expo-app/sources/sync/persistence.ts
M	expo-app/sources/sync/settings.spec.ts
M	expo-app/sources/sync/settings.ts

commit 21cc6df79f5099a3c72d264531999a5f46ee3956
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(api-keys): add saved API keys UI

A	expo-app/sources/app/(app)/new/pick/api-key.tsx
A	expo-app/sources/app/(app)/settings/api-keys.tsx
A	expo-app/sources/components/ApiKeyAddModal.tsx
M	expo-app/sources/components/SettingsView.tsx
A	expo-app/sources/components/apiKeys/ApiKeysList.tsx

commit ce9cd74d408afdfaa0453123e4ad69bf03239cbb
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(machine): surface detected CLI status

M	expo-app/sources/app/(app)/machine/[id].tsx
M	expo-app/sources/components/SearchableListSelector.tsx
A	expo-app/sources/components/machine/DetectedClisList.tsx
A	expo-app/sources/components/machine/DetectedClisModal.tsx
A	expo-app/sources/components/newSession/MachineCliGlyphs.tsx
M	expo-app/sources/components/newSession/MachineSelector.tsx
M	expo-app/sources/hooks/useCLIDetection.ts
A	expo-app/sources/hooks/useMachineDetectCliCache.ts
M	expo-app/sources/sync/ops.ts

commit 7899bbd8433ebc5a0ba9d97e00ef6cc11c88614c
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(profiles): add API key requirements flow

M	expo-app/sources/app/(app)/settings/profiles.tsx
A	expo-app/sources/components/ApiKeyRequirementModal.tsx
A	expo-app/sources/components/OptionTiles.tsx
M	expo-app/sources/components/ProfileEditForm.tsx
A	expo-app/sources/components/ProfileRequirementsBadge.tsx
A	expo-app/sources/components/profiles/ProfilesList.tsx
A	expo-app/sources/components/profiles/profileListModel.test.ts
A	expo-app/sources/components/profiles/profileListModel.ts
A	expo-app/sources/hooks/useProfileEnvRequirements.ts
A	expo-app/sources/sync/profileSecrets.ts
M	expo-app/sources/sync/profileUtils.ts

commit 0023ba1ea5aa2a824b450e8b95812e30f5e6907e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(i18n): update translations and tooling

M	expo-app/sources/scripts/compareTranslations.ts
A	expo-app/sources/scripts/findUntranslatedLiterals.ts
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 12e75a3b36fa49aa4d91cedd8464e8afcb65e2a8
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(autocomplete): remove debug suggestion logs

M	expo-app/sources/components/autocomplete/useActiveSuggestions.ts

commit 679877c26ea9b3a3eb250a60c8c425ce2aee7f84
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(settings): expose per-experiment toggles

M	expo-app/sources/app/(app)/settings/features.tsx

commit 4dc9c7f8759c1f5f1713167ca0888b87463084b3
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(agent-input): add configurable action bar layout

M	expo-app/sources/app/(app)/settings/appearance.tsx
M	expo-app/sources/components/AgentInput.tsx

commit e8e42a6087add8e0c3713980c9497c59e34a3fa9
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(modal): prevent stacked modal touch-blocking on iOS

M	expo-app/sources/app/(app)/_layout.tsx
M	expo-app/sources/modal/ModalManager.ts
M	expo-app/sources/modal/components/BaseModal.tsx
M	expo-app/sources/modal/components/CustomModal.tsx
M	expo-app/sources/modal/types.ts

commit daa0b4527d7fb9b2108c9fef395e835fea32caa2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(new-session): add api key selection and wizard extraction

A	expo-app/sources/app/(app)/new/NewSessionWizard.tsx
M	expo-app/sources/app/(app)/new/index.tsx
M	expo-app/sources/app/(app)/new/pick/profile.tsx
M	expo-app/sources/components/newSession/ProfileCompatibilityIcon.tsx

commit 94814465bf81386c381971cd23b58b83874e5a15
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    perf(sync): debounce pending settings writes

M	expo-app/sources/sync/sync.ts

commit 7ffd0c3428cbbceb7df39396142100da8fd4841d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(ui): localize error alerts

M	expo-app/sources/hooks/useHappyAction.ts

commit 97ca69e0a735156301f1943a870e4220ed82296e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(i18n): replace remaining UI literals

M	expo-app/sources/app/(app)/artifacts/[id].tsx
M	expo-app/sources/app/(app)/restore/index.tsx
M	expo-app/sources/app/(app)/restore/manual.tsx
M	expo-app/sources/app/(app)/session/[id]/info.tsx
M	expo-app/sources/app/(app)/settings/connect/claude.tsx
M	expo-app/sources/components/ChatFooter.tsx
M	expo-app/sources/components/CommandPalette/CommandPaletteResults.tsx
M	expo-app/sources/components/CommandView.tsx
M	expo-app/sources/components/ConnectButton.tsx
M	expo-app/sources/components/EmptyMainScreen.tsx
M	expo-app/sources/components/EmptyMessages.tsx
M	expo-app/sources/components/EmptySessionsTablet.tsx
M	expo-app/sources/components/MessageView.tsx
M	expo-app/sources/components/OAuthView.tsx
M	expo-app/sources/components/VoiceAssistantStatusBar.tsx
M	expo-app/sources/components/markdown/MarkdownView.tsx
M	expo-app/sources/components/markdown/MermaidRenderer.tsx
M	expo-app/sources/components/usage/UsageChart.tsx
M	expo-app/sources/utils/microphonePermissions.ts

commit 5f5b57df5181fdb2879d44c72e1d41b871c0e5ff
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(ui): improve item rendering and action menu timing

M	expo-app/sources/components/Item.tsx
M	expo-app/sources/components/ItemActionsMenuModal.tsx
M	expo-app/sources/components/ItemGroup.tsx
M	expo-app/sources/components/ItemRowActions.tsx
M	expo-app/sources/components/SessionsList.tsx

commit 7976b877259cac770f41537f44fa70e54df721a2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(experiments): gate Zen, file viewer, and voice auth flow

M	expo-app/sources/-session/SessionView.tsx
M	expo-app/sources/-zen/ZenAdd.tsx
M	expo-app/sources/-zen/ZenHome.tsx
M	expo-app/sources/-zen/ZenView.tsx
M	expo-app/sources/-zen/components/ZenHeader.tsx
M	expo-app/sources/components/SidebarView.tsx
M	expo-app/sources/realtime/RealtimeSession.ts

commit 6ed379f82c3497512316f23d15b2c2a0556a160e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(ui): add modal + popover overlay primitives
    
    - Introduce shared web/native modal stacking primitives (Radix Dialog on web; app modal host on native).
    
    - Add Popover + portal/spotlight infrastructure (OverlayPortal, ModalPortalTarget, ScrollEdgeFades) to prevent clipped menus and focus/scroll issues.
    
    - Refactor Command Palette/item actions to use new overlay plumbing and remove legacy modal wrappers.
    
    - Add targeted tests for modal provider/manager, BaseModal, Popover portal behavior, and overlay positioning.

A	expo-app/sources/components/ActionListSection.tsx
A	expo-app/sources/components/AgentInput.autocomplete.test.ts
M	expo-app/sources/components/AgentInput.tsx
M	expo-app/sources/components/AgentInputAutocomplete.tsx
M	expo-app/sources/components/CommandPalette/CommandPalette.tsx
M	expo-app/sources/components/CommandPalette/CommandPaletteInput.tsx
M	expo-app/sources/components/CommandPalette/CommandPaletteItem.tsx
D	expo-app/sources/components/CommandPalette/CommandPaletteModal.tsx
A	expo-app/sources/components/ConnectionStatusControl.tsx
A	expo-app/sources/components/FloatingOverlay.arrow.test.ts
M	expo-app/sources/components/FloatingOverlay.tsx
M	expo-app/sources/components/Item.tsx
D	expo-app/sources/components/ItemActionsMenuModal.tsx
M	expo-app/sources/components/ItemGroup.tsx
M	expo-app/sources/components/ItemRowActions.tsx
A	expo-app/sources/components/ModalPortalTarget.tsx
A	expo-app/sources/components/OverlayPortal.tsx
A	expo-app/sources/components/Popover.nativePortal.test.ts
A	expo-app/sources/components/Popover.test.ts
A	expo-app/sources/components/Popover.tsx
A	expo-app/sources/components/PopoverBoundary.tsx
A	expo-app/sources/components/ScrollEdgeFades.tsx
A	expo-app/sources/components/ScrollEdgeIndicators.tsx
A	expo-app/sources/components/SelectableRow.tsx
A	expo-app/sources/components/dropdown/DropdownMenu.tsx
A	expo-app/sources/components/dropdown/SelectableMenuResults.tsx
A	expo-app/sources/components/dropdown/selectableMenuTypes.ts
A	expo-app/sources/components/dropdown/useSelectableMenu.ts
A	expo-app/sources/components/itemActions/types.ts
A	expo-app/sources/components/useScrollEdgeFades.ts
A	expo-app/sources/dev/reactNativeStub.ts
A	expo-app/sources/modal/ModalManager.test.ts
M	expo-app/sources/modal/ModalManager.ts
A	expo-app/sources/modal/ModalProvider.test.ts
M	expo-app/sources/modal/ModalProvider.tsx
A	expo-app/sources/modal/components/BaseModal.test.ts
M	expo-app/sources/modal/components/BaseModal.tsx
M	expo-app/sources/modal/components/CustomModal.tsx
M	expo-app/sources/modal/components/WebAlertModal.tsx
M	expo-app/sources/modal/components/WebPromptModal.tsx
A	expo-app/sources/utils/radixCjs.ts
A	expo-app/sources/utils/reactDomCjs.ts
M	expo-app/vitest.config.ts

commit f0787de5308e51a4898087bad56b83d387196116
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(sync): add secrets + terminal settings primitives
    
    - Add encrypted-at-rest SecretString plumbing and saved secrets/settings schemas (no plaintext persisted).
    
    - Introduce terminal/tmux settings types and helpers (global + per-machine overrides) plus spawn payload utilities.
    
    - Add platform crypto shims for vitest/node and extend sync + encryption utilities to support these flows.
    
    - Add focused tests for secret sealing/decryption, secret satisfaction, spawn payload construction, terminal settings resolution, and detect-cli response parsing.

M	expo-app/sources/encryption/aes.appspec.ts
M	expo-app/sources/encryption/base64.appspec.ts
M	expo-app/sources/encryption/hmac_sha512.ts
M	expo-app/sources/encryption/libsodium.ts
A	expo-app/sources/platform/cryptoRandom.node.ts
A	expo-app/sources/platform/cryptoRandom.ts
A	expo-app/sources/platform/digest.node.ts
A	expo-app/sources/platform/digest.ts
A	expo-app/sources/platform/hmacSha512.node.ts
A	expo-app/sources/platform/hmacSha512.ts
A	expo-app/sources/platform/randomUUID.node.ts
A	expo-app/sources/platform/randomUUID.ts
M	expo-app/sources/profileRouteParams.ts
M	expo-app/sources/sync/apiArtifacts.ts
M	expo-app/sources/sync/apiFeed.ts
M	expo-app/sources/sync/apiFriends.ts
M	expo-app/sources/sync/apiGithub.ts
M	expo-app/sources/sync/apiKv.ts
M	expo-app/sources/sync/apiPush.ts
M	expo-app/sources/sync/apiServices.ts
M	expo-app/sources/sync/apiSocket.ts
M	expo-app/sources/sync/apiUsage.ts
A	expo-app/sources/sync/debugSettings.ts
A	expo-app/sources/sync/detectCliResponse.test.ts
A	expo-app/sources/sync/detectCliResponse.ts
M	expo-app/sources/sync/encryption/artifactEncryption.ts
M	expo-app/sources/sync/encryption/encryption.ts
M	expo-app/sources/sync/encryption/encryptor.appspec.ts
A	expo-app/sources/sync/ops.spawnSessionPayload.test.ts
M	expo-app/sources/sync/ops.ts
M	expo-app/sources/sync/persistence.test.ts
M	expo-app/sources/sync/persistence.ts
M	expo-app/sources/sync/profileGrouping.test.ts
M	expo-app/sources/sync/profileMutations.ts
M	expo-app/sources/sync/profileSecrets.ts
M	expo-app/sources/sync/profileUtils.ts
M	expo-app/sources/sync/reducer/reducer.spec.ts
M	expo-app/sources/sync/reducer/reducer.ts
A	expo-app/sources/sync/secretBindings.test.ts
A	expo-app/sources/sync/secretBindings.ts
A	expo-app/sources/sync/secretSettings.test.ts
A	expo-app/sources/sync/secretSettings.ts
M	expo-app/sources/sync/settings.spec.ts
M	expo-app/sources/sync/settings.ts
A	expo-app/sources/sync/spawnSessionPayload.ts
M	expo-app/sources/sync/storage.ts
A	expo-app/sources/sync/storageTypes.terminal.test.ts
M	expo-app/sources/sync/storageTypes.ts
M	expo-app/sources/sync/sync.ts
A	expo-app/sources/sync/terminalSettings.spec.ts
A	expo-app/sources/sync/terminalSettings.ts
M	expo-app/sources/utils/errors.ts
M	expo-app/sources/utils/oauth.ts
A	expo-app/sources/utils/secretSatisfaction.test.ts
A	expo-app/sources/utils/secretSatisfaction.ts
M	expo-app/sources/utils/sync.ts
M	expo-app/sources/utils/tempDataStore.ts
A	expo-app/sources/utils/terminalSessionDetails.test.ts
A	expo-app/sources/utils/terminalSessionDetails.ts
M	expo-app/sources/utils/time.ts

commit 66ee1eaf88a68f1cfb742958ff06521f9a83cf97
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(secrets): add secrets management + requirement resolver
    
    - Replace legacy API key settings with encrypted-at-rest Secrets (saved secrets + session-only entry).
    
    - Add SecretRequirementModal flow (use machine env / select saved / enter once) and improve profile requirements UX.
    
    - Update env-var UI to handle sensitive/forced-sensitive values and improve disclosure controls.
    
    - Extend i18n + theme tokens for the new secrets and requirements UI.

M	expo-app/sources/app/(app)/settings/features.tsx
M	expo-app/sources/app/(app)/settings/profiles.tsx
R055	expo-app/sources/app/(app)/settings/api-keys.tsx	expo-app/sources/app/(app)/settings/secrets.tsx
D	expo-app/sources/components/ApiKeyRequirementModal.tsx
M	expo-app/sources/components/EnvironmentVariableCard.tsx
M	expo-app/sources/components/EnvironmentVariablesList.test.ts
M	expo-app/sources/components/EnvironmentVariablesList.tsx
M	expo-app/sources/components/ProfileEditForm.tsx
M	expo-app/sources/components/ProfileRequirementsBadge.tsx
A	expo-app/sources/components/SecretRequirementModal.tsx
M	expo-app/sources/components/profileActions.ts
M	expo-app/sources/components/profiles/ProfilesList.tsx
A	expo-app/sources/components/profiles/profileDisplay.ts
R092	expo-app/sources/components/ApiKeyAddModal.tsx	expo-app/sources/components/secrets/SecretAddModal.tsx
R060	expo-app/sources/components/apiKeys/ApiKeysList.tsx	expo-app/sources/components/secrets/SecretsList.tsx
A	expo-app/sources/hooks/useEnvironmentVariables.hook.test.ts
M	expo-app/sources/hooks/useEnvironmentVariables.ts
A	expo-app/sources/hooks/useMachineEnvPresence.ts
M	expo-app/sources/hooks/useProfileEnvRequirements.ts
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts
M	expo-app/sources/theme.ts

commit bdaf6913141f58774c1b2b2aeca4ace3e8633531
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(terminal): add Terminal settings + tmux metadata
    
    - Add Terminal settings screen with tmux options (session name, isolated server, tmp dir) and keep /settings/tmux as a backward-compatible alias.
    
    - Update Settings entry to Terminal and show enabled/disabled subtitle based on terminalUseTmux.
    
    - Extend CLI detection hook to include tmux availability and display it on machine details.
    
    - Surface tmux attach target + fallback reason in session details for debugging/resume workflows.

M	expo-app/sources/app/(app)/machine/[id].tsx
M	expo-app/sources/app/(app)/session/[id]/info.tsx
A	expo-app/sources/app/(app)/settings/terminal.tsx
A	expo-app/sources/app/(app)/settings/tmux.tsx
M	expo-app/sources/components/SettingsView.tsx
M	expo-app/sources/components/machine/DetectedClisList.tsx
A	expo-app/sources/hooks/useCLIDetection.hook.test.ts
M	expo-app/sources/hooks/useCLIDetection.ts

commit bc779e4f7909eeeb1725b5352860d024961a0dba
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(new-session): integrate secrets + terminal spawn options
    
    - Wire secret requirement resolution into the new session wizard (saved secrets, machine env, and session-only values).
    
    - Use centralized terminal spawn option resolution for tmux requests and surface tmux-not-detected banners during machine selection.
    
    - Update supporting screens/components (new session pickers, sidebar/main view, auth prompts) to match the new flows.

M	expo-app/sources/-zen/model/ops.ts
M	expo-app/sources/app/(app)/dev/messages-demo-data.ts
M	expo-app/sources/app/(app)/dev/todo-demo.tsx
M	expo-app/sources/app/(app)/friends/search.tsx
M	expo-app/sources/app/(app)/index.tsx
M	expo-app/sources/app/(app)/new/NewSessionWizard.tsx
M	expo-app/sources/app/(app)/new/index.tsx
M	expo-app/sources/app/(app)/new/pick/machine.tsx
M	expo-app/sources/app/(app)/new/pick/profile-edit.tsx
M	expo-app/sources/app/(app)/new/pick/profile.tsx
R058	expo-app/sources/app/(app)/new/pick/api-key.tsx	expo-app/sources/app/(app)/new/pick/secret.tsx
M	expo-app/sources/auth/authChallenge.ts
M	expo-app/sources/auth/authQRStart.ts
M	expo-app/sources/components/MainView.tsx
M	expo-app/sources/components/OptionTiles.tsx
M	expo-app/sources/components/SidebarView.tsx
M	expo-app/sources/hooks/useSearch.ts

commit cb11d4bdb25a6423f156dd0f9b859b5fbf603857
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    docs: add AGENTS.md symlink + update CLAUDE.md
    
    - Keep agent guidance single-sourced by symlinking AGENTS.md -> CLAUDE.md.
    
    - Update CLAUDE.md to reflect current test runner and document modal/popover + settings/secret invariants.

A	expo-app/AGENTS.md
M	expo-app/CLAUDE.md

commit 1bc3b971577664fc1f3d1f84a490c8054358c230
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(sync): handle non-JSON 400 responses

A	expo-app/sources/sync/apiGithub.test.ts
M	expo-app/sources/sync/apiGithub.ts

commit ea2e4d19d63370180f5558093ab3df1b9fb2f75b
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    chore(deps): align react-test-renderer with react

M	expo-app/package.json
M	expo-app/yarn.lock

commit dd041d21ecfc38b571011972a08b8532e5fe499f
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(sync): guard JSON parsing on disconnect errors

M	expo-app/sources/sync/apiGithub.test.ts
M	expo-app/sources/sync/apiGithub.ts
A	expo-app/sources/sync/apiServices.test.ts
M	expo-app/sources/sync/apiServices.ts

commit 395da4ff31674675c93d443626d50d3baa3f99ed
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(zen): avoid todo variable shadowing

M	expo-app/sources/-zen/ZenHome.tsx

commit 2e956f32f2200c1eb8199efc51ce1b443bf20e81
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(new): keep pick screens above iOS modal

A	expo-app/sources/__tests__/app/new/pick/machine.presentation.test.ts
A	expo-app/sources/__tests__/app/new/pick/path.presentation.test.ts
A	expo-app/sources/__tests__/app/new/pick/profile-edit.headerButtons.test.ts
A	expo-app/sources/__tests__/app/new/pick/profile.presentation.test.ts
A	expo-app/sources/__tests__/app/new/pick/secret.presentation.test.ts
A	expo-app/sources/__tests__/app/settings/profiles.nativeNavigation.test.ts
M	expo-app/sources/app/(app)/_layout.tsx
M	expo-app/sources/app/(app)/new/pick/machine.tsx
M	expo-app/sources/app/(app)/new/pick/path.tsx
M	expo-app/sources/app/(app)/new/pick/profile-edit.tsx
M	expo-app/sources/app/(app)/new/pick/profile.tsx
M	expo-app/sources/app/(app)/new/pick/secret.tsx
M	expo-app/sources/app/(app)/settings/profiles.tsx

commit 2da2f9349ec5f50932cd3c2834c7b6c2fd0db16f
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(popover): allow web fixed positioning types

M	expo-app/sources/components/Popover.tsx

commit 43f23f2f082e149eb2d5d29b43b5c7461eaa5e40
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    chore(format): replace stray tabs with spaces

M	expo-app/sources/components/SearchHeader.tsx
M	expo-app/sources/sync/settings.spec.ts

commit e1d55fdbd9ee31fb9bb80ce1a65643bef5890d44
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(i18n): improve untranslated literal scan parsing

M	expo-app/sources/scripts/findUntranslatedLiterals.ts

commit c210c111559885f1206dc836e7c13c9e1cf2bd45
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(sync): restore stubbed fetch between tests

M	expo-app/sources/sync/apiGithub.test.ts

commit 66c6784513355e763d09dcfc530c09348c1c3a70
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(ui): apply small review fixes

M	expo-app/sources/-session/SessionView.tsx
M	expo-app/sources/app/(app)/new/pick/machine.tsx
M	expo-app/sources/app/(app)/settings/terminal.tsx
M	expo-app/sources/components/ConnectionStatusControl.tsx
M	expo-app/sources/components/OptionTiles.tsx
M	expo-app/sources/components/SettingsView.tsx
M	expo-app/sources/components/dropdown/DropdownMenu.tsx
M	expo-app/sources/utils/sync.ts

commit 2472b376775cf1ba60b0af98e7abcda7299defba
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(modal): make backdrop z-index assertion safer

M	expo-app/sources/modal/ModalProvider.test.ts

commit 02450d179aaf75c109ab7b7a387bf1bfc93c2805
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(profiles): align experimentsEnabled for built-in profiles

M	expo-app/sources/components/profiles/ProfilesList.tsx

commit ff7bec72358f73e2cc5e0e816317e688d31aaabf
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(secrets): tighten callback deps and fix indentation

M	expo-app/sources/components/secrets/SecretsList.tsx

commit 1bb65f5dd494e7d8d14533d6623dd2cdbabd0283
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(new-session): avoid stuck secret requirement modal guard

M	expo-app/sources/app/(app)/new/index.tsx

commit f7f81497444d9547c9e077e3ad45c41a3293c2a2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(modal): prevent non-dismissible WebAlertModal

M	expo-app/sources/__tests__/app/new/pick/machine.presentation.test.ts
A	expo-app/sources/components/ConnectionStatusControl.popover.test.ts
M	expo-app/sources/components/ConnectionStatusControl.tsx
M	expo-app/sources/components/Popover.test.ts
M	expo-app/sources/components/Popover.tsx
M	expo-app/sources/modal/components/WebAlertModal.tsx

commit bb09f91de71568e402517d526a2f068f01cc555d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(settings): keep valid secrets when one entry is invalid

M	expo-app/sources/sync/settings.spec.ts
M	expo-app/sources/sync/settings.ts

commit 765423af52b457cf6ca83ae52cf10301568f4a9c
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(agent-input): cycle permission mode from normalized state

M	expo-app/sources/components/AgentInput.tsx
M	expo-app/sources/sync/permissionTypes.test.ts
M	expo-app/sources/sync/permissionTypes.ts

commit e533db1813a54a9f6901b133b10e6d848e091ac3
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(popover): add screens cjs helper and fix fixed positioning types

M	expo-app/sources/components/Popover.tsx
A	expo-app/sources/utils/reactNativeScreensCjs.ts

commit 2ed3100311c722a476844f6c6cbcc6a3cb0d920f
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(secrets): hide values when using secret vault

M	expo-app/sources/components/EnvironmentVariableCard.tsx
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit e5848c4805226e1c460df58717b182d25f06d504
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(ui): harden overlays and permission cycling

M	expo-app/sources/app/(app)/new/NewSessionWizard.tsx
M	expo-app/sources/components/AgentInput.tsx
A	expo-app/sources/components/ItemRowActions.test.ts
M	expo-app/sources/components/ItemRowActions.tsx
A	expo-app/sources/components/OverlayPortal.test.ts
M	expo-app/sources/components/Popover.nativePortal.test.ts

commit 69fdcff96a4c7f21982cbc64ebe6a47222b9d685
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(sync): restore session permission mode from last message

M	expo-app/sources/sync/storage.ts
M	expo-app/sources/sync/storageTypes.ts

commit 9b499c5dccce7aa7762f13dece9b259183949b9d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(sync): persist permission mode timestamp for restart-safe arbitration

M	expo-app/sources/sync/persistence.ts
M	expo-app/sources/sync/storage.ts

commit def8852509d0163a36ed4363770ebd52877338bd
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(sync): persist permission mode reliably across devices

M	expo-app/sources/-session/SessionView.tsx
A	expo-app/sources/constants/PermissionModes.ts
M	expo-app/sources/sync/apiSocket.ts
M	expo-app/sources/sync/persistence.ts
M	expo-app/sources/sync/settings.ts
M	expo-app/sources/sync/storage.ts
M	expo-app/sources/sync/storageTypes.ts
M	expo-app/sources/sync/sync.ts
A	expo-app/sources/sync/time.ts
M	expo-app/sources/sync/typesMessageMeta.ts
M	expo-app/sources/sync/typesRaw.ts

commit b1c8a6fecd0142b90bb4056797735eb9201cd53a
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-12
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(session): archive when kill RPC unavailable

M	expo-app/sources/app/(app)/session/[id]/info.tsx
M	expo-app/sources/components/ActiveSessionsGroup.tsx
M	expo-app/sources/components/ActiveSessionsGroupCompact.tsx
M	expo-app/sources/sync/ops.ts

commit c06b6202b5d490d71adc5bda9c9f739eceaa1e8c
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-06
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    Add copy-to-clipboard button to message blocks
    
    Introduces a CopyMessageButton component to allow users to copy message text from user and agent message blocks. Includes visual feedback on copy and error handling, with related styles added for the new button.

M	expo-app/sources/components/MessageView.tsx

commit 9fc7d3d412b9ffcfb7fc9db08c05199ece6f5d75
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(sessions): group inactive sessions by project

M	expo-app/sources/app/(app)/settings/features.tsx
M	expo-app/sources/components/SessionsList.tsx
A	expo-app/sources/sync/sessionListViewData.test.ts
A	expo-app/sources/sync/sessionListViewData.ts
M	expo-app/sources/sync/settings.spec.ts
M	expo-app/sources/sync/settings.ts
M	expo-app/sources/sync/storage.ts
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 62a8b1b07c3e66627718735d2737d2435e1fd22f
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(sessions): add unread badge

M	expo-app/sources/-session/SessionView.tsx
M	expo-app/sources/components/ActiveSessionsGroup.tsx
M	expo-app/sources/components/ActiveSessionsGroupCompact.tsx
M	expo-app/sources/components/Avatar.tsx
M	expo-app/sources/components/SessionsList.tsx
M	expo-app/sources/sync/persistence.ts
M	expo-app/sources/sync/storage.ts
A	expo-app/sources/sync/unread.test.ts
A	expo-app/sources/sync/unread.ts

commit 82d74454c3c4407c2ec5b531adaa3910d159aa73
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(typecheck): restore permission imports and Popover web styles

M	expo-app/sources/-session/SessionView.tsx
M	expo-app/sources/sync/ops.ts
M	expo-app/sources/sync/storage.ts

commit 4f2b533f99c2505bd9960ade61760f7bab833652
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-11
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(tools): add approve/reject buttons to ExitPlanMode
    
    Add interactive UI for plan approval in ExitPlanToolView:
    - Approve button sends approval message and proceeds with implementation
    - Reject button sends rejection message and asks for plan revision
    - Shows 'Response sent' state after user responds
    - Buttons disabled while processing to prevent double-submission
    
    Changes:
    - Rewrite ExitPlanToolView with interactive approve/reject buttons
    - Add loading states and disabled styles for buttons
    - Add translation strings for button labels and messages
    - Use sessionDeny + sendMessage pattern (same as AskUserQuestion)

M	expo-app/sources/components/tools/views/ExitPlanToolView.tsx
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit c86cbd26b04087d45570bbb9109735c0d58e7db2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-07
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(queue): add pending message queue UI and send modes

M	expo-app/sources/-session/SessionView.tsx
A	expo-app/sources/app/(app)/settings/message-sending.tsx
M	expo-app/sources/components/MessageView.tsx
A	expo-app/sources/components/PendingMessagesModal.tsx
A	expo-app/sources/components/PendingQueueIndicator.tsx
M	expo-app/sources/components/SettingsView.tsx
M	expo-app/sources/sync/apiTypes.ts
M	expo-app/sources/sync/settings.spec.ts
M	expo-app/sources/sync/settings.ts
M	expo-app/sources/sync/storage.ts
M	expo-app/sources/sync/storageTypes.ts
M	expo-app/sources/sync/sync.ts

commit 42da6dae8fe47c5ecfa6678df38c7c6146e15248
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-07
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(session): add session rename support

M	expo-app/sources/app/(app)/session/[id]/info.tsx
M	expo-app/sources/sync/ops.ts
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 057102f679041663a6194c89d20fb37ce8c69826
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-12
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(resume): add resume session option for new sessions
    
    - Add resume picker and pass vendor resume id when the selected agent supports resume
    
    - Gate resume UI via agent capabilities for upstream friendliness (Claude only by default)
    
    - Expose Codex session id in Session Info + translations

M	expo-app/sources/app/(app)/new/NewSessionWizard.tsx
M	expo-app/sources/app/(app)/new/index.tsx
A	expo-app/sources/app/(app)/new/pick/resume.tsx
M	expo-app/sources/sync/ops.ts
M	expo-app/sources/sync/persistence.ts
M	expo-app/sources/sync/spawnSessionPayload.ts
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts
A	expo-app/sources/utils/agentCapabilities.ts
M	expo-app/sources/utils/tempDataStore.ts

commit 05532bd65c6b8de70bc6ca514f1d7aacc152ae78
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-14
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(resume): show resume chip under path in new session

M	expo-app/sources/app/(app)/new/NewSessionWizard.tsx
M	expo-app/sources/app/(app)/new/index.tsx
M	expo-app/sources/components/AgentInput.tsx

commit cd5771e5088145cee2ff4b72989182290384c348
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-11
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat: resume inactive Claude sessions from UI
    
    Add the ability to resume inactive Claude sessions directly from the UI.
    When a session becomes inactive (agent disconnected), users can now type
    a message and send it to resume the session instead of starting a new one.
    
    Changes:
    - Add RESUMABLE_AGENTS config for dynamic agent resume capability
    - Add canResumeSession() helper to check if session supports resume
    - Enable input field for inactive resumable sessions with status indicator
    - Add resumeSession RPC operation to trigger resume via daemon
    - Add translations for session resume states
    
    The resume feature uses the existing Claude session ID stored in metadata
    to reconnect to the same conversation, preserving message history.

A	expo-app/INACTIVE_SESSION_RESUME.md
M	expo-app/sources/-session/SessionView.tsx
M	expo-app/sources/sync/ops.ts

commit 456e2ad8e2b80efcc7eb05ca71dedf313e4230b8
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-12
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(resume): don't require agentSessionId from UI
    
    - UI now resumes inactive sessions by Happy session id; machine/daemon derives vendor resume id from local persisted session state
    
    - Keeps send disabled for inactive sessions that aren't resumable

M	expo-app/sources/-session/SessionView.tsx
M	expo-app/sources/sync/ops.ts
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts
M	expo-app/sources/utils/agentCapabilities.ts

commit 9b0069e3d30ca504df810d81cf2779398168cc0d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-11
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(fork): enable Codex resume support
    
    Enable 'codex' in RESUMABLE_AGENTS for fork builds.
    This allows resuming Codex sessions from the UI.

M	expo-app/sources/app/(app)/session/[id]/info.tsx
M	expo-app/sources/sync/storageTypes.ts
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts
M	expo-app/sources/utils/agentCapabilities.ts

commit 4ddaef02210e47ed7fd8ea4cf287611d2ea6f450
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(sync): omit model meta for queued messages

M	expo-app/sources/sync/sync.ts

commit 3fbdc10018fe62b67ddc05dc62ebf9ba7466f90f
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-12
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix: tmux parsing/targeting + review feedback
    
    Validation:
    
    - Verified TMUX/TMUX_PANE values inside an isolated tmux server (custom socket)
    
    - Verified kill-window syntax and new-session -t semantics via tmux manpage
    
    Changes:
    
    - Correct TMUX env parsing (socket_path + server_pid) and prefer TMUX_PANE for pane id
    
    - Avoid invalid -t injection for commands that already specify a target; do not treat new-session as targetable
    
    - Fix kill-window invocation to use -t session:window
    
    - Align Machine.metadata typing with runtime (nullable)
    
    - Make socket send behavior consistent when disconnected; tighten misc scripts/tests

M	cli/bin/happy-dev.mjs
M	cli/docs/bug-fix-plan-2025-01-15-athundt.md
M	cli/scripts/__tests__/ripgrep_launcher.test.ts
M	cli/scripts/claude_version_utils.cjs
M	cli/scripts/claude_version_utils.test.ts
M	cli/scripts/env-wrapper.cjs
M	cli/scripts/ripgrep_launcher.cjs
M	cli/scripts/test-continue-fix.sh
M	cli/src/api/api.test.ts
M	cli/src/api/apiSession.ts
M	cli/src/api/types.ts
M	cli/src/claude/claudeLocal.ts
M	cli/src/claude/runClaude.ts
M	cli/src/utils/tmux.test.ts
M	cli/src/utils/tmux.ts

commit 7292a29822bbd81cb10c292559a8f63bbc8ea73c
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(daemon): do not apply CLI active profile to GUI-spawned sessions

M	cli/src/daemon/run.ts

commit ce94cfa512ac7be97c3e8802ffebcc804e7489b3
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(session): persist profileId in session metadata via daemon spawn

M	cli/src/api/apiMachine.ts
M	cli/src/api/types.ts
M	cli/src/claude/runClaude.ts
M	cli/src/daemon/run.ts
M	cli/src/modules/common/registerCommonHandlers.ts
M	cli/src/utils/createSessionMetadata.ts

commit e58e97fd7ff4eac9f60ec55224c90fde52ceb2d1
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(pr107): harden daemon spawn + align profile schema

M	cli/src/daemon/run.ts
M	cli/src/persistence.ts
M	cli/src/utils/expandEnvVars.ts

commit 86330e2635957cd9863f3142399b1adba9522949
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(security): redact spawn secrets from daemon logs

M	cli/src/api/apiMachine.ts
M	cli/src/daemon/run.ts

commit a25acab22b64372e47a7d2a22276d8fd4dad9c96
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-15
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(socket): restore offline buffering for sends
    
    Remove the hard send guard that dropped messages while disconnected and rely on socket.io client buffering (tests updated).

M	cli/src/api/apiSession.test.ts
M	cli/src/api/apiSession.ts
M	cli/src/claude/runClaude.ts

commit a7d23148c3117d21f5b15a045f71d5da8757f49d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-15
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(logging): gate debug output and redact templates
    
    Make debugLargeJson a true DEBUG-only path and avoid logging expanded env values/defaults; tighten doctor masking for default templates.

A	cli/src/ui/doctor.test.ts
M	cli/src/ui/doctor.ts
A	cli/src/ui/logger.test.ts
M	cli/src/ui/logger.ts
M	cli/src/utils/expandEnvVars.test.ts
M	cli/src/utils/expandEnvVars.ts

commit ef418bc4dda3b67874a498a56ad0576fd8ca0ac9
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(pr107): redact profile secrets in doctor + align tmux tmpDir

M	cli/src/persistence.ts
M	cli/src/ui/doctor.test.ts

commit 1f90659694beaec4a990e7a02c6d628fb3721d08
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(profiles): remove unwired startup script and local env cache

M	cli/src/persistence.ts

commit 7aed8aaee02f5f444d099a243389c35685a1b3bd
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-15
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(profiles): drop provider config objects
    
    Align happy-cli profile schema with the app: profiles are env-var based only. Migrate any legacy provider config fields into environmentVariables during parsing to avoid data loss.

A	cli/src/persistence.profileSchema.test.ts
M	cli/src/persistence.ts

commit 6b0bfe546d9e8475696d7694f52d4d64cf65fbfc
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-15
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(runtime): support bun for daemon-spawned subprocesses
    
    Add a single runtime invocation builder for node vs bun and allow overriding via HAPPY_CLI_SUBPROCESS_RUNTIME.

A	cli/src/utils/spawnHappyCLI.invocation.test.ts
A	cli/src/utils/spawnHappyCLI.test.ts
M	cli/src/utils/spawnHappyCLI.ts

commit 4071466545ab1eaffba8cb6ebd55a85ef2732370
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-15
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(rpc): accept arbitrary env var maps for spawn
    
    The GUI sends a profile-derived env var map that may include provider-specific keys and tmux knobs; type it as Record<string,string>.

M	cli/src/modules/common/registerCommonHandlers.ts

commit 809be82b53e786a3146fa818c03f0a88c1e24a76
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(env): implement default assignment semantics

M	cli/src/utils/expandEnvVars.test.ts
M	cli/src/utils/expandEnvVars.ts

commit 4c2a671dc3f4409d572e9aef2c0c4340ddd5d097
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(rpc): add preview-env handler

A	cli/src/modules/common/registerCommonHandlers.previewEnv.test.ts
M	cli/src/modules/common/registerCommonHandlers.ts

commit 2973f7fe6861bf8623f0163aa99a2d73cfab81ad
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-15
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(codex): harden MCP command detection
    
    Handle codex --version output variations without misreporting 'not installed' and remove stdout logging of elicitation payloads.

A	cli/src/codex/codexMcpClient.test.ts
M	cli/src/codex/codexMcpClient.ts

commit c863db3d5bbcb5edc6353657f09049e30e457900
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-15
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(offline): make offline session stub safer
    
    Provide an EventEmitter-compatible stub and a focused unit test so offline mode can't crash on basic session events.

A	cli/src/utils/offlineSessionStub.test.ts
M	cli/src/utils/offlineSessionStub.ts

commit 0a1a91a631e77883e9c0b874674021c288bd0e57
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-15
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(tmux): support per-instance socket path

A	cli/src/utils/tmux.socketPath.test.ts
M	cli/src/utils/tmux.ts

commit c52227082c2b1366dbc878db1000395a0f3159d3
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-15
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(tmux): correct env, tmpdir, and session selection
    
    - Treat TMUX_TMPDIR as a directory via tmux client env (not -S socket path)
    
    - Pass per-window env via new-window -e KEY=value without shell-style quoting
    
    - Make empty sessionName resolve deterministically (attached/most-recent)
    
    - Preserve failure semantics for signal-terminated tmux commands

M	cli/src/api/api.test.ts
M	cli/src/api/apiMachine.ts
M	cli/src/api/apiSession.test.ts
M	cli/src/api/apiSession.ts
M	cli/src/claude/runClaude.ts
M	cli/src/claude/utils/sessionScanner.test.ts
M	cli/src/codex/codexMcpClient.ts
A	cli/src/daemon/run.tmuxEnv.test.ts
A	cli/src/daemon/run.tmuxSpawn.test.ts
M	cli/src/daemon/run.ts
M	cli/src/modules/common/registerCommonHandlers.ts
M	cli/src/persistence.profileSchema.test.ts
M	cli/src/persistence.ts
M	cli/src/ui/logger.test.ts
M	cli/src/utils/createSessionMetadata.ts
M	cli/src/utils/offlineSessionStub.test.ts
D	cli/src/utils/spawnHappyCLI.test.ts
A	cli/src/utils/tmux.commandEnv.test.ts
A	cli/src/utils/tmux.real.integration.test.ts
M	cli/src/utils/tmux.socketPath.test.ts
M	cli/src/utils/tmux.test.ts

commit 7a01a8e426291e8a32de4805ff12621db26fb990
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-16
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(claude): align sessionScanner path mapping

M	cli/src/claude/utils/sessionScanner.test.ts

commit 1075a768e551d5b7fc135d88636b03baf6938969
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-17
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(rpc): add detect-cli handler

A	cli/src/modules/common/registerCommonHandlers.detectCli.test.ts
M	cli/src/modules/common/registerCommonHandlers.ts

commit c988f68ca4d03f202a5bc6ff3e5fe18da2c3eb37
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(ui): surface Codex/Gemini errors in session UI
    
    - Add `formatErrorForUi` to turn unknown throws into user-visible text (with truncation).
    
    - Codex: forward MCP error/stream/startup failures to `sendSessionEvent`, and show tool-response errors.
    
    - Gemini: extract error formatting into `formatGeminiErrorForUi` so the UI gets actionable messages instead of silent hangs.

A	cli/src/codex/__tests__/extractCodexToolErrorText.test.ts
M	cli/src/codex/runCodex.ts
A	cli/src/codex/utils/formatCodexEventForUi.test.ts
A	cli/src/codex/utils/formatCodexEventForUi.ts
M	cli/src/gemini/runGemini.ts
A	cli/src/gemini/utils/formatGeminiErrorForUi.test.ts
A	cli/src/gemini/utils/formatGeminiErrorForUi.ts
A	cli/src/utils/formatErrorForUi.test.ts
A	cli/src/utils/formatErrorForUi.ts

commit b2269ee112523d99318612c2c23f81f3b0b58183
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(claude): use hook transcript path across switching
    
    - Prefer SessionStart hook transcript_path for session scanning + `claudeCheckSession` (keep `getProjectPath` heuristic as fallback).
    
    - Emit a UI message when the transcript file can’t be found yet (prevents a silent/blank UI).
    
    - Wait briefly for hook session info before switching to avoid null sessionId/transcript races.
    
    - Make the `switch` RPC idempotent (accepts {to:'local'|'remote'}; returns boolean; keeps legacy toggle when params are missing).
    
    - Keep hook-mode flags intact (don’t rewrite `--continue/--resume/--session-id` when hooks are enabled).
    
    - KeepAlive now reports the correct mode; remote init no longer blocks on a 10s file wait.

M	cli/src/claude/claudeLocal.test.ts
M	cli/src/claude/claudeLocal.ts
A	cli/src/claude/claudeLocalLauncher.test.ts
M	cli/src/claude/claudeLocalLauncher.ts
A	cli/src/claude/claudeRemote.test.ts
M	cli/src/claude/claudeRemote.ts
A	cli/src/claude/claudeRemoteLauncher.test.ts
M	cli/src/claude/claudeRemoteLauncher.ts
A	cli/src/claude/loop.test.ts
M	cli/src/claude/loop.ts
M	cli/src/claude/runClaude.ts
A	cli/src/claude/session.test.ts
M	cli/src/claude/session.ts
M	cli/src/claude/utils/claudeCheckSession.test.ts
M	cli/src/claude/utils/claudeCheckSession.ts
M	cli/src/claude/utils/sessionScanner.test.ts
M	cli/src/claude/utils/sessionScanner.ts
M	cli/src/claude/utils/startHookServer.ts

commit f53cf71d416ca52e94b2eac1171cfc9f6c298045
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(persistence): remove deprecated tmuxConfig
    
    - Drop the legacy profile tmuxConfig field and its env-var injection path.
    
    - Keep terminal/tmux behavior driven by explicit terminal settings/flags to avoid schema drift.

M	cli/src/persistence.ts

commit 8dae65f6c5851277eb5fb3235190f2f02f947a25
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(rpc): include tmux in detect-cli
    
    - Extend the detect-cli RPC to report tmux availability for UI gating and better diagnostics.
    
    - Add/adjust unit tests to cover tmux detection alongside existing CLI checks.

M	cli/src/modules/common/registerCommonHandlers.detectCli.test.ts
M	cli/src/modules/common/registerCommonHandlers.ts

commit ad66c6aaa3ae604456f02dc793b381a5064e43ec
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(terminal): add tmux metadata + attach tooling
    
    - Add terminal/tmux metadata to session creation (used by UI Session Details + attach workflows).
    
    - Persist local attachment info (best-effort) once a session ID exists and optionally surface tmux fallback reasons as UI-facing messages.
    
    - Add attach planning utilities and a new `happy attach` command.
    
    - Add headless tmux launcher support (`--tmux`) and internal terminal runtime flags for spawners.

M	cli/src/api/types.ts
M	cli/src/claude/runClaude.ts
M	cli/src/codex/runCodex.ts
A	cli/src/commands/attach.ts
M	cli/src/gemini/runGemini.ts
M	cli/src/index.ts
A	cli/src/terminal/headlessTmuxArgs.test.ts
A	cli/src/terminal/headlessTmuxArgs.ts
A	cli/src/terminal/startHappyHeadlessInTmux.ts
A	cli/src/terminal/terminalAttachPlan.test.ts
A	cli/src/terminal/terminalAttachPlan.ts
A	cli/src/terminal/terminalAttachmentInfo.test.ts
A	cli/src/terminal/terminalAttachmentInfo.ts
A	cli/src/terminal/terminalConfig.test.ts
A	cli/src/terminal/terminalConfig.ts
A	cli/src/terminal/terminalFallbackMessage.test.ts
A	cli/src/terminal/terminalFallbackMessage.ts
A	cli/src/terminal/terminalMetadata.ts
A	cli/src/terminal/terminalRuntimeFlags.test.ts
A	cli/src/terminal/terminalRuntimeFlags.ts
A	cli/src/terminal/tmuxSessionSelector.test.ts
A	cli/src/terminal/tmuxSessionSelector.ts
M	cli/src/utils/createSessionMetadata.ts

commit c13d51ee4638ab55a89ae789053f68bbdb04dc6a
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(daemon): support tmux spawn + harden runtime
    
    - Spawn sessions in tmux when requested (including isolated server option) and record tmux target/fallback metadata.
    
    - Extend spawn-session request plumbing and add a focused apiMachine spawn-session test.
    
    - Harden backoff behavior (clamping + retry gates) and avoid throwing on best-effort log file write failures.

A	cli/src/api/apiMachine.spawnSession.test.ts
M	cli/src/api/apiMachine.ts
M	cli/src/daemon/run.tmuxSpawn.test.ts
M	cli/src/daemon/run.ts
M	cli/src/ui/logger.test.ts
M	cli/src/ui/logger.ts
M	cli/src/utils/sync.ts
M	cli/src/utils/time.ts

commit f7db44dea4586a2a399e6765e31f8ad9d3f61475
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    docs: add AGENTS.md symlink
    
    - Keep agent guidance single-sourced by symlinking AGENTS.md -> CLAUDE.md.

A	cli/AGENTS.md

commit af5000ea6318bf1e02fba19069660179d9318d84
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(ui): polish Codex and Gemini error messages

M	cli/src/codex/utils/formatCodexEventForUi.test.ts
M	cli/src/codex/utils/formatCodexEventForUi.ts
M	cli/src/gemini/utils/formatGeminiErrorForUi.test.ts
M	cli/src/gemini/utils/formatGeminiErrorForUi.ts

commit f68552d03ab97641f8da5cd8ccb65113a8e13a34
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(tmux): print attach instructions in correct order

A	cli/src/terminal/startHappyHeadlessInTmux.test.ts
M	cli/src/terminal/startHappyHeadlessInTmux.ts

commit 4e4bb65ff3f0c7df410abd6fe2a6d69bd6d96f5e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(tmux): avoid brittle assertions

M	cli/src/terminal/startHappyHeadlessInTmux.test.ts

commit 45f4eb5d145caff292136122c70fbfccd26207b0
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(detect-cli): avoid process.env reassignment

M	cli/src/modules/common/registerCommonHandlers.detectCli.test.ts

commit 51782fdbfbcd98757345f7f93a02bd825baa8cdf
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(codex): reset transport instances between tests

M	cli/src/codex/codexMcpClient.test.ts

commit 0ad76f4877ae26d382f5b33ae654e345ea17136d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    chore(cli): fix gemini daemon block indentation

M	cli/src/index.ts

commit a8093e3e4ddb6ff974e69d8aa29fe43fce34dbad
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    docs(persistence): update profile schema version comment

M	cli/src/persistence.ts

commit b16c3658b944b1a73ae86faa700e97b1887d1fad
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(gemini): normalize error details for UI

M	cli/src/gemini/utils/formatGeminiErrorForUi.ts

commit d9591372655f2765fbf5f993d330e4511607c445
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(common): handle execFileAsync exit codes

M	cli/src/modules/common/registerCommonHandlers.ts

commit ab95e8cf920c6b75514b54570222be18c6606542
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(sync): avoid hanging invalidateAndAwait on errors

M	cli/src/claude/utils/sessionScanner.ts
A	cli/src/utils/sync.test.ts
M	cli/src/utils/sync.ts

commit 6f98c95fb5d8a79a4e76a1917200e378b7e8355e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(claude): support -c/-r and avoid session loss on switch

M	cli/src/claude/claudeLocal.ts
M	cli/src/claude/claudeLocalLauncher.test.ts
M	cli/src/claude/claudeLocalLauncher.ts
M	cli/src/claude/claudeRemote.test.ts
M	cli/src/claude/claudeRemote.ts
M	cli/src/claude/claudeRemoteLauncher.test.ts
M	cli/src/claude/claudeRemoteLauncher.ts
M	cli/src/claude/session.test.ts
M	cli/src/claude/session.ts
M	cli/src/claude/utils/claudeFindLastSession.ts
M	cli/src/claude/utils/path.test.ts
M	cli/src/claude/utils/path.ts
M	cli/src/claude/utils/sessionScanner.ts

commit 9489d70848f3664c02cb2b248f60b396626b8cdf
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-16
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(claude): align sessionScanner path mapping

M	cli/src/claude/utils/sessionScanner.test.ts

commit 9c4cb44b7d869acd56a66f18a88b40525f830d65
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-12
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(daemon): reattach sessions after daemon restart

M	cli/src/api/apiMachine.ts
M	cli/src/daemon/controlServer.ts
M	cli/src/daemon/doctor.ts
M	cli/src/daemon/run.ts
A	cli/src/daemon/sessionRegistry.ts
M	cli/src/daemon/types.ts
M	cli/src/persistence.ts

commit dbde6d8716701939d4ce45bfb82541453b16b070
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-14
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(daemon): add PID classification + session marker tests

A	cli/src/daemon/doctor.test.ts
M	cli/src/daemon/doctor.ts
A	cli/src/daemon/sessionRegistry.test.ts

commit 7cffdd5ce614ef22d6d06b882f3237e837a572cd
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-14
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(daemon): verify PID via command hash for reattach/stop

M	cli/src/daemon/run.ts
M	cli/src/daemon/sessionRegistry.test.ts
M	cli/src/daemon/sessionRegistry.ts
M	cli/src/daemon/types.ts

commit 8b88dcd73d406939feb019a431eeb49293e63225
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(claude): carry permission mode across remote/local switches

M	cli/src/claude/claudeLocalLauncher.ts
M	cli/src/claude/claudeRemoteLauncher.ts
M	cli/src/claude/loop.ts
M	cli/src/claude/session.ts
M	cli/src/claude/utils/permissionHandler.ts

commit 8f0e10c9428b34891b34fd310850705cc84a3ecd
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(claude): publish permission mode in session metadata

M	cli/src/api/types.ts
M	cli/src/claude/claudeLocalLauncher.ts
M	cli/src/claude/claudeRemoteLauncher.ts
M	cli/src/claude/loop.ts
M	cli/src/claude/runClaude.ts
M	cli/src/claude/session.ts
M	cli/src/claude/utils/permissionHandler.ts

commit ffad20faa406d5aebcd284649a0cc925d09fc7a2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(cli): publish permission mode for codex/gemini sessions

M	cli/src/api/types.ts
M	cli/src/codex/runCodex.ts
M	cli/src/gemini/runGemini.ts
M	cli/src/index.ts
M	cli/src/utils/createSessionMetadata.ts

commit eb72c6e694344ce79523ac36e715348753303bd8
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-13
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(codex): disable model override and remove experimental resume

M	cli/src/codex/runCodex.ts

commit d317f6bfa28274763cce5fcfe346ed4c066cfdc6
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(typecheck): resolve duplicate terminalRuntime and RPC handler types

M	cli/src/api/apiMachine.spawnSession.test.ts
M	cli/src/codex/runCodex.ts
M	cli/src/gemini/runGemini.ts

commit a8682d427794ddcd9b0ea151b59d9529e3a3b25d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(detect-cli): relax tmux version probe timeout

M	cli/src/modules/common/registerCommonHandlers.ts

commit e2824dbc858baa37f0f375efc8af460eba9d3ea7
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-07
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(queue): add server-side pending message pull support

M	cli/src/api/apiSession.ts
M	cli/src/api/types.ts
M	cli/src/claude/claudeRemoteLauncher.ts
M	cli/src/codex/runCodex.ts
M	cli/src/gemini/runGemini.ts

commit 37a2c55a6c2f10186a3f208b857931d3a9073370
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-12
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(session): prime agent state for readiness

M	cli/src/codex/runCodex.ts
M	cli/src/gemini/runGemini.ts

commit 88494b122194e4482ea817fad9c655c83b61a9e7
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-21
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(tools): support Windows arm64 tool unpacking

M	cli/scripts/__tests__/ripgrep_launcher.test.ts
A	cli/scripts/__tests__/unpack-tools.test.ts
M	cli/scripts/ripgrep_launcher.cjs
M	cli/scripts/unpack-tools.cjs
M	cli/src/test-setup.ts
M	cli/vitest.config.ts

commit d71587eda2dbe089330ecd07f40a27d669fd831e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-09
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat: resume Claude sessions from UI
    
    Plumbs an optional resume session id through spawn RPC and passes --resume to Claude when starting a daemon session.

M	cli/src/api/apiMachine.ts
M	cli/src/daemon/run.ts
M	cli/src/modules/common/registerCommonHandlers.ts
A	cli/src/utils/agentCapabilities.ts

commit a80868aff50d9c685cf35a03de73d7abef1537c2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-11
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat: resume inactive Claude sessions from UI
    
    Add CLI support for resuming inactive Claude sessions from the UI.
    When the UI sends a resume-session RPC, the daemon spawns a new CLI
    process that reconnects to the existing Happy session instead of
    creating a new one.
    
    Changes:
    - Add RESUMABLE_AGENTS config for dynamic agent resume capability
    - Add --existing-session flag to reconnect to existing Happy session
    - Handle resume-session RPC type in apiMachine
    - Pass HAPPY_INITIAL_MESSAGE env var for the resume message
    - Update runClaude to reconnect to existing session when specified
    
    The CLI uses the existing Claude session ID to resume the conversation
    via claude --resume, and updates the session metadata to reflect the
    resumed state.

M	cli/src/api/apiMachine.ts
M	cli/src/claude/runClaude.ts
A	cli/src/daemon/persistedHappySession.ts
M	cli/src/daemon/run.ts
M	cli/src/index.ts
M	cli/src/modules/common/registerCommonHandlers.ts
M	cli/src/utils/agentCapabilities.ts

commit bcaa530b12d7f351db4e5865c85e54b4f08d693b
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-12
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(resume): add happy resume and persist vendor resume id
    
    - Persist Claude vendor resume id to $HAPPY_HOME_DIR/sessions/<sessionId>.json when discovered via SessionStart hook
    
    - Add `happy resume <happySessionId>` to respawn a worker attached to the same Happy session (uses --existing-session + --resume)
    
    - Keep behavior safe: fail fast when resume is requested for unsupported agents

M	cli/src/claude/session.ts
M	cli/src/daemon/persistedHappySession.ts
M	cli/src/index.ts

commit e085e75c5d3695ec93c986c5e30a547e74e4489d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-12
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(resume): allow resume-session without agentSessionId
    
    - UI/daemon can resume with only Happy session id; daemon derives latest vendor resume id from local persisted session state
    
    - `happy resume <id...>` now supports resuming multiple sessions for bulk recovery

M	cli/src/api/apiMachine.ts
M	cli/src/daemon/run.ts
M	cli/src/index.ts

commit 68a6ba4bc244452b1d297af0fcc38f1abe33f3bf
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-12
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(fork): enable Codex inactive-session resume via codex-reply
    
    - Enable Codex in vendor resume capability gating
    
    - Parse --existing-session/--resume for codex and attach to persisted Happy session
    
    - Resume Codex via MCP tool codex-reply (no transcript scanning)
    
    - Persist codexSessionId for future resumes

M	cli/src/codex/codexMcpClient.ts
M	cli/src/codex/runCodex.ts
M	cli/src/daemon/persistedHappySession.ts
M	cli/src/daemon/run.ts
M	cli/src/index.ts
M	cli/src/utils/agentCapabilities.ts

commit d3aefaa9b598a0cbe3a28eaddc86041b35cb3014
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(daemon): extract reattach and pid safety helpers

A	cli/src/daemon/pidSafety.ts
A	cli/src/daemon/reattach.ts
M	cli/src/daemon/run.ts

commit 72397b7e8c94b466d4883f5a5f106d8a943e01a1
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(daemon): add opt-in reattach integration tests

A	cli/src/daemon/pidSafety.real.integration.test.ts
A	cli/src/daemon/reattach.real.integration.test.ts

commit 9c40c54018c2e9d7ceb4741da8f15bddded1caf2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    Revert "fix(tools): support Windows arm64 tool unpacking"
    
    This reverts commit 88494b122194e4482ea817fad9c655c83b61a9e7.

M	cli/scripts/__tests__/ripgrep_launcher.test.ts
D	cli/scripts/__tests__/unpack-tools.test.ts
M	cli/scripts/ripgrep_launcher.cjs
M	cli/scripts/unpack-tools.cjs
M	cli/src/test-setup.ts
M	cli/vitest.config.ts

commit ab35b47ff69959457418cb23836e670961f8bf34
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(resume): make inactive resume reliable; gate Codex resume

M	cli/src/api/apiMachine.ts
M	cli/src/claude/runClaude.ts
M	cli/src/codex/codexMcpClient.ts
M	cli/src/codex/runCodex.ts
M	cli/src/daemon/run.ts
M	cli/src/modules/common/registerCommonHandlers.ts
A	cli/src/utils/agentCapabilities.test.ts
M	cli/src/utils/agentCapabilities.ts
M	expo-app/INACTIVE_SESSION_RESUME.md
M	expo-app/sources/-session/SessionView.tsx
M	expo-app/sources/app/(app)/machine/[id].tsx
M	expo-app/sources/app/(app)/new/index.tsx
M	expo-app/sources/app/(app)/session/[id]/info.tsx
M	expo-app/sources/sync/ops.ts
M	expo-app/sources/sync/settings.ts
M	expo-app/sources/sync/spawnSessionPayload.ts
M	expo-app/sources/utils/agentCapabilities.ts

commit aa9b1168438959ccab8afe2c4f7d7ee1409698eb
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(codex): increase installer output buffer

M	cli/src/modules/common/registerCommonHandlers.ts

commit c4beebbfa37580bf07b591774ccb7fa32c457caa
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(ui): add Codex resume experiment toggle

M	expo-app/sources/app/(app)/settings/features.tsx
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 0140ae2768696b961488e227c9f7586ef3a32b42
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(codex): install mcp resume server via install-dep

M	cli/src/codex/codexMcpClient.ts
M	cli/src/codex/runCodex.ts
M	cli/src/modules/common/registerCommonHandlers.ts
M	expo-app/sources/sync/ops.ts
M	expo-app/sources/sync/settings.ts

commit 2ec41b621b54b67ca8ef42e8e9219ac4e0e37b22
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(codex): detect resume binary on Windows

M	cli/src/modules/common/registerCommonHandlers.ts

commit e1deb6db8ddb001b3099dd68726871811142fb6b
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(codex): add dep-status and drop codex-resume RPCs

M	cli/src/modules/common/registerCommonHandlers.ts
M	expo-app/sources/app/(app)/machine/[id].tsx
M	expo-app/sources/sync/ops.ts

commit 231d7ad9bdd9403add470515830adaf8e8dab890
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(ui): clarify Codex resume server label

M	expo-app/sources/app/(app)/machine/[id].tsx

commit 8bebf04aca9228e434a03760d2bdaea65d4a6740
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(cli): modularize capabilities and env preview

A	cli/src/modules/common/capabilities/caps/cliBase.ts
A	cli/src/modules/common/capabilities/caps/cliClaude.ts
A	cli/src/modules/common/capabilities/caps/cliCodex.ts
A	cli/src/modules/common/capabilities/caps/cliGemini.ts
A	cli/src/modules/common/capabilities/caps/depCodexMcpResume.ts
A	cli/src/modules/common/capabilities/caps/toolTmux.ts
A	cli/src/modules/common/capabilities/checklists.ts
A	cli/src/modules/common/capabilities/context/buildDetectContext.ts
A	cli/src/modules/common/capabilities/deps/codexMcpResume.ts
A	cli/src/modules/common/capabilities/errors.ts
A	cli/src/modules/common/capabilities/registerCapabilitiesHandlers.ts
A	cli/src/modules/common/capabilities/service.ts
A	cli/src/modules/common/capabilities/snapshots/cliSnapshot.ts
A	cli/src/modules/common/capabilities/types.ts
A	cli/src/modules/common/previewEnv/registerPreviewEnvHandler.ts
A	cli/src/modules/common/registerCommonHandlers.capabilities.test.ts
D	cli/src/modules/common/registerCommonHandlers.detectCli.test.ts
M	cli/src/modules/common/registerCommonHandlers.ts

commit bcf10af946264798f626e32723b64a6a4073d585
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(ui): update useCLIDetection hook tests for capabilities

M	expo-app/sources/hooks/useCLIDetection.hook.test.ts

commit a5cac698f15bf874f4c51996be1ce321431639b7
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(cli): harden session queue, switching, and lifecycle
    
    - Add metadata-backed messageQueueV1 pop/materialize path for pending messages\n- Preserve per-message localId so we can mark committed messages discarded\n- Prompt + discard policy for remote→local switching when remote backlog exists\n- Emit durable ACP task_started/task_complete edges for Claude and Codex\n- Add unit tests for queue pop, discard markers, and lifecycle events

M	cli/src/api/apiSession.test.ts
M	cli/src/api/apiSession.ts
A	cli/src/api/discardedCommittedMessageLocalIds.test.ts
A	cli/src/api/discardedCommittedMessageLocalIds.ts
A	cli/src/api/messageQueueV1.test.ts
A	cli/src/api/messageQueueV1.ts
M	cli/src/api/types.ts
M	cli/src/claude/claudeLocalLauncher.test.ts
M	cli/src/claude/claudeLocalLauncher.ts
M	cli/src/claude/claudeRemoteLauncher.ts
M	cli/src/claude/loop.ts
M	cli/src/claude/runClaude.ts
M	cli/src/claude/session.test.ts
M	cli/src/claude/session.ts
M	cli/src/codex/codexMcpClient.test.ts
M	cli/src/codex/runCodex.ts
A	cli/src/codex/utils/codexAcpLifecycle.test.ts
A	cli/src/codex/utils/codexAcpLifecycle.ts
M	cli/src/gemini/runGemini.ts
M	cli/src/test-setup.ts
A	cli/src/utils/createSessionMetadata.test.ts
M	cli/src/utils/createSessionMetadata.ts
A	cli/src/utils/waitForMessagesOrPending.test.ts
A	cli/src/utils/waitForMessagesOrPending.ts

commit 3fc704424e8da38264e7fc10227519121b572db3
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(app): add pending queue, discard markers, and capabilities
    
    - Replace broken pending-* socket events with encrypted messageQueueV1 in session metadata\n- Prefer queueing when agent not ready/offline/controlledByUser to avoid switch bounce\n- Render committed-but-discarded messages via metadata localId markers\n- Use durable lifecycle edges to drive thinking transitions (less reliance on volatile keepalive)\n- Refactor detect-cli plumbing into detect-capabilities cache/hook

M	expo-app/INACTIVE_SESSION_RESUME.md
M	expo-app/sources/-session/SessionView.tsx
M	expo-app/sources/__tests__/app/new/pick/machine.presentation.test.ts
M	expo-app/sources/app/(app)/machine/[id].tsx
M	expo-app/sources/app/(app)/new/NewSessionWizard.tsx
M	expo-app/sources/app/(app)/new/index.tsx
M	expo-app/sources/app/(app)/new/pick/machine.tsx
M	expo-app/sources/components/MessageView.tsx
M	expo-app/sources/components/PendingMessagesModal.tsx
M	expo-app/sources/components/machine/DetectedClisList.tsx
M	expo-app/sources/components/machine/DetectedClisModal.tsx
M	expo-app/sources/components/newSession/MachineCliGlyphs.tsx
M	expo-app/sources/hooks/useCLIDetection.ts
A	expo-app/sources/hooks/useMachineCapabilitiesCache.ts
D	expo-app/sources/hooks/useMachineDetectCliCache.ts
M	expo-app/sources/sync/apiTypes.ts
A	expo-app/sources/sync/capabilitiesProtocol.ts
A	expo-app/sources/sync/controlledByUserTransitions.test.ts
A	expo-app/sources/sync/controlledByUserTransitions.ts
D	expo-app/sources/sync/detectCliResponse.test.ts
D	expo-app/sources/sync/detectCliResponse.ts
A	expo-app/sources/sync/messageQueueV1.test.ts
A	expo-app/sources/sync/messageQueueV1.ts
M	expo-app/sources/sync/ops.ts
M	expo-app/sources/sync/settings.spec.ts
M	expo-app/sources/sync/storage.ts
A	expo-app/sources/sync/storageTypes.discardedCommitted.test.ts
M	expo-app/sources/sync/storageTypes.ts
A	expo-app/sources/sync/submitMode.test.ts
A	expo-app/sources/sync/submitMode.ts
M	expo-app/sources/sync/sync.ts
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts
A	expo-app/sources/utils/discardedCommittedMessages.test.ts
A	expo-app/sources/utils/discardedCommittedMessages.ts
A	expo-app/sources/utils/sessionUtils.test.ts
M	expo-app/sources/utils/sessionUtils.ts

commit 49893dd7d16a82a90d41f8d43450d6e9099e9002
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(terminal): harden remote→local switching input
    
    Problem: users report terminal corruption / sluggish input after switching from remote→local, often after spamming space to trigger the switch.
    
    Change:
    - Add a pure keypress interpreter and support Ctrl+T as an immediate ‘switch to terminal’ shortcut (keeps double-space behavior).
    - Add a small stdin cleanup helper to briefly drain buffered input after the Ink UI unmounts, then pause stdin.
    - Add focused unit tests for key interpretation and stdin cleanup.
    
    Why:
    - Avoid leaving stdin in an unexpected state and prevent buffered ‘space spam’ from leaking into the next interactive process.
    
    Refs: slopus/happy#301, slopus/happy-cli#124

A	cli/src/ui/ink/RemoteModeDisplay.test.ts
M	cli/src/ui/ink/RemoteModeDisplay.tsx
A	cli/src/utils/terminalStdinCleanup.test.ts
A	cli/src/utils/terminalStdinCleanup.ts

commit 0126667539b67a34fc4aa8106d9647df8d135ff2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(claude): forward signals to binary child process
    
    Problem: when Claude is installed as a binary (e.g. Homebrew), the launcher can exit during mode switches but the Claude child may survive as an orphan and keep reading from inherited stdin, causing ‘competing processes’/terminal corruption symptoms.
    
    Change:
    - Add attachChildSignalForwarding() and use it in the binary-spawn path so SIGTERM/SIGINT (and SIGHUP on non-Windows) are forwarded to the child.
    - Add a lightweight unit test that asserts which signals are registered and that the child receives forwarded kills.
    
    Why:
    - Ensures mode-switch termination actually terminates the process that owns stdin, preventing multiple readers.
    
    Refs: slopus/happy#301, slopus/happy-cli#124

M	cli/scripts/claude_version_utils.cjs
A	cli/src/scripts/claude_version_utils.signalForwarding.test.ts

commit 39c7b8a56b3221f64922ccb9116cdaa9f5826ade
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    refactor(app): rename tmux/message-send settings under session
    
    - Rename terminal tmux settings keys to session* (and migrate old keys in settingsParse)\n- Rename messageSendMode to sessionMessageSendMode\n- Add unified Session settings screen combining message sending + tmux\n- Keep /settings/terminal and /settings/message-sending as aliases

M	expo-app/sources/app/(app)/machine/[id].tsx
M	expo-app/sources/app/(app)/new/index.tsx
M	expo-app/sources/app/(app)/settings/message-sending.tsx
A	expo-app/sources/app/(app)/settings/session.tsx
M	expo-app/sources/app/(app)/settings/terminal.tsx
M	expo-app/sources/components/SettingsView.tsx
M	expo-app/sources/sync/settings.spec.ts
M	expo-app/sources/sync/settings.ts
M	expo-app/sources/sync/sync.ts
M	expo-app/sources/sync/terminalSettings.spec.ts
M	expo-app/sources/sync/terminalSettings.ts

commit fcec6c311b6bc9e71b38fcf7713fb07af4a8b820
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    feat(sync): add cross-device unread markers
    
    Store read markers in encrypted session metadata (readStateV1) so unread state syncs across devices without relying on local MMKV.\n\nUnread is computed from session.seq + pending queue activity timestamps, and SessionView marks the session as viewed on focus and when new activity arrives while focused (debounced).\n\nAdds computeHasUnreadActivity tests and updates useHasUnreadMessages to use metadata instead of message lists.

M	expo-app/sources/-session/SessionView.tsx
M	expo-app/sources/sync/storage.ts
M	expo-app/sources/sync/storageTypes.ts
M	expo-app/sources/sync/sync.ts
M	expo-app/sources/sync/unread.test.ts
M	expo-app/sources/sync/unread.ts

commit 8c16ee8f9cef04c3ae515ab2ebcb12b5ef317759
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(auth): surface auth failures and gate unauth routes
    
    Why
    - Some upstream error payloads include usage.service_tier=null. Our Zod schema required a string, so we dropped the whole message during normalization, which could hide critical auth errors (e.g. 401 OAuth expired) in the app.
    - Users could deep-link into protected routes (e.g. /new) while unauthenticated, leading to confusing screens that then fail later.
    
    What
    - Accept service_tier as nullish so messages are not dropped.
    - Add an auth guard in the (app) layout that redirects unauthenticated users to / unless they are on public routes (index, restore).
    - Add a small routing helper with unit tests.
    - Add root package.json test/typecheck scripts so happys stack test/typecheck can run in the monorepo context (delegates to expo-app).

M	expo-app/sources/app/(app)/_layout.tsx
A	expo-app/sources/auth/authRouting.test.ts
A	expo-app/sources/auth/authRouting.ts
M	expo-app/sources/sync/typesRaw.spec.ts
M	expo-app/sources/sync/typesRaw.ts
M	package.json

commit 320a89e19ca060f23f67c0283cb075b1fd68635c
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    test(happy): run cli and server checks from root scripts
    
    The Happy monorepo includes expo-app, cli, and server subprojects, but the root scripts only ran expo-app checks.\n\n- Expand "test" to run expo-app + cli + server suites\n- Expand "typecheck" to include cli typecheck and server TS build\n\nThis keeps existing behavior for expo-app and ensures new cli/server tests are exercised when running `happys test/typecheck happy`.

M	package.json

commit 3b3609fed43448255148dbbfcaa9c656f35703a3
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(rpc): add structured code for missing RPC methods
    
    Server now returns an explicit "RPC_METHOD_NOT_AVAILABLE" errorCode alongside the legacy error string so newer clients can detect this case without brittle string matching.\n\nClient-side changes:\n- Propagate server error + errorCode via thrown Error (rpcErrorCode)\n- sessionArchive fallback prefers rpcErrorCode and falls back to an exact legacy message match for older servers\n\nTests:\n- server rpcHandler includes errorCode\n- app rpcErrors + sessionArchive behavior

M	expo-app/sources/sync/apiSocket.ts
A	expo-app/sources/sync/ops.sessionArchive.test.ts
M	expo-app/sources/sync/ops.ts
A	expo-app/sources/sync/rpcErrors.test.ts
A	expo-app/sources/sync/rpcErrors.ts
A	server/sources/app/api/socket/rpcHandler.spec.ts
M	server/sources/app/api/socket/rpcHandler.ts

commit 0e2c7928f24cd0791c77060e170b0e7a84b847d3
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(scanner): tolerate onMessage exceptions
    
    createSessionScanner now catches exceptions thrown by the consumer `onMessage` callback and logs them instead of letting the scanner crash or trigger InvalidateSync retry/backoff loops.\n\nAlso documents InvalidateSync coalescing + failure semantics explicitly (invalidateAndAwait always resolves).\n\nTest: sessionScanner logs and continues when onMessage throws.

A	cli/src/claude/utils/sessionScanner.onMessageErrors.test.ts
M	cli/src/claude/utils/sessionScanner.ts
M	cli/src/utils/sync.ts

commit 7fbe1f1cc7273821a45986cfc6ef4f2d7eb32eec
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(permission): avoid no-op permissionModeUpdatedAt bumps
    
    Prevent unnecessary permission metadata churn by only bumping permissionModeUpdatedAt when the effective permission mode actually changes.\n\n- Claude: Session.setLastPermissionMode is a no-op when mode is unchanged\n- Codex/Gemini: reuse shared helper to conditionally update session metadata\n\nWhy: the UI merges permission mode based on permissionModeUpdatedAt, so repeated no-op bumps can incorrectly override the user's latest selection.\n\nTests: add coverage for the no-op behavior.

M	cli/src/claude/session.test.ts
M	cli/src/claude/session.ts
M	cli/src/codex/runCodex.ts
M	cli/src/gemini/runGemini.ts
A	cli/src/utils/permissionModeMetadata.test.ts
A	cli/src/utils/permissionModeMetadata.ts

commit 2026fbab5cb33d17d466ac7b81e811169d7fe7ef
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(claude): accept -c as continue flag
    
    Claude local runner now treats `-c` as equivalent to `--continue` when detecting user-provided session control flags.

M	cli/src/claude/claudeLocal.ts

commit ee0bec2a0b90bb277db7c3f04607de867b57bf33
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    Delete INACTIVE_SESSION_RESUME.md

D	expo-app/INACTIVE_SESSION_RESUME.md

commit 84df0d2605133a165a381dd6ae65507cfda23795
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-22

    fix(expo-app): stabilize postinstall and libsodium patches
    
    - Replace inline postinstall command with a dedicated script (expo-app/tools/postinstall.mjs)\n- Run patch-package from the repo root to support Yarn workspace hoisting\n- Add a patch for libsodium-wrappers@0.7.16 to restore missing dist/modules-esm/libsodium.mjs\n- Remove the obsolete @more-tech/react-native-libsodium 1.5.5 patch (package is now 1.5.6 and already avoids folly_version)\n- Tighten TypeScript typing for the web libsodium adapter\n\nThis makes installs more reliable across hoisting layouts and RN/Expo versions.

M	expo-app/package.json
D	expo-app/patches/@more-tech+react-native-libsodium+1.5.5.patch
A	expo-app/patches/libsodium-wrappers+0.7.16.patch
M	expo-app/sources/encryption/libsodium.lib.web.ts
A	expo-app/tools/postinstall.mjs
M	yarn.lock

commit 544f9711b6cfe195ed56d7426e326b54189dc2be
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(ui): respond to plan/question tools via session RPC
    
    - ExitPlanMode: approve/reject via permission RPC (no extra chat message)
    
    - AskUserQuestion: send answers via new session RPC interaction.respond; fallback to deny+sendMessage when RPC unsupported
    
    - Add unit tests covering both tool views

A	expo-app/sources/components/tools/views/AskUserQuestionView.test.ts
M	expo-app/sources/components/tools/views/AskUserQuestionView.tsx
A	expo-app/sources/components/tools/views/ExitPlanToolView.test.ts
M	expo-app/sources/components/tools/views/ExitPlanToolView.tsx
M	expo-app/sources/sync/ops.ts

commit 8b3f39f226644bd72269d484a13bb8faa9730d13
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    feat(cli): add interaction.respond for AskUserQuestion
    
    - Register session RPC interaction.respond in Claude remote launcher
    
    - Approve tool call and inject tool_result into Claude prompt stream
    
    - Expose sender hook from claudeRemote for mid-turn tool_result injection
    
    - Add unit test for interaction respond helper

M	cli/src/claude/claudeRemote.ts
M	cli/src/claude/claudeRemoteLauncher.ts
A	cli/src/claude/utils/interactionRespond.test.ts
A	cli/src/claude/utils/interactionRespond.ts
M	cli/src/claude/utils/permissionHandler.ts

commit ed4bc007308af4c1c4e0ac6f67d58adcc54fe37b
Author:     Ordinary <Ordinary@zjgsdx.edu.cn>
AuthorDate: 2025-12-24
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    feat: add execpolicy approval option for Codex

M	expo-app/sources/components/tools/PermissionFooter.tsx
M	expo-app/sources/sync/ops.ts
M	expo-app/sources/sync/reducer/reducer.ts
M	expo-app/sources/sync/storageTypes.ts
M	expo-app/sources/sync/typesMessage.ts
M	expo-app/sources/sync/typesRaw.ts
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 78adc9c58811ae4178823ddb6418121a0ecb34a7
Author:     Ordinary <Ordinary@zjgsdx.edu.cn>
AuthorDate: 2025-12-24
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    feat(codex): support execpolicy approvals and MCP tool calls

M	cli/src/agent/acp/AcpBackend.ts
M	cli/src/api/types.ts
M	cli/src/codex/codexMcpClient.ts
M	cli/src/codex/runCodex.ts
M	cli/src/utils/BasePermissionHandler.ts

commit 9dfa09bef8d8d6a9b791c91e2cb1fe49c4204806
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(i18n): add Codex execpolicy button text
    
    Add missing codex.permissions.yesAlwaysAllowCommand translations for Italian and Japanese to keep the translation schema complete.

M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts

commit 559d39da116dcbae4d9be05e55a23d9e79d44160
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(reducer): keep permission messages idempotent
    
    Avoid marking permission tool messages as changed when AgentState.request arguments are unchanged. This prevents permission messages from being re-emitted on unrelated message updates while still allowing late-arriving fields (e.g. proposedExecpolicyAmendment) to update the existing message.

M	expo-app/sources/sync/reducer/reducer.ts

commit cc3c711ae28e700c1d0b96485e0df06c5ac9978c
Author:     jio <g2gallardy@gmail.com>
AuthorDate: 2026-01-18
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix: move claudeArgs to end of args array for slash command support
    
    Slash commands like /help weren't working because the prompt wasn't at the end of the
       CLI args where Claude expects it.

M	cli/src/claude/claudeLocal.ts

commit d06d5a833f8ed6fdcfe82ae6a829e20307a97532
Author:     Felix Berlakovich <felix@berlakovich.at>
AuthorDate: 2026-01-19
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    Add signal forwarding to claudeLocal.ts

M	cli/src/claude/claudeLocal.ts

commit 1b7cb3bfea86cb429d3e04b329595013a8590f3e
Author:     zhangkunyuan <zhangkunyuan@cmhi.chinamobile.com>
AuthorDate: 2025-11-20
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    feat: handle /clear command as session reset in codex

M	cli/src/claude/runClaude.ts
M	cli/src/codex/runCodex.ts
M	cli/src/parsers/specialCommands.ts

commit 332ab2b0cd93e30c1f8dae994bfa2c5d7e0dfbc9
Author:     Gershom Rogers <gershomrogers@gmail.com>
AuthorDate: 2026-01-11
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(cli): improve abort error handling to reduce spurious error messages
    
    - Detect DOMException/AbortError from Node.js spawn\n- Only show "Process exited unexpectedly" for genuine failures\n- Better error logging for debugging

M	cli/src/claude/claudeRemoteLauncher.ts

commit e956463db3e216e89d832c4a5082a3583e81968d
Author:     Ordinary <Ordinary@zjgsdx.edu.cn>
AuthorDate: 2025-12-24
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix: use runtime execPath for MCP bridge

M	cli/src/codex/runCodex.ts
M	cli/src/gemini/runGemini.ts
M	cli/src/utils/spawnHappyCLI.ts

commit f0a7d8d0b40ccf97cce099e021810be8eedfc904
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(codex): use mcp tool call id for approvals
    
    Prefer codex_mcp_tool_call_id over codex_call_id when deriving toolCallId for permission requests, and align execpolicy amendment caching with the same id when available.
    
    Adds a small unit test for tool call id selection.

M	cli/src/codex/codexMcpClient.test.ts
M	cli/src/codex/codexMcpClient.ts

commit da620b6865adfba9e3b4d0a0330404c603fdab8d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-22
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    feat(server): add full/light flavors with sqlite migrations
    
    (cherry picked from commit b21928c5e779f7691cb06a240cfab5f83f167809)

M	server/.gitignore
M	server/README.md
M	server/package.json
A	server/prisma/sqlite/migrations/20260122190000_baseline/migration.sql
A	server/prisma/sqlite/migrations/migration_lock.toml
A	server/prisma/sqlite/schema.prisma
A	server/scripts/dev.full.ts
A	server/scripts/dev.fullArgs.spec.ts
A	server/scripts/dev.fullArgs.ts
A	server/scripts/dev.light.ts
A	server/scripts/dev.lightPlan.spec.ts
A	server/scripts/dev.lightPlan.ts
A	server/scripts/generateSqliteSchema.spec.ts
A	server/scripts/generateSqliteSchema.ts
A	server/scripts/migrate.light.deploy.ts
A	server/scripts/migrate.light.new.ts
A	server/scripts/migrate.light.resolveBaseline.ts
M	server/sources/app/api/api.ts
M	server/sources/app/api/routes/userRoutes.ts
A	server/sources/app/api/uiConfig.spec.ts
A	server/sources/app/api/uiConfig.ts
M	server/sources/app/api/utils/enableErrorHandlers.ts
A	server/sources/app/api/utils/enableOptionalStatics.ts
A	server/sources/app/api/utils/enablePublicFiles.ts
A	server/sources/app/api/utils/enableServeUi.ts
M	server/sources/app/presence/timeout.ts
A	server/sources/flavors/light/env.spec.ts
A	server/sources/flavors/light/env.ts
A	server/sources/flavors/light/files.spec.ts
A	server/sources/flavors/light/files.ts
A	server/sources/main.light.ts
M	server/sources/main.ts
A	server/sources/startServer.ts
M	server/sources/storage/db.ts
M	server/sources/storage/files.ts
M	server/sources/storage/processImage.spec.ts
M	server/sources/storage/uploadImage.ts
A	server/sources/utils/processHandlers.ts

commit 893ce7af5df079be26925ff7a7c5baf6e9d35088
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(expo-app): avoid hooks order violation on redirect

A	expo-app/sources/app/(app)/_layout.test.ts
M	expo-app/sources/app/(app)/_layout.tsx

commit 7afbc9a2decd82d9283025eaab20b502b7ff9d3f
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(expo-app): persist resumeSessionId and harden clipboard paste

M	expo-app/sources/app/(app)/new/pick/resume.tsx
M	expo-app/sources/sync/persistence.test.ts
M	expo-app/sources/sync/persistence.ts
A	expo-app/sources/utils/clipboard.test.ts
A	expo-app/sources/utils/clipboard.ts

commit 9a13879b753a5cb0c3c31aaae99e56b136a51e7a
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(expo-app): avoid false homeDir prefix matches

M	expo-app/sources/sync/sessionListViewData.test.ts
M	expo-app/sources/sync/sessionListViewData.ts

commit c107a779e07d3f934178b6b6c21d5a650952fb99
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(expo-app): avoid stuck loading in capabilities cache

A	expo-app/sources/hooks/useMachineCapabilitiesCache.hook.test.ts
M	expo-app/sources/hooks/useMachineCapabilitiesCache.ts

commit 35c0974eff1fdd934ddc71f1e07a57a6dc0c3206
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    refactor(expo-app): remove dead code and dedupe types

M	expo-app/sources/app/(app)/settings/session.tsx
M	expo-app/sources/components/PendingMessagesModal.tsx
M	expo-app/sources/hooks/useCLIDetection.ts

commit b319d85e72c3495255b1407450886d9aaa462c2e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(i18n): correct Spanish resumable label

M	expo-app/sources/text/translations/es.ts

commit 46186162ae142634423c7530c485e09cba719cba
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(happy-cli): fix timer cleanup and MCP schema mocks

M	cli/src/codex/codexMcpClient.test.ts
M	cli/src/ui/logger.test.ts
M	cli/src/utils/terminalStdinCleanup.test.ts

commit ac5bf2f3abfa54b992c42f7249084dab4424a4c7
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(happy-cli): reset modules for runtime override

M	cli/src/utils/spawnHappyCLI.invocation.test.ts

commit 947b8d1814fbbaa486c0e8a978418ca3a7759a8b
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    refactor(expo-app): remove unused optimistic flag

M	expo-app/sources/utils/sessionUtils.ts

commit 8cc823d1ba2d95896633fe34ab39654e04a52cb6
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(server-light): validate PORT and normalize paths

M	server/sources/flavors/light/env.spec.ts
M	server/sources/flavors/light/env.ts
M	server/sources/flavors/light/files.spec.ts
M	server/sources/flavors/light/files.ts

commit 8cb995a1abe159525864088b6b4736a5e91fc0e6
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(server): fix schema generation sort regex

M	server/scripts/generateSqliteSchema.spec.ts

commit 04d9c60ef8e776c7510f6dd46570774bb3bf2b7f
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    refactor(happy-cli): remove unreachable gemini error branch

M	cli/src/gemini/utils/formatGeminiErrorForUi.ts

commit 2616e5e192538bd273b7fb05d265067caf755167
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(server): handle missing UI index.html

A	server/sources/app/api/utils/enableServeUi.spec.ts
M	server/sources/app/api/utils/enableServeUi.ts

commit 91136536602426430f50ad31bc5dc91a268f5a87
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(server): make build typecheck tests

M	server/package.json
M	server/sources/flavors/light/env.spec.ts
M	server/sources/flavors/light/files.spec.ts

commit 0dd19e7fb2578a3f46f4a6cd9b5dc58f7e13e0e6
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(expo-app): default codex resume spec to empty

M	expo-app/sources/sync/ops.ts
M	expo-app/sources/sync/settings.spec.ts
M	expo-app/sources/sync/settings.ts

commit 229e5fc3657000e08516acc4e5382a773598bb00
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(server-light): use file URLs for sqlite db

M	server/sources/flavors/light/env.spec.ts
M	server/sources/flavors/light/env.ts

commit e6f597e436c583b5deb111e365827ad165f51852
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(server): fix server-light typecheck

M	server/sources/storage/files.ts
M	server/tsconfig.json

commit 1564e800e355e94beb66d0493a5f704011f2548e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(server): relax module settings for typecheck

M	server/tsconfig.json

commit 8ab11f2788c1c3a2422d62f306b65eaf951f361a
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(happy-cli): parse CLI versions from full output

M	cli/src/modules/common/capabilities/snapshots/cliSnapshot.ts

commit 21e096e9454e4ab8ed684aa90eb544e8dbacb14f
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(i18n): localize session settings item

M	expo-app/sources/components/SettingsView.tsx
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 7ca9e93196d6e6cf3eb30415ab0c692d2a05cff2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(i18n): translate ExitPlanMode strings

M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit c4a81947f00288a00d1653835343015761503346
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(i18n): localize search error

M	expo-app/sources/app/(app)/friends/search.tsx
A	expo-app/sources/hooks/useSearch.hook.test.ts
M	expo-app/sources/hooks/useSearch.ts

commit 208f0222a997dd9f9dd2ec8ed7eef9dcb91b842a
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(i18n): localize Codex resume dialog

M	expo-app/sources/app/(app)/new/index.tsx
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 02ad6b4a8352635f173dfdb1bf96109135255d58
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(i18n): move openMachine to connect scope

M	expo-app/sources/app/(app)/new/index.tsx
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit ce42bf56d7b682929ce1022293c8cbaa78918711
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(web): correct libsodium wrapper typing

M	expo-app/sources/encryption/libsodium.lib.web.ts

commit f0417ca11ac5112ee9f9a38b6d0b3bdbf644749b
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(web): keep libsodium wrapper namespace typing

M	expo-app/sources/encryption/libsodium.lib.web.ts

commit b6d3874bf175911f2dea935203994ce6027d6ad1
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(settings): include Codex resume in master experiment toggle

M	expo-app/sources/app/(app)/settings/features.tsx

commit a4d7faba961f201272071834324f270be4ad93e7
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(i18n): localize session error fallbacks

M	expo-app/sources/-session/SessionView.tsx
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 1ea2bddb8bbd522d3c3353ceb17f4f6eab40ade3
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(server): validate processImage resize output

M	server/sources/storage/processImage.spec.ts

commit 1e7d7f8a4747a5ac249d1b8b0738bb6d841e397a
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(server): keep light server running

M	server/sources/main.light.ts

commit 61bf70183ebff64ec14716cee0ccf8c1b2a59ea4
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(cli): set DEBUG before importing logger

M	cli/src/ui/logger.test.ts

commit 61a18ac95e1701c5b5ec245053b39cba1a906d6e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(tools): require permission id for ExitPlanMode actions

M	expo-app/sources/components/tools/views/ExitPlanToolView.test.ts
M	expo-app/sources/components/tools/views/ExitPlanToolView.tsx
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 5b36c9bf91c115079c627b8428065f2275ae71c9
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(tools): avoid null permission in ExitPlanToolView tests

M	expo-app/sources/components/tools/views/ExitPlanToolView.test.ts

commit b7f63e928e4f999ddb69a3b09071fb8b75306978
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(persistence): retry daemon state read when file appears

A	cli/src/persistence.daemonState.test.ts
M	cli/src/persistence.ts

commit 55428fb0253c6cf2df46095083f6016734506f27
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(tools): alert when AskUserQuestion permission id is missing

M	expo-app/sources/components/tools/views/AskUserQuestionView.test.ts
M	expo-app/sources/components/tools/views/AskUserQuestionView.tsx

commit dc6955f88abd46b63e56102ccd936b0f59ea41e4
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(terminal): prevent sessionId path traversal in attachment info

M	cli/src/terminal/terminalAttachmentInfo.test.ts
M	cli/src/terminal/terminalAttachmentInfo.ts

commit bb685fbeff7bda2707f656c5d8c0831b95f874f9
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(terminal): clarify missing --happy-starting-mode value

M	cli/src/terminal/headlessTmuxArgs.test.ts
M	cli/src/terminal/headlessTmuxArgs.ts

commit 5bcc7d20cd6b14c30f3c36cbbe73f7c4317d5d37
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(utils): stabilize serverConnectionErrors retry count test

M	cli/src/utils/serverConnectionErrors.test.ts

commit 82968aa8fe6c0b18c4aa8aac76d398dca3decea2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(ui): send pending messages before closing modal

A	expo-app/sources/components/PendingMessagesModal.test.ts
M	expo-app/sources/components/PendingMessagesModal.tsx

commit b7219c8bfe2b32b86e8fb35fb17bc8b977d7394f
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(ink): avoid async useInput handler

M	cli/src/ui/ink/RemoteModeDisplay.tsx

commit d70a6f6669feef788c724d53f66c58041c68d561
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(claude): trim CLAUDE_CONFIG_DIR overrides

M	cli/src/claude/utils/path.test.ts
M	cli/src/claude/utils/path.ts

commit 47f638b73fca8b4ca64edd08ddbe3e0f74344b43
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(utils): cover failuresCount with custom backoff

M	cli/src/utils/sync.test.ts

commit 2abc70fef03c2cb70867ac4e853177d8e4c63b1a
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(utils): track failuresCount for custom backoff

M	cli/src/utils/sync.ts

commit dc8016f01c561d77cedb6650d7c2564f92bea88d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(server): validate HAPPY_SERVER_LIGHT_DATA_DIR for light migrations

M	server/scripts/migrate.light.deploy.ts
A	server/scripts/migrate.light.deployPlan.spec.ts
A	server/scripts/migrate.light.deployPlan.ts

commit b0085827322c0affa0a0d014b130f6fa26f32e00
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(server): handle missing UI index in error handlers

A	server/sources/app/api/utils/enableErrorHandlers.spec.ts
M	server/sources/app/api/utils/enableErrorHandlers.ts

commit abf28805663692bd6fce36b5d91b5041a5e9b75b
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(cli): reject invalid messageQueueV1 inFlight

M	cli/src/api/messageQueueV1.test.ts
M	cli/src/api/messageQueueV1.ts

commit 73ce32d242a050a44cdf4cb70439abcd594fcde1
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(i18n): translate Spanish experiment subtitles

M	expo-app/sources/text/translations/es.ts

commit 98bc00096e866770f8dac6f82b5a7028012c2dd2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(i18n): localize Codex resume banner

M	expo-app/sources/app/(app)/new/NewSessionWizard.tsx
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 4fabec9b69b30538cc4360762bc8d7af77cc65bb
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    feat(new-session): add WizardSectionHeaderRow

A	expo-app/sources/components/newSession/WizardSectionHeaderRow.tsx

commit c461ed1cb4efd785a2d60be60c63aca8349dc1a1
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    feat(permission): add permission mode option helpers

A	expo-app/sources/sync/permissionModeOptions.ts

commit 23b595edd0fe59e36481574f0ca958343a233dc2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    refactor(sync): simplify path formatting

M	expo-app/sources/sync/sessionListViewData.ts

commit 523989b4de8ea8a339a1605a756250feaadb14ec
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(server-light): avoid master secret race

M	server/sources/flavors/light/env.ts

commit d89a9427e765ed8c176ff2049fd2fc965132139a
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(cli): clean up metadata waiters on disconnect

M	cli/src/api/apiSession.test.ts
M	cli/src/api/apiSession.ts

commit fedb8a66160ae16ec6c713cf84348a84d3632cc6
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(cli): accept lowercase preview-env keys

M	cli/src/modules/common/registerCommonHandlers.previewEnv.test.ts

commit fc0ce89b13b7fe1119ed6c966dc3709b0a83e78c
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(cli): allow lowercase preview-env keys

M	cli/src/modules/common/previewEnv/registerPreviewEnvHandler.ts
M	cli/src/modules/common/registerCommonHandlers.previewEnv.test.ts

commit ad95c5b01c2590f24582f6336621088e3788634c
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(happy): keep useCLIDetection timestamp stable

M	expo-app/sources/hooks/useCLIDetection.hook.test.ts

commit c251edf3c307d33fba9dad71739a9a7f0396cb15
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(happy): fix useCLIDetection timestamp test

M	expo-app/sources/hooks/useCLIDetection.hook.test.ts

commit 34fa4091d3cc376ae79bfbcc59688dae762c0b61
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(happy): stabilize useCLIDetection timestamp

M	expo-app/sources/hooks/useCLIDetection.ts

commit 31340e53294c92e12b95cac429fdcc3e0c100af4
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(happy): inline CLI detection request

M	expo-app/sources/hooks/useCLIDetection.ts

commit 054250f408e21f9c2208ef306d574674796356b8
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(i18n): localize codex resume install modals

M	expo-app/sources/app/(app)/machine/[id].tsx
M	expo-app/sources/app/(app)/new/index.tsx
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 241f0ae24b1dd65641ab832dac9a0b5efd8b7e6a
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(cli): prevent legacy sessionId path traversal

M	cli/src/terminal/terminalAttachmentInfo.test.ts

commit a1e4a6dd3fbd6b432a09e3f57d1ca952134b68ea
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(cli): block legacy sessionId path traversal

M	cli/src/terminal/terminalAttachmentInfo.ts

commit e2618e04a26b54ff9ccab8bd44273c60601884f1
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(a11y): add labels to codex resume actions

M	expo-app/sources/app/(app)/new/NewSessionWizard.tsx

commit d0f9ad5e8310338e2771a7c77e32f80bf2763dfc
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    test(claude): remove stale transcriptPath red-test scaffolding

M	cli/src/claude/utils/sessionScanner.test.ts

commit 1464402758bf699fa05cc50dacb8f26791775273
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(codex): preserve falsy MCP tool results

A	cli/src/codex/__tests__/extractMcpToolCallResultOutput.test.ts
M	cli/src/codex/runCodex.ts

commit 57f84f0691c6c098a0522071326a7ac008b3ae97
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(server-light): harden public file path encoding

M	server/sources/flavors/light/files.spec.ts
M	server/sources/flavors/light/files.ts

commit 0b7db6945325444e01dbf4e19be029718847dac8
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(storage): validate S3_PORT and bucket existence

A	server/sources/storage/files.spec.ts
M	server/sources/storage/files.ts

commit 74fc860b07b59fa724400bcedf09aab0c56b1b80
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    refactor(queue): simplify stale in-flight reclaim

M	cli/src/api/messageQueueV1.ts

commit 82bf82cb6715a87d3377b5ad7ea5e9c58a4b7878
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(hooks): prevent stale capabilities cache overwrite

A	expo-app/sources/hooks/useMachineCapabilitiesCache.race.test.ts
M	expo-app/sources/hooks/useMachineCapabilitiesCache.ts

commit 384b1525202636c212f3ca41fa37148ae08805eb
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    fix(expo): harden tool submit and pending send

A	expo-app/sources/components/PendingMessagesModal.discardFallback.test.ts
M	expo-app/sources/components/PendingMessagesModal.test.ts
M	expo-app/sources/components/PendingMessagesModal.tsx
M	expo-app/sources/components/tools/views/AskUserQuestionView.test.ts
M	expo-app/sources/components/tools/views/AskUserQuestionView.tsx
M	expo-app/sources/sync/messageQueueV1.test.ts
M	expo-app/sources/sync/messageQueueV1.ts
M	expo-app/sources/sync/sync.ts

commit 24b607abfa073171038e72ba2cc77b20a1991aa1
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    Refactor schema sync and centralize Prisma types
    
    Replaces generateSqliteSchema.ts with schemaSync.ts to generate both the SQLite schema and TypeScript enums from the main Prisma schema. Centralizes all Prisma types and the db client in sources/storage/prisma.ts, updating imports throughout the codebase to use this module. Updates scripts and documentation to use the new schema:sync command, and ensures enum consistency between schema and TypeScript. Adds tests for the new storage/prisma module and generated enums.

M	server/README.md
M	server/package.json
M	server/prisma/sqlite/schema.prisma
M	server/scripts/dev.light.ts
D	server/scripts/generateSqliteSchema.ts
M	server/scripts/migrate.light.deploy.ts
M	server/scripts/migrate.light.new.ts
M	server/scripts/migrate.light.resolveBaseline.ts
R063	server/scripts/generateSqliteSchema.spec.ts	server/scripts/schemaSync.spec.ts
A	server/scripts/schemaSync.ts
M	server/sources/app/api/routes/sessionRoutes.ts
M	server/sources/app/api/routes/userRoutes.ts
M	server/sources/app/api/socket/sessionUpdateHandler.ts
M	server/sources/app/feed/feedGet.ts
M	server/sources/app/social/friendAdd.ts
M	server/sources/app/social/friendList.ts
M	server/sources/app/social/friendNotification.spec.ts
M	server/sources/app/social/friendNotification.ts
M	server/sources/app/social/friendRemove.ts
M	server/sources/app/social/relationshipGet.ts
M	server/sources/app/social/relationshipSet.ts
M	server/sources/app/social/type.ts
M	server/sources/context.ts
M	server/sources/storage/db.ts
A	server/sources/storage/enums.generated.ts
M	server/sources/storage/inTx.ts
A	server/sources/storage/prisma.spec.ts
A	server/sources/storage/prisma.ts
M	yarn.lock

commit bf3027799623c286fe138c7b69e140ea90fdfa48
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    Set EXPO_UNSTABLE_WEB_MODAL env var in Expo scripts
    
    Updated all relevant Expo-related scripts in expo-app/package.json to include the EXPO_UNSTABLE_WEB_MODAL=1 environment variable using cross-env.
    
    EXPO_UNSTABLE_WEB_MODAL is necessary to restore the expo-router modal behavior on web to what we had before, which Expo moved to "experimental".
    
    Also upgraded expo-router to version 6.0.22 and added a resolutions field in the root package.json to enforce this version.

M	expo-app/package.json
A	expo-app/patches-expo-app/expo-router+6.0.22.patch
M	expo-app/sources/app/(app)/session/[id]/info.tsx
M	package.json

commit c803115dcbdcd55c036e47c0f0cfd6e1bceb9f74
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-23
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-23

    Improve postinstall script for symlinked paths and patching
    
    Resolves symlinks when determining toolsDir to support Yarn workspaces executing the script via symlinked paths. Adds a second patch-package run scoped to expo-app to apply patches for dependencies not hoisted to the repo root, such as expo-router.

M	expo-app/tools/postinstall.mjs

commit 0c3b41030bbc4a888e621a6b5787eaac4b581a59
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-24
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-24

    Add Vitest stubs for Expo and React Native modules
    
    Introduces stub implementations for `expo-localization`, `expo-modules-core`, and `react-native` to enable unit testing in a Node environment with Vitest. Also adds a Vitest setup file that mocks `react-native-mmkv` with an in-memory store for tests. These changes allow tests to run without requiring actual Expo or React Native dependencies.

A	expo-app/sources/dev/expoLocalizationStub.ts
A	expo-app/sources/dev/expoModulesCoreStub.ts
M	expo-app/sources/dev/reactNativeStub.ts
A	expo-app/sources/dev/vitestSetup.ts

commit 7d60e6fc77f28a0457e306780c44956e8cb4c4c7
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    cli(acp): support loadSession + replay capture; normalize tool events
    
    - Adds replay history capture + import helpers and publishSlashCommands
    - Normalizes ACP tool events and permission request payloads
    - Adds focused tests for tool normalization + permission mapping

M	cli/src/agent/acp/AcpBackend.ts
A	cli/src/agent/acp/bridge/acpCommonHandlers.test.ts
A	cli/src/agent/acp/bridge/acpCommonHandlers.ts
A	cli/src/agent/acp/commands/publishSlashCommands.ts
A	cli/src/agent/acp/history/acpReplayCapture.ts
A	cli/src/agent/acp/history/importAcpReplayHistory.ts
A	cli/src/agent/acp/permissions/permissionMapping.test.ts
A	cli/src/agent/acp/permissions/permissionMapping.ts
A	cli/src/agent/acp/permissions/permissionRequest.test.ts
A	cli/src/agent/acp/permissions/permissionRequest.ts
A	cli/src/agent/acp/sessionUpdateHandlers.test.ts
M	cli/src/agent/acp/sessionUpdateHandlers.ts
A	cli/src/agent/acp/toolNormalization.test.ts
A	cli/src/agent/acp/toolNormalization.ts
M	cli/src/agent/core/AgentBackend.ts
A	cli/src/agent/transport/handlers/GeminiTransport.test.ts
M	cli/src/agent/transport/handlers/GeminiTransport.ts

commit e35328ab19ad2f00fa581e7e85ee75c91cb13f04
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    cli(permissions): persist per-session allowlists; harden shell approvals
    
    - Introduces BasePermissionHandler allowlist persistence and a shell command allowlist
    - Adds tool identifier helpers to keep permission decisions consistent across agents
    - Adds targeted tests for allowlist behavior and tool identifier

M	cli/src/codex/utils/permissionHandler.ts
M	cli/src/gemini/utils/permissionHandler.ts
A	cli/src/utils/BasePermissionHandler.allowlist.test.ts
M	cli/src/utils/BasePermissionHandler.ts
A	cli/src/utils/permissionToolIdentifier.test.ts
A	cli/src/utils/permissionToolIdentifier.ts
A	cli/src/utils/shellCommandAllowlist.ts

commit caf5adfe344919984e46a0eabc0fa570601fcd65
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    cli(claude): support AskUserQuestion answers + ExitPlanMode negotiation
    
    - Routes AskUserQuestion responses through the permission decision path
    - Implements ExitPlanMode semantics via permission handler, with regression tests
    - Removes legacy prompt/interaction respond helpers no longer used

M	cli/src/claude/claudeRemoteLauncher.test.ts
M	cli/src/claude/claudeRemoteLauncher.ts
D	cli/src/claude/sdk/prompts.ts
M	cli/src/claude/sdk/types.ts
M	cli/src/claude/session.ts
D	cli/src/claude/utils/interactionRespond.test.ts
D	cli/src/claude/utils/interactionRespond.ts
A	cli/src/claude/utils/permissionHandler.exitPlanMode.test.ts
M	cli/src/claude/utils/permissionHandler.ts
M	cli/src/claude/utils/systemPrompt.ts

commit 011a3602411f2cc0f0f5affff31d2c1226a9dc5e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    cli(api): observe self-broadcasts for pending-queue; add tool tracing
    
    - Treats self-broadcasts as pending-queue signals to improve UI reliability
    - Adds transcript recovery behavior in apiSession
    - Introduces JSONL tool tracing (writer + unit tests)

M	cli/src/api/apiSession.test.ts
M	cli/src/api/apiSession.ts
A	cli/src/toolTrace/toolTrace.test.ts
A	cli/src/toolTrace/toolTrace.ts
M	cli/src/utils/MessageQueue2.ts
M	cli/src/utils/waitForMessagesOrPending.ts

commit 809d2bb385e086b568f20171757b83ecffa39635
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    cli(tool-trace): add fixture extraction + CLI script
    
    - Adds a small JSONL -> fixtures extractor (with truncation/sanitization)
    - Adds a tsx script and npm script for local fixture generation

M	cli/package.json
A	cli/scripts/tool-trace-extract.ts
A	cli/src/toolTrace/extractToolTraceFixtures.test.ts
A	cli/src/toolTrace/extractToolTraceFixtures.ts

commit 5537815563059192774839feca13768250362b79
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    cli(auth): add --no-open to skip browser open
    
    - Adds --no-open (and compat aliases) to happy auth login
    - Threads HAPPY_NO_BROWSER_OPEN through auth UI and openBrowser
    - Adds a unit test to ensure browser open is skipped when the env is set

M	cli/src/commands/auth.ts
M	cli/src/ui/auth.ts
A	cli/src/utils/browser.test.ts
M	cli/src/utils/browser.ts

commit 5955ea5c21a3da320b37b4dd9557d73bdd295ab8
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    cli(daemon): idempotent resume + attach files + shutdown policy
    
    - Ensures resume requests are idempotent (avoid duplicate processes)
    - Adds session attach files and startup metadata merge/update helpers
    - Adds shutdown watchdog policy and a non-interactive auth gating regression test

M	cli/src/api/apiMachine.spawnSession.test.ts
M	cli/src/api/apiMachine.ts
M	cli/src/claude/runClaude.ts
A	cli/src/daemon/findRunningTrackedSessionById.test.ts
A	cli/src/daemon/findRunningTrackedSessionById.ts
D	cli/src/daemon/persistedHappySession.ts
A	cli/src/daemon/run.noninteractiveAuth.test.ts
M	cli/src/daemon/run.ts
A	cli/src/daemon/sessionAttachFile.test.ts
A	cli/src/daemon/sessionAttachFile.ts
A	cli/src/daemon/shutdownPolicy.test.ts
A	cli/src/daemon/shutdownPolicy.ts
M	cli/src/daemon/types.ts
M	cli/src/utils/createSessionMetadata.ts
A	cli/src/utils/sessionAttach.test.ts
A	cli/src/utils/sessionAttach.ts
A	cli/src/utils/sessionStartup/createBaseSessionForAttach.ts
A	cli/src/utils/sessionStartup/mergeSessionMetadataForStartup.test.ts
A	cli/src/utils/sessionStartup/mergeSessionMetadataForStartup.ts
A	cli/src/utils/sessionStartup/startupMetadataUpdate.test.ts
A	cli/src/utils/sessionStartup/startupMetadataUpdate.ts
A	cli/src/utils/sessionStartup/startupSideEffects.ts

commit cce05b18a5d73223cb74899e44c1709301efff2e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    cli(agents): wire ACP agents into factory/transport registry
    
    - Exposes Codex ACP + OpenCode factories from the agent factory index
    - Registers OpenCode agent during initializeAgents
    - Exports OpenCode transport from the transport handler registry

M	cli/src/agent/factories/index.ts
M	cli/src/agent/index.ts
M	cli/src/agent/transport/handlers/index.ts
M	cli/src/agent/transport/index.ts

commit 27bb2523f690614db4d6a4fbce42cb02ff328b5d
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    cli(opencode): add OpenCode ACP agent runtime
    
    - Adds OpenCode ACP runtime and transport handler
    - Adds permission handler + session id helpers for OpenCode
    - Includes focused unit tests for transport and OpenCode helpers

A	cli/src/agent/factories/opencode.ts
A	cli/src/agent/transport/handlers/OpenCodeTransport.test.ts
A	cli/src/agent/transport/handlers/OpenCodeTransport.ts
A	cli/src/opencode/acp/openCodeAcpRuntime.ts
A	cli/src/opencode/runOpenCode.ts
A	cli/src/opencode/utils/opencodeSessionIdMetadata.test.ts
A	cli/src/opencode/utils/opencodeSessionIdMetadata.ts
A	cli/src/opencode/utils/permissionHandler.test.ts
A	cli/src/opencode/utils/permissionHandler.ts
A	cli/src/opencode/utils/waitForNextOpenCodeMessage.test.ts
A	cli/src/opencode/utils/waitForNextOpenCodeMessage.ts

commit abe1cf8ed37061422ee5db65a004e27deeed379b
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    cli(codex-acp): add runtime + capability gating
    
    - Adds Codex ACP runtime + command resolution and session-id helpers
    - Extends capabilities framework for ACP probing and Codex ACP dependency checks
    - Updates API/metadata types to cover ACP session ids and capability flags

A	cli/src/agent/factories/codexAcp.ts
M	cli/src/api/types.ts
A	cli/src/codex/acp/codexAcpRuntime.ts
A	cli/src/codex/acp/resolveCodexAcpCommand.ts
M	cli/src/codex/codexMcpClient.ts
M	cli/src/codex/runCodex.ts
M	cli/src/codex/types.ts
A	cli/src/codex/utils/codexSessionIdMetadata.test.ts
A	cli/src/codex/utils/codexSessionIdMetadata.ts
M	cli/src/gemini/runGemini.ts
A	cli/src/modules/common/capabilities/caps/acpProbe.ts
M	cli/src/modules/common/capabilities/caps/cliCodex.ts
M	cli/src/modules/common/capabilities/caps/cliGemini.ts
A	cli/src/modules/common/capabilities/caps/cliOpenCode.ts
A	cli/src/modules/common/capabilities/caps/depCodexAcp.ts
M	cli/src/modules/common/capabilities/checklists.ts
A	cli/src/modules/common/capabilities/deps/codexAcp.ts
M	cli/src/modules/common/capabilities/registerCapabilitiesHandlers.ts
M	cli/src/modules/common/capabilities/snapshots/cliSnapshot.ts
M	cli/src/modules/common/capabilities/types.ts
M	cli/src/modules/common/registerCommonHandlers.capabilities.test.ts
M	cli/src/modules/common/registerCommonHandlers.ts
M	cli/src/utils/agentCapabilities.test.ts
M	cli/src/utils/agentCapabilities.ts

commit d9100a80112b304f64a8e1807747f1ac3ecefe79
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    cli(entry): refactor agent subcommands and startup flags
    
    - Adds --permission-mode-updated-at parsing (for consistent session metadata)
    - Adds opencode command wiring and aligns codex/gemini argument parsing
    - Removes the legacy resume subcommand in favor of existing-session/resume flags

M	cli/src/index.ts

commit 2edc5305ca3fa26cd148a5ad9f775fd9d1f4eb41
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(test): harden vitest stubs + unistyles typing
    
    - Updates vitest config aliases/setup to improve node-test reliability
    - Improves unistyles typing/bootstrap and normalizes formatting
    - Adds RootLayout hook-order regression test and removes the old layout test location

M	expo-app/index.ts
R097	expo-app/sources/app/(app)/_layout.test.ts	expo-app/sources/__tests__/app/_layout.test.ts
M	expo-app/sources/dev/expoModulesCoreStub.ts
M	expo-app/sources/dev/reactNativeStub.ts
M	expo-app/sources/unistyles.ts
M	expo-app/vitest.config.ts

commit 5575d7267cd0dbd92d690b847bcf9e37fc9acd11
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(tools): normalize tool inference + rendering inputs
    
    - Adds shared tool-call normalization and parsing helpers
    - Improves tool name inference and permission summaries
    - Updates ToolView/ToolFullView to rely on normalized shapes

M	expo-app/sources/components/tools/ToolFullView.tsx
M	expo-app/sources/components/tools/ToolView.tsx
M	expo-app/sources/components/tools/knownTools.tsx
A	expo-app/sources/components/tools/utils/normalizeToolCallForRendering.ts
A	expo-app/sources/components/tools/utils/parseJson.ts
A	expo-app/sources/components/tools/utils/parseParenIdentifier.ts
A	expo-app/sources/components/tools/utils/permissionSummary.ts
A	expo-app/sources/components/tools/utils/shellCommand.ts
A	expo-app/sources/components/tools/utils/stdStreams.ts
A	expo-app/sources/components/tools/utils/toolNameInference.ts

commit d115797fcdde2decf50800d887f383d6024dde47
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(tools): add specialized tool views + tests
    
    - Adds dedicated views for common tools (bash/read/grep/glob/web) and structured results
    - Improves permission UI flows (pending/abort/decision) and adds regression tests
    - Expands tool rendering test coverage for inference and fallback behavior

A	expo-app/sources/components/tools/PermissionFooter.codexDecision.test.tsx
A	expo-app/sources/components/tools/PermissionFooter.stopAbortsRun.test.tsx
M	expo-app/sources/components/tools/PermissionFooter.tsx
A	expo-app/sources/components/tools/ToolFullView.inference.test.ts
A	expo-app/sources/components/tools/ToolFullView.permissionPending.test.tsx
A	expo-app/sources/components/tools/ToolView.acpKindFallback.test.tsx
A	expo-app/sources/components/tools/ToolView.exitPlanMode.test.ts
A	expo-app/sources/components/tools/ToolView.minimalSpecificView.test.ts
A	expo-app/sources/components/tools/ToolView.minimalStructuredFallback.test.ts
A	expo-app/sources/components/tools/ToolView.permissionPending.test.tsx
A	expo-app/sources/components/tools/ToolView.runningStructuredFallback.test.ts
A	expo-app/sources/components/tools/utils/normalizeToolCallForRendering.test.ts
A	expo-app/sources/components/tools/utils/parseParenIdentifier.test.ts
A	expo-app/sources/components/tools/utils/permissionSummary.test.ts
A	expo-app/sources/components/tools/utils/shellCommand.test.ts
A	expo-app/sources/components/tools/utils/toolNameInference.test.ts
A	expo-app/sources/components/tools/views/AcpHistoryImportView.tsx
M	expo-app/sources/components/tools/views/AskUserQuestionView.test.ts
M	expo-app/sources/components/tools/views/AskUserQuestionView.tsx
A	expo-app/sources/components/tools/views/BashView.test.tsx
M	expo-app/sources/components/tools/views/BashView.tsx
A	expo-app/sources/components/tools/views/BashViewFull.test.ts
M	expo-app/sources/components/tools/views/BashViewFull.tsx
A	expo-app/sources/components/tools/views/CodeSearchView.tsx
M	expo-app/sources/components/tools/views/CodexBashView.tsx
M	expo-app/sources/components/tools/views/ExitPlanToolView.test.ts
M	expo-app/sources/components/tools/views/ExitPlanToolView.tsx
A	expo-app/sources/components/tools/views/GeminiExecuteView.test.ts
M	expo-app/sources/components/tools/views/GeminiExecuteView.tsx
A	expo-app/sources/components/tools/views/GlobView.tsx
A	expo-app/sources/components/tools/views/GrepView.tsx
A	expo-app/sources/components/tools/views/ReadView.tsx
A	expo-app/sources/components/tools/views/ReasoningView.test.tsx
A	expo-app/sources/components/tools/views/ReasoningView.tsx
A	expo-app/sources/components/tools/views/StructuredResultView.tsx
A	expo-app/sources/components/tools/views/TodoView.test.tsx
M	expo-app/sources/components/tools/views/TodoView.tsx
A	expo-app/sources/components/tools/views/WebFetchView.tsx
A	expo-app/sources/components/tools/views/WebSearchView.tsx
M	expo-app/sources/components/tools/views/_all.tsx

commit 23014814ea50c8799864ed14572078719504ccf0
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(agents): introduce agent registry + UI behavior helpers
    
    - Adds a typed agent registry (core + UI helpers)
    - Centralizes enabled-agent logic, CLI warnings, and resume capability option derivation
    - Includes tests for registry behavior and picker options

A	expo-app/sources/agents/acpRuntimeResume.ts
A	expo-app/sources/agents/agentPickerOptions.test.ts
A	expo-app/sources/agents/agentPickerOptions.ts
A	expo-app/sources/agents/cliWarnings.test.ts
A	expo-app/sources/agents/cliWarnings.ts
A	expo-app/sources/agents/enabled.test.ts
A	expo-app/sources/agents/enabled.ts
A	expo-app/sources/agents/permissionUiCopy.ts
A	expo-app/sources/agents/registryCore.test.ts
A	expo-app/sources/agents/registryCore.ts
A	expo-app/sources/agents/registryUi.ts
A	expo-app/sources/agents/registryUiBehavior.test.ts
A	expo-app/sources/agents/registryUiBehavior.ts
A	expo-app/sources/agents/resolve.test.ts
A	expo-app/sources/agents/resolve.ts
A	expo-app/sources/agents/useEnabledAgentIds.ts
A	expo-app/sources/agents/useResumeCapabilityOptions.ts

commit b142327f5e328c3e8719f8c9a435cb4df93564b9
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(sync): capabilities protocol + resume/pending-queue plumbing
    
    - Adds installable dependency registry and machine capability request protocol
    - Extends sync reducer/storage/types to support pending-queue + resume flows
    - Adds tests for capabilities parsing, permission defaults, and resume/pending logic

A	expo-app/sources/capabilities/codexAcpDep.test.ts
A	expo-app/sources/capabilities/codexAcpDep.ts
A	expo-app/sources/capabilities/codexMcpResume.test.ts
A	expo-app/sources/capabilities/codexMcpResume.ts
A	expo-app/sources/capabilities/installableDepsRegistry.test.ts
A	expo-app/sources/capabilities/installableDepsRegistry.ts
A	expo-app/sources/capabilities/requests.ts
M	expo-app/sources/hooks/useMachineCapabilitiesCache.hook.test.ts
M	expo-app/sources/hooks/useMachineCapabilitiesCache.ts
M	expo-app/sources/sync/apiGithub.test.ts
M	expo-app/sources/sync/apiServices.test.ts
M	expo-app/sources/sync/capabilitiesProtocol.ts
A	expo-app/sources/sync/messageQueueV1Pending.test.ts
A	expo-app/sources/sync/messageQueueV1Pending.ts
A	expo-app/sources/sync/modelOptions.test.ts
M	expo-app/sources/sync/modelOptions.ts
A	expo-app/sources/sync/ops.sessionAbort.test.ts
M	expo-app/sources/sync/ops.ts
A	expo-app/sources/sync/pendingQueueWake.test.ts
A	expo-app/sources/sync/pendingQueueWake.ts
A	expo-app/sources/sync/permissionDefaults.test.ts
A	expo-app/sources/sync/permissionDefaults.ts
M	expo-app/sources/sync/permissionMapping.test.ts
M	expo-app/sources/sync/permissionMapping.ts
A	expo-app/sources/sync/permissionModeOptions.test.ts
M	expo-app/sources/sync/permissionModeOptions.ts
A	expo-app/sources/sync/permissionModeOverride.test.ts
A	expo-app/sources/sync/permissionModeOverride.ts
M	expo-app/sources/sync/permissionTypes.test.ts
M	expo-app/sources/sync/permissionTypes.ts
M	expo-app/sources/sync/persistence.test.ts
M	expo-app/sources/sync/persistence.ts
M	expo-app/sources/sync/profileGrouping.test.ts
M	expo-app/sources/sync/profileGrouping.ts
M	expo-app/sources/sync/profileMutations.ts
M	expo-app/sources/sync/profileUtils.test.ts
M	expo-app/sources/sync/profileUtils.ts
A	expo-app/sources/sync/readStateV1.test.ts
A	expo-app/sources/sync/readStateV1.ts
A	expo-app/sources/sync/realtimeSessionSeq.test.ts
A	expo-app/sources/sync/realtimeSessionSeq.ts
M	expo-app/sources/sync/reducer/phase0-skipping.spec.ts
M	expo-app/sources/sync/reducer/reducer.spec.ts
M	expo-app/sources/sync/reducer/reducer.ts
A	expo-app/sources/sync/resumeSessionBase.test.ts
A	expo-app/sources/sync/resumeSessionBase.ts
A	expo-app/sources/sync/resumeSessionPayload.test.ts
A	expo-app/sources/sync/resumeSessionPayload.ts
M	expo-app/sources/sync/settings.spec.ts
M	expo-app/sources/sync/settings.ts
M	expo-app/sources/sync/spawnSessionPayload.ts
M	expo-app/sources/sync/storage.ts
M	expo-app/sources/sync/storageTypes.ts
M	expo-app/sources/sync/suggestionCommands.ts
M	expo-app/sources/sync/sync.ts
M	expo-app/sources/sync/typesRaw.spec.ts
M	expo-app/sources/sync/typesRaw.ts
A	expo-app/sources/sync/updateSessionMetadataWithRetry.test.ts
A	expo-app/sources/sync/updateSessionMetadataWithRetry.ts

commit 552f517e9823b56b4bbadbceb3acabb1c1d098ae
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(ui): add InlineAddExpander; inline add for secrets/env vars
    
    - Introduces a reusable inline expander with Cancel/Save actions
    - Refactors EnvironmentVariablesList and SecretsList to add items inline (no modal)
    - Adds tests covering the new inline add flows

M	expo-app/sources/components/EnvironmentVariablesList.test.ts
M	expo-app/sources/components/EnvironmentVariablesList.tsx
A	expo-app/sources/components/InlineAddExpander.tsx
A	expo-app/sources/components/secrets/SecretsList.test.ts
M	expo-app/sources/components/secrets/SecretsList.tsx

commit cbaf39a63c60a674e2b13f71c63a92d43d29ffe2
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(secret-requirement): add picker route + modularized modal
    
    - Extracts SecretRequirementModal into a focused module and adds a full-screen picker route
    - Adds pure helpers for applying results and gating auto-prompt behavior (with tests)
    - Adjusts /new modal presentation + web CSS sizing to avoid hidden/stacked screens

M	expo-app/sources/app/(app)/_layout.tsx
A	expo-app/sources/app/(app)/new/pick/secret-requirement.tsx
M	expo-app/sources/components/SecretRequirementModal.tsx
A	expo-app/sources/components/secretRequirement/SecretRequirementModal.tsx
A	expo-app/sources/components/secretRequirement/SecretRequirementScreen.tsx
M	expo-app/sources/theme.css
A	expo-app/sources/utils/secretRequirementApply.test.ts
A	expo-app/sources/utils/secretRequirementApply.ts
A	expo-app/sources/utils/secretRequirementPromptEligibility.test.ts
A	expo-app/sources/utils/secretRequirementPromptEligibility.ts

commit 36641d90649053864c09916bcfbf383669f479c4
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(session): capability-gated resume flows + pending queue UX
    
    - Wires agent registry + machine capabilities into new-session and session resume flows
    - Adds pending message rendering and session notices for inactive/offline states
    - Adds supporting UI components/tests for CLI detection and capability preflight

M	expo-app/sources/-session/SessionView.tsx
A	expo-app/sources/-session/sessionResumeUi.test.ts
A	expo-app/sources/-session/sessionResumeUi.ts
A	expo-app/sources/__tests__/app/machine/machineDetails.capabilitiesRequestStability.test.ts
M	expo-app/sources/app/(app)/machine/[id].tsx
M	expo-app/sources/app/(app)/new/NewSessionWizard.tsx
M	expo-app/sources/app/(app)/new/index.tsx
M	expo-app/sources/app/(app)/new/pick/machine.tsx
M	expo-app/sources/app/(app)/new/pick/resume.tsx
M	expo-app/sources/app/(app)/session/[id]/info.tsx
M	expo-app/sources/app/(app)/session/[id]/message/[messageId].tsx
M	expo-app/sources/components/ChatFooter.tsx
M	expo-app/sources/components/ChatList.tsx
A	expo-app/sources/components/PendingUserTextMessageView.test.tsx
A	expo-app/sources/components/PendingUserTextMessageView.tsx
A	expo-app/sources/components/SessionNoticeBanner.tsx
A	expo-app/sources/components/agentInput/PathAndResumeRow.test.ts
A	expo-app/sources/components/agentInput/PathAndResumeRow.tsx
A	expo-app/sources/components/agentInput/ResumeChip.tsx
A	expo-app/sources/components/agentInput/actionBarLogic.test.ts
A	expo-app/sources/components/agentInput/actionBarLogic.ts
A	expo-app/sources/components/chatListItems.test.ts
A	expo-app/sources/components/chatListItems.ts
A	expo-app/sources/components/machine/DetectedClisList.errorSnapshot.test.ts
M	expo-app/sources/components/machine/DetectedClisList.tsx
M	expo-app/sources/components/machine/DetectedClisModal.tsx
A	expo-app/sources/components/machine/InstallableDepInstaller.tsx
A	expo-app/sources/components/navigation/HeaderTitleWithAction.tsx
A	expo-app/sources/components/newSession/CliNotDetectedBanner.tsx
M	expo-app/sources/components/newSession/MachineCliGlyphs.tsx
M	expo-app/sources/components/newSession/ProfileCompatibilityIcon.tsx
A	expo-app/sources/components/newSession/WizardSectionHeaderRow.test.ts
M	expo-app/sources/hooks/useCLIDetection.ts

commit 9a9d439e54998316e64ab28bafc93f06025ff88b
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(settings): wire agent registry into settings
    
    - Updates settings screens to reflect agent registry defaults and available agents
    - Keeps session/account settings aligned with new permission/default behavior

M	expo-app/sources/app/(app)/settings/account.tsx
M	expo-app/sources/app/(app)/settings/session.tsx

commit 67ceab362d6bacce54ed360b59eda35404c2c570
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(experiments): add inbox friends experiment gate
    
    - Adds an experiment flag and hooks for inbox/friends enablement
    - Updates inbox/friends routes to gate access and routing based on the experiment

M	expo-app/sources/app/(app)/friends/index.tsx
M	expo-app/sources/app/(app)/friends/search.tsx
M	expo-app/sources/app/(app)/inbox/index.tsx
A	expo-app/sources/experiments/inboxFriends.test.ts
A	expo-app/sources/experiments/inboxFriends.ts
A	expo-app/sources/hooks/useInboxFriendsEnabled.ts
A	expo-app/sources/hooks/useRequireInboxFriendsEnabled.ts

commit 05b45b4f505dd9da88501ea728c6c3897019ab5b
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(settings): update features toggles for agents/inbox/codex
    
    - Replaces expGemini toggle with agent-registry-backed experimental agent toggles
    - Adds inbox friends experiment toggle
    - Adds Codex ACP toggle and keeps Codex resume/acp mutually exclusive

M	expo-app/sources/app/(app)/settings/features.tsx

commit ec9225a8f93564a418e6e446cecf8d0f383fc510
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(i18n): add device locale helpers + update translations
    
    - Adds device locale helpers for native and shared runtime
    - Updates translation dictionaries and text index wiring

A	expo-app/sources/text/deviceLocales.native.ts
A	expo-app/sources/text/deviceLocales.ts
M	expo-app/sources/text/index.ts
M	expo-app/sources/text/translations/ca.ts
M	expo-app/sources/text/translations/en.ts
M	expo-app/sources/text/translations/es.ts
M	expo-app/sources/text/translations/it.ts
M	expo-app/sources/text/translations/ja.ts
M	expo-app/sources/text/translations/pl.ts
M	expo-app/sources/text/translations/pt.ts
M	expo-app/sources/text/translations/ru.ts
M	expo-app/sources/text/translations/zh-Hans.ts

commit 98b7138360ff2bade61c2a2f78e1ef1b11b3e320
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(agents): align resume helpers + temp session data typing
    
    - Refactors agent resume capability helpers to use the agent registry
    - Adds getAgentVendorResumeId for vendor resume id lookup
    - Types temp session data agentType as AgentId and adds regression tests

A	expo-app/sources/utils/agentCapabilities.test.ts
M	expo-app/sources/utils/agentCapabilities.ts
M	expo-app/sources/utils/tempDataStore.ts

commit 63cda8b20882dde5746e9f007b0866a0e39c3134
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    expo-app(ui): add list/pending primitives and polish
    
    - Adds reusable item-group row helpers and pending queue UI coverage
    - Refines list and settings components for more consistent layout/behavior
    - Updates profile list model helpers and adds targeted tests

M	expo-app/sources/components/AgentInput.tsx
M	expo-app/sources/components/Avatar.tsx
M	expo-app/sources/components/EnvironmentVariableCard.tsx
M	expo-app/sources/components/Item.tsx
M	expo-app/sources/components/ItemGroup.dividers.test.ts
M	expo-app/sources/components/ItemGroup.dividers.ts
A	expo-app/sources/components/ItemGroupRowPosition.tsx
A	expo-app/sources/components/ItemGroupTitleWithAction.test.ts
A	expo-app/sources/components/ItemGroupTitleWithAction.tsx
M	expo-app/sources/components/ItemList.tsx
M	expo-app/sources/components/MainView.tsx
M	expo-app/sources/components/MultiTextInput.tsx
M	expo-app/sources/components/PendingMessagesModal.test.ts
M	expo-app/sources/components/PendingMessagesModal.tsx
A	expo-app/sources/components/PendingQueueIndicator.test.ts
M	expo-app/sources/components/PendingQueueIndicator.tsx
M	expo-app/sources/components/Popover.test.ts
M	expo-app/sources/components/Popover.tsx
M	expo-app/sources/components/ProfileEditForm.tsx
M	expo-app/sources/components/SettingsView.tsx
M	expo-app/sources/components/SidebarView.tsx
M	expo-app/sources/components/TabBar.tsx
M	expo-app/sources/components/dropdown/DropdownMenu.tsx
M	expo-app/sources/components/dropdown/SelectableMenuResults.tsx
A	expo-app/sources/components/itemGroupRowCorners.test.ts
A	expo-app/sources/components/itemGroupRowCorners.ts
M	expo-app/sources/components/profiles/ProfilesList.tsx
M	expo-app/sources/components/profiles/profileListModel.test.ts
M	expo-app/sources/components/profiles/profileListModel.ts
A	expo-app/sources/utils/profileConfigRequirements.test.ts
A	expo-app/sources/utils/profileConfigRequirements.ts

commit 10dca4ca7057ad04c6d121110f7fd2f006a411bc
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    chore(expo): pin libsodium-wrappers and align patch-package dirs
    
    - Pins libsodium-wrappers to 0.7.15 to avoid patching 0.7.16
    - Moves expo-router patch to expo-app/patches and updates postinstall patch-package invocation
    - Updates yarn.lock to match dependency pin

M	expo-app/package.json
R100	expo-app/patches-expo-app/expo-router+6.0.22.patch	expo-app/patches/expo-router+6.0.22.patch
D	expo-app/patches/libsodium-wrappers+0.7.16.patch
M	expo-app/tools/postinstall.mjs
M	yarn.lock

commit cfe2ecd3e626030ecf3f63b159fbba34d7a6ff8e
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    refactor: migrate StyleSheet imports to react-native-unistyles
    
    Replaces all StyleSheet imports from 'react-native' with imports from 'react-native-unistyles' across sources/. Adds a test to enforce the invariant. This improves consistency and leverages unistyles for styling.

M	expo-app/sources/app/(app)/dev/colors.tsx
M	expo-app/sources/app/(app)/dev/inverted-list.tsx
M	expo-app/sources/app/(app)/dev/modal-demo.tsx
M	expo-app/sources/app/(app)/dev/shimmer-demo.tsx
M	expo-app/sources/app/(app)/dev/tools2.tsx
M	expo-app/sources/app/(app)/dev/typography.tsx
M	expo-app/sources/components/ChatHeaderView.tsx
M	expo-app/sources/components/CommandPalette/CommandPalette.tsx
M	expo-app/sources/components/CommandPalette/CommandPaletteResults.tsx
M	expo-app/sources/components/CommandView.tsx
M	expo-app/sources/components/OverlayPortal.tsx
M	expo-app/sources/components/Popover.tsx
M	expo-app/sources/components/ShimmerView.tsx
M	expo-app/sources/components/VoiceAssistantStatusBar.tsx
M	expo-app/sources/components/tools/PermissionFooter.tsx
M	expo-app/sources/components/tools/ToolStatusIndicator.tsx
M	expo-app/sources/components/tools/views/BashViewFull.test.ts
M	expo-app/sources/components/tools/views/BashViewFull.tsx
M	expo-app/sources/components/tools/views/MultiEditView.tsx
M	expo-app/sources/components/tools/views/MultiEditViewFull.tsx
M	expo-app/sources/components/tools/views/TaskView.tsx
A	expo-app/sources/dev/unistylesStyleSheetImports.test.ts
M	expo-app/sources/modal/components/WebPromptModal.tsx

commit 8aaacbfaac7acb3b946c9e7bdd99ee6af5be3a62
Author:     Leeroy Brun <leeroy.brun@gmail.com>
AuthorDate: 2026-01-25
Commit:     Leeroy Brun <leeroy.brun@gmail.com>
CommitDate: 2026-01-25

    docs: add Conventional Commits instructions
    
    Introduce .github/copilot-commit-instructions.md to document the Conventional Commits specification and provide commit message guidelines for the repository.

A	.github/copilot-commit-instructions.md
```
