384 Commits
Author SHA1 Message Date
Kaede Akino 3601bd0963 chore: add GPL-3.0-only license and source headers 2026-10-20 12:05:32 +08:00
Kaede Akino e2d31322f2 build: make local Firebase configuration optional 2026-10-20 11:30:15 +08:00
Kaede Akino 16a25ea6fa build: keep Firebase and RevenueCat configuration local 2026-10-20 11:12:48 +08:00
Kaede AkinoandClaude Code f117777ef8 fix(assistant): unify tool rendering and stack detail fields
Use generic MCP result rendering and place labels above values on macOS and iOS. Update existing presentation expectations.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-19 16:39:10 +08:00
Kaede Akino 11e6c7ca1c chore: prune redundant tests and maintenance scripts
Remove low-value rendering, dependency-owned and script tests together with orphaned test scaffolding and obsolete wrappers. Keep state-driven visual coverage and release screenshot workflows.

Preserve incoming message origins on preparation failures, refresh tool presentation fixtures, and move shared SSH import coverage out of the iOS host test bundle to avoid duplicate static types.

Relocate the host icon input manifest, remove the heuristic AppStrings checker, and simplify localization CI.
2026-10-19 10:45:11 +08:00
Kaede Akino b0dbc8b393 feat(TFM): refine host icon picker 2026-10-19 03:03:47 +08:00
Kaede AkinoandClaude Code 52ced1d570 refactor(assistant): decouple tool presentation policies
Inject tool-owned presentation profiles and semantic vocabulary, remove legacy inference and stream compatibility, and update AgentKit to 3.1.0.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-19 02:47:06 +08:00
Kaede Akino b2b3927db0 fix: mcp 2026-10-19 02:17:05 +08:00
Kaede Akino 4fa7fcc428 feat: refine terminal resize 2026-10-18 21:39:14 +08:00
Kaede Akino d41f236220 refactor: centralize tool names in TermindToolName registry
Tool names are protocol surface: they appear in the MCP export list,
persisted disabled-tool preferences, audit records, and presentation
registries. Spelling them as literals at each of those sites let one
place drift from another with no compile error to catch it.

Add TermindToolName as the single source of truth for the 25 names
Termind owns, and route every non-documentation reference through it.
The registry lives in TermindApplication because presentation cannot
import TermindRemoteInfrastructure, and TermindApplication cannot depend
on it either.

Names owned by AgentKit (request_user_secret, present_plan, the
scratch_* build tools) and retired aliases (ssh_exec, ssh_wait) stay as
literals, as do the prose in MCP instructions and descriptor summaries.
The legacyToolNames compatibility list is a historical data contract and
is unchanged.

This also removes the sshExecRunToolName and sshExecStdinToolName
constants from TermindAgentPolicy, which the registry replaces.
2026-10-18 18:20:51 +08:00
Kaede AkinoandClaude Code c97f389bff refactor: remove verified unused Swift code
Remove unused helpers, payload fields, string accessors, imports, and test fixture storage identified by cross-platform Periphery scans.

Preserve historical SwiftData storage schemas, wire formats, and runtime lifetime anchors.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-18 16:57:37 +08:00
Kaede AkinoandClaude Code 4e91185396 fix(connections): align journey progress with transport recovery
Track ET data-route progress separately from SSH bootstrap, preserve established hop colors, and reject stale route events. Distinguish direct Mosh recovery from full SSH reconnection while retaining whole-route failure coloring.

Consolidate Journey waiting transitions and failure presentation, reduce redundant rendering, and add route lifecycle and platform regressions.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-18 15:31:08 +08:00
Kaede AkinoandClaude Code c43e5bc311 fix(assistant): preserve transcript continuity across run transitions
Separate interaction refreshes from layout invalidation on macOS and iOS. Retain active editors across edit-eligibility changes and cover hosting identity, input composition, navigation controls, and model-driven streaming replay.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-18 14:15:04 +08:00
Kaede AkinoandClaude Code 8b6325db7b refactor(connections): centralize default terminal resolution
Share default transport ordering and connection-kind resolution across desktop and mobile opening paths. Keep explicit transport choices intact and skip unavailable default terminals before admission.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-18 13:20:49 +08:00
Kaede Akino 58686b400b feat: Quick Open with more transports 2026-10-18 13:00:16 +08:00
Kaede Akino 286045ab24 refactor: ui perf 2026-10-18 12:44:38 +08:00
Kaede AkinoandClaude Code 72eaa65caf refactor: share connection and assistant policies
Centralize Journey mapping, interaction ordering, and localized tool presentation; remove redundant multiplexer and paywall state. Consume AgentKit 2.2.0 for shared operation, output, and transcript contracts, and correct its maintenance checkout documentation.

Validation: AgentKit 304 tests and local-package macOS/shared 215 regressions passed. iOS app built; 38 focused tests reported passing with an existing broken fixture excluded, but Xcode finalization stalled. Default macOS tests retain timeouts and Secure Enclave failures. A subsequent remote-pin build reported AgentTranscriptMessage.toolResult unavailable; it has not been diagnosed.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-18 09:49:24 +08:00
Kaede Akino 50231b8022 test: remove useless tests 2026-10-18 01:11:53 +08:00
Kaede Akino 3d246294bf refactor(assistant): use tool-registered presentation policies 2026-10-17 23:50:26 +08:00
Kaede Akino 7e78bc00c4 feat(agent): unify output truncation and scratch capture
Integrate AgentKit 2.0.1 with shared scratch storage, whole-line tool policies, generated capture paths, and external MCP projection bypass. Update ssh-exec instructions and document the complete tool policy inventory.

Keep compact expansion controls left aligned and display the AgentKit truncation marker above them on both platforms. Cover narrow and wide native layouts, both button states, and marker ordering.
2026-10-17 22:51:26 +08:00
Kaede Akino 45e84f28bb test: remove redundant coverage and consolidate duplicated suites
An adversarial audit of the three test targets rejected most pruning
candidates: 110 of 183 proposed findings either cited files that do not
exist, mistook architectural guards for tautologies, or treated tests
that drive distinct production branches as duplicates.

Delete tests that pinned no behavior beyond a fixture literal, an
initializer assignment, or an assertion that could not fail, and drop
the unused pluralForms helper. Merge the remaining duplicates into
parameterized tests so each branch keeps its own assertion and failure
localization.
2026-10-17 20:19:44 +08:00
Kaede Akino 9f41e09e12 fix: ui and live activity 2026-10-17 18:39:00 +08:00
Kaede Akino a04db5f867 fix(workspace): close sessions without waiting for remote cleanup
Keep mobile list snapshots and section identity stable during swipe closure.

Move managed-session termination to app-owned background cleanup, transfer existing SSH connections, and allow one silent reconnect when needed. Preserve passive teardown behavior and prevent reopened workspaces from attaching to sessions being terminated.

Cover connection ownership, cleanup cancellation, saved workspace closure, and list updates with regression tests.
2026-10-17 14:34:55 +08:00
Kaede Akino ebeb0027d4 feat(ssh)!: redesign command execution tools
Split command execution into run, output, stdin, cancel and list tools for the assistant and MCP. Preserve bounded output tails and use conversation-scoped handles and secret storage with AgentKit 1.20.0.

Add the built-in ssh-exec skill with timestamped log redirection and text/secret stdin workflows. Expand long tool output without adjacent copy controls, update localized presentation, and refresh regression coverage and the website tool name.

BREAKING CHANGE: Replace ssh_exec and ssh_wait with ssh_exec_run and ssh_exec_output. Move stdin to ssh_exec_stdin and remove execution timeout and cwd arguments. Use run_in_background to control foreground execution.
2026-10-17 12:26:48 +08:00
Kaede Akino d115cc2df4 test: remove over-specified assertions and translation lock-ins
Drop assertions that could not fail in a meaningful way or that only
restated copy already validated by Scripts/check-localization.py.

- Screenshot suites asserted arbitrary PNG byte counts, which AGENTS.md
  forbids; the opt-in Attachment.record exports stay.
- AgentSkillTests compared a snapshot revision with itself.
- MetricsCPUUsageTests asserted point.cpu, an alias of cpuUsage.utilization
  already pinned by the sibling assertion in that test.
- TerminalTransportTests locked enum declaration order and localized
  display names; symbol distinctness now compares against allCases.count
  instead of a magic 4.
- AppLanguageTests transcribed catalogs that check-localization.py already
  enforces for coverage, format arguments, plurals and spacing. Locale
  routing, migration and fallback tests remain, with the Chinese fallback
  checks rewritten as relationships rather than literal copy.
2026-10-17 10:31:50 +08:00
Kaede Akino dca37ca72f fix(icons): use the Simple Icons macOS logo
Replace the Apple silhouette with the unmodified macOS wordmark from
Simple Icons 16.29.0. Update generator and provenance, retain the stable
HostOS-macos asset/detection IDs, and add a real-bundle source regression.
Other 45 assets and all license files remain byte-identical.

Validation: 19 macOS and 20 iOS focused tests passed; icon integrity,
formatting, AppStrings, localization, and diff checks passed.

Full integration before this isolated resource change: all 1206 shared
iOS tests passed. Two inherited hosted-iOS identity/artwork tests remain
failing. Two unchanged macOS Keychain/Secure Enclave tests return -25308
(errSecInteractionNotAllowed), including a narrow retry. Neither default
full scheme is claimed completely green; no security checks were relaxed.
2026-10-17 09:51:04 +08:00
Kaede Akino 9743589f86 refactor(ui): remove unused copy and repair metrics fixtures
Remove six unused title/discovery resource APIs and catalog entries while
retaining legacy preference compatibility and all remaining translations.
Replace stale negative discovery assertions with observable row/actions.

Provide the required AppModel to two direct metrics fixtures, sharing their
hosts/model and cleanup. Keep production ownership and UI opt-ins intact.
Validation: 38 focused layout/localization tests, strict formatting,
AppStrings validation, and localization checks passed.
2026-10-17 09:51:00 +08:00
Kaede Akino c6d9aad810 fix(hosts): validate wake addresses before saving credentials
Validate configured MAC addresses in desktop/mobile editors and ordinary,
managed, and custom-identity save paths before credential writes. Preserve
the Auto Wake preference while editing and add localized invalid-address
feedback with regression coverage for rejected writes.

Keep production artwork observation unchanged. Diagnostics confirmed an
inherited hosted-test static-link identity issue; temporary linker and
trace experiments were removed without weakening behavioral assertions.
Validation: 83 focused macOS tests passed; iOS MAC cases passed while the
two known hosted-test identity/artwork failures remain.
2026-10-17 09:50:56 +08:00
Kaede Akino 9a36fde226 fix(pro): enforce protocol-aware host admission before mutation
Distinguish SSH route admission from Telnet target admission and wire
Telnet access and automatic Wake hooks. Await entitlement resolution for
manual Wake and duplication before host or credential mutation.

Use explicit protocol-extension forwarding overloads so existential
single-argument calls cannot bypass the concrete admission witness.
Remove dead paywall state and update obsolete quota/date test fixtures.
Validation: 81 focused macOS and 58 focused iOS tests passed.
2026-10-17 09:50:55 +08:00
Kaede Akino e457e9af98 fix(multiplexer): preserve session ownership and safe shell startup
Detach managed sessions when native mobile windows are discarded, retain
live reopen references, and fence ordinary startup commands by input and
session generation. Handle noexec helpers, isolate tmux discovery locale,
and count only verified live contexts against the journal limit.

Move actual shell execution coverage into the hostless framework suite.
Validation: 76 focused macOS tests passed; iOS multiplexer regressions
passed with the inherited hosted-test artwork failure still present.
2026-10-17 09:50:37 +08:00
Kaede Akino d2cce7d2ce feat: make core features free and add host-based Pro limits
Make AI, MCP, Metrics, and Wake-on-LAN free while retaining iCloud sync as a Pro feature. Limit free accounts to three saved hosts and preserve excess hosts with remote-operation locks.

Gate host creation, import, and runtime access; preserve stable host admission across persistence and sync. Add upgrade states on macOS and iOS, open the paywall from locked Wake actions, and use wrench icons for MCP.

Include regression coverage, opt-in UI review fixtures, localized copy, and the updated pricing website revision.
2026-10-17 06:13:38 +08:00
Kaede Akino 82daa906a1 fix(terminal): preserve theme fallbacks for preferred fonts 2026-10-17 02:37:08 +08:00
Kaede Akino 632d913bb3 feat(terminal): add device-local experience preferences
Add local Bell and screen-awake controls with per-session bell observation and scene-aware effects. Provide foreground Connection Journey success haptics independent of terminal preferences.

Replace the notification sound with an original bell resource, make AudioToolbox completion queue-safe, and group mobile theme settings.
2026-10-17 02:20:38 +08:00
Kaede Akino 1398ff94e1 fix(terminal): unify resumable recovery in connection journey 2026-10-17 01:34:50 +08:00
Kaede Akino b139fbc841 feat(hosts): expand icons and fix automatic previews 2026-10-17 00:54:34 +08:00
Kaede Akino 21accf8ae5 fix(settings): simplify copy and polish native settings layouts 2026-10-17 00:14:12 +08:00
Kaede Akino b24e303725 refactor(ui): simplify discovery and custom theme cards 2026-10-16 23:45:08 +08:00
Kaede Akino d92318a2bb fix(terminal): restore multiplexer paths and silent session close 2026-10-16 22:32:31 +08:00
Kaede Akino 4492121c6c fix(hosts): group wake with tailscale and hide unconfigured action 2026-10-16 20:34:39 +08:00
Kaede Akino 9da4b350cf refactor: register terminal backends and reuse shared workflows
Extract multiplexer dialect and resumable terminal engine registries while preserving session and checkpoint compatibility.

Share local-network and theme policies, add regression coverage, and update discovery actions to Cancel and Rescan with localized Telnet copy.
2026-10-16 20:02:13 +08:00
Kaede Akino 5a74809da8 feat(sessions): unify multiplexer backends and preserve cwd
Add Zellij, zmx, and Herdr alongside tmux using shared lifecycle, shell startup, journal, and runtime infrastructure. Keep verified shell directories visible during commands without restoring unsafe operation capabilities.

Cover backend ownership, startup replay, runtime context, and desktop/mobile cwd regressions. Preserve conservative degradation where client focus cannot be verified.
2026-10-16 18:50:55 +08:00
Kaede Akino 7d77acd3ed feat(themes): add synced custom themes and native editors 2026-10-16 17:03:57 +08:00
Kaede Akino 7f66b3a444 fix(terminal): use default transport for SFTP companion sessions 2026-10-16 15:21:10 +08:00
Kaede Akino 3c06c23435 feat: add local discovery and Pro Wake-on-LAN 2026-10-16 14:56:39 +08:00
Kaede Akino e2a4ae9505 fix(terminal): synchronize tmux size on workspace activation 2026-10-16 13:42:39 +08:00
Kaede Akino 7e82343da4 fix(terminal): restore and cache context-aware shell history 2026-10-16 12:37:20 +08:00
Kaede Akino 7725e7c1ae fix(terminal): handle resumable transport session endings 2026-10-16 12:27:44 +08:00
Kaede Akino f6b2c4f444 feat(hosts): add BSD detection and expand system icons 2026-10-16 11:47:22 +08:00
Kaede Akino 428181b611 fix(ui): refine color picker selection indicators 2026-10-16 08:50:03 +08:00
Kaede Akino 9738605dd3 feat(terminal): add Mosh and Eternal Terminal transports
Add SSH-authenticated transports with independent settings, protocol-aware menus and snippets, and tmux session persistence.

Restore eligible iOS workspaces from encrypted transport checkpoints without adding a macOS recovery entry. Include schema migrations and regression coverage.
2026-10-16 08:36:56 +08:00