Commit Graph
254 Commits
Author SHA1 Message Date
Kaede AkinoandClaude Opus 5 68dee1137d Stop disabled drop targets from claiming file drags
On the Assistant page, dragging a file onto the sidebar attached it to
`window.sidebar.assistantDraft` — the Workspace sidebar's new-chat draft,
which is not on screen there, so the file appeared to vanish.

`AssistantPanelView` already declared the intent with `isEnabled:
isFocusedOnWorkspace`, but the flag never reached AppKit.
`FileURLDropNSView` registered its dragged types unconditionally in `init`
and never unregistered, and only `hitTest` consulted `isEnabled` — the
three dragging callbacks did not. A view that refuses the hit test but
stays in the window's registered destination list still wins the drop.

This is the asymmetry `AssistantConversationListContainer.isInteractive`
records for conversation drags; the shared file receiver had only the
hit-test half. Give it both: follow `isEnabled` when registering and
unregistering, and gate `supportedPayload(from:)`, the one chokepoint
`hitTest` and all three callbacks pass through. The callbacks already
treat a nil payload as "not mine", so their bodies are unchanged. The
second half is what holds when `isEnabled` flips during a drag already in
flight, after AppKit has resolved its destinations.

Fixing the shared view also covers two sites with the same flaw: hidden
Workspaces, which all stay mounted at `opacity(0)` over the same frame
carrying a pane drop target, and Keychain accepting drops mid-load.

`FileURLDropTargetTests` becomes `.serialized` — every test there stages
its case on the one drag pasteboard the system shares, and the suite was
already racing with itself before these two tests made it fail.

Verification: macOS build, full test suite (remaining failures match the
clean-tree baseline and are unrelated), swift-format lint adds nothing
new, and Scripts/check-zh-localization.sh passes. The end-to-end Finder
drag is still to be confirmed by hand.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 15:44:52 +08:00
Kaede Akino 1c429a301b Adopt AgentKit 0.3.0 scratch_replace, scratch_copy and scratch_move
scratch_edit is now scratch_replace, and takes a regex mode and a per-entry
count — omit it to require exactly one match as before, 0 for every occurrence,
n for the first n. scratch_copy and scratch_move move a staged file or subtree
without its bytes passing through the transcript, which is what duplicating a
file before a risky change used to cost.

The app-side changes are the ones the rename and the two new tools reach:
ActionKind.copy in both the English and Chinese verb tables, the pull → copy →
replace → push recipe in the built-in config-edit skill, and the same wording in
the system prompt and the plan contract. The legacy tables are deliberately
untouched: legacyToolNames and legacyMetadata describe cards written before
presenter IDs were persisted, and scratch_edit belongs in both. AgentKit keeps
builtin.scratch_edit registered as an alias, so a transcript from before the
rename still draws its diff rather than falling back to generic fields — which
aCardWrittenAsScratchEditStillFindsItsProjection now pins.

AppLanguageTests no longer requires %lld results. That plural moved to AgentKit
with web_search's card, which is what db8796c removed from this catalog; the
test's list had been left behind and was failing.

AGENTS.md said AgentKit was referenced as a local SPM package. It is a versioned
remote dependency, so an uncommitted change in ../AgentKit is invisible to the
app and a change spanning both sides needs a tagged release in between. Said so,
because working the other way wastes a build cycle before the mistake shows.

Verified: AgentKit 0.3.0 builds and passes its 112 tests, and the six suites
this touches pass here. The five failures in the full run — ColorSystemTests,
two ChatComposerStateTests, FileURLDropTargetTests and WindowStateTests — all
reproduce on a clean worktree at HEAD and are unrelated.
2026-09-02 15:44:52 +08:00
Kaede Akino 9711a35841 remove stale localizable 2026-09-02 15:44:52 +08:00
Kaede Akino 6d17fef156 update libghostty-spm to 1.5.1 2026-09-02 15:44:51 +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 4c05250cad Rename in SSH/SFTP to with SSH/SFTP 2026-09-02 11:08:38 +08:00
Kaede Akino f159082299 Add Agent Skill 2026-09-02 11:08:38 +08:00
Kaede Akino 9e1264455e refactor 2026-09-02 09:57:52 +08:00
Kaede Akino 9309a425d3 Reduce redundant production and copy test logic 2026-09-02 09:34:35 +08:00
Kaede Akino 54ea515750 unified ProAccessControllerError 2026-09-02 07:34:14 +08:00
Kaede Akino dc4bd34414 Add review mode and remove developer pro 2026-09-01 23:27:58 +08:00
Kaede Akino 7128b64681 Bump to 1.2.2 2026-09-01 10:48:59 +08:00
Kaede Akino 2f96b5a75a Fix Shell Integration 2026-09-01 10:47:13 +08:00
Kaede Akino 1449bd62ac Bump to 1.2.1 2026-08-31 22:03:31 +08:00
Kaede Akino 9f3f1e40d9 Refine drag UI 2026-08-31 22:03:05 +08:00
Kaede Akino f125f72070 Refine Shell Integration 2026-08-31 21:57:54 +08:00
Kaede Akino 18c6f08947 Add AGENTS.md and CLAUDE.md 2026-08-31 12:29:38 +08:00
Kaede Akino 8e55b12e4a Bump to 1.2.0 2026-08-30 17:27:00 +08:00
Kaede Akino cc04892238 Bump to 1.2.0 2026-08-30 17:06:38 +08:00
Kaede Akino 56073444b9 compaction 2026-08-30 16:14:30 +08:00
Kaede Akino 0dc80b76e0 refactor settings 2026-08-30 15:46:42 +08:00
Kaede Akino a7145adf6d Bump to 1.1.0 2026-08-30 13:49:31 +08:00
Kaede Akino cac60df1a8 Fix Assistant sidebar navigation round-trip 2026-08-30 13:34:04 +08:00
Kaede Akino aceab8260f Add drop to import key 2026-08-30 13:27:09 +08:00
Kaede Akino c3e73e263c Simplify command generator feedback 2026-08-30 13:17:52 +08:00
Kaede Akino 191bb95417 Fix Transfers list height 2026-08-30 13:03:52 +08:00
Kaede Akino 8d29bd7f4e Unified Drop 2026-08-30 12:59:16 +08:00
Kaede Akino 12afb7295a Fix Assistant transcript scroll restoration 2026-08-30 12:43:54 +08:00
Kaede Akino d8d20a3548 refactor: reduce duplicated Swift code 2026-08-30 11:54:48 +08:00
Kaede Akino 098c5b01a9 Bump to 1.0.0 (2) 2026-08-30 11:31:37 +08:00
Kaede Akino 7aacc310d3 Allow Pro purchase during active trial 2026-08-30 11:18:18 +08:00
Kaede Akino c11c5bb6d7 Bump to 1.0.0 2026-08-30 10:53:02 +08:00
Kaede Akino 0b67497eca Add bilingual Vault website showcase 2026-08-30 09:14:05 +08:00
Kaede Akino fd9e7585a5 Return to new chat after archiving 2026-08-30 08:58:14 +08:00
Kaede Akino 04091cacaf Fix Termind Pro feature icon alignment 2026-08-30 08:58:03 +08:00
Kaede Akino acb68e86ba fix: left-align model provider names 2026-08-30 08:57:55 +08:00
Kaede Akino 2ab1fdd5fb Fix explicit Chinese localization in window chrome 2026-08-30 08:45:22 +08:00
Kaede Akino 8086a9142f Demo 2026-08-30 03:45:20 +08:00
Kaede Akino 3f0dd9a7f2 Bump to 0.4.0 2026-08-30 03:19:33 +08:00
Kaede Akino e385fdca84 Set default serial baud rate to 9600 2026-08-30 03:01:02 +08:00
Kaede Akino aff71e4585 refactor 2026-08-30 02:55:48 +08:00
Kaede Akino 4c3896c5af Add automatic Linux host icons 2026-08-30 02:32:08 +08:00
Kaede Akino c164a48234 Add contextual onboarding 2026-08-30 02:30:03 +08:00
Kaede Akino 3fbc20d4dc Fix MCP history clear refresh 2026-08-30 01:55:44 +08:00
Kaede Akino 9aca87c3f8 Show referenced key colors on identities 2026-08-30 01:47:13 +08:00
Kaede Akino 58c5b9615f Add debug Pro entitlement controls 2026-08-30 01:44:38 +08:00
Kaede Akino e5ce06c456 Add colors to keys and identities 2026-08-30 01:43:54 +08:00
Kaede Akino f5edd63a9a Add conversations to Quick Open 2026-08-30 01:30:36 +08:00
Kaede Akino 306462d36f Remove Pro launch blocking overlay 2026-08-30 01:27:18 +08:00
Kaede Akino 7ad5b3202d Unify host card selection focus 2026-08-30 01:25:44 +08:00