Commit Graph
16 Commits
Author SHA1 Message Date
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 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 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 9bd2401a5c Add Open at Login
Settings › App › Startup gains an Open at Login switch backed by
SMAppService.mainApp, and an Open Hidden at Login switch that keeps the
login launch from taking the screen. Both are off by default.

The registration is not mirrored into preferences. SMAppService is the
store for whether Termind opens at login: the user can revoke it in
System Settings without telling the app, so the switch re-reads the
system status on appear and on every window activation. requiresApproval
counts as on, with a row saying what is outstanding and a button into
Login Items, rather than a switch that quietly refuses to hold.

Hidden means NSApp.hide(nil) rather than a suppressed window, because
Termind terminates with its last window. LoginLaunch latches the launch
Apple Event during applicationWillFinishLaunching, the only moment
currentAppleEvent can still be read; the hide is armed a second time for
the window SwiftUI orders front just afterwards.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 19:07:54 +08:00
Kaede Akino cdd8fe0668 Extract the agent runtime as AgentKit
The loop, the approval gate, the provider adapters, the MCP client, and the
tools with no opinion about transports now live in a package and are consumed
from it. Termind keeps everything that reaches a machine or a person: the SSH
and SFTP tools, the connection pool, the Vault resolver, scratch_pull and
scratch_push, the SwiftData store, and every view.

They meet at four seams. TermindAgentTools registers our tools alongside the
built-in groups; AgentToolServices carries the SSH credential prompt to them
without that prompt appearing in a runtime protocol; TermindAgentPolicy owns the
system prompt, the plan contract, and the ssh_exec plan-mode rule the runtime
cannot write for us; TermindAgentPresentation extends the card vocabulary with
our own semantics.

ChatPermissionMode becomes AgentPermissionMode and moves out of the conversation
model — who authorizes an action is a property of the run, not of a view.
AgentRunRequest takes the session context as rendered text rather than our
SessionContext, because the runtime does nothing with it but insert it in front
of the turn it describes.

Termind's system prompt and plan contract are byte-identical to what shipped.
Every provider cache is a prefix cache, so editing a word there would miss the
cache on every replayed conversation at once.
2026-09-02 13:58:35 +08:00
Kaede Akino f159082299 Add Agent Skill 2026-09-02 11:08:38 +08:00
Kaede Akino 2f96b5a75a Fix Shell Integration 2026-09-01 10:47:13 +08:00
Kaede Akino f125f72070 Refine Shell Integration 2026-08-31 21:57:54 +08:00
Kaede Akino 0dc80b76e0 refactor settings 2026-08-30 15:46:42 +08:00
Kaede Akino aff71e4585 refactor 2026-08-30 02:55:48 +08:00