Pinned
Unified Explanation Regarding the Issue of Unable to Invoke Tools
The primary reason tools cannot be invoked is that the model you're using isn't included in https://models.dev. You can search to see if your model exists. If it does exist, there might be an issue with the recorded capabilities for that model, indicating it doesn't support tool invocation. Alternatively, the model itself may inherently lack tool invocation capabilities, such as models in the Deepseek series. The current workaround is to locate the corresponding model within its Provider on the Settings page and manually enable its Tool Calling capability:

yetone 2 months ago
Feature Request
Pinned
Unified Explanation Regarding the Issue of Unable to Invoke Tools
The primary reason tools cannot be invoked is that the model you're using isn't included in https://models.dev. You can search to see if your model exists. If it does exist, there might be an issue with the recorded capabilities for that model, indicating it doesn't support tool invocation. Alternatively, the model itself may inherently lack tool invocation capabilities, such as models in the Deepseek series. The current workaround is to locate the corresponding model within its Provider on the Settings page and manually enable its Tool Calling capability:

yetone 2 months ago
Feature Request
支持设置回复使用飞书消息卡片并且流式更新
飞书卡片的流式更新能力是指飞书卡片的内容以实时或准实时的方式连续不断地更新,实现卡片逐步渲染的效果 https://open.feishu.cn/document/cardkit-v1/streaming-updates-openapi-overview

TinsFox 3 days ago
Feature Request
支持设置回复使用飞书消息卡片并且流式更新
飞书卡片的流式更新能力是指飞书卡片的内容以实时或准实时的方式连续不断地更新,实现卡片逐步渲染的效果 https://open.feishu.cn/document/cardkit-v1/streaming-updates-openapi-overview

TinsFox 3 days ago
Feature Request
Channles 中使用 claude-sonnet-4-5 模型报错
❌ 错误: AI_TypeValidationError: Type validation failed: Value: {"id":"98927801-df65-4c8e-b59f-d0b9afebd575","model":"claude-sonnet-4-5-20250929","object":"chat.completion.chunk"}. Error message: [ { "code": "invalid_union", "errors": [ [ { "expected": "array", "code": "invalid_type", "path": [ "choices" ], "message": "Invalid input: expected array, received undefined" } ], [ { "expected": "object", "code": "invalid_type", "path": [ "error" ], "message": "Invalid input: expected object, received undefined" } ] ], "path": [], "message": "Invalid input" } ] Current version 0.0.656 Update status You're already on the latest version. Last checked 2026/3/3 14:46:03

Chuck 4 days ago
Bug Reports
Channles 中使用 claude-sonnet-4-5 模型报错
❌ 错误: AI_TypeValidationError: Type validation failed: Value: {"id":"98927801-df65-4c8e-b59f-d0b9afebd575","model":"claude-sonnet-4-5-20250929","object":"chat.completion.chunk"}. Error message: [ { "code": "invalid_union", "errors": [ [ { "expected": "array", "code": "invalid_type", "path": [ "choices" ], "message": "Invalid input: expected array, received undefined" } ], [ { "expected": "object", "code": "invalid_type", "path": [ "error" ], "message": "Invalid input: expected object, received undefined" } ] ], "path": [], "message": "Invalid input" } ] Current version 0.0.656 Update status You're already on the latest version. Last checked 2026/3/3 14:46:03

Chuck 4 days ago
Bug Reports
关于MiniMax Coding Plan报错invalid params, invalid chat setting (2013)
经过多次测试,发现当多个role相同时就会报这个错误,例如: curl -X POST "https://api.minimaxi.com/v1/chat/completions" -H "Authorization: Bearer xxxxxxxxx" -H "Content-Type: application/json" -d '{"model":"MiniMax-M2.5","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"system","content":"Today is 2026-03-03."},{"role":"user","content":"hello"}]}' 经过分析alma的的请求,发现有两个system role

野草 4 days ago
Feature Request
关于MiniMax Coding Plan报错invalid params, invalid chat setting (2013)
经过多次测试,发现当多个role相同时就会报这个错误,例如: curl -X POST "https://api.minimaxi.com/v1/chat/completions" -H "Authorization: Bearer xxxxxxxxx" -H "Content-Type: application/json" -d '{"model":"MiniMax-M2.5","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"system","content":"Today is 2026-03-03."},{"role":"user","content":"hello"}]}' 经过分析alma的的请求,发现有两个system role

野草 4 days ago
Feature Request
alma coding-agent subcommand broken
alma coding-agent status and alma coding-agent run commands always fall through to the usage message, regardless of arguments provided. Root Cause In the coding-agent subcommand handler (located in cli/alma), there's an args index off-by-one error: if (cmd === 'coding-agent') { const sub = args[0]; // ← BUG: should be args[1] if (sub === 'status') { // ... } if (sub === 'run') { // ... for (let i = 1; i Why this is wrong: When user runs alma coding-agent status, the args array is ['coding-agent', 'status'] args[0] is 'coding-agent' (same as cmd), so sub never equals 'status' or 'run' The condition always fails and falls through to the usage message Comparison with Other Subcommands All other subcommands correctly use args[1]: // config subcommand if (cmd === 'config') { const subcmd = args[1]; // ✓ correct // ... } // provider subcommand if (cmd === 'provider') { const sub = args[1]; // ✓ correct // ... } // skill subcommand if (cmd === 'skill') { const sub = args[1] || 'list'; // ✓ correct // ... } How to Reproduce $ alma coding-agent status Usage: alma coding-agent status Check if Claude Code is available run [opts] "task" Delegate a coding task --dir Working directory (default: cwd) --yolo Skip permission prompts # Expected: should check Claude Code installation status # Actual: shows usage message and exits Fix Two lines need to be changed in the coding-agent handler: Line 1: Fix subcommand detection - const sub = args[0]; + const sub = args[1]; Line 2: Fix argument parsing in run handler - for (let i = 1; i < args.length; i++) { + for (let i = 2; i < args.length; i++) { The for loop needs to start at index 2 because: args[0] = 'coding-agent' args[1] = 'run' args[2] onwards = actual flags and task description Impact alma coding-agent status is completely broken alma coding-agent run is completely broken The coding-agent skill cannot function properly Verification After Fix $ alma coding-agent status Claude Code: installed (2.1.63) but NOT authenticated Run "claude" interactively to complete OAuth login # ✓ Works correctly Environment: macOS Alma version: (check with alma --version) Location: /Applications/Alma.app/Contents/Resources/cli/alma

喂,在吗? 4 days ago
Bug Reports
alma coding-agent subcommand broken
alma coding-agent status and alma coding-agent run commands always fall through to the usage message, regardless of arguments provided. Root Cause In the coding-agent subcommand handler (located in cli/alma), there's an args index off-by-one error: if (cmd === 'coding-agent') { const sub = args[0]; // ← BUG: should be args[1] if (sub === 'status') { // ... } if (sub === 'run') { // ... for (let i = 1; i Why this is wrong: When user runs alma coding-agent status, the args array is ['coding-agent', 'status'] args[0] is 'coding-agent' (same as cmd), so sub never equals 'status' or 'run' The condition always fails and falls through to the usage message Comparison with Other Subcommands All other subcommands correctly use args[1]: // config subcommand if (cmd === 'config') { const subcmd = args[1]; // ✓ correct // ... } // provider subcommand if (cmd === 'provider') { const sub = args[1]; // ✓ correct // ... } // skill subcommand if (cmd === 'skill') { const sub = args[1] || 'list'; // ✓ correct // ... } How to Reproduce $ alma coding-agent status Usage: alma coding-agent status Check if Claude Code is available run [opts] "task" Delegate a coding task --dir Working directory (default: cwd) --yolo Skip permission prompts # Expected: should check Claude Code installation status # Actual: shows usage message and exits Fix Two lines need to be changed in the coding-agent handler: Line 1: Fix subcommand detection - const sub = args[0]; + const sub = args[1]; Line 2: Fix argument parsing in run handler - for (let i = 1; i < args.length; i++) { + for (let i = 2; i < args.length; i++) { The for loop needs to start at index 2 because: args[0] = 'coding-agent' args[1] = 'run' args[2] onwards = actual flags and task description Impact alma coding-agent status is completely broken alma coding-agent run is completely broken The coding-agent skill cannot function properly Verification After Fix $ alma coding-agent status Claude Code: installed (2.1.63) but NOT authenticated Run "claude" interactively to complete OAuth login # ✓ Works correctly Environment: macOS Alma version: (check with alma --version) Location: /Applications/Alma.app/Contents/Resources/cli/alma

喂,在吗? 4 days ago
Bug Reports
Telegram 吞字问题原因与解决方案
结论(先给作者看的版本) 当前“吞首字/吞首 token”问题的直接根因仍是流式首段 part_add(text) 没有被累计进 accumulatedText。 之所以“之前说修了但现在还在复现”,是因为修复只出现在 index.pretty.js(可读文件),实际运行的 index.js(以及 app.asar 内 out/main/index.js)没有这段修复逻辑,所以线上行为没有真正改变。 现象回顾 典型表现:一句话开头被吃掉 1 个字或 1 个 token,例如: “对,现在...” 变成 “,现在...” “那就好...” 变成 “就好...” 已确认根因 在消息桥接层 handleMessageDelta 中,存在这几类增量: text_append text-delta / text_delta part_add 当首段内容出现在 part_add 且 part.type === "text" 时,如果不把 part.text 加入 accumulatedText,就会出现首字缺失。 核验证据 1) index.pretty.js 里有修复分支 index.pretty.js 中 3 个 bridge 的 handleMessageDelta 都有: else if ("part_add" === o.type && "text" === o.part?.type) { const e = o.part?.text || ""; e && (t.accumulatedText += e); } 出现位置: index.pretty.js:19986 index.pretty.js:22631 index.pretty.js:24219 2) 实际运行文件 index.js 没有对应逻辑 对 index.js 搜索: o.part?.text:无匹配 "part_add"===o.type&&"text"===o.part?.type:无匹配 3) app.asar 内运行文件与本地 index.js 完全一致(未带修复) sha256 对比: /Users/zzmini/Desktop/AI_APP/alma_worklog/index.js /tmp/alma-app-check-17700/app/out/main/index.js 两者哈希一致: 2cc6194e09a1dd13cacd3a0e7db5e2ae04c6712675f2d04a63024ec8370554c6 这说明当前运行中的 app.asar 用的是未含 part_add(text) 累计逻辑的代码。 为什么“执行了替换脚本”仍没生效 当前替换脚本.alma/scripts/replace_alma_app_asar.sh 是把以下文件拷进 asar: SOURCE_INDEX="$REPO_ROOT/index.js" SOURCE_FATIGUE="fatigueService-*.js" 问题在于:SOURCE_INDEX 本身没包含 part_add(text) 修复,所以替换后行为不变。 解决方案 A. 立即修复(建议) 把 index.pretty.js 中这段逻辑同步到真正运行的 index.js(或从源码重新构建出新的 index.js),然后再执行 asar 替换。 必须保证 3 个 bridge(Telegram / Discord / Feishu)的 handleMessageDelta 都包含: 处理 part_add + text:accumulatedText += part.text 兼容 text-delta 与 text_delta B. 脚本层加“生效校验”(防止假修复) 在 replace_alma_app_asar.sh 里加预检,若 SOURCE_INDEX 不含关键标记则直接失败退出,例如检查: 包含 o.part?.text 包含 text_delta 包含 text-delta 避免把“未修复版本”再次打进 app.asar。 C. 回归验证(最小集) 用至少 3 条前缀短词开头的回复压测: “你好,在呢...” “对,现在...” “那就好...” 同时对比: 线程归档文本 Telegram 实际发送文本 调试日志中的累计文本 要求三者开头一致,且不再出现首字丢失。 给作者的简短描述(可直接粘贴) 吞字根因是 message_delta 累计阶段漏处理 part_add(text);你们的修复目前只在 index.pretty.js,运行中的 index.js/app.asar 未包含该分支,所以问题持续复现;请把 part_add + text 累计逻辑落到实际运行构建产物并补上脚本预检与回归用例。 附录:修改脚本(replace_alma_app_asar.sh) #!/usr/bin/env bash set -euo pipefail APP_PATH="${APP_PATH:-/Applications/Alma.app}" ASAR_PATH="$APP_PATH/Contents/Resources/app.asar" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" SOURCE_INDEX="$REPO_ROOT/index.js" SOURCE_FATIGUE="$(ls "$REPO_ROOT"/fatigueService-*.js 2>/dev/null | head -n 1 || true)" if [[ ! -f "$ASAR_PATH" ]]; then echo "app.asar not found: $ASAR_PATH" exit 1 fi if [[ ! -f "$SOURCE_INDEX" ]]; then echo "source index.js not found: $SOURCE_INDEX" exit 1 fi if [[ -z "$SOURCE_FATIGUE" || ! -f "$SOURCE_FATIGUE" ]]; then echo "source fatigueService-*.js not found under: $REPO_ROOT" exit 1 fi asar() { npm_config_cache=/tmp/npm-cache npx --yes @electron/asar@3.2.17 "$@" } TS="$(date +%Y%m%d-%H%M%S)" WORK_DIR="${TMPDIR:-/tmp}/alma-asar-patch-$TS" BACKUP_PATH="${ASAR_PATH}.bak-${TS}" mkdir -p "$WORK_DIR" echo "Work dir: $WORK_DIR" echo "Backup: $BACKUP_PATH" cp "$ASAR_PATH" "$BACKUP_PATH" echo "Backup done." asar extract "$ASAR_PATH" "$WORK_DIR/app" echo "Extract done." TARGET_INDEX="$WORK_DIR/app/out/main/index.js" TARGET_FATIGUE="$(find "$WORK_DIR/app/out/main/chunks" -maxdepth 1 -type f -name 'fatigueService-*.js' | head -n 1 || true)" if [[ ! -f "$TARGET_INDEX" ]]; then echo "target index.js not found in extracted asar: $TARGET_INDEX" exit 1 fi if [[ -z "$TARGET_FATIGUE" || ! -f "$TARGET_FATIGUE" ]]; then echo "target fatigueService chunk not found in extracted asar." exit 1 fi cp "$SOURCE_INDEX" "$TARGET_INDEX" cp "$SOURCE_FATIGUE" "$TARGET_FATIGUE" echo "Patched files:" echo " - $TARGET_INDEX" echo " - $TARGET_FATIGUE" asar pack "$WORK_DIR/app" "$WORK_DIR/app.asar.new" echo "Repack done: $WORK_DIR/app.asar.new" if cp "$WORK_DIR/app.asar.new" "$ASAR_PATH"; then echo "Replaced app.asar successfully." else echo "Replace failed (permission?). Try:" echo " sudo cp \"$WORK_DIR/app.asar.new\" \"$ASAR_PATH\"" exit 1 fi if ! codesign --verify --deep --strict "$APP_PATH" >/dev/null 2>&1; then echo "Warning: codesign verify failed." echo "If app cannot launch, run:" echo " sudo codesign --force --deep --sign - \"$APP_PATH\"" else echo "codesign verify passed." fi echo "Done."

Pace.Z 5 days ago
Feature Request
Telegram 吞字问题原因与解决方案
结论(先给作者看的版本) 当前“吞首字/吞首 token”问题的直接根因仍是流式首段 part_add(text) 没有被累计进 accumulatedText。 之所以“之前说修了但现在还在复现”,是因为修复只出现在 index.pretty.js(可读文件),实际运行的 index.js(以及 app.asar 内 out/main/index.js)没有这段修复逻辑,所以线上行为没有真正改变。 现象回顾 典型表现:一句话开头被吃掉 1 个字或 1 个 token,例如: “对,现在...” 变成 “,现在...” “那就好...” 变成 “就好...” 已确认根因 在消息桥接层 handleMessageDelta 中,存在这几类增量: text_append text-delta / text_delta part_add 当首段内容出现在 part_add 且 part.type === "text" 时,如果不把 part.text 加入 accumulatedText,就会出现首字缺失。 核验证据 1) index.pretty.js 里有修复分支 index.pretty.js 中 3 个 bridge 的 handleMessageDelta 都有: else if ("part_add" === o.type && "text" === o.part?.type) { const e = o.part?.text || ""; e && (t.accumulatedText += e); } 出现位置: index.pretty.js:19986 index.pretty.js:22631 index.pretty.js:24219 2) 实际运行文件 index.js 没有对应逻辑 对 index.js 搜索: o.part?.text:无匹配 "part_add"===o.type&&"text"===o.part?.type:无匹配 3) app.asar 内运行文件与本地 index.js 完全一致(未带修复) sha256 对比: /Users/zzmini/Desktop/AI_APP/alma_worklog/index.js /tmp/alma-app-check-17700/app/out/main/index.js 两者哈希一致: 2cc6194e09a1dd13cacd3a0e7db5e2ae04c6712675f2d04a63024ec8370554c6 这说明当前运行中的 app.asar 用的是未含 part_add(text) 累计逻辑的代码。 为什么“执行了替换脚本”仍没生效 当前替换脚本.alma/scripts/replace_alma_app_asar.sh 是把以下文件拷进 asar: SOURCE_INDEX="$REPO_ROOT/index.js" SOURCE_FATIGUE="fatigueService-*.js" 问题在于:SOURCE_INDEX 本身没包含 part_add(text) 修复,所以替换后行为不变。 解决方案 A. 立即修复(建议) 把 index.pretty.js 中这段逻辑同步到真正运行的 index.js(或从源码重新构建出新的 index.js),然后再执行 asar 替换。 必须保证 3 个 bridge(Telegram / Discord / Feishu)的 handleMessageDelta 都包含: 处理 part_add + text:accumulatedText += part.text 兼容 text-delta 与 text_delta B. 脚本层加“生效校验”(防止假修复) 在 replace_alma_app_asar.sh 里加预检,若 SOURCE_INDEX 不含关键标记则直接失败退出,例如检查: 包含 o.part?.text 包含 text_delta 包含 text-delta 避免把“未修复版本”再次打进 app.asar。 C. 回归验证(最小集) 用至少 3 条前缀短词开头的回复压测: “你好,在呢...” “对,现在...” “那就好...” 同时对比: 线程归档文本 Telegram 实际发送文本 调试日志中的累计文本 要求三者开头一致,且不再出现首字丢失。 给作者的简短描述(可直接粘贴) 吞字根因是 message_delta 累计阶段漏处理 part_add(text);你们的修复目前只在 index.pretty.js,运行中的 index.js/app.asar 未包含该分支,所以问题持续复现;请把 part_add + text 累计逻辑落到实际运行构建产物并补上脚本预检与回归用例。 附录:修改脚本(replace_alma_app_asar.sh) #!/usr/bin/env bash set -euo pipefail APP_PATH="${APP_PATH:-/Applications/Alma.app}" ASAR_PATH="$APP_PATH/Contents/Resources/app.asar" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" SOURCE_INDEX="$REPO_ROOT/index.js" SOURCE_FATIGUE="$(ls "$REPO_ROOT"/fatigueService-*.js 2>/dev/null | head -n 1 || true)" if [[ ! -f "$ASAR_PATH" ]]; then echo "app.asar not found: $ASAR_PATH" exit 1 fi if [[ ! -f "$SOURCE_INDEX" ]]; then echo "source index.js not found: $SOURCE_INDEX" exit 1 fi if [[ -z "$SOURCE_FATIGUE" || ! -f "$SOURCE_FATIGUE" ]]; then echo "source fatigueService-*.js not found under: $REPO_ROOT" exit 1 fi asar() { npm_config_cache=/tmp/npm-cache npx --yes @electron/asar@3.2.17 "$@" } TS="$(date +%Y%m%d-%H%M%S)" WORK_DIR="${TMPDIR:-/tmp}/alma-asar-patch-$TS" BACKUP_PATH="${ASAR_PATH}.bak-${TS}" mkdir -p "$WORK_DIR" echo "Work dir: $WORK_DIR" echo "Backup: $BACKUP_PATH" cp "$ASAR_PATH" "$BACKUP_PATH" echo "Backup done." asar extract "$ASAR_PATH" "$WORK_DIR/app" echo "Extract done." TARGET_INDEX="$WORK_DIR/app/out/main/index.js" TARGET_FATIGUE="$(find "$WORK_DIR/app/out/main/chunks" -maxdepth 1 -type f -name 'fatigueService-*.js' | head -n 1 || true)" if [[ ! -f "$TARGET_INDEX" ]]; then echo "target index.js not found in extracted asar: $TARGET_INDEX" exit 1 fi if [[ -z "$TARGET_FATIGUE" || ! -f "$TARGET_FATIGUE" ]]; then echo "target fatigueService chunk not found in extracted asar." exit 1 fi cp "$SOURCE_INDEX" "$TARGET_INDEX" cp "$SOURCE_FATIGUE" "$TARGET_FATIGUE" echo "Patched files:" echo " - $TARGET_INDEX" echo " - $TARGET_FATIGUE" asar pack "$WORK_DIR/app" "$WORK_DIR/app.asar.new" echo "Repack done: $WORK_DIR/app.asar.new" if cp "$WORK_DIR/app.asar.new" "$ASAR_PATH"; then echo "Replaced app.asar successfully." else echo "Replace failed (permission?). Try:" echo " sudo cp \"$WORK_DIR/app.asar.new\" \"$ASAR_PATH\"" exit 1 fi if ! codesign --verify --deep --strict "$APP_PATH" >/dev/null 2>&1; then echo "Warning: codesign verify failed." echo "If app cannot launch, run:" echo " sudo codesign --force --deep --sign - \"$APP_PATH\"" else echo "codesign verify passed." fi echo "Done."

Pace.Z 5 days ago
Feature Request
alma config set providerId的问题
alma config set 会把值按冒号拆开,所以 providerId 里带冒号的 plugin:openai-codex-auth:openai-codex 会被误拆成 plugin。 导致无法设置该插件的gpt 5.2。 复现方法: alma config set telegram.defaultModel "plugin:openai-codex-auth:openai-codex:gpt-5.2" ❌ Provider "plugin" not found. Run 'alma providers' to see available providers.

Morgan Wan 6 days ago
Bug Reports
alma config set providerId的问题
alma config set 会把值按冒号拆开,所以 providerId 里带冒号的 plugin:openai-codex-auth:openai-codex 会被误拆成 plugin。 导致无法设置该插件的gpt 5.2。 复现方法: alma config set telegram.defaultModel "plugin:openai-codex-auth:openai-codex:gpt-5.2" ❌ Provider "plugin" not found. Run 'alma providers' to see available providers.

Morgan Wan 6 days ago
Bug Reports
Generation error Provider returned error messages.1.content.0: Invalid `signature` in `thinking` block
Claude Opus4.5 经常出现这个报错

naijoug 8 days ago
Bug Reports
Generation error Provider returned error messages.1.content.0: Invalid `signature` in `thinking` block
Claude Opus4.5 经常出现这个报错

naijoug 8 days ago
Bug Reports
google antigravity 插件需要更新了
提示:Your current version of Antigravity is out of date. Please visit https://antigravity.google/download to download and install the latest version. 辛苦老师能不能看看维护一下这些基础的功能。

哈士奇 9 days ago
Bug Reports
google antigravity 插件需要更新了
提示:Your current version of Antigravity is out of date. Please visit https://antigravity.google/download to download and install the latest version. 辛苦老师能不能看看维护一下这些基础的功能。

哈士奇 9 days ago
Bug Reports