Skip to content

Releases: cxykevin/alkaid0

v0.3.4

v0.3.4 Pre-release
Pre-release

Choose a tag to compare

@cxykevin cxykevin released this 30 Jul 11:38

本 Release 作为 Development Techology Preview Level 1 的一部分发布。

本版本主要更新:

  • 编辑工具支持 LSP 格式化、诊断检查和原生语法检查
  • 搜索工具开启 AI 总结功能(自动总结搜索结果并引用来源)
  • 所有工具的 prompt 精简,减少上下文占用

本次更新由 Deepseek V4 Flash 完成大部分工作,并人工修改。

Changelog

  • 编辑后自动检查: 编辑文件后自动调用 LSP 格式化+语法诊断,或对 JSON/YAML/TOML/MD 等做原生语法检查,结果返回给 AI 以便自动修复
  • AI 搜索总结: online 搜索开启 LLM 总结,根据原始问题筛选相关内容并标注引用来源
  • Prompt 精简: 所有工具的长示例任务替换为单行 Quick Examples,减少约 5KB 上下文

安装

# Linux
curl -sSL https://alk.cxykevin.top/i.sh | bash
# Windows
irm https://alk.cxykevin.top/i.ps1 | iex

配置

路径

# 从二进制文件启动
~/.config/alkaid0/config.json
# Linux 软件包安装版本
/etc/alkaid0/config.json
# Windows 软件包安装版本
C:\ProgramData\alkaid0\config.json

如果你从 v0.3.3 升级,无需修改配置文件

配置模板

{
    "$schema": "https://raw.githubusercontent.com/cxykevin/alkaid0/refs/heads/main/docs/schemas/config.json",

    "Version": 1,
    "ThemeID": 0,
    "Model": {
        "ProviderURL": "https://openrouter.com/api/v1(这里没用)",
        "ProviderKey": "sk-or-xxx(这里没用)",
        "DefaultModelID": 1,
        "Models": {
            "0": {
                "ModelName": "模型名",
                "ModelID": "模型ID",
                "ModelDescription": "模型描述(可选)",
                "ModelAddPrompt": "附加系统提示词(可选)",
                "ModelTopP": -1,
                "ModelTopK": -1,
                "ModelTemperature": -1,
                "TokenLimit": 8192,
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true,
                "EnableToolCalling": false,
                "CompressSize": 128000,
                "ProviderSpecificConfig": {
                    "EnableDeepseekThinking": false,
                    "EnableReasoningEffort": true,
                    "EnableTopP": false,
                    "EnableTopK": false,
                    "EnableTemperature": false,
                    "EnableUsage": true
                }
            },
            "1": {
                "ModelName": "embedding模型名",
                "ModelID": "embedding模型ID",
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true,
                "EnableToolCalling": false,
                "Hide": true,
                "Type": "embedding",
                "ProviderSpecificConfig": {
                    "Dimension": 1024
                }
            }
        }
    },
    "Agent": {
        "Agents": {
            "frontend": {
                "AgentName": "前端工程",
                "AgentDescription": "前端工程Agent",
                "AgentShortDescription": "擅长前端开发的前端工程Agent",
                "AgentPrompt": "你是一个前端工程师,请根据用户的需求,提供前端工程解决方案。",
                "AgentModel": 0,
                "AutoApprove": "",
                "AutoReject": "",
                "DisableSandbox": false
            }
        },
        "IgnoreBuiltinAgents": false,
        "GlobalPrompt": "始终使用中文回答",
        "SummaryModel": 0,
        "MaxCallCount": 50,
        "AutoApprove": "",
        "AutoReject": "",
        "IgnoreDefaultRules": false,
        "DisablePromptPreprocess": false,
        "UseShell": "",
        "TerminalEnvs": {
            "LANG": "zh_CN.UTF-8"
        },
        "DisableSandbox": false
    },
    "ignoreSignals": false,
    "Context": {
        "LSP": {
            "Enabled": true,
            "IdleTimeout": 600,
            "LanguageServers": {
                ".go": {
                    "Command": "gopls",
                    "Args": []
                }
            }
        },
        "EmbeddingModelID": 1,
        "SearchSummaryModel": 0,
        "OnlineSearch": {
            "timeout": 30,
            "proxy_url": "",
            "retry_count": 3,
            "bing": {
                "enable": true,
                "min_delay": 2,
                "max_delay": 5,
                "max_results": 10
            },
            "github": {
                "enable": false,
                "token": "ghp_xxx",
                "max_results": 5
            },
            "arxiv": {
                "enable": false,
                "max_results": 5
            },
            "tavily": {
                "enable": false,
                "api_key": "tvly-xxx",
                "search_depth": "basic",
                "include_answer": false,
                "include_raw_content": false,
                "max_results": 10
            }
        },
        "Codebase": {
            "BM25Weight": 0.7,
            "VectorMinSimilarity": 0.5,
            "BM25RetentionScore": 0.0
        }
    },
    "Server": {
        "Key": "<你的 websocket key>",
        "Path": "/acp",
        "Host": "127.0.0.1",
        "Port": 7433,
        "DisableStdioServer": true,
        "SessionTimeout": 60
    }
}

客户端

配置完上述 json 后直接启动主程序,服务端会在 ws://<host>:<port>/<path> 开启一个 websocket 服务。

服务端使用 Query 参照认证。在 Query 参数中添加 key=<key> 即可。如果没有 Query 参数选项,则可以在 Path 中设置 /acp?k=<key>

支持 Websocket 桥接的客户端可以直接链接。只支持 stdio 的客户端可以使用提供的 helper 链接。

目前 helper 只支持 ws,不支持 wss

可以通过 ./可执行文件 acp 启动服务端内置 helper。

平台支持

  • Linux (amd64,arm64) (binary,deb,rpm,apk,archlinux)
  • Windows (amd64) (binary,msix)
  • MacOS (实验性amd64,实验性arm64)(沙盒除外) (binary)

注意:模型引擎尚未经过充分测试!

本 Release 仅供测试,不代表任何效果!不要在生产环境使用!

--- alkaid0 启航 ---

日志位于配置文件同目录 log.log,经过简单脱敏,会包含您的聊天记录!提交前请手动审计!

v0.3.3

v0.3.3 Pre-release
Pre-release

Choose a tag to compare

@cxykevin cxykevin released this 29 Jul 15:41
dd11a66

本 Release 作为 Development Techology Preview Level 1 的一部分发布。

本版本更新代码库索引系统,支持按目录搜索,以及 search 工具的 online 模式。Online Search 可以搜索来自 Bing/Tavily/Github/arXiv 的混合内容。

本次更新由 Deepseek V4 Flash 完成大部分工作,并人工修改 (花费约 5 rmb)。

安装

# Linux
curl -sSL https://alk.cxykevin.top/i.sh | bash
# Windows
irm https://alk.cxykevin.top/i.ps1 | iex

配置

路径

# 从二进制文件启动
~/.config/alkaid0/config.json
# Linux 软件包安装版本
/etc/alkaid0/config.json
# Windows 软件包安装版本
C:\ProgramData\alkaid0\config.json

从 v0.2.x 升级配置文件

v0.3.x 添加了对嵌入模型的需求,用于代码索引构建。你需要在 Models 中以普通模型的形式添加你的嵌入模型,并指定 "Type": "embedding", "Hide": true, "ProviderSpecificConfig" 中 "Dimension" 为你使用向量模型的维度。

更改 ModelName 字段会导致整个 Codebase 强制重新索引!

我们建议您同时启用 LSP 支持和 OnlineSearch。Bing 基于爬虫,因此更推荐您使用 Tavily 进行日常搜索。

配置模板

{
    "$schema": "https://raw.githubusercontent.com/cxykevin/alkaid0/refs/heads/main/docs/schemas/config.json",

    "Version": 1,
    "ThemeID": 0,
    "Model": {
        "ProviderURL": "https://openrouter.com/api/v1(这里没用)",
        "ProviderKey": "sk-or-xxx(这里没用)",
        "DefaultModelID": 1,
        "Models": {
            "0": {
                "ModelName": "模型名",
                "ModelID": "模型ID",
                "ModelDescription": "模型描述(可选)",
                "ModelAddPrompt": "附加系统提示词(可选)",
                "ModelTopP": -1,
                "ModelTopK": -1,
                "ModelTemperature": -1,
                "TokenLimit": 8192,
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true,
                "EnableToolCalling": false,
                "CompressSize": 128000,
                "ProviderSpecificConfig": {
                    "EnableDeepseekThinking": false,
                    "EnableReasoningEffort": true,
                    "EnableTopP": false,
                    "EnableTopK": false,
                    "EnableTemperature": false,
                    "EnableUsage": true,
                }
            },
            "1": {
                "ModelName": "embedding模型名",
                "ModelID": "embedding模型ID",
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true,
                "EnableToolCalling": false,
                "Hide": true,
                "Type": "embedding",
                "ProviderSpecificConfig": {
                    "Dimension": 1024
                }
            }
        }
    },
    "Agent": {
        "Agents": {
            "frontend": {
                "AgentName": "前端工程",
                "AgentDescription": "前端工程Agent",
                "AgentShortDescription": "擅长前端开发的前端工程Agent",
                "AgentPrompt": "你是一个前端工程师,请根据用户的需求,提供前端工程解决方案。",
                "AgentModel": 0,
                "AutoApprove": "",
                "AutoReject": "",
                "DisableSandbox": false
            }
        },
        "IgnoreBuiltinAgents": false,
        "GlobalPrompt": "始终使用中文回答",
        "SummaryModel": 0,
        "MaxCallCount": 50,
        "AutoApprove": "",
        "AutoReject": "",
        "IgnoreDefaultRules": false,
        "DisablePromptPreprocess": false,
        "UseShell": "",
        "TerminalEnvs": {
            "LANG": "zh_CN.UTF-8"
        },
        "DisableSandbox": false
    },
    "ignoreSignals": false,
    "Context": {
        "LSP": {
            "Enabled": true,
            "IdleTimeout": 600,
            "LanguageServers": {
                ".go": {
                    "Command": "gopls",
                    "Args": []
                }
            }
        },
        "EmbeddingModelID": 1,
        "SearchSummaryModel": 0,
        "OnlineSearch": {
            "timeout": 30,
            "proxy_url": "",
            "retry_count": 3,
            "bing": {
                "enable": true,
                "min_delay": 2,
                "max_delay": 5,
                "max_results": 10
            },
            "github": {
                "enable": false,
                "token": "ghp_xxx",
                "max_results": 5
            },
            "arxiv": {
                "enable": false,
                "max_results": 5
            },
            "tavily": {
                "enable": false,
                "api_key": "tvly-xxx",
                "search_depth": "basic",
                "include_answer": false,
                "include_raw_content": false,
                "max_results": 10
            }
        },
        "Codebase": {
            "BM25Weight": 0.7,
            "VectorMinSimilarity": 0.5,
            "BM25RetentionScore": 0.0
        }
    },
    "Server": {
        "Key": "<你的 websocket key>",
        "Path": "/acp",
        "Host": "127.0.0.1",
        "Port": 7433,
        "DisableStdioServer": true,
        "SessionTimeout": 60
    }
}

客户端

配置完上述 json 后直接启动主程序,服务端会在 ws://<host>:<port>/<path> 开启一个 websocket 服务。

服务端使用 Query 参照认证。在 Query 参数中添加 key=<key> 即可。如果没有 Query 参数选项,则可以在 Path 中设置 /acp?k=<key>

支持 Websocket 桥接的客户端可以直接链接。只支持 stdio 的客户端可以使用提供的 helper 链接。注意:由于 ACP 规范并未明确标注 websocket 的具体连接协议内容,因此其存在一定兼容性问题。

目前 helper 只支持 ws,不支持 wss

可以通过 ./可执行文件 acp 启动服务端内置 helper。如果你需要轻量化部署并链接到远程,则可以使用单独的 helper 可执行文件并不带任何参数启动。

helper 会自动读取本机的 ~/.config/alkaid0/config.json 或系统级配置文件 /etc/alkaid0/config.json (linux) 和 C:\ProgramData\alkaid0\config.json (windows) 并自动链接,一般本机无需再次手动配置 key。

如果你需要链接到远程或自动链接无效,可以使用以下参数:

  • -config 配置文件路径
  • -host 服务器的 host
  • -port 服务器的 port
  • -path 服务器的 path
  • -key 服务器配置的 websocket key

如果你无法链接请检查是否在服务端和客户端都设置了 Key。服务端空 key 启动会自动生成一个随机秘钥并写入配置。

如果内置的 stdio 导致服务器自动退出或其它问题,则可在 config.json 中设置 DisableStdioServertrue 以禁用。

不要在用户目录或者根目录运行 Alkaid!

平台支持

  • Linux (amd64,arm64) (binary,deb,rpm,apk,archlinux)
  • Windows (amd64) (binary,msix)
  • MacOS (实验性amd64,实验性arm64)(沙盒除外) (binary)

注意:模型引擎尚未经过充分测试!

本 Release 仅供测试,不代表任何效果!不要在生产环境使用!

--- alkaid0 启航 ---

日志位于配置文件同目录 log.log,经过简单脱敏,会包含您的聊天记录!提交前请手动审计!

v0.3.2

v0.3.2 Pre-release
Pre-release

Choose a tag to compare

@cxykevin cxykevin released this 28 Jul 04:27

本 Release 作为 Development Techology Preview Level 1 的一部分发布。

本版本新增代码库索引系统和 search 工具。基于 LSP 的符号提取引擎、向量数据库与 BM25 混合检索,以及增量索引机制,使 AI 能够感知项目结构并提供更精准的上下文。

v0.3.2 更新日志

Features

  • 代码库索引引擎context/codebase/):支持增量索引、智能队列和后台工作线程,连接时自动触发索引。
  • LSP 符号提取context/lsp/):内置 LSP 客户端,支持 TypeScript/JavaScript/Vue 等语言的函数/类/接口/变量符号自动提取,管理 LSP 服务器生命周期。
  • 向量数据库 & BM25 混合搜索:集成向量数据库,结合 BM25 全文检索实现语义与关键词混合搜索策略。
  • search 工具tools/tools/search/):全新内置 search 工具,AI Grep 与上下文引擎混合搜索,提高代码检索效率。
  • /index 和 /help 命令:新增 /index 命令支持手动索引触发、状态查看和进度广播;新增 /help 命令查询可用命令列表。
  • 扩展索引文件类型:新增 .vue / .txt / .json / .yaml / .yml 文件索引支持,大文件自动截断。

Fixes

  • 修复 auto-reject 后主会话未继续下一轮调用的问题
  • 修复 auto-reject 后 agent 工作流未正确广播 cancelled 状态
  • 修复 CI 中 mock 服务器端口竞争导致测试超时

Refactor

  • Mock OpenAI 服务器改用随机端口,消除并行测试冲突

配置注意:代码库索引系统需要配置一个 embedding 模型(Type: "embedding"),用于计算代码片段的向量表示。请在 config.json 中添加 embedding 模型条目并设置 EmbeddingModelID 指向它。Dimension 值请根据所选模型填写(如 text-embedding-3-small 为 1536,bge-m3 为 1024)。

本次更新由 Deepseek V4 Flash / Claude Opus 5 完成全程编写。

安装

# Linux
curl -sSL https://alk.cxykevin.top/i.sh | bash
# Windows
irm https://alk.cxykevin.top/i.ps1 | iex

配置

路径

# 从二进制文件启动
~/.config/alkaid0/config.json
# Linux 软件包安装版本
/etc/alkaid0/config.json
# Windows 软件包安装版本
C:\ProgramData\alkaid0\config.json
{
    "$schema": "https://raw.githubusercontent.com/cxykevin/alkaid0/refs/heads/main/docs/schemas/config.json",
    "Version": 1,
    "Model": {
        "ProviderURL": "https://openrouter.com/api/v1(这里暂时没有用)",
        "ProviderKey": "sk-or-xxx(这里暂时没有用)",
        "DefaultModelID": 1,
        "EmbeddingModelID": 2,
        "Models": {
            "1": {
                "ModelName": "模型名",
                "ModelID": "模型ID",
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true,
                "CompressSize": 128000,
                "ProviderSpecificConfig": {
                    "EnableDeepseekThinking": false,
                    "EnableReasoningEffort": true,
                    "EnableTopP": false,
                    "EnableTopK": false,
                    "EnableTemperature": false
                }
            },
            "2": {
                "ModelName": "Embedding 模型名",
                "ModelID": "嵌入模型ID",
                "ProviderURL": "https://嵌入模型供应商/v1",
                "ProviderKey": "sk-嵌入模型密钥",
                "Type": "embedding",
                "ProviderSpecificConfig": {
                    "Dimension": 1024
                }
            }
        }
    },
    "Agent": {
        "Agents": {
            "frontend": {
                "AgentName": "前端工程",
                "AgentDescription": "前端工程Agent",
                "AgentPrompt": "你是一个前端工程师,请根据用户的需求,提供前端工程解决方案。",
                "AgentModel": 1,
                "AutoApprove": "",
                "AutoReject": ""
            }
        },
        "GlobalPrompt": "始终使用中文回答",
        "SummaryModel": 1,
        "MaxCallCount": 50,
        "AutoApprove": "",
        "AutoReject": ""
    },
    "ThemeID": 0,
    "Server": {
        "Key": "<你的 webcsocket key>",
        "Path": "/acp",
        "Host": "127.0.0.1",
        "Port": 7433,
        "DisableStdioServer": false
    }
}

客户端

配置完上述 json 后直接启动主程序,服务端会在 ws://<host>:<port>/<path> 开启一个 websocket 服务。此时服务端同时会启动一个标准的 stdio 服务器便于调试。

服务端使用 Query 参照认证。在 Query 参数中添加 key=<key> 即可。如果没有 Query 参数选项,则可以在 Path 中设置 /acp?k=<key>

支持 Websocket 桥接的客户端可以直接链接。只支持 stdio 的客户端可以使用提供的 helper 链接。注意:由于 ACP 规范并未明确标注 websocket 的具体连接协议内容,因此其存在一定兼容性问题。

目前 helper 只支持 ws,不支持 wss

可以通过 ./可执行文件 acp 启动服务端内置 helper。如果你需要轻量化部署并链接到远程,则可以使用单独的 helper 可执行文件并不带任何参数启动。如果你使用 go install 安装,则服务器绑定到了 alkaid0,单独的 helper 可以使用 alk 命令。

helper 会自动读取本机的 ~/.config/alkaid0/config.json 或系统级配置文件 /etc/alkaid0/config.json (linux) 和 C:\ProgramData\alkaid0\config.json (windows) 并自动链接,一般本机无需再次手动配置 key。

如果你需要链接到远程或自动链接无效,可以使用以下参数:

  • -config 配置文件路径
  • -host 服务器的 host
  • -port 服务器的 port
  • -path 服务器的 path
  • -key 服务器配置的 websocket key

如果你无法链接请检查是否在服务端和客户端都设置了 Key。服务端空 key 启动会自动生成一个随机秘钥并写入配置。

如果内置的 stdio 导致服务器自动退出或其它问题,则可在 config.json 中设置 DisableStdioServertrue 以禁用。

不要在用户目录或者根目录运行 Alkaid!

平台支持

  • Linux (amd64,arm64) (binary,deb,rpm,apk,archlinux)
  • Windows (amd64) (binary,msix)
  • MacOS (实验性amd64,实验性arm64)(沙盒除外) (binary)

注意:模型引擎尚未经过充分测试!

本 Release 仅供测试,不代表任何效果!不要在生产环境使用!

--- alkaid0 启航 ---

日志位于配置文件同目录 log.log,经过简单脱敏,会包含您的聊天记录!提交前请手动审计!

v0.3.1

v0.3.1 Pre-release
Pre-release

Choose a tag to compare

@cxykevin cxykevin released this 26 Jul 06:37

本 Release 作为 Development Techology Preview Level 1 的一部分发布。

本版本修复了 v0.3.0 中自动拒绝的 bug,并优化了提示词引导。

安装

# Linux
curl -sSL https://alk.cxykevin.top/i.sh | bash
# Windows
irm https://alk.cxykevin.top/i.ps1 | iex

配置

路径

# 从二进制文件启动
~/.config/alkaid0/config.json
# Linux 软件包安装版本
/etc/alkaid0/config.json
# Windows 软件包安装版本
C:\ProgramData\alkaid0\config.json
{
    "$schema": "https://raw.githubusercontent.com/cxykevin/alkaid0/refs/heads/main/docs/schemas/config.json",
    "Version": 1,
    "Model": {
        "ProviderURL": "https://openrouter.com/api/v1(这里暂时没有用)",
        "ProviderKey": "sk-or-xxx(这里暂时没有用)",
        "DefaultModelID": 1,
        "Models": {
            "1": {
                "ModelName": "模型名",
                "ModelID": "模型ID",
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true,
                "CompressSize": 128000,
                "ProviderSpecificConfig": {
                    "EnableDeepseekThinking": false,
                    "EnableReasoningEffort": true,
                    "EnableTopP": false,
                    "EnableTopK": false,
                    "EnableTemperature": false
                }
            }
        }
    },
    "Agent": {
        "Agents": {
            "frontend": {
                "AgentName": "前端工程",
                "AgentDescription": "前端工程Agent",
                "AgentPrompt": "你是一个前端工程师,请根据用户的需求,提供前端工程解决方案。",
                "AgentModel": 1,
                "AutoApprove": "",
                "AutoReject": ""
            }
        },
        "GlobalPrompt": "始终使用中文回答",
        "SummaryModel": 1,
        "MaxCallCount": 50,
        "AutoApprove": "",
        "AutoReject": ""
    },
    "ThemeID": 0,
    "Server": {
        "Key": "<你的 webcsocket key>",
        "Path": "/acp",
        "Host": "127.0.0.1",
        "Port": 7433,
        "DisableStdioServer": false
    }
}

客户端

配置完上述 json 后直接启动主程序,服务端会在 ws://<host>:<port>/<path> 开启一个 websocket 服务。此时服务端同时会启动一个标准的 stdio 服务器便于调试。

服务端使用 Query 参照认证。在 Query 参数中添加 key=<key> 即可。如果没有 Query 参数选项,则可以在 Path 中设置 /acp?k=<key>

支持 Websocket 桥接的客户端可以直接链接。只支持 stdio 的客户端可以使用提供的 helper 链接。注意:由于 ACP 规范并未明确标注 websocket 的具体连接协议内容,因此其存在一定兼容性问题。

目前 helper 只支持 ws,不支持 wss

可以通过 ./可执行文件 acp 启动服务端内置 helper。如果你需要轻量化部署并链接到远程,则可以使用单独的 helper 可执行文件并不带任何参数启动。如果你使用 go install 安装,则服务器绑定到了 alkaid0,单独的 helper 可以使用 alk 命令。

helper 会自动读取本机的 ~/.config/alkaid0/config.json 或系统级配置文件 /etc/alkaid0/config.json (linux) 和 C:\ProgramData\alkaid0\config.json (windows) 并自动链接,一般本机无需再次手动配置 key。

如果你需要链接到远程或自动链接无效,可以使用以下参数:

  • -config 配置文件路径
  • -host 服务器的 host
  • -port 服务器的 port
  • -path 服务器的 path
  • -key 服务器配置的 websocket key

如果你无法链接请检查是否在服务端和客户端都设置了 Key。服务端空 key 启动会自动生成一个随机秘钥并写入配置。

如果内置的 stdio 导致服务器自动退出或其它问题,则可在 config.json 中设置 DisableStdioServertrue 以禁用。

不要在用户目录或者根目录运行 Alkaid!

平台支持

  • Linux (amd64,arm64) (binary,deb,rpm,apk,archlinux)
  • Windows (amd64) (binary,msix)
  • MacOS (实验性amd64,实验性arm64)(沙盒除外) (binary)

注意:模型引擎尚未警告充分测试!

本 Release 仅供测试,不代表任何效果!不要在生产环境使用!

--- alkaid0 启航 ---

日志位于配置文件同目录 log.log,经过简单脱敏,会包含您的聊天记录!提交前请手动审计!

v0.3.0

v0.3.0 Pre-release
Pre-release

Choose a tag to compare

@cxykevin cxykevin released this 26 Jul 03:44

本 Release 作为 Development Techology Preview Level 1 的一部分发布。

本版本修复了自动批准拒绝系统的 bug,并实现了上下文引擎的第一步----提示词优化。引入了简易模型引擎。

安装

# Linux
curl -sSL https://alk.cxykevin.top/i.sh | bash
# Windows
irm https://alk.cxykevin.top/i.ps1 | iex

配置

路径

# 从二进制文件启动
~/.config/alkaid0/config.json
# Linux 软件包安装版本
/etc/alkaid0/config.json
# Windows 软件包安装版本
C:\ProgramData\alkaid0\config.json
{
    "$schema": "https://raw.githubusercontent.com/cxykevin/alkaid0/refs/heads/main/docs/schemas/config.json",
    "Version": 1,
    "Model": {
        "ProviderURL": "https://openrouter.com/api/v1(这里暂时没有用)",
        "ProviderKey": "sk-or-xxx(这里暂时没有用)",
        "DefaultModelID": 1,
        "Models": {
            "1": {
                "ModelName": "模型名",
                "ModelID": "模型ID",
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true,
                "CompressSize": 128000,
                "ProviderSpecificConfig": {
                    "EnableDeepseekThinking": false,
                    "EnableReasoningEffort": true,
                    "EnableTopP": false,
                    "EnableTopK": false,
                    "EnableTemperature": false
                }
            }
        }
    },
    "Agent": {
        "Agents": {
            "frontend": {
                "AgentName": "前端工程",
                "AgentDescription": "前端工程Agent",
                "AgentPrompt": "你是一个前端工程师,请根据用户的需求,提供前端工程解决方案。",
                "AgentModel": 1,
                "AutoApprove": "",
                "AutoReject": ""
            }
        },
        "GlobalPrompt": "始终使用中文回答",
        "SummaryModel": 1,
        "MaxCallCount": 50,
        "AutoApprove": "",
        "AutoReject": ""
    },
    "ThemeID": 0,
    "Server": {
        "Key": "<你的 webcsocket key>",
        "Path": "/acp",
        "Host": "127.0.0.1",
        "Port": 7433,
        "DisableStdioServer": false
    }
}

客户端

配置完上述 json 后直接启动主程序,服务端会在 ws://<host>:<port>/<path> 开启一个 websocket 服务。此时服务端同时会启动一个标准的 stdio 服务器便于调试。

服务端使用 Query 参照认证。在 Query 参数中添加 key=<key> 即可。如果没有 Query 参数选项,则可以在 Path 中设置 /acp?k=<key>

支持 Websocket 桥接的客户端可以直接链接。只支持 stdio 的客户端可以使用提供的 helper 链接。注意:由于 ACP 规范并未明确标注 websocket 的具体连接协议内容,因此其存在一定兼容性问题。

目前 helper 只支持 ws,不支持 wss

可以通过 ./可执行文件 acp 启动服务端内置 helper。如果你需要轻量化部署并链接到远程,则可以使用单独的 helper 可执行文件并不带任何参数启动。如果你使用 go install 安装,则服务器绑定到了 alkaid0,单独的 helper 可以使用 alk 命令。

helper 会自动读取本机的 ~/.config/alkaid0/config.json 或系统级配置文件 /etc/alkaid0/config.json (linux) 和 C:\ProgramData\alkaid0\config.json (windows) 并自动链接,一般本机无需再次手动配置 key。

如果你需要链接到远程或自动链接无效,可以使用以下参数:

  • -config 配置文件路径
  • -host 服务器的 host
  • -port 服务器的 port
  • -path 服务器的 path
  • -key 服务器配置的 websocket key

如果你无法链接请检查是否在服务端和客户端都设置了 Key。服务端空 key 启动会自动生成一个随机秘钥并写入配置。

如果内置的 stdio 导致服务器自动退出或其它问题,则可在 config.json 中设置 DisableStdioServertrue 以禁用。

不要在用户目录或者根目录运行 Alkaid!

平台支持

  • Linux (amd64,arm64) (binary,deb,rpm,apk,archlinux)
  • Windows (amd64) (binary,msix)
  • MacOS (实验性amd64,实验性arm64)(沙盒除外) (binary)

注意:模型引擎尚未警告充分测试!

本 Release 仅供测试,不代表任何效果!不要在生产环境使用!

--- alkaid0 启航 ---

日志位于配置文件同目录 log.log,经过简单脱敏,会包含您的聊天记录!提交前请手动审计!

v0.2.11

v0.2.11 Pre-release
Pre-release

Choose a tag to compare

@cxykevin cxykevin released this 19 Jul 11:46

本 Release 作为 Development Techology Preview Level 1 的一部分发布。

本版本修复了自动拒绝系统在主会话中失效的 bug,新增 ignoreSignals 配置开关,并修复了跨平台测试兼容性。

安装

# Linux
curl -sSL https://alk.cxykevin.top/i.sh | bash
# Windows
irm https://alk.cxykevin.top/i.ps1 | iex

v0.2.11 更新日志

Fixes

  • 自动拒绝变成手动批准: 内置 reject.expr(如禁止编辑 .env)在主会话中从未真正生效为自动拒绝。CanAutoApprove 返回 false 时存在歧义(reject 匹配 / approve 不匹配),AutoHandlePendingToolCalls 仅对 sub-agent 执行自动拒绝。修复后 reject 规则命中时返回非空 reason,主会话也能正确自动拒绝,并修复了可能的重复 StopReasonModel 回调。
  • TestSetWorkDir 跨平台兼容: 修复 macOS/Windows CI 上硬编码 /tmp 导致测试失败的问题,改用 os.TempDir()filepath.Clean
  • Windows CI 编译修复: 拆分 sandbox_isolate_none.go 为平台文件,解决 syscall.Getpgid/Kill 在 Windows 上未定义问题。

Features

  • ignoreSignals 配置开关: 新增 Config.IgnoreSignals 字段,为 true 时跳过信号处理(SIGTERM/SIGINT/SIGQUIT)注册,适用于容器化等不需要信号管理的场景。
  • session/list_models ACP 方法: 新增 ACP 扩展方法 alk.cxykevin.top/session/list_models,支持客户端查询会话可用的模型列表。

Refactor

  • Sandbox 测试精简: 精简重构 sandbox_test.go,提升可读性;修复 OS 隔离测试中 btrfs 子卷路径权限问题,所有 OS 隔离测试设置 WorkDir=/tmp,相对路径测试改用 filepath.Rel 动态计算。

本次更新由 Deepseek V4 Flash 完成全程编写。使用 Claude Code 进行,alkaid0 完成了部分辅助工作。期待 alkaid0 能早日完成自举!

从 v0.1.0 的迁移指南

参考下面的配置补齐 Server 字段即可。

程序不再内置客户端,需要自行安装任意 ACP 客户端(如 multicoder,ACP UI 等)使用!配置请参考下方 客户端 内说明配置。

在启动客户端前,你需要预先启动服务器(不带任何参数启动)!

配置

路径

# 从二进制文件启动
~/.config/alkaid0/config.json
# Linux 软件包安装版本
/etc/alkaid0/config.json
# Windows 软件包安装版本
C:\ProgramData\alkaid0\config.json
{
    "$schema": "https://raw.githubusercontent.com/cxykevin/alkaid0/refs/heads/main/docs/schemas/config.json",
    "Version": 1,
    "Model": {
        "ProviderURL": "https://openrouter.com/api/v1(这里暂时没有用)",
        "ProviderKey": "sk-or-xxx(这里暂时没有用)",
        "DefaultModelID": 1,
        "Models": {
            "1": {
                "ModelName": "模型名",
                "ModelID": "模型ID",
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true,
                "CompressSize": 128000,
                "ProviderSpecificConfig": {
                    "EnableDeepseekThinking": false,
                    "EnableReasoningEffort": true,
                    "EnableTopP": false,
                    "EnableTopK": false,
                    "EnableTemperature": false
                }
            }
        }
    },
    "Agent": {
        "Agents": {
            "frontend": {
                "AgentName": "前端工程",
                "AgentDescription": "前端工程Agent",
                "AgentPrompt": "你是一个前端工程师,请根据用户的需求,提供前端工程解决方案。",
                "AgentModel": 1,
                "AutoApprove": "",
                "AutoReject": ""
            }
        },
        "GlobalPrompt": "始终使用中文回答",
        "SummaryModel": 1,
        "MaxCallCount": 50,
        "AutoApprove": "",
        "AutoReject": ""
    },
    "ThemeID": 0,
    "Server": {
        "Key": "<你的 webcsocket key>",
        "Path": "/acp",
        "Host": "127.0.0.1",
        "Port": 7433,
        "DisableStdioServer": false
    }
}

客户端

配置完上述 json 后直接启动主程序,服务端会在 ws://<host>:<port>/<path> 开启一个 websocket 服务。此时服务端同时会启动一个标准的 stdio 服务器便于调试。

服务端使用 Query 参照认证。在 Query 参数中添加 key=<key> 即可。如果没有 Query 参数选项,则可以在 Path 中设置 /acp?k=<key>

支持 Websocket 桥接的客户端可以直接链接。只支持 stdio 的客户端可以使用提供的 helper 链接。注意:由于 ACP 规范并未明确标注 websocket 的具体连接协议内容,因此其存在一定兼容性问题。

目前 helper 只支持 ws,不支持 wss

可以通过 ./可执行文件 acp 启动服务端内置 helper。如果你需要轻量化部署并链接到远程,则可以使用单独的 helper 可执行文件并不带任何参数启动。如果你使用 go install 安装,则服务器绑定到了 alkaid0,单独的 helper 可以使用 alk 命令。

helper 会自动读取本机的 ~/.config/alkaid0/config.json 或系统级配置文件 /etc/alkaid0/config.json (linux) 和 C:\ProgramData\alkaid0\config.json (windows) 并自动链接,一般本机无需再次手动配置 key。

如果你需要链接到远程或自动链接无效,可以使用以下参数:

  • -config 配置文件路径
  • -host 服务器的 host
  • -port 服务器的 port
  • -path 服务器的 path
  • -key 服务器配置的 websocket key

如果你无法链接请检查是否在服务端和客户端都设置了 Key。服务端空 key 启动会自动生成一个随机秘钥并写入配置。

如果内置的 stdio 导致服务器自动退出或其它问题,则可在 config.json 中设置 DisableStdioServertrue 以禁用。

不要在用户目录或者根目录运行 Alkaid!

平台支持

  • Linux (amd64,arm64) (binary,deb,rpm,apk,archlinux)
  • Windows (amd64) (binary,msix)
  • MacOS (实验性amd64,实验性arm64)(沙盒除外) (binary)

本 Release 仅供测试,不代表任何效果!不要在生产环境使用!

--- alkaid0 启航 ---

日志位于配置文件同目录 log.log,经过简单脱敏,会包含您的聊天记录!提交前请手动审计!

v0.2.10

v0.2.10 Pre-release
Pre-release

Choose a tag to compare

@cxykevin cxykevin released this 14 Jul 10:39

v0.2.10

本 Release 作为 Development Techology Preview Level 1 的一部分发布。

本版本重构了 sandbox 进程管理和 run 超时机制,优化 git 全局 ignore 初始化,并修复了 Windows 和 vet 编译问题。

安装

# Linux
curl -sSL https://alk.cxykevin.top/i.sh | bash
# Windows
irm https://alk.cxykevin.top/i.ps1 | iex

v0.2.10 更新日志

Refactor

  • Sandbox 进程管理重构:
    • Unix Kill 优先杀进程组防止孤儿进程残留
    • 工作目录加入默认可写白名单
    • Linux 隔离模式设置 Setpgid 并传递真实用户名
    • chroot 环境伪造 /etc/passwd 使 whoami 输出正确
  • Run 超时机制重构:
    • 默认 timeout 改为 0(无超时,由 session cancel 控制)
    • 环境变量增加 PAGER/GIT_PAGER 防命令挂起
    • PTY 模式 context 取消监听延后启动,取消时关闭 master 解除 io.Copy 阻塞
  • Loop 停止逻辑重构:
    • 增加 stopped 标记,Stop() 后跳过 AI 交互并返回 StopReasonUser
    • 防止 cancel 后 AI 继续重试
    • SessionCancel drain waitStopChan 使停止信号立即送达
  • 测试增强:
    • 新增多组超时/取消 hang 测试
    • 清理只读测试路径写法

Features

  • git ignore 初始化优化: 优先尝试 --system 再回退 --global,失败时静默写日志继续

Fixes

  • Windows 编译修复: 拆分 sandbox_isolate_none.go 为平台文件,解决 syscall.Getpgid/Kill 在 Windows 上未定义问题
  • go vet 锁拷贝警告: 修复 Chats 结构体中 sync.Mutex 导致的值拷贝问题

本次更新由 Deepseek V4 Flash 完成全程编写。使用 Claude Code 进行,alkaid0 完成了部分辅助工作。期待 alkaid0 能早日完成自举!

从 v0.1.0 的迁移指南

参考下面的配置补齐 Server 字段即可。

程序不再内置客户端,需要自行安装任意 ACP 客户端(如 multicoder,ACP UI 等)使用!配置请参考下方 客户端 内说明配置。

在启动客户端前,你需要预先启动服务器(不带任何参数启动)!

配置

路径

# 从二进制文件启动
~/.config/alkaid0/config.json
# Linux 软件包安装版本
/etc/alkaid0/config.json
# Windows 软件包安装版本
C:\ProgramData\alkaid0\config.json
{
    "$schema": "https://raw.githubusercontent.com/cxykevin/alkaid0/refs/heads/main/docs/schemas/config.json",
    "Version": 1,
    "Model": {
        "ProviderURL": "https://openrouter.com/api/v1(这里暂时没有用)",
        "ProviderKey": "sk-or-xxx(这里暂时没有用)",
        "DefaultModelID": 1,
        "Models": {
            "1": {
                "ModelName": "模型名",
                "ModelID": "模型ID",
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true, 
                "CompressSize": 128000,
                "ProviderSpecificConfig": {
                    "EnableDeepseekThinking": false,
                    "EnableReasoningEffort": true,
                    "EnableTopP": false,
                    "EnableTopK": false,
                    "EnableTemperature": false
                }
            }
        }
    },
    "Agent": {
        "Agents": {
            "frontend": {
                "AgentName": "前端工程",
                "AgentDescription": "前端工程Agent",
                "AgentPrompt": "你是一个前端工程师,请根据用户的需求,提供前端工程解决方案。",
                "AgentModel": 1,
                "AutoApprove": "",
                "AutoReject": ""
            }
        },
        "GlobalPrompt": "始终使用中文回答",
        "SummaryModel": 1,
        "MaxCallCount": 50,
        "AutoApprove": "",
        "AutoReject": ""
    },
    "ThemeID": 0,
    "Server": {
        "Key": "<你的 webcsocket key>",
        "Path": "/acp",
        "Host": "127.0.0.1",
        "Port": 7433,
        "DisableStdioServer": false
    }
}

客户端

配置完上述 json 后直接启动主程序,服务端会在 ws://<host>:<port>/<path> 开启一个 websocket 服务。此时服务端同时会启动一个标准的 stdio 服务器便于调试。

服务端使用 Query 参照认证。在 Query 参数中添加 key=<key> 即可。如果没有 Query 参数选项,则可以在 Path 中设置 /acp?k=<key>

支持 Websocket 桥接的客户端可以直接链接。只支持 stdio 的客户端可以使用提供的 helper 链接。注意:由于 ACP 规范并未明确标注 websocket 的具体连接协议内容,因此其存在一定兼容性问题。

目前 helper 只支持 ws,不支持 wss

可以通过 ./可执行文件 acp 启动服务端内置 helper。如果你需要轻量化部署并链接到远程,则可以使用单独的 helper 可执行文件并不带任何参数启动。如果你使用 go install 安装,则服务器绑定到了 alkaid0,单独的 helper 可以使用 alk 命令。

helper 会自动读取本机的 ~/.config/alkaid0/config.json 或系统级配置文件 /etc/alkaid0/config.json (linux) 和 C:\ProgramData\alkaid0\config.json (windows) 并自动链接,一般本机无需再次手动配置 key。

如果你需要链接到远程或自动链接无效,可以使用以下参数:

  • -config 配置文件路径
  • -host 服务器的 host
  • -port 服务器的 port
  • -path 服务器的 path
  • -key 服务器配置的 websocket key

如果你无法链接请检查是否在服务端和客户端都设置了 Key。服务端空 key 启动会自动生成一个随机秘钥并写入配置。

如果内置的 stdio 导致服务器自动退出或其它问题,则可在 config.json 中设置 DisableStdioServertrue 以禁用。

不要在用户目录或者根目录运行 Alkaid!

平台支持

  • Linux (amd64,arm64) (binary,deb,rpm,apk,archlinux)
  • Windows (amd64) (binary,msix)
  • MacOS (实验性amd64,实验性arm64)(沙盒除外) (binary)

本 Release 仅供测试,不代表任何效果!不要在生产环境使用!

--- alkaid0 启航 ---

日志位于配置文件同目录 log.log,经过简单脱敏,会包含您的聊天记录!提交前请手动审计!

v0.2.9

v0.2.9 Pre-release
Pre-release

Choose a tag to compare

@cxykevin cxykevin released this 12 Jul 05:08

v0.2.9

本 Release 作为 Development Techology Preview Level 1 的一部分发布。

本版本为 v0.2.8 的修复。

安装

# Linux
curl -sSL https://alk.cxykevin.top/i.sh | bash
# Windows
irm https://alk.cxykevin.top/i.ps1 | iex

v0.2.9 修复

修复了系统服务启动失败和自动审批无效的问题。

v0.2.8 更新日志

Features

  • PTY 命令执行: 重构命令执行系统,Linux 和 Unix 集成 PTY 终端,Windows ConPTY 由于在服务模式下无法使用故退回至管道,提升命令执行体验和兼容性
  • 会话断连延迟释放: 新增 SessionTimeout 配置(默认 60s),连接断开后延迟释放会话资源;支持后台运行模式(/background on),断连期间仍可保持活跃处理
  • 配置热加载 RPC: 新增 alk.cxykevin.top/config/getconfig/set RPC 方法,支持运行时读写全局配置,变更自动广播到所有会话
  • 命令重命名: /reasoning 命令重命名为 /effort,语义更清晰,支持 unset 参数提升供应商兼容性

Stability & Performance

  • 数据竞争修复: 全面修复多处数据竞争问题,包括 session Context 指针包装、timer callback 竞态、goroutine 泄漏
  • 优雅关闭: 实现 signal.NotifyContext 信号处理(SIGTERM/SIGINT/SIGQUIT)、显式 HTTP Server Shutdown、连接 semaphore 并发控制
  • Panic→Error 转换: 将 prompts/utils、HookTool、SubAgent consumer 等多处的 panic 路径转为 error 返回,提升系统健壮性

Testing

  • 测试覆盖率大幅提升: 80+ 新增测试函数,涉及 14 个包,总计 2683 行新增测试代码
    • provider/request/agents: 85.6%(新增 17 个测试)
    • storage/structs: 94.1%
    • mock/openai: 38.7% → 72.6%
    • ui/loop: 22.3% → 51.4%(启用 mock 服务器集成测试)
    • server/actions: 40.9% → 59.6%
    • terminal/pty: 39.7% → 64.7%
  • CI 增强: GitHub Actions 新增 go vetgo test -race 步骤
  • 测试基础设施: mock OpenAI 服务新增流式响应、thinking 标签、边缘用例测试

Chore

  • 调整系统提示词中的身份与动机设定
  • 提示词加入 Co-Authored-By 署名
  • ChanCall 缓冲区优化 64 → 4096,增加 recover 保护

本次更新由 Deepseek V4 Flash 完成全程编写。使用 Claude Code 进行。期待 alkaid0 能早日完成自举!

从 v0.1.0 的迁移指南

参考下面的配置补齐 Server 字段即可。

程序不再内置客户端,需要自行安装任意 ACP 客户端(如 multicoder,ACP UI 等)使用!配置请参考下方 客户端 内说明配置。

在启动客户端前,你需要预先启动服务器(不带任何参数启动)!

配置

路径

# 从二进制文件启动
~/.config/alkaid0/config.json
# Linux 软件包安装版本
/etc/alkaid0/config.json
# Windows 软件包安装版本
C:\ProgramData\alkaid0\config.json
{
    "$schema": "https://raw.githubusercontent.com/cxykevin/alkaid0/refs/heads/main/docs/schemas/config.json",
    "Version": 1,
    "Model": {
        "ProviderURL": "https://openrouter.com/api/v1(这里暂时没有用)",
        "ProviderKey": "sk-or-xxx(这里暂时没有用)",
        "DefaultModelID": 1,
        "Models": {
            "1": {
                "ModelName": "模型名",
                "ModelID": "模型ID",
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true, 
                "CompressSize": 128000,
                "ProviderSpecificConfig": {
                    "EnableDeepseekThinking": false,
                    "EnableReasoningEffort": true,
                    "EnableTopP": false,
                    "EnableTopK": false,
                    "EnableTemperature": false
                }
            }
        }
    },
    "Agent": {
        "Agents": {
            "frontend": {
                "AgentName": "前端工程",
                "AgentDescription": "前端工程Agent",
                "AgentPrompt": "你是一个前端工程师,请根据用户的需求,提供前端工程解决方案。",
                "AgentModel": 1,
                "AutoApprove": "",
                "AutoReject": ""
            }
        },
        "GlobalPrompt": "始终使用中文回答",
        "SummaryModel": 1,
        "MaxCallCount": 50,
        "AutoApprove": "",
        "AutoReject": ""
    },
    "ThemeID": 0,
    "Server": {
        "Key": "<你的 webcsocket key>",
        "Path": "/acp",
        "Host": "127.0.0.1",
        "Port": 7433,
        "DisableStdioServer": false
    }
}

客户端

配置完上述 json 后直接启动主程序,服务端会在 ws://<host>:<port>/<path> 开启一个 websocket 服务。此时服务端同时会启动一个标准的 stdio 服务器便于调试。

服务端使用 Query 参照认证。在 Query 参数中添加 key=<key> 即可。如果没有 Query 参数选项,则可以在 Path 中设置 /acp?k=<key>

支持 Websocket 桥接的客户端可以直接链接。只支持 stdio 的客户端可以使用提供的 helper 链接。注意:由于 ACP 规范并未明确标注 websocket 的具体连接协议内容,因此其存在一定兼容性问题。

目前 helper 只支持 ws,不支持 wss

可以通过 ./可执行文件 acp 启动服务端内置 helper。如果你需要轻量化部署并链接到远程,则可以使用单独的 helper 可执行文件并不带任何参数启动。如果你使用 go install 安装,则服务器绑定到了 alkaid0,单独的 helper 可以使用 alk 命令。

helper 会自动读取本机的 ~/.config/alkaid0/config.json 或系统级配置文件 /etc/alkaid0/config.json (linux) 和 C:\ProgramData\alkaid0\config.json (windows) 并自动链接,一般本机无需再次手动配置 key。

如果你需要链接到远程或自动链接无效,可以使用以下参数:

  • -config 配置文件路径
  • -host 服务器的 host
  • -port 服务器的 port
  • -path 服务器的 path
  • -key 服务器配置的 websocket key

如果你无法链接请检查是否在服务端和客户端都设置了 Key。服务端空 key 启动会自动生成一个随机秘钥并写入配置。

如果内置的 stdio 导致服务器自动退出或其它问题,则可在 config.json 中设置 DisableStdioServertrue 以禁用。

不要在用户目录或者根目录运行 Alkaid!

平台支持

  • Linux (amd64,arm64) (binary,deb,rpm,apk,archlinux)
  • Windows (amd64) (binary,msix)
  • MacOS (实验性amd64,实验性arm64)(沙盒除外) (binary)

本 Release 仅供测试,不代表任何效果!不要在生产环境使用!

--- alkaid0 启航 ---

日志位于配置文件同目录 log.log,经过简单脱敏,会包含您的聊天记录!提交前请手动审计!

v0.2.8

v0.2.8 Pre-release
Pre-release

Choose a tag to compare

@cxykevin cxykevin released this 11 Jul 15:39

v0.2.8

本 Release 作为 Development Techology Preview Level 1 的一部分发布。

安装

# Linux
curl -sSL https://alk.cxykevin.top/i.sh | bash
# Windows
irm https://alk.cxykevin.top/i.ps1 | iex

更新日志

Features

  • PTY 命令执行: 重构命令执行系统,Linux 和 Unix 集成 PTY 终端,Windows ConPTY 由于在服务模式下无法使用故退回至管道,提升命令执行体验和兼容性
  • 会话断连延迟释放: 新增 SessionTimeout 配置(默认 60s),连接断开后延迟释放会话资源;支持后台运行模式(/background on),断连期间仍可保持活跃处理
  • 配置热加载 RPC: 新增 alk.cxykevin.top/config/getconfig/set RPC 方法,支持运行时读写全局配置,变更自动广播到所有会话
  • 命令重命名: /reasoning 命令重命名为 /effort,语义更清晰,支持 unset 参数提升供应商兼容性

Stability & Performance

  • 数据竞争修复: 全面修复多处数据竞争问题,包括 session Context 指针包装、timer callback 竞态、goroutine 泄漏
  • 优雅关闭: 实现 signal.NotifyContext 信号处理(SIGTERM/SIGINT/SIGQUIT)、显式 HTTP Server Shutdown、连接 semaphore 并发控制
  • Panic→Error 转换: 将 prompts/utils、HookTool、SubAgent consumer 等多处的 panic 路径转为 error 返回,提升系统健壮性

Testing

  • 测试覆盖率大幅提升: 80+ 新增测试函数,涉及 14 个包,总计 2683 行新增测试代码
    • provider/request/agents: 85.6%(新增 17 个测试)
    • storage/structs: 94.1%
    • mock/openai: 38.7% → 72.6%
    • ui/loop: 22.3% → 51.4%(启用 mock 服务器集成测试)
    • server/actions: 40.9% → 59.6%
    • terminal/pty: 39.7% → 64.7%
  • CI 增强: GitHub Actions 新增 go vetgo test -race 步骤
  • 测试基础设施: mock OpenAI 服务新增流式响应、thinking 标签、边缘用例测试

Chore

  • 调整系统提示词中的身份与动机设定
  • 提示词加入 Co-Authored-By 署名
  • ChanCall 缓冲区优化 64 → 4096,增加 recover 保护

本次更新由 Deepseek V4 Flash 完成全程编写。使用 Claude Code 进行。期待 alkaid0 能早日完成自举!

从 v0.1.0 的迁移指南

参考下面的配置补齐 Server 字段即可。

程序不再内置客户端,需要自行安装任意 ACP 客户端(如 multicoder,ACP UI 等)使用!配置请参考下方 客户端 内说明配置。

在启动客户端前,你需要预先启动服务器(不带任何参数启动)!

配置

路径

# 从二进制文件启动
~/.config/alkaid0/config.json
# Linux 软件包安装版本
/etc/alkaid0/config.json
# Windows 软件包安装版本
C:\ProgramData\alkaid0\config.json
{
    "$schema": "https://raw.githubusercontent.com/cxykevin/alkaid0/refs/heads/main/docs/schemas/config.json",
    "Version": 1,
    "Model": {
        "ProviderURL": "https://openrouter.com/api/v1(这里暂时没有用)",
        "ProviderKey": "sk-or-xxx(这里暂时没有用)",
        "DefaultModelID": 1,
        "Models": {
            "1": {
                "ModelName": "模型名",
                "ModelID": "模型ID",
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true, 
                "CompressSize": 128000,
                "ProviderSpecificConfig": {
                    "EnableDeepseekThinking": false,
                    "EnableReasoningEffort": true,
                    "EnableTopP": false,
                    "EnableTopK": false,
                    "EnableTemperature": false
                }
            }
        }
    },
    "Agent": {
        "Agents": {
            "frontend": {
                "AgentName": "前端工程",
                "AgentDescription": "前端工程Agent",
                "AgentPrompt": "你是一个前端工程师,请根据用户的需求,提供前端工程解决方案。",
                "AgentModel": 1,
                "AutoApprove": "",
                "AutoReject": ""
            }
        },
        "GlobalPrompt": "始终使用中文回答",
        "SummaryModel": 1,
        "MaxCallCount": 50,
        "AutoApprove": "",
        "AutoReject": ""
    },
    "ThemeID": 0,
    "Server": {
        "Key": "<你的 webcsocket key>",
        "Path": "/acp",
        "Host": "127.0.0.1",
        "Port": 7433,
        "DisableStdioServer": false
    }
}

客户端

配置完上述 json 后直接启动主程序,服务端会在 ws://<host>:<port>/<path> 开启一个 websocket 服务。此时服务端同时会启动一个标准的 stdio 服务器便于调试。

服务端使用 Query 参照认证。在 Query 参数中添加 key=<key> 即可。如果没有 Query 参数选项,则可以在 Path 中设置 /acp?k=<key>

支持 Websocket 桥接的客户端可以直接链接。只支持 stdio 的客户端可以使用提供的 helper 链接。注意:由于 ACP 规范并未明确标注 websocket 的具体连接协议内容,因此其存在一定兼容性问题。

目前 helper 只支持 ws,不支持 wss

可以通过 ./可执行文件 acp 启动服务端内置 helper。如果你需要轻量化部署并链接到远程,则可以使用单独的 helper 可执行文件并不带任何参数启动。如果你使用 go install 安装,则服务器绑定到了 alkaid0,单独的 helper 可以使用 alk 命令。

helper 会自动读取本机的 ~/.config/alkaid0/config.json 或系统级配置文件 /etc/alkaid0/config.json (linux) 和 C:\ProgramData\alkaid0\config.json (windows) 并自动链接,一般本机无需再次手动配置 key。

如果你需要链接到远程或自动链接无效,可以使用以下参数:

  • -config 配置文件路径
  • -host 服务器的 host
  • -port 服务器的 port
  • -path 服务器的 path
  • -key 服务器配置的 websocket key

如果你无法链接请检查是否在服务端和客户端都设置了 Key。服务端空 key 启动会自动生成一个随机秘钥并写入配置。

如果内置的 stdio 导致服务器自动退出或其它问题,则可在 config.json 中设置 DisableStdioServertrue 以禁用。

不要在用户目录或者根目录运行 Alkaid!

平台支持

  • Linux (amd64,arm64) (binary,deb,rpm,apk,archlinux)
  • Windows (amd64) (binary,msix)
  • MacOS (实验性amd64,实验性arm64)(沙盒除外) (binary)

本 Release 仅供测试,不代表任何效果!不要在生产环境使用!

--- alkaid0 启航 ---

日志位于配置文件同目录 log.log,经过简单脱敏,会包含您的聊天记录!提交前请手动审计!

v0.2.7

v0.2.7 Pre-release
Pre-release

Choose a tag to compare

@cxykevin cxykevin released this 08 Jul 14:07

v0.2.7

本 Release 作为 Development Techology Preview Level 1 的一部分发布。

本版本为 v0.2.6 的紧急修复。

安装

# Linux
curl -sSL https://alk.cxykevin.top/i.sh | bash
# Windows
irm https://alk.cxykevin.top/i.ps1 | iex

v0.2.7 紧急修复

紧急修复了 Filesystem Over ACP 的 Windows 的跨平台编译问题。

go fix && go fmt 了代码

v0.2.6 更新日志

概述

本次变更合并了安全审计报告的 bug 修复(P0/P1/P2)、内容大小限制的新功能以及 LLM 请求重试机制。涉及 18 个文件,共约 ~345 行插入、~87 行删除


1. 安全修复

P0 — AI 模型可触发恐慌(DoS/崩溃)
文件 变更 严重性
provider/parser/parser.go JSON 流式解析器中添加 4 处 nil 判空:toolNameOrigintoolCallIDOrigintoolParametersOrigin 及参数 value 可能为 null。同时处理 jsonParser.AddToken() 的 error 返回值 模型发送 {"name":null} 等畸形 JSON 即可触发 nil 指针 panic
tools/tools/edit/edit.go @insert:{lineNum} 增加 lineNum < 1 下界校验,防止 AI 传入 0 或负数时 panic @insert:0 即可崩溃
P0 — Tree 工具路径遍历 / 敏感文件泄露
文件 变更 严重性
tools/tools/tree/files.go 敏感文件防护:扩展 dirBlacklistsOrigin 列表(.env、.ssh、.aws/.gcp/.azure/.kube/.docker 配置、证书密钥文件);新增 sensitiveFilePatterns(20 条正则匹配 .pem/.key/.cert/credentials 等);新增 isSensitivePath() 函数在 Delete/Move 前预检拒绝 阻止 AI 删除/移动 SSH 密钥、云凭证、TLS 证书、K8s 配置等
tools/tools/tree/files.go 修复 7 处 filepath.Join 参数顺序错误(d.Target, pathpath, d.Target),此前导致 diff 操作的目标路径错误 Move/Copy 时路径拼接结果不符合预期
P1 — Linux 沙箱逃逸
文件 变更 严重性
terminal/sandbox/sandbox_linux.go generateWritableMounts() 中每个可写目录 bind mount 后,额外检查 .alkaid0 子目录并 remount ro,bind 保护 可写目录中的聊天记录/配置可被沙箱内进程篡改
P2 — 并发 map 无锁访问(fatal error: concurrent map writes)
文件 变更 严重性
server/actions/session.go bindedSessionOnConn map 新增 bindedSessionOnConnMu 互斥锁 多连接并发绑定/解绑 session 时 fatal
server/actions/main.go Close()bindedSessionOnConnclientConnCaps 加锁访问 服务关闭时并发写 map
server/actions/prompt.go SessionCancel()sessions map 补加 sessLock 取消 prompt 时与新建 session 并发读写冲突
server/actions/update.go updateCfgsToConns() 重写,分离 sessLock(读 sessions)与 sessionConnLock(读 sessionConnMap),释放锁后再广播 配置热更新时多锁嵌套 + 写 map
tools/tools.go ExecOneToolGetPrompts()maps.Copy 深拷贝 t.Parameters 后再合并到全局参数 多 session 并发执行工具时写同一个 map
server/client/jsonrpc/connect/stdio.go 新增 writeMu sync.Mutex 保护 fmt.Println 输出 多 goroutine 并发写 stdout 时输出交错
P2 — 正确性 Bug
文件 变更 严重性
server/actions/session.go loadSession() 移除 sess.ReferCount = 1(改用 obj.referCnt 独家计数);closeSession()obj.session.ReferCount-- 改为 obj.referCnt-- 双计数器不一致导致 session 提前释放或泄漏
ui/loop/loop.go call() 函数中 recvSyncQueue send/recv 改为 select { case ...: case <-p.done: },防止 Cancel 后永久阻塞 Cancel 后的响应卡死主循环
tools/tools/edit/edit.go g 模式正则替换从 ReplaceAllString 改为 FindStringIndex + 手动替换;@ln:{from}-{to} 增加 from > to 校验 非全局替换实际执行了全替换;范围倒置未拒绝
prompts/prompts/delta_wrap.md 模板条件 eqne,修复 <think>/<tools> 包裹逻辑 本应在有内容时才包裹标签,实际在空内容时才包裹(导致工具调用丢失)
server/actions/fs.go fs 超时从 time.After 改为 context.WithTimeout + ctx.Done() time.After 无 cancel 机制,goroutine 泄漏
helper/helper.go stdin 首字节判换行改为 bytes.TrimLeft 完整清除 仅检查首字节导致换行为首的读块被整块丢弃

2. 新功能:FsRead/FsWrite 改进

文件 变更
server/actions/fs.go 1MB 内容限制FsWrite 中解码 content 后检查 len(content) > maxFileContentSize,超出返回明确错误
server/actions/fs.go 静默 EOF 截断FsRead 新增 f.Stat() 获取文件大小;offset 超出文件大小时返回空;offset+length 超出时自动截断到文件结尾
docs/acp/fs.md 新增 Content Size Limit 小节;FsRead 补充静默截断行为;FsWrite 补充 1MB 上限说明

3. 新功能:Loop 请求重试机制

文件 变更
ui/loop/loop.go 重试常量配置:新增 maxRetries = 3baseBackoff = 1s 作为包级 const
ui/loop/loop.go 指数退避重试:将 SendRequest 调用包装为 sendRequestWithRetry 闭包;失败时依次等待 1s→2s→4s 后重试,最多 3 次
ui/loop/loop.go 安全重试边界:仅在流式响应尚未开始(!responseStarted)时重试;已输出内容后失败不重试,避免客户端收到重复/混乱的流数据
ui/loop/loop.go 取消感知:退避期间同时监听 p.ctxresponseCtx,用户取消时立即跳过后续重试;context.Canceled/DeadlineExceeded 错误不触发重试
server/client/jsonrpc/server.go Set() 泛型函数中 u.Apply[T] 拆分调用并处理 error 返回值,带参错误时返回 invalid params 而非静默丢弃

本次更新由 Claude Opus 4.8 扫描,并由 Deepseek V4 Flash 完成全程编写。使用 Claude Code 进行。期待 alkaid0 能早日完成自举!

从 v0.1.0 的迁移指南

参考下面的配置补齐 Server 字段即可。

程序不再内置客户端,需要自行安装任意 ACP 客户端(如 multicoder,ACP UI 等)使用!配置请参考下方 客户端 内说明配置。

在启动客户端前,你需要预先启动服务器(不带任何参数启动)!

配置

路径 ~/.config/alkaid0/config.json

    "$schema": "https://raw.githubusercontent.com/cxykevin/alkaid0/refs/heads/main/docs/schemas/config.json",
    "Version": 1,
    "Model": {
        "ProviderURL": "https://openrouter.com/api/v1(这里暂时没有用)",
        "ProviderKey": "sk-or-xxx(这里暂时没有用)",
        "DefaultModelID": 1,
        "Models": {
            "1": {
                "ModelName": "模型名",
                "ModelID": "模型ID",
                "ProviderURL": "https://模型供应商/v1",
                "ProviderKey": "sk-模型密钥",
                "EnableThinking": true, 
                "CompressSize": 128000,
                "ProviderSpecificConfig": {
                    "EnableDeepseekThinking": false,
                    "EnableReasoningEffort": true,
                    "EnableTopP": false,
                    "EnableTopK": false,
                    "EnableTemperature": false
                }
            }
        }
    },
    "Agent": {
        "Agents": {
            "frontend": {
                "AgentName": "前端工程",
                "AgentDescription": "前端工程Agent",
                "AgentPrompt": "你是一个前端工程师,请根据用户的需求,提供前端工程解决方案。",
                "AgentModel": 1,
                "AutoApprove": "",
                "AutoReject": ""
            }
        },
        "GlobalPrompt": "始终使用中文回答",
        "SummaryModel": 1,
        "MaxCallCount": 50,
        "AutoApprove": "",
        "AutoReject": ""
    },
    "ThemeID": 0,
    "Server": {
        "Key": "<你的 webcsocket key>",
        "Path": "/acp",
        "Host": "127.0.0.1",
        "Port": 7433,
        "DisableStdioServer": false
    }
}

客户端

配置完上述 json 后直接启动主程序,服务端会在 ws://<host>:<port>/<path> 开启一个 websocket 服务。此时服务端同时会启动一个标准的 stdio 服务器便于调试。

服务端使用 Query 参照认证。在 Query 参数中添加 key=<key> 即可。如果没有 Query 参数选项,则可以在 Path 中设置 /acp?k=<key>

支持 Websocket 桥接的客户端可以直接链接。只支持 stdio 的客户端可以使用提供的 helper 链接。

目前 helper 只支持 ws,不支持 wss

可以通过 ./可执行文件 acp 启动服务端内置 helper。如果你需要轻量化部署并链接到远程,则可以使用单独的 helper 可执行文件并不带任何参数启动。如果你使用 go install 安装,则服务器绑定到了 alkaid0,单独的 helper 可以使用 alk 命令。

helper 会自动读取本机的 ~/.config/alkaid0/config.json 并自动链接,一般本机无需再次手动配置 key。

如果你需要链接到远程或自动链接无效,可以使用以下参数:

  • -config 配置文件路径
  • -host 服务器的 host
  • -port 服务器的 port
  • -path 服务器的 path
  • -key 服务器配置的 websocket key

如果你无法链接请检查是否在服务端和客户端都设置了 Key。服务端不允许空 key 启动(stdio 服务器正常工作)。

如果内置的 stdio 导致服务器自动退出或其它问题,则可在 config.json 中设置 DisableStdioServertrue 以禁用。

不要在用户目录或者根目录运行 Alkaid!

平台支持

  • Linux (amd64,arm64) (binary,deb,rpm,apk,archlinux)
  • Windows (amd64) (binary,msix)
  • MacOS (实验性amd64,实验性arm64)(沙盒除外) (binary)

本 Release 仅供测试,不代表任何效果!不要在生产环境使用!

--- alkaid0 启航 ---

日志位于配置文件同目录 log.log,经过简单脱敏,会包含您的聊天记录!提交前请手动审计!