You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
LineCode Pro v2.1.0
版本信息
版本名称: v2.1.0
版本号: 49
v2.1.0
English
Shell and background tasks
Native tool passing - tool schemas are delivered through the native tools field for OpenAI, Claude and Codex protocols instead of a name list in the system prompt; models without native tool support keep the prompt-name fallback. Minimal mode renders the bare template with no tool names at all.
Unified shell family - shell_execute is renamed to shell, joined by shell_output (blocking reads with a timeout) and shell_kill; one tool name serves the local, SSH and terminal-provider targets and the execution mode routes them.
Background execution - shell accepts background=true and returns a bg-N task id. A new BackgroundShellRegistry drives three backends: local processes with concurrent output draining, SSH via setsid plus a polled temp log, and terminal-provider AIDL v2 handles. The loop is notified about finished-but-unobserved tasks through a hidden user message, and shell_output reports a single completion exactly once.
Stability fixes
Archives keep tool calls - the export/import archive now carries message_tool_calls plus the memories, projects, extension, IPC-provider and file-diff tables. Restoring an archive no longer leaves tool-using conversations with orphaned tool results that strict providers reject with 400; imports accept version-1 archives and strip API keys from model rows as before.
Restore is validated before anything is deleted - file entries are path-checked and staged first, so a malformed archive can no longer restore the database while wiping workspace/, skills/ or attachments/.
Provider binding lifecycle - unbinding during CONNECTING no longer leaks the ServiceConnection (a phantom reconnect could revive a deliberately removed provider), and a dead provider process now triggers an automatic rebind instead of idling in DISCONNECTED.
Delete and import while streaming - deleting the active conversation or importing an archive mid-turn can no longer crash the process through the write queue; writes are guarded, drafts are discarded before the tables are removed and the chat is halted before an import wipes the data.
Compaction boundary - the summarization tail is snapped past raw TOOL rows, so the request can no longer open with an orphan tool result after context compaction.
Background output race - the consumed offset of provider and SSH background tasks is reconciled against streamed delivery, which removes duplicated lines and permanently lost output.
Gateway thread safety - the terminal-provider binding table is now concurrent; a provider disconnecting while the settings page refreshes no longer risks a ConcurrentModificationException on a binder thread.
Architecture
platform-shell module - the shell subsystem (background-shell registry and backends, terminal-provider gateway, SSH service/workspace, Termux client) moved out of runtime into its own platform module, the only rewritten module allowed to depend on the frozen :ipc. The legacy :feature-terminal module is gone.
runtime is a composition root again - chat sheets, attachment picker, chat export, tool preview page, learning-context provider and local tool policy moved to their owning features behind a new ChatHost interface; the SAF dispatcher delegates chat attachments to feature-chat; the agent-draft use case and the SSH/Termux diagnostics moved into named classes instead of page-factory branches.
One seq authority - ToolLoopEngine keeps its wire history in list order and never assigns persisted sequence numbers; ChatTurnPipeline stamps every delivered row exactly once, removing the double-bookkeeping that a defensive sort previously papered over. Approval decisions live in a dedicated ApprovalPolicy.
core-service is real - SettingsAction and LinkPolicy moved into the cross-feature module, engine-prompt reads assets through an injected PromptAssetSource instead of an Android import, and ui-kit no longer depends on the platform layer.
Guards tightened - arch-test now scans :app, :ipc and :terminal-provider (CJK check covers comments too), adds a lock check with an explicit sanctioned list, enforces the 1,500-line :app budget, and pins the migration settings keys against feature-chat. platform-android adopts linecode.verify. The prompt-catalog guard failures left behind by the previous commit are fixed.
Comment policy - every comment is formal English Javadoc; CJK in comments is now a guard failure, and the legacy :ipc/terminal-provider sources are fully translated.
Tests
New regression tests for the archive round-trip (tool calls, unsafe paths, v1 archives), the write-queue resilience, the compaction tail boundary and the background-output reconciliation; SerialWritesTest, SshShellBackend/LocalShellBackend coverage via the existing registry tests.
Release
Version 2.1.0 (versionCode 49); the release workflow builds and publishes both the slim and local variants.