Skip to content

Releases

LineCode Pro v2.1.1

Choose a tag to compare

@github-actions github-actions released this 14 Nov 13:13
033f5f3

LineCode Pro v2.1.1

版本信息

  • 版本名称: v2.1.1
  • 版本号: 50

v2.1.1

English

Sub agents

  • Parallel asynchronous sub-agent runtime - SubAgentRegistry replaces the synchronous NestedAgentRunner bridge: every dispatch owns a real conversation row and a full ChatController, so transcripts persist, compaction works and sessions run concurrently (one single-threaded loop per agent, no shared locks); the agent tool returns a handle immediately and delivers the final output through the runtime event inbox.
  • Persistent, messageable sessions - persistent=true creates a revivable session that accepts follow-up messages and whose mutating tools route their approvals to the root approval panel; the default one-shot run stays read-only, auto-confirmed and greyed out in the UI.
  • Session management tools - new agent_list, agent_send and agent_wait tools track and drive sessions: agent_send revives a finished agent in its existing conversation or queues the message in a running agent's inbox (never silently dropped), agent_wait blocks until any session changes status (default 30 s, max 300 s), and completion notices are announced exactly once.
  • Required workspace binding - the spawn tool now requires workspace, resolved relative to the caller's root through the same containment as the file tools; empty, absolute, escaping and non-directory paths are rejected before a session is created, . and relative paths inside the sub agent resolve to the bound directory, the binding is persisted and reused on revive, and remote (SSH / terminal-provider) workspaces accept only . and keep inheriting the parent root.
  • Conversation-scoped sessions - every session records its spawning conversation; the header chip, drawer list, session picker and the agent tools only show the current chat's sessions, a brand-new chat shows none, and agent_send / restore refuse sessions that belong to another conversation.
  • Restart-safe session identity - restore() reattaches to the session's original conversation and restores the seq counter instead of opening a fresh one; records still marked RUNNING/WAITING_INPUT when the process died become INTERRUPTED and revive on the next message, and pre-v15 agent conversations are migrated into records on first load.
  • Root message channel - agent_message_root lets a sub agent post a progress note or question to the parent inbox without ending its turn; the parent reads it as a hidden user message at its next input point.
  • Real tools inside sub agents - transient sessions may mutate when the permission mode is auto (they cannot ask for approval otherwise), so shell and file tools are present in the default mode; persistent sessions keep approval-routed writes, and file tools stay local-only by workspace policy, so remote sessions use shell for file work.

Conversations and interface

  • Agent session switcher - the chat header and the workspace drawer header gain a bot chip with the live sub-agent count, hidden when the viewed conversation has no sessions; it opens a picker with the root conversation plus one row per sub agent and its status, and the drawer keeps its own agent list.
  • Non-interrupting conversation switching - switching chats while a turn runs renders the target conversation immediately (the view snapshot is published before the controller goes detached), the running turn keeps writing to its own conversation, the composer shows a busy-elsewhere hint while sending is blocked, the write target is handed back when the background turn ends, and the drawer shows a progress spinner instead of the delete action for the running conversation.
  • Compact agent cards - agent tool cards follow the file/shell pattern: one status row with the bot glyph and a human summary, no ring and no id pills; four semantic icons (spawn / send / wait / list) plus the notify icon select the renderer, expanded bodies show the task, message, wait window or a readable "name · status" list, while the model still receives the raw id/status lines.
  • Composer constraints - transient agents lock the composer with a one-shot hint, the model pill is disabled in every agent view because model switching stays root-only, and the interrupted session state has its own label.

Fixes

  • Agent tools in remote workspaces - enabling Agents in SSH or terminal-provider mode used to filter agent_<slug> / agent_list / agent_send / agent_wait out of the tool list because the family still declared needsLocalWorkspace() == true from the retired synchronous bridge; the family is workspace-agnostic now and AgentToolsRemoteTest pins the contract.
  • Tool copy corrections - the remote shell group is labelled "Shell" instead of "SSH Shell" (it serves both SSH and the terminal provider), local and remote shell descriptions share the same concise wording in en/zh/ru, and the terminal-provider card now points at associated launch (autostart) as the usual cause of a failed connection test.

Architecture

  • Timeline events - ToolLoopEngine.Listener's eleven callbacks collapse into one Consumer<TimelineEvent> over an immutable hierarchy (TurnStarted, TextDelta, ReasoningDelta, AssistantCompleted, ToolCompleted, NoticeInjected, ConfirmationRequired, TurnFinished, TurnFailed, BudgetExceeded, Retry); ChatLoopBridge posts every event onto SerialEvents, so the feature layer still mutates state only inside the drain.
  • Unified runtime inbox - every asynchronous input now arrives as a RuntimeEvent (ShellNotice, AgentTurnCompleted, AgentMessage, AgentNeedsInput, AgentFailed, WorkspaceChanged, UserMessage) through the owner-scoped RuntimeInbox; AgentEventBus owns root and per-agent queues, the engine drains at the same three injection points (turn start, after a tool batch, after a final answer), background-shell notices join the same stream, only the final agent output is announced (truncated at 32 K), and an idle root is woken by a non-empty inbox after each finished turn.

Data and persistence

  • Conversation kinds and session storage - schema v14 adds conversations.kind (user / agent / agent_transient) and parent_id, schema v15 adds the agent_sessions table, and both migrate through the idempotent DDL replay; ConversationStore.list() returns user conversations only, and archive format v3 carries agent_sessions while v1/v2 archives still import.

Documentation and engineering

  • Formal English Javadoc - every type, constructor, method and non-obvious constant across all modules, :app and the legacy :ipc/:terminal-provider sources carries a formal English Javadoc comment; the change is comment-only (stripped-token comparison against the previous tree shows no code edits), and the documented :app shell budget moves from 1,500 to 1,800 lines to pay for the mandatory per-method Javadoc.
  • Dead pipeline remnants retired - the unused PIPELINE icon, glyph mapping, renderer, approval icon, preview sample and test assertion plus the seven message_agent_pipeline_* strings are gone.
  • Gradle wrapper - the distribution URL moves from the Tencent mirror to services.gradle.org; the pinned SHA-256 checksum is unchanged.
  • AGENT.md and thread guard - AGENT.md documents the timeline event stream, the runtime event inbox, the lock-free parallel sub-agent runtime, approval routing and the schema/archive versions; the retired NestedAgentRunner exemption is removed from the sanctioned blocking-thread list.

Tests

  • New coverage: AgentToolsTest (required workspace, subdirectory binding, absolute/escaping/missing-path rejection, persistent sessions, remote parity), AgentToolsRemoteTest, RuntimeEventTest (hidden-notice rendering with the 32 K truncation), SqliteAgentSessionStoreTest, SqliteConversationStoreTest (kind separation and a v13-shaped database reopening as user conversations), SubAgentRecoveryTest (stale RUNNING/WAITING_INPUT becomes INTERRUPTED); ToolLoopEngineTest gains inbox aggregation and keep-alive coverage, and ToolRenderersTest, LearningContextProviderTest and SourceHygieneTest are updated.

Release

  • Version 2.1.1 (versionCode 50); the release workflow builds and publishes both the slim and local variants.

中文

子代理

  • 并行异步子代理运行时 - SubAgentRegistry 取代同步的 NestedAgentRunner 桥:每次派发都拥有真实的会话行与完整的 ChatController,因此 transcript 持久化、上下文压缩可用、多个会话并行(每个 agent 一个单线程循环,无共享锁);agent 工具立即返回句柄,最终输出经运行时事件收件箱回传父循环。
  • 可交流的持久会话 - persistent=true 创建可恢复的会话,支持后续消息,其写操作审批汇总到根会话的审批面板;默认的一次性运行保持只读、自动确认,并在界面上以灰态呈现。
  • 会话管理工具 - 新增 agent_list、agent_send、agent_wait:agent_send 在已有会话中恢复已结束的 agent,或把消息排入运行中 agent 的收件箱(绝不静默丢弃);agent_wait 阻塞到任一会话状态变化(默认 30 秒,最长 300 秒);完成通知只通告一次。
  • 工作区绑定必填 - 派发工具强制要求 workspace,按文件工具同样的包含规则相对调用方根目录解析;空值、绝对路径、越界路径与非目录路径在创建会话前即被拒绝;子代理内的 . 与相对路径解析到绑定目录,绑定随会话持久化并在恢复时复用;SSH 与终端提供者工作区只接受 . 并继续继承父根目录。
  • 按会话隔离 - 每个会话记录其创建它的对话;头部胶囊、抽屉列表、会话选择器与 agent 工具只展示当前对话的会话,新建对话不再列出历史子代理;agent_send / restore 拒绝属于其他对话的会话。
  • 可跨重启的会话身份 - restore() 重新挂接会话的原对话并恢复 seq 计数,而不是新建对话;进程崩溃时仍标记 RUNNING/WAITING_INPUT 的记录转为 INTERRUPTED,在下一条消息时复活;v15 之前的 agent 对话在首次加载时迁移为会话记录。
  • 父级消息通道 - agent_message_root 让子代理在不结束当前轮次的情况下向父收件箱投递进度或提问,父循环在下一个注入点以隐藏用户消息读取。
  • 子代理拿到真实工具 - 权限模式为 auto 时一次性会话允许写操作(否则无法申请审批),因此默认模式下 shell 与文件工具可用;持久会话保留审批路由的写操作,文件工具按工作区策略仅限本地,远程会话通过 shell 完成文件操作。

对话与界面

  • 代理会话切换器 - 聊天头部与工作区抽屉头部新增 bot 胶囊,显示实时子代理数量(当前对话没有会话时隐藏);点开列出根会话与每个子代理及其状态,抽屉同时保留自己的 agent 列表。
  • 切换对话不再中断生成 - 生成中切换对话会立即渲染目标会话(视图快照在控制器进入 detached 前发布),运行中的轮次继续写入自己的对话;发送被阻止时输入框显示「另一个对话仍在生成」的提示;后台轮次结束后写目标交还当前查看的对话;抽屉对运行中的对话显示进度圈而不是删除按钮。
  • 紧凑的 agent 卡片 - agent 工具卡片沿用文件/Shell 卡片范式:单行状态 + bot 图标 + 人类可读摘要,无描边环、无 id 胶囊;四个语义图标(spawn / send / wait / list)加通知图标选择渲染器;展开后展示任务、消息、等待窗口或可读的「名称 · 状态」列表,模型仍收到原始 id/status 行。
  • 输入框约束 - 一次性 agent 锁定输入框并显示一次性提示;所有 agent 视图禁用模型胶囊(切换模型仅限根会话);中断的会话状态拥有独立文案。

修复

  • *...
Read more

LineCode Pro v2.1.0

Choose a tag to compare

@github-actions github-actions released this 13 Nov 20:57
e23a5c1

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.

中文

Shell 与后台任务

  • 原生工具传递 - 工具 schema 改为经 OpenAI/Claude/Codex 的原生 tools 字段下发,不再在系统提示词里拼接工具名列表;不支持原生工具的模型保留提示词名称回退,极简模式渲染不含任何工具名的裸模板。
  • 统一 shell 家族 - shell_execute 更名为 shell,新增 shell_output(带超时的阻塞读取)与 shell_kill;同一个工具名覆盖本地、SSH 与终端提供者三种目标,由执行模式路由。
  • 后台执行 - shell 支持 background=true 并返回 bg-N 任务 id。新的 BackgroundShellRegistry 驱动三个后端:本地进程(并发排空输出)、SSH(setsid + 轮询临时日志)与终端提供者 AIDL v2 句柄。未被读取就结束的任务通过隐藏用户消息通知循环,shell_output 保证完成只上报一次。

稳定性修复

  • 归档保留工具调用 - 导出/导入归档现在包含 message_tool_calls 以及 memories、projects、扩展、IPC 提供者与 file_diffs 表。恢复归档后,用过工具的会话不再因孤儿 tool result 被严格 provider 以 400 拒绝;导入兼容 v1 归档,且照旧剥离模型行中的 API key。
  • 恢复先校验后删除 - 文件条目先做路径校验并写入暂存目录,损坏的归档不再出现「数据库已恢复而 workspace/skills/attachments 被清空」的中间状态。
  • 提供者绑定生命周期 - CONNECTING 阶段解绑不再泄漏 ServiceConnection(幽灵重连可能复活已被移除的 provider);provider 进程死亡后自动重bind,不再停留在 DISCONNECTED 无人恢复。
  • 流式中删会话与导入 - 生成中途删除当前会话或导入归档不再让写入队列的异常穿透线程池导致崩溃:写操作有兜底、草稿在删表前丢弃、导入前先停聊天。
  • 压缩边界 - 摘要尾部边界吸附越过裸 TOOL 行,上下文压缩后请求不再以孤儿 tool result 开头。
  • 后台输出竞态 - provider 与 SSH 后台任务的消费 offset 与流式回调对账,消除输出重复行与永久丢失。
  • 网关线程安全 - 终端提供者绑定表改为并发结构,设置页刷新时 provider 掉线不再有 binder 线程 ConcurrentModificationException 风险。

架构

  • platform-shell 模块 - shell 子系统(后台 shell 注册表与后端、终端提供者网关、SSH 服务/工作区、Termux 客户端)从 runtime 迁入独立平台模块,这是唯一允许依赖冻结 :ipc 的重构模块;遗留 :feature-terminal 模块删除。
  • runtime 回归组合根 - 聊天底部面板、附件选择、对话导出、工具预览页、学习上下文提供者与本地工具策略迁回各自 feature,经由新的 ChatHost 接口与宿主解耦;SAF 分发中的聊天附件委托给 feature-chat;agent 草稿用例与 SSH/Termux 诊断提取为命名类,页面工厂回归纯路由。
  • 唯一 seq 权威 - ToolLoopEngine 的内存历史按列表顺序维护,不再写持久化序号;ChatTurnPipeline 在事件队列上对每行只打一次 seq,原先靠防御性排序兜底的双账本问题根除。审批决策独立为 ApprovalPolicy。
  • core-service 填实 - SettingsAction 与 LinkPolicy 移入跨 feature 模块;engine-prompt 经注入的 PromptAssetSource 读取资源、去掉 Android import;ui-kit 不再依赖 platform 层。
  • 守卫收紧 - arch-test 扫描范围扩至 :app、:ipc 与 :terminal-provider(CJK 检查连注释一并覆盖),新增锁检查与显式豁免清单、:app 1500 行总预算、迁移设置键与 feature-chat 常量的防漂移测试;platform-android 接入 linecode.verify。上一提交遗留的 prompt-catalog 守卫失败已修复。
  • 注释规范 - 全部注释为正式英文 Javadoc;注释中的 CJK 同样被守卫拦截,遗留 :ipc/terminal-provider 源码注释已全部翻译。

测试

  • 新增回归测试:归档往返(工具调用、恶意路径、v1 归档)、写队列韧性、压缩尾部边界、后台输出对账;SerialWritesTest,以及经由既有注册表测试覆盖的 SshShellBackend/LocalShellBackend。

版本

  • 版本号 2.1.0(versionCode 49);Release 工作流继续同时构建并发布 slim 与本地版。

下载说明

  • LineCode Pro 2.1.0-slim.APK - 默认精简版 Release APK
  • LineCode Pro 2.1.0-slim.APK.idsig - APK 签名文件

LineCode Pro v2.0.1

Choose a tag to compare

@github-actions github-actions released this 30 Oct 08:35
29a2d78

LineCode Pro v2.0.1

版本信息

  • 版本名称: v2.0.1
  • 版本号: 47

v2.0.1

English

Chat streaming and ordering

  • One queue per turn - every stream delta, tool result and turn boundary now goes through SerialEvents, which drains in submission order on the main thread; sequence numbers are assigned during the drain and ChatState keeps a stable order, so a finished message can no longer overtake its last delta and flash prose into the answer area.
  • Turn pipeline - the streaming draft moved into ChatTurnPipeline, which owns the buffers, the assistant message and every seq advance, and drops events from a generation that has already lost the conversation; opening, creating or deleting a conversation also stops the running loop first, so late events cannot leak into the new list.
  • Answer versus process - live prose stays inside the process panel until the model message completes; only a completed message without tool calls becomes the answer, which removes the flash-then-fold of the review block.
  • Failure surface - a failed turn persists an ERROR content block instead of plain prose, keeps partial output as the completed body and renders the reason as normal text (16sp, body color, no Markdown).
  • Verbatim provider errors - HttpModelClient reads the error stream and reports HTTP <code> followed by the response body; the failure formatter no longer rephrases it, so the actual 401/404/429/500 payload reaches the chat.
  • Stream retry - a transient model failure retries up to three times with an 800 ms delay, the turn pipeline is told which attempt is running, and a retry clears the half-written draft instead of appending to it.

Process and status indicators

  • Shared dot matrix - DotMatrix and DotMatrixSpinner in ui-kit replace every ProgressBar: the working row, the process panel and the tool cards now share one 3x3 walk and one 1.5 s cycle, and all of them honour the system animation scale.
  • Process panel - opens itself while a turn streams and folds when it ends; a manual toggle is stored as an absolute choice, so a default that flips later never reverses it, and pending approvals count as active too.
  • Tool card spacing - consecutive calls in a group and nested agent cards use a 2dp gap, so a run of calls reads as one list instead of separate cards.

Tools

  • web_fetch - new built-in tool that fetches one page and returns readable text: HTTPS only plus HTTP for loopback/emulator hosts, 2 MB response cap, HTML reduced to text with scripts and styles stripped, 12k characters by default and 30k maximum; the tool list uses the new FETCH/GLOBE glyph.
  • Lenient tool arguments - ToolJsonRepair repairs what models actually emit: fences, prose before the object, smart or single quotes, unquoted keys, comments, Python literals, raw newlines, trailing commas, truncation at the token limit, a double-encoded arguments string and a single-object array wrapper. Mutating tools still reject truncated payloads instead of writing half a file.
  • Structured schemas - tool schemas and MCP input schemas are built through ToolSchemaBuilder/org.json; a source guard now rejects hand-written JSON object literals in main sources.
  • Mode filtering - agent mode keeps every tool family except phone control, which stays exclusive to control mode.

Context

  • Manual compaction - "Compact context" in the chat menu now performs a real compaction: it summarizes everything except the recent tail and reports done, insufficient, no model, busy or failed.
  • Compaction marker - a successful compaction appends a compact row, rendered by the previously unused CompactBlockView.
  • Prompt asset - the compaction instruction comes from the prompt catalog (CONTEXT_COMPACTION) instead of an English string compiled into the compactor.

Workspace and attachments

  • Workspace provider - WorkspaceDocumentsProvider exposes files/workspace through SAF (.workspace.documents), and the workspace card gains "Share with other apps", handing the root to another app with read/write grants.
  • CJK folder names - WorkspaceNames.folder only replaces characters that are illegal in a path segment, so Chinese, Japanese and Korean names stay readable instead of collapsing to -.
  • Drawer refresh - the project header and the file tree reload when the workspace changes, and opening the drawer always rebinds them.
  • Photo Picker - image and video attachments use the system Photo Picker on API 33+ with the SAF picker as fallback; attachment names prefer DISPLAY_NAME before the MIME suffix because Photo Picker URIs carry no extension.

SkillHub

  • Both payload shapes - the store parses the flat list payload (description, downloads, ownerName, iconUrl, stars, verified, category, labels.requires_api_key) and the nested detail payload (stats, owner); sorting uses sortBy with order=desc.
  • Real icons - SkillIconLoader downloads artwork off the UI thread, caches 24 bitmaps, downsamples to 96 px, validates the URL against an HTTPS allow-list with a 4 MB cap, and tags the view so a late bitmap cannot land on a rebound row.
  • Legacy card - artwork, title with a verified tag, author, category tags, a two-line description, downloads/stars/version and a chevron.

Extensions and multi-select

  • AI agent writer - "Let AI write" now works: a bottom sheet takes a natural-language request, generation runs on the IO scheduler through AgentDraftGenerator and the new AGENT_DRAFT prompt, unknown tool names are dropped against the catalog the page passes in, and incomplete drafts are rejected instead of filling the form with empty fields.
  • Selection bar - SelectionBar replaces the inline bar with count, copy, share and close; copy and share build a plain-text transcript in timeline order, tapping a message toggles its selection, and the placeholder "select and export" row is gone from the more menu.

Interface polish

  • Drawer tabs - tab glyphs grow from 16dp to 24dp with an 8dp gap, and the inline icon button no longer reserves a minimum size.

  • Switches - Material switch tinting (white thumb on the accent track when on, gray on a light track when off), so an enabled switch no longer reads as disabled.

  • Long-press bar - action buttons lose their 4dp right margin.

Engineering

  • Schema builders - database statements are grouped into conversation, settings/model, extension and project builders instead of one long method.
  • Composition root - AppGraph construction is decomposed into focused steps without introducing new dependency bags.
  • Build - Gradle configuration cache is enabled.

Tests

  • New SerialEventsTest, ChatStateTest, ToolJsonTest, WebFetchToolTest, AgentDraftGeneratorTest, SkillHubApiTest and WorkspaceNamesTest; extended TurnAssemblerTest, ContextCompactorTest, ToolModesTest, HttpModelClientProtocolTest, BuiltinToolsTest and SourceHygieneTest.

Release

  • Version 2.0.1 (versionCode 47); the release workflow still builds and publishes both the slim and local variants.

中文

聊天流式与顺序

  • 单队列事件 - 流式增量、工具结果与回合边界统一进入 SerialEvents,在主线程按提交顺序排空;seq 只在排空过程中分配,ChatState 保持稳定排序,完成的消息不会再越过最后一段增量,正文也不会先闪进答案区再折叠。
  • 回合管线 - 流式草稿移入 ChatTurnPipeline,由它独占缓冲、助手消息与每一次 seq 推进,并丢弃已经失去当前对话的旧生成事件;打开、新建、删除对话前会先停止正在运行的循环,迟到的回调不会写进新会话。
  • 答案与过程分离 - 流式正文只进入过程面板,只有已完成且没有工具调用的消息才成为正式答案,消除了审阅块闪现后再折叠的问题。
  • 失败展示 - 失败回合改为持久化 ERROR 内容块,部分输出保留为完成正文,失败原因以普通文本渲染(16sp、正文色、不做 Markdown)。
  • 原始错误透出 - HttpModelClient 读取错误流并输出 HTTP <code> 加响应体,格式化层不再改写,401/404/429/500 的原始内容直接进入聊天。
  • 流式重试 - 可恢复的模型失败最多重试 3 次、间隔 800ms,回合管线会收到当前重试次数,重试前清空半截草稿而不是继续追加。

过程与状态指示

  • 共享点阵 - ui-kit 的 DotMatrix / DotMatrixSpinner 取代全部 ProgressBar:工作状态行、过程面板与工具卡片共用同一套 3×3 走位和 1.5s 周期,并统一遵循系统动画缩放。
  • 过程面板 - 流式期间自动展开、回合结束后折叠;手动开关保存为绝对状态,后续默认值翻转不会反转用户选择,待确认状态同样视为进行中。
  • 工具卡间距 - 工具组内的连续调用与嵌套 Agent 卡片改为 2dp 间距,一组调用读起来是连续列表而不是分散卡片。

工具

  • web_fetch - 新增内置工具,抓取单个网页并返回可读正文:仅允许 HTTPS(回环/模拟器地址例外)、响应上限 2MB、剥离脚本与样式的 HTML 转文本、默认 12000 字符、最大 30000 字符;工具清单使用新的 FETCH/GLOBE 图标。
  • 宽松参数解析 - ToolJsonRepair 修复模型实际输出的写法:代码围栏、对象前说明文字、中文/单引号、未加引号的键、注释、Python 字面量、字符串内原始换行、尾逗号、token 上限截断、二次编码的 arguments 与单对象数组包装。写操作工具仍拒绝截断参数,不写入半截文件。
  • 结构化 Schema - 工具定义与 MCP 输入 Schema 统一通过 ToolSchemaBuilder / org.json 构造,源码守卫禁止 main 源码出现手写 JSON 对象字面量。
  • 模式过滤 - Agent 模式保留除手机控制外的全部工具族,手机控制只在 Control 模式注入。

上下文

  • 手动压缩 - 聊天菜单的「压缩上下文」现在执行真实压缩:除最近尾部外全部摘要,结果区分完成、无需压缩、缺少模型、生成中与失败。
  • 压缩标记 - 压缩成功后追加一行压缩记录,由此前未被使用的 CompactBlockView 渲染。
  • 提示词资产 - 压缩指令改由提示词目录(CONTEXT_COMPACTION)提供,不再把英文提示写在压缩器代码里。

工作区与附件

  • 工作区 Provider - WorkspaceDocumentsProvider 通过 SAF 暴露 files/workspace(.workspace.documents),工作区卡片新增「共享给其他应用」,把根目录连同读写授权交给其他应用。
  • 中文目录名 - WorkspaceNames.folder 只替换路径段非法字符,中/日/韩名称保持可读,不再退化成 -。
  • 抽屉刷新 - 工作区变化后刷新项目标题与文件树,打开抽屉时也会重新绑定。
  • 系统图片选择器 - 图片与视频附件在 API 33+ 走系统 Photo Picker,失败回退 SAF 选择器;附件命名优先取 DISPLAY_NAME,再退回 MIME 后缀,因为 Photo Picker 的 URI 没有扩展名。

SkillHub

  • 两种返回结构 - 商店同时解析扁平列表结构(description、downloads、ownerName、iconUrl、stars、verified、category、labels.requires_api_key)与嵌套详情结构(stats、owner);排序改用 sortBy + order=desc。
  • 真实图标 - SkillIconLoader 在 UI 线程之外下载图标,缓存 24 张位图并降采样到 96px,按 HTTPS 白名单校验地址、单文件上限 4MB,并给目标 View 打 tag,避免迟到的位图落到已复用的行上。
  • 旧版卡片 - 图标、带认证标记的标题、作者、分类标签、两行描述、下载量与收藏数/版本,以及右侧箭头。

扩展与多选

  • AI 写 Agent - 「让 AI 写」已可用:底部面板接收自然语言需求,生成在 IO 调度器上通过 AgentDraftGenerator 与新提示词 AGENT_DRAFT 完成,未知工具名按页面传入的清单过滤,字段不全的草稿直接拒绝,不往表单里填空值。
  • 多选操作栏 - SelectionBar 取代原行内操作栏,提供计数、复制、分享与关闭;复制/分享按时间线顺序生成纯文本记录,点击消息即可切换选中,更多菜单里的「选择并导出」占位行已移除。

界面细节

  • 抽屉标签 - 标签图标从 16dp 增至 24dp、间距改为 8dp,内联图标按钮不再保留最小尺寸。
  • 开关配色 - 开关改用 Material 配色(开启时白色滑块 + 主题色轨道,关闭时灰色滑块 + 浅色轨道),开启状态不再读成禁用。
  • 长按操作条 - 操作按钮移除 4dp 右边距。

工程质量

  • 建表语句 -...
Read more

LineCode Pro v2.0.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 10:19
70cc030

LineCode Pro v2.0.0

版本信息

  • 版本名称: v2.0.0
  • 版本号: 46

v2.0.0

English

UI parity and final polish

  • Drawers and composer - drawer, header, composer and overlays rebuilt against the C++/legacy design: 240-360dp drawer with tabs, per-extension file icons, three-pill composer, capability menu, fixed-height picker sheets and the attachment tree.
  • Tool calls - an assistant turn folds into one "Processed" row (spinner on the left while running, duration when done); consecutive tool calls collapse into "Used N tools"; per-tool cards for read/list/search, write/edit diffs, shell, delete, todo, agent, pipeline and MCP input/output; new tool-call card preview page.
  • Timeline and thinking - legacy ConversationTimeline folding restored (thinking shows with prose, intermediate thinking stays folded and is never replayed); the long-press action bar dismisses after every action; failures persist a localized error row, auto-expand and are written to the error log; error-log rows show date and reason and open the log file in another app.
  • Workspace - the card page is restored; SSH projects show their user@host:port address; switching is blocked until a new conversation starts; fixed the reload crash; the workspace surface opens without a page-slide animation.
  • Extensions - the Skills page only keeps the SkillHub store row; the store gains sort chips, account states and a feature center; MCP/Agent pages aligned with the legacy frames.
  • Models - multimodal switches (reasoning / image input / video input) above the compaction model; reasoning is locked to off when unsupported; the composer "+" menu shows image/video rows based on the model's capabilities (video currently attaches as a file placeholder).
  • Navigation and data - push slides right-to-left in 280 ms, back slides left-to-right in 220 ms; route-family dispatch removes missing-route crashes; schema v13 adds the model capability columns through an idempotent migration.

Release

  • Version 2.0.0 (versionCode 46); the changelog is bilingual from this version on, and the release workflow builds and publishes both the slim and local variants.

中文

界面对齐与收尾修复

  • 抽屉与输入器 - 按 C++/旧版重做抽屉、头部、输入器与浮层:240–360dp 抽屉、标签页、按扩展名着色的文件树、三胶囊输入器、能力菜单、固定高度选择面板与附件树。
  • 工具调用 - 整轮回合折叠为一行「已处理」(运行中左侧转圈、完成后显示耗时);连续工具调用合并为「使用了 N 个工具」;读/列目录/搜索行、写入/编辑 diff、Shell、删除、TODO、Agent、流水线、MCP 输入输出卡片;新增工具调用卡片预览页。
  • 时间线与思考 - 恢复旧版 ConversationTimeline 折叠规则(思考随正文显示,工具间的思考折叠且不回放);长按操作条执行后自动关闭;失败时持久化本地化错误行并自动展开,同时写入错误日志;错误日志显示日期与原因,点击在其它应用中打开。
  • 工作区 - 恢复卡片页;SSH 项目显示 user@host:port 地址;已有对话时切换工作区会提示先新建对话;修复切换时的崩溃;工作区入口不再播放页面滑入动画。
  • 扩展 - Skills 扩展页只保留 SkillHub 商店行;商店页增加排序筛选、账号状态与功能中心;MCP/Agent 页对齐旧版框架。
  • 模型 - 专用压缩模型上方新增多模态开关(推理 / 图片输入 / 视频输入);不支持推理时锁定为 off;输入器「+」菜单按模型能力显示选择图片/选择视频(视频暂以文件占位形式附加)。
  • 导航与数据 - 进入页面右→左 280ms、返回左→右 220ms;按路由家族分发消除未注册页面崩溃;数据库升级到 v13,新增模型能力列(幂等迁移)。

版本

  • 版本号 2.0.0(versionCode 46);从该版本起更新日志为双语,Release 工作流同时构建并发布 slim 与本地版。

下载说明

  • LineCode Pro 2.0.0-slim.APK - 默认精简版 Release APK
  • LineCode Pro 2.0.0-slim.APK.idsig - APK 签名文件

LineCode Pro v2.0.0-next

Choose a tag to compare

@github-actions github-actions released this 28 Oct 11:34
2ee0859

LineCode Pro v2.0.0-next

版本信息

  • 版本名称: v2.0.0-next
  • 版本号: 45

v2.0.0-next

全量 Java 重写

  • 模块化架构 - 以 modules/ 下的 30 个 Gradle 模块替换旧 MVP 单体:core-*、engine-*、data、tool-*、ui-*、feature-*、platform-android、runtime 和 arch-test 各自负责固定边界,:app 只保留 Activity 壳、Manifest、资源和 SAF 委托。
  • 手写 UI 与状态 - 聊天、抽屉、时间线、工具卡、设置、模型、扩展、工作区和终端页面全部使用手写 Java View 与 core-mvi 路由/状态,不使用 XML 布局、Kotlin 或 Compose;主题通过 Tokens/ThemeBinder 原地刷新,保留滚动位置和草稿。
  • 完整工具循环 - 模型流式输出、工具批次、审批、结果回填和多轮循环由显式状态机驱动;支持文件读写编辑、Shell、Web 搜索、图片理解/生成、TODO、子 Agent、MCP、手机控制和 diff 回滚。
  • 上下文与提示词 - engine-prompt 统一管理 22 个提示词资产,严格校验 manifest.json、PromptId、占位符、重复内容和孤立文件;支持学习模式、极简模式、软/硬上下文压缩和可编辑模板。
  • 扩展与工作区 - Agent/MCP/Skills 扩展、SkillHub 搜索/详情/登录/发布/评论、GitHub Skill 导入、项目工作区、附件、SSH/Termux、终端提供者与本地归档均已接入新数据层(schema v12)。

本地模型改为可选构建

  • 默认精简版 - 默认构建不含 engine-local Java、LocalModelClient、LocalModelPage、LocalModelBridgeImpl,也不含 libllama.so、libggml*.so 或 libc++_shared.so;本地模型入口和协议页同步隐藏。
  • 本地模型版 - 使用 -PlinecodeEnableLocalModel=true 才编译本地运行时、JNI 页面和原生库。本地版是精简版的超集,保留全部普通功能。
  • 构建隔离 - 本地源码通过 src/local/java 与 androidComponents 注入,反射桥接只在本地版存在;R8 仅保留 JNI 入口、回调方法名和反射桥接类名,其余本地类继续混淆以缩小体积。
  • 产物命名 - Release 产物改为 LineCode Pro <version>-slim.APK / -local.APK,两个变体不会互相覆盖;切换变体需先 clean,避免 zipflinger 虚拟条目残留。

迁移与交互修复

  • 旧数据迁移 - 启动时读取旧 linecode.db(v4),先备份为 linecode.db.v4.bak,再合并会话、消息、工具结果、模型、项目、记忆、设置、扩展、diff 和旧 Skills 文件到 linecode-v2.db;重复启动不会重复导入。
  • C++ 提示词 - systemPrompt、语气、Chat/Plan 模式、工作目录、模型身份、TODO、上下文压缩、Agent 角色、图片理解等模板逐字迁移到 engine-prompt,Chat/Plan 模式恢复 MODE_TOOLS_ALLOWED / MODE_TOOLS_BLOCKED 动态工具列表。
  • 聊天交互 - 思考强度胶囊打开底部等级选择面板;右上角三点打开 C++ 更菜单(含打开会话抽屉、教程、设置、清空对话),不再直接跳设置。
  • 设置转场 - 页面 push/pop 使用水平平移动画,保留父页面和滚动位置。
  • 崩溃与 SAF - 全局未捕获异常写入崩溃页和错误日志;SAF 目录/归档/文件选择回调增加异常捕获、提示与日志,避免直接闪退。
  • 文件管理 - 抽屉 Files 页改为可展开文件树,显示项目名称/路径和刷新入口;点击文件通过系统“打开方式”选择器打开。
  • 记忆工具 - 恢复 memory_update 工具和记忆卡片标题,支持 user/project/environment 作用域与敏感内容拒绝。

工程质量与协作

  • 机械守卫 - 新增/收紧 CJK、UI 文案拼接、raw thread、size budget、字符串中英俄键一致、提示词目录一致性和架构测试;:app 源码也纳入扫描(NestedAgentRunner 是唯一明确允许的同步 Agent 桥)。
  • 版本与发布 - 版本号升级到 2.0.0-next(versionCode 45);Release 工作流只构建 slim,本地版按参数单独构建。
  • 许可证与协作 - 切换为 AGPL-3.0-or-later + 商业双重许可,补充 CLA.md、CLA / verify CI、CONTRIBUTING.md、PR 模板、Bug/Feature/Suggestion/Other/UI parity Issue 模板、README 与 AGENT.md 禁止事项。
  • CI 去重 - CI 只在 PR 运行,合并到 master 由 Release 处理,避免 PR 与合并后重复执行同一套检查。
  • 发布修复 - Release 在旧 master 没有 Java app/build.gradle.kts 时不再跳过打包;新增 force_release 手动入口,迁移后的首个版本可以正常出包。

下载说明

  • LineCode Pro 2.0.0-next-slim.APK - 默认精简版 Release APK
  • LineCode Pro 2.0.0-next-slim.APK.idsig - APK 签名文件
  • 本地模型版使用 -PlinecodeEnableLocalModel=true 单独构建,文件名带 -local,不会覆盖精简版。

LineCode Pro v1.5.3

Choose a tag to compare

@github-actions github-actions released this 26 Oct 16:13
095b47e

LineCode Pro v1.5.3

版本信息

  • 版本名称: v1.5.3
  • 版本号: 43

v1.5.3

本地模型

  • 状态行不再卡在「正在加载模型到内存」 - 本轮修复的主要问题:权重进内存之后,状态行立刻回到
    「正在工作」。以前这条提示要等到整轮回复结束才消失,模型已经在一边输出、状态行仍显示「加载到内存
    100%」;从第二条消息起模型已在进程里缓存,则整轮都停在「加载到内存 0%」,看起来像加载卡死。现在
    加载窗口只覆盖真正的权重读取,缓存命中和加载失败都不会留下残留提示。
  • 真正卡死的加载会停下来并说明原因 - 加载长时间没有进度时不再无限等待:连续没有进展会被当作
    停滞结束本次请求,并单独提示「模型加载长时间没有进展,已停止本次请求」,与「收不到模型数据」区分
    开。加载期间的进度更新仍然算作存活信号,慢但正常的冷加载不会被误停。
  • 长提示词与工具调用的本地轮不再被误判为停滞 - 本地模型预填长提示词、或整段缓冲工具调用时不会
    产生任何可见输出;这些阶段现在各自上报进度,不会在回复开始前被空闲看门狗当成卡死。

下载说明

  • LineCodePro-1.5.3-slim.apk: 精简版,不含本地模型后端,体积最小
  • LineCodePro-1.5.3-localmodel.apk: 本地模型版,内置 llama.cpp
    (GGUF 模型文件需自行在应用内导入;GPU 加速取决于设备)
  • 校验文件: 两个 APK 各自带一个 .sha256
  • 两个包版本号相同,安装其一即可;本地模型版体积明显更大

LineCode Pro v1.5.2

Choose a tag to compare

@github-actions github-actions released this 25 Oct 11:02
fc8ef78

LineCode Pro v1.5.2

版本信息

  • 版本名称: v1.5.2
  • 版本号: 42

v1.5.2

会话滚动

  • 修复流式输出时的剧烈抖动 - 模型一边输出、markdown 一边渲染时,会话视图会剧烈上下抖动:
    跟随滚动此前每次内容变化都直接跳向按估算高度算出的列表底部,新行落地后真实高度替换估算值,
    底部位置再次移动,视口就在两个位置之间反复弹跳。现在改为把视口锚定在最后一行的尾部,由虚拟
    列表按测量后的真实高度收敛,落定后主动结束这次对齐;流式期间视口始终钉在内容底边,文本在
    底部平滑生长,不再有回弹和追赶。
  • 最新输出始终可见 - 与抖动同源的另一个问题会让跟随停在旧位置上,最新输出跑到屏幕外,只能
    反复手动点「回到底部」。锚定修复后,跟随状态每一帧都贴住底部;「回到底部」按钮的平滑滚动在
    输出持续增长时会实时重定目标到新的底部,不再落在半途;手动上滑阅读时位置依旧保持不变。

下载说明

  • LineCodePro-1.5.2-slim.apk: 精简版,不含本地模型后端,体积最小
  • LineCodePro-1.5.2-localmodel.apk: 本地模型版,内置 llama.cpp
    (GGUF 模型文件需自行在应用内导入;GPU 加速取决于设备)
  • 校验文件: 两个 APK 各自带一个 .sha256
  • 两个包版本号相同,安装其一即可;本地模型版体积明显更大

LineCode Pro v1.3.4

Choose a tag to compare

@github-actions github-actions released this 12 Oct 10:12
a0ede86

LineCode Pro v1.3.4

版本信息

  • 版本名称: v1.3.4
  • 版本号: 38

v1.3.4

工作区与文件

  • 改动文件前先读取 - 内置文件工具新增读后写保护:覆盖或编辑一个已存在的文件之前
    必须先读取它。读取成功时记录本次返回内容的 SHA-256,写入或编辑前用同一次读取拿到的
    内容
    重新比对(不再另查一次磁盘,因此记录的一定是模型看到的那一版):
    文件从未读取过就拒绝,并提示先用 file_read 读取后重试;读取之后文件又被外部改动
    (其他程序、其他 Agent 或用户)同样拒绝,并提示重新读取,不再覆盖 AI 从未看过的内容。
  • 整体替换要求完整读过 - file_write 会用新内容整份替换目标,所以只在模型确实看完整份
    文件时才放行:窗口读取(start_kb/end_kb)或结果被截断的读取只记为「部分读取」,
    此时整体替换会被拒绝并提示改用 file_edit;file_edit 只替换匹配到的片段、其余字节
    原样保留,因此部分读取也允许编辑。目标不存在时按新建处理,无需先读;工具自身写入或
    编辑成功后刷新记录,连续修改不必反复重读。
  • 同一文件不会被两个工具调用同时改 - 变更期间按路径持有内存占用标记:并行子 Agent 或
    同一轮里的并发调用正在改同一文件时,后来的变更直接拒绝并提示重试,不会出现两次变更
    都通过校验、后者覆盖前者却都报成功。进程之外的写入者无法被拦住(平台文件能力没有
    compare-and-swap),这段窗口仍以最终的写入调用为界。
  • 读取失败的状态不再被当作新文件 - 写入前 Stat 失败且错误不是「不存在」(例如权限或
    I/O 错误)时现在直接失败,不再把已存在的文件当成新建文件而跳过读取保护。
  • 记录只存在内存中 - 已读记录按绝对路径保存在进程内存里,不写入数据库或磁盘:
    应用重启后从零开始,这只会让规则更严格;记录条数设有上限,超出后整表作废,
    代价仅是重新读取一次。

发布

  • 版本 - versionCode 38、versionName 1.3.4。
  • 回归覆盖 - 原生测试新增 file_observation_tests(SHA-256 标准向量与分块一致性、
    内存观察表语义、容量上限与变更占用标记)和 file_tool_tests 的读后写用例(未读拒绝、
    外部改动拒绝、内容相同不算改动、部分读取只允许编辑、窗口覆盖整份文件才允许整体替换、
    截断读取记为部分、读取失败不授权、Stat 失败不当作新文件、并发变更被拒绝后释放、
    写入失败后可重试、文件被外部删除后可重建、中英文提示、共享记录注入);
    :app:assembleDebug 通过,工具文案目录表由 tools/gen_tool_text_catalog.py 重新生成。

下载说明

  • 下载 LineCodePro-1.3.4.apk 直接安装
  • 校验文件: LineCodePro-1.3.4.apk.sha256

LineCode Pro v1.3.3

Choose a tag to compare

@github-actions github-actions released this 30 Sep 18:21
991f370

LineCode Pro v1.3.3

版本信息

  • 版本名称: v1.3.3
  • 版本号: 37

v1.3.3

工作区与文件

  • 挂载工作区到文件系统 - 扩展页的「分享工作区目录」改为「挂载工作区到文件系统」:
    内部 .linecode 目录改由完整的系统文档提供者(SAF)暴露,点击后打开系统的目录
    选择器并直接落在工作区根目录(Android 8.0 以下选择器不保证从该目录开始),
    确认授权后即可在支持 SAF 的文件管理器里浏览、新建、重命名、复制、移动和删除
    其中的 home/、project/、skills/ 文件。
  • 路径安全 - 文档 ID 与真实路径的映射集中到 WorkspaceDocumentPaths,
    拒绝 ..、非法文件名、符号链接以及任何越出工作区根目录的路径;
    删除与复制前先校验整棵子树,避免顺着链接删到工作区之外。

模型与提示词

  • 极简模式 - 「设置 → AI 行为」新增开关(学习模式上方):开启后系统提示词压缩为
    一句角色说明加工具名清单,跳过自定义提示词、记忆检索与 Skills 注入,
    适合上下文较小的模型,或只想让它直接干活时。
  • DeepSeek 思考档位 - DeepSeek 请求不再发送 thinking 字段,改为服务端支持的
    reasoning_effort:关闭对应 none、中对应 high、最高对应 max,
    自动档不发送该字段;自建与代理端点同样生效。

上下文与压缩

  • 用量包含固定开销 - 上下文指示器和用量面板把系统提示词、工具定义的固定开销
    计入估算,并与服务端返回的输入 token 取较大值,不再只统计消息文本。
  • 压缩触发更贴近实际 - 自动压缩(含工具循环中途的硬压缩与软压缩)改用同一口径:
    本地估算加固定开销,再与服务端实测输入 token 取较大值;
    系统提示词或工具很多时也能按真实占用触发,对话为空且没有固定开销时不触发。
  • 用量状态 - token 用量状态从输入框组件提升到聊天页,输入框重建时不再丢失,
    用量面板也能立刻用上最新的固定开销估算。

记忆

  • 删除记忆报错修复 - 从旧版本升级的数据库删除记忆时不再报
    no such module: fts4:旧版建立的 FTS4 索引在当前 SQLite 里已无法访问,
    删除记忆会跳过这个不可达的索引行,不再因此整体回滚。

发布

  • 版本 - versionCode 37、versionName 1.3.3。
  • 回归覆盖 - 原生测试新增升级库删除记忆的用例,并为 DeepSeek 思考档位补齐
    请求体断言;WorkspaceDocumentPaths 新增 Android 单元测试。

下载说明

  • 下载 LineCodePro-1.3.3.apk 直接安装
  • 校验文件: LineCodePro-1.3.3.apk.sha256

LineCode Pro v1.3.2

Choose a tag to compare

@github-actions github-actions released this 25 Sep 11:36
b564332

LineCode Pro v1.3.2

版本信息

  • 版本名称: v1.3.2
  • 版本号: 36

v1.3.2

稳定性与性能

  • Skills 商店 - 对接口返回的重复技能标识去重,并为列表卡片设置唯一 key,
    修复打开商店时的 HuxerUI 同级视图 key 冲突崩溃。
  • 模型管理 - 保存模型后通过刷新信号重新加载列表,不再更换导航根页面的 key;
    模型卡片也使用唯一 key,避免返回列表时崩溃。
  • 长上下文聊天 - 缓存会话展示数据和 token 用量快照,减少滑动、点击与流式输出
    期间对整段历史消息的重复复制和计算。
  • 异常日志 - Java 和 C++ 的异常位置写入应用错误日志;日志不保存请求正文、
    API 密钥或聊天内容。
  • 系统栏避让 - 由 HuxerUI 统一处理窗口安全区,页面顶部不再被状态栏覆盖,
    同时移除抽屉和底部面板的重复手动留白。

发布

  • 版本 - versionCode 36、versionName 1.3.2。

下载说明

  • 下载 LineCodePro-1.3.2.apk 直接安装
  • 校验文件: LineCodePro-1.3.2.apk.sha256