Repository navigation
[codex] save KeyScribe feature branch - #36
Conversation
There was a problem hiding this comment.
Pull request overview
This draft PR preserves a feature branch that substantially rebrands the app from KeyScribe to Open Assist, updates project packaging/metadata, and introduces several new support modules and assistant-related capabilities (browser profile selection, permission helpers, insertion/dictation utilities, and memory/agent-state improvements).
Changes:
- Rebrand across UI strings, docs/wiki, scripts, and project metadata (bundle ID, package/product names, repo links).
- Add browser automation/profile selection UX plus a local Chrome/Brave profile discovery manager.
- Add/extend assistant + core-logic modules (permission snapshotting, dictation/insertion utilities, memory storage guide injection, agent-state persistence service) and update tests/smoke-test scripts accordingly.
Reviewed changes
Copilot reviewed 95 out of 141 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| Wiki/Why-OpenAssist.md | Updates wiki branding/content from KeyScribe to Open Assist. |
| Wiki/Troubleshooting.md | Rebrands troubleshooting steps and issue links. |
| Wiki/Quick-Start.md | Rebrands quick start steps and repo links. |
| Wiki/Privacy-First-Design.md | Rebrands privacy design language. |
| Wiki/Home.md | Rebrands wiki home and updates logo + repo links. |
| Wiki/AI-Rewrite-and-Context.md | Rebrands AI rewrite docs and updates Settings path text. |
| Wiki/_Sidebar.md | Rebrands sidebar and updates repo links. |
| Wiki/_Footer.md | Updates footer issue link to Open Assist. |
| Tests/OpenAssistTests/TranscriberStatusInterpreterTests.swift | Updates testable import to OpenAssist. |
| Tests/OpenAssistTests/SettingsStoreCrossIDEBootstrapTests.swift | Rebrands defaults keys and testable import. |
| Tests/OpenAssistTests/FeatureFlagsCrossIDEConversationSharingTests.swift | Rebrands defaults/env keys and testable import. |
| Tests/OpenAssistTests/ConversationTagInferenceServiceCrossIDESharingTests.swift | Rebrands project keys/labels and testable import. |
| Tests/OpenAssistTests/ConversationMemoryArchivePromotionTests.swift | Rebrands keys/labels used in promotion/memory tests. |
| Tests/OpenAssistTests/CodexInstallSupportTests.swift | Rebrands install guidance text and temp paths. |
| Tests/OpenAssistTests/CodexCommandRunnerTests.swift | Updates testable import to OpenAssist. |
| Tests/OpenAssistTests/CodexCloudTaskTrackerTests.swift | Updates testable import to OpenAssist. |
| Tests/OpenAssistTests/ClaudeHookInstallerTests.swift | Rebrands tests related to Claude hook install/migration. |
| Tests/OpenAssistTests/AutomationAPIServerTests.swift | Updates testable import to OpenAssist. |
| Tests/OpenAssistTests/AutomationAPIModelsTests.swift | Updates testable import to OpenAssist. |
| Tests/OpenAssistTests/AssistantVoiceDraftRefinementServiceTests.swift | Updates testable import to OpenAssist. |
| Tests/OpenAssistTests/AssistantTimelineGroupingTests.swift | Rebrands path expectations in timeline formatting tests. |
| Tests/OpenAssistTests/AssistantThreadMemoryServiceTests.swift | Rebrands expected memory document strings. |
| Tests/OpenAssistTests/AssistantTextRenderingPolicyTests.swift | Updates testable import to OpenAssist. |
| Tests/OpenAssistTests/AssistantSessionSummaryTests.swift | Rebrands assistant session source/title labeling. |
| Tests/OpenAssistTests/AssistantSessionInteractionTests.swift | Rebrands command strings used in interaction tests. |
| Tests/OpenAssistTests/AssistantPermissionCardStateTests.swift | Updates testable import to OpenAssist. |
| Tests/OpenAssistTests/AssistantOrbHUDModelTests.swift | Updates testable import to OpenAssist. |
| Tests/OpenAssistTests/AssistantModePolicyTests.swift | Rebrands command strings used for safety classification tests. |
| Tests/OpenAssistTests/AssistantMemorySuggestionServiceTests.swift | Rebrands bundle IDs/app names and test fixture strings. |
| Tests/OpenAssistTests/AssistantMemoryRetrievalServiceTests.swift | Adds coverage for memory storage guide injection; rebrands paths/labels. |
| Tests/OpenAssistTests/AssistantComputerUseServiceTests.swift | Updates testable import to OpenAssist. |
| Sources/OpenAssist/Views/StatusBarPopoverView.swift | Rebrands visible UI labels (“Quit…”, app name). |
| Sources/OpenAssist/Views/PromptRewriteHUD.swift | Rebrands inline comment text. |
| Sources/OpenAssist/Views/PermissionOnboardingView.swift | Rebrands onboarding copy. |
| Sources/OpenAssist/Views/BrowserProfilePickerSheet.swift | Adds a sheet UI to pick a browser profile when needed. |
| Sources/OpenAssist/Views/BrowserAutomationSettingsView.swift | Adds settings UI to enable browser automation + pick profile. |
| Sources/OpenAssist/Views/AppLogoView.swift | Rebrands bundle identifiers and resource lookup paths. |
| Sources/OpenAssist/Views/AIMemoryStudioView.swift | Rebrands UI strings and notification names for settings/assistant entrypoints. |
| Sources/OpenAssist/Support/TranscriberStatusInterpreter.swift | Adds transcriber status interpretation (persistent vs transient failure). |
| Sources/OpenAssist/Support/ShortcutValidation.swift | Adds shortcut display + validation utilities used by app/UI. |
| Sources/OpenAssist/Support/PermissionCenter.swift | Adds centralized permission snapshot/request helpers. |
| Sources/OpenAssist/Support/FeatureFlags.swift | Rebrands feature flag env/defaults keys to OPENASSIST_* namespace. |
| Sources/OpenAssist/Support/DictationUIStatus.swift | Adds typed UI status model for dictation state text. |
| Sources/OpenAssist/Support/AppWindowCoordinator.swift | Rebrands window titles (settings/onboarding/assistant). |
| Sources/OpenAssist/Services/WhisperTranscriber.swift | Rebrands dispatch queue labels. |
| Sources/OpenAssist/Services/WhisperModelManager.swift | Rebrands user-agent and Application Support temp paths/dirs. |
| Sources/OpenAssist/Services/WhisperModelCatalog.swift | Adds a curated whisper.cpp model catalog with metadata + URLs. |
| Sources/OpenAssist/Services/TranscriptHistoryStore.swift | Rebrands UserDefaults persistence key. |
| Sources/OpenAssist/Services/TextInserter.swift | Rebrands logging subsystem, marker type, debug log path, env keys. |
| Sources/OpenAssist/Services/TextCleanup.swift | Adds text normalization/cleanup pipeline with modes. |
| Sources/OpenAssist/Services/ShortcutValidationRules.swift | Adds a simplified shortcut validation helper used by scripts/smoke tests. |
| Sources/OpenAssist/Services/RecognitionTuning.swift | Adds transcript scoring, phrase parsing, and whisper prompt helpers. |
| Sources/OpenAssist/Services/PromptRewriteService.swift | Rebrands defaults keys, env keys, and user-facing error copy. |
| Sources/OpenAssist/Services/PromptRewriteProviderOAuthService.swift | Rebrands keychain service identifier. |
| Sources/OpenAssist/Services/PromptRewriteModelCatalogService.swift | Rebrands cache keys and local runtime error copy + timeout defaults key. |
| Sources/OpenAssist/Services/PromptRewriteConversationStore.swift | Rebrands env keys and project-label prefix filters. |
| Sources/OpenAssist/Services/PostInsertCorrectionMonitor.swift | Adds post-insert monitoring to detect user corrections via AX + global events. |
| Sources/OpenAssist/Services/MicrophoneManager.swift | Adds microphone discovery and default-input device recovery utilities. |
| Sources/OpenAssist/Services/MemoryIndexingSettingsService.swift | Rebrands notifications/logger subsystem identifiers. |
| Sources/OpenAssist/Services/Memory/MemorySQLiteStore.swift | Rebrands fallback DB naming, Application Support paths, display labels, defaults. |
| Sources/OpenAssist/Services/Memory/MemoryRewriteRetrievalService.swift | Rebrands user-feedback label strings. |
| Sources/OpenAssist/Services/Memory/MemoryRewriteExtractionProvider.swift | Rebrands warning strings and defaults/env key usage. |
| Sources/OpenAssist/Services/Memory/MemoryIndexingService.swift | Rebrands logger subsystem identifier. |
| Sources/OpenAssist/Services/Memory/MemoryEntryExplanationService.swift | Rebrands defaults/env keys and keychain service identifiers. |
| Sources/OpenAssist/Services/Memory/ConversationAgentStateService.swift | Adds an actor-backed service to persist/fetch/clear agent state records. |
| Sources/OpenAssist/Services/LocalAIRuntimeManager.swift | Rebrands temp paths and Application Support directories. |
| Sources/OpenAssist/Services/LocalAIModelCatalog.swift | Adds curated local AI model options + merging logic. |
| Sources/OpenAssist/Services/InsertionRetryPolicy.swift | Adds a centralized retry plan policy for insertion results. |
| Sources/OpenAssist/Services/InsertionDiagnostics.swift | Rebrands diagnostic defaults/env keys and log path/queue label. |
| Sources/OpenAssist/Services/InsertionDecisionModel.swift | Adds a decision model describing which insertion path was used. |
| Sources/OpenAssist/Services/DictationInputModeStateMachine.swift | Adds a small state machine for idle/hold-to-talk/continuous mode. |
| Sources/OpenAssist/Services/CrashReporter.swift | Rebrands crash log directory + headers and logging subsystem. |
| Sources/OpenAssist/Services/ConversationTagInferenceService.swift | Rebrands workspace bundle IDs and aliasing for canonical project keys. |
| Sources/OpenAssist/Services/ConversationContextResolverV2.swift | Adds a wrapper-style resolver exposing context resolution bundles and mapping candidates. |
| Sources/OpenAssist/Services/CloudTranscriptionModelCatalogService.swift | Rebrands cache keys and timeout defaults keys. |
| Sources/OpenAssist/Services/CloudTranscriber.swift | Rebrands dispatch queue label. |
| Sources/OpenAssist/Services/ClaudeHookInstaller.swift | Rebrands user-facing strings, errors, and backup filename conventions. |
| Sources/OpenAssist/Services/BrowserProfileManager.swift | Adds Chrome/Brave profile discovery by parsing “Local State”. |
| Sources/OpenAssist/Services/AutomationAPIServer.swift | Rebrands dispatch queue label. |
| Sources/OpenAssist/Services/AutomationAPICoordinator.swift | Rebrands notification IDs/userInfo keys and user-facing strings. |
| Sources/OpenAssist/Services/AppleSpeechTranscriber.swift | Rebrands contextual bias phrase list entry. |
| Sources/OpenAssist/Services/AdaptiveCorrectionStore.swift | Rebrands legacy key and persistence paths for learned corrections. |
| Sources/OpenAssist/Assistant/CodexSessionCatalog.swift | Rebrands session originator handling + reorganizes prompt extraction. |
| Sources/OpenAssist/Assistant/CodexInstallSupport.swift | Rebrands install guidance strings. |
| Sources/OpenAssist/Assistant/CodexAssistantRuntime.swift | Rebrands status messages and client identity strings. |
| Sources/OpenAssist/Assistant/AssistantWindowView.swift | Rebrands alerts + notification names; adds browser profile picker sheet wiring. |
| Sources/OpenAssist/Assistant/AssistantVoiceDraftRefinementService.swift | Adds AI-assisted draft refinement service for voice transcripts. |
| Sources/OpenAssist/Assistant/AssistantTimelineModels.swift | Rebrands Application Support path for assistant activity storage. |
| Sources/OpenAssist/Assistant/AssistantThreadMemoryService.swift | Rebrands Application Support path for assistant thread memory. |
| Sources/OpenAssist/Assistant/AssistantPushToTalkControls.swift | Adds a push-to-talk mic control with accessibility labels/values. |
| Sources/OpenAssist/Assistant/AssistantOrbHUD.swift | Rebrands notification names and menu item titles. |
| Sources/OpenAssist/Assistant/AssistantModePicker.swift | Adds a mode picker UI component for assistant interaction modes. |
| Sources/OpenAssist/Assistant/AssistantModels.swift | Rebrands labels/messages and originator filtering to Open Assist. |
| Sources/OpenAssist/Assistant/AssistantMemoryRetrievalService.swift | Injects memory storage guide into assistant context; rebrands identity/app fields. |
| Sources/OpenAssist/Assistant/AssistantComputerUseService.swift | Rebrands user-facing permission copy and env key names. |
| Sources/OpenAssist/Assistant/AssistantComposerBridge.swift | Adds a bridge to insert text directly into the active assistant composer NSTextView. |
| Sources/OpenAssist/Assistant/AssistantClipboard.swift | Adds helper to copy assistant text to pasteboard. |
| Sources/OpenAssist/Assistant/AssistantBetaWindowModels.swift | Rebrands assistant beta banner/orb copy. |
| Sources/OpenAssist/Assistant/AssistantAttachmentSupport.swift | Adds file picker/drop/pasteboard attachment ingestion with MIME inference. |
| Scripts/SettingsStoreWhisperSmokeTests.swift | Rebrands smoke test defaults keys and paths. |
| Scripts/run-tests.sh | Updates smoke test compilation targets/paths for OpenAssist and adds explicit -target. |
| Scripts/run-insertion-reliability.sh | Rebrands compilation inputs/output paths and adds explicit -target. |
| Scripts/RecognitionTuningSmokeTests.swift | Rebrands fixture text and defaults used in smoke tests. |
| Scripts/publish-wiki.sh | Rebrands wiki repo URL and output messaging. |
| Scripts/PromptRewriteSmokeTests.swift | Rebrands temp directory naming. |
| Scripts/notarize.sh | Rebrands notarization script comments/default DMG path. |
| Scripts/MemoryIndexingSmokeTests.swift | Rebrands Application Support paths and sandbox temp dir prefix. |
| Scripts/InsertionReliabilityRunner.swift | Rebrands example command path. |
| Scripts/GenerateIcon.swift | Updates logo input path and output iconset dir naming. |
| Scripts/generate_app_icon.py | Rebrands module docstring. |
| Scripts/CoreLogicSmokeTests.swift | Rebrands fixture strings and validates ShortcutValidationRules behavior. |
| Resources/OpenAssist.entitlements | Adds entitlements for audio input and network client. |
| Resources/Info.plist | Rebrands bundle ID/name/executable, usage descriptions, and appcast feed URL. |
| README.md | Rebrands README, links, paths, and env flag names. |
| Package.swift | Renames SwiftPM package/product/targets from KeyScribe to OpenAssist. |
| OpenAssistLogo.svg | Adds Open Assist logo asset (root). |
| Assets/OpenAssistLogo.svg | Adds Open Assist logo asset (Assets). |
| Docs/User-Guide.md | Rebrands user guide headings/copy and Settings navigation. |
| Docs/Memory/Conversation-LongTerm-Memory-Design.md | Rebrands documented feature-flag names. |
| build.sh | Rebrands build output naming, bundle ID, env vars, and signing entitlements path. |
Comments suppressed due to low confidence (3)
Sources/OpenAssist/Services/ConversationTagInferenceService.swift:824
canonicalProjectKey(_:)only aliases the slugkey-scribetoopenassist, butslug("KeyScribe")produceskeyscribe(no dash). As a result, contexts labeled “KeyScribe” will canonicalize toproject:keyscribeinstead of the newproject:openassist, splitting conversation/memory state across two project keys.
Sources/OpenAssist/Assistant/AssistantMemoryRetrievalService.swift:300memoryStorageGuideinjects absolute on-disk paths (thread memory markdown + SQLite DB path) into the model context. If the assistant is backed by a cloud model, this can unnecessarily leak a user’s home directory path. Consider redacting the home directory prefix (e.g.,~) so the assistant still knows where the files live without exposing the full path.
Tests/OpenAssistTests/ConversationMemoryArchivePromotionTests.swift:879- The default
projectLabelinmakeContextis "OpenAssist" (no space), but the rest of the tests use "Open Assist". Keeping labels consistent avoids accidental mismatches in UI-facing strings and test expectations.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d5f95329c0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| APP_NAME="KeyScribe" | ||
| APP_EXECUTABLE="$APP_NAME" | ||
| APP_BUNDLE_ID="com.keyscribe.KeyScribe" | ||
| APP_NAME="Open Assist" |
There was a problem hiding this comment.
Keep DMG artifact name aligned with release workflow
Checked .github/workflows/release.yml: after ./build.sh --make-dmg it still notarizes, signs, and uploads dist/KeyScribe.dmg (notably the notarization step and release upload), but changing APP_NAME here makes the build produce dist/Open Assist.dmg. On tag builds this leaves the workflow looking for a non-existent DMG, so notarization fails and no release/appcast is produced.
Useful? React with 👍 / 👎.
| private static let cloudTranscriptionProviderAPIKeychainService = "com.manikvashith.OpenAssist" | ||
| private static let cloudTranscriptionProviderAPIKeychainAccountPrefix = "cloud-transcription-provider-api-key" | ||
| private static let automationAPIKeychainService = "com.keyscribe.KeyScribe" | ||
| private static let automationAPIKeychainService = "com.manikvashith.OpenAssist" |
There was a problem hiding this comment.
Migrate existing keychain items before renaming services
For users upgrading from KeyScribe, the cloud transcription keys and automation API bearer token were stored under the old com.keyscribe.KeyScribe keychain service; these loaders now query only com.manikvashith.OpenAssist with no fallback/copy path. In that upgrade scenario, cloud providers silently appear unconfigured and existing automation clients keep sending the old token and start getting rejected until the user re-enters or redistributes credentials.
Useful? React with 👍 / 👎.
Summary
Open a draft PR for the existing KeyScribe feature branch so it is easy to find and preserve before moving project folders.
Notes
Validation
Not run. No new local changes were committed for this PR.