feat(keyboard): ship AI hint carousel, home library cards, and clipboard polish
Rotate AI idle suggestions with optional remote packs, move history/dictionary onto self-sizing Home preview cards, harden clipboard capture/prompting, and simplify keyboard chrome by dropping most liquid-glass shadows.
This commit is contained in:
@@ -1,27 +1,33 @@
|
||||
# AGENTS.md
|
||||
|
||||
## License boundary
|
||||
|
||||
OSGKeyboard is **source available, not open source**. `LICENSE` permits personal,
|
||||
non-commercial local use and forbids unauthorized redistribution or public derivative
|
||||
versions. Do not describe the project as MIT-licensed, open source, or freely forkable.
|
||||
|
||||
## Versioning and releases
|
||||
|
||||
OSGKeyboard uses **Conventional Commits** as the single source of truth for version bumps
|
||||
and `CHANGELOG.md` entries. Agents must follow this section whenever cutting a release or
|
||||
writing commit messages that will ship to users.
|
||||
|
||||
### Version format (0.x stage)
|
||||
### Version format
|
||||
|
||||
While `MARKETING_VERSION` is `0.x.y`, treat the project as **pre-1.0**:
|
||||
The current source-of-truth version is **1.7.0 (build 65)**. Releases use stable SemVer:
|
||||
|
||||
| Field | File | Rule |
|
||||
|-------|------|------|
|
||||
| Marketing version | `project.yml` → `MARKETING_VERSION` | `0.MINOR.PATCH` (SemVer) |
|
||||
| Marketing version | `project.yml` → `MARKETING_VERSION` | `MAJOR.MINOR.PATCH` (SemVer) |
|
||||
| Build number | `project.yml` → `CURRENT_PROJECT_VERSION` | Monotonic integer; **+1 on every release cut**, never decrease |
|
||||
|
||||
**Bump rules** (evaluate all commits since the last tagged/released version; take the **highest** bump):
|
||||
|
||||
| Commit prefix | Version bump | Example |
|
||||
|---------------|--------------|---------|
|
||||
| `feat:` | **MINOR** + reset PATCH → `0` | `0.3.6` → `0.4.0` |
|
||||
| `fix:`, `perf:` (user-visible) | **PATCH** | `0.3.6` → `0.3.7` |
|
||||
| `feat!:` or footer `BREAKING CHANGE:` | **MINOR** (pre-1.0; reserve `1.0.0` for a deliberate GA) | `0.3.6` → `0.4.0` |
|
||||
| `feat:` | **MINOR** + reset PATCH → `0` | `1.7.0` → `1.8.0` |
|
||||
| `fix:`, `perf:` (user-visible) | **PATCH** | `1.7.0` → `1.7.1` |
|
||||
| `feat!:` or footer `BREAKING CHANGE:` | **MAJOR** | `1.7.0` → `2.0.0` |
|
||||
| `refactor:`, `style:`, `docs:`, `test:`, `chore:`, `ci:` | **no bump by itself** | group with user-facing commits or skip release |
|
||||
|
||||
Pragmatic overrides (experienced-maintainer judgment, still objective):
|
||||
@@ -71,13 +77,13 @@ chore(lexicon): add offline SFCustomLanguageModelData export scripts
|
||||
**Example entry:**
|
||||
|
||||
```markdown
|
||||
## [0.4.0] - 2026-07-06
|
||||
## [1.8.0] - 2026-09-01
|
||||
|
||||
### Added
|
||||
- **Cursor navigation**: drag pad on the keyboard for precise caret movement. / **光标导航**:键盘拖动手势区,精确移动光标。
|
||||
|
||||
### Fixed
|
||||
- **API key handling**: move DeepSeek key into gitignored local file. / **API 密钥**:将 DeepSeek 密钥移至 gitignore 的本地文件。
|
||||
- **API key handling**: keep user-owned provider keys in Keychain. / **API 密钥**:将用户自备的服务商密钥保存在 Keychain。
|
||||
```
|
||||
|
||||
### Release checklist (agent)
|
||||
@@ -87,7 +93,7 @@ When the user asks to release or bump version:
|
||||
1. `git log` from last release tag/commit → classify commits → pick bump level.
|
||||
2. Update `CHANGELOG.md` (`[Unreleased]` → `[X.Y.Z] - date`, bilingual bullets).
|
||||
3. Update `project.yml`:
|
||||
- `MARKETING_VERSION` → new `0.x.y`
|
||||
- `MARKETING_VERSION` → new SemVer version
|
||||
- `CURRENT_PROJECT_VERSION` → previous build **+ 1**
|
||||
4. Commit: `chore(release): bump version to X.Y.Z (build N)` — or include in the release PR.
|
||||
5. Do **not** bump version for work that stays on a feature branch until it merges to `main`.
|
||||
@@ -106,20 +112,22 @@ When the user asks to release or bump version:
|
||||
|
||||
## Cursor Cloud specific instructions
|
||||
|
||||
### Platform reality: this is an iOS-only project on a Linux VM
|
||||
### Platform reality: this is an Apple-platform project on a Linux VM
|
||||
|
||||
OSGKeyboard is a native **iOS 18+** app (main app + custom keyboard extension + shared
|
||||
framework, all Swift 6 / SwiftUI). The Cursor Cloud VM is **Linux x86_64**. iOS development
|
||||
is fundamentally macOS-only, so the following **cannot run in this environment**:
|
||||
OSGKeyboard contains a native **iOS/iPadOS 26+** app and keyboard extension plus a
|
||||
native **macOS 15+** menu-bar app (Swift 6 / SwiftUI). The iOS host links
|
||||
`OSGKeyboardShared` and the host-only `OSGKeyboardHostSupport`; the Mac target reuses
|
||||
shared/host-support sources and links MLX Audio for Qwen3 streaming ASR. The Cursor Cloud VM
|
||||
is **Linux x86_64**. Apple-platform development is macOS-only, so the following **cannot run
|
||||
in this environment**:
|
||||
|
||||
- **Build** — needs `xcodebuild` + the iOS SDK (Xcode, macOS only).
|
||||
- **Run** — needs the iOS Simulator or a physical iPhone (macOS only).
|
||||
- **Tests** — `OSGKeyboardTests` / `OSGKeyboardExtTests` run via `xcodebuild test` against the
|
||||
iOS Simulator (macOS only).
|
||||
- **Tests** — iOS/extension tests require an iOS Simulator; `OSGKeyboardMacTests` requires macOS.
|
||||
|
||||
Nearly every source file imports iOS-only frameworks (`SwiftUI`, `UIKit`, `AVFoundation`,
|
||||
`Speech`, `Combine`), so there is no meaningful subset that compiles with Swift-for-Linux.
|
||||
Do **not** attempt to build/run/test on the Linux VM — escalate to a macOS host with Xcode 16+
|
||||
Do **not** attempt to build/run/test on the Linux VM — escalate to a macOS host with Xcode 26+
|
||||
(see `README.md` / `CONTRIBUTING.md` for the `xcodegen generate` + `xcodebuild` flow).
|
||||
|
||||
### What *does* work on Linux: SwiftLint
|
||||
@@ -144,9 +152,3 @@ Caveats:
|
||||
The `.xcodeproj` is **gitignored**; `project.yml` (XcodeGen) is the source of truth. On macOS run
|
||||
`xcodegen generate` before any `xcodebuild`. XcodeGen is macOS-oriented and is not installed on
|
||||
the Linux VM.
|
||||
|
||||
### CI note
|
||||
|
||||
`.github/workflows/ci.yml` runs on `macos-14` and currently fails at the `xcode-select -s
|
||||
/Applications/Xcode_16.0.app` step because that Xcode version is absent from GitHub's current
|
||||
`macos-14` image — this is a CI runner-image issue, unrelated to the code or this Linux setup.
|
||||
|
||||
Reference in New Issue
Block a user