Skip to content

Releases: tytsxai/PromptPanel

PromptPanel v1.1.2 — valid signature, real universal binary, live update channel

Choose a tag to compare

@tytsxai tytsxai released this 27 Jul 18:32
4077e54

Distribution-correctness release. Nothing changes in how the app is used day to day; what changes is that a build produced from this source is now actually installable and updatable. Two defects that would have surfaced on the first public binary are fixed, the Sparkle update channel is finalized end to end, and the public positioning surfaces now state only what the evidence supports.

This release ships source only — there is no binary asset yet. The notarized universal build will be attached once the EdDSA signing key is in place; see docs/生产发布与恢复手册.md.

Fixed

  • The packaged .app had an invalid code signature. build-app.sh added three app-root symlinks to Contents/Resources/*.bundle after signing, to satisfy the SwiftPM Bundle.module accessor. Content at the bundle root cannot be sealed, so codesign --verify exited 1 (unsealed contents present in the bundle root) — not a warning: a quarantined download would be blocked by Gatekeeper on first launch and Sparkle would refuse to install the update. The symlinks are gone and release-readiness.sh now verifies signatures with no exemptions.
  • The release archive was arm64-only while the README and FAQ promised a universal binary — an Intel download would simply not run, and the defect was invisible on an Apple Silicon build machine. Release builds now produce arm64 + x86_64, and the release gate fails if either slice is missing.
  • The seeded release/appcast.xml was not well-formed XML (a double hyphen inside an XML comment), so Sparkle's parser would have rejected the whole feed and update checks would have failed silently forever — HTTP 200, plausible file, no updates ever offered. Both generate-appcast.sh and the publish workflow now validate the feed before writing or deploying it.
  • The appcast XML check broke the publish workflow: xmllint is no longer preinstalled on ubuntu-latest (exit 127). Validation now uses the preinstalled python3.

Added

  • Sparkle update channel finalized. Feed pinned to https://tytsxai.github.io/PromptPanel/appcast.xml, published from release/appcast.xml; installers ship as Release assets. Because SUFeedURL/SUPublicEDKey are baked into each installed app and cannot be corrected afterwards, release-readiness.sh --public-distribution now fills in the canonical feed URL, requires an EdDSA public key, and asserts both keys are present in the packaged Info.plist. generate-appcast.sh gained --tag, seed merging, a guard against rewriting already-published enclosure URLs, and a hard failure when no signing key is available.
  • HotkeyRecorderField, a self-drawn shortcut recorder built only on public non-UI API, replacing KeyboardShortcuts.Recorder — this removed the last runtime dependency on Bundle.module. Existing hotkeys are disabled while recording; Esc cancels and Delete clears as before. Trade-off: the library's "shortcut already taken" popup is gone; the Settings hint and FAQ cover the workaround.

Changed

  • Package.resolved is now version-controlled — release builds were not reproducible before. Locked at GRDB 7.8.0 / KeyboardShortcuts 1.10.0 / Sparkle 2.9.4.
  • README architecture claims state build facts only. The x86_64 slice has only been exercised through Rosetta, so "tested on Apple Silicon and Intel" is now "built as a universal binary that runs natively on both".
  • The Simplified-Chinese-only app interface is disclosed across all eight READMEs and every metadata surface; check-docs.sh asserts it. The docs ship in eight languages and readers would otherwise assume the UI does too.

Removed

  • 10 UI-QA and draft screenshots (~5.9 MiB) deleted from the repository — regenerable output of capture-ui-qa.sh, now git-ignored.

Full changelog: v1.1.1...v1.1.2

PromptPanel v1.1.1 — reliability, security-hardening, docs, and auto-update channel

Choose a tag to compare

@tytsxai tytsxai released this 14 Jul 09:37
0c1bbe8

Reliability, security-hardening, and documentation release. No end-user feature changes and no new default network paths: the app stays local-first, and the auto-update channel added here remains dormant unless a feed URL and signing key are configured at build time.

Added

  • Auto-update release channel wired up: scripts/generate-appcast.sh generates and EdDSA-signs an appcast.xml from a directory of notarized release archives, completing the Sparkle update path. Daily automatic update checks are enabled (24 h interval) while installs still prompt first — no silent install. The channel stays inert in default and source builds because no SUFeedURL/SUPublicEDKey is baked in unless passed to build-app.sh at package time.
  • Localized READMEs for Japanese, Korean, Traditional Chinese, Spanish, French, and German (in addition to English and Simplified Chinese).

Security

  • Hardened-runtime library validation kept enabled: removed com.apple.security.cs.disable-library-validation from the shipped entitlements; build-app.sh re-signs Sparkle.framework and every embedded helper with the hardened runtime and the app's identity, so all loaded code shares one Team ID — closing an unnecessary dylib-injection surface. release-readiness.sh now asserts the entitlement is absent and verifies the bundle signature.
  • HTTPS-only Sparkle feed enforced in both build-app.sh and release-readiness.sh.
  • Data directory permissions tightened: app-support and logs directories are now created with 0700, so no other local account can read PromptPanel storage.

Fixed

  • Diagnostics export and accessibility reset could hang when a subprocess filled its stderr pipe (~64 KB) before waitUntilExit(); the pipes are now drained before waiting.
  • Two crash-prone force-unwraps removed (FTS search arguments now use typed StatementArguments; LogRepository.cleanup has a fallback cutoff date).
  • Keyboard-shortcut recorder no longer crashes on first use — resource-bundle symlinks are added after signing so Bundle.module resolves.

Full Changelog: v1.1.0...v1.1.1

PromptPanel v1.1.0 — library import/export, diagnostics export, atomic data safety

Choose a tag to compare

@tytsxai tytsxai released this 11 Jun 11:53
2661463

PromptPanel v1.1.0 — Library import/export, diagnostics export, atomic data safety

First stable feature release after 1.0. Focus areas: lossless library migration, on-device diagnostics, and storage self-maintenance — all still local-first with no new network paths.

中文摘要:1.0 之后的第一个功能正式版。核心新增:词库 JSON/Markdown 导入导出(导入前自动本地备份、单事务原子回滚)、一键本地诊断包导出、恢复产物自动清理。所有数据仍然只存在本机,没有任何新增网络路径。

✨ Added

  • Library import/export (Settings → Maintenance / 设置 → 维护操作)
    • Export JSON: lossless full-library transfer between Macs or PromptPanel installs.
    • Export MD: human-reviewable Markdown export for sharing.
    • Import JSON / Import MD: migrate from another install or a Markdown prompt collection.
    • Every import automatically creates a local database backup first, and all import writes run in a single SQLite transaction — a failed import rolls back completely instead of leaving a half-written library.
  • Diagnostics export: one click produces a local diagnostics bundle (app/system info, settings snapshot, recent logs, database health) for troubleshooting and bug reports. Nothing is uploaded.
  • Recovery pruning: stale recovery/backup artifacts are cleaned automatically, keeping the data directory bounded.
  • Regression coverage for import rollback and quick-panel manual ordering.

🔧 Changed

  • Quick-panel window-origin persistence is debounced — fewer redundant settings writes while dragging the panel.
  • Settings window polish: clearer maintenance section and runtime-health presentation.
  • Hardened distribution path: entitlements aligned for release signing; update messaging matches the actually-disabled Sparkle state.

🐛 Fixed

  • Library import is now atomic — a mid-import failure no longer leaves partially imported projects or entries.
  • Quick-panel local ranking now matches repository ordering for manual sortOrder, so panel and library always show the same order.
  • Repository consistency edge cases in entry and settings persistence.

🔒 Security & privacy

  • No accounts, no telemetry, no cloud sync. Import/export and diagnostics export operate purely on local files.
  • Sparkle remains bundled but disabled (no feed configured), so this build makes zero outbound network calls.

📦 Install (build from source)

git clone https://github.com/tytsxai/PromptPanel.git
cd PromptPanel
./scripts/build-app.sh
open dist/PromptPanel.app

Requires macOS 14 Sonoma or later (Apple Silicon & Intel), Xcode 15+, Swift 5.10.

Full changelog: https://github.com/tytsxai/PromptPanel/blob/main/CHANGELOG.md
Compare: v1.0.1...v1.1.0

v1.0.1 — Workflow examples + version surfaces

Choose a tag to compare

@tytsxai tytsxai released this 18 May 16:39
9941307

📝 Documentation release

Documentation-only release on top of v1.0.0. The app binary, hotkey path, paste behavior, and storage format are unchanged.

What's new in the docs

  • README — Workflow examples section capturing concrete use cases people actually search for:
    • "Spin up a fresh ChatGPT / Claude chat with my standard role / system prompt"
    • "Drop a Cursor / Copilot project-context block into a new file"
    • "Paste a code-review checklist into a PR draft"
    • "Fire a repeating terminal command with the exact flag combo"
    • "Insert a meeting-notes template into Notion / Obsidian / Apple Notes"
    • "Push a customer-service / sales reply template into Slack or email"
    • "Switch between projects with isolated prompt sets"

These double as long-tail SEO/GEO surfaces — the kinds of "how do I…" questions that route discovery from ChatGPT/Claude/Perplexity/Gemini back to PromptPanel.

Version surfaces aligned

  • `codemeta.json` → 1.0.1 / 2026-05-19
  • `Info.plist` → CFBundleShortVersionString 1.0.1, CFBundleVersion 2
  • `docs/search-metadata.schema.jsonld` → softwareVersion 1.0.1
  • `llms.txt` → version line + answer-engine summary
  • README badges (EN + zh-CN)

Full changelog

See CHANGELOG.md.

PromptPanel v1.0.0 — local-first macOS AI prompt launcher

Choose a tag to compare

@tytsxai tytsxai released this 17 May 00:27
8c8292f

PromptPanel v1.0.0 — first public release.

An open-source, local-first macOS prompt manager and snippet launcher for AI power users. Press a global hotkey from any app, search your local prompt library, hit Enter, and the entry lands in the active text field — ChatGPT, Claude, Cursor, Copilot, VS Code, Terminal, browsers, or anywhere else.

Highlights

  • 🔥 Global hotkey quick panel (KeyboardShortcuts), targeting <300 ms hotkey-to-focus.
  • 🗂️ Project-scoped prompts plus a built-in Universal project.
  • 🔍 SQLite FTS5 search across title and body, with #tag filtering.
  • 📋 Clipboard-first execution guarantee; best-effort auto-paste via macOS Accessibility.
  • 📌 Pin, manual sort, recency, and use-count tiers in both the library and the quick panel.
  • 🌗 Light / dark / system theme, Launch at Login (SMAppService), Sparkle 2 auto-update.
  • 🔐 No accounts, no telemetry, no cloud sync — prompt content stays in a single local SQLite file.

Pain points it removes

  • Retyping the same role / system prompt into every new ChatGPT, Claude, or Gemini chat.
  • Hunting through a Notes app or scratchpad for a reusable AI prompt mid-conversation.
  • Pasting Cursor / Copilot project context blocks before every coding session.
  • Auto-paste tools that silently fail when focus moves.
  • Cloud prompt managers that cannot safely hold NDA-bound or proprietary prompts.

System requirements

  • macOS 14 (Sonoma) or later, Apple Silicon and Intel.

Install

Pre-built binaries are not attached to this tag yet. Build from source:

git clone https://github.com/tytsxai/PromptPanel.git
cd PromptPanel
./scripts/build-app.sh
open dist/PromptPanel.app

On first run, grant Accessibility permission for automatic paste, set a hotkey in Settings (default ⌥2), and start adding entries to the Universal project.

Privacy

Local SQLite at ~/Library/Application Support/PromptPanel/promptpanel.db. No accounts, no analytics. The only outbound traffic is the optional Sparkle update check.

Full notes

See CHANGELOG.md.