Commit Graph
62 Commits
Author SHA1 Message Date
Kaede Akino ecfedda32c Update documents 2026-09-13 21:28:53 +08:00
Kaede Akino 2977677f7b Marketing 2026-09-13 20:13:53 +08:00
Kaede Akino 0f31ddef4b Number duplicate mobile workspaces 2026-09-13 17:50:24 +08:00
Kaede Akino f9953c698a Annual subscription 2026-09-13 13:26:54 +08:00
Kaede Akino 8dcc934506 Fix mobile state and connection races 2026-09-13 12:18:56 +08:00
Kaede Akino 3df3bcaf0c Refactor 2026-09-13 01:30:00 +08:00
Kaede Akino 8f007628d8 remove useless i18n 2026-09-13 00:24:23 +08:00
Kaede Akino 83b54be813 Remove useless code 2026-09-12 23:57:33 +08:00
Kaede Akino 8cc4419d1c Remove restore workspace 2026-09-12 23:29:46 +08:00
Kaede Akino c036f1a058 Bulk TFI 2026-09-12 23:24:04 +08:00
Kaede Akino f6d4e71451 Bulk Assistant 2026-09-12 22:39:45 +08:00
Kaede Akino 88659a6319 Use native iOS Assistant conversation lists 2026-09-12 18:39:18 +08:00
Kaede Akino 93c6438e75 Allow immediate port forwarding toggles 2026-09-12 17:09:07 +08:00
Kaede Akino 4f02ec354a Disable History for serial panes 2026-09-12 16:48:29 +08:00
Kaede Akino e50ea0c75e Align port forwarding editors 2026-09-12 15:46:27 +08:00
Kaede Akino 9b04003012 Keep SSH host-key approval on one connection 2026-09-12 15:33:26 +08:00
Kaede Akino ae968735d5 Sync Metrics configuration across devices 2026-09-12 14:06:56 +08:00
Kaede Akino e7105ed45d TFI Snippets and History 2026-09-12 13:10:55 +08:00
Kaede Akino 5ee3cded0a Keep built-in MCP server settings local 2026-09-12 12:03:02 +08:00
Kaede Akino e7406ea292 Refine mobile Workspace menu grouping 2026-09-12 11:53:06 +08:00
Kaede Akino e98e038998 Align iOS Assistant with macOS 2026-09-12 11:34:57 +08:00
Kaede Akino 352be589c8 Persist port forwarding enabled state 2026-09-12 10:38:01 +08:00
Kaede Akino 01ca95e95f Show Snippet edit times on iOS cards 2026-09-12 10:38:01 +08:00
Kaede Akino 97248d17f2 Improve mobile SFTP navigation and layout 2026-09-12 10:38:01 +08:00
Kaede Akino fcba944911 Add TFI workspace rename and directory handoff 2026-09-12 10:38:00 +08:00
Kaede Akino 64d0183e03 Add mobile terminal snippet and history lists 2026-09-12 10:37:38 +08:00
Kaede Akino 6527bdfb50 Restrict ListViewKit to native list workloads 2026-09-12 10:36:22 +08:00
Kaede Akino adec407a13 Use native MCP settings navigation 2026-09-12 10:36:22 +08:00
Kaede Akino 4c68a01c48 Share cross-platform session and presentation logic 2026-09-12 10:36:15 +08:00
Kaede Akino 5eefc33cb0 Refactor TFI for project structure 2026-09-12 01:21:51 +08:00
Kaede Akino 1efcbe9063 Bulk 2026-09-11 23:39:34 +08:00
Kaede Akino 7bbfeb79e2 Bulk iOS 2026-09-11 21:07:44 +08:00
Kaede Akino 1b835a5df4 Continue iOS port with shared settings and Metrics 2026-09-11 15:12:37 +08:00
Kaede Akino c2958a05b3 Add iOS workspaces and shared feature services
Share Vault, persistence, SSH/SFTP, forwarding, and SwiftUI components across platforms. Add mobile editors, terminal input, standalone Assistant, Metrics navigation, transfers, and a unified Live Activity with host system icons.

Validation: 35 iOS tests and 100 focused macOS tests pass; formatting and zh-Hans checks pass. The full macOS run reports 14 issues in the documented timing, Keychain, and popover suites. Remaining Assistant tool and CloudKit work is tracked in Memory/MOBILE_ROLLOUT.md.
2026-09-11 13:47:16 +08:00
Kaede Akino 66890792b8 Split macOS and iOS targets into shared frameworks 2026-09-11 10:59:38 +08:00
Kaede Akino 6b3be99f48 Fix screenshot 2026-09-11 02:02:04 +08:00
Kaede Akino 656b0f20d0 Add App Store review link and automatic invitations 2026-09-11 00:46:59 +08:00
Kaede Akino cea1020bff Remove low-value test assertions 2026-09-11 00:25:32 +08:00
Kaede Akino afa77ae16a Add Known Hosts manager and SSH folder import 2026-09-11 00:00:38 +08:00
Kaede Akino f0fdcf4ddb Sync Vault and settings across devices 2026-09-10 23:15:25 +08:00
Kaede Akino 526f8bdf07 Add get_metrics tool for Agent and MCP 2026-09-10 22:20:57 +08:00
Kaede Akino 3e0479f573 Refresh focused screenshots and showcase server metrics 2026-09-10 22:03:09 +08:00
Kaede Akino 7caf70f5eb Add server metrics and menu bar monitoring 2026-09-10 20:47:35 +08:00
Kaede Akino e2490285c9 Remove unused Show Recents setting 2026-09-09 20:46:57 +08:00
Kaede Akino 2afc70a285 Normalize fetched model types with AgentKit 0.6.0 2026-09-09 17:14:19 +08:00
Kaede Akino d8b12d98af Add theme selector 2026-09-09 11:47:18 +08:00
Kaede Akino 6a912cc5d0 Fix App Icon 2026-09-09 11:34:51 +08:00
Kaede Akino 3511bf963a Refactor free trial 2026-09-09 01:20:42 +08:00
Kaede Akino dd30b19391 Fix apple speech crash 2026-09-06 19:31:45 +08:00
Kaede AkinoandClaude Opus 5 ea3aae9b52 Address a provider by one URL and one API type
The API Type picker named three vendors — OpenAI, Anthropic, Google — for
four wire protocols, so `.openAI` carried a Responses toggle to express the
fourth. Each kind also carried a default base URL, which the editor printed
as the Base URL placeholder, so `api.openai.com` was on screen for anyone
who had added a provider and typed nothing, and a provider with a key but no
address quietly resolved to a vendor endpoint nobody had named.

The picker now names the protocol: Automatic, Chat Completions, Responses,
Messages, generateContent. Automatic reads the protocol off the URL's own
suffix and falls back to Chat Completions when nothing matches, which is
what an endpoint that does not name itself is almost always serving.

Base URL and API Path collapse into one field. Splitting them made "does the
base URL include /v1" a question the user had to answer, and it is the
question every client of this shape gets wrong. Paste whatever the gateway's
documentation printed, at whatever depth it printed it; the two captions
underneath say what that produced — Full URL is read from the same value the
request is built from, and the line under it names the body shape, which is
how Automatic explains its own answer and how an explicit pick that
disagrees with the URL stops being a silent surprise. An explicit pick moves
the format, never the address: the person who pasted it keeps it.

Vertex AI goes with the vendor names. It stays in AgentKit, which is an
independent package and does not carry this app's constraints, but nothing
here drives it any more — the editor's project, location and service-account
import are gone, along with five persisted columns and their Keychain path.

`ProviderEndpoint` holds the two things the editor owns, the typed URL and
the picked type, because neither survives a round trip through the composed
result: a URL ending in /messages looks the same whether it was typed or
appended, and Automatic looks the same as picking the format it resolved to.
`AIConfigurationModel.setEndpoint` is the only writer of the derived
`inferenceURL`, `baseURL` and `apiFormat`.

Old rows fold back to the address they used to resolve to rather than to
Automatic, so a provider that worked before the change points at the same
place after it. That fold needs the pre-V12 columns, which is why `kind`,
`baseURL`, `apiPath` and `usesResponsesAPI` are still declared, and it needs
V11 frozen: every VersionedSchema in the plan points at live model types, so
editing a persisted model rewrites what the old version *means* and leaves
an installed store recording a version the plan no longer contains. That is
a refusal to open, not a migration. `TermindSchemaV11Models` is what gives
V11 to V12 two sides — any future attribute change needs the same freeze.

Requires AgentKit 0.5.0, where `ModelAPIFormat` replaces `ModelProviderKind`
and a provider carries `inferenceURL` and `baseURL` instead of a kind, a
base and a path.

Verified with the full test suite (994 tests, including the new
ProviderEndpointTests), swift-format lint --strict,
Scripts/check-zh-localization.sh, npm run build, and a launch of the app
against an existing V11 store.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 11:33:34 +08:00